home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / programming / gamesuite_1 / GameSuite / Examples / BolMaster / !BoLevel1 / SpSource < prev   
Encoding:
Text File  |  1995-08-12  |  3.4 KB  |  212 lines

  1. #name Code.Special
  2. #type &ffd
  3.  
  4. #include <Bolmaster$Path>Sources.Structures
  5. #include <Bolmaster$Path>Sources.Variables
  6. #include <Bolmaster$Path>Sources.Macros
  7. #include <Main$Path>Extasm.AsmLib.MYDIV
  8.  
  9. .processspecial
  10. ;process the special object table
  11. STMFD R13!,{R14}
  12. MOV R0,#0
  13. MOV R1,R12
  14. SWI Amnesia_Remote
  15. MOV R0,#specialtab
  16. MOV R1,#0
  17. LDR R2,[R12,#v.masterplot]
  18. SWI Amnesia_SelectTable
  19.  
  20. .looph
  21. SWI Amnesia_ProcessTable
  22. TST R2,#2
  23. BLNE userplot
  24. TST R2,#1<<8
  25. BLNE timerexp
  26. CMP R2,#0
  27. BNE looph
  28. LDMFD R13!,{PC}
  29.  
  30.  
  31. .timerexp
  32. ; timer expiry
  33. LDR R4,[R1,#4]
  34. TST R4,#1<<31
  35. BNE replace
  36. STMFD R13!,{R0-R2,R14}
  37. MOV R10,R1
  38. LDMIA R10,{R1-R4}
  39. MOV R5,#&02000100
  40. CMP R1,R5
  41. BEQ globe60
  42. .timerexpins
  43. LDMFD R13!,{R0-R2,PC}
  44.  
  45. .globe60
  46. MOV R0,#bultab
  47. MOV R1,#(bultab<<24)+4
  48. MOV R2,#%1011110101+(1<<19)
  49. LDR R5,[R12,#v.plxpos]
  50. LDR R6,[R12,#v.plypos]
  51. SUB R5,R5,R3
  52. SUB R6,R6,R4
  53. MOV R5,R5,ASR #6
  54. MOV R6,R6,ASR #6
  55. MOV R7,#&10000020
  56. SWI Amnesia_MakeObject
  57. B timerexpins
  58.  
  59. .replace
  60. STMFD R13!,{R0-R2,R14}
  61. MOV R10,R1
  62. LDMIA R10,{R1-R4}
  63. transdata R5,R3,R4
  64. STRB R1,[R5]
  65. MOV R0,#0
  66. STR R0,[R10];delete object
  67. LDMFD R13!,{R0-R2,PC}
  68.  
  69.  
  70. ;this routine is requested by the BMOG generator, and has an entry in the
  71. ;script file.  It's purpose is to plot a dalek and fire if necessary.
  72. ;dalek type is stored in the sprite entry
  73. ;
  74. .userplot
  75. .paintdalek
  76. STMFD R13!,{R0-R2,R14}
  77. MOV R10,R1
  78. LDMIA R10,{R1-R4}
  79. ;plot the dalek body
  80. LDR R0,[R12,#v.xplotofs]
  81. ADD R3,R3,R0
  82. LDR R0,[R12,#v.yplotofs]
  83. ADD R4,R4,R0
  84. MOV R1,R3,ASR #12
  85. MOV R2,R4,ASR #12
  86. LDR R0,[R10]
  87. SWI FastSpr_Plot
  88. LDMIA R10,{R1-R4}
  89. TST R2,#1<<24
  90. BNE paintrightdalek
  91. MOV R8,#1
  92. LDR R5,[R12,#v.plxpos]
  93. LDR R6,[R12,#v.plypos]
  94. SUB R5,R5,R3
  95. SUB R6,R6,R4
  96. CMP R5,#0
  97. BGE pldins
  98. MOV R5,R5,ASR #1
  99. RSB R5,R5,#0; make R5 positive
  100. CMP R6,R5
  101. MOVGT R8,#0
  102. CMN R6,R5
  103. MOVLT R8,#2
  104.  
  105. .pldins
  106. LDR R0,[R12,#v.xplotofs]
  107. ADD R3,R3,R0
  108. LDR R0,[R12,#v.yplotofs]
  109. ADD R4,R4,R0
  110. MOV R1,R3,ASR #12
  111. MOV R2,R4,ASR #12
  112. SUB R1,R1,#9
  113. SUB R2,R2,#3
  114. SUB R2,R2,R8,LSL #1
  115. MOV R0,#&04000006
  116. ADD R0,R0,R8,LSL #16
  117. SWI FastSpr_Plot
  118.  
  119. MOV R1,R3,ASR #12
  120. MOV R2,R4,ASR #12
  121. SUB R1,R1,#8
  122. SUB R2,R2,#12
  123. ;ADD R2,R2,R8,LSL #1
  124. MOV R0,#&04020004
  125. SUB R0,R0,R8,LSL #16
  126. SWI FastSpr_Plot
  127. .edgedalins
  128. LDR R0,[R10]
  129. AND R0,R0,#3
  130. MOV R1,#&7F
  131. ;check if we need to shoot.  Change this value for more/less firing.
  132. MOV R1,R1,LSR R0
  133. LDR R0,[R12,#v.timer]
  134. TST R0,R1
  135. BNE edgedalnofire
  136. LDMIA R10,{R1-R4}
  137. TST R2,#1<<24
  138. MOVEQ R5,#-2<<12
  139. MOVNE R5,#2<<12
  140. RSB R6,R8,#1
  141. MOV R6,R6,ASL #12
  142. BL dalekfire
  143. .edgedalnofire
  144. MOV R0,#0
  145. STR R0,[R10]
  146. LDMFD R13!,{R0-R2,PC}
  147.  
  148. .paintrightdalek
  149. MOV R8,#1
  150. LDR R5,[R12,#v.plxpos]
  151. LDR R6,[R12,#v.plypos]
  152. SUB R5,R5,R3
  153. SUB R6,R6,R4
  154. CMP R5,#0
  155. BLE plrins
  156. MOV R5,R5,ASR #1
  157. CMP R6,R5
  158. MOVGT R8,#0
  159. CMN R6,R5
  160. MOVLT R8,#2
  161.  
  162. .plrins
  163. LDR R0,[R12,#v.xplotofs]
  164. ADD R3,R3,R0
  165. LDR R0,[R12,#v.yplotofs]
  166. ADD R4,R4,R0
  167. MOV R1,R3,ASR #12
  168. MOV R2,R4,ASR #12
  169. ADD R1,R1,#9
  170. SUB R2,R2,#3
  171. SUB R2,R2,R8,LSL #1
  172. MOV R0,#&04020006
  173. SUB R0,R0,R8,LSL #16
  174. SWI FastSpr_Plot
  175.  
  176. MOV R1,R3,ASR #12
  177. MOV R2,R4,ASR #12
  178. ADD R1,R1,#8
  179. SUB R2,R2,#12
  180. ;ADD R2,R2,R8,LSL #1
  181. MOV R0,#&04020005
  182. SUB R0,R0,R8,LSL #16
  183. SWI FastSpr_Plot
  184. B edgedalins
  185.  
  186. .dalekfire
  187. STMFD R13!,{R0-R7,R14}
  188. SUB R4,R4,#6<<12
  189. CMP R5,#0
  190. ADDGT R3,R3,#5<<12
  191. SUBLT R3,R3,#5<<12
  192. ADD R3,R3,R5,ASL #2
  193. ADD R4,R4,R6,ASL #2
  194. MOVS R0,R5
  195. RSBMI R0,R0,#0
  196. MOVS R1,R6
  197. RSBMI R1,R1,#0
  198. MOV R2,#1
  199. CMP R5,#0
  200. RSBLT R2,R2,#0
  201. CMP R6,#0
  202. RSBLT R2,R2,#0
  203. CMP R0,R1,LSL #2
  204. MOVGE R2,#0
  205. MOV R1,#(bultab<<24)+(1<<16)
  206. SUB R1,R1,R2,ASL #16
  207. MOV R0,#bultab
  208. MOV R2,#%1011010101+(1<<19)+(1<<24)
  209. MOV R7,#&01000001
  210. SWI Amnesia_MakeObject
  211. LDMFD R13!,{R0-R7,PC}
  212.