mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
Implement Rock Smash technique (#34)
This commit is contained in:
parent
424598bbf4
commit
16ba25346c
@ -124,6 +124,11 @@ DEF PLAYER_OBJECT EQU 0
|
|||||||
DEF MAPOBJECT_PALETTE_MASK EQU %11110000
|
DEF MAPOBJECT_PALETTE_MASK EQU %11110000
|
||||||
DEF MAPOBJECT_TYPE_MASK EQU %00001111
|
DEF MAPOBJECT_TYPE_MASK EQU %00001111
|
||||||
|
|
||||||
|
; special MAPOBJECT_EVENT_FLAG values
|
||||||
|
DEF ALWAYS_HIDDEN EQU $ff00 ; anything between $ff00 and $fffe
|
||||||
|
DEF ALWAYS_SHOWN EQU $ffff
|
||||||
|
assert HIGH(ALWAYS_HIDDEN) == HIGH(ALWAYS_SHOWN)
|
||||||
|
|
||||||
; number of entries in MapObjectsBackups.
|
; number of entries in MapObjectsBackups.
|
||||||
; this sets a limit to the maximum number of different maps that can be reentered during a level.
|
; this sets a limit to the maximum number of different maps that can be reentered during a level.
|
||||||
; map groups with more than NUM_MAP_OBJECTS_BACKUPS maps are only ok if no more than
|
; map groups with more than NUM_MAP_OBJECTS_BACKUPS maps are only ok if no more than
|
||||||
|
@ -144,7 +144,7 @@ DEF NUM_BGEVENTS EQU const_value
|
|||||||
const OBJECTTYPE_ITEMBALL
|
const OBJECTTYPE_ITEMBALL
|
||||||
const OBJECTTYPE_TRAINER
|
const OBJECTTYPE_TRAINER
|
||||||
const OBJECTTYPE_TALKER
|
const OBJECTTYPE_TALKER
|
||||||
const OBJECTTYPE_4
|
const OBJECTTYPE_ROCK
|
||||||
const OBJECTTYPE_5
|
const OBJECTTYPE_5
|
||||||
const OBJECTTYPE_6
|
const OBJECTTYPE_6
|
||||||
DEF NUM_OBJECT_TYPES EQU const_value
|
DEF NUM_OBJECT_TYPES EQU const_value
|
||||||
|
@ -3,8 +3,10 @@
|
|||||||
const TECHNIQUE_CUT_F
|
const TECHNIQUE_CUT_F
|
||||||
const TECHNIQUE_FLASH_F
|
const TECHNIQUE_FLASH_F
|
||||||
const TECHNIQUE_SURF_F
|
const TECHNIQUE_SURF_F
|
||||||
|
const TECHNIQUE_ROCK_SMASH_F
|
||||||
DEF NUM_TECHNIQUES EQU const_value
|
DEF NUM_TECHNIQUES EQU const_value
|
||||||
|
|
||||||
DEF TECHNIQUE_CUT EQU 1 << TECHNIQUE_CUT_F
|
DEF TECHNIQUE_CUT EQU 1 << TECHNIQUE_CUT_F
|
||||||
DEF TECHNIQUE_FLASH EQU 1 << TECHNIQUE_FLASH_F
|
DEF TECHNIQUE_FLASH EQU 1 << TECHNIQUE_FLASH_F
|
||||||
DEF TECHNIQUE_SURF EQU 1 << TECHNIQUE_SURF_F
|
DEF TECHNIQUE_SURF EQU 1 << TECHNIQUE_SURF_F
|
||||||
|
DEF TECHNIQUE_ROCK_SMASH EQU 1 << TECHNIQUE_ROCK_SMASH_F
|
||||||
|
@ -115,6 +115,7 @@ SpecialsPointers::
|
|||||||
add_special PrintDiploma
|
add_special PrintDiploma
|
||||||
add_special PrintGainCoins
|
add_special PrintGainCoins
|
||||||
add_special PrintLoseCoins
|
add_special PrintLoseCoins
|
||||||
|
add_special SetObjectToRemainHidden
|
||||||
|
|
||||||
; Crystal only
|
; Crystal only
|
||||||
add_special Reset ; bank 0
|
add_special Reset ; bank 0
|
||||||
|
@ -1358,7 +1358,7 @@ RockSmashScript:
|
|||||||
playsound SFX_STRENGTH
|
playsound SFX_STRENGTH
|
||||||
earthquake 84
|
earthquake 84
|
||||||
applymovementlasttalked MovementData_RockSmash
|
applymovementlasttalked MovementData_RockSmash
|
||||||
disappear -2
|
disappear LAST_TALKED
|
||||||
|
|
||||||
callasm RockMonEncounter
|
callasm RockMonEncounter
|
||||||
readmem wTempWildMonSpecies
|
readmem wTempWildMonSpecies
|
||||||
@ -1369,6 +1369,15 @@ RockSmashScript:
|
|||||||
.done
|
.done
|
||||||
end
|
end
|
||||||
|
|
||||||
|
RockSmashAutoScript::
|
||||||
|
special WaitSFX
|
||||||
|
playsound SFX_STRENGTH
|
||||||
|
earthquake 84
|
||||||
|
applymovementlasttalked MovementData_RockSmash
|
||||||
|
disappear LAST_TALKED
|
||||||
|
special SetObjectToRemainHidden
|
||||||
|
end
|
||||||
|
|
||||||
MovementData_RockSmash:
|
MovementData_RockSmash:
|
||||||
rock_smash 10
|
rock_smash 10
|
||||||
step_end
|
step_end
|
||||||
|
@ -360,6 +360,9 @@ PlayerEvents:
|
|||||||
call DisableTileEvents ; preserves f
|
call DisableTileEvents ; preserves f
|
||||||
jr c, .ok
|
jr c, .ok
|
||||||
|
|
||||||
|
call CheckFacingTileEvent
|
||||||
|
jr c, .ok
|
||||||
|
|
||||||
call RunMemScript
|
call RunMemScript
|
||||||
jr c, .ok
|
jr c, .ok
|
||||||
|
|
||||||
@ -637,6 +640,86 @@ SetMinTwoStepWildEncounterCooldown: ; unreferenced
|
|||||||
ld [wWildEncounterCooldown], a
|
ld [wWildEncounterCooldown], a
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
CheckFacingTileEvent:
|
||||||
|
ldh a, [hCurBoardEvent]
|
||||||
|
cp BOARDEVENT_VIEW_MAP_MODE
|
||||||
|
jr z, .NoAction
|
||||||
|
|
||||||
|
call .TryObjectEvent
|
||||||
|
jr c, .Action
|
||||||
|
; fallthrough
|
||||||
|
|
||||||
|
.NoAction:
|
||||||
|
xor a
|
||||||
|
ret
|
||||||
|
|
||||||
|
.Action:
|
||||||
|
push af
|
||||||
|
farcall StopPlayerForEvent
|
||||||
|
pop af
|
||||||
|
scf
|
||||||
|
ret
|
||||||
|
|
||||||
|
.TryObjectEvent:
|
||||||
|
farcall CheckFacingObject
|
||||||
|
jr c, .IsObject
|
||||||
|
xor a
|
||||||
|
ret
|
||||||
|
|
||||||
|
.IsObject:
|
||||||
|
ldh a, [hObjectStructIndex]
|
||||||
|
call GetObjectStruct
|
||||||
|
ld hl, OBJECT_MAP_OBJECT_INDEX
|
||||||
|
add hl, bc
|
||||||
|
ld a, [hl]
|
||||||
|
ldh [hLastTalked], a
|
||||||
|
|
||||||
|
ldh a, [hLastTalked]
|
||||||
|
call GetMapObject
|
||||||
|
ld hl, MAPOBJECT_TYPE
|
||||||
|
add hl, bc
|
||||||
|
ld a, [hl]
|
||||||
|
and MAPOBJECT_TYPE_MASK
|
||||||
|
|
||||||
|
push bc
|
||||||
|
ld de, 3
|
||||||
|
ld hl, .ObjectEventTypeArray
|
||||||
|
call IsInArray
|
||||||
|
pop bc
|
||||||
|
jr nc, .nope
|
||||||
|
|
||||||
|
inc hl
|
||||||
|
ld a, [hli]
|
||||||
|
ld h, [hl]
|
||||||
|
ld l, a
|
||||||
|
jp hl
|
||||||
|
|
||||||
|
.nope
|
||||||
|
xor a
|
||||||
|
ret
|
||||||
|
|
||||||
|
.ObjectEventTypeArray:
|
||||||
|
table_width 3, .ObjectEventTypeArray
|
||||||
|
dbw OBJECTTYPE_SCRIPT, .none
|
||||||
|
dbw OBJECTTYPE_ITEMBALL, .none
|
||||||
|
dbw OBJECTTYPE_TRAINER, .none
|
||||||
|
dbw OBJECTTYPE_TALKER, .none
|
||||||
|
dbw OBJECTTYPE_ROCK, .rock_smash
|
||||||
|
dbw OBJECTTYPE_5, .none
|
||||||
|
dbw OBJECTTYPE_6, .none
|
||||||
|
assert_table_length NUM_OBJECT_TYPES
|
||||||
|
db -1 ; end
|
||||||
|
|
||||||
|
.none
|
||||||
|
xor a
|
||||||
|
ret ; nc
|
||||||
|
|
||||||
|
.rock_smash
|
||||||
|
ld a, BANK(RockSmashAutoScript)
|
||||||
|
ld hl, RockSmashAutoScript
|
||||||
|
call CallScript
|
||||||
|
ret ; c
|
||||||
|
|
||||||
RunSceneScript:
|
RunSceneScript:
|
||||||
ldh a, [hCurBoardEvent]
|
ldh a, [hCurBoardEvent]
|
||||||
cp BOARDEVENT_VIEW_MAP_MODE
|
cp BOARDEVENT_VIEW_MAP_MODE
|
||||||
@ -824,7 +907,7 @@ ObjectEventTypeArray:
|
|||||||
dbw OBJECTTYPE_TRAINER, .trainer
|
dbw OBJECTTYPE_TRAINER, .trainer
|
||||||
; the remaining four are dummy events
|
; the remaining four are dummy events
|
||||||
dbw OBJECTTYPE_TALKER, .three
|
dbw OBJECTTYPE_TALKER, .three
|
||||||
dbw OBJECTTYPE_4, .four
|
dbw OBJECTTYPE_ROCK, .four
|
||||||
dbw OBJECTTYPE_5, .five
|
dbw OBJECTTYPE_5, .five
|
||||||
dbw OBJECTTYPE_6, .six
|
dbw OBJECTTYPE_6, .six
|
||||||
assert_table_length NUM_OBJECT_TYPES
|
assert_table_length NUM_OBJECT_TYPES
|
||||||
|
@ -2750,6 +2750,21 @@ ResetObject:
|
|||||||
db SPRITEMOVEDATA_STANDING_LEFT
|
db SPRITEMOVEDATA_STANDING_LEFT
|
||||||
db SPRITEMOVEDATA_STANDING_RIGHT
|
db SPRITEMOVEDATA_STANDING_RIGHT
|
||||||
|
|
||||||
|
; Used to make the last talked object remain hidden.
|
||||||
|
; This is done by setting its event flag to special value ALWAYS_HIDDEN.
|
||||||
|
; Otherwise when data is read from wMapObjectsBackups after entering the map,
|
||||||
|
; it would appear by default even if it had been made disappear.
|
||||||
|
SetObjectToRemainHidden:
|
||||||
|
ldh a, [hLastTalked]
|
||||||
|
call GetMapObject
|
||||||
|
ld hl, MAPOBJECT_EVENT_FLAG
|
||||||
|
add hl, bc
|
||||||
|
ld de, ALWAYS_HIDDEN
|
||||||
|
ld [hl], e
|
||||||
|
inc hl
|
||||||
|
ld [hl], d
|
||||||
|
ret
|
||||||
|
|
||||||
_UpdateActiveSpritesAfterOffset::
|
_UpdateActiveSpritesAfterOffset::
|
||||||
ld a, [wVramState]
|
ld a, [wVramState]
|
||||||
bit 0, a
|
bit 0, a
|
||||||
|
@ -41,10 +41,10 @@ CheckObjectFlag:
|
|||||||
ld e, a
|
ld e, a
|
||||||
ld a, [hl]
|
ld a, [hl]
|
||||||
ld d, a
|
ld d, a
|
||||||
cp -1
|
cp HIGH(ALWAYS_SHOWN) ; HIGH(ALWAYS_HIDDEN)
|
||||||
jr nz, .check
|
jr nz, .check
|
||||||
ld a, e
|
ld a, e
|
||||||
cp -1
|
cp LOW(ALWAYS_SHOWN)
|
||||||
jr z, .unmasked
|
jr z, .unmasked
|
||||||
jr .masked
|
jr .masked
|
||||||
.check
|
.check
|
||||||
|
@ -1007,16 +1007,14 @@ ApplyEventActionAppearDisappear:
|
|||||||
ld e, [hl]
|
ld e, [hl]
|
||||||
inc hl
|
inc hl
|
||||||
ld d, [hl]
|
ld d, [hl]
|
||||||
ld a, -1
|
ld a, HIGH(ALWAYS_SHOWN) ; HIGH(ALWAYS_HIDDEN)
|
||||||
cp e
|
|
||||||
jr nz, .okay
|
|
||||||
cp d
|
cp d
|
||||||
jr nz, .okay
|
jr z, .not_a_flag
|
||||||
xor a
|
|
||||||
ret
|
|
||||||
.okay
|
|
||||||
call EventFlagAction
|
call EventFlagAction
|
||||||
ret
|
ret
|
||||||
|
.not_a_flag
|
||||||
|
xor a
|
||||||
|
ret
|
||||||
|
|
||||||
Script_follow:
|
Script_follow:
|
||||||
call GetScriptByte
|
call GetScriptByte
|
||||||
|
@ -1110,7 +1110,7 @@ LoadMapStatus::
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
CallScript::
|
CallScript::
|
||||||
; Call a script at a:hl.
|
; Call a script at a:hl and return carry.
|
||||||
|
|
||||||
ld [wScriptBank], a
|
ld [wScriptBank], a
|
||||||
ld a, l
|
ld a, l
|
||||||
|
@ -26,6 +26,8 @@ DebugLevel2_Map1_MapEvents:
|
|||||||
def_bg_events
|
def_bg_events
|
||||||
|
|
||||||
def_object_events
|
def_object_events
|
||||||
|
object_event 6, 13, SPRITE_ROCK, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, OBJECTTYPE_ROCK, 0, ObjectEvent, -1
|
||||||
|
object_event 5, 12, SPRITE_ROCK, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, OBJECTTYPE_ROCK, 0, ObjectEvent, -1
|
||||||
|
|
||||||
DebugLevel2_Map1_MapSpaces:
|
DebugLevel2_Map1_MapSpaces:
|
||||||
space 6, 16, $0, 1 ; 0
|
space 6, 16, $0, 1 ; 0
|
||||||
|
Loading…
Reference in New Issue
Block a user