home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 Mobile / Chip_Mobile_2001.iso / palm / spiele / battlete / battlete.exe / BTLOS / src / BTLOS-1.2.0-src.mpa next >
Text File  |  2000-06-06  |  10KB  |  442 lines

  1.  PMBTLOS-1.2.0-src.mpa é                 BusinessBusiness          PersonalPersonal          SCASCA          ProgramsPrograms              QCheckersQChecker           Game DesignGameDesi   ü        PocketC LibsPocketCL          LoloLolo              
  2. BattleTechBattleTe
  3.           AD&DAD&D           RPGsRPGs@                             ■≡╫           5           I// BTLOS
  4. // Theo Brinkman ⌐ 2000
  5. // 05-12-2000 : v. 1.2.0
  6.  
  7. include "BTLOS Controls"
  8. include "BTLOS Messages"
  9. include "BTLOS Plot"
  10. include "BTLOS Methods"
  11.  
  12. main()
  13. {
  14.  graph_on();
  15.  clear();
  16.  title("BT: Line-of-Sight");
  17.  initcontrols();
  18.  initcontents();
  19.  inititems();
  20.  drawcontrols();
  21.  messageloop();
  22. }                     ≡╫           6           Σ /$ BTLOS Controls
  23. // Theo Brinkman ⌐ 2000
  24. // 05-12-2000 : v. 1.2.0
  25.  
  26. include "Ccontrols.c"
  27.  
  28. Chandle  mnuMain, mnuApp, mnuLOS, lblStatus, lblElev, radElev, lblTerr, cmbTerrain, lstTerrain, btnSet, btnClear, btnPlot, lblRange, txtRange, imgPrev, imgNext;
  29. int Terrain[40];
  30.  
  31. SetStatus(string s)
  32. {
  33.   Csetcontent(lblStatus, s);
  34.   Cdraw(lblStatus);
  35. }
  36.  
  37. initcontrols()
  38. {
  39.   mnuMain = Cmenubar();
  40.   mnuApp = Cmenu(5, 50, 24);
  41.   mnuLOS = Cmenu(30, 55, 25);
  42.   Caddmenu(mnuMain, mnuApp);
  43.   Caddmenu(mnuMain, mnuLOS);
  44.   lblStatus = Clabel(95, 1, 65, 0, 0, 0);
  45.   lblElev = Clabel(3, 17, 42, 0, 2, 0);
  46.   radElev= Cradio(52, 17, 108, 12);
  47.   lblTerr = Clabel(3, 30, 35, 0, 2, 0);
  48.   cmbTerrain = Cdropdown(51, 30, 75, 8);
  49.   lstTerrain = Clistbox(5, 43, 150, 9);
  50.   btnSet = Cbutton(5, 147, 26, 12, 1, 4);
  51.   btnClear = Cbutton(36, 147, 26, 12, 1, 4);
  52.   btnPlot = Cbutton(67, 147, 26, 12, 1, 4);
  53.   lblRange = Clabel(103, 147, 30, 0, 2, 0);
  54.   txtRange = Clabel(133, 147, 11, 1, 2, 2);
  55.   imgPrev = Cimage(146, 148, 5, 10);
  56.   imgNext = Cimage(153, 148, 5, 10);
  57. }
  58.  
  59. initcontents()
  60. {
  61.   SetStatus("Loading...");
  62.   Csetcontent(lblElev, "Elevation:");
  63.   Csetcontent(lblTerr, "Terrain:");
  64.   Csettopic(mnuApp, "App");
  65.   Csettopic(mnuLOS, "LOS");
  66.   Csetcontent(btnSet, "Set");
  67.   Csetcontent(btnClear, "Clear");
  68.   Csetcontent(btnPlot, "Plot");
  69.   Csetcontent(lblRange, "Range:");
  70.   Csetcontent(txtRange, "1");
  71.   Csetcontent(imgPrev, "0508183878F8F878381808");
  72.   Csetcontent(imgNext, "0580C0E0F0F8F8F0E0C080");
  73. }
  74.  
  75. inititems()
  76. {
  77.   int i;
  78.  
  79.   Cadditem(mnuApp, "About");
  80.   Cadditem(mnuApp, "License");
  81.   Cadditem(mnuApp, "Exit");
  82.   Cadditem(mnuLOS, "Plot LOS");
  83.   Cadditem(mnuLOS, "Clear All");
  84.   for(i=0;i<8;i++)
  85.   {
  86.     Cadditem(radElev, i);
  87.   }
  88.   Cadditem(cmbTerrain, "Clear");
  89.   Cadditem(cmbTerrain, "Rubble");
  90.   Cadditem(cmbTerrain, "Light Woods");
  91.   Cadditem(cmbTerrain, "Heavy Woods");
  92.   for(i=0;i<4;i++)
  93.   {
  94.     Cadditem(cmbTerrain, "Water Depth " + i);
  95.   }
  96.   for(i=0;i<40;i++)
  97.   {
  98.     Cadditem(lstTerrain, "");
  99.     Terrain[i] = -1;
  100.   }
  101.   Csetcursel(radElev, 0);
  102.   Csetcursel(cmbTerrain, 0);
  103.   Csetcursel(lstTerrain, 0);
  104. }
  105.  
  106. drawcontrols()
  107. {
  108.   Cdraw(lblElev);
  109.   Cdraw(radElev);
  110.   Cdraw(lblTerr);
  111.   Cdraw(cmbTerrain);
  112.   Cdraw(lstTerrain);
  113.   Cdraw(btnSet);
  114.   Cdraw(btnClear);
  115.   Cdraw(btnPlot);
  116.   Cdraw(lblRange);
  117.   Cdraw(txtRange);
  118.   Cdraw(imgPrev);
  119.   Cdraw(imgNext);
  120.   SetStatus("Define Terrain");
  121. }
  122.  
  123. hidecontrols()
  124. {
  125.   Chide(lblElev);
  126.   Chide(radElev);
  127.   Chide(lblTerr);
  128.   Chide(cmbTerrain);
  129.   Chide(lstTerrain);
  130.   Chide(btnSet);
  131.   Chide(btnClear);
  132.   Chide(btnPlot);
  133.   Chide(lblRange);
  134.   Chide(txtRange);
  135.   Chide(imgPrev);
  136.   Chide(imgNext);
  137.   SetStatus("Plotting...");
  138. }
  139.  
  140. showcontrols()
  141. {
  142.   Cshow(lblElev);
  143.   Cshow(radElev);
  144.   Cshow(lblTerr);
  145.   Cshow(cmbTerrain);
  146.   Cshow(lstTerrain);
  147.   Cshow(btnSet);
  148.   Cshow(btnClear);
  149.   Cshow(btnPlot);
  150.   Cshow(lblRange);
  151.   Cshow(txtRange);
  152.   Cshow(imgPrev);
  153.   Cshow(imgNext);
  154.   SetStatus("Define Terrain");
  155. }
  156.                     ±╫           7           ≈/$ BTLOS Messages
  157. // Theo Brinkman ⌐ 2000
  158. // 05-12-2000 : v. 1.2.0
  159.  
  160. string version()
  161. {
  162.   return("v1.2.0");
  163. }
  164.  
  165. int UserIsSure(string prompt)
  166. {
  167.   return(confirm("Are you sure you want to " + prompt + "?"));
  168. }
  169.  
  170. About()
  171. {
  172.   alert("About BT: Line-of-Sight\n\nBT: Line-of-Sight is a line-of-sight plotter designed for use with the BattleTechÖ board game.  Simply define the terrain between the attacking 'Mech & its target, and tap 'Plot'.\n");
  173.   alert("How to Read the Plot:\n\nIf the lower dotted line passes through a ground elevation, the target has partial cover.  If the upper line passes through a ground elevation, line-of-sight is blocked.\n");
  174.   alert("Any other terrain intersected by either line effects the to-hit roll.\n\nOptional Rule: If terrain only intersected by the lower line adds more than +3, give the target partial cover.\n");
  175. }
  176.  
  177. Contact()
  178. {
  179.    alert("BT: Line-of-Sight " + version() + " \n\nTheo Brinkman ⌐ 2000\n\nfaelan@crosswinds.net\nwww.crosswinds.net/~faelan/#btlos");
  180. }
  181.  
  182. License()
  183. {
  184.     alert("BT: Line-of-Sight " + version() + " ⌐ 2000 Theo Brinkman\nBT: Line-of-Sight is free software, you are welcome to redistribute it under certain conditions; for details see the ReadMe file that came with this software.");
  185. }                     ±╫           8           g    /$ BTLOS Methods
  186. // Theo Brinkman ⌐ 2000
  187. // 05-12-2000 : v. 1.2.0
  188.  
  189. SetHex(int i)
  190. {
  191.   int e, t;
  192.  
  193.   if(i == -1)
  194.   {
  195.     e = 0;
  196.     t = 0;
  197.   }
  198.   else
  199.   {
  200.     e = i / 16;
  201.     t = i % 16;
  202.   }
  203.   if(Cgetcursel(radElev) != e)
  204.   {
  205.     Csetcursel(radElev, e);
  206.     Cdraw(radElev);
  207.   }
  208.   if(Cgetcursel(cmbTerrain) != t)
  209.   {
  210.     Csetcursel(cmbTerrain, t);
  211.     Cdraw(cmbTerrain);
  212.   }
  213. }
  214.  
  215. SetRange(int r)
  216. {
  217.   Csetcursel(lstTerrain, r-1);
  218.   Csetcontent(txtRange, (string)r);
  219.   SetHex(Terrain[r-1]);
  220.   Cdraw(txtRange);
  221. }
  222.  
  223. IncrementRange(int inc)
  224. {
  225.   SetRange((int)Cgetcontent(txtRange) + inc);
  226.   Cdraw(lstTerrain);
  227. }
  228.  
  229. int HexCode(int e, int t)
  230. {
  231.   return((e * 16) + t);
  232. }
  233.  
  234. ClearAll()
  235. {
  236.   int i;
  237.  
  238.   for(i=0;i<40;i++)
  239.   {
  240.     Csetcursel(lstTerrain, i);
  241.     Csetcontent(lstTerrain, "");
  242.     Terrain[i] = -1;
  243.   }
  244.   Csetcontent(txtRange, "1");
  245.   Csetcursel(radElev, 0);
  246.   Csetcursel(cmbTerrain, 0);
  247.   drawcontrols();
  248. }
  249.  
  250. on_mnuMain(string s)
  251. {
  252.  
  253.   if(s == "Plot LOS") PlotLOS();
  254.   else if(s == "About") About();
  255.   else if(s == "License") License();
  256.  else if(UserIsSure(s))
  257.   {
  258.     if(s == "Exit") exit();
  259.     else if(s == "Clear All") ClearAll();
  260.   }
  261. }
  262.  
  263. TerrainSet()
  264. {
  265.   Terrain[Cgetcursel(lstTerrain)] = HexCode(Cgetcursel(radElev), Cgetcursel(cmbTerrain));
  266.   Csetcontent(lstTerrain, "Level: " + Cgetcontent(radElev) + "; " + Cgetcontent(cmbTerrain));
  267. }
  268.  
  269. on_TerrainSet()
  270. {
  271.   TerrainSet();
  272.   Cdraw(lstTerrain);
  273. }
  274.  
  275. on_btnSet()
  276. {
  277.   TerrainSet();
  278.   IncrementRange(1);
  279. }
  280.  
  281. on_btnClear()
  282. {
  283.   Csetcontent(lstTerrain, "");
  284.   Terrain[Cgetcursel(lstTerrain)] = -1;
  285.   Cdraw(lstTerrain);
  286. }
  287.  
  288. on_lstTerrain()
  289. {
  290.   SetRange(Cgetcursel(lstTerrain) + 1);
  291. }
  292.  
  293. on_imgPrev()
  294. {
  295.   if((int)Cgetcontent(txtRange)>1)
  296.   IncrementRange(-1);
  297. }
  298.  
  299. on_imgNext()
  300. {
  301.   if((int)Cgetcontent(txtRange)<40) IncrementRange(1);
  302. }
  303.  
  304. messageloop()
  305. {
  306.   int e;
  307.   while(1)
  308.   {
  309.     e=event(1);
  310.     if(Cevent(cmbTerrain,e)) on_TerrainSet();
  311.     else if(Cevent(radElev,e)) on_TerrainSet();
  312.     else if(Cevent(mnuMain,e)) on_mnuMain(Cgetcontent(mnuMain));
  313.     else if(Cevent(btnSet,e)) on_btnSet();
  314.     else if(Cevent(btnClear,e)) on_btnClear();
  315.     else if(Cevent(btnPlot, e)) on_mnuMain("Plot LOS");
  316.     else if(Cevent(lstTerrain,e)) on_lstTerrain();
  317.     else if(Cevent(imgPrev,e)) on_imgPrev();
  318.     else if(Cevent(imgNext,e)) on_imgNext();
  319.   }
  320. }
  321.                     ±╫           9           ┐/$ BTLOS Plot
  322. // Theo Brinkman ⌐ 2000
  323. // 05-12-2000 : v. 1.2.0
  324.  
  325. Chandle lstBlock, btnDone;
  326.  
  327. FillBlockList()
  328. {
  329.   
  330.  
  331.   Cshow(lstBlock);
  332.   Cdraw(lstBlock);
  333. }
  334.  
  335. ClearScreen()
  336. {
  337.   Chide(lstBlock);
  338.   Chide(btnDone);
  339.   clearg();
  340. }
  341.  
  342. WaitForDone()
  343. {
  344.   Cshow(btnDone);
  345.   Cdraw(btnDone);
  346.   while(!Cevent(btnDone, event(1)))
  347.   {}
  348.   ClearScreen();
  349. }
  350.  
  351. init()
  352. {
  353.   lstBlock = Clistbox(5, 18, 150, 11);
  354.   btnDone = Cbutton(5, 147, 26, 12, 1, 4);
  355.   Csetcontent(btnDone, "Done");
  356.   ClearScreen();
  357. }
  358.  
  359. int GetRange()
  360. {
  361.   int i;
  362.  
  363.   for(i=39;Terrain[i] == -1;i--){}
  364.   return(i + 1);
  365. }
  366.  
  367. int GetHexSize(int r)
  368. {
  369.   if(r == 0) { r = 160; }
  370.   return(160 / r);
  371. }
  372.  
  373. int THeight(int T)
  374. {
  375.   if(T < 2) return(0);
  376.   else if(T < 4) return(2);
  377.   else return(4 - T);
  378. }
  379.  
  380. DrawLOS(int hs, int r)
  381. {
  382.   int s, f, mid, t;
  383.  
  384.   s = Terrain[0] / 16;
  385.   t = THeight(Terrain[0] % 16);
  386.   if(t < 0) { s = s + t; }
  387.   f = Terrain[r - 1] / 16;
  388.   t = THeight(Terrain[r - 1] % 16);
  389.   if(t < 0) { f = f + t; }
  390.   s = 99 - ((s * 8) + 16);
  391.   f = 99 - (f * 8);
  392.   mid = hs / 2;
  393.   t = r * hs - mid;
  394.   line(1, mid, s, mid, s + 16);
  395.   line(1, t, f, t, f - 16);
  396.   line(2, mid + 1, s, t - 1, f);
  397.   line(2, mid + 1, s, t - 1, f - 8);
  398. }
  399.  
  400. DrawHex(int h, int i, int hs)
  401. {
  402.   int e, t, x1, x2, y1, y2, y3;
  403.  
  404.   e = h / 16;
  405.   t = h % 16;
  406.   x1 = i * hs;
  407.   x2 = x1 + hs;
  408.   y1 = 100;
  409.   y2 = y1 - (e * 8);
  410.   y3 = y2 - (THeight(t) * 8);
  411.   if(e) rect(1, x1, y1, x2, y2, 0);
  412.   if(THeight(t)) frame(2, x1+1, y2+1, x2-1, y3-1, 0);
  413. }
  414.  
  415. DrawTerrain(int r)
  416. {
  417.   int i, hs;
  418.  
  419.   SetStatus("Drawing...");
  420.   hs = GetHexSize(r);
  421.   line(1, 0, 100, r * hs, 100);
  422.   for(i=0;i<r;i++)
  423.   {
  424.     Csetcursel(lstTerrain, i);;
  425.     DrawHex(Terrain[i], i, hs);
  426.   }
  427.   SetStatus("View Terrain");
  428.   DrawLOS(hs, r);
  429. }
  430.  
  431. PlotLOS()
  432. {
  433.   hidecontrols();
  434.   init();
  435. //  SkirtingRules();
  436.   DrawTerrain(GetRange());
  437.   WaitForDone();
  438.   FillBlockList();
  439.   WaitForDone();
  440.   showcontrols();
  441. }
  442.