home *** CD-ROM | disk | FTP | other *** search
/ Amiga Special: Spiele Hits / Hits-CD.iso / aminet / spiele / ammud1_1.lha / AmigaMUD / Src / Basics / graphics.m < prev    next >
Text File  |  1997-05-28  |  44KB  |  1,659 lines

  1. /*
  2.  * Amiga MUD
  3.  *
  4.  * Copyright (c) 1997 by Chris Gray
  5.  */
  6.  
  7. /*
  8.  * graphics.m - some stuff to do simple graphics.
  9.  */
  10.  
  11. private tp_graphics CreateTable()$
  12. use tp_graphics
  13.  
  14. define t_graphics p_rName1 CreateStringProp()$
  15. define t_graphics p_rName2 CreateStringProp()$
  16. define t_graphics p_rBackGroundPen CreateIntProp()$
  17. define t_graphics p_rForeGroundPen CreateIntProp()$
  18. define t_graphics p_rEdgePen CreateIntProp()$
  19. define t_graphics p_rDoorPen CreateIntProp()$
  20. define t_graphics p_rCursorX CreateFixedProp()$
  21. define t_graphics p_rCursorY CreateFixedProp()$
  22. define t_graphics p_rDrawAction CreateActionProp()$
  23. define t_graphics p_pStandardButtonsNow CreateBoolProp()$
  24.  
  25. define tp_graphics p_rAutoGraphics CreateBoolProp()$
  26. define tp_graphics p_rAutoDrawAction CreateActionProp()$
  27. define tp_graphics p_pXBase CreateIntProp()$
  28. define tp_graphics p_pYBase CreateIntProp()$
  29.  
  30. /* first, some names for the standard colours */
  31.  
  32. define t_graphics C_BLACK        0$
  33. define t_graphics C_DARK_GREY        1$
  34. define t_graphics C_MEDIUM_GREY     2$
  35. define t_graphics C_LIGHT_GREY        3$
  36. define t_graphics C_WHITE        4$
  37. define t_graphics C_BRICK_RED        5$
  38. define t_graphics C_RED         6$
  39. define t_graphics C_RED_ORANGE        7$
  40. define t_graphics C_ORANGE        8$
  41. define t_graphics C_GOLD        9$
  42. define t_graphics C_CADMIUM_YELLOW 10$
  43. define t_graphics C_LEMON_YELLOW   11$
  44. define t_graphics C_LIME_GREEN       12$
  45. define t_graphics C_GREEN       13$
  46. define t_graphics C_LIGHT_GREEN    14$
  47. define t_graphics C_DARK_GREEN       15$
  48. define t_graphics C_FOREST_GREEN   16$
  49. define t_graphics C_BLUE_GREEN       17$
  50. define t_graphics C_AQUA       18$
  51. define t_graphics C_LIGHT_AQUA       19$
  52. define t_graphics C_SKY_BLUE       20$
  53. define t_graphics C_LIGHT_BLUE       21$
  54. define t_graphics C_BLUE       22$
  55. define t_graphics C_DARK_BLUE       23$
  56. define t_graphics C_VIOLET       24$
  57. define t_graphics C_PURPLE       25$
  58. define t_graphics C_FLESH       26$
  59. define t_graphics C_PINK       27$
  60. define t_graphics C_TAN        28$
  61. define t_graphics C_BROWN       29$
  62. define t_graphics C_MEDIUM_BROWN   30$
  63. define t_graphics C_DARK_BROWN       31$
  64.  
  65. /*
  66.  * ColourMatch - a routine to map name to number at run-time
  67.  */
  68.  
  69. define t_graphics proc public ColourMatch(string name)int:
  70.  
  71.     if name == "grey" then
  72.     C_MEDIUM_GREY
  73.     elif name == "red" then
  74.     C_RED
  75.     elif name == "green" then
  76.     C_GREEN
  77.     elif name == "blue" then
  78.     C_BLUE
  79.     else
  80.     MatchName(
  81.         "black.grey;dark.grey;medium.grey;light.white.red;brick.red."
  82.         "red-orange.orange.gold.yellow;cadmium.yellow;lemon.green;lime."
  83.         "green.green;light.green;dark.green;forest.blue-green.aqua."
  84.         "aqua;light.blue;sky.blue;light.blue.blue;dark.violet.purple."
  85.         "flesh.pink.tan.brown.brown;medium.brown;dark", name)
  86.     fi
  87. corp;
  88.  
  89. /*
  90.  * ColourName - map from colour number to colour name
  91.  */
  92.  
  93. define t_graphics proc public ColourName(int colour)string:
  94.  
  95.     case colour
  96.     incase C_BLACK:        "black"
  97.     incase C_DARK_GREY:     "dark grey"
  98.     incase C_MEDIUM_GREY:    "medium grey"
  99.     incase C_LIGHT_GREY:    "light grey"
  100.     incase C_WHITE:        "white"
  101.     incase C_BRICK_RED:     "brick red"
  102.     incase C_RED:        "red"
  103.     incase C_RED_ORANGE:    "red-orange"
  104.     incase C_ORANGE:        "orange"
  105.     incase C_GOLD:        "gold"
  106.     incase C_CADMIUM_YELLOW:    "cadmium yellow"
  107.     incase C_LEMON_YELLOW:    "lemon yellow"
  108.     incase C_LIME_GREEN:    "lime green"
  109.     incase C_GREEN:        "green"
  110.     incase C_LIGHT_GREEN:    "light green"
  111.     incase C_DARK_GREEN:    "dark green"
  112.     incase C_FOREST_GREEN:    "forest green"
  113.     incase C_BLUE_GREEN:    "blue green"
  114.     incase C_AQUA:        "aqua"
  115.     incase C_LIGHT_AQUA:    "light aqua"
  116.     incase C_SKY_BLUE:        "sky blue"
  117.     incase C_LIGHT_BLUE:    "light blue"
  118.     incase C_BLUE:        "blue"
  119.     incase C_DARK_BLUE:     "dark blue"
  120.     incase C_VIOLET:        "violet"
  121.     incase C_PURPLE:        "purple"
  122.     incase C_FLESH:        "flesh"
  123.     incase C_PINK:        "pink"
  124.     incase C_TAN:        "tan"
  125.     incase C_BROWN:        "brown"
  126.     incase C_MEDIUM_BROWN:    "medium brown"
  127.     incase C_DARK_BROWN:    "dark brown"
  128.     default:            "<BAD-COLOUR>"
  129.     esac
  130. corp;
  131.  
  132. /*
  133.  * ShowKnownColours - print the colour names that we understand.
  134.  */
  135.  
  136. define t_graphics proc public ShowKnownColours()void:
  137.     int i;
  138.  
  139.     Print("Known colours are: ");
  140.     for i from C_BLACK upto C_MEDIUM_BROWN do
  141.     Print(ColourName(i));
  142.     Print(", ");
  143.     od;
  144.     Print(ColourName(C_DARK_BROWN));
  145.     Print("\n");
  146. corp;
  147.  
  148. /* tools for providing unique map group and effect id values */
  149.  
  150. /* some standard MapGroup values */
  151.  
  152. define t_graphics UNKNOWN_MAP_GROUP    -1$
  153. define t_graphics NO_MAP_GROUP        0$
  154. define t_graphics AUTO_MAP_GROUP    1$
  155.  
  156. define tp_graphics GraphicsThing CreateThing(nil)$
  157. define tp_graphics p_NextMapGroup CreateIntProp()$
  158. define tp_graphics p_NextEffectId CreateIntProp()$
  159. GraphicsThing@p_NextMapGroup := AUTO_MAP_GROUP + 1$
  160. GraphicsThing@p_NextEffectId := 1$
  161.  
  162. define t_graphics proc public NextMapGroup()int:
  163.     int g;
  164.  
  165.     g := GraphicsThing@p_NextMapGroup;
  166.     GraphicsThing@p_NextMapGroup := g + 1;
  167.     g
  168. corp;
  169.  
  170. define t_graphics proc public NextEffectId()int:
  171.     int id;
  172.  
  173.     id := GraphicsThing@p_NextEffectId;
  174.     GraphicsThing@p_NextEffectId := id + 1;
  175.     id
  176. corp;
  177.  
  178. /* next, some general titling stuff */
  179.  
  180. define tp_graphics ROOM_NAME_BOX_ID NextEffectId()$
  181. define tp_graphics NAME_BOX_COLS 18$
  182.  
  183. define t_graphics proc public DrawRoomNameBox()void:
  184.     int i, cols;
  185.  
  186.     if not KnowsEffect(nil, ROOM_NAME_BOX_ID) then
  187.     cols := GCols(nil) / 2;
  188.     DefineEffect(nil, ROOM_NAME_BOX_ID);
  189.     GAMovePixels(nil, cols + (cols - NAME_BOX_COLS * 8 - 12) / 2, 0);
  190.     for i from 0 upto 3 do
  191.         GSetPen(nil, i + 1);
  192.         GRectanglePixels(nil, NAME_BOX_COLS * 8 + 12 - 2 * i, 29 - 2 * i,
  193.                  false);
  194.         GRMovePixels(nil, 1, 1);
  195.     od;
  196.     EndEffect();
  197.     fi;
  198.     CallEffect(nil, ROOM_NAME_BOX_ID);
  199. corp;
  200.  
  201. define t_graphics proc public DrawRoomName(string s1, s2)void:
  202.     int len, cols, col;
  203.  
  204.     cols := GCols(nil) / 2;
  205.     col := cols + (cols - NAME_BOX_COLS * 8 - 12) / 2;
  206.     GSetPen(nil, C_BLACK);
  207.     GAMovePixels(nil, col + 6, 6);
  208.     GRectanglePixels(nil, NAME_BOX_COLS * 8, 17, true);
  209.     GSetPen(nil, C_GOLD);
  210.     len := Length(s2);
  211.     if len ~= 0 then
  212.     if len > NAME_BOX_COLS then
  213.         len := NAME_BOX_COLS;
  214.         s2 := SubString(s2, 0, NAME_BOX_COLS);
  215.     fi;
  216.     GAMovePixels(nil, col + 6 + (NAME_BOX_COLS - len) * 4, 21);
  217.     GText(nil, s2);
  218.     len := Length(s1);
  219.     if len > NAME_BOX_COLS then
  220.         len := NAME_BOX_COLS;
  221.         s1 := SubString(s1, 0, NAME_BOX_COLS);
  222.     fi;
  223.     GAMovePixels(nil, col + 6 + (NAME_BOX_COLS - len) * 4, 12);
  224.     GText(nil, s1);
  225.     else
  226.     len := Length(s1);
  227.     if len > NAME_BOX_COLS then
  228.         len := NAME_BOX_COLS;
  229.         s1 := SubString(s1, 0, NAME_BOX_COLS);
  230.     fi;
  231.     GAMovePixels(nil, col + 6 + (NAME_BOX_COLS - len) * 4, 17);
  232.     GText(nil, s1);
  233.     fi;
  234. corp;
  235.  
  236. define tp_graphics HORIZONTAL_DOOR_ID NextEffectId()$
  237. define tp_graphics VERTICAL_DOOR_ID NextEffectId()$
  238. define tp_graphics NORTHWEST_DOOR_ID NextEffectId()$
  239. define tp_graphics NORTHEAST_DOOR_ID NextEffectId()$
  240.  
  241. define t_graphics proc public HorizontalDoor()void:
  242.  
  243.     if not KnowsEffect(nil, HORIZONTAL_DOOR_ID) then
  244.     DefineEffect(nil, HORIZONTAL_DOOR_ID);
  245.     GRMove(nil, 0.0, -0.01);
  246.     GRDraw(nil, 0.0, 0.021);
  247.     GRMove(nil, 0.0, -0.01);
  248.     GRDraw(nil, 0.03125, 0.0);
  249.     GRMove(nil, 0.0, -0.01);
  250.     GRDraw(nil, 0.0, 0.021);
  251.     EndEffect();
  252.     fi;
  253.     CallEffect(nil, HORIZONTAL_DOOR_ID);
  254. corp;
  255.  
  256. define t_graphics proc public VerticalDoor()void:
  257.  
  258.     if not KnowsEffect(nil, VERTICAL_DOOR_ID) then
  259.     DefineEffect(nil, VERTICAL_DOOR_ID);
  260.     GRMove(nil, -0.003, 0.0);
  261.     GRDraw(nil, 0.007, 0.0);
  262.     GRMove(nil, -0.003, 0.0);
  263.     GRDraw(nil, 0.0, 0.081);
  264.     GRMove(nil, -0.003, 0.0);
  265.     GRDraw(nil, 0.007, 0.0);
  266.     EndEffect();
  267.     fi;
  268.     CallEffect(nil, VERTICAL_DOOR_ID);
  269. corp;
  270.  
  271. define t_graphics proc public NorthWestDoor()void:
  272.  
  273.     if not KnowsEffect(nil, NORTHWEST_DOOR_ID) then
  274.     DefineEffect(nil, NORTHWEST_DOOR_ID);
  275.     GRMove(nil, -0.003, -0.012);
  276.     GRDraw(nil, 0.007, 0.021);
  277.     GRMove(nil, -0.003, -0.012);
  278.     GRDraw(nil, -0.013, 0.041);
  279.     GRMove(nil, -0.003, -0.012);
  280.     GRDraw(nil, 0.007, 0.021);
  281.     EndEffect();
  282.     fi;
  283.     CallEffect(nil, NORTHWEST_DOOR_ID);
  284. corp;
  285.  
  286. define t_graphics proc public NorthEastDoor()void:
  287.  
  288.     if not KnowsEffect(nil, NORTHEAST_DOOR_ID) then
  289.     DefineEffect(nil, NORTHEAST_DOOR_ID);
  290.     GRMove(nil, 0.003, -0.01