home *** CD-ROM | disk | FTP | other *** search
/ ticalc.org / ticalc_org_rev_b.iso / archives / 85 / asm / source / zshell / tibobble.asm < prev    next >
Encoding:
Assembly Source File  |  2001-07-01  |  38.7 KB  |  2,173 lines

  1. #include "ti-85.h"
  2.  ;********** Name **************
  3.  .org 0 ;need this
  4.  .db "by Colin McCabe",0
  5.  ;********** 'Variables' *********
  6. ;Intro stuff
  7. kDinoPicStart =   $FC60
  8. kLastLevel =      22 ;last level +1
  9.  
  10. ;Player Constants
  11. kRealScreenDown =            51
  12. kFirstUnsafeScreenDown =     51
  13. kMaxDown =                   58
  14. kMaxDown_x2 =                116
  15. kMaxRight =                  121
  16. kMaxRight_x2 =               242
  17.  
  18. ;Player Variables
  19. ;TEXT_MEM =       $80DF
  20. lavab =           $80DF
  21. lavaa =           $80E0 
  22. playerOri =       $80E1
  23. playerJump =      $80E2
  24. deathFlag =       $80E3
  25. CurBoltAddr =     $80E4
  26. CurBoltNum =      $80E6
  27. kFirstBolt =      $80E7
  28. kNumBolts =       6 ;15
  29.  
  30. kFirstBubble =    $814F
  31. kMaxBubs =        6      ;4 b per bubble
  32. kFirstMonster =   $8107  ;leaving space for 10 bubbles
  33. kMaxMonsters =    5      ;kMaxBubs must be more than                         ;kMaxMonsters!!
  34.  
  35. CurBubbleAddr =   $8119  ;two-byte address of current addr for shooting bubs
  36. CurBubNum =       $8121  ;one-byte number of current 6-bub number
  37. CurRefire =       $8122
  38. RefillRefire =    $8123
  39. kTickTock =       $8124
  40. kTempByte =       $8125
  41. kInvincibility =  $8126
  42.  
  43. ;High Memory
  44. lives =           $8176
  45. LevelAddr =       $8177 ;2-byte value!
  46. level =           $8179
  47. blankByte =       $817A
  48. ;END OF TEXT_MEM  $8187
  49.  
  50. kMaxBubLifeD =    %00000001
  51. kMaxBubLifeE =    %00000000
  52. kBubZoom =        %11111110
  53. kBubShootTime =   16
  54.  
  55. _16pGRAPH_MEM =   $8650
  56. EndoGraph =       $8A40
  57. EndoVid =         $FFFF
  58. ;GRAPH_MEM =      $8641 ;This is practically the whole graph mem
  59. WorkMap =         $8641
  60. _1mBrickMap =     $8970
  61. _16mBrickMap =    $8961
  62. BrickMap =        $8971
  63. _16pBrickMap =    $8981
  64. LBrickMap =       $8981
  65. EndoBrickMap =    $8A31
  66. ;END OF GRAPH_MEM $8A41
  67.  
  68. ;TEXT_MEM2 =      $8A6B
  69. _8mBubbleMap =    $8A63 ;needed for technical reasons
  70. BubbleMap =       $8A6B
  71.  
  72. ;System Things
  73. textCursor =      $8333
  74.  
  75. ;VIDEO_MEM =      $FC00
  76. _16pVIDEO_MEM =   $FC10
  77. ;********** Initialization **********
  78.  ld a,4
  79.  out (5),a
  80. ;********** Program ***********
  81. ShowIntro:
  82.  ROM_CALL(CLEARLCD)
  83.  ld de,(PROGRAM_ADDR)
  84.  ld hl,IntroPic
  85.  add hl,de
  86.  ld de,kDinoPicStart
  87.  ld a,24
  88. DrawDinoLoop
  89.  ldi
  90.  ldi
  91.  ldi
  92.  ex de,hl
  93.  ld bc,13
  94.  add hl,bc
  95.  ex de,hl
  96.  sub 1
  97.  jr nz, DrawDinoLoop
  98.  ld hl,$0600
  99.  ld de,Sidebar
  100.  CALL_(ColinDisp)
  101.  ld hl,$0501
  102.  ld de,AuthorString
  103.  CALL_(ColinDisp)
  104.  ld hl,$0007
  105.  ld de,GreetString
  106.  CALL_(ColinDisp)
  107.  ld hl,$0907
  108.  ld de,GreetStringTwo
  109.  CALL_(ColinDisp)
  110.  ld hl,$1718
  111.  ld de,HelpString
  112.  CALL_(ColinDispSmall)
  113.  ld hl,$1D18
  114.  ld de,HOne
  115.  CALL_(ColinDispSmall)
  116.  ld hl,$2318
  117.  ld de,HTwo
  118.  CALL_(ColinDispSmall)
  119.  ld hl,$234A
  120.  ld de,HThree
  121.  CALL_(ColinDispSmall)
  122.  ld hl,$2918
  123.  ld de,HFour
  124.  CALL_(ColinDispSmall)
  125.  ld hl,$294A
  126.  ld de,HFive
  127.  CALL_(ColinDispSmall)
  128.  ld hl,$2F18
  129.  ld de,HSix
  130.  CALL_(ColinDispSmall)
  131.  
  132. WaitForInput:
  133.  call GET_KEY
  134.  cp K_EXIT
  135.  ret z
  136.  cp K_F2
  137.  jr z, NewGame
  138.  cp K_F1
  139.  jr nz, WaitForInput
  140. LoadGame:
  141.  CALL_(SetupFile)
  142.  ldir
  143.  jr InitGame
  144. NewGame:
  145.  CALL_(NewData)
  146. InitGame:
  147.  ld a,(level)
  148.  srl a
  149.  jr c,ContinueInit
  150.  srl a
  151.  jr c,ContinueInit
  152.  ld a,(lives)
  153.  inc a
  154.  ld (lives),a
  155. ContinueInit:
  156.  CALL_(DrawScreen)
  157.  CALL_(BlitFromBrickMap)
  158. ;ClearLowerScreen:
  159.  ld bc,240
  160.  ld hl,_16pBrickMap
  161.  CALL_(BlockClearMem)
  162. Scrolling:
  163.  ld b,64
  164.  ld hl,GRAPH_MEM
  165. ScrollLoop
  166.  push bc
  167.  push hl
  168.  ld hl,1000
  169.  CALL_(Delay)
  170.  ld de,VIDEO_MEM
  171.  ld hl,_16pVIDEO_MEM
  172.  ld bc,1008
  173.  ldir
  174.  pop hl
  175.  ld de,$FFF0
  176.  ld bc,$10
  177.  ldir
  178.  pop bc
  179.  djnz ScrollLoop
  180.  
  181. LoadBubbleMap:
  182.  ld hl,(LevelAddr)
  183.  ld bc,24
  184.  add hl,bc ;length of brick data
  185.  ld de,(PROGRAM_ADDR)
  186.  add hl,de
  187.  ex de,hl
  188.  ld hl, BubbleMap
  189.  ld b,16
  190. LoadOneByte:
  191.  ld a,(de)
  192.  inc de
  193.  push bc
  194.  ld b,4
  195. DecompressByte:
  196.  add a,a
  197.  ld c,%00000000
  198.  jr nc, ResumeBap
  199.  ld c,%00000010
  200. ResumeBap:
  201.  add a,a
  202.  jr nc, EndBap
  203.  inc c
  204. EndBap:
  205.  ld (hl),c
  206.  inc hl
  207.  djnz DecompressByte
  208.  pop bc
  209.  djnz LoadOneByte
  210.  
  211.  ld hl,TEXT_MEM         ;Clear the memory to avoid confusion
  212.  ld bc,150              ;this should be done _before_ any other loading
  213.  CALL_(BlockClearMem)
  214.  
  215. DecompressMonsters: ;the sleep of compression produces monsters!
  216.  ld hl, (LevelAddr)
  217.  ld bc,40
  218.  add hl,bc        ;level data+breeze data
  219.  ld de, (PROGRAM_ADDR)
  220.  add hl,de
  221.  ex de, hl
  222.  ld b, kMaxMonsters
  223.  ld hl, kFirstMonster
  224. MonsterDecoLoop:
  225.  ld a,(de)
  226.  inc de
  227.  push de
  228.  CALL_(ExpandHalfByte)
  229.  ld (hl),d
  230.  inc hl
  231.  ld (hl),e
  232.  inc hl
  233.  pop de
  234.  ld a,(de)
  235.  inc de
  236.  ld (hl),a
  237.  inc hl
  238.  djnz MonsterDecoLoop
  239.  
  240.  ld de,kFirstBubble     ;InitBubbles
  241.  ld (CurBubbleAddr),de
  242.  ld a,kMaxBubs
  243.  ld (CurBubNum),a
  244.  ld a,kNumBolts         ;InitBolts:
  245.  ld (CurBoltNum),a
  246.  ld bc, kFirstBolt
  247.  ld (CurBoltAddr),bc
  248.  
  249. SetPlayerData:
  250.  ld hl,(LevelAddr)
  251.  ld bc,50
  252.  add hl,bc
  253.  ld de,(PROGRAM_ADDR)
  254.  add hl,de
  255.  ld a,(hl)
  256.  CALL_(ExpandHalfByte)
  257.  ld a,d
  258.  ld (lavaa),a
  259.  ld a,e
  260.  ld (lavab),a
  261.  ld a,17        ;Set player refire rate
  262.  ld (refillRefire),a
  263.  ld a,30
  264.  ld (kInvincibility),a
  265.  CALL_(BlitFromBrickMap)
  266.  
  267. DrawTextSidebar:
  268.  CALL_(DrawScreen)
  269.  CALL_(RefreshIndicator)
  270.  
  271. StartCycle:        ;Every game cycle begins here, with a full blit to screen
  272.  CALL_(BlitFromBrickMap)
  273.  
  274. ChangeTickTock:
  275.  ld a,(kTickTock)
  276.  cpl
  277.  ld (kTickTock),a
  278.  ld a,(kInvincibility)
  279.  sub 1
  280.  jr c,MainLoop
  281.  ld (kInvincibility),a
  282.  
  283. MainLoop:       ;First, delay
  284.  ld hl,1000
  285.  CALL_(Delay)
  286.  
  287. LoadPlayerPos:
  288.  ld a,(playerJump)
  289.  sub 12
  290.  ld bc,(lavab)
  291.  CALL_C(Gravity)
  292.  ld (lavab),bc
  293.  
  294. LoadPlayerOrientation:
  295.  ld a,(playerOri)
  296.  jr c, EndLoadPlayerOrientation 
  297.  set 2,a                            ;the gravity sub gave us
  298.  ld (playerOri),a           ;a solid ground carry flag
  299. EndLoadPlayerOrientation:
  300.  
  301. Bubbles:
  302.  ld ix,kFirstBubble
  303.  ld b,kMaxBubs
  304. BubbleLoop:
  305.  push bc
  306. LoadBubblePos: ;yea! a useful shift byte ;)
  307.  ld b,(ix)
  308.  ld c,(ix+1)
  309.  ld d,(ix+2)
  310.  ld e,(ix+3)
  311. FindBubbleType:
  312.  ld a,d
  313.  cp %01000000
  314.  jr c, OlderBubble
  315. NewBubble:
  316.  ld a,e
  317.  sub 1
  318.  jr nc, ContinueWithNewBubble
  319.  ld d,kMaxBubLifeD
  320.  ld e,kMaxBubLifeE
  321.  ld a,d
  322.  jr OlderBubble
  323. ContinueWithNewBubble:
  324.  ld (ix+3),a
  325.  bit 0,d
  326.  ld a,b
  327.  jr nz,NewRight
  328. NewLeft:
  329.  sub 4
  330.  jr c, CheckEntrapment
  331.  ld b,a
  332.  jr CheckEntrapment
  333. NewRight:
  334.  add a,4
  335.  cp kMaxRight_x2
  336.  jr nc, CheckEntrapment
  337.  ld b,a
  338. CheckEntrapment:
  339.  push bc
  340.  ld d,(ix)
  341.  ld e,(ix+1)
  342.  srl d
  343.  srl e
  344.  ld b,kMaxMonsters
  345.  ld hl,kFirstMonster
  346. TrapLoop: ;Horizontal
  347.  ld a,(hl)
  348.  add a,8
  349.  sub d
  350.  jr c, NextAddThree
  351.  cp 16
  352.  jr nc, NextAddThree
  353.  inc hl
  354.  ld a,(hl) ;vertical
  355.  add a,7
  356.  sub e
  357.  jr c, NextAddTwo
  358.  cp 16
  359.  jr nc, NextAddTwo
  360. ActuallyTrapMonster:
  361.  inc hl
  362.  ld a,(hl)
  363.  and %00000011
  364.  jr z,NextAddOne
  365.  add a,a
  366.  add a,a
  367.  inc a
  368.  ld (ix+2),a
  369.  ld a,kMaxBubLifeE ;zzz
  370.  ld (ix+3),a
  371.  ld (hl),0
  372.  jr EndOfTraps
  373. NextAddThree:
  374.  inc hl
  375. NextAddTwo:
  376.  inc hl
  377. NextAddOne:
  378.  inc hl
  379.  djnz TrapLoop
  380. EndOfTraps:
  381.  pop bc
  382. FinishNew:
  383.  ld hl,SmallBubbleSprite
  384.  JUMP_(SaveBubblePos)
  385.  
  386. OlderBubble:
  387.  and %00000001
  388.  or e
  389.  JUMP_Z(EndLoopAndDelay)
  390.  dec de
  391.  ld (ix+2),d
  392.  ld (ix+3),e
  393.  ld a,d
  394.  and %00001100 ;keep out regular bubbles from this area
  395.  jr z, MoveBubble
  396. PossibleMonsterPop:
  397.  ld a,d
  398.  and %00000001
  399.  or e
  400.  jr nz, EndUnbubbling
  401.  ld hl,kFirstMonster
  402.  srl b
  403.  ld a,b
  404.  ld (kTempByte),a
  405.  ld b,kMaxMonsters
  406. UnbubbleMonsterLoop:
  407.  inc hl
  408.  inc hl
  409.  ld a,(hl)
  410.  and %00001111
  411.  jr nz, EndUnbubbleMonsterLoop
  412.  srl d
  413.  srl d
  414.  ld (hl),d
  415.  dec hl
  416.  srl c
  417.  ld (hl),c
  418.  dec hl
  419.  ld a,(kTempByte)
  420.  ld (hl),a
  421.  ld (ix+2),0
  422.  ld (ix+3),0
  423.  JUMP_(EndLoop)
  424. EndUnbubbleMonsterLoop:
  425.  inc hl
  426.  djnz UnbubbleMonsterLoop
  427.  JUMP_(EndLoop)
  428. EndUnbubbling:
  429. MoveBubble:
  430.  ld a,b
  431.  ld b,c
  432.  srl b
  433.  srl b
  434.  srl b
  435.  srl b
  436.  ld de, 8
  437.  ld hl,_8mBubbleMap
  438.  inc b
  439. FindBubbleOnMap:
  440.  add hl, de
  441.  djnz FindBubbleOnMap
  442.  ld e,a
  443.  srl e
  444.  srl e
  445.  srl e
  446.  srl e
  447.  srl e
  448.  add hl,de
  449.  ld b,a
  450.  ld e,(hl)
  451.  bit 1,e
  452.  jr nz, MoveVertical
  453. MoveHorizontal:
  454.  ld a,b
  455.  bit 0,e
  456.  jr nz,MoveRight
  457. MoveLeft:
  458.  sub 1
  459.  jr c,ContinueWBubble
  460.  ld a,b
  461.  CALL_(BubHorizontal)
  462.  jr nz, ContinueWBubble
  463.  dec b
  464.  jr ContinueWBubble
  465. MoveRight:
  466.  inc a
  467.  cp kMaxRight_x2
  468.  jr nc,ContinueWBubble
  469.  ld a,b
  470.  add a,7
  471.  CALL_(BubHorizontal)
  472.  jr nz, ContinueWBubble
  473.  inc b
  474.  jr ContinueWBubble
  475. MoveVertical:
  476.  ld a,c
  477.  bit 0,e
  478.  jr nz,MoveDown
  479. MoveUp:
  480.  push bc
  481.  sub 1
  482.  jr nc,ContinueWBubUp
  483.  ld a,kMaxDown_x2
  484. ContinueWBubUp:
  485.  sub 15
  486.  jr nc, ImmanuelKant
  487.  ld a,0
  488. ImmanuelKant:
  489.  ld c,a
  490.  ld a,b
  491.  srl a
  492.  srl c
  493.  CALL_(CheckTile)
  494.  pop bc
  495.  jr nz, ContinueWBubble
  496.  ld a,c
  497.  sub 1
  498.  ld c,a
  499.  jr nc,ContinueWBubble
  500.  ld c,kMaxDown_x2
  501.  jr ContinueWBubble
  502. MoveDown:
  503.  push bc
  504.  inc a
  505.  ld c,a
  506.  cp kMaxDown_x2
  507.  jr c,ContinueWBubDown
  508.  ld c,0
  509. ContinueWBubDown:
  510.  ld a,b
  511.  srl a
  512.  srl c
  513.  CALL_(CheckTile)
  514.  pop bc
  515.  jr nz, ContinueWBubble
  516.  ld a,c
  517.  inc a
  518.  ld c,a
  519.  cp kMaxDown_x2
  520.  jr c,ContinueWBubble
  521.  ld c,0
  522. ContinueWBubble:        ;pop/jump subroutine based on player loc
  523.  ld a,(lavaa)           ;horizontal check
  524.  add a,a
  525.  add a,15
  526.  sub b
  527.  jr c,EndContinueWithBubble
  528.  sub 32;sub 16
  529.  jr nc,EndContinueWithBubble
  530. ;HorzOk:
  531.  ld a,(lavab)
  532.  add a,a
  533.  add a,16
  534.  sub c
  535.  jr c,EndContinueWithBubble
  536.  cp 6
  537.  jr c,BoostPlayer
  538.  cp 32
  539.  jr nc,EndContinueWithBubble
  540. PopBubble:
  541.  ld (ix+2),0
  542.  ld (ix+3),0
  543.  JUMP_(EndLoop)
  544. BoostPlayer:
  545.  ld a,(playerOri)
  546.  or %00001100
  547.  ld (playerOri),a
  548. EndContinueWithBubble:
  549.  ld hl,RegularBubbleSprite
  550.  ld a,(ix+2)
  551.  cp %00000100
  552.  jr c,SaveBubblePos
  553.  ld hl,CaptureSprite
  554. SaveBubblePos:
  555.  ld (ix),b
  556.  ld (ix+1),c
  557. DrawBubble:
  558.  push ix
  559.  srl b
  560.  srl c
  561.  ld de,(PROGRAM_ADDR)
  562.  add hl,de
  563.  CALL_(PutSprite)
  564.  pop ix
  565.  jr EndLoop
  566. EndLoopAndDelay:
  567.  ld hl,100 ;470?200?
  568.  CALL_(Delay)
  569. EndLoop:
  570.  ld de,4
  571.  add ix,de ;prepare for next bubble
  572.  pop bc
  573.  ld a,b
  574.  sub 1
  575.  ld b,a
  576.  JUMP_NZ(BubbleLoop)
  577. EndBubbles:
  578.  
  579. Monsters:
  580.  ld a,kMaxMonsters
  581.  ld hl,kFirstMonster
  582. MonstrousLoop:
  583.  push af
  584.  push hl
  585.  ld b,(hl)
  586.  inc hl
  587.  ld c,(hl)
  588.  inc hl
  589.  ld a,(hl)
  590.  ld (kTempByte),a
  591.  and %00000011
  592.  JUMP_Z(EndMonsterLoop)
  593.  cp 1
  594.  JUMP_Z(CogMovement)
  595.  cp 3
  596.  JUMP_Z(BelugaMovement)
  597.  
  598. ; 0=off
  599. ; 1=cog
  600. ; 2=zapper
  601. ; 3=beluga
  602.  
  603. ZapperIntro:  ;bolt firing mechanism: only for zappers
  604.  ld a,(kTickTock)
  605.  or a
  606.  jr nz,ZapperMovement
  607.  ld a,r
  608.  and   %00001000
  609.  add a,%00010000
  610.  ld d,a
  611.  ld a,(kTempByte)
  612.  sub d
  613.  ld (kTempByte),a
  614.  jr nc,ZapperMovement
  615.  or %11111000
  616.  ld a,(kTempByte)
  617. MakeBolt:
  618.  ld hl,(CurBoltAddr)
  619.  ld (hl),b
  620.  inc hl
  621.  ld (hl),c
  622.  ld a,(CurBoltNum)
  623.  sub 1
  624.  jr z,ScrollToFirstBolt
  625.  ld (CurBoltNum),a
  626.  inc hl
  627.  ld (CurBoltAddr),hl
  628.  jr ZapperMovement
  629. ScrollToFirstBolt:
  630.  ld hl,kFirstBolt
  631.  ld (CurBoltAddr),hl
  632.  ld a,kNumBolts
  633.  ld (CurBoltNum),a
  634. ZapperMovement:
  635.  CALL_(Gravity)
  636. ZapCore:
  637.  ld a,(kTempByte)
  638.  bit 2,a
  639.  jr nz,MoveMonRight
  640.  CALL_(PlayerLeft)
  641.  JUMP_NC(EndMove)
  642.  ld a,(kTempByte)
  643.  set 2,a
  644.  ld (kTempByte),a
  645. MoveMonRight:
  646.  CALL_(PlayerRight)
  647.  JUMP_NC(EndMove)
  648.  ld a,(kTempByte)
  649.  res 2,a
  650.  ld (kTempByte),a
  651.  CALL_(PlayerLeft)
  652.  JUMP_(EndMove)
  653.  
  654. BelugaMovement:
  655.  ld a,r
  656.  and %00001001
  657.  jr z,ZapCore
  658.  ld a,(kTempByte)
  659.  and %00001000   ;bit 3 is up/down (first bit is 0)
  660.  jr z,AntiGravity
  661.  CALL_(Gravity)
  662.  jr c,ZapCore
  663. InvertBitThree:
  664.  ld a,(kTempByte)
  665.  xor %00001000    ;'or' first?
  666.  ld (kTempByte),a
  667.  jr ZapCore
  668. AntiGravity:
  669.  ld a,c
  670.  cp 10
  671.  jr c,AntiGravWrap
  672.  push bc
  673.  sub 7
  674.  ld c,a
  675.  ld a,(kTempByte)
  676.  and %00001000
  677.  ld a,b
  678.  jr z,AGravity
  679.  add a,8
  680. AGravity:
  681.  CALL_(CheckTile) ;checks a,c
  682.  pop bc
  683.  dec c
  684.  jr nc, ZapCore
  685.  inc c
  686.  jr InvertBitThree
  687. AntiGravWrap:
  688.  dec c
  689.  cp 1
  690.  jr nc,ZapCore
  691.  ld c,kMaxDown
  692.  jr ZapCore
  693.  
  694. CogMovement:
  695.  ld a,(kTempByte)
  696.  sub %1000
  697.  jr c, NormalCogMove
  698.  ld (kTempByte),a
  699.  cp %1100111
  700.  JUMP_C(ZapperMovement)
  701.  ld a,c
  702.  sub 1
  703.  ld c,a
  704.  JUMP_NC(ZapCore)
  705.  ld c,kMaxDown
  706.  JUMP_(ZapCore)
  707. NormalCogMove:
  708.  CALL_(Gravity)
  709.  JUMP_C(ZapCore)
  710.  ld a,r
  711.  and %00111111
  712.  cp 1
  713.  jr c, MakeCogDoJump
  714.  cp 2
  715.  jr c, ConsiderJump
  716.  cp 3
  717.  jr c, ReasonedTurn
  718.  cp 4
  719.  jr c, RandomTurn
  720.  JUMP_(ZapCore)
  721. RandomTurn:
  722.  ld a,(kTempByte)
  723.  xor %00000100
  724.  ld (kTempByte),a 
  725.  JUMP_(ZapCore)
  726. ConsiderJump:
  727.  ld a,(lavab)
  728.  cp c
  729.  JUMP_NC(ZapCore)
  730. MakeCogDoJump:
  731.  ld a,(kTempByte)
  732.  or %11100000
  733.  ld (kTempByte),a
  734.  JUMP_(ZapCore)
  735. ReasonedTurn:
  736.  ld a,(lavaa)
  737.  cp b
  738.  jr c, TurnCogLeft
  739. TurnCogRight:
  740.  ld a,(kTempByte)
  741.  set 2,a
  742.  ld (kTempByte),a
  743.  JUMP_(ZapCore)
  744. TurnCogLeft:
  745.  ld a,(kTempByte)
  746.  res 2,a
  747.  ld (kTempByte),a
  748.  JUMP_(ZapCore)
  749.  
  750. EndMove: ;in other words,
  751. CheckPlayerIntersection:
  752.  ld a,(lavaa)
  753.  add a,7
  754.  sub b
  755.  jr c,EndCheckPI
  756.  cp 14
  757.  jr nc,EndCheckPI
  758.  ld a,(lavab)
  759.  add a,7
  760.  sub c
  761.  jr c, EndCheckPI
  762.  cp 14
  763.  jr nc, EndCheckPI
  764. ReallyHitPlayer:
  765.  CALL_(SetDeathFlag)
  766. EndCheckPI:
  767. TransToMem:
  768.  pop hl
  769.  push hl
  770.  ld (hl),b
  771.  inc hl
  772.  ld (hl),c
  773.  inc hl
  774.  ld a,(kTempByte)
  775.  ld (hl),a
  776.  and %00000111
  777.  bit 0,a
  778.  jr z,DrawVolt
  779.  bit 1,a
  780.  jr nz,DrawBeluga
  781. DrawCog:
  782.  ld hl,CogPic
  783.  bit 2,a
  784.  jr z, DrawMonster
  785.  ld hl,CogRightPic
  786.  jr DrawMonster
  787. DrawVolt:
  788.  ld hl,VoltPic
  789.  jr DrawMonster
  790. DrawBeluga:
  791.  ld hl,BelugaPic
  792.  bit 2,a
  793.  jr z, DrawMonster
  794.  ld hl,BelugaRightPic
  795. DrawMonster:
  796.  ld de,(PROGRAM_ADDR)
  797.  add hl,de
  798.  CALL_(PutSprite)
  799. EndMonsterLoop:
  800.  pop hl
  801.  pop af
  802.  inc hl
  803.  inc hl
  804.  inc hl
  805.  sub 1
  806.  JUMP_NC(MonstrousLoop)
  807.  
  808. BoltRoutine:
  809.  ld b,kNumBolts
  810.  ld hl,kFirstBolt
  811. DoBolts:
  812.  push bc
  813.  ld b,(hl)
  814.  inc hl
  815.  ld a,(hl)
  816.  or a
  817.  jr z, NextBolt
  818.  add a,3
  819.  cp kMaxDown
  820.  jr c, CheckBoltColl
  821.  ld a,0
  822.  ld (hl),a
  823.  jr NextBolt
  824. CheckBoltColl:
  825.  ld (hl),a
  826.  ld c,a
  827.  ld a,(lavaa)
  828.  add a,5
  829.  sub b
  830.  jr c,EndCheckBolt
  831.  cp 10
  832.  jr nc, EndCheckBolt
  833.  cp 2
  834.  jr c, EndCheckBolt
  835.  ld a,(lavab)
  836.  add a,7
  837.  sub c
  838.  jr c, EndCheckBolt
  839.  cp 14
  840.  CALL_C(SetDeathFlag)
  841. EndCheckBolt:
  842. DrawBolt:
  843.  push hl
  844.  ld hl,BoltPic
  845.  ld de,(PROGRAM_ADDR)
  846.  add hl,de
  847.  CALL_(PutSprite)
  848.  pop hl
  849. NextBolt:
  850.  inc hl
  851.  pop bc
  852.  djnz DoBolts
  853.  
  854. LoadPlayerDataIn:
  855.  ld a,(playerOri)
  856.  ld e,a
  857.  ld bc,(lavab) 
  858.  
  859. ReadKeys:
  860.  ld a,%10111110 ; Check the arrow keys and 2nd, exit
  861.  out (1),a
  862.  in a,(1)
  863.  ld d,a
  864.  bit 1,d
  865.  CALL_Z(PlayerLeft)
  866.  bit 2,d
  867.  CALL_Z(PlayerRight)
  868.  bit 5,d
  869.  CALL_Z(MakeBubble)
  870.  bit 7,d
  871.  CALL_Z(PauseGame)
  872. BubbleRefireAdjustment:
  873.  ld a,(CurRefire)
  874.  or a
  875.  jr z,NoAdjust
  876.  dec a
  877.  ld (CurRefire),a
  878. NoAdjust:
  879.  bit 6,d
  880.  JUMP_Z(EndNSaveProgram)
  881.  
  882. Jump:
  883.  ld a,(playerJump) 
  884.  or a
  885.  jr nz, Ascend
  886.  bit 2,e             ;check on-ground bit
  887.  jr z, EndJump
  888. BeginJump:
  889.  bit 3,d
  890.  jr nz, EndJump      ;check up-key-is-down bit
  891.  ld a,24             ;ok, we really can jump- let's do it
  892. Ascend:
  893.  dec a
  894.  ld (playerJump),a
  895.  sub 12
  896.  jr nc,DoAscend
  897.  bit 3,e  ;superjump flag
  898.  jr nz,BeginJump
  899.  jr EndJump
  900. DoAscend:
  901.  dec c
  902.  ld a,c ;;don't know if necessary or not
  903.  sub 1
  904.  jr nc, EndJump
  905.  ld c, kMaxDown
  906. EndJump:
  907.  
  908. PlayerDataToMem:
  909.  ld (lavab),bc
  910.  ld a,e
  911.  and %00000010
  912.  ld (playerOri),a
  913. DrawPlayer:
  914.  ld hl,PlayerLeftSprite
  915.  bit 1,a
  916.  jr z, DrawPlayer2
  917.  ld hl,PlayerRightSprite
  918. DrawPlayer2:
  919.  ld de,(PROGRAM_ADDR)
  920.  add hl,de
  921.  CALL_(PutSprite)
  922.  
  923. BlitWorkToScreen:
  924.  ld hl,WorkMap
  925.  ld de,VIDEO_MEM
  926.  ld bc,832 ;896 ;b from graph to screen
  927.  ldir
  928.  
  929. LevelCheck:
  930.  ld a,r
  931.  and %00001111
  932.  CALL_Z(LevelDoneCheck)
  933.  jr z, IncLevel
  934. CheckForDeath:
  935.  ld a,(deathFlag)
  936.  or a
  937.  JUMP_Z(StartCycle)
  938.  
  939. ;******************* Subroutines *******************;
  940.  CALL_(FlashScreen)
  941.  ld hl,50000
  942.  CALL_(Delay)
  943.  CALL_(FlashScreen)
  944.  ld a,(lives)
  945.  sub 1
  946.  ld (lives),a
  947.  ld a,0
  948.  ld (deathFlag),a
  949.  JUMP_NZ(SetPlayerData)
  950.  CALL_(NewData)
  951.  jr Save
  952.  
  953. EndNSaveProgram:
  954.  ld a,(lives)
  955.  sub 1
  956.  ld (lives),a
  957.  CALL_Z(NewData)
  958. Save:
  959.  CALL_(SetupFile)
  960.  ex de,hl
  961.  ldir
  962.  ld a,(ZS_BITS) ;must tell zshell to recalc the checksum
  963.  set 0,a
  964.  ld (ZS_BITS),a
  965.  
  966. EndProgram:  ;This one you should figure out yourself
  967.  call GET_KEY
  968.  call STORE_KEY; Clear the key buffer
  969.  ret
  970.  
  971. IncLevel:
  972.  ld a,(level)
  973.  inc a
  974.  cp kLastLevel
  975.  jr z, EndProgram ;Display message later?
  976.  ld (level),a
  977.  ld hl,(levelAddr)
  978.  ld bc,51
  979.  add hl,bc
  980.  ld (levelAddr),hl
  981.  JUMP_(InitGame)
  982.  
  983. PauseGame:
  984.  push de
  985.  ld hl,$0103 ;0
  986.  ld de,PauseString
  987.  CALL_(ColinDisp)
  988.  pop de ;extra call to GET_KEY eliminated
  989. PauseLoop:
  990.  call GET_KEY
  991.  cp K_ENTER
  992.  ret z
  993.  jr PauseLoop
  994.  
  995. FlashScreen:    ;Invert Screen
  996.  ld hl,VIDEO_MEM
  997.  dec hl ;yuck!
  998.  ld bc,1024
  999. FlashLoop:
  1000.  inc hl
  1001.  dec bc
  1002.  ld a,(hl)
  1003.  cpl
  1004.  ld (hl),a 
  1005.  ld a,c
  1006.  or b
  1007.  ret z
  1008.  jr FlashLoop
  1009.  
  1010. PlayerLeft:
  1011.  ld a,b
  1012.  sub 1
  1013.  res 1,e
  1014.  ret c
  1015.  push bc
  1016.  push de
  1017.  CALL_(CheckTile)
  1018.  pop de
  1019.  pop bc
  1020.  ret c
  1021.  dec b
  1022.  ret
  1023.  
  1024. PlayerRight:
  1025.  set 1,e
  1026.  ld a,b
  1027.  inc a
  1028.  cp kMaxRight
  1029.  jr nc,Retwcarry
  1030.  push bc
  1031.  push de
  1032.  add a,7
  1033.  CALL_(CheckTile)
  1034.  pop de
  1035.  pop bc
  1036.  ret c
  1037.  inc b
  1038.  ret
  1039. Retwcarry:
  1040.  scf
  1041.  ret
  1042.  
  1043. CheckTile: ;checks the tile at a,c
  1044.  srl a    ;carry flag is on if the block is clear
  1045.  srl a
  1046.  srl a
  1047.  ld b,c
  1048.  ld c,a
  1049.  srl b
  1050.  srl b
  1051.  ld de, $10
  1052.  ld hl, _16mBrickMap
  1053.  inc b
  1054. GetTileLoop:
  1055.  add hl,de
  1056.  djnz GetTileLoop
  1057.  add hl,bc
  1058.  ld a,(hl)
  1059.  or a
  1060.  ret z
  1061.  scf
  1062.  ret
  1063.  
  1064. PutSprite: ; Puts a sprite pointed to by HL at B,C
  1065.  ld e,8
  1066. ScrollUpCheck:
  1067.  ld a,6
  1068.  sub c
  1069.  jr c, ScrollDownCheck
  1070.  ld d,0
  1071.  ld e,a
  1072.  inc e
  1073.  add hl,de
  1074.  ld e,c
  1075.  inc e
  1076.  ld c,7
  1077.  jr StartActualPS
  1078. ScrollDownCheck:
  1079.  ld a,kRealScreenDown
  1080.  sub c
  1081.  jr nc, StartActualPS
  1082.  add a,8
  1083.  ld e,a
  1084. StartActualPS: 
  1085.  ld d,8
  1086.  ld a,70
  1087.  sub c
  1088.  ret c
  1089.  push de
  1090.  ld c,a
  1091.  push hl
  1092.  ROM_CALL(FIND_PIXEL)
  1093.  ld de,WorkMap
  1094.  add hl,de
  1095.  pop ix
  1096.  pop bc  ;pop number of pixels each way
  1097. PS_NewRow:
  1098.  push bc
  1099.  ld d,(ix)
  1100.  inc ix
  1101.  push af
  1102.  push hl
  1103. PS_NewCol:
  1104.  rl d
  1105.  ld e,a
  1106.  jr nc,PS_NextPixel
  1107.  or (hl)
  1108.  ld (hl),a
  1109.  jr PS_NextPixel
  1110. PS_NextPixel:
  1111.  ld a,e
  1112.  rrca
  1113.  jr nc,PS_SameByte
  1114.  inc hl
  1115. PS_SameByte:
  1116.  djnz PS_NewCol
  1117.  pop hl
  1118.  pop af
  1119.  ld de,16
  1120.  add hl,de
  1121.  pop bc
  1122.  dec c
  1123.  jr nz,PS_NewRow
  1124.  ret
  1125.  
  1126. Gravity:
  1127.  ld a,c                     ;Check if creature is outside bounds
  1128.  cp kFirstUnsafeScreenDown
  1129.  jr c, BeginBrickTests
  1130.  inc c
  1131.  cp kMaxDown
  1132.  jr c, EndGravityButRememberItWasDone
  1133.  ld c,0
  1134.  jr EndGravityButRememberItWasDone
  1135. BeginBrickTests:
  1136.  sub 3 ;remember, rows 0-7 are offscreen
  1137.  srl a
  1138.  jr c, DoGravity
  1139.  srl a
  1140.  jr c, DoGravity
  1141.  push bc
  1142.  ld c,b
  1143.  ld b,a
  1144.  srl c
  1145.  jr c, TwoLeftCarry
  1146.  srl c
  1147.  jr c, OneLeftCarry
  1148.  srl c
  1149.  jr c, NoneLeftCarry
  1150.  jr LoadBrickData ;well, a won't be zero, and we'll only load one byte
  1151. TwoLeftCarry:     ;while checking block data
  1152.  srl c
  1153. OneLeftCarry:
  1154.  srl c
  1155. NoneLeftCarry:
  1156.  ld a,0         ;we can safely use a as a flag register
  1157. LoadBrickData:  ;w/value of zero because zeros already weeded out
  1158.  ld hl, _16mBrickMap
  1159.  ld de, $10
  1160.  inc b
  1161. FindVertLoop:
  1162.  add hl, de
  1163.  djnz FindVertLoop ;after this, b is 0
  1164.  add hl, bc
  1165. CheckBlocks:
  1166.  pop bc
  1167.  ld d,a
  1168.  or a
  1169.  jr z,InterblockCase
  1170. IntrablockCase:
  1171.  ld a,(hl)
  1172.  or a
  1173.  jr nz, DoGravity
  1174.  ld de,$10
  1175.  add hl,de
  1176.  ld a,(hl)
  1177.  or a
  1178.  jr nz, EndGravity
  1179.  jr DoGravity
  1180. InterblockCase:
  1181.  ld d,(hl)
  1182.  inc hl
  1183.  ld e,(hl)
  1184.  ld a,d
  1185.  or e
  1186.  jr nz,DoGravity
  1187.  ld de,$0F
  1188.  add hl,de
  1189.  ld d,(hl)
  1190.  inc hl
  1191.  ld e,(hl)
  1192.  ld a,d
  1193.  or e
  1194.  jr nz,EndGravity
  1195. DoGravity:
  1196.  inc c
  1197. EndGravityButRememberItWasDone:
  1198.  SCF
  1199. EndGravity:
  1200.  ret   ;nothing to see here
  1201.  
  1202. DrawScreen:       ;This destroys pretty much every register ;)
  1203.  ld ix, (LevelAddr)
  1204.  ld bc, (PROGRAM_ADDR)
  1205.  add ix, bc
  1206.  ld de, LBrickMap
  1207.  ld b,12 ;13
  1208. StartRow:
  1209.  ld h,(ix)
  1210.  ld l,(ix+1)      ;oh well, might as well pretend the shift byte is useful
  1211.  inc ix 
  1212.  inc ix
  1213.  ld c,b
  1214.  ld b,16
  1215. StartColumn:
  1216.  add hl, hl       ;a good way to shift 16 bits left
  1217.  ld a,0
  1218.  jr nc, BrickLoop
  1219.  ld a,$FF
  1220. BrickLoop:
  1221.  ld (de),a
  1222.  inc de
  1223.  djnz StartColumn
  1224.  ld b,c
  1225.  djnz StartRow
  1226.  ret
  1227.  
  1228. BlitFromBrickMap:  ;expand BrickMap to playing field
  1229.  ld hl,EndoBrickMap  ;first/last row thing
  1230.  ld bc,16
  1231.  ld de,BrickMap
  1232.  ldir
  1233. ActualBlit:
  1234.  ld hl,BrickMap
  1235.  ld de,WorkMap
  1236.  ld b,13
  1237. BlitRowLoop:
  1238.  ld a,3
  1239.  push bc
  1240.  ld b,0
  1241. BlitBrickLoop:
  1242.  push hl
  1243.  ld c,16
  1244.  ldir
  1245.  pop hl
  1246.  dec a
  1247.  jr nz, BlitBrickLoop
  1248.  ld c,16
  1249.  ldir
  1250.  pop bc
  1251.  djnz BlitRowLoop
  1252.  ret
  1253.  
  1254. ExpandHalfByte: ;expand a to (d,e)
  1255.  ld c,a
  1256.  and %00001111
  1257.  add a,a
  1258.  add a,a
  1259.  add a,7
  1260.  ld e,a
  1261.  ld a,c
  1262.  and %11110000
  1263.  srl a
  1264.  ld d,a
  1265.  ret
  1266.  
  1267. SetDeathFlag:
  1268.  ld a,(kInvincibility)
  1269.  or a
  1270.  ret nz
  1271.  ld a,(deathFlag)
  1272.  or $FF
  1273.  ld (deathFlag),a
  1274.  ret
  1275.  
  1276. BubHorizontal:
  1277.  push bc
  1278.  srl a
  1279.  srl c
  1280.  CALL_(CheckTile)
  1281.  pop bc
  1282.  ret
  1283.  
  1284. MakeBubble:
  1285.  ld a,(CurRefire)
  1286.  or a
  1287.  ret nz
  1288. DoMakeBubble:
  1289.  ld hl,(CurBubbleAddr)
  1290.  push bc
  1291. DoMakeLoop:          ;this loop may be infinite if kMaxMonsters>=kMaxBubs
  1292.  inc hl              ;do NOT allow this!!
  1293.  inc hl
  1294.  ld a,(hl)
  1295.  and %00001100
  1296.  jr z,UseBubAddr
  1297.  inc hl
  1298.  inc hl
  1299.  CALL_(ResetBubs)
  1300.  jr DoMakeLoop
  1301. UseBubAddr:
  1302.  dec hl
  1303.  dec hl
  1304.  ld (CurBubbleAddr), hl
  1305.  ld hl,(CurBubbleAddr)
  1306.  sla b
  1307.  ld (hl),b
  1308.  inc hl
  1309.  sla c
  1310.  ld (hl),c
  1311.  inc hl
  1312.  ld a,kBubZoom
  1313.  bit 1,e
  1314.  jr z,ContMakeBubble
  1315.  or 1
  1316. ContMakeBubble:
  1317.  ld (hl),a
  1318.  inc hl
  1319.  ld (hl),kBubShootTime
  1320.  inc hl
  1321.  pop bc
  1322. SetCounter:
  1323.  ld a,(RefillRefire)
  1324.  ld (CurRefire),a
  1325. PrepareForNext:
  1326.  ld (CurBubbleAddr),hl
  1327.  CALL_(ResetBubs)
  1328.  ret
  1329.  
  1330. SetupFile:
  1331.  ld bc,SavedGame
  1332.  ld hl,(PROGRAM_ADDR)
  1333.  add hl,bc
  1334.  ld de,lives
  1335.  ld bc,5
  1336.  ret
  1337.  
  1338. NewData:
  1339.  ld a,1
  1340.  ld (level),a
  1341.  ld a,4
  1342.  ld (lives),a
  1343.  ld hl,LevelDataStart
  1344.  ld (LevelAddr),hl
  1345.  ret
  1346.  
  1347. ResetBubs:
  1348.  ld a,(CurBubNum)
  1349.  sub 1
  1350.  ld (CurBubNum),a
  1351.  ret nz
  1352.  ld hl,kFirstBubble
  1353.  ld (CurBubbleAddr),hl
  1354.  ld a,kMaxBubs
  1355.  ld (CurBubNum),a
  1356.  ret
  1357.  
  1358. RefreshIndicator:
  1359.  ld a,(lives)
  1360.  ld de,$0307
  1361.  CALL_(ColinDispNum)
  1362.  
  1363.  ld a,(level)
  1364.  ld de,$0D07
  1365.  CALL_(ColinDispNum)
  1366.  
  1367.  ld hl,$0007
  1368.  ld de,IndicatorString
  1369.  CALL_(ColinDisp)
  1370.  
  1371.  ld hl,$0A07
  1372.  ld de,IndicatorStringTwo
  1373.  CALL_(ColinDisp)
  1374.  ret
  1375.  
  1376. LevelDoneCheck:
  1377.  ld hl,kFirstMonster
  1378.  ld b,kMaxMonsters
  1379. LDMonsterLoop:
  1380.  inc hl
  1381.  inc hl
  1382.  ld a,(hl)
  1383.  and %00001111
  1384.  ret nz
  1385.  inc hl
  1386.  djnz LDMonsterLoop
  1387.  ld hl,kFirstBubble
  1388.  ld b,kMaxBubs
  1389. LDBubbleLoop:
  1390.  inc hl
  1391.  inc hl
  1392.  ld a,(hl)
  1393.  and %00001110
  1394.  ret nz
  1395.  inc hl
  1396.  inc hl
  1397.  djnz LDBubbleLoop
  1398.  and 0
  1399.  ret
  1400.  
  1401. ColinDisp:           ;two-byte value of where to draw text in hl
  1402.  ld (CURSOR_ROW),hl  ;two-byte relative address of text in de
  1403.  ld hl,(PROGRAM_ADDR)
  1404.  add hl,de
  1405.  ROM_CALL(D_ZT_STR)
  1406.  ret
  1407.  
  1408. ColinDispSmall:
  1409.  ld (textCursor),hl
  1410.  ld hl,(PROGRAM_ADDR)
  1411.  add hl,de
  1412.  ROM_CALL(D_ZM_STR)
  1413.  ret
  1414.  
  1415. ColinDispNum: ;a-number de-row/column number
  1416.  ld h,0
  1417.  ld l,a
  1418.  ld (CURSOR_ROW),de
  1419.  ROM_CALL(D_HL_DECI)
  1420.  ret
  1421.  
  1422. Pause:         ;pause until a key is pressed
  1423.  call GET_KEY
  1424.  cp K_NOKEY
  1425.  jr z,Pause
  1426.  ret
  1427.  
  1428. Delay: ;Delay for hl cycles
  1429.  nop
  1430.  dec hl
  1431.  ld a,h
  1432.  or l
  1433.  jr nz,Delay
  1434.  ret
  1435.  
  1436. BlockClearMem: ;clear bc bytes from hl
  1437.  ld (hl),0
  1438.  inc hl
  1439.  dec bc
  1440.  ld a,b
  1441.  or c
  1442.  jr nz,BlockClearMem
  1443.  ret
  1444.  
  1445. ;********** Storage ********* ;permanent program storage
  1446. SavedGame:
  1447. .db $00      ;lives
  1448. .db $00      ;Level Addr
  1449. .db $00
  1450. .db $00      ;Level
  1451. .db $00
  1452. ;*****************************************************
  1453. ;                          Strings                    
  1454. ;*****************************************************
  1455. GreetString:
  1456. .db "F1:Load",0
  1457. GreetStringTwo:
  1458. .db "F2:New",0
  1459.  
  1460. Sidebar:
  1461. .db "Ti-Bobble",0
  1462. AuthorString:
  1463. .db "by Colin McCabe",0
  1464.  
  1465. PauseString:
  1466. .db "Paused- "   ;intentional- I can use the string completely or partially
  1467. SimplePauseString:
  1468. .db "Press Enter",0
  1469. Gameover:
  1470. .db "Game Over",0
  1471.  
  1472. HelpString:
  1473. .db "To win, bubble & pop monsters.",0
  1474. HOne:
  1475. .db "Hold down up to jump"
  1476. .db "on bubbles",0
  1477. ;.db "You can jump on tops "
  1478. ;.db "of bubbles.",0
  1479. HTwo:
  1480. .db "Arrows:Move",0
  1481. HThree:
  1482. .db "Up:Jump",0
  1483. HFour:
  1484. .db "2nd:Bubble",0
  1485. HFive:
  1486. .db "More:Pause",0
  1487. HSix:
  1488. .db "Exit:Save and Quit",0
  1489.  
  1490. IndicatorString:
  1491. .db "Lives:",0
  1492. IndicatorStringTwo:
  1493. .db "Level:",0
  1494. ;**********************************************************
  1495. ;                        Sprites                           
  1496. ;**********************************************************
  1497. IntroPic:
  1498. .db %00000000,%00000001,%00000000
  1499. .db %00000000,%00000010,%10000000
  1500. .db %00000000,%00000010,%01111000
  1501. .db %00000000,%00000010,%11001100
  1502. .db %00000000,%00000011,%10000010
  1503. .db %00000000,%00011011,%00010001
  1504. .db %00000000,%00010110,%00010001
  1505. .db %00000000,%00010010,%00000001
  1506. .db %00000000,%00010010,%00000110
  1507. .db %00000000,%00010110,%00000010
  1508. .db %00000000,%11010100,%00001100
  1509. .db %00000000,%10101100,%00001000
  1510. .db %00000000,%10011000,%00001000
  1511. .db %00000000,%10010000,%00001110
  1512. .db %00000001,%10010000,%00000001
  1513. .db %00000010,%10110000,%01111111
  1514. .db %00000010,%01100000,%00001000
  1515. .db %00001110,%11000000,%00001000
  1516. .db %00010011,%10000000,%00001000
  1517. .db %01110110,%00000000,%00001000
  1518. .db %10011100,%00000000,%01001000
  1519. .db %11110000,%00011111,%11001100
  1520. .db %10000000,%11110000,%01000100
  1521. .db %11111111,%10000000,%01111100
  1522.  
  1523. PlayerLeftSprite:
  1524. .db %01110000
  1525. .db %11011000
  1526. .db %11111000
  1527. .db %01111100
  1528. .db %00111110
  1529. .db %11111110
  1530. .db %00111111
  1531. .db %01100111
  1532.  
  1533. PlayerRightSprite:
  1534. .db %00001110
  1535. .db %00011011
  1536. .db %00011111
  1537. .db %00111110
  1538. .db %01111100
  1539. .db %01111111
  1540. .db %11111100
  1541. .db %11100110
  1542.  
  1543. VoltPic:
  1544. .db %00111100
  1545. .db %01000010
  1546. .db %10101001
  1547. .db %10101001
  1548. .db %10000001
  1549. .db %11111111
  1550. .db %01100110
  1551. .db %01100110
  1552.  
  1553. BoltPic:
  1554. .db %00111000
  1555. .db %00111000
  1556. .db %00111000
  1557. .db %00111000
  1558. .db %00111100
  1559. .db %00011100
  1560. .db %00011100
  1561. .db %00011100
  1562.  
  1563. CogPic:
  1564. .db %01111000
  1565. .db %11011101
  1566. .db %11011101
  1567. .db %11111111
  1568. .db %01111101
  1569. .db %11111101
  1570. .db %11111100
  1571. .db %01001000
  1572.  
  1573. CogRightPic:
  1574. .db %00011110
  1575. .db %10111011
  1576. .db %10111011
  1577. .db %11111111
  1578. .db %10111110
  1579. .db %10111111
  1580. .db %00111111
  1581. .db %00010010
  1582.  
  1583. BelugaPic:
  1584. .db %01111000
  1585. .db %11111100
  1586. .db %11001110
  1587. .db %11111110
  1588. .db %00111111
  1589. .db %11011111
  1590. .db %01111111
  1591. .db %00011111
  1592.  
  1593. BelugaRightPic:
  1594. .db %00011110
  1595. .db %00111111
  1596. .db %01110011
  1597. .db %01111111
  1598. .db %11111100
  1599. .db %11111011
  1600. .db %11111110
  1601. .db %11111000
  1602.  
  1603. RegularBubbleSprite:
  1604. .db %00111100
  1605. .db %01000010
  1606. .db %10011001
  1607. .db %10000101
  1608. .db %10000101
  1609. .db %10000001
  1610. .db %01000010
  1611. .db %00111100
  1612.  
  1613. SmallBubbleSprite:
  1614. .db %00000000
  1615. .db %00111100
  1616. .db %01100110
  1617. .db %01001010
  1618. .db %01000010
  1619. .db %01100110
  1620. .db %00111100
  1621. .db %00000000
  1622.  
  1623. CaptureSprite:
  1624. .db %00111100
  1625. .db %01110110
  1626. .db %11011111
  1627. .db %11110101
  1628. .db %11011011
  1629. .db %11110111
  1630. .db %01101110
  1631. .db %00111100
  1632.  
  1633. ;**************************************************************
  1634. LevelDataStart: 
  1635. ;**************************************************************
  1636. ;24-byte screen data first
  1637. ;16-byte breeze data
  1638. ;10-byte monster data
  1639. ;1-byte player start location data
  1640.  
  1641. ;**************************************************************
  1642. Levels
  1643. ;**************************************************************
  1644. ;Ti-bobble levels
  1645. ;by Colin McCabe
  1646.  
  1647. .db %00000000,%00000000
  1648. .db %00000000,%00000000
  1649. .db %11100000,%00000111
  1650. .db %00000000,%00000000
  1651. .db %00000000,%00000000
  1652. .db %11111100,%00011111
  1653. .db %00000000,%00000000
  1654. .db %00000000,%11000000
  1655. .db %11111100,%00000000
  1656. .db %00000000,%00000000
  1657. .db %00000000,%01111111
  1658. .db %11111111,%11111111
  1659.  
  1660. .db %11111111,%11111111
  1661. .db %11111111,%11111111
  1662. .db %11111111,%11111111
  1663. .db %11111111,%11111111
  1664. .db %11111111,%11111111
  1665. .db %11111111,%11111111
  1666. .db %11111111,%11111111
  1667. .db %11111111,%11111111
  1668.  
  1669. .db $5A, 2, $0A, 2, 0, 0, $00, 0, $00, 0
  1670. .db $E9  ;1b player start location
  1671. ;----------------------;
  1672. .db %00000000,%00000000
  1673. .db %00000000,%00000000
  1674. .db %01111100,%11111100
  1675. .db %00000000,%00000000
  1676. .db %00000000,%00000000
  1677. .db %01111110,%11111100
  1678. .db %00000000,%00000000
  1679. .db %00000000,%00000000
  1680. .db %00111110,%11111110
  1681. .db %00000000,%00000000
  1682. .db %00000000,%00000000
  1683. .db %11111111,%11111111
  1684.  
  1685. .db %01010101,%01010111
  1686. .db %11111111,%11111111
  1687. .db %11111111,%11111111
  1688. .db %11111111,%11111111
  1689. .db %11111111,%11111111
  1690. .db %11111111,%11111111
  1691. .db %11000000,%00000000
  1692. .db %11000000,%00000000
  1693.  
  1694. .db $11, 1, $A1, 1, $54, 1, $00, 0, $00, 0
  1695. .db $FA  ;1b player start location
  1696. ;----------------------;
  1697. .db %00000000,%00000000
  1698. .db %00000000,%00000000
  1699. .db %00000000,%00000000
  1700. .db %00000000,%00000000
  1701. .db %00100000,%00000000
  1702. .db %11100010,%11111011
  1703. .db %00111110,%00000000
  1704. .db %10000000,%00000100
  1705. .db %00000000,%00000000
  1706. .db %10000000,%00000100
  1707. .db %00000000,%00000000
  1708. .db %11111111,%11111111
  1709.  
  1710. .db %10101010,%10101010
  1711. .db %10101010,%10101010
  1712. .db %10101010,%10101010
  1713. .db %10101010,%10101010
  1714. .db %10101010,%10101010
  1715. .db %10101010,%10101010
  1716. .db %10101010,%10101010
  1717. .db %10101010,%10101010
  1718.  
  1719. .db $04, 2, $45, 2, $0A, 1, $00, 0, $00, 0
  1720. .db $F4  ;1b player start location
  1721. ;----------------------;
  1722. .db %00000000,%00000000
  1723. .db %00000000,%00000000
  1724. .db %00000000,%00000000
  1725. .db %00000000,%10000000
  1726. .db %00000001,%01000000
  1727. .db %00000011,%11100000
  1728. .db %00000100,%00010000
  1729. .db %00001111,%11111000
  1730. .db %00010000,%00000100
  1731. .db %00111111,%11111110
  1732. .db %00000000,%00000000
  1733. .db %01111111,%11111111
  1734.  
  1735. .db %11111111,%11111111
  1736. .db %11111111,%11111111
  1737. .db %11111111,%11111111
  1738. .db %11111111,%11111111
  1739. .db %11111111,%11111111
  1740. .db %11111111,%11111111
  1741. .db %11111111,%11111111
  1742. .db %11111111,%11111111
  1743.  
  1744. .db $11, 2, $F1, 1, $86, 1, $F3, 1, $00, 0
  1745. .db $5A  ;1b player start location
  1746. ;----------------------;
  1747. .db %00000000,%00000000
  1748. .db %00000000,%00000000
  1749. .db %11000000,%00000011
  1750. .db %00000000,%00000000
  1751. .db %00000000,%00000000
  1752. .db %11000000,%00000011
  1753. .db %00000000,%00000000
  1754. .db %00000000,%00000000
  1755. .db %11000000,%00000011
  1756. .db %00000000,%00000000
  1757. .db %00000000,%00000000
  1758. .db %11111111,%11111111
  1759.  
  1760. .db %11111111,%11111111
  1761. .db %11111111,%11111111
  1762. .db %11111111,%11111111
  1763. .db %11111111,%11111111
  1764. .db %11111111,%11111111
  1765. .db %11111111,%11111111
  1766. .db %11111111,%11111111
  1767. .db %11111111,%11111111
  1768.  
  1769. .db $E2, 3, $88, 3, $00, 0, $00, 0, $00, 0
  1770. .db $0A  ;1b player start location
  1771. ;----------------------;
  1772. .db %01100100,%01010001
  1773. .db %00000000,%00000000
  1774. .db %00000000,%00000000
  1775. .db %00000000,%00000000
  1776. .db %00000000,%00000000
  1777. .db %00000001,%00000000
  1778. .db %01000001,%10010000
  1779. .db %11100101,%10011001
  1780. .db %11101101,%11011011
  1781. .db %11101101,%11011011
  1782. .db %11101101,%11011011
  1783. .db %11101101,%11011011
  1784.  
  1785. .db %10101010,%10101010
  1786. .db %10101010,%10101010
  1787. .db %10101010,%10101010
  1788. .db %10101010,%10101010
  1789. .db %10101010,%10101010
  1790. .db %10101010,%10101010
  1791. .db %10101010,%10101010
  1792. .db %10101010,%10101010
  1793.  
  1794. .db $5A, 2, $56, 1, $85, 1, $B5, 2, $00, 0
  1795. .db $05  ;1b player start location
  1796. ;----------------------;
  1797. .db %00000000,%00000000
  1798. .db %01101010,%01000000
  1799. .db %00101010,%10100000
  1800. .db %01101110,%11100000
  1801. .db %00100010,%10100000
  1802. .db %01100010,%10100000
  1803. .db %00000000,%00000000
  1804. .db %00000000,%00000000
  1805. .db %00000000,%00000000
  1806. .db %00000000,%00000000
  1807. .db %00000000,%00000000
  1808. .db %11111111,%11100000
  1809.  
  1810. .db %10101010,%10101010
  1811. .db %10101010,%10101010
  1812. .db %10101010,%10101010
  1813. .db %10101010,%10101010
  1814. .db %10101010,%10101010
  1815. .db %10101010,%10101010
  1816. .db %10101010,%10101010
  1817. .db %10101010,%10101010
  1818.  
  1819. .db $F1, 2, $9A, 1, $E1, 1, $A1, 1, $00, 0
  1820. .db $0A  ;1b player start location
  1821. ;----------------------;
  1822. .db %00000000,%00000000
  1823. .db %00000000,%00000000
  1824. .db %00000000,%00000000
  1825. .db %00000000,%00000000
  1826. .db %00000000,%00000000
  1827. .db %00000000,%00011110
  1828. .db %00000011,%11000000
  1829. .db %11110000,%00011110
  1830. .db %00000011,%11000000
  1831. .db %11110000,%00000000
  1832. .db %00000000,%00000000
  1833. .db %00000000,%00000000
  1834.  
  1835. .db %10101010,%10101010
  1836. .db %10101010,%10101010
  1837. .db %10101010,%10101010
  1838. .db %10101010,%10101010
  1839. .db %10101010,%10101010
  1840. .db %10101010,%10101010
  1841. .db %10101010,%10101010
  1842. .db %10101010,%10101010
  1843.  
  1844. .db $11, 3, $F1, 3, $85, 1, $C6, 1, $00, 0
  1845. .db $08  ;1b player start location
  1846. ;----------------------;
  1847. .db %00000000,%00000000
  1848. .db %00000000,%00000000
  1849. .db %11100000,%00000111
  1850. .db %00000011,%11000000
  1851. .db %00000000,%00000000
  1852. .db %00000000,%00000000
  1853. .db %00011111,%11111000
  1854. .db %00000000,%00000000
  1855. .db %00000000,%00000000
  1856. .db %11100011,%11000111
  1857. .db %00000000,%00000000
  1858. .db %00000000,%00000000
  1859.  
  1860. .db %11111111,%11111111
  1861. .db %11111111,%11111111
  1862. .db %11111111,%11111111
  1863. .db %11111111,%11111111
  1864. .db %11111111,%11111111
  1865. .db %11111111,%11111111
  1866. .db %11111111,%11111111
  1867. .db %11111111,%11111111
  1868.  
  1869. .db $11, 2, $F1, 2, $85, 1, $08, 1, $00, 0
  1870. .db $F8  ;1b player start location
  1871. ;----------------------;
  1872. .db %00000000,%00000000
  1873. .db %00000111,%11000000
  1874. .db %00001100,%01100000
  1875. .db %00011000,%00000000
  1876. .db %00010000,%00000000
  1877. .db %00010000,%00000000
  1878. .db %00010000,%00000000
  1879. .db %00011000,%00000000
  1880. .db %00001100,%01100000
  1881. .db %00000111,%11000000
  1882. .db %00000000,%00000000
  1883. .db %00011111,%11111000
  1884.  
  1885. .db %11110000,%01011111
  1886. .db %11110000,%01011111
  1887. .db %11110010,%10011111
  1888. .db %11110010,%10011111
  1889. .db %10100010,%10011010
  1890. .db %10100010,%10011010
  1891. .db %10100000,%01011010
  1892. .db %10100000,%01011010
  1893.  
  1894. .db $11, 3, $F1, 3, $88, 1, $A3, 1, $08, 2
  1895. .db $AA  ;1b player start location
  1896. ;----------------------;
  1897. .db %00000000,%00000000
  1898. .db %00000000,%00000000
  1899. .db %00000000,%00000000
  1900. .db %00000111,%11100000
  1901. .db %00000000,%00000000
  1902. .db %00000000,%00000000
  1903. .db %00000111,%11100000
  1904. .db %00000000,%00000000
  1905. .db %00001111,%11110000
  1906. .db %00000000,%00000000
  1907. .db %00000000,%00000000
  1908. .db %00011110,%01111000
  1909.  
  1910. .db %10000000,%01010110
  1911. .db %10000000,%01010110
  1912. .db %10000000,%01010110
  1913. .db %10000000,%01010110
  1914. .db %10000000,%01010110
  1915. .db %10000000,%01010110
  1916. .db %10000000,%01010110
  1917. .db %10000000,%01010110
  1918.  
  1919. .db $11, 3, $95, 1, $97, 1, $99, 1, $F1, 3
  1920. .db $39  ;1b player start location
  1921. ;----------------------;
  1922. .db %10111110,%00111111
  1923. .db %10101110,%00110011
  1924. .db %00000110,%00100000
  1925. .db %00000000,%00101100
  1926. .db %00000000,%00000000
  1927. .db %00000000,%00000000
  1928. .db %00000000,%00000000
  1929. .db %10100000,%00000001
  1930. .db %10111000,%00000111
  1931. .db %10111100,%00001111
  1932. .db %10111110,%00111111
  1933. .db %10111110,%00111111
  1934.  
  1935. .db %10101010,%10101010
  1936. .db %10101010,%10101010
  1937. .db %10101010,%10101010
  1938. .db %10101010,%10101010
  1939. .db %10101010,%10101010
  1940. .db %10101010,%10101010
  1941. .db %10101010,%10101010
  1942. .db %10101010,%10101010
  1943.  
  1944. .db $06, 2, $F6, 2, $23, 1, $9A, 1, $11, 2
  1945. .db $D2  ;1b player start location
  1946. ;----------------------;
  1947. .db %00000000,%00000000
  1948. .db %00001111,%00001111
  1949. .db %00000000,%00000000
  1950. .db %00000000,%00000000
  1951. .db %11110000,%11110000
  1952. .db %00000000,%00000000
  1953. .db %00000000,%00000000
  1954. .db %00001111,%00001111
  1955. .db %00000000,%00000000
  1956. .db %00000000,%00000000
  1957. .db %11110000,%11110000
  1958. .db %00000000,%00000000
  1959.  
  1960. .db %11111111,%11111111
  1961. .db %11111111,%11111111
  1962. .db %11111111,%11111111
  1963. .db %11111111,%11111111
  1964. .db %11111111,%11111111
  1965. .db %11111111,%11111111
  1966. .db %11111111,%11111111
  1967. .db %11111111,%11111111
  1968.  
  1969. .db $31, %00000110, $F6, 2, $83, 1, $89, 1, $F9, 3
  1970. .db $09  ;1b player start location
  1971. ;----------------------;
  1972. .db %00000000,%00000000
  1973. .db %00111011,%10110110
  1974. .db %01100010,%10101010
  1975. .db %01000011,%10101010
  1976. .db %01000010,%00101010
  1977. .db %01100010,%00101010
  1978. .db %00111010,%00101010
  1979. .db %00000000,%00000000
  1980. .db %11110000,%00001111
  1981. .db %00000000,%00000000
  1982. .db %00000000,%00000000
  1983. .db %00110011,%00110011
  1984.  
  1985. .db %00000011,%00000000
  1986. .db %00000011,%00100000
  1987. .db %00000011,%01100000
  1988. .db %00000011,%01100000
  1989. .db %00000011,%01100000
  1990. .db %00000011,%01100000
  1991. .db %00000011,%01010101
  1992. .db %00000011,%01010101
  1993.  
  1994. .db $45, 2, $1D, 1, $39, 3, $EA, 3, $12, 1
  1995. .db $D7  ;1b player start location
  1996. ;----------------------;
  1997. .db %00000000,%00000000
  1998. .db %00000000,%00000000
  1999. .db %00000000,%00000000
  2000. .db %00000000,%00000000
  2001. .db %00000000,%00000000
  2002. .db %00000000,%00000000
  2003. .db %00010000,%00000000
  2004. .db %00000000,%00000000
  2005. .db %00000000,%00000100
  2006. .db %00000001,%00000000
  2007. .db %00000000,%00000000
  2008. .db %00000000,%00000000
  2009.  
  2010. .db %01101010,%10101000
  2011. .db %01101010,%10101000
  2012. .db %01101010,%10101000
  2013. .db %01101010,%10101000
  2014. .db %01101010,%10101000
  2015. .db %01101010,%10101000
  2016. .db %01101010,%10101000
  2017. .db %01101010,%10101000
  2018.  
  2019. .db $11, 3, $55, %00000111, $A3, %00000111, $F1, 3, $FA, %00000111
  2020. .db $78  ;1b player start location
  2021. ;----------------------;
  2022. .db %00000000,%00000000
  2023. .db %00000000,%00000000
  2024. .db %00000000,%00000000
  2025. .db %00000000,%00000000
  2026. .db %00000001,%10000000
  2027. .db %10000001,%10000001
  2028. .db %00000001,%10000000
  2029. .db %00000000,%00000000
  2030. .db %10000000,%00000001
  2031. .db %00000000,%00000000
  2032. .db %00000000,%00000000
  2033. .db %11111000,%00011111
  2034.  
  2035. .db %01011000,%00000000
  2036. .db %10010000,%00100000
  2037. .db %10000000,%01100000
  2038. .db %10000000,%01100000
  2039. .db %10000000,%01100000
  2040. .db %10000000,%01100000
  2041. .db %01010101,%01100000
  2042. .db %01010101,%10101010
  2043.  
  2044. .db $3A, 2, $50, 3, $25, %00001011, $A1, 1, $55, 3 ;5 2b monsters
  2045. .db $B3  ;1b player start location
  2046. ;----------------------;
  2047. .db %00000000,%00000000
  2048. .db %01000000,%11111011
  2049. .db %01111111,%10000000
  2050. .db %00000000,%00000000
  2051. .db %00001000,%00000010
  2052. .db %00001111,%11111110
  2053. .db %11111000,%00000000
  2054. .db %00000000,%00000111
  2055. .db %00000000,%00000000
  2056. .db %00000000,%00111100
  2057. .db %00000000,%00000000
  2058. .db %11111111,%11111111
  2059.  
  2060. .db %11111111,%11111111
  2061. .db %11111111,%11111111
  2062. .db %11111111,%11111111
  2063. .db %11111111,%11111111
  2064. .db %11111111,%11111111
  2065. .db %11111111,%11111111
  2066. .db %11111111,%11111111
  2067. .db %11111111,%11111111
  2068.  
  2069. .db $31, 2, $54, 2, $F4, 2, $05, 2, $98, 1
  2070. .db $09  ;1b player start location
  2071. ;----------------------;
  2072. .db %11110000,%00001111
  2073. .db %11110000,%00001111
  2074. .db %11110011,%11001111
  2075. .db %11110000,%00001111
  2076. .db %11110000,%00001111
  2077. .db %11110001,%11101111
  2078. .db %11110000,%00001111
  2079. .db %11110000,%00001111
  2080. .db %11110111,%10001111
  2081. .db %11110000,%00001111
  2082. .db %11110000,%00001111
  2083. .db %11111111,%11111111
  2084.  
  2085. .db %11111111,%11111111
  2086. .db %11111111,%11111111
  2087. .db %11111111,%11111111
  2088. .db %11111111,%11111111
  2089. .db %11111111,%11111111
  2090. .db %11111111,%11111111
  2091. .db %11111111,%11111111
  2092. .db %11111111,%11111111
  2093.  
  2094. .db $51, 1, $91, 1, $84, 1, $97, 1, $A1, 1
  2095. .db $4A  ;1b player start location
  2096. ;----------------------;
  2097. .db %00000000,%00000000
  2098. .db %00011111,%11111111
  2099. .db %00000000,%00000000
  2100. .db %11111111,%11111000
  2101. .db %00000000,%00000000
  2102. .db %00011111,%11111111
  2103. .db %00000000,%00000000
  2104. .db %11111111,%11111000
  2105. .db %00000000,%00000000
  2106. .db %00011111,%11111111
  2107. .db %00000000,%00000000
  2108. .db %11111111,%11111000
  2109.  
  2110. .db %00000000,%00000000
  2111. .db %00000000,%00000000
  2112. .db %01010101,%01010101
  2113. .db %01010101,%01010101
  2114. .db %00000000,%00000000
  2115. .db %00000000,%00000000
  2116. .db %01010101,%01010101
  2117. .db %01010101,%01010101
  2118.  
  2119. .db $F1, 2, $E2, 2, $D2, 2, $C2, 2, $B2, 2
  2120. .db $06  ;1b player start location
  2121. ;----------------------;
  2122. .db %00000000,%00000000
  2123. .db %00000000,%00000000
  2124. .db %00000000,%00000000
  2125. .db %00000000,%00000000
  2126. .db %00000000,%00000000
  2127. .db %00111000,%00000000
  2128. .db %00000000,%00000000
  2129. .db %00000000,%00000011
  2130. .db %00000000,%00000000
  2131. .db %00000000,%00000000
  2132. .db %00000000,%00000000
  2133. .db %11111111,%11111111
  2134.  
  2135. .db %10101010,%10101010
  2136. .db %10101010,%10101010
  2137. .db %10101010,%10101010
  2138. .db %10101010,%10101010
  2139. .db %10101010,%10101010
  2140. .db %10101010,%10101010
  2141. .db %10101010,%10101010
  2142. .db %10101010,%10101010
  2143.  
  2144. .db $83, 1, $83, 1, $83, 1, $83, 1, $83, 1
  2145. .db $0A  ;1b player start location
  2146. ;----------------------;
  2147. .db %00000000,%00000000
  2148. .db %00000001,%01000000
  2149. .db %11111111,%11111111
  2150. .db %00000001,%01000000
  2151. .db %00000000,%00000000
  2152. .db %00000000,%00000000
  2153. .db %00000000,%00000000
  2154. .db %00000000,%00000000
  2155. .db %00000000,%00000000
  2156. .db %00000000,%00000000
  2157. .db %00000000,%00000000
  2158. .db %11111111,%11111111
  2159.  
  2160. .db %10101010,%10101010
  2161. .db %10101010,%10101010
  2162. .db %10101010,%10101010
  2163. .db %10101010,%10101010
  2164. .db %10101010,%10101010
  2165. .db %10101010,%10101010
  2166. .db %10101010,%10101010
  2167. .db %10101010,%10101010
  2168.  
  2169. .db $01, %00000110, $61, 2, $F1, 2, $B1, %00000110, $D7, 3
  2170. .db $0A  ;1b player start location
  2171.  
  2172. .end
  2173.