Merge pull request #53 from scawful/minecart-review
Minecart, Mineswitch, and Switch Track Sprite Refactor
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,6 @@
|
||||
; =========================================================
|
||||
; Sprite Properties
|
||||
; =========================================================
|
||||
|
||||
!SPRID = $AF ; The sprite ID you are overwriting (HEX)
|
||||
!NbrTiles = 02 ; Number of tiles used in a frame
|
||||
@@ -29,6 +32,7 @@
|
||||
|
||||
%Set_Sprite_Properties(Sprite_LeverSwitch_Prep, Sprite_LeverSwitch_Long);
|
||||
|
||||
; =========================================================
|
||||
|
||||
Sprite_LeverSwitch_Long:
|
||||
{
|
||||
@@ -45,6 +49,7 @@ Sprite_LeverSwitch_Long:
|
||||
RTL ; Go back to original code
|
||||
}
|
||||
|
||||
; =========================================================
|
||||
|
||||
Sprite_LeverSwitch_Prep:
|
||||
{
|
||||
@@ -57,6 +62,7 @@ Sprite_LeverSwitch_Prep:
|
||||
RTL
|
||||
}
|
||||
|
||||
; =========================================================
|
||||
|
||||
Sprite_LeverSwitch_Main:
|
||||
{
|
||||
@@ -140,82 +146,82 @@ Sprite_LeverSwitch_Main:
|
||||
}
|
||||
}
|
||||
|
||||
; =========================================================
|
||||
|
||||
Sprite_LeverSwitch_Draw:
|
||||
{
|
||||
JSL Sprite_PrepOamCoord
|
||||
JSL Sprite_OAM_AllocateDeferToPlayer
|
||||
JSL Sprite_PrepOamCoord
|
||||
JSL Sprite_OAM_AllocateDeferToPlayer
|
||||
|
||||
LDA $0DC0, X : CLC : ADC $0D90, X : TAY;Animation Frame
|
||||
LDA .start_index, Y : STA $06
|
||||
LDA $0DC0, X : CLC : ADC $0D90, X : TAY;Animation Frame
|
||||
LDA .start_index, Y : STA $06
|
||||
|
||||
|
||||
PHX
|
||||
LDX .nbr_of_tiles, Y ;amount of tiles -1
|
||||
LDY.b #$00
|
||||
PHX
|
||||
LDX .nbr_of_tiles, Y ;amount of tiles -1
|
||||
LDY.b #$00
|
||||
.nextTile
|
||||
|
||||
PHX ; Save current Tile Index?
|
||||
|
||||
TXA : CLC : ADC $06 ; Add Animation Index Offset
|
||||
PHX ; Save current Tile Index?
|
||||
|
||||
TXA : CLC : ADC $06 ; Add Animation Index Offset
|
||||
|
||||
PHA ; Keep the value with animation index offset?
|
||||
PHA ; Keep the value with animation index offset?
|
||||
|
||||
ASL A : TAX
|
||||
ASL A : TAX
|
||||
|
||||
REP #$20
|
||||
REP #$20
|
||||
|
||||
LDA $00 : CLC : ADC .x_offsets, X : STA ($90), Y
|
||||
AND.w #$0100 : STA $0E
|
||||
INY
|
||||
LDA $02 : CLC : ADC .y_offsets, X : STA ($90), Y
|
||||
CLC : ADC #$0010 : CMP.w #$0100
|
||||
SEP #$20
|
||||
BCC .on_screen_y
|
||||
LDA $00 : CLC : ADC .x_offsets, X : STA ($90), Y
|
||||
AND.w #$0100 : STA $0E
|
||||
INY
|
||||
LDA $02 : CLC : ADC .y_offsets, X : STA ($90), Y
|
||||
CLC : ADC #$0010 : CMP.w #$0100
|
||||
SEP #$20
|
||||
BCC .on_screen_y
|
||||
|
||||
LDA.b #$F0 : STA ($90), Y ;Put the sprite out of the way
|
||||
STA $0E
|
||||
LDA.b #$F0 : STA ($90), Y ;Put the sprite out of the way
|
||||
STA $0E
|
||||
.on_screen_y
|
||||
|
||||
PLX ; Pullback Animation Index Offset (without the *2 not 16bit anymore)
|
||||
INY
|
||||
LDA .chr, X : STA ($90), Y
|
||||
INY
|
||||
LDA .properties, X : STA ($90), Y
|
||||
PLX ; Pullback Animation Index Offset (without the *2 not 16bit anymore)
|
||||
INY
|
||||
LDA .chr, X : STA ($90), Y
|
||||
INY
|
||||
LDA .properties, X : STA ($90), Y
|
||||
|
||||
PHY
|
||||
|
||||
TYA : LSR #2 : TAY
|
||||
|
||||
LDA .sizes, X : ORA $0F : STA ($92), Y ; store size in oam buffer
|
||||
|
||||
PLY : INY
|
||||
|
||||
PLX : DEX : BPL .nextTile
|
||||
PHY
|
||||
|
||||
TYA : LSR #2 : TAY
|
||||
|
||||
LDA .sizes, X : ORA $0F : STA ($92), Y ; store size in oam buffer
|
||||
|
||||
PLY : INY
|
||||
|
||||
PLX : DEX : BPL .nextTile
|
||||
|
||||
PLX
|
||||
PLX
|
||||
|
||||
RTS
|
||||
RTS
|
||||
|
||||
|
||||
.start_index
|
||||
db $00, $01
|
||||
db $00, $01
|
||||
.nbr_of_tiles
|
||||
db 0, 0
|
||||
db 0, 0
|
||||
.x_offsets
|
||||
dw 0
|
||||
dw 0
|
||||
dw 0
|
||||
dw 0
|
||||
.y_offsets
|
||||
dw 0
|
||||
dw 0
|
||||
dw 0
|
||||
dw 0
|
||||
.chr
|
||||
db $64
|
||||
db $66
|
||||
db $64
|
||||
db $66
|
||||
.properties
|
||||
db $37
|
||||
db $37
|
||||
db $37
|
||||
db $37
|
||||
.sizes
|
||||
db $02
|
||||
db $02
|
||||
|
||||
db $02
|
||||
db $02
|
||||
}
|
||||
@@ -1,3 +1,7 @@
|
||||
; =========================================================
|
||||
; Sprite Properties
|
||||
; =========================================================
|
||||
|
||||
!SPRID = $B0 ; The sprite ID you are overwriting (HEX)
|
||||
!NbrTiles = 04 ; Number of tiles used in a frame
|
||||
!Harmless = 00 ; 00 = Sprite is Harmful, 01 = Sprite is Harmless
|
||||
@@ -28,6 +32,8 @@
|
||||
|
||||
%Set_Sprite_Properties(Sprite_RotatingTrack_Prep, Sprite_RotatingTrack_Long);
|
||||
|
||||
; =========================================================
|
||||
|
||||
Sprite_RotatingTrack_Long:
|
||||
{
|
||||
PHB : PHK : PLB
|
||||
@@ -43,12 +49,7 @@ Sprite_RotatingTrack_Long:
|
||||
RTL ; Go back to original code
|
||||
}
|
||||
|
||||
; Modes
|
||||
; 0 = TopLeft -> TopRight
|
||||
; 1 = TopRight -> BottomRight
|
||||
; 2 = BottomRight -> BottomLeft
|
||||
; 3 = BottomLeft -> TopLeft
|
||||
; 4 = TopRight -> TopLeft
|
||||
; =========================================================
|
||||
|
||||
Sprite_RotatingTrack_Prep:
|
||||
{
|
||||
@@ -61,18 +62,29 @@ Sprite_RotatingTrack_Prep:
|
||||
RTL
|
||||
}
|
||||
|
||||
; =========================================================
|
||||
; Modes
|
||||
; 0 = TopLeft -> TopRight
|
||||
; 1 = TopRight -> BottomRight
|
||||
; 2 = BottomRight -> BottomLeft
|
||||
; 3 = BottomLeft -> TopLeft
|
||||
; 4 = TopRight -> TopLeft
|
||||
|
||||
SwitchRam = $37
|
||||
|
||||
Sprite_RotatingTrack_Main:
|
||||
{
|
||||
LDA.w SprAction, X
|
||||
JSL UseImplicitRegIndexedLocalJumpTable
|
||||
|
||||
dw TopLeftToTopRight
|
||||
dw TopRightToBottomRight
|
||||
dw BottomRightToBottomLeft
|
||||
dw BottomLeftToTopLeft
|
||||
dw TopRightToTopLeft
|
||||
|
||||
; -------------------------------------------------------
|
||||
; 00 = TopLeft -> TopRight
|
||||
TopLeftToTopRight:
|
||||
{
|
||||
LDA SwitchRam : BNE part2
|
||||
@@ -87,6 +99,8 @@ Sprite_RotatingTrack_Main:
|
||||
RTS
|
||||
}
|
||||
|
||||
; -------------------------------------------------------
|
||||
; 01 = TopRight -> BottomRight
|
||||
TopRightToBottomRight:
|
||||
{
|
||||
LDA SwitchRam : BNE part2_a
|
||||
@@ -101,6 +115,8 @@ Sprite_RotatingTrack_Main:
|
||||
RTS
|
||||
}
|
||||
|
||||
; -------------------------------------------------------
|
||||
; 02 = BottomRight -> BottomLeft
|
||||
BottomRightToBottomLeft:
|
||||
{
|
||||
LDA SwitchRam : BNE part2_b
|
||||
@@ -115,6 +131,8 @@ Sprite_RotatingTrack_Main:
|
||||
RTS
|
||||
}
|
||||
|
||||
; -------------------------------------------------------
|
||||
; 03 = BottomLeft -> TopLeft
|
||||
BottomLeftToTopLeft:
|
||||
{
|
||||
LDA SwitchRam : BNE part2_c
|
||||
@@ -130,6 +148,8 @@ Sprite_RotatingTrack_Main:
|
||||
RTS
|
||||
}
|
||||
|
||||
; -------------------------------------------------------
|
||||
; 04 = TopRight -> TopLeft
|
||||
TopRightToTopLeft:
|
||||
{
|
||||
LDA SwitchRam : BNE part2_d
|
||||
@@ -147,88 +167,92 @@ Sprite_RotatingTrack_Main:
|
||||
}
|
||||
}
|
||||
|
||||
; =========================================================
|
||||
|
||||
Sprite_RotatingTrack_Draw:
|
||||
JSL Sprite_PrepOamCoord
|
||||
JSL Sprite_OAM_AllocateDeferToPlayer
|
||||
{
|
||||
JSL Sprite_PrepOamCoord
|
||||
JSL Sprite_OAM_AllocateDeferToPlayer
|
||||
|
||||
LDA $0DC0, X : CLC : ADC $0D90, X : TAY;Animation Frame
|
||||
LDA .start_index, Y : STA $06
|
||||
LDA $0DC0, X : CLC : ADC $0D90, X : TAY;Animation Frame
|
||||
LDA .start_index, Y : STA $06
|
||||
|
||||
|
||||
PHX
|
||||
LDX .nbr_of_tiles, Y ;amount of tiles -1
|
||||
LDY.b #$00
|
||||
.nextTile
|
||||
PHX
|
||||
LDX .nbr_of_tiles, Y ;amount of tiles -1
|
||||
LDY.b #$00
|
||||
.nextTile
|
||||
|
||||
PHX ; Save current Tile Index?
|
||||
|
||||
TXA : CLC : ADC $06 ; Add Animation Index Offset
|
||||
PHX ; Save current Tile Index?
|
||||
|
||||
TXA : CLC : ADC $06 ; Add Animation Index Offset
|
||||
|
||||
PHA ; Keep the value with animation index offset?
|
||||
PHA ; Keep the value with animation index offset?
|
||||
|
||||
ASL A : TAX
|
||||
ASL A : TAX
|
||||
|
||||
REP #$20
|
||||
REP #$20
|
||||
|
||||
LDA $00 : CLC : ADC .x_offsets, X : STA ($90), Y
|
||||
AND.w #$0100 : STA $0E
|
||||
INY
|
||||
LDA $02 : CLC : ADC .y_offsets, X : STA ($90), Y
|
||||
CLC : ADC #$0010 : CMP.w #$0100
|
||||
SEP #$20
|
||||
BCC .on_screen_y
|
||||
LDA $00 : CLC : ADC .x_offsets, X : STA ($90), Y
|
||||
AND.w #$0100 : STA $0E
|
||||
INY
|
||||
LDA $02 : CLC : ADC .y_offsets, X : STA ($90), Y
|
||||
CLC : ADC #$0010 : CMP.w #$0100
|
||||
SEP #$20
|
||||
BCC .on_screen_y
|
||||
|
||||
LDA.b #$F0 : STA ($90), Y ;Put the sprite out of the way
|
||||
STA $0E
|
||||
.on_screen_y
|
||||
LDA.b #$F0 : STA ($90), Y ;Put the sprite out of the way
|
||||
STA $0E
|
||||
.on_screen_y
|
||||
|
||||
PLX ; Pullback Animation Index Offset (without the *2 not 16bit anymore)
|
||||
INY
|
||||
LDA .chr, X : STA ($90), Y
|
||||
INY
|
||||
LDA .properties, X : STA ($90), Y
|
||||
PLX ; Pullback Animation Index Offset (without the *2 not 16bit anymore)
|
||||
INY
|
||||
LDA .chr, X : STA ($90), Y
|
||||
INY
|
||||
LDA .properties, X : STA ($90), Y
|
||||
|
||||
PHY
|
||||
|
||||
TYA : LSR #2 : TAY
|
||||
|
||||
LDA .sizes, X : ORA $0F : STA ($92), Y ; store size in oam buffer
|
||||
|
||||
PLY : INY
|
||||
|
||||
PLX : DEX : BPL .nextTile
|
||||
PHY
|
||||
|
||||
TYA : LSR #2 : TAY
|
||||
|
||||
LDA .sizes, X : ORA $0F : STA ($92), Y ; store size in oam buffer
|
||||
|
||||
PLY : INY
|
||||
|
||||
PLX : DEX : BPL .nextTile
|
||||
|
||||
PLX
|
||||
PLX
|
||||
|
||||
RTS
|
||||
RTS
|
||||
|
||||
|
||||
.start_index
|
||||
db $00, $01, $02, $03
|
||||
.nbr_of_tiles
|
||||
db 0, 0, 0, 0
|
||||
.x_offsets
|
||||
dw 0
|
||||
dw 0
|
||||
dw 0
|
||||
dw 0
|
||||
.y_offsets
|
||||
dw 0
|
||||
dw 0
|
||||
dw 0
|
||||
dw 0
|
||||
.chr
|
||||
db $44
|
||||
db $44
|
||||
db $44
|
||||
db $44
|
||||
.properties
|
||||
db $7D
|
||||
db $3D
|
||||
db $FD
|
||||
db $BD
|
||||
.sizes
|
||||
db $02
|
||||
db $02
|
||||
db $02
|
||||
db $02
|
||||
.start_index
|
||||
db $00, $01, $02, $03
|
||||
.nbr_of_tiles
|
||||
db 0, 0, 0, 0
|
||||
.x_offsets
|
||||
dw 0
|
||||
dw 0
|
||||
dw 0
|
||||
dw 0
|
||||
.y_offsets
|
||||
dw 0
|
||||
dw 0
|
||||
dw 0
|
||||
dw 0
|
||||
.chr
|
||||
db $44
|
||||
db $44
|
||||
db $44
|
||||
db $44
|
||||
.properties
|
||||
db $7D
|
||||
db $3D
|
||||
db $FD
|
||||
db $BD
|
||||
.sizes
|
||||
db $02
|
||||
db $02
|
||||
db $02
|
||||
db $02
|
||||
}
|
||||
@@ -69,7 +69,7 @@ print "End of mineswitch.asm ", pc
|
||||
incsrc "Sprites/NPCs/village_dog.asm"
|
||||
print "End of village_dog.asm ", pc
|
||||
|
||||
incsrc "Sprites/minecart.asm"
|
||||
incsrc "Sprites/Objects/minecart.asm"
|
||||
print "End of minecart.asm ", pc
|
||||
|
||||
incsrc "Sprites/Bosses/twinrova.asm"
|
||||
|
||||
Reference in New Issue
Block a user