Identify some map object related constants

This commit is contained in:
Rangi 2020-08-17 14:22:27 -04:00
parent 3b003960d4
commit f82097b894
5 changed files with 63 additions and 55 deletions

View file

@ -45,10 +45,13 @@ TRAINER EQU $40
WALK EQU $FE WALK EQU $FE
STAY EQU $FF STAY EQU $FF
DOWN EQU $D0 ANY_DIR EQU $00
UP EQU $D1 UP_DOWN EQU $01
LEFT EQU $D2 LEFT_RIGHT EQU $02
RIGHT EQU $D3 DOWN EQU $D0
NONE EQU $FF UP EQU $D1
LEFT EQU $D2
RIGHT EQU $D3
NONE EQU $FF
BOULDER_MOVEMENT_BYTE_2 EQU $10 BOULDER_MOVEMENT_BYTE_2 EQU $10

View file

@ -12,6 +12,11 @@ SLOTSFISH EQU $0E0C
SLOTSBIRD EQU $1210 SLOTSBIRD EQU $1210
SLOTSMOUSE EQU $1614 SLOTSMOUSE EQU $1614
; StartSlotMachine dialogs
SLOTS_OUTOFORDER EQU $fd
SLOTS_OUTTOLUNCH EQU $fe
SLOTS_SOMEONESKEYS EQU $ff
; in game trades ; in game trades
; TradeMons indexes (see data/events/trades.asm) ; TradeMons indexes (see data/events/trades.asm)
const_def const_def

View file

@ -316,10 +316,10 @@ GameCornerHiddenObjects:
hidden_object 18, 13, $d0, StartSlotMachine hidden_object 18, 13, $d0, StartSlotMachine
hidden_object 18, 12, $d0, StartSlotMachine hidden_object 18, 12, $d0, StartSlotMachine
hidden_object 18, 11, $d0, StartSlotMachine hidden_object 18, 11, $d0, StartSlotMachine
hidden_object 18, 10, $ff, StartSlotMachine ; "Someone's Keys" hidden_object 18, 10, SLOTS_SOMEONESKEYS, StartSlotMachine
hidden_object 13, 10, $d0, StartSlotMachine hidden_object 13, 10, $d0, StartSlotMachine
hidden_object 13, 11, $d0, StartSlotMachine hidden_object 13, 11, $d0, StartSlotMachine
hidden_object 13, 12, $fe, StartSlotMachine ; "Out To Lunch" hidden_object 13, 12, SLOTS_OUTTOLUNCH, StartSlotMachine
hidden_object 13, 13, $d0, StartSlotMachine hidden_object 13, 13, $d0, StartSlotMachine
hidden_object 13, 14, $d0, StartSlotMachine hidden_object 13, 14, $d0, StartSlotMachine
hidden_object 13, 15, $d0, StartSlotMachine hidden_object 13, 15, $d0, StartSlotMachine
@ -338,7 +338,7 @@ GameCornerHiddenObjects:
hidden_object 6, 15, $d0, StartSlotMachine hidden_object 6, 15, $d0, StartSlotMachine
hidden_object 6, 14, $d0, StartSlotMachine hidden_object 6, 14, $d0, StartSlotMachine
hidden_object 6, 13, $d0, StartSlotMachine hidden_object 6, 13, $d0, StartSlotMachine
hidden_object 6, 12, $fd, StartSlotMachine ; "Out Of Order" hidden_object 6, 12, SLOTS_OUTOFORDER, StartSlotMachine
hidden_object 6, 11, $d0, StartSlotMachine hidden_object 6, 11, $d0, StartSlotMachine
hidden_object 6, 10, $d0, StartSlotMachine hidden_object 6, 10, $d0, StartSlotMachine
hidden_object 1, 10, $d0, StartSlotMachine hidden_object 1, 10, $d0, StartSlotMachine
@ -416,8 +416,8 @@ MtMoon3HiddenObjects:
db -1 ; end db -1 ; end
IndigoPlateauHiddenObjects: IndigoPlateauHiddenObjects:
hidden_object 8, 13, $ff, PrintIndigoPlateauHQText hidden_object 8, 13, $ff, PrintIndigoPlateauHQText ; inaccessible
hidden_object 11, 13, SPRITE_FACING_DOWN, PrintIndigoPlateauHQText hidden_object 11, 13, SPRITE_FACING_DOWN, PrintIndigoPlateauHQText ; inaccessible
db -1 ; end db -1 ; end
Route25HiddenObjects: Route25HiddenObjects:
@ -471,7 +471,7 @@ Route13HiddenObjects:
db -1 ; end db -1 ; end
SafariZoneEntranceHiddenObjects: SafariZoneEntranceHiddenObjects:
hidden_object 10, 1, NUGGET, HiddenItems hidden_object 10, 1, NUGGET, HiddenItems ; inaccessible
db -1 ; end db -1 ; end
SafariZoneWestHiddenObjects: SafariZoneWestHiddenObjects:

View file

@ -93,9 +93,9 @@ UpdatePlayerSprite:
ld c, a ld c, a
ld a, [wGrassTile] ld a, [wGrassTile]
cp c cp c
ld a, $0 ld a, 0
jr nz, .next2 jr nz, .next2
ld a, $80 ld a, OAM_BEHIND_BG
.next2 .next2
ld [wSpritePlayerStateData2GrassPriority], a ld [wSpritePlayerStateData2GrassPriority], a
ret ret
@ -150,15 +150,15 @@ UpdateNPCSprite:
and a and a
ret nz ; don't do anything yet if player is currently moving (redundant, already tested in CheckSpriteAvailability) ret nz ; don't do anything yet if player is currently moving (redundant, already tested in CheckSpriteAvailability)
call InitializeSpriteScreenPosition call InitializeSpriteScreenPosition
ld h, $c2 ld h, HIGH(wSpriteStateData2)
ldh a, [hCurrentSpriteOffset] ldh a, [hCurrentSpriteOffset]
add $6 add $6
ld l, a ld l, a
ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1 ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1
inc a inc a
jr z, .randomMovement ; value $FF jr z, .randomMovement ; value STAY
inc a inc a
jr z, .randomMovement ; value $FE jr z, .randomMovement ; value WALK
; scripted movement ; scripted movement
dec a dec a
ld [hl], a ; increment movement byte 1 (movement data index) ld [hl], a ; increment movement byte 1 (movement data index)
@ -184,7 +184,7 @@ UpdateNPCSprite:
.next .next
cp WALK cp WALK
jr nz, .determineDirection jr nz, .determineDirection
; current NPC movement data is $fe. this seems buggy ; current NPC movement data is WALK ($fe). this seems buggy
ld [hl], $1 ; set movement byte 1 to $1 ld [hl], $1 ; set movement byte 1 to $1
ld de, wNPCMovementDirections ld de, wNPCMovementDirections
call LoadDEPlusA ; a = [wNPCMovementDirections + $fe] (?) call LoadDEPlusA ; a = [wNPCMovementDirections + $fe] (?)
@ -195,20 +195,20 @@ UpdateNPCSprite:
.determineDirection .determineDirection
ld b, a ld b, a
ld a, [wCurSpriteMovement2] ld a, [wCurSpriteMovement2]
cp $d0 cp DOWN
jr z, .moveDown ; movement byte 2 = $d0 forces down jr z, .moveDown
cp $d1 cp UP
jr z, .moveUp ; movement byte 2 = $d1 forces up jr z, .moveUp
cp $d2 cp LEFT
jr z, .moveLeft ; movement byte 2 = $d2 forces left jr z, .moveLeft
cp $d3 cp RIGHT
jr z, .moveRight ; movement byte 2 = $d3 forces right jr z, .moveRight
ld a, b ld a, b
cp $40 ; a < $40: down (or left) cp NPC_MOVEMENT_UP ; NPC_MOVEMENT_DOWN <= a < NPC_MOVEMENT_UP: down (or left)
jr nc, .notDown jr nc, .notDown
ld a, [wCurSpriteMovement2] ld a, [wCurSpriteMovement2]
cp $2 cp LEFT_RIGHT
jr z, .moveLeft ; movement byte 2 = $2 only allows left or right jr z, .moveLeft
.moveDown .moveDown
ld de, 2*SCREEN_WIDTH ld de, 2*SCREEN_WIDTH
add hl, de ; move tile pointer two rows down add hl, de ; move tile pointer two rows down
@ -216,11 +216,11 @@ UpdateNPCSprite:
lb bc, 4, SPRITE_FACING_DOWN lb bc, 4, SPRITE_FACING_DOWN
jr TryWalking jr TryWalking
.notDown .notDown
cp $80 ; $40 <= a < $80: up (or right) cp NPC_MOVEMENT_LEFT ; NPC_MOVEMENT_UP <= a < NPC_MOVEMENT_LEFT: up (or right)
jr nc, .notUp jr nc, .notUp
ld a, [wCurSpriteMovement2] ld a, [wCurSpriteMovement2]
cp $2 cp LEFT_RIGHT
jr z, .moveRight ; movement byte 2 = $2 only allows left or right jr z, .moveRight
.moveUp .moveUp
ld de, -2*SCREEN_WIDTH ld de, -2*SCREEN_WIDTH
add hl, de ; move tile pointer two rows up add hl, de ; move tile pointer two rows up
@ -228,21 +228,21 @@ UpdateNPCSprite:
lb bc, 8, SPRITE_FACING_UP lb bc, 8, SPRITE_FACING_UP
jr TryWalking jr TryWalking
.notUp .notUp
cp $c0 ; $80 <= a < $c0: left (or up) cp NPC_MOVEMENT_RIGHT ; NPC_MOVEMENT_LEFT <= a < NPC_MOVEMENT_RIGHT: left (or up)
jr nc, .notLeft jr nc, .notLeft
ld a, [wCurSpriteMovement2] ld a, [wCurSpriteMovement2]
cp $1 cp UP_DOWN
jr z, .moveUp ; movement byte 2 = $1 only allows up or down jr z, .moveUp
.moveLeft .moveLeft
dec hl dec hl
dec hl ; move tile pointer two columns left dec hl ; move tile pointer two columns left
lb de, 0, -1 lb de, 0, -1
lb bc, 2, SPRITE_FACING_LEFT lb bc, 2, SPRITE_FACING_LEFT
jr TryWalking jr TryWalking
.notLeft ; $c0 <= a: right (or down) .notLeft ; NPC_MOVEMENT_RIGHT <= a: right (or down)
ld a, [wCurSpriteMovement2] ld a, [wCurSpriteMovement2]
cp $1 cp UP_DOWN
jr z, .moveDown ; movement byte 2 = $1 only allows up or down jr z, .moveDown
.moveRight .moveRight
inc hl inc hl
inc hl ; move tile pointer two columns right inc hl ; move tile pointer two columns right
@ -281,7 +281,7 @@ TryWalking:
call CanWalkOntoTile call CanWalkOntoTile
pop de pop de
ret c ; cannot walk there (reinitialization of delay values already done) ret c ; cannot walk there (reinitialization of delay values already done)
ld h, $c2 ld h, HIGH(wSpriteStateData2)
ldh a, [hCurrentSpriteOffset] ldh a, [hCurrentSpriteOffset]
add $4 add $4
ld l, a ld l, a
@ -341,8 +341,8 @@ UpdateSpriteInWalkingAnimation:
add l add l
ld l, a ld l, a
ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1 ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1
cp $fe cp WALK
jr nc, .initNextMovementCounter ; values $fe and $ff jr nc, .initNextMovementCounter ; values WALK or STAY
ldh a, [hCurrentSpriteOffset] ldh a, [hCurrentSpriteOffset]
inc a inc a
ld l, a ld l, a
@ -383,8 +383,8 @@ UpdateSpriteMovementDelay:
ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1 ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1
inc l inc l
inc l inc l
cp $fe cp WALK
jr nc, .tickMoveCounter ; values $fe or $ff jr nc, .tickMoveCounter ; values WALK or STAY
ld [hl], $0 ld [hl], $0
jr .moving jr .moving
.tickMoveCounter .tickMoveCounter
@ -485,8 +485,8 @@ CheckSpriteAvailability:
add SPRITESTATEDATA2_MOVEMENTBYTE1 add SPRITESTATEDATA2_MOVEMENTBYTE1
ld l, a ld l, a
ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1 ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1
cp $fe cp WALK
jr c, .skipXVisibilityTest ; movement byte 1 < $fe (i.e. the sprite's movement is scripted) jr c, .skipXVisibilityTest ; movement byte 1 < WALK (i.e. the sprite's movement is scripted)
ldh a, [hCurrentSpriteOffset] ldh a, [hCurrentSpriteOffset]
add SPRITESTATEDATA2_MAPY add SPRITESTATEDATA2_MAPY
ld l, a ld l, a
@ -495,7 +495,7 @@ CheckSpriteAvailability:
cp b cp b
jr z, .skipYVisibilityTest jr z, .skipYVisibilityTest
jr nc, .spriteInvisible ; above screen region jr nc, .spriteInvisible ; above screen region
add $8 ; screen is 9 tiles high add SCREEN_HEIGHT / 2 - 1
cp b cp b
jr c, .spriteInvisible ; below screen region jr c, .spriteInvisible ; below screen region
.skipYVisibilityTest .skipYVisibilityTest
@ -505,7 +505,7 @@ CheckSpriteAvailability:
cp b cp b
jr z, .skipXVisibilityTest jr z, .skipXVisibilityTest
jr nc, .spriteInvisible ; left of screen region jr nc, .spriteInvisible ; left of screen region
add $9 ; screen is 10 tiles wide add SCREEN_WIDTH / 2 - 1
cp b cp b
jr c, .spriteInvisible ; right of screen region jr c, .spriteInvisible ; right of screen region
.skipXVisibilityTest .skipXVisibilityTest
@ -519,7 +519,7 @@ CheckSpriteAvailability:
ld a, [hld] ld a, [hld]
cp d cp d
jr nc, .spriteInvisible ; standing on tile with ID >=MAP_TILESET_SIZE (bottom right tile) jr nc, .spriteInvisible ; standing on tile with ID >=MAP_TILESET_SIZE (bottom right tile)
ld bc, -20 ld bc, -SCREEN_WIDTH
add hl, bc ; go back one row of tiles add hl, bc ; go back one row of tiles
ld a, [hli] ld a, [hli]
cp d cp d
@ -547,9 +547,9 @@ CheckSpriteAvailability:
ld l, a ld l, a
ld a, [wGrassTile] ld a, [wGrassTile]
cp c cp c
ld a, $0 ld a, 0
jr nz, .notInGrass jr nz, .notInGrass
ld a, $80 ld a, OAM_BEHIND_BG
.notInGrass .notInGrass
ld [hl], a ; x#SPRITESTATEDATA2_GRASSPRIORITY ld [hl], a ; x#SPRITESTATEDATA2_GRASSPRIORITY
and a and a
@ -587,8 +587,8 @@ CanWalkOntoTile:
add SPRITESTATEDATA2_MOVEMENTBYTE1 add SPRITESTATEDATA2_MOVEMENTBYTE1
ld l, a ld l, a
ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1 ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1
cp $fe cp WALK
jr nc, .notScripted ; values $fe and $ff jr nc, .notScripted ; values WALK or STAY
; always allow walking if the movement is scripted ; always allow walking if the movement is scripted
and a and a
ret ret
@ -603,7 +603,7 @@ CanWalkOntoTile:
jr z, .impassable jr z, .impassable
cp c cp c
jr nz, .tilePassableLoop jr nz, .tilePassableLoop
ld h, $c2 ld h, HIGH(wSpriteStateData2)
ldh a, [hCurrentSpriteOffset] ldh a, [hCurrentSpriteOffset]
add $6 add $6
ld l, a ld l, a

View file

@ -1,10 +1,10 @@
StartSlotMachine: StartSlotMachine:
ld a, [wHiddenObjectFunctionArgument] ld a, [wHiddenObjectFunctionArgument]
cp $fd cp SLOTS_OUTOFORDER
jr z, .printOutOfOrder jr z, .printOutOfOrder
cp $fe cp SLOTS_OUTTOLUNCH
jr z, .printOutToLunch jr z, .printOutToLunch
cp $ff cp SLOTS_SOMEONESKEYS
jr z, .printSomeonesKeys jr z, .printSomeonesKeys
farcall AbleToPlaySlotsCheck farcall AbleToPlaySlotsCheck
ld a, [wCanPlaySlots] ld a, [wCanPlaySlots]