diff options
Diffstat (limited to 'engine/overworld/map_sprites.asm')
-rwxr-xr-x | engine/overworld/map_sprites.asm | 416 |
1 files changed, 208 insertions, 208 deletions
diff --git a/engine/overworld/map_sprites.asm b/engine/overworld/map_sprites.asm index 2a221c7e..8a6057a0 100755 --- a/engine/overworld/map_sprites.asm +++ b/engine/overworld/map_sprites.asm @@ -12,113 +12,113 @@ InitMapSprites: call InitOutsideMapSprites ret c ; return if the map is an outside map (already handled by above call) ; if the map is an inside map (i.e. mapID >= $25) - ld hl,wSpriteStateData1 - ld de,wSpriteStateData2 + $0d + ld hl, wSpriteStateData1 + ld de, wSpriteStateData2 + $0d ; Loop to copy picture ID's from $C1X0 to $C2XD for LoadMapSpriteTilePatterns. .copyPictureIDLoop - ld a,[hl] ; $C1X0 (picture ID) - ld [de],a ; $C2XD - ld a,$10 + ld a, [hl] ; $C1X0 (picture ID) + ld [de], a ; $C2XD + ld a, $10 add e - ld e,a - ld a,$10 + ld e, a + ld a, $10 add l - ld l,a - jr nz,.copyPictureIDLoop + ld l, a + jr nz, .copyPictureIDLoop ; This is used for both inside and outside maps, since it is called by ; InitOutsideMapSprites. ; Loads tile pattern data for sprites into VRAM. LoadMapSpriteTilePatterns: - ld a,[wNumSprites] + ld a, [wNumSprites] and a ; are there any sprites? - jr nz,.spritesExist + jr nz, .spritesExist ret .spritesExist - ld c,a ; c = [wNumSprites] - ld b,$10 ; number of sprite slots - ld hl,wSpriteStateData2 + $0d + ld c, a ; c = [wNumSprites] + ld b, $10 ; number of sprite slots + ld hl, wSpriteStateData2 + $0d xor a - ld [hFourTileSpriteCount],a + ld [hFourTileSpriteCount], a .copyPictureIDLoop ; loop to copy picture ID from $C2XD to $C2XE - ld a,[hli] ; $C2XD (sprite picture ID) - ld [hld],a ; $C2XE - ld a,l - add a,$10 - ld l,a + ld a, [hli] ; $C2XD (sprite picture ID) + ld [hld], a ; $C2XE + ld a, l + add $10 + ld l, a dec b - jr nz,.copyPictureIDLoop - ld hl,wSpriteStateData2 + $1e + jr nz, .copyPictureIDLoop + ld hl, wSpriteStateData2 + $1e .loadTilePatternLoop - ld de,wSpriteStateData2 + $1d + ld de, wSpriteStateData2 + $1d ; Check if the current picture ID has already had its tile patterns loaded. ; This done by looping through the previous sprite slots and seeing if any of ; their picture ID's match that of the current sprite slot. .checkIfAlreadyLoadedLoop - ld a,e - and a,$f0 - ld b,a ; b = offset of the wSpriteStateData2 sprite slot being checked against - ld a,l - and a,$f0 ; a = offset of current wSpriteStateData2 sprite slot + ld a, e + and $f0 + ld b, a ; b = offset of the wSpriteStateData2 sprite slot being checked against + ld a, l + and $f0 ; a = offset of current wSpriteStateData2 sprite slot cp b ; done checking all previous sprite slots? - jr z,.notAlreadyLoaded - ld a,[de] ; picture ID of the wSpriteStateData2 sprite slot being checked against + jr z, .notAlreadyLoaded + ld a, [de] ; picture ID of the wSpriteStateData2 sprite slot being checked against cp [hl] ; do the picture ID's match? - jp z,.alreadyLoaded - ld a,e - add a,$10 - ld e,a + jp z, .alreadyLoaded + ld a, e + add $10 + ld e, a jr .checkIfAlreadyLoadedLoop .notAlreadyLoaded - ld de,wSpriteStateData2 + $0e - ld b,$01 + ld de, wSpriteStateData2 + $0e + ld b, $01 ; loop to find the highest tile pattern VRAM slot (among the first 10 slots) used by a previous sprite slot ; this is done in order to find the first free VRAM slot available .findNextVRAMSlotLoop - ld a,e - add a,$10 - ld e,a - ld a,l + ld a, e + add $10 + ld e, a + ld a, l cp e ; reached current slot? - jr z,.foundNextVRAMSlot - ld a,[de] ; $C2YE (VRAM slot) - cp a,11 ; is it one of the first 10 slots? - jr nc,.findNextVRAMSlotLoop + jr z, .foundNextVRAMSlot + ld a, [de] ; $C2YE (VRAM slot) + cp 11 ; is it one of the first 10 slots? + jr nc, .findNextVRAMSlotLoop cp b ; compare the slot being checked to the current max - jr c,.findNextVRAMSlotLoop ; if the slot being checked is less than the current max + jr c, .findNextVRAMSlotLoop ; if the slot being checked is less than the current max ; if the slot being checked is greater than or equal to the current max - ld b,a ; store new max VRAM slot + ld b, a ; store new max VRAM slot jr .findNextVRAMSlotLoop .foundNextVRAMSlot inc b ; increment previous max value to get next VRAM tile pattern slot - ld a,b ; a = next VRAM tile pattern slot + ld a, b ; a = next VRAM tile pattern slot push af - ld a,[hl] ; $C2XE (sprite picture ID) - ld b,a ; b = current sprite picture ID - cp a,SPRITE_BALL ; is it a 4-tile sprite? - jr c,.notFourTileSprite + ld a, [hl] ; $C2XE (sprite picture ID) + ld b, a ; b = current sprite picture ID + cp SPRITE_BALL ; is it a 4-tile sprite? + jr c, .notFourTileSprite pop af - ld a,[hFourTileSpriteCount] - add a,11 + ld a, [hFourTileSpriteCount] + add 11 jr .storeVRAMSlot .notFourTileSprite pop af .storeVRAMSlot - ld [hl],a ; store VRAM slot at $C2XE - ld [hVRAMSlot],a ; used to determine if it's 4-tile sprite later - ld a,b ; a = current sprite picture ID + ld [hl], a ; store VRAM slot at $C2XE + ld [hVRAMSlot], a ; used to determine if it's 4-tile sprite later + ld a, b ; a = current sprite picture ID dec a add a add a push bc push hl - ld hl,SpriteSheetPointerTable - jr nc,.noCarry + ld hl, SpriteSheetPointerTable + jr nc, .noCarry inc h .noCarry add l - ld l,a - jr nc,.noCarry2 + ld l, a + jr nc, .noCarry2 inc h .noCarry2 push hl @@ -126,69 +126,69 @@ LoadMapSpriteTilePatterns: push af push de push bc - ld hl,vNPCSprites ; VRAM base address - ld bc,$c0 ; number of bytes per VRAM slot - ld a,[hVRAMSlot] - cp a,11 ; is it a 4-tile sprite? - jr nc,.fourTileSpriteVRAMAddr - ld d,a + ld hl, vNPCSprites ; VRAM base address + ld bc, $c0 ; number of bytes per VRAM slot + ld a, [hVRAMSlot] + cp 11 ; is it a 4-tile sprite? + jr nc, .fourTileSpriteVRAMAddr + ld d, a dec d ; Equivalent to multiplying $C0 (number of bytes in 12 tiles) times the VRAM ; slot and adding the result to $8000 (the VRAM base address). .calculateVRAMAddrLoop - add hl,bc + add hl, bc dec d - jr nz,.calculateVRAMAddrLoop + jr nz, .calculateVRAMAddrLoop jr .loadStillTilePattern .fourTileSpriteVRAMAddr - ld hl,vSprites + $7c0 ; address for second 4-tile sprite - ld a,[hFourTileSpriteCount] + ld hl, vSprites + $7c0 ; address for second 4-tile sprite + ld a, [hFourTileSpriteCount] and a - jr nz,.loadStillTilePattern + jr nz, .loadStillTilePattern ; if it's the first 4-tile sprite - ld hl,vSprites + $780 ; address for first 4-tile sprite + ld hl, vSprites + $780 ; address for first 4-tile sprite inc a - ld [hFourTileSpriteCount],a + ld [hFourTileSpriteCount], a .loadStillTilePattern pop bc pop de pop af push hl push hl - ld h,d - ld l,e + ld h, d + ld l, e pop de - ld b,a - ld a,[wFontLoaded] - bit 0,a ; reloading upper half of tile patterns after displaying text? - jr nz,.skipFirstLoad ; if so, skip loading data into the lower half - ld a,b - ld b,0 + ld b, a + ld a, [wFontLoaded] + bit 0, a ; reloading upper half of tile patterns after displaying text? + jr nz, .skipFirstLoad ; if so, skip loading data into the lower half + ld a, b + ld b, 0 call FarCopyData2 ; load tile pattern data for sprite when standing still .skipFirstLoad pop de pop hl - ld a,[hVRAMSlot] - cp a,11 ; is it a 4-tile sprite? - jr nc,.skipSecondLoad ; if so, there is no second block + ld a, [hVRAMSlot] + cp 11 ; is it a 4-tile sprite? + jr nc, .skipSecondLoad ; if so, there is no second block push de call ReadSpriteSheetData push af - ld a,$c0 + ld a, $c0 add e - ld e,a - jr nc,.noCarry3 + ld e, a + jr nc, .noCarry3 inc d .noCarry3 - ld a,[wFontLoaded] - bit 0,a ; reloading upper half of tile patterns after displaying text? - jr nz,.loadWhileLCDOn + ld a, [wFontLoaded] + bit 0, a ; reloading upper half of tile patterns after displaying text? + jr nz, .loadWhileLCDOn pop af pop hl - set 3,h ; add $800 to hl + set 3, h ; add $800 to hl push hl - ld h,d - ld l,e + ld h, d + ld l, e pop de call FarCopyData2 ; load tile pattern data for sprite when walking jr .skipSecondLoad @@ -198,8 +198,8 @@ LoadMapSpriteTilePatterns: .loadWhileLCDOn pop af pop hl - set 3,h ; add $800 to hl - ld b,a + set 3, h ; add $800 to hl + ld b, a swap c call CopyVideoData ; load tile pattern data for sprite when walking .skipSecondLoad @@ -208,25 +208,25 @@ LoadMapSpriteTilePatterns: jr .nextSpriteSlot .alreadyLoaded ; if the current picture ID has already had its tile patterns loaded inc de - ld a,[de] ; a = VRAM slot for the current picture ID (from $C2YE) - ld [hl],a ; store VRAM slot in current wSpriteStateData2 sprite slot (at $C2XE) + ld a, [de] ; a = VRAM slot for the current picture ID (from $C2YE) + ld [hl], a ; store VRAM slot in current wSpriteStateData2 sprite slot (at $C2XE) .nextSpriteSlot - ld a,l - add a,$10 - ld l,a + ld a, l + add $10 + ld l, a dec c - jp nz,.loadTilePatternLoop - ld hl,wSpriteStateData2 + $0d - ld b,$10 + jp nz, .loadTilePatternLoop + ld hl, wSpriteStateData2 + $0d + ld b, $10 ; the pictures ID's stored at $C2XD are no longer needed, so zero them .zeroStoredPictureIDLoop xor a - ld [hl],a ; $C2XD - ld a,$10 + ld [hl], a ; $C2XD + ld a, $10 add l - ld l,a + ld l, a dec b - jr nz,.zeroStoredPictureIDLoop + jr nz, .zeroStoredPictureIDLoop ret ; reads data from SpriteSheetPointerTable @@ -237,108 +237,108 @@ LoadMapSpriteTilePatterns: ; bc = length in bytes ; a = ROM bank ReadSpriteSheetData: - ld a,[hli] - ld e,a - ld a,[hli] - ld d,a - ld a,[hli] - ld c,a + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + ld c, a xor a - ld b,a - ld a,[hli] + ld b, a + ld a, [hli] ret ; Loads sprite set for outside maps (cities and routes) and sets VRAM slots. ; sets carry if the map is a city or route, unsets carry if not InitOutsideMapSprites: - ld a,[wCurMap] - cp a,REDS_HOUSE_1F ; is the map a city or a route (map ID less than $25)? + ld a, [wCurMap] + cp REDS_HOUSE_1F ; is the map a city or a route (map ID less than $25)? ret nc ; if not, return - ld hl,MapSpriteSets + ld hl, MapSpriteSets add l - ld l,a - jr nc,.noCarry + ld l, a + jr nc, .noCarry inc h .noCarry - ld a,[hl] ; a = spriteSetID - cp a,$f0 ; does the map have 2 sprite sets? - call nc,GetSplitMapSpriteSetID ; if so, choose the appropriate one - ld b,a ; b = spriteSetID - ld a,[wFontLoaded] - bit 0,a ; reloading upper half of tile patterns after displaying text? - jr nz,.loadSpriteSet ; if so, forcibly reload the sprite set - ld a,[wSpriteSetID] + ld a, [hl] ; a = spriteSetID + cp $f0 ; does the map have 2 sprite sets? + call nc, GetSplitMapSpriteSetID ; if so, choose the appropriate one + ld b, a ; b = spriteSetID + ld a, [wFontLoaded] + bit 0, a ; reloading upper half of tile patterns after displaying text? + jr nz, .loadSpriteSet ; if so, forcibly reload the sprite set + ld a, [wSpriteSetID] cp b ; has the sprite set ID changed? - jr z,.skipLoadingSpriteSet ; if not, don't load it again + jr z, .skipLoadingSpriteSet ; if not, don't load it again .loadSpriteSet - ld a,b - ld [wSpriteSetID],a + ld a, b + ld [wSpriteSetID], a dec a - ld b,a + ld b, a sla a - ld c,a + ld c, a sla a sla a add c add b ; a = (spriteSetID - 1) * 11 - ld de,SpriteSets + ld de, SpriteSets ; add a to de to get offset of sprite set add e - ld e,a - jr nc,.noCarry2 + ld e, a + jr nc, .noCarry2 inc d .noCarry2 - ld hl,wSpriteStateData2 + $0d - ld a,SPRITE_RED - ld [hl],a - ld bc,wSpriteSet + ld hl, wSpriteStateData2 + $0d + ld a, SPRITE_RED + ld [hl], a + ld bc, wSpriteSet ; Load the sprite set into RAM. ; This loop also fills $C2XD (sprite picture ID) where X is from $0 to $A ; with picture ID's. This is done so that LoadMapSpriteTilePatterns will ; load tile patterns for all sprite pictures in the sprite set. .loadSpriteSetLoop - ld a,$10 + ld a, $10 add l - ld l,a - ld a,[de] ; sprite picture ID from sprite set - ld [hl],a ; $C2XD (sprite picture ID) - ld [bc],a + ld l, a + ld a, [de] ; sprite picture ID from sprite set + ld [hl], a ; $C2XD (sprite picture ID) + ld [bc], a inc de inc bc - ld a,l - cp a,$bd ; reached 11th sprite slot? - jr nz,.loadSpriteSetLoop - ld b,4 ; 4 remaining sprite slots + ld a, l + cp $bd ; reached 11th sprite slot? + jr nz, .loadSpriteSetLoop + ld b, 4 ; 4 remaining sprite slots .zeroRemainingSlotsLoop ; loop to zero the picture ID's of the remaining sprite slots - ld a,$10 + ld a, $10 add l - ld l,a + ld l, a xor a - ld [hl],a ; $C2XD (sprite picture ID) + ld [hl], a ; $C2XD (sprite picture ID) dec b - jr nz,.zeroRemainingSlotsLoop - ld a,[wNumSprites] + jr nz, .zeroRemainingSlotsLoop + ld a, [wNumSprites] push af ; save number of sprites - ld a,11 ; 11 sprites in sprite set - ld [wNumSprites],a + ld a, 11 ; 11 sprites in sprite set + ld [wNumSprites], a call LoadMapSpriteTilePatterns pop af - ld [wNumSprites],a ; restore number of sprites - ld hl,wSpriteStateData2 + $1e - ld b,$0f + ld [wNumSprites], a ; restore number of sprites + ld hl, wSpriteStateData2 + $1e + ld b, $0f ; The VRAM tile pattern slots that LoadMapSpriteTilePatterns set are in the ; order of the map's sprite set, not the order of the actual sprites loaded ; for the current map. So, they are not needed and are zeroed by this loop. .zeroVRAMSlotsLoop xor a - ld [hl],a ; $C2XE (VRAM slot) - ld a,$10 + ld [hl], a ; $C2XE (VRAM slot) + ld a, $10 add l - ld l,a + ld l, a dec b - jr nz,.zeroVRAMSlotsLoop + jr nz, .zeroVRAMSlotsLoop .skipLoadingSpriteSet - ld hl,wSpriteStateData1 + $10 + ld hl, wSpriteStateData1 + $10 ; This loop stores the correct VRAM tile pattern slots according the sprite ; data from the map's header. Since the VRAM tile pattern slots are filled in ; the order of the sprite set, in order to find the VRAM tile pattern slot @@ -347,94 +347,94 @@ InitOutsideMapSprites: ; (since the Red sprite always has the first VRAM tile pattern slot) is the ; VRAM tile pattern slot. .storeVRAMSlotsLoop - ld c,0 - ld a,[hl] ; $C1X0 (picture ID) (zero if sprite slot is not used) + ld c, 0 + ld a, [hl] ; $C1X0 (picture ID) (zero if sprite slot is not used) and a ; is the sprite slot used? - jr z,.skipGettingPictureIndex ; if the sprite slot is not used - ld b,a ; b = picture ID - ld de,wSpriteSet + jr z, .skipGettingPictureIndex ; if the sprite slot is not used + ld b, a ; b = picture ID + ld de, wSpriteSet ; Loop to find the index of the sprite's picture ID within the sprite set. .getPictureIndexLoop inc c - ld a,[de] + ld a, [de] inc de cp b ; does the picture ID match? - jr nz,.getPictureIndexLoop + jr nz, .getPictureIndexLoop inc c .skipGettingPictureIndex push hl inc h - ld a,$0e + ld a, $0e add l - ld l,a - ld a,c ; a = VRAM slot (zero if sprite slot is not used) - ld [hl],a ; $C2XE (VRAM slot) + ld l, a + ld a, c ; a = VRAM slot (zero if sprite slot is not used) + ld [hl], a ; $C2XE (VRAM slot) pop hl - ld a,$10 + ld a, $10 add l - ld l,a + ld l, a and a - jr nz,.storeVRAMSlotsLoop + jr nz, .storeVRAMSlotsLoop scf ret ; Chooses the correct sprite set ID depending on the player's position within ; the map for maps with two sprite sets. GetSplitMapSpriteSetID: - cp a,$f8 - jr z,.route20 - ld hl,SplitMapSpriteSets - and a,$0f + cp $f8 + jr z, .route20 + ld hl, SplitMapSpriteSets + and $0f dec a sla a sla a add l - ld l,a - jr nc,.noCarry + ld l, a + jr nc, .noCarry inc h .noCarry - ld a,[hli] ; determines whether the map is split East/West or North/South - cp a,$01 - ld a,[hli] ; position of dividing line - ld b,a - jr z,.eastWestDivide + ld a, [hli] ; determines whether the map is split East/West or North/South + cp $01 + ld a, [hli] ; position of dividing line + ld b, a + jr z, .eastWestDivide .northSouthDivide - ld a,[wYCoord] + ld a, [wYCoord] jr .compareCoord .eastWestDivide - ld a,[wXCoord] + ld a, [wXCoord] .compareCoord cp b - jr c,.loadSpriteSetID + jr c, .loadSpriteSetID ; if in the East side or South side inc hl .loadSpriteSetID - ld a,[hl] + ld a, [hl] ret ; Uses sprite set $01 for West side and $0A for East side. ; Route 20 is a special case because the two map sections have a more complex ; shape instead of the map simply being split horizontally or vertically. .route20 - ld hl,wXCoord - ld a,[hl] - cp a,$2b - ld a,$01 + ld hl, wXCoord + ld a, [hl] + cp $2b + ld a, $01 ret c - ld a,[hl] - cp a,$3e - ld a,$0a + ld a, [hl] + cp $3e + ld a, $0a ret nc - ld a,[hl] - cp a,$37 - ld b,$08 - jr nc,.next - ld b,$0d + ld a, [hl] + cp $37 + ld b, $08 + jr nc, .next + ld b, $0d .next - ld a,[wYCoord] + ld a, [wYCoord] cp b - ld a,$0a + ld a, $0a ret c - ld a,$01 + ld a, $01 ret INCLUDE "data/sprite_sets.asm" |