home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 72 / IOPROG_72.ISO / soft / Codice / CRobots / Software / PCROB141.ZIP / LIB / PCROBOTS.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  1993-01-07  |  7.0 KB  |  360 lines

  1. unit PCRobots;
  2.  
  3. interface
  4.  
  5. const    ARENA_FREE=0;
  6.          ARENA_WALL=1;
  7.          ARENA_DAMAGE=3;
  8.          ARENA_REFUEL=30;
  9.          SHELL_MISSED=0;
  10.          SHELL_HIT_WALL=1;
  11.          SHELL_CLOSE_BLAST=2;
  12.          SHELL_NEAR_MISS=3;
  13.          SHELL_DIRECT_HIT=4;
  14.          SHELL_NOT_KNOWN=5;
  15.          SHELL_IN_FLIGHT=6;
  16.  
  17.  
  18. type      Pattern_buffer=array[0..5] of shortint;
  19.           Patbuf_ptr=^Pattern_buffer;
  20.           Map_buffer=array[0..8,0..8] of shortint;
  21.           Mapbuf_ptr=^Map_buffer;
  22.           Int_ptr=^integer;
  23.  
  24. procedure Swaptask;
  25. procedure Movement(speed,angle:integer);
  26. function  Scan(angle,res:integer;var range:integer):integer;
  27. function  Shoot(angle,range:integer):integer;
  28. procedure Getxy(var x,y:integer);
  29. function  Transmit(target,data:integer):integer;
  30. function  Receive(var source,data:integer):integer;
  31. function  Damage:integer;
  32. function  Speed:integer;
  33. function  Battery:integer;
  34. function  Ticks:longint;
  35. function  L_Sin(angle:integer):longint;
  36. function  L_Cos(angle:integer):longint;
  37. function  L_Tan(angle:integer):longint;
  38. function  L_Atan(ratio:longint):integer;
  39. function  L_Sqrt(value:longint):longint;
  40. procedure Set_Pattern(Buffer:Patbuf_ptr);
  41. procedure Debug_Flag(flag,setflag:integer);
  42. procedure Buy_Armour(armour_units:integer);
  43. procedure Buy_Shells(shells:word);
  44. function  Shells_Left:integer;
  45. procedure Get_Local_Map(ptr:MapBuf_ptr);
  46. procedure Invisibility(invis_flag:integer);
  47. function  Get_Shell_Status:integer;
  48. function  IsInvisible:integer;
  49. function  L_Atan2(y,x:integer):integer;
  50. function    Configure(speed,manouevre,range,armour,acceleration,invisibility:integer):integer;
  51. function Get_Robot_Id:integer;
  52. function Check_Iff(Id:integer):integer;
  53. function Get_Team_Id:integer;
  54. function Get_AShell_Status(ShellId:integer):integer;
  55. function Register_X(X:Int_ptr):integer;
  56. function Register_Y(Y:Int_ptr):integer;
  57.  
  58. implementation
  59.  
  60. uses DOS;
  61.  
  62. procedure Swaptask;
  63.  var regs:Registers;
  64. BEGIN
  65.  regs.ax:=0;
  66.  intr($e0,regs);
  67. END;
  68.  
  69. procedure Movement(speed,angle:integer);
  70.  var regs:Registers;
  71. BEGIN
  72.  regs.ax:=1;
  73.  regs.bx:=speed;
  74.  regs.cx:=angle;
  75.  intr($e0,regs);
  76. END;
  77.  
  78. function  Scan(angle,res:integer;var range:integer):integer;
  79.  var regs:Registers;
  80. BEGIN
  81.  regs.ax:=2;
  82.  regs.bx:=angle;
  83.  regs.cx:=res;
  84.  intr($e0,regs);
  85.  range:=regs.bx;
  86.  Scan:=regs.ax;
  87. END;
  88.  
  89. function  Shoot(angle,range:integer):integer;
  90.  var regs:Registers;
  91. BEGIN
  92.  regs.ax:=3;
  93.  regs.bx:=angle;
  94.  regs.cx:=range;
  95.  intr($e0,regs);
  96.  Shoot:=regs.ax;
  97. END;
  98.  
  99. procedure Getxy(var x,y:integer);
  100.  var regs:Registers;
  101. BEGIN
  102.  regs.ax:=$10;
  103.  intr($e0,regs);
  104.  x:=regs.bx;
  105.  y:=regs.cx;
  106. END;
  107.  
  108. function  Transmit(target,data:integer):integer;
  109.  var regs:Registers;
  110. BEGIN
  111.  regs.ax:=$11;
  112.  regs.bx:=target;
  113.  regs.cx:=data;
  114.  intr($e0,regs);
  115.  Transmit:=regs.ax;
  116. END;
  117.  
  118. function  Receive(var source,data:integer):integer;
  119.  var regs:Registers;
  120. BEGIN
  121.  regs.ax:=$12;
  122.  intr($e0,regs);
  123.  source:=regs.bx;
  124.  data:=regs.cx;
  125.  Receive:=regs.ax;
  126. END;
  127.  
  128. function  Damage:integer;
  129.  var regs:Registers;
  130. BEGIN
  131.  regs.ax:=$13;
  132.  intr($e0,regs);
  133.  Damage:=regs.bx;
  134. END;
  135.  
  136. function  Speed:integer;
  137.  var regs:Registers;
  138. BEGIN
  139.  regs.ax:=$14;
  140.  intr($e0,regs);
  141.  Speed:=regs.bx;
  142. END;
  143.  
  144. function  Battery:integer;
  145.  var regs:Registers;
  146. BEGIN
  147.  regs.ax:=$15;
  148.  intr($e0,regs);
  149.  Battery:=regs.bx;
  150. END;
  151.  
  152. function  Ticks:longint;
  153.  var regs:Registers;
  154. BEGIN
  155.  regs.ax:=$16;
  156.  intr($e0,regs);
  157.  Ticks:=(regs.bx shl 16)+regs.cx;
  158. END;
  159.  
  160. function  L_Sin(angle:integer):longint;
  161.  var regs:Registers;
  162. BEGIN
  163.  regs.ax:=$17;
  164.  regs.bx:=angle;
  165.  intr($e0,regs);
  166.  L_Sin:=((longint)regs.bx shl 16)+regs.cx;
  167. END;
  168.  
  169. function  L_Cos(angle:integer):longint;
  170.  var regs:Registers;
  171. BEGIN
  172.  regs.ax:=$18;
  173.  regs.bx:=angle;
  174.  intr($e0,regs);
  175.  L_Cos:=((longint)regs.bx shl 16)+regs.cx;
  176. END;
  177.  
  178. function  L_Tan(angle:integer):longint;
  179.  var regs:Registers;
  180. BEGIN
  181.  regs.ax:=$19;
  182.  regs.bx:=angle;
  183.  intr($e0,regs);
  184.  L_Tan:=((longint)regs.bx shl 16)+regs.cx;
  185. END;
  186.  
  187. function  L_Atan(ratio:longint):integer;
  188.  var regs:Registers;
  189. BEGIN
  190.  regs.ax:=$1a;
  191.  regs.bx:=(ratio shr 16);
  192.  regs.cx:=(ratio and $ffff);
  193.  intr($e0,regs);
  194.  L_Atan:=regs.ax;
  195. END;
  196.  
  197. function  L_Sqrt(value:longint):longint;
  198.  var regs:Registers;
  199. BEGIN
  200.  regs.ax:=$1b;
  201.  regs.bx:=(value shr 16);
  202.  regs.cx:=(value and $ffff);
  203.  intr($e0,regs);
  204.  L_Sqrt:=((longint)regs.bx shl 16)+regs.cx;
  205. END;
  206.  
  207. procedure Set_Pattern(Buffer:Patbuf_ptr);
  208.  var regs:Registers;
  209. BEGIN
  210.  regs.ax:=$1c;
  211.  regs.bx:=seg(Buffer^);
  212.  regs.cx:=ofs(Buffer^);
  213.  intr($e0,regs);
  214. END;
  215.  
  216. procedure Debug_Flag(flag,setflag:integer);
  217.  var regs:Registers;
  218. BEGIN
  219.  regs.ax:=$1d;
  220.  regs.bx:=flag;
  221.  regs.cx:=setflag;
  222.  intr($e0,regs);
  223. END;
  224.  
  225. procedure Buy_Armour(armour_units:integer);
  226.  var regs:Registers;
  227. BEGIN
  228.  regs.ax:=$1e;
  229.  regs.bx:=armour_units;
  230.  intr($e0,regs);
  231. END;
  232.  
  233. procedure Buy_Shells(shells:word);
  234.  var regs:Registers;
  235. BEGIN
  236.  regs.ax:=$1f;
  237.  regs.bx:=shells;
  238.  intr($e0,regs);
  239. END;
  240.  
  241. function  Shells_Left:integer;
  242.  var regs:Registers;
  243. BEGIN
  244.  regs.ax:=$20;
  245.  intr($e0,regs);
  246.  Shells_Left:=regs.bx;
  247. END;
  248.  
  249. procedure Get_Local_Map(ptr:MapBuf_ptr);
  250.  var regs:Registers;
  251. BEGIN
  252.  regs.ax:=$21;
  253.  regs.bx:=seg(ptr^);
  254.  regs.cx:=ofs(ptr^);
  255.  intr($e0,regs);
  256. END;
  257.  
  258. procedure Invisibility(invis_flag:integer);
  259.  var regs:Registers;
  260. BEGIN
  261.  regs.ax:=$22;
  262.  regs.bx:=invis_flag;
  263.  intr($e0,regs);
  264. END;
  265.  
  266. function  Get_Shell_Status:integer;
  267.  var regs:Registers;
  268. BEGIN
  269.  regs.ax:=$23;
  270.  intr($e0,regs);
  271.  Get_Shell_Status:=regs.bx;
  272. END;
  273.  
  274. function  IsInvisible:integer;
  275.  var regs:Registers;
  276. BEGIN
  277.  regs.ax:=$24;
  278.  intr($e0,regs);
  279.  IsInvisible:=regs.bx;
  280. END;
  281.  
  282. function  L_Atan2(y,x:integer):integer;
  283.  var regs:Registers;
  284. BEGIN
  285.  regs.ax:=$25;
  286.  regs.bx:=y;
  287.  regs.cx:=x;
  288.  intr($e0,regs);
  289.  L_Atan2:=regs.ax;
  290. END;
  291.  
  292. function Get_Robot_Id:integer;
  293.  var regs:Registers;
  294. BEGIN
  295.  regs.ax:=$26;
  296.  intr($e0,regs);
  297.  Get_Robot_Id:=regs.ax;
  298. END;
  299.  
  300. function Check_Iff(Id:integer):integer;
  301.  var regs:Registers;
  302. BEGIN
  303.  regs.ax:=$28;
  304.  regs.bx:=Id;
  305.  intr($e0,regs);
  306.  Check_Iff:=regs.ax;
  307. END;
  308.  
  309. function Get_Team_Id:integer;
  310.  var regs:Registers;
  311. BEGIN
  312.  regs.ax:=$2b;
  313.  intr($e0,regs);
  314.  Get_Team_Id:=regs.ax;
  315. END;
  316.  
  317. function Get_AShell_Status(ShellId:integer):integer;
  318.  var regs:Registers;
  319. BEGIN
  320.  regs.ax:=$2c;
  321.  regs.bx:=ShellId;
  322.  intr($e0,regs);
  323.  Get_AShell_Status:=regs.ax;
  324. END;
  325.  
  326. function Register_X(X:Int_ptr):integer;
  327.  var regs:Registers;
  328. BEGIN
  329.  regs.ax:=$2d;
  330.  regs.bx:=seg(X);
  331.  regs.cx:=ofs(X);
  332.  intr($e0,regs);
  333.  Register_X:=regs.ax;
  334. END;
  335.  
  336. function Register_Y(Y:Int_ptr):integer;
  337.  var regs:Registers;
  338. BEGIN
  339.  regs.ax:=$2e;
  340.  regs.bx:=seg(Y);
  341.  regs.cx:=ofs(Y);
  342.  intr($e0,regs);
  343.  Register_Y:=regs.ax;
  344. END;
  345.  
  346.  
  347. function    Configure(speed,manouevre,range,armour,acceleration,invisibility:integer):integer;
  348.  var regs:Registers;
  349. BEGIN
  350.  regs.ax:=$80;
  351.  regs.bx:=(speed and 7) + ((manouevre and 7) shl 4) + ((range and 7) shl 8)+
  352.         ((armour and 7) shl 12);
  353.  regs.cx:=(acceleration and 7) + ((invisibility and 1) shl 3);
  354.  
  355.  intr($e0,regs);
  356.  Configure:=regs.ax;
  357. END;
  358.  
  359. end.
  360.