SMAGIC.S 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944
  1. ********SMAGIC.S PROCESS POWERS AND TREASURES
  2. ; ZERODEF
  3. ; RSEG CODE6
  4. * GOTTREAS - CALLED WHEN BIRD PICKS UP A TREASURE
  5. GOTTREAS: STA TEMP4 ;COLSTAT OF TREASURE
  6. JSR DELTREAS ;COUNTS ON INDEX BEING IN X
  7. LDA #JWTUNE ;CALL TREASURE SOUND
  8. JSR TUNIN
  9. LDX PLAYER ;PUT TRVAL INDEX IN X
  10. BEQ IHAT3
  11. INX
  12. IHAT3: LDA PHASE
  13. BMI BNSTREAS ;ITS THE BONUS RACK
  14. LDA TRVAL1+1,X ;ADD DIRECTLY TO SCORE
  15. STA TENS
  16. LDA TRVAL1,X
  17. STA HUNDS
  18. JSR ADDSCORE
  19. BIT TRDSPFLG ;THIS FLAG SHIT INSURES THAT INITRSMP
  20. BMI NOINITT ;IS CALLED ONLY THE FIRST TIME THAT
  21. ;WE LAND ON A TREASURE
  22. JSR INITRSMP
  23. NOINITT: LDA TEMP4 ;GET OBJECT ID
  24. SEC
  25. SBC #TREASCOL
  26. ASL
  27. CLC
  28. ADC PLAYER
  29. TAY
  30. LDA JEWCNT,Y
  31. SED
  32. CMP #$9
  33. BEQ NOSTOCN ;IF NINE THEN PUNT
  34. CLC
  35. ADC #1
  36. NOSTOCN: CLD
  37. STA JEWCNT,Y
  38. NOTNOW: RTS
  39. BNSTREAS: LDA TRVAL1+1,X
  40. STA TEMP10 ;TENS
  41. LDA TRVAL1,X
  42. STA TEMP6 ;HUNDS
  43. LDA TEMP4 ;COLSTAT OF TREASURE
  44. SEC ;GET INDEX INTO TREASURE COUNTERS
  45. SBC #TREASCOL
  46. ASL
  47. CLC
  48. ADC PLAYER
  49. TAY
  50. LDX JEWCNT,Y
  51. SED
  52. TVMULT: LDA BNSTENS ;ADD TREASURE VALUE TO BONUS POINTS
  53. CLC
  54. ADC TEMP10
  55. STA BNSTENS
  56. LDA BNSHUNDS
  57. ADC TEMP6
  58. STA BNSHUNDS
  59. LDA BNSHTHS
  60. ADC #0
  61. STA BNSHTHS
  62. NOCARRY: DEX
  63. BNE TVMULT ;DO FOR EACH MULTIPLE
  64. CLD
  65. RTS
  66. * THIS CODE IS CALLED WHEN THE BIRD SHOOTS A TREASURE
  67. HITTREAS: ;COLSTAT OF TREASURE
  68. BIT PHASE
  69. BMI SAVEME ;IGNORE IF IN BONUS
  70. SEC ;ACCUMULATOR HAS COLSTAT OF TREASURE
  71. SBC #TREASCOL ;GET INDEX INTO TREASURE COUNTERS
  72. ASL
  73. CLC
  74. ADC PLAYER
  75. TAY
  76. LDA #1
  77. STA JEWCNT,Y ;RESET MULTIPLIER
  78. ; WE NEED A SOUND FOR THIS
  79. SAVEME: JMP DELTREAS ;THIS WILL RTS
  80. * INITIALIZE THE TREASURE DISPLAY
  81. INITRSMP: LDX #19
  82. TRMPLP: LDA TREASTBL,X
  83. STA BOTMSMAP,X
  84. DEX
  85. BPL TRMPLP
  86. LDA #$FF
  87. STA TRDSPFLG ; SET FLAG
  88. RTS
  89. TREASTBL: .dc.b BLANKCHR&$FF,V&$FF,AA&$FF,L&$FF,U&$FF,E&$FF
  90. .dc.b EQUALS&$FF,0,0,0
  91. .dc.b BLANKCHR&$FF,0,JEWCON&$FF,BLANKCHR&$FF,0
  92. .dc.b EGGCON&$FF,BLANKCHR&$FF
  93. .dc.b 0,BARCON&$FF,BLANKCHR&$FF
  94. * LDTREAS
  95. ZJEWLOC EQU 11
  96. ZEGGLOC EQU 14
  97. ZBARLOC EQU 17
  98. LDTREAS:
  99. BIT PHASE ;IF IN BONUS PHASE UNCONDITIONALLY LOAD
  100. BPL JUSTREAS ;BONUS STATE
  101. ;DO BONUS RACK DISPLAY
  102. LDA BNSTIMER ;LOAD STATE NOW
  103. STA PTR0 ;TEMP
  104. LSR ;FIRST THE TIMER
  105. LSR
  106. LSR
  107. LSR
  108. STA TOPMSMAP+6
  109. LDA PTR0
  110. AND #$0F
  111. STA TOPMSMAP+7
  112. * LDSCOREB ;LOADS DISPLAY FOR BONUS RACK SCORE
  113. LDSCOREB: LDX #5 ;SIX DIGITS
  114. LDY #2 ;THREE BYTES
  115. PEPSIB: LDA BNSHTHS,Y ;GET LOW TWO DIGITS OF BONUS SCORE
  116. PHA ;SAVE AWAY
  117. AND #$0F ;GET BOTTOM NIBBLE
  118. ; CLC ;NUMBERS START AT ZERO
  119. ; ADC #NUMBERS ;MAY BE UNNECESSARY
  120. STA TEMP0,X ;STORE AWAY FOR LATER
  121. DEX
  122. PLA ;GET BACK LOW BYTE AND GET NEXT DIGIT
  123. AND #$F0
  124. LSR
  125. LSR
  126. LSR
  127. LSR
  128. ; CLC
  129. ; ADC #NUMBERS
  130. STA TEMP0,X
  131. DEX
  132. DEY
  133. BPL PEPSIB ;DO UNTIL ALL 6 DIGITS (3 BYTES) ARE
  134. ;LOADED
  135. LDA #$69 ;SET OVERFLOW
  136. ADC #$69
  137. LDX #0 ;THIS ELIMINATES LEADING ZEROES
  138. LDA #BLANKCHR&$FF
  139. SPRITEB: LDY TEMP0,X
  140. BVC NOMORE0B
  141. BNE NOMORE0B ;NOT ZERO SO PUNT ON BLANKS
  142. STA TOPMSMAP+14,X
  143. BEQ NEXEXB
  144. NOMORE0B: TYA
  145. STA TOPMSMAP+14,X
  146. CLV
  147. NEXEXB: INX
  148. CPX #6
  149. BNE SPRITEB
  150. TYA
  151. BNE NOSTUF0B
  152. LDA #0 ;IF ZERO IS LEAST SIGNIFICANT DIGIT
  153. STA TOPMSMAP+19 ;THEN DISPLAY IT
  154. NOSTUF0B:
  155. JUSTREAS: BIT TRDSPFLG ;IF THIS IS STILL ZERO THEN WE DON'T
  156. BPL RTTS ;HAVE TO LOAD VALUES YET
  157. LDX PLAYER
  158. LDA JEWCNT,X ;LOAD MULTIPLIERS
  159. STA BOTMSMAP+ZJEWLOC
  160. LDA BARCNT,X
  161. STA BOTMSMAP+ZBARLOC
  162. LDA EGGCNT,X
  163. STA BOTMSMAP+ZEGGLOC
  164. TXA ;LOAD TREASURE VALUE
  165. BEQ IHATHIS
  166. INX
  167. IHATHIS: LDA TRVAL1+1,X
  168. STA TEMP0
  169. AND #$0F
  170. STA BOTMSMAP+9
  171. LDA TEMP0
  172. LSR
  173. LSR
  174. LSR
  175. LSR
  176. STA BOTMSMAP+8
  177. LDA TRVAL1,X
  178. AND #$0F
  179. STA BOTMSMAP+7
  180. LDA BOTMSMAP+7 ;DO LEADING ZERO SUPPRESSION
  181. BNE RTTS
  182. LDX #BLANKCHR&$FF
  183. STX BOTMSMAP+7
  184. RTTS: RTS
  185. INITBNS:: LDA #(-1)&$FF ;INIT OODLES OF BONUS THINGS
  186. STA PHASE
  187. LDX PLAYER
  188. SED
  189. LDA XTRBNSTM,X ;EXTRA BONUS TIME
  190. CLC
  191. ADC #$20 ;MINIMUM BONUS
  192. STA BNSTIMER
  193. CLD
  194. LDA #0
  195. STA XTRBNSTM,X
  196. LDA #0
  197. STA BNSTENS
  198. STA BNSHUNDS
  199. STA BNSHTHS
  200. BIT TRDSPFLG
  201. BMI LABEL42
  202. JSR INITRSMP ;INCASE IT ISN'T THERE INIT BOTTOM
  203. ;TREASURE MAP
  204. LABEL42:
  205. lda #$6F ;Force light blue for text in bonus
  206. sta P1C2SHDB ;round.
  207. LDY #19 ;DISPLAY
  208. BNLP: LDA BNINTBL,Y
  209. STA TOPMSMAP,Y
  210. DEY
  211. BPL BNLP
  212. LDA #38 ;CENTER TOP TREASURE MAP
  213. STA DLY+9
  214. RTS
  215. BNINTBL: .dc.b BLANKCHR&$FF,T&$FF,I&$FF,M&$FF,E&$FF
  216. .dc.b BLANKCHR&$FF,BLANKCHR&$FF
  217. .dc.b BLANKCHR&$FF,BLANKCHR&$FF,S&$FF,C&$FF
  218. .dc.b O&$FF,R&$FF,E&$FF,BLANKCHR&$FF
  219. .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF
  220. .dc.b BLANKCHR&$FF,BLANKCHR&$FF
  221. ENDBONUS: LDA BNSTENS
  222. STA TENS
  223. LDA BNSHUNDS
  224. STA HUNDS
  225. LDA BNSHTHS
  226. STA HUNTHOUS
  227. JSR ADDSCORE
  228. LDX PLAYER
  229. LDA #1 ;RESET MULTIPLIER FOR PLAYER
  230. STA JEWCNT,X
  231. STA BARCNT,X
  232. STA EGGCNT,X
  233. TXA ;SET FLAG BY DOING TXA
  234. BEQ IHAT4
  235. INX
  236. IHAT4: LDA #$50
  237. STA TRVAL1+1,X
  238. LDA #0
  239. STA TRVAL1,X
  240. RTS
  241. * EXTRA BONUS TIME POWER
  242. EXTRABNS: LDX PLAYER
  243. LDA XTRBNSTM,X
  244. CMP #$70 ;LIMIT TOTAL BONUS TO 90 SECONDS
  245. BEQ GOAWAY
  246. SED
  247. CLC
  248. ADC #$10 ;TEN SECONDS OF EXTRA BONUS
  249. STA XTRBNSTM,X
  250. CLD
  251. GOAWAY: RTS
  252. * ADDTRVAL UPDATES TREASURE VALUE
  253. ADDTRVAL: ;ASSUMES VALUE IN A
  254. SED
  255. LDX PLAYER
  256. BEQ IHAT2
  257. INX
  258. IHAT2: CLC
  259. ADC TRVAL1+1,X
  260. STA TRVAL1+1,X
  261. LDA #0
  262. ADC TRVAL1,X
  263. STA TRVAL1,X
  264. CLD
  265. RTS
  266. ********************************************************************************
  267. * *
  268. * *
  269. * HIEROS FOR THE MASSES *
  270. * *
  271. ********************************************************************************
  272. * GOTHIERO ;CALLED WHEN BIRD LANDS ON HIERO
  273. GOTHIERO:
  274. JSR GLOHIERO
  275. JMP PLAHIERO
  276. ;==============================================
  277. ; Game play for Hieros.
  278. ;==============================================
  279. ;
  280. ; IN: TEMP1 = Object ID.
  281. ;
  282. PLAHIERO:
  283. LDA TEMP0 ;FIRST WE STORE AWAY TYPE OF HIERO
  284. LDX PLAYER
  285. BNE DOPL2 ;CAREFUL! TEMP0 IS STORED IN GLOHIERO
  286. ; --- Player 1 ------------------------------------------
  287. LDY PGNUM,X
  288. CPY #3
  289. BNE NOTCLR
  290. LDY #0 ;ZERO OUT PGS AS WELL AS RESETING PGNUM
  291. STY PGS1+1
  292. STY PGS1+2
  293. NOTCLR: STA PGS1,Y ;PUT HIERO TYPE IN ARRAY
  294. JMP NEWNOP
  295. ; --- Player 2 ---------------------------
  296. DOPL2: LDY PGNUM,X
  297. CPY #3
  298. BNE NOTCLR2
  299. LDY #0 ;ZERO OUT PGS AS WELL AS PGNUM
  300. STY PGS2+1
  301. STY PGS2+2
  302. NOTCLR2: STA PGS2,Y
  303. ; --- For both players --------------------
  304. NEWNOP:
  305. LDA HIROSNDS,Y ;CALL SOUND FOR HIERO
  306. JSR TUNIN
  307. INY ;NOW DO A CHECK TO SEE IF ITS POWERTIME
  308. STY PGNUM,X ;CAN DO THIS AS PGNUM IS IN ZERO PAGE
  309. CPY #3 ;TIME FOR A POWER
  310. BNE RTSFHIRO
  311. JSR DETPOWER ;DETERMINE WHAT POWER IF ANY IT IS
  312. RTSFHIRO: RTS
  313. HIROSNDS: .dc.b NHIERO1,NHIERO2,NHIERO3
  314. ;============================
  315. ; Hiero gotten.
  316. ;============================
  317. ;
  318. DETPOWER:
  319. jsr CLRPFLGS ;Turn power flags off.
  320. lda #0
  321. ldx PLAYER ;ZERO OUT POWER
  322. sta PGPOWER,X
  323. sta ptCount ;Zero auto counter in case user hit button.
  324. sta PTIMER
  325. LDY PGSOFF,x
  326. LDX PGS1,Y ;FIRST HIERO
  327. LDA PGHASH1,X
  328. LDX PGS1+1,Y ;SECOND HIERO
  329. EOR PGHASH2,X
  330. LDX PGS1+2,Y ;THIRTD HIERO
  331. EOR PGHASH3,X
  332. LDX #0
  333. PGCMPLP: CMP PGDIV,X
  334. BCS GOTIT
  335. INX
  336. BPL PGCMPLP
  337. GOTIT: TXA
  338. LDA PGIDENT,X ;GET REAL POWER NUMBER
  339. jsr maskPower ;Limit powers to level and round.
  340. ; x and y saved, a = power allowed.
  341. LDX PLAYER
  342. STA PGPOWER,X
  343. LDA #$1F
  344. STA ROTATE ;START COLOR ROTATION
  345. RTS
  346. PGSOFF: .dc.b 0,3
  347. PGHASH1: .dc.b 0,$E9,$23,$A8,$53,$FD,$CE,$9F,$69
  348. PGHASH2: .dc.b 0,$8D,$9A,$C6,$08,$4B,$B3,$1C,$AA
  349. PGHASH3: .dc.b 0,$38,$EC,$A1,$7B,$55,$B9,$98,$43
  350. PGDIV: .dc.b 249 ;SLOWDOWN
  351. .dc.b 235 ;POINTS
  352. .dc.b 229 ;KILL EVERYTHING
  353. .dc.b 225 ;INVINCIBILITY
  354. .dc.b 220 ;POINTS
  355. .dc.b 212 ;KILL UWES
  356. .dc.b 204 ;AFTERBURNER
  357. .dc.b 197 ;POINTS
  358. .dc.b 195 ;EXTRA LIFE
  359. .dc.b 185 ;AIR FREEZE
  360. .dc.b 173 ;POINTS
  361. .dc.b 160 ;SUPERSONIC SHOTS
  362. .dc.b 154 ;HOVER
  363. .dc.b 133 ;POINTS
  364. .dc.b 126 ;EXTRA BONUS
  365. .dc.b 119 ;RANDOM HIEROS
  366. .dc.b 98 ;POINTS
  367. .dc.b 96 ;KILL SPHINX
  368. .dc.b 91 ;CAN'T HOP
  369. .dc.b 87 ;POINTS
  370. .dc.b 84 ;CAN'T FLY
  371. .dc.b 76 ;KILL MINIS
  372. .dc.b 71 ;POINTS
  373. .dc.b 58 ;KILL POTS
  374. .dc.b 50 ;POINTS
  375. .dc.b 46 ;CAN'T SWIM
  376. .dc.b 40 ;PARALIZE SPHINX
  377. .dc.b 35 ;POINTS
  378. .dc.b 31 ;DECOY
  379. .dc.b 23 ;AIR BOMB
  380. .dc.b 8 ;POINTS
  381. .dc.b 0 ;WARP
  382. PGIDENT: .dc.b 18 ;SLOWDOWN
  383. .dc.b 2 ;POINTS
  384. .dc.b 20 ;KILL EVERYTHING
  385. .dc.b 22 ;INVINCIBILITY
  386. .dc.b 2 ;POINTS
  387. .dc.b 8 ;KILL UWES
  388. .dc.b 17 ;AFTERBURNER
  389. .dc.b 2 ;POINTS
  390. .dc.b 1 ;EXTRA LIFE
  391. .dc.b 10 ;AIR FREEZE
  392. .dc.b 2 ;POINTS
  393. .dc.b 21 ;SUPERSONIC SHOTS
  394. .dc.b 16 ;HOVER
  395. .dc.b 2 ;POINTS
  396. .dc.b 7 ;EXTRA BONUS
  397. .dc.b 19 ;RANDOM HIEROS
  398. .dc.b 2 ;POINTS
  399. .dc.b 6 ;KILL SPHINX
  400. .dc.b 12 ;CAN'T HOP
  401. .dc.b 2 ;POINTS
  402. .dc.b 14 ;CAN'T FLY
  403. .dc.b 4 ;KILL MINIS
  404. .dc.b 2 ;POINTS
  405. .dc.b 5 ;KILL POTS
  406. .dc.b 2 ;POINTS
  407. .dc.b 13 ;CAN'T SWIM
  408. .dc.b 15 ;PARALIZE SPHINX
  409. .dc.b 2 ;POINTS
  410. .dc.b 11 ;DECOY
  411. .dc.b 3 ;AIR BOMB
  412. .dc.b 2 ;POINTS
  413. .dc.b 9 ;WARP
  414. * GIVPOWER ;CALLED WHEN RIGHT BUTTON IS PUSHED
  415. GIVPOWER:
  416. lda PTIMER ;Already got something cookn'?
  417. bne GIVEXIT
  418. LDX PLAYER
  419. LDA PGPOWER,X ;IF NO POWER THEN PUNT
  420. BEQ GIVEXIT
  421. TAY ;SET UP POWER ROUTINE THROUGH INDIRECT
  422. LDA #POWRUSE ;PLAY TUNE FOR POWER RELEASE
  423. JSR TUNIN
  424. LDA PWRROUTL,Y ;JUMP
  425. STA PTR0
  426. LDA PWRROUTH,Y
  427. STA PTR0+1
  428. JSR JMPIND ;GO TO APPROPRIATE POWER ROUTINE
  429. lda PTIMER
  430. bne GIVEXIT
  431. powerOff:
  432. LDA #0
  433. LDX PLAYER ;ZERO OUT POWER
  434. STA PGPOWER,X
  435. sta ptCount ;Zero auto counter in case user hit button.
  436. sta PTIMER
  437. LDA PGNUM,X ;IF THREE HIEROS THEN ZERO OUT NUMBER
  438. CMP #3 ;OF HIEROS
  439. BNE GIVEXIT
  440. LDA #0
  441. STA PGNUM,X
  442. LDX PLAYER ;ZERO OUT PGS AS WELL
  443. BEQ PPONE
  444. LDX #3
  445. PPONE: STA PGS1,X
  446. STA PGS1+1,X
  447. STA PGS1+2,X
  448. GIVEXIT: RTS
  449. * JMPIND
  450. JMPIND:
  451. JMP (PTR0) ;GO TO APPROPRIATE POWER ROUTINE
  452. JMPRTS: RTS
  453. PWRROUTL: .dc.b JMPRTS&$FF,XLIFE&$FF,JMPRTS&$FF,KAFLEAS&$FF
  454. .dc.b KAMINIS&$FF,KAFIRES&$FF
  455. .dc.b KILLSPHX&$FF,EXTRABNS&$FF,KAUWES&$FF
  456. .dc.b DOWARP&$FF,FRFLEAS&$FF
  457. .dc.b DODECOY&$FF
  458. .dc.b NOHOP&$FF,NOSWIM&$FF,NOFLY&$FF,DOPARA&$FF
  459. .dc.b DOHOVER&$FF,DOSPEED&$FF
  460. .dc.b DOSLOW&$FF,DOROUL&$FF,KAOMNI&$FF,DOQUIK&$FF,DOINVINC&$FF
  461. PWRROUTH: .dc.b JMPRTS/256,XLIFE/256,JMPRTS/256,KAFLEAS/256
  462. .dc.b KAMINIS/256,KAFIRES/256
  463. .dc.b KILLSPHX/256,EXTRABNS/256,KAUWES/256
  464. .dc.b DOWARP/256,FRFLEAS/256
  465. .dc.b DODECOY/256
  466. .dc.b NOHOP/256,NOSWIM/256,NOFLY/256,DOPARA/256
  467. .dc.b DOHOVER/256,DOSPEED/256
  468. .dc.b DOSLOW/256,DOROUL/256,KAOMNI/256,DOQUIK/256,DOINVINC/256
  469. NOTIMP: RTS
  470. * WARP POWER
  471. DOWARP: LDA #$FF
  472. STA WARP ;SET WARP FLAG
  473. sta PTIMER
  474. RTS
  475. * XLIFE ;JUST ADDS LIVES
  476. XLIFE:
  477. INC PL1LIVES,X ;X STILL HAS PLAYER NUMBER
  478. RTS
  479. * DECOY
  480. DODECOY: JSR CLRPFLGS
  481. LDA #30
  482. STA PTIMER
  483. JSR RANDOM
  484. AND #$7F
  485. CLC
  486. ADC #1
  487. STA NOHOMING
  488. RTS
  489. * PARALYSE
  490. DOPARA: LDA #(-1)&$FF
  491. STA PARASPHX
  492. RTS
  493. * SHACKLES/CANT HOP
  494. NOHOP: JSR CLRPFLGS
  495. LDA #20
  496. STA PTIMER
  497. LDA #(-1)&$FF
  498. STA CANTHOP
  499. RTS
  500. * POLYWATER/CANT SWIM
  501. NOSWIM: JSR CLRPFLGS
  502. LDA #20
  503. STA PTIMER
  504. LDA #(-1)&$FF
  505. STA CANTSWIM
  506. RTS
  507. * BROKEN WING/CANT FLY
  508. NOFLY: JSR CLRPFLGS
  509. LDA #20
  510. STA PTIMER
  511. LDA #(-1)&$FF
  512. STA CANTFLY
  513. RTS
  514. * HOVER
  515. DOHOVER: JSR CLRPFLGS
  516. LDA #20
  517. STA PTIMER
  518. LDA #(-1)&$FF
  519. STA HOVER
  520. RTS
  521. * SPEEDUP
  522. DOSPEED: JSR CLRPFLGS
  523. LDA #20
  524. STA PTIMER
  525. LDA #(-1)&$FF
  526. STA SPEEDUP
  527. RTS
  528. * SLOWDOWN
  529. DOSLOW: JSR CLRPFLGS
  530. LDA #20
  531. STA PTIMER
  532. LDA #(-1)&$FF
  533. STA SLOWDOWN
  534. RTS
  535. * ROULETTE
  536. DOROUL: LDX PLAYER
  537. LDA #2
  538. STA PGNUM,X
  539. LDY PGSOFF,X
  540. JSR RANDOM
  541. AND #7
  542. CLC
  543. ADC #1
  544. STA PGS1,Y
  545. JSR RANDOM
  546. AND #7
  547. CLC
  548. ADC #1
  549. STA PGS1+1,Y
  550. LDA #0
  551. STA PGS1+2,Y
  552. RTS
  553. * OMNICIDE - KILL ALL ENEMIES
  554. KAOMNI: JSR KAFLEAS
  555. JSR KAUWES
  556. JSR KAMINIS
  557. JSR KAFIRES
  558. JMP KILLSPHX
  559. * QUICK SHOTS
  560. DOQUIK: JSR CLRPFLGS
  561. LDA #6
  562. STA QUIKSHOT
  563. LDA #20
  564. STA PTIMER
  565. RTS
  566. * INVINCIBILITY
  567. DOINVINC: JSR CLRPFLGS
  568. LDA #20
  569. STA PTIMER
  570. LDA #(-1)&$FF
  571. STA INVINCBL
  572. LDHEXIT2: RTS
  573. * LDHIEROS
  574. * LOADS DISPLAY WITH CURRENT HEIROGLYPH STATUS
  575. LDHIEROS:
  576. BIT PHASE
  577. BMI LDHEXIT2 ;GO AWAY IF IN BONUS RACK
  578. LDA DEATH ;DO NOT LOAD HIERO STATE WHEN IN
  579. BEQ NOEXIT ;GAME OVER MODE
  580. LDA #$6F
  581. STA P1C2SHDB ;ON DEATH MAKE SURE DISPLAY IS STATIC
  582. RTS ;BYE BYE. TIME TO BLOW THIS CLAMBAKE
  583. NOEXIT:
  584. lda #$6F ;Default light blue color for hieros.
  585. sta P1C2SHDB
  586. LDX PLAYER
  587. LDY PGPOWER,X
  588. beq .ckHelp ;Is there a power?
  589. lda PTIMER ;Is power invoked?
  590. bne .powerOn
  591. lda ptCount ;Is auot power in effect?
  592. beq .ckAuto
  593. .powerOn:
  594. lda #$38 ;Make auto power red when in effect.
  595. sta P1C2SHDB
  596. jmp .noHelp
  597. .ckAuto:
  598. jsr checkAuto ;Is this an auto power?
  599. beq .noHelp ;Don't put up help if auto power.
  600. dec helpTime ;Time to switch power for help?
  601. lda helpTime
  602. and #$10
  603. bne .noHelp
  604. lda #$CA ;Light green.
  605. sta P1C2SHDB
  606. ldy #24 ;Force "HIT R BUTTN" message.
  607. bne .noHelp
  608. .ckHelp:
  609. lda RACK,x ;Put up help message only in
  610. bne .noHelp ;round 1.
  611. lda DIFCULTY ;Put up help message only in
  612. cmp #2 ;round 1 in Novice and Standard games.
  613. bcs .noHelp
  614. ldy #23 ;Force "GET 3 HIEROS" message.
  615. .noHelp:
  616. LDA LOPOWTXT,Y
  617. STA PTR0
  618. LDA HIPOWTXT,Y
  619. STA PTR0+1
  620. LDY #10
  621. POWLDLP: LDA (PTR0),Y
  622. STA TOPMSMAP+8,Y
  623. DEY
  624. BPL POWLDLP
  625. NOWHI: LDX PLAYER ;THIS SHIT YOU SEE HERE AND MANY PLACES
  626. BEQ ONER ;GETS THE APPROPRIATE PLAYER INDEX INTO
  627. LDX #3 ;X
  628. ONER:
  629. LDA PGS1,X
  630. ASL
  631. TAY
  632. LDA PGTABLE,Y
  633. STA TOPMSMAP+1
  634. LDA PGTABLE+1,Y
  635. STA TOPMSMAP+2
  636. LDA PGS1+1,X
  637. ASL
  638. TAY
  639. LDA PGTABLE,Y
  640. STA TOPMSMAP+3
  641. LDA PGTABLE+1,Y
  642. STA TOPMSMAP+4
  643. LDA PGS1+2,X
  644. ASL
  645. TAY
  646. LDA PGTABLE,Y
  647. STA TOPMSMAP+5
  648. LDA PGTABLE+1,Y
  649. STA TOPMSMAP+6
  650. LDA ROTATE ;ROTATE PALETTE FOR TOPMSMAP
  651. BEQ LDHEXIT ;UNLESS ZERO THEN PUNT
  652. CLC
  653. ADC #$0E ;SOMEWHAT CONFUSING BUT ROTATE FINISHES
  654. AND #$0F ;AT ZERO BUT WE WANT COLOR TO BE SET TO
  655. STA PTR0 ;$XF WHEN IT IS FINISHED
  656. LDA #$60 ;THE LAST TIME THIS GOES THROUGH ROTATE
  657. ;IS $01 THEREFORE WE ADD $0E TO GET $0F
  658. ORA PTR0 ;IT DOESN'T MATTER WHAT ROTATE STARTS
  659. STA P1C2SHDB ;AT
  660. DEC ROTATE ;DECREMENT ROTATE COUNTER
  661. LDHEXIT:
  662. RTS
  663. * TABLES FOR HIERO DISPLAY
  664. PGTABLE: .dc.b BLANKCHR&$FF,BLANKCHR&$FF,LCANE&$FF,(LCANE+1)&$FF
  665. .dc.b LMWS&$FF,(LMWS+1)&$FF
  666. .dc.b LFEATH&$FF,(LFEATH+1)&$FF
  667. .dc.b LEYE&$FF,(LEYE+1)&$FF,LAHNK&$FF,(LAHNK+1)&$FF
  668. .dc.b LBIRD&$FF,(LBIRD+1)&$FF
  669. .dc.b LSUN&$FF,(LSUN+1)&$FF,LBOWL&$FF,(LBOWL+1)&$FF
  670. * TABLES FOR POWER TEXT DISPLAY
  671. LOPOWTXT:
  672. .dc.b BLNK&$FF,POWER1&$FF,POWER2&$FF,POWER3&$FF,POWER4&$FF
  673. .dc.b POWER5&$FF,POWER6&$FF,POWER7&$FF,POWER8&$FF,POWER9&$FF
  674. .dc.b POWER10&$FF,POWER11&$FF,POWER12&$FF,POWER13&$FF
  675. .dc.b POWER14&$FF,POWER15&$FF,POWER16&$FF,POWER17&$FF
  676. .dc.b POWER18&$FF,POWER19&$FF,POWER20&$FF,POWER21&$FF
  677. .dc.b POWER22&$FF,power23&$FF,power24&$FF
  678. HIPOWTXT: .dc.b BLNK/256,POWER1/256,POWER2/256,POWER3/256
  679. .dc.b POWER4/256,POWER5/256
  680. .dc.b POWER6/256,POWER7/256,POWER8/256
  681. .dc.b POWER9/256,POWER10/256,POWER11/256
  682. .dc.b POWER12/256,POWER13/256,POWER14/256
  683. .dc.b POWER15/256,POWER16/256
  684. .dc.b POWER17/256,POWER18/256,POWER19/256
  685. .dc.b POWER20/256,POWER21/256
  686. .dc.b POWER22/256,power23/256,power24/256
  687. BLNK: .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF
  688. .dc.b BLANKCHR&$FF,BLANKCHR&$FF
  689. .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF
  690. .dc.b BLANKCHR&$FF,BLANKCHR&$FF
  691. .dc.b BLANKCHR&$FF
  692. POWER1: .dc.b E&$FF,X&$FF,T&$FF,R&$FF,AA&$FF,BLANKCHR&$FF
  693. .dc.b L&$FF,I&$FF,F&$FF,E&$FF
  694. .dc.b BLANKCHR&$FF
  695. POWER2: .dc.b BLANKCHR&$FF,BLANKCHR&$FF,P&$FF,O&$FF
  696. .dc.b I&$FF,N&$FF,T&$FF,S&$FF
  697. .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF
  698. POWER3: .dc.b BLANKCHR&$FF,AA&$FF,I&$FF,R&$FF,BLANKCHR&$FF
  699. .dc.b B&$FF,O&$FF,M&$FF,B&$FF
  700. .dc.b BLANKCHR&$FF,BLANKCHR&$FF
  701. POWER4: .dc.b BLANKCHR&$FF,K&$FF,I&$FF,L&$FF,L&$FF,BLANKCHR&$FF
  702. .dc.b M&$FF,I&$FF,N&$FF
  703. .dc.b I&$FF,S&$FF
  704. POWER5: .dc.b BLANKCHR&$FF&$FF,K&$FF,I&$FF,L&$FF,L&$FF
  705. .dc.b BLANKCHR&$FF,(P)&$FF,O&$FF,T&$FF,S&$FF
  706. .dc.b BLANKCHR&$FF
  707. POWER6: .dc.b K&$FF,I&$FF,L&$FF,L&$FF,BLANKCHR&$FF,S&$FF
  708. .dc.b P&$FF,H&$FF,I&$FF,N&$FF,X&$FF
  709. POWER7: .dc.b E&$FF,X&$FF,T&$FF,R&$FF,AA&$FF,BLANKCHR&$FF
  710. .dc.b B&$FF,O&$FF,N&$FF,U&$FF,S&$FF
  711. POWER8: .dc.b BLANKCHR&$FF,K&$FF,I&$FF,L&$FF,L&$FF,BLANKCHR&$FF
  712. .dc.b U&$FF,W&$FF,E&$FF
  713. .dc.b S&$FF,BLANKCHR&$FF
  714. POWER9: .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF,W&$FF
  715. .dc.b AA&$FF,R&$FF,P&$FF
  716. .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF
  717. POWER10: .dc.b AA&$FF,I&$FF,R&$FF,BLANKCHR&$FF,F&$FF,R&$FF,E&$FF
  718. .dc.b E&$FF,Z&$FF,E&$FF
  719. .dc.b BLANKCHR&$FF
  720. POWER11: .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF,D&$FF
  721. .dc.b E&$FF,C&$FF,O&$FF,Y&$FF
  722. .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF
  723. POWER12: .dc.b BLANKCHR&$FF,S&$FF,H&$FF,AA&$FF,C&$FF,K&$FF
  724. .dc.b L&$FF,E&$FF,S&$FF
  725. .dc.b BLANKCHR&$FF,BLANKCHR&$FF
  726. POWER13: .dc.b BLANKCHR&$FF,P&$FF,O&$FF,L&$FF,Y&$FF,W&$FF,AA&$FF
  727. .dc.b T&$FF,E&$FF,R&$FF
  728. .dc.b BLANKCHR&$FF
  729. POWER14: .dc.b B&$FF,R&$FF,O&$FF,K&$FF,E&$FF,N&$FF,BLANKCHR&$FF
  730. .dc.b W&$FF,I&$FF,N&$FF,G&$FF
  731. POWER15: .dc.b H&$FF,O&$FF,L&$FF,D&$FF,BLANKCHR&$FF,S&$FF,P&$FF
  732. .dc.b H&$FF,I&$FF,N&$FF,X&$FF
  733. POWER16: .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF,H&$FF,O&$FF
  734. .dc.b V&$FF,E&$FF,R&$FF
  735. .dc.b BLANKCHR&$FF,BLANKCHR&$FF,BLANKCHR&$FF
  736. POWER17: .dc.b BLANKCHR&$FF,S&$FF,P&$FF,E&$FF,E&$FF,D&$FF
  737. .dc.b BLANKCHR&$FF,U&$FF,P&$FF
  738. .dc.b BLANKCHR&$FF,BLANKCHR&$FF
  739. POWER18: .dc.b BLANKCHR&$FF,S&$FF,L&$FF,O&$FF,W&$FF,BLANKCHR&$FF
  740. .dc.b D&$FF,O&$FF,W&$FF
  741. .dc.b N&$FF,BLANKCHR&$FF
  742. POWER19: .dc.b BLANKCHR&$FF,R&$FF,O&$FF,U&$FF,L&$FF,E&$FF
  743. .dc.b T&$FF,T&$FF,E&$FF
  744. .dc.b BLANKCHR&$FF,BLANKCHR&$FF
  745. POWER20: .dc.b BLANKCHR&$FF,O&$FF,M&$FF,N&$FF,I&$FF,C&$FF
  746. .dc.b I&$FF,D&$FF,E&$FF
  747. .dc.b BLANKCHR&$FF,BLANKCHR&$FF
  748. POWER21: .dc.b Q&$FF,U&$FF,I&$FF,C&$FF,K&$FF,BLANKCHR&$FF
  749. .dc.b S&$FF,H&$FF,O&$FF,T&$FF,S&$FF
  750. POWER22: .dc.b I&$FF,N&$FF,V&$FF,I&$FF,N&$FF,C&$FF,I&$FF
  751. .dc.b B&$FF,L&$FF,E&$FF,BLANKCHR&$FF
  752. power23:
  753. .dc.b G&$FF,E&$FF,T&$FF,BLANKCHR&$FF,THREE3&$FF,BLANKCHR&$FF,H&$FF
  754. .dc.b I&$FF,E&$FF,R&$FF,O&$FF
  755. power24:
  756. .dc.b H&$FF,I&$FF,T&$FF,BLANKCHR&$FF,R&$FF,BLANKCHR&$FF,B&$FF
  757. .dc.b U&$FF,T&$FF,T&$FF,N&$FF
  758. CLRPFLGS: LDA #0 ;CLEAR TIMED POWER FLAGS
  759. LDX #TPNUMB-1
  760. CLRTPLP: STA TPSTART,X
  761. DEX
  762. BPL CLRTPLP
  763. LDA #3
  764. STA QUIKSHOT
  765. RTS
  766. ; END