diff --git a/Dungeons/Objects/Collision/CollisionTablesExpanded.asm b/Dungeons/Objects/Collision/CollisionTablesExpanded.asm index a922447..d6d8fe8 100644 --- a/Dungeons/Objects/Collision/CollisionTablesExpanded.asm +++ b/Dungeons/Objects/Collision/CollisionTablesExpanded.asm @@ -143,8 +143,8 @@ group04: ; 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; ----------------------------------------------------------------------------------- - db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $01, $01, $01, $01, $01 - db $02, $02, $02, $02, $00, $00, $00, $00, $00, $00, $02, $01, $01, $01, $01, $01 + db $00, $00, $02, $02, $02, $02, $02, $02, $02, $02, $02, $01, $01, $01, $01, $01 + db $00, $00, $02, $02, $00, $00, $00, $00, $00, $00, $02, $01, $01, $01, $01, $01 db $01, $01, $00, $00, $00, $00, $00, $00, $00, $00, $02, $02, $02, $02, $02, $02 db $00, $00, $22, $00, $00, $00, $00, $00, $00, $00, $02, $02, $02, $02, $02, $02 diff --git a/Dungeons/Objects/object_handler.asm b/Dungeons/Objects/object_handler.asm index f198d1b..802f1c9 100644 --- a/Dungeons/Objects/object_handler.asm +++ b/Dungeons/Objects/object_handler.asm @@ -2,7 +2,7 @@ incsrc Collision/main.asm -org $018262 ;object id 0x31 +org $018262 ;object id 0x31 dw ExpandedObject @@ -64,19 +64,19 @@ NewObjectsCode: 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 .UpDownFloor-.ObjData ; 06 - dw .LeftRightFloor-.ObjData ; 07 - dw .TopLeftFloor-.ObjData ; 08 - dw .TopRightFloor-.ObjData ; 09 - dw .BottomleftFloor-.ObjData; 10 - dw .BottomRightFloor-.ObjData;11 - dw .FloorAny-.ObjData ; 12 + 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 .UpDownFloor-.ObjData ; 06 + dw .LeftRightFloor-.ObjData ; 07 + dw .TopLeftFloor-.ObjData ; 08 + dw .TopRightFloor-.ObjData ; 09 + dw .BottomleftFloor-.ObjData ; 10 + dw .BottomRightFloor-.ObjData ; 11 + dw .FloorAny-.ObjData ; 12 .ObjData .LeftRight diff --git a/Oracle_main.asm b/Oracle_main.asm index 60cd3aa..3878572 100644 --- a/Oracle_main.asm +++ b/Oracle_main.asm @@ -11,18 +11,18 @@ ; 26 - N/A ; 27 - N/A ; 28 - ZS Reserved -; 29 - ZSprite Engine -; 2A - Sprites: all_sprites.asm +; 29 - ZS Reserved +; 2A - ZS Reserved ; 2B - Items: all_items.asm -; 2C - Dungeon Objects, Spike Subtype +; 2C - Dungeon Objects, Spike Subtype, Together Warp Tag ; 2D - Menu ; 2E - HUD ; 2F - House Tag -; 30 - N/A -; 31 - Deku Link Code -; 32 - Entrance Music Fix -; 33 - Together Warp Tag -; 34 - N/A +; 30 - ZSprite Engine +; 31 - Sprites: all_sprites.asm +; 32 - Entrance Music Fix +; 33 - Custom Collision Tables +; 34 - Deku Link Code ; 35 - Deku Link GFX ; 36 - Zora Link GFX ; 37 - Bunny Link GFX @@ -75,46 +75,16 @@ namespace Oracle print " -- Dungeon -- " print "" - incsrc "Dungeons/keyblock.asm" - print "End of Dungeons/keyblock.asm ", pc - - incsrc "Dungeons/sanctuary_transition.asm" - - incsrc "Dungeons/entrances.asm" - print "End of Dungeons/entrances.asm ", pc - - incsrc "Dungeons/mothula.asm" - print "End of Dungeons/mothula.asm ", pc - - incsrc "Dungeons/enemy_damage.asm" - print "End of Dungeons/enemy_damage.asm ", pc - - incsrc "Dungeons/together_warp_tag.asm" - print "End of together_warp_tag.asm ", pc - - incsrc "Dungeons/arrghus.asm" - print "End of Dungeons/arrghus.asm ", pc - - incsrc "Dungeons/Objects/object_handler.asm" - print "End of object_handler.asm ", pc - - incsrc "Dungeons/spike_subtype.asm" - print "End of spike_subtype.asm ", pc - - incsrc "Dungeons/Lanmola.asm" - print "End of Dungeons/Lanmola.asm ", pc - - incsrc "Dungeons/Lanmola_Expanded.asm" - print "End of Dungeons/Lanmola_Expanded.asm ", pc - - incsrc "Dungeons/house_tag.asm" - print "End of Dungeons/house_tag.asm ", pc + incsrc "Dungeons/dungeons.asm" print "" ; ------------------------------------------------------- ; Music + print " -- Music -- " + print "" + incsrc "Music/frozen_hyrule.asm" print "End of Music/frozen_hyrule.asm ", pc @@ -173,7 +143,6 @@ namespace Oracle ; ------------------------------------------------------- incsrc "Util/all_items.asm" - ; print "End of Util/all_items.asm ", pc incsrc "Dungeons/house_walls.asm" diff --git a/Overworld/custom_gfx.asm b/Overworld/custom_gfx.asm index edc435a..d807e5a 100644 --- a/Overworld/custom_gfx.asm +++ b/Overworld/custom_gfx.asm @@ -4,6 +4,13 @@ org $0AB917 ; after most of the area loading after calling the bird takes place org $028492 ; after leaving a dungeon JSL CheckForChangeGraphicsNormalLoad + +org $02E94A + JSL CheckForSpecialAreaGraphics + +org $0ED5A8 + OverworldPalettesLoader: + org $00E19B InitTilesets: @@ -26,22 +33,39 @@ CheckForChangeGraphicsNormalLoad: .boat_area + RTL } +CheckForSpecialAreaGraphics: +{ + JSL OverworldPalettesLoader + + LDA $8A : CMP.b #$81 : BNE .korok_area + + PHB : PHK : PLB + JSR ApplyKorokSpriteSheets + PLB + + .korok_area + + RTL + +} + ; ============================================================================== ApplyGraphics1: { - REP #$20 ; A = 16, XY = 8 - LDX #$80 : STX $2115 ; Set the video port register every time we write it increase by 1 - LDA #$2C00 : STA $2116 ; Destination of the DMA $5800 in vram <- this need to be divided by 2 - LDA #$1801 : STA $4300 ; DMA Transfer Mode and destination register + REP #$20 ; A = 16, XY = 8 + LDX #$80 : STX $2115 ; Set the video port register every time we write it increase by 1 + LDA #$2C00 : STA $2116 ; Destination of the DMA $5800 in vram <- this need to be divided by 2 + LDA #$1801 : STA $4300 ; DMA Transfer Mode and destination register ; "001 => 2 registers write once (2 bytes: p, p+1)" - LDA.w #BoatBitmap : STA $4302 ; Source address where you want gfx from ROM + LDA.w #BoatBitmap : STA $4302 ; Source address where you want gfx from ROM LDX.b #BoatBitmap>>16 : STX $4304 - LDA #$2000 : STA $4305 ; size of the transfer 4 sheets of $800 each - LDX #$01 : STX $420B ; Do the DMA + LDA #$2000 : STA $4305 ; size of the transfer 4 sheets of $800 each + LDX #$01 : STX $420B ; Do the DMA SEP #$30 @@ -53,3 +77,23 @@ ApplyGraphics1: ; ============================================================================== +ApplyKorokSpriteSheets: +{ + REP #$20 ; A = 16, XY = 8 + LDX #$80 : STX $2115 ; Set the video port register every time we write it increase by 1 + LDA #$5000 : STA $2116 ; Destination of the DMA $5800 in vram <- this need to be divided by 2 + LDA #$1801 : STA $4300 ; DMA Transfer Mode and destination register + ; "001 => 2 registers write once (2 bytes: p, p+1)" + LDA.w #KorokSpriteSheets : STA $4302 ; Source address where you want gfx from ROM + LDX.b #KorokSpriteSheets>>16 : STX $4304 + LDA #$1800 : STA $4305 ; size of the transfer 4 sheets of $800 each + LDX #$01 : STX $420B ; Do the DMA + + SEP #$30 + + RTS + + KorokSpriteSheets: + incbin gfx/korok.bin +} + diff --git a/Sprites/Enemies/sea_urchin.asm b/Sprites/Enemies/sea_urchin.asm index 8cce1b7..5cf2dfc 100644 --- a/Sprites/Enemies/sea_urchin.asm +++ b/Sprites/Enemies/sea_urchin.asm @@ -99,112 +99,109 @@ Sprite_SeaUrchin_Main: Sprite_SeaUrchin_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 -;================================================================================================== -; Sprite Draw Generated Data -; -------------------------------------------------------------------------------------------------- -; This is where the generated Data for the sprite go -;================================================================================================== -.start_index -db $00, $01, $02, $03, $04, $05, $06, $07 -.nbr_of_tiles -db 0, 0, 0, 0, 0, 0, 0, 0 -.x_offsets -dw 0 -dw 0 -dw 0 -dw 0 -dw 0 -dw 0 -dw 0 -dw 0 -.y_offsets -dw 0 -dw -1 -dw 0 -dw -1 -dw 0 -dw -1 -dw 0 -dw -1 -.chr -db $E6 -db $E8 -db $E6 -db $E8 -db $E6 -db $E8 -db $E6 -db $E8 -.properties -db $39 -db $39 -db $79 -db $79 -db $39 -db $39 -db $79 -db $79 -.sizes -db $02 -db $02 -db $02 -db $02 -db $02 -db $02 -db $02 -db $02 + .start_index + db $00, $01, $02, $03, $04, $05, $06, $07 + .nbr_of_tiles + db 0, 0, 0, 0, 0, 0, 0, 0 + .x_offsets + dw 0 + dw 0 + dw 0 + dw 0 + dw 0 + dw 0 + dw 0 + dw 0 + .y_offsets + dw 0 + dw -1 + dw 0 + dw -1 + dw 0 + dw -1 + dw 0 + dw -1 + .chr + db $E6 + db $E8 + db $E6 + db $E8 + db $E6 + db $E8 + db $E6 + db $E8 + .properties + db $39 + db $39 + db $79 + db $79 + db $39 + db $39 + db $79 + db $79 + .sizes + db $02 + db $02 + db $02 + db $02 + db $02 + db $02 + db $02 + db $02 +} diff --git a/Sprites/VillageDog/village_dog.asm b/Sprites/VillageDog/village_dog.asm index 6a167e8..42e2a62 100644 --- a/Sprites/VillageDog/village_dog.asm +++ b/Sprites/VillageDog/village_dog.asm @@ -1,6 +1,4 @@ -;============================================================================== -; Sprite Properties -;============================================================================== + !SPRID = $25 ; The sprite ID you are overwriting (HEX) !NbrTiles = 08 ; Number of tiles used in a frame !Harmless = 01 ; 00 = Sprite is Harmful, 01 = Sprite is Harmless @@ -9,7 +7,7 @@ !Damage = 00 ; (08 is a whole heart), 04 is half heart !DeathAnimation = 00 ; 00 = normal death, 01 = no death animation !ImperviousAll = 00 ; 00 = Can be attack, 01 = attack will clink on it -!SmallShadow = 01 ; 01 = small shadow, 00 = no shadow +!SmallShadow = 00 ; 01 = small shadow, 00 = no shadow !Shadow = 01 ; 00 = don't draw shadow, 01 = draw a shadow !Palette = 00 ; Unused in this VillageDog (can be 0 to 7) !Hitbox = 09 ; 00 to 31, can be viewed in sprite draw tool @@ -31,11 +29,7 @@ %Set_Sprite_Properties(Sprite_VillageDog_Prep, Sprite_VillageDog_Long) -;============================================================================== -; Sprite Long Hook for that sprite -; This code can be left unchanged -; handle the draw code and if the sprite is active and should move or not -;============================================================================== + Sprite_VillageDog_Long: { PHB : PHK : PLB @@ -53,24 +47,14 @@ Sprite_VillageDog_Long: } -;============================================================================== -; Sprite initialization -; this code only get called once perfect to initialize sprites substate or timers -; this code as soon as the room transitions/ overworld transition occurs -;============================================================================== Sprite_VillageDog_Prep: -PHB : PHK : PLB +{ + PHB : PHK : PLB - ; Add more code here to initialize data + PLB + RTL +} -PLB -RTL - -;============================================================================== -; Sprite Main routines code -; This is the main local code of your sprite -; This contains all the Subroutines of your sprites you can add more below -;============================================================================== Sprite_VillageDog_Main: { LDA.w SprAction, X ; Load the SprAction @@ -83,6 +67,7 @@ Sprite_VillageDog_Main: dw Dog_MoveRightTowardsLink ; 04 dw Dog_WagTailLeft ; 05 dw Dog_WagTailRight ; 06 + dw Dog_RandomMovement ; 07 ; 0 Dog_Handler: @@ -91,7 +76,7 @@ Sprite_VillageDog_Main: LDA #$20 : STA.w SprTimerD, X JSL Sprite_IsToRightOfPlayer ; Check if sprite is to the right of player - TYA : BEQ .WalkRight ; If so, go to LookLeft + TYA : BEQ .WalkRight ; If so, go to LookLeft %GotoAction(3) RTS @@ -108,7 +93,7 @@ Sprite_VillageDog_Main: LDA.w SprTimerD, X : BNE + ; Load the timer for the run - LDA #$40 : STA.w SprTimerD, X + LDA #$60 : STA.w SprTimerD, X %GotoAction(3) + RTS @@ -121,7 +106,7 @@ Sprite_VillageDog_Main: LDA.w SprTimerD, X : BNE + ; Load the timer for the run - LDA #$40 : STA.w SprTimerD, X + LDA #$60 : STA.w SprTimerD, X %GotoAction(4) + RTS @@ -131,11 +116,12 @@ Sprite_VillageDog_Main: Dog_MoveLeftTowardsLink: { %PlayAnimation(2,4,6) + JSR CheckForSwitchToRandomMovement JSL Sprite_DirectionToFacePlayer ; Check if the dog is near link, then wag the tail - LDA $0E : CMP.b #$0070 : BCS + + LDA $0E : CMP.b #$00A0 : BCS + CLC - LDA $0F : CMP.b #$0070 : BCS + + LDA $0F : CMP.b #$00A0 : BCS + %GotoAction(5) + @@ -162,11 +148,12 @@ Sprite_VillageDog_Main: { %PlayAnimation(5,7,6) + JSR CheckForSwitchToRandomMovement JSL Sprite_DirectionToFacePlayer ; Check if the dog is near link, then wag the tail - LDA $0E : CMP.b #$0070 : BCS + + LDA $0E : CMP.b #$00A0 : BCS + CLC - LDA $0F : CMP.b #$0070 : BCS + + LDA $0F : CMP.b #$00A0 : BCS + %GotoAction(6) + @@ -189,11 +176,7 @@ Sprite_VillageDog_Main: Dog_WagTailLeft: { %PlayAnimation(0,1, 8) - LDA $02B2 : CMP.b #$05 : BNE .not_minish - %ShowSolicitedMessage($18) : JMP .continue - .not_minish - %ShowSolicitedMessage($1B) - .continue + JSR ShowMessageIfMinish LDA.w SprTimerD, X : BNE + %GotoAction(0) + @@ -204,155 +187,189 @@ Sprite_VillageDog_Main: Dog_WagTailRight: { %PlayAnimation(11,12,8) - LDA $02B2 : CMP.b #$05 : BNE .not_minish - %ShowSolicitedMessage($18) : JMP .continue - .not_minish - %ShowSolicitedMessage($1B) - .continue + JSR ShowMessageIfMinish LDA.w SprTimerD, X : BNE + %GotoAction(0) + RTS } + ; 07 + Dog_RandomMovement: + { + %PlayAnimation(2,4,6) + LDA.w SprTimerD, X : BNE + + ; Load the timer for the run + LDA #$60 : STA.w SprTimerD, X + + JSL GetRandomInt + AND.b #$03 + BEQ .move_left + BNE .move_right + .move_left + + %GotoAction(3) + RTS + .move_right + %GotoAction(4) + RTS + + + + RTS + } + +} + +CheckForSwitchToRandomMovement: +{ +; LDA.w SprTimerD, X : BNE + +; LDA #$60 : STA.w SprTimerD, X +; %GotoAction(7) +; + + RTS +} + + + +ShowMessageIfMinish: +{ + LDA $02B2 : CMP.b #$05 : BNE .not_minish + %ShowSolicitedMessage($18) : JMP .continue +.not_minish + %ShowSolicitedMessage($1B) +.continue + RTS } -;============================================================================== -; Sprite Draw code -; -------------------------------------------------------------------------------------------------- -; Draw the tiles on screen with the data provided by the sprite maker editor -;============================================================================== Sprite_VillageDog_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 -;============================================================================== -; Sprite Draw Generated Data -; This is where the generated Data for the sprite go -;============================================================================== -.start_index -db $00, $04, $08, $0C, $10, $13, $17, $1B, $1F, $20, $21, $22, $26 -.nbr_of_tiles -db 3, 3, 3, 3, 2, 3, 3, 3, 0, 0, 0, 3, 3 -.x_offsets -dw -4, -4, 12, 12 -dw -4, -4, 12, 12 -dw -4, -4, 4, 12 -dw -4, -4, 4, 4 -dw -4, 4, 4 -dw 4, -4, 4, -4 -dw 4, -4, 4, -4 -dw 4, -4, -4, -4 -dw 0 -dw 0 -dw 0 -dw 8, 8, 0, 0 -dw 8, 8, 0, 0 -.y_offsets -dw -4, 4, 4, 12 -dw -4, 4, 4, 12 -dw -8, 0, 0, -8 -dw 0, -8, -8, 0 -dw 0, 0, -16 -dw 0, 0, -8, -8 -dw 0, 0, -16, -8 -dw 0, 0, 8, -8 -dw 0 -dw 0 -dw 0 -dw -4, 4, 4, 12 -dw -4, 4, 4, 12 -.chr -db $10, $20, $22, $32 -db $10, $20, $02, $12 -db $13, $23, $24, $15 -db $26, $16, $17, $27 -db $29, $2A, $0A -db $23, $24, $13, $14 -db $26, $27, $06, $18 -db $29, $2B, $3B, $1B -db $2C -db $2E -db $2E -db $10, $20, $22, $32 -db $10, $20, $02, $12 -.properties -db $37, $37, $37, $37 -db $37, $37, $37, $37 -db $37, $37, $37, $37 -db $37, $37, $37, $37 -db $37, $37, $37 -db $77, $77, $77, $77 -db $77, $77, $77, $77 -db $77, $77, $77, $77 -db $37 -db $77 -db $37 -db $77, $77, $77, $77 -db $77, $77, $77, $77 -.sizes -db $02, $02, $00, $00 -db $02, $02, $00, $00 -db $02, $02, $02, $00 -db $02, $02, $02, $02 -db $02, $02, $02 -db $02, $02, $02, $02 -db $02, $02, $02, $00 -db $02, $00, $00, $00 -db $02 -db $02 -db $02 -db $02, $02, $00, $00 -db $02, $02, $00, $00 + .start_index + db $00, $04, $08, $0C, $10, $13, $17, $1B, $1F, $20, $21, $22, $26 + .nbr_of_tiles + db 3, 3, 3, 3, 2, 3, 3, 3, 0, 0, 0, 3, 3 + .x_offsets + dw -4, -4, 12, 12 + dw -4, -4, 12, 12 + dw -4, -4, 4, 12 + dw -4, -4, 4, 4 + dw -4, 4, 4 + dw 4, -4, 4, -4 + dw 4, -4, 4, -4 + dw 4, -4, -4, -4 + dw 0 + dw 0 + dw 0 + dw 8, 8, 0, 0 + dw 8, 8, 0, 0 + .y_offsets + dw -4, 4, 4, 12 + dw -4, 4, 4, 12 + dw -8, 0, 0, -8 + dw 0, -8, -8, 0 + dw 0, 0, -16 + dw 0, 0, -8, -8 + dw 0, 0, -16, -8 + dw 0, 0, 8, -8 + dw 0 + dw 0 + dw 0 + dw -4, 4, 4, 12 + dw -4, 4, 4, 12 + .chr + db $10, $20, $22, $32 + db $10, $20, $02, $12 + db $13, $23, $24, $15 + db $26, $16, $17, $27 + db $29, $2A, $0A + db $23, $24, $13, $14 + db $26, $27, $06, $18 + db $29, $2B, $3B, $1B + db $2C + db $2E + db $2E + db $10, $20, $22, $32 + db $10, $20, $02, $12 + .properties + db $37, $37, $37, $37 + db $37, $37, $37, $37 + db $37, $37, $37, $37 + db $37, $37, $37, $37 + db $37, $37, $37 + db $77, $77, $77, $77 + db $77, $77, $77, $77 + db $77, $77, $77, $77 + db $37 + db $77 + db $37 + db $77, $77, $77, $77 + db $77, $77, $77, $77 + .sizes + db $02, $02, $00, $00 + db $02, $02, $00, $00 + db $02, $02, $02, $00 + db $02, $02, $02, $02 + db $02, $02, $02 + db $02, $02, $02, $02 + db $02, $02, $02, $00 + db $02, $00, $00, $00 + db $02 + db $02 + db $02 + db $02, $02, $00, $00 + db $02, $02, $00, $00 +} \ No newline at end of file diff --git a/Sprites/minecart.asm b/Sprites/minecart.asm index 0b33266..ddea61d 100644 --- a/Sprites/minecart.asm +++ b/Sprites/minecart.asm @@ -126,18 +126,17 @@ macro HandlePlayerCamera() endmacro macro InitMovement() + LDA.b $22 + STA.b $3F - LDA.b $22 -STA.b $3F + LDA.b $23 + STA.b $41 - LDA.b $23 -STA.b $41 + LDA.b $20 + STA.b $3E -LDA.b $20 -STA.b $3E - - LDA.b $21 - STA.b $40 + LDA.b $21 + STA.b $40 endmacro Sprite_Minecart_Main: @@ -215,11 +214,11 @@ Sprite_Minecart_Main: LDA $36 : BNE .fast_speed LDA.b #-!MinecartSpeed : STA SprYSpeed, X - JMP .continue + JMP .continue .fast_speed LDA.b #-!DoubleSpeed : STA SprYSpeed, X .continue - JSL Sprite_MoveVert + JSL Sprite_MoveVert ; LDA SprY, X : SEC : SBC #$04 : STA $20 ; LDA SprX, X : CLC : ADC #$02 : STA $22 @@ -241,11 +240,11 @@ Sprite_Minecart_Main: %InitMovement() LDA $36 : BNE .fast_speed LDA.b #!MinecartSpeed : STA $0D50, X - JMP .continue + JMP .continue .fast_speed LDA.b #!DoubleSpeed : STA $0D50, X .continue - JSL Sprite_MoveHoriz + JSL Sprite_MoveHoriz JSR DragPlayer JSR CheckForPlayerInput @@ -264,11 +263,11 @@ Sprite_Minecart_Main: %InitMovement() LDA $36 : BNE .fast_speed LDA.b #!MinecartSpeed : STA SprYSpeed, X - JMP .continue + JMP .continue .fast_speed LDA.b #!DoubleSpeed : STA SprYSpeed, X .continue - JSL Sprite_MoveVert + JSL Sprite_MoveVert JSR DragPlayer JSR CheckForPlayerInput @@ -285,13 +284,13 @@ Sprite_Minecart_Main: { %PlayAnimation(0,1,8) %InitMovement() - LDA $36 : BNE .fast_speed + LDA $36 : BNE .fast_speed LDA.b #-!MinecartSpeed : STA $0D50, X JMP .continue .fast_speed LDA.b #-!DoubleSpeed : STA $0D50, X .continue - JSL Sprite_MoveHoriz + JSL Sprite_MoveHoriz JSR DragPlayer JSR CheckForPlayerInput @@ -328,8 +327,11 @@ print "HandleTileDirections ", pc HandleTileDirections: { ; Setup Minecart position to look for tile IDs - LDA.w SprY, X : STA.b $00 : LDA.w SprYH, X : STA.b $01 - LDA.w SprX, X : STA.b $02 : LDA.w SprXH, X : STA.b $03 + ; LDA.w SprY, X : STA.b $00 : LDA.w SprYH, X : STA.b $01 + ; LDA.w SprX, X : STA.b $02 : LDA.w SprXH, X : STA.b $03 + ; Setup Minecart position to look for tile IDs + LDA.w SprY, X : AND #$F8 : STA.b $00 : LDA.w SprYH, X : STA.b $01 + LDA.w SprX, X : AND #$F8 : STA.b $02 : LDA.w SprXH, X : STA.b $03 ; Fetch tile attributes based on current coordinates LDA.b #$00 : JSL Sprite_GetTileAttr @@ -640,15 +642,15 @@ CheckIfPlayerIsOn: LDA $20 : CLC : ADC #$0012 : CMP $0FDA : BCC .OutsideUp LDA $20 : SEC : SBC #$0012 : CMP $0FDA : BCS .OutsideDown - SEP #$21 - RTS ;Return with carry setted + + SEP #$21 : RTS ; Return with carry set .OutsideLeft .OutsideRight .OutsideDown .OutsideUp SEP #$20 - CLC : RTS ;Return with carry cleared + CLC : RTS ; Return with carry cleared } ;==============================================================================