Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; ===========================================================================
- ; The initial code boss.
- ; Version 1.0
- ; By TheBlad768 (2018).
- ; ===========================================================================
- ; Object variables
- obSlot_RobotnikBoss: = 0 ; Set current object slot in object pointers
- objHits_RobotnikBoss: = 8 ; Set number of hits
- obVRAM_RobotnikHud: = (1<<15+($D000/$20)) ; Set VRAM address with priority
- ; Universal object variables
- obRender: equ 1 ; .b
- obGfx: equ 2 ; .w
- obMap: equ 4 ; .l
- obX: equ 8 ; .w.l
- obScreenY: equ $A ; .w
- obY: equ $C ; .w.l
- obVelX: equ $10 ; .w
- obVelY: equ $12 ; .w
- obHeight: equ $16 ; .b
- obWidth: equ $17 ; .b
- obPriority: equ $18 ; .b
- obActWid: equ $19 ; .b
- obFrame: equ $1A ; .b
- obAnim: equ $1C ; .b
- obColType: equ $20 ; .b
- obColProp: equ $21 ; .b
- obStatus: equ $22 ; .b
- obRoutine: equ $24 ; .b
- ob2ndRout: equ $25 ; .b
- obAngle: equ $26 ; .b.w
- obSubtype: equ $28 ; .b.w
- ; Dynamic object variables
- obDefeated: equ $14 ; .b
- obFlash: equ $15 ; .b
- ;obNull equ $2A ; .w
- ;obNull equ $2C ; .w
- ;obNull equ $2E ; .w
- ;obNull equ $30 ; .w
- ;obNull equ $32 ; .w
- ;obNull equ $34 ; .w
- ;obNull equ $36 ; .w
- ;obNull equ $38 ; .w
- ;obNull equ $3A ; .w
- obTimer: equ $3C ; .w
- obParent: equ $3E ; .w
- ; Colours
- cBlack: equ $000 ; colour black
- cWhite: equ $EEE ; colour white
- ; RAM
- v_player: equ $FFFFD000 ; Main character
- v_plc_buffer: equ $FFFFF680 ; Pattern load cues buffer
- v_screenposx: equ $FFFFF700 ; Screen position X
- v_screenposy: equ $FFFFF704 ; Screen position Y
- v_bossstatus: equ $FFFFF7A7 ; Status of boss and prison capsule
- v_framecount: equ $FFFFFE04 ; Frame counter
- v_vbla_count: equ $FFFFFE0C ; Vertical interrupt counter
- f_timecount: equ $FFFFFE1E ; Time counter update flag
- v_pal_dry: equ $FFFFFB00 ; Main palette
- ; Macros
- offsetEntry macro ptr
- dc.\0 ptr-*
- endm
- ; ---------------------------------------------------------------------------
- ; Object Robotnik boss.
- ; ---------------------------------------------------------------------------
- ; =============== S U B R O U T I N E =======================================
- Obj_RobotnikBoss:
- lea RobotnikBoss_Index(pc),a1
- bra.w ObjectsRoutine
- ; ---------------------------------------------------------------------------
- RobotnikBoss_Index:
- offsetEntry.w RobotnikBoss_Init ; 0
- RobotnikBoss_RobotnikShip_Index
- offsetEntry.w RobotnikBoss_ShipMain ; 2
- RobotnikBoss_RobotnikFace_Index
- offsetEntry.w Obj_RobotnikBoss_RobotnikFace ; 4
- RobotnikBoss_RobotnikFlame_Index
- offsetEntry.w Obj_RobotnikBoss_RobotnikFlame ; 6
- RobotnikBoss_EggmanLives_Index
- offsetEntry.w Obj_Robotnik_HudLives ; A
- ; ---------------------------------------------------------------------------
- RobotnikBoss_Init:
- addq.b #2,obRoutine(a0) ; Jump to next routine
- lea ObjDat3_RobotnikBoss_Robotnik(pc),a1 ; Load current object attributes
- bsr.w LoadObjects_Data ; Set current object attributes
- move.b #objHits_RobotnikBoss,obColProp(a0) ; Set number of hits
- lea ChildObjDat_RobotnikFaceAndFlame(pc),a2
- bsr.w Create_ChildObject
- RobotnikBoss_Hud:
- lea ChildObjDat_RobotnikHud(pc),a2 ; Create object
- bra.w Create_ChildObject
- ; ---------------------------------------------------------------------------
- RobotnikBoss_ShipMain:
- bsr.w RobotnikBoss_MoveSprite2
- lea RobotnikBoss_ShipIndex(pc),a1
- bsr.w ChildObjectsRoutine
- bsr.w RobotnikBoss_Hurt
- bra.w RobotnikBoss_Display2
- ; ---------------------------------------------------------------------------
- RobotnikBoss_ShipIndex:
- offsetEntry.w RobotnikBoss_Move ; 0
- RobotnikBossEnd_First_ShipIndex
- offsetEntry.w RobotnikBossEnd_First
- RobotnikBossEnd_Second_ShipIndex
- offsetEntry.w RobotnikBossEnd_Second
- RobotnikBossEnd_Third_ShipIndex
- offsetEntry.w RobotnikBossEnd_Third
- ; ---------------------------------------------------------------------------
- RobotnikBoss_Move:
- ; Put your code here.
- rts
- ; =============== S U B R O U T I N E =======================================
- RobotnikBoss_Hurt:
- tst.b obDefeated(a0) ; Boss was defeated?
- bne.s RobotnikBoss_Locret ; If yes, branch
- tst.b obColType(a0) ; If collision is on, don't do anything
- bne.s RobotnikBoss_Locret
- tst.b obColProp(a0)
- beq.s RobotnikBoss_ShipGone
- tst.b obFlash(a0)
- bne.s RobotnikBoss_ShipFlash
- move.b #$40,obFlash(a0) ; Set number of times for ship to flash
- moveq #$FFFFFFAC,d0
- jsr (PlaySound_Special).l ; Play hit sound
- RobotnikBoss_ShipFlash:
- lea (v_pal_dry+$22).w,a1
- moveq #cBlack,d0
- btst #0,obFlash(a0)
- bne.s @1
- move.w #cWhite,d0
- @1 move.w d0,(a1)
- subq.b #1,obFlash(a0)
- bne.s RobotnikBoss_Locret
- move.b #$F,obColType(a0)
- RobotnikBoss_Locret:
- rts
- ; ---------------------------------------------------------------------------
- RobotnikBoss_ShipGone:
- move.b #(RobotnikBossEnd_First_ShipIndex-RobotnikBoss_ShipIndex),ob2ndRout(a0)
- move.b #-$18,obTimer(a0) ; Set timer to 3 seconds
- clr.l obVelX(a0) ; Clean object XY speed
- st obDefeated(a0) ; Set defeated flag
- clr.b (f_timecount).w ; Stop game timer
- moveq #100,d0
- jmp (AddPoints).l ; Add 1000 points
- ; ---------------------------------------------------------------------------
- RobotnikBossEnd_First:
- jsr (BossDefeated).l
- subq.b #1,obTimer(a0)
- bne.s @1
- addq.b #2,ob2ndRout(a0) ; Jump to next routine
- bset #0,obStatus(a0)
- bclr #7,obStatus(a0)
- move.b #-$18,obTimer(a0)
- tst.b (v_bossstatus).w
- bne.s @1
- move.b #1,(v_bossstatus).w ; Set boss status
- @1 rts
- ; ---------------------------------------------------------------------------
- RobotnikBossEnd_Second:
- addq.b #1,obTimer(a0)
- beq.s @4
- bpl.s @2
- addi.w #$18,obVelY(a0)
- rts
- @2 cmpi.b #$20,obTimer(a0)
- bcs.s @3
- beq.s @4
- cmpi.b #$2A,obTimer(a0)
- bcs.s @5
- addq.b #2,ob2ndRout(a0)
- @5 rts
- @3 subq.w #8,obVelY(a0)
- rts
- @4 clr.w obVelY(a0)
- RobotnikBossEnd_Locret:
- rts
- ; ---------------------------------------------------------------------------
- RobotnikBossEnd_Third:
- move.w #$400,obVelX(a0)
- move.w #-$40,obVelY(a0)
- tst.b obRender(a0)
- bmi.s RobotnikBossEnd_Locret
- addq.w #4,sp ; Skip
- bra.w RobotnikBoss_Del
- ; ---------------------------------------------------------------------------
- ; Object Robotnik boss face.
- ; ---------------------------------------------------------------------------
- ; =============== S U B R O U T I N E =======================================
- Obj_RobotnikBoss_RobotnikFace:
- lea RobotnikBoss_RobotnikFace_ShipIndex(pc),a1
- bra.w ChildObjectsRoutine
- ; ---------------------------------------------------------------------------
- RobotnikBoss_RobotnikFace_ShipIndex:
- offsetEntry.w RobotnikBoss_RobotnikFace_Init ; 0
- offsetEntry.w RobotnikBoss_RobotnikFace_Main ; 2
- ; ---------------------------------------------------------------------------
- RobotnikBoss_RobotnikFace_Init:
- addq.b #2,ob2ndRout(a0) ; Jump to next routine
- lea ObjDat3_RobotnikBoss_RobotnikFace(pc),a1 ; Load current object attributes
- bra.w LoadObjects_ExtraData ; Set current object attributes
- ; ---------------------------------------------------------------------------
- RobotnikBoss_RobotnikFace_Main:
- movea.w obParent(a0),a1 ; Load parent RAM address
- moveq #1,d0
- tst.w obVelX(a1)
- beq.s @1
- cmpi.b #4,(Player_1+obRoutine).w
- bcs.s @2
- @1 moveq #4,d0
- @2 tst.b obColType(a1)
- bne.s @3
- moveq #5,d0
- @3 cmpi.b #(RobotnikBossEnd_First_ShipIndex-RobotnikBoss_ShipIndex),ob2ndRout(a1)
- bmi.s @4
- moveq #$A,d0
- @4 cmpi.b #(RobotnikBossEnd_Third_ShipIndex-RobotnikBoss_ShipIndex),ob2ndRout(a1)
- bne.s @5
- moveq #6,d0
- tst.b obRender(a0)
- bpl.s RobotnikBoss_Del
- @5 move.b d0,obAnim(a0)
- bra.s RobotnikBoss_Display
- ; ---------------------------------------------------------------------------
- ; Object Robotnik boss flame.
- ; ---------------------------------------------------------------------------
- ; =============== S U B R O U T I N E =======================================
- Obj_RobotnikBoss_RobotnikFlame:
- lea RobotnikBoss_RobotnikFlame_ShipIndex(pc),a1
- bra.w ChildObjectsRoutine
- ; ---------------------------------------------------------------------------
- RobotnikBoss_RobotnikFlame_ShipIndex:
- offsetEntry.w RobotnikBoss_RobotnikFlame_Init ; 0
- offsetEntry.w RobotnikBoss_RobotnikFlame_Main ; 2
- ; ---------------------------------------------------------------------------
- RobotnikBoss_RobotnikFlame_Init:
- addq.b #2,ob2ndRout(a0) ; Jump to next routine
- lea ObjDat3_RobotnikBoss_RobotnikFace(pc),a1
- bra.w LoadObjects_ExtraData
- ; ---------------------------------------------------------------------------
- RobotnikBoss_RobotnikFlame_Main:
- movea.w obParent(a0),a1 ; Load parent RAM address
- moveq #7,d0
- tst.w obVelX(a1)
- beq.s @0
- moveq #8,d0
- @0 cmpi.b #(RobotnikBossEnd_Third_ShipIndex-RobotnikBoss_ShipIndex),ob2ndRout(a1)
- bne.s @1
- moveq #$B,d0
- tst.b obRender(a0)
- bpl.s RobotnikBoss_Del
- @1 move.b d0,obAnim(a0)
- RobotnikBoss_Display:
- move.w obX(a1),obX(a0)
- move.w obY(a1),obY(a0)
- move.b obStatus(a1),obStatus(a0)
- RobotnikBoss_Display2:
- lea (Ani_Eggman).l,a1
- jsr (AnimateSprite).l
- move.b obStatus(a0),d0
- andi.b #3,d0
- andi.b #$FC,obRender(a0)
- or.b d0,obRender(a0)
- jmp (DisplaySprite).l
- ; ---------------------------------------------------------------------------
- RobotnikBoss_Del:
- jmp (DeleteObject).l
- ; ---------------------------------------------------------------------------
- ; Object Robotnik hud lives.
- ; ---------------------------------------------------------------------------
- ; Dynamic object variables
- obVRAM: equ $2A ; .l
- obPointer: equ $2E ; .l
- ; =============== S U B R O U T I N E =======================================
- Obj_Robotnik_HudLives:
- movea.w obParent(a0),a2 ; Load parent RAM address
- lea Robotnik_HudLives_ShipIndex(pc),a1
- bra.w ChildObjectsRoutine
- ; ---------------------------------------------------------------------------
- Robotnik_HudLives_ShipIndex:
- offsetEntry.w Robotnik_HudLives_Init ; 0
- offsetEntry.w Robotnik_HudLives_CheckPLC ; 2
- offsetEntry.w Robotnik_HudLives_MoveDown ; 4
- offsetEntry.w Robotnik_HudLives_AddHits ; 6
- offsetEntry.w Robotnik_HudLives_MoveUp ; 8
- offsetEntry.w Robotnik_HudLives_MoveRemove ; A
- ; ---------------------------------------------------------------------------
- Robotnik_HudLives_Init:
- addq.b #2,ob2ndRout(a0) ; Jump to next routine
- move.l #Map_RobotnikHud,obMap(a0) ; Load object mapping
- move.w #(obVRAM_RobotnikHud),obGfx(a0) ; Current VRAM address
- move.w #$170,obX(a0) ; Set Xpos
- move.w #$28,obScreenY(a0) ; Set Ypos
- locVRAM $D120,obVRAM(a0) ; Set VRAM address
- move.l #Art_LivesNums,obPointer(a0) ; Load uncompressed HUD art
- Robotnik_HudLives_CheckPLC:
- tst.l (v_plc_buffer).w ; PLC has been loaded?
- bne.s Robotnik_HudLives_MoveDisplay ; If not, branch
- addq.b #2,ob2ndRout(a0) ; Jump to next routine
- Robotnik_HudLives_MoveDown:
- addq.w #1,obScreenY(a0) ; Downward movement
- cmpi.w #$48,obScreenY(a0) ; Ypos is the same?
- bne.s Robotnik_HudLives_MoveDisplay ; If not, branch
- addq.b #2,ob2ndRout(a0) ; Jump to next routine
- Robotnik_HudLives_AddHits:
- move.b obColProp(a2),d0 ; Copy current object hits into d0
- subq.w #1,obTimer(a0) ; Timer was ended?
- bpl.s Robotnik_HudLives_AddHitsCheck ; If not, branch
- addq.b #1,obColProp(a0) ; Add hits in HUD object
- move.w #3,obTimer(a0) ; Set timer
- moveq #$FFFFFFCD,d0
- jsr (PlaySound_Special).l ; Play sound
- Robotnik_HudLives_AddHitsCheck:
- cmp.b obColProp(a0),d0 ; Number of hits is the same?
- bne.s Robotnik_HudLives_MoveDisplay ; If not, branch
- addq.b #2,ob2ndRout(a0) ; Jump to next routine
- moveq #$FFFFFFC5,d0
- jsr (PlaySound_Special).l ; Play sound
- Robotnik_HudLives_MoveUp:
- move.b obColProp(a2),obColProp(a0)
- tst.b (v_bossstatus).w ; Boss status is empty?
- beq.s Robotnik_HudLives_MoveDisplay ; If yes, branch
- subq.w #1,obScreenY(a0) ; Upward movement
- cmpi.w #$28,obScreenY(a0) ; Ypos is the same?
- bne.s Robotnik_HudLives_MoveDisplay ; If not, branch
- addq.b #2,ob2ndRout(a0) ; Jump to next routine
- Robotnik_HudLives_MoveDisplay:
- move #$2700,sr ; Disable interrupts
- bsr.s Robotnik_HudLives_DynamicVRAM
- move #$2300,sr ; Enable interrupts
- jmp (DisplaySprite).l
- ; ---------------------------------------------------------------------------
- Robotnik_HudLives_MoveRemove:
- jmp (DeleteObject).l
- ; ---------------------------------------------------------------------------
- Robotnik_HudLives_DynamicVRAM:
- lea ($C00000).l,a6
- moveq #0,d1 ; Clear d1
- moveq #0,d6 ; Clear d6
- move.b obColProp(a0),d1 ; Load number of hits
- move.l obVRAM(a0),d0 ; Load VRAM address
- lea ObData_HudLives_10(pc),a1
- cmpi.b #100,d1 ; Number 100 or more?
- blo.s Robotnik_HudLives_LoadData ; If not, branch
- lea ObData_HudLives_100(pc),a1
- Robotnik_HudLives_LoadData:
- move.b (a1)+,obFrame(a0) ; Set current frame
- move.b (a1)+,d6 ; Set time repeats
- move.l (a1)+,a2 ; Load address size numbers '00/000'
- Robotnik_HudLives_LoadArt:
- moveq #0,d4 ; Clear d4
- movea.l obPointer(a0),a1 ; Load address of uncompressed HUD art
- Robotnik_HudLives_Loop:
- moveq #0,d2 ; Clear d2
- move.l d0,4(a6) ; Store VPD address
- move.l (a2)+,d3
- Robotnik_HudLives_FindDigit:
- sub.l d3,d1
- bcs.s Robotnik_HudLives_LivesWrite
- addq.w #1,d2 ; Add 1 to digit
- bra.s Robotnik_HudLives_FindDigit
- ; ---------------------------------------------------------------------------
- Robotnik_HudLives_LivesWrite:
- add.l d3,d1
- tst.w d2 ; Is digit zero?
- beq.s Robotnik_HudLives_CheckZero ; If yes, branch
- move.w #1,d4
- Robotnik_HudLives_CheckZero:
- tst.w d4 ; This digit is not used?
- beq.s Robotnik_HudLives_ClrLives ; If yes, branch
- Robotnik_HudLives_GetTile:
- lsl.w #5,d2 ; Logical shift
- lea (a1,d2.w),a3 ; Get tile to load
- rept 8 ; Tile size 8x8
- move.l (a3)+,(a6) ; Copy tile 8x1 to VRAM
- endr
- Robotnik_HudLives_LivesNext:
- addi.l #$400000,d0
- dbf d6,Robotnik_HudLives_Loop
- rts
- ; ---------------------------------------------------------------------------
- Robotnik_HudLives_ClrLives:
- tst.w d6
- beq.s Robotnik_HudLives_GetTile
- moveq #8-1,d5
- Robotnik_HudLives_WriteTile:
- move.l #0,(a6) ; Fill VRAM with #0
- dbf d5,Robotnik_HudLives_WriteTile ; Repeat 8 more times
- bra.s Robotnik_HudLives_LivesNext
- ; =============== S U B R O U T I N E =======================================
- LoadObjects_Data:
- move.l (a1)+,obMap(a0) ; Mappings location
- move.w (a1)+,obGfx(a0) ; VRAM offset
- LoadObjects_ExtraData:
- move.b (a1)+,obPriority(a0) ; Priority
- move.b (a1)+,obWidth(a0) ; Width
- move.b (a1)+,obHeight(a0) ; Height
- move.b (a1)+,obActWid(a0) ; Action width
- move.b (a1)+,obFrame(a0) ; Mappings frame
- move.b (a1)+,obColType(a0) ; Collision Number
- bset #2,obRender(a0) ; Object uses world coordinates
- rts
- ; ---------------------------------------------------------------------------
- ObjectsRoutine:
- moveq #0,d0 ; Clear d0
- move.b obRoutine(a0),d0
- adda.w (a1,d0.w),a1
- jmp (a1,d0.w)
- ; ---------------------------------------------------------------------------
- ChildObjectsRoutine:
- moveq #0,d0 ; Clear d0
- move.b ob2ndRout(a0),d0
- adda.w (a1,d0.w),a1
- jmp (a1,d0.w)
- ; ---------------------------------------------------------------------------
- Create_ChildObject:
- moveq #0,d2 ; Clear d2
- move.w (a2)+,d6 ; Creates x number of the object at the parent's position
- @1 jsr (SingleObjLoad2).l
- bne.s @2
- move.w a0,obParent(a1) ; Parent RAM address into another parent RAM address
- move.l obMap(a0),obMap(a1)
- move.w obGfx(a0),obGfx(a1) ; Mappings and VRAM offset copied from parent object
- move.w (a2)+,d3
- move.b d3,(a1) ; Object address
- move.b d2,obSubtype(a1)
- move.w obX(a0),obX(a1) ; Copy object Xpos into another object Xpos
- move.w obY(a0),obY(a1) ; Copy object Ypos into another object Ypos
- move.w (a2)+,obRoutine(a1)
- addq.w #2,d2
- dbf d6,@1
- moveq #0,d0 ; Clear d0
- @2 rts
- ; ---------------------------------------------------------------------------
- Create_ChildObject2:
- moveq #0,d2 ; Clear d2
- move.w (a2)+,d6 ; Creates x number of the same object at the parent's position
- @1 jsr (SingleObjLoad2).l
- bne.s @2
- move.w a0,obParent(a1) ; Parent RAM address into another parent RAM address
- move.l obMap(a0),obMap(a1)
- move.w obGfx(a0),obGfx(a1) ; Mappings and VRAM offset copied from parent object
- move.b (a0),(a1) ; Object address
- move.b d2,obSubtype(a1)
- move.w obX(a0),obX(a1) ; Copy object Xpos into another object Xpos
- move.w obY(a0),obY(a1) ; Copy object Ypos into another object Ypos
- move.w (a2),obRoutine(a1)
- addq.w #2,d2
- dbf d6,@1
- moveq #0,d0 ; Clear d0
- @2 rts
- ; ---------------------------------------------------------------------------
- Object_Wait:
- tst.w obTimer(a0)
- beq.s @1
- subq.w #1,obTimer(a0)
- addq.w #4,sp ; Skip
- @1 rts
- ; ---------------------------------------------------------------------------
- RobotnikBoss_MoveSprite:
- bsr.s RobotnikBoss_MoveSprite2
- addi.w #$38,obVelY(a0) ; Increase vertical speed (apply gravity)
- rts
- ; ---------------------------------------------------------------------------
- RobotnikBoss_MoveSprite2:
- move.w obVelX(a0),d0 ; Load horizontal speed
- ext.l d0 ; Extend a sign
- asl.l #8,d0 ; Shift velocity to line up with the middle 16 bits of the 32-bit position
- add.l d0,obX(a0) ; Add to x-axis position
- move.w obVelY(a0),d0 ; Load vertical speed
- ext.l d0 ; Extend a sign
- asl.l #8,d0 ; Shift velocity to line up with the middle 16 bits of the 32-bit position
- add.l d0,obY(a0) ; Add to y-axis position
- rts
- ; ---------------------------------------------------------------------------
- RobotnikBoss_SwingUpAndDown:
- moveq #0,d0 ; Clear d0
- move.b obAngle(a0),d0 ; Copy object angle to d0
- addq.b #2,d0 ; Add 2 to the angle
- move.b d0,obAngle(a0) ; Set current object angle
- jsr (CalcSine).l ; Calculates the sine and cosine
- asr.w #2,d0 ; Arithmetic shift
- move.w d0,obVelY(a0) ; Set object Y speed
- rts
- ; =============== S U B R O U T I N E =======================================
- ObjDat3_RobotnikBoss_Robotnik:
- dc.l Map_Eggman
- dc.w $400
- dc.b 3
- dc.b $20
- dc.b $20
- dc.b $20
- dc.b 0
- dc.b $F
- ObjDat3_RobotnikBoss_RobotnikFace:
- dc.b 3
- dc.b $20
- dc.b $20
- dc.b $20
- dc.b 1
- dc.b 0
- ObjDat3_RobotnikBoss_RobotnikFire:
- dc.b 3
- dc.b $20
- dc.b $20
- dc.b $20
- dc.b 3
- dc.b 0
- ObData_HudLives_10:
- dc.b 0 ; Frame
- dc.b 2-1 ; Time repeats
- dc.l Hud_10 ; Load size numbers '00'
- ObData_HudLives_100:
- dc.b 1 ; Frame
- dc.b 3-1 ; Time repeats
- dc.l Hud_100 ; Load size numbers '000'
- ChildObjDat_RobotnikFaceAndFlame:
- dc.w 2-1
- dc.w (obSlot_RobotnikBoss)
- dc.b (RobotnikBoss_RobotnikFace_Index-RobotnikBoss_Index),(RobotnikBoss_RobotnikFace_ShipIndex-RobotnikBoss_RobotnikFace_ShipIndex)
- dc.w (obSlot_RobotnikBoss)
- dc.b (RobotnikBoss_RobotnikFlame_Index-RobotnikBoss_Index),(RobotnikBoss_RobotnikFlame_ShipIndex-RobotnikBoss_RobotnikFlame_ShipIndex)
- ChildObjDat_RobotnikHud:
- dc.w 1-1
- dc.w (obSlot_RobotnikBoss)
- dc.b (RobotnikBoss_EggmanLives_Index-RobotnikBoss_Index),(Robotnik_HudLives_ShipIndex-Robotnik_HudLives_ShipIndex)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement