94 lines
1.8 KiB
NASM
94 lines
1.8 KiB
NASM
; Dungeon Object Handler
|
|
|
|
org $018262 ;object id 0x31
|
|
dw ExpandedObject
|
|
|
|
|
|
org $01B53C
|
|
ExpandedObject:
|
|
JSL NewObjectsCode
|
|
RTS
|
|
|
|
|
|
org $2C8000
|
|
NewObjectsCode:
|
|
{
|
|
PHB : PHK : PLB
|
|
PHX
|
|
LDA $00 : PHA
|
|
LDA $02 : PHA
|
|
; $00 Will be used for tile count and tile to skip
|
|
LDA $B2 : ASL #2 : ORA $B4
|
|
|
|
;get the offset for the object data based on the object height
|
|
ASL : TAX
|
|
LDA .ObjOffset, X
|
|
TAX
|
|
|
|
.lineLoop
|
|
LDA .ObjData, X : BNE .continue
|
|
;break
|
|
BRA .Done
|
|
.continue
|
|
PHY ; Keep current position in the buffer
|
|
|
|
STA $00 ; we save the tile count + tile to skip
|
|
|
|
-- ;Tiles Loop
|
|
INX : INX
|
|
|
|
LDA .ObjData, X : BEQ +
|
|
STA [$BF], Y
|
|
+
|
|
|
|
INY : INY
|
|
LDA $00 : DEC : STA $00 : AND #$001F : BNE +
|
|
LDA $00 : XBA : AND #$00FF : STA $00
|
|
PLA ;Pull back position
|
|
CLC : ADC $00 : TAY
|
|
INX : INX
|
|
BRA .lineLoop
|
|
+
|
|
|
|
BRA --
|
|
|
|
.Done
|
|
|
|
PLA : STA $02
|
|
PLA : STA $00 ;Not sure if needed
|
|
|
|
PLX
|
|
PLB
|
|
RTL
|
|
|
|
.ObjOffset
|
|
dw .LeftRight-.ObjData ; 00
|
|
dw .UpDown-.ObjData ; 01
|
|
dw .TopLeft-.ObjData ; 02
|
|
dw .TopRight-.ObjData ; 03
|
|
dw .Bottomleft-.ObjData ; 04
|
|
dw .BottomRight-.ObjData ; 05
|
|
dw .LeftRightFloor-.ObjData ; 06
|
|
dw .UpDownFloor-.ObjData ; 07
|
|
|
|
.ObjData
|
|
.LeftRight
|
|
incbin track_LR.bin
|
|
.UpDown
|
|
incbin track_UD.bin
|
|
.TopLeft
|
|
incbin track_corner_TL.bin
|
|
.TopRight
|
|
incbin track_corner_TR.bin
|
|
.Bottomleft
|
|
incbin track_corner_BL.bin
|
|
.BottomRight
|
|
incbin track_corner_BR.bin
|
|
.LeftRightFloor
|
|
incbin track_floor_UD.bin
|
|
.UpDownFloor
|
|
incbin track_floor_LR.bin
|
|
|
|
}
|
|
|
|
pushpc |