Strong Arm, Water Sport, and more HMs.

This adds Rock Climb functionality to Strong Arm and Dive functionality to Water Sport, as discussed in the server. HMs have been added, but we need 16bit Items to add Wind Ride, and I haven't finished their functionality.

The Rock Climb tile is a bit terrible, it's not easy to notice. Maybe change so that it works well with yellow or another colour?

This does not build due to issues with effect_commands.asm, but since Zeta is meant to be working on the mapping and Water Sport anyway, it seems to be up his alley.

I ported over much of the underwater assets Rangi was using as they looked very pretty. I imagine it'll be fun to utilise going forward. May as well, right?

I shall now lay down in a dark room.

Review: c21561ea71 (diff-5508f3b794fc68821ba35e94b6a293b2aaaa16c02a1b34fac70d03fd2f74c4b2R113)
This commit is contained in:
Llinos Evans 2024-12-28 06:26:01 +00:00
parent 4b11121836
commit 093bda0253
77 changed files with 993 additions and 97 deletions

View file

@ -82,6 +82,7 @@ Additionally, there have been many wild encounter tweaks. View this document for
- The GS Ball event has been restored, now being obtainable after beating the Elite Four and trying to exit the building. - The GS Ball event has been restored, now being obtainable after beating the Elite Four and trying to exit the building.
- The Egg Ticket and Eon Mail events have been restored, now being associated with Buena's Password. Redeeming the Egg Ticket gives you an Odd Egg with the usual Pokemon pool and Shiny chances; this is soft resettable if you like that sort of thing. - The Egg Ticket and Eon Mail events have been restored, now being associated with Buena's Password. Redeeming the Egg Ticket gives you an Odd Egg with the usual Pokemon pool and Shiny chances; this is soft resettable if you like that sort of thing.
- Additionally, old lore relating to the area has now been restored, including something about the Unown! - Additionally, old lore relating to the area has now been restored, including something about the Unown!
- Walls can be climbed using Strong Arm, functionality identical to HGSS Rock Climb.
# Credits # Credits
As the open source nature of this project implies, people are free to reuse what's here for their own ends, **so long as credit is given to this hack and those who worked on what you reuse.** Additionally, we strongly urge you to make any projects using JEP's content open source. JEP strongly supports the [free software movement](https://www.fsf.org/about/) and its four essential freedoms. If you have any questions on the topic of content reuse, contact @ plague_von_karma on Discord. As the open source nature of this project implies, people are free to reuse what's here for their own ends, **so long as credit is given to this hack and those who worked on what you reuse.** Additionally, we strongly urge you to make any projects using JEP's content open source. JEP strongly supports the [free software movement](https://www.fsf.org/about/) and its four essential freedoms. If you have any questions on the topic of content reuse, contact @ plague_von_karma on Discord.
@ -147,6 +148,7 @@ JEP-affiliated musicians require music to be used with direct credit for non-com
- Rangi42/polishedcrystal: [Decoration shop script](https://github.com/Rangi42/polishedcrystal/blob/master/maps/GoldenrodHarbor.asm) - Rangi42/polishedcrystal: [Decoration shop script](https://github.com/Rangi42/polishedcrystal/blob/master/maps/GoldenrodHarbor.asm)
- Nayru62 (Crystal Legacy) - [DVs & Hidden Power display code](https://github.com/cRz-Shadows/Pokemon_Crystal_Legacy/blob/main/engine/pokemon/stats_screen.asm) - Nayru62 (Crystal Legacy) - [DVs & Hidden Power display code](https://github.com/cRz-Shadows/Pokemon_Crystal_Legacy/blob/main/engine/pokemon/stats_screen.asm)
- SoupPotato - Move Animations and Pallettes [here](https://github.com/PiaCarrot/mae-pokeorange/commit/9e148c8a28bbe6850f3df11605b4f7b4068a4652) and [here](https://github.com/PiaCarrot/mae-pokeorange/commit/52f8f8e77189b01453590c5496bbc7a9332b6237). - SoupPotato - Move Animations and Pallettes [here](https://github.com/PiaCarrot/mae-pokeorange/commit/9e148c8a28bbe6850f3df11605b4f7b4068a4652) and [here](https://github.com/PiaCarrot/mae-pokeorange/commit/52f8f8e77189b01453590c5496bbc7a9332b6237).
- [PiaCarrot/pokeorange](https://github.com/PiaCarrot/pokeorange) - [Rock Climb functionality](https://github.com/pret/pokecrystal/wiki/Rock-Climb)
## Academic References ## Academic References
* Bolles, D. & Bolles, A. (1996). A Grammar of the Yucatecan Mayan Language. Revised ed. Lancaster, California: Labyrinthos Press. ISBN 0-911437-49-5. Available at: http://www.famsi.org/reports/96072/grammar/index.html * Bolles, D. & Bolles, A. (1996). A Grammar of the Yucatecan Mayan Language. Revised ed. Lancaster, California: Labyrinthos Press. ISBN 0-911437-49-5. Available at: http://www.famsi.org/reports/96072/grammar/index.html

View file

@ -220,6 +220,8 @@ DEF BATTLEANIM_BASE_TILE EQU 7 * 7 ; Maximum size of a pokemon picture
const ANIM_OBJ_PLAYERHEAD_2ROW const ANIM_OBJ_PLAYERHEAD_2ROW
const ANIM_OBJ_COIN_HURL const ANIM_OBJ_COIN_HURL
const ANIM_OBJ_SHOOTING_MIST const ANIM_OBJ_SHOOTING_MIST
const ANIM_OBJ_WATER_SPORT_1
const ANIM_OBJ_WATER_SPORT_2
DEF NUM_ANIM_OBJS EQU const_value DEF NUM_ANIM_OBJS EQU const_value
; DoBattleAnimFrame arguments (see engine/battle_anims/functions.asm) ; DoBattleAnimFrame arguments (see engine/battle_anims/functions.asm)

View file

@ -194,7 +194,7 @@ DEF ALL_STATUS EQU (1 << PSN) | (1 << BRN) | (1 << FRZ) | (1 << PAR) | SLP_MASK
const SUBSTATUS_X_ACCURACY const SUBSTATUS_X_ACCURACY
const SUBSTATUS_MIST const SUBSTATUS_MIST
const SUBSTATUS_FOCUS_ENERGY const SUBSTATUS_FOCUS_ENERGY
const_skip const SUBSTATUS_UNDERWATER
const SUBSTATUS_SUBSTITUTE const SUBSTATUS_SUBSTITUTE
const SUBSTATUS_RECHARGE const SUBSTATUS_RECHARGE
const SUBSTATUS_RAGE const SUBSTATUS_RAGE

View file

@ -10,6 +10,7 @@ DEF COLL_FLOOR EQU $00
DEF COLL_01 EQU $01 ; garbage DEF COLL_01 EQU $01 ; garbage
DEF COLL_03 EQU $03 ; garbage DEF COLL_03 EQU $03 ; garbage
DEF COLL_04 EQU $04 ; garbage DEF COLL_04 EQU $04 ; garbage
DEF COLL_ROCKY_WALL EQU $06 ; added using this tutorial https://github.com/pret/pokecrystal/wiki/Rock-Climb
DEF COLL_WALL EQU $07 DEF COLL_WALL EQU $07
DEF COLL_CUT_08 EQU $08 ; unused DEF COLL_CUT_08 EQU $08 ; unused
DEF COLL_TALL_GRASS_10 EQU $10 ; unused DEF COLL_TALL_GRASS_10 EQU $10 ; unused
@ -26,7 +27,8 @@ DEF COLL_WHIRLPOOL EQU $24
DEF COLL_BUOY EQU $27 DEF COLL_BUOY EQU $27
DEF COLL_CUT_28 EQU $28 ; garbage DEF COLL_CUT_28 EQU $28 ; garbage
DEF COLL_WATER EQU $29 DEF COLL_WATER EQU $29
DEF COLL_ICE_2B EQU $2b ; unused DEF COLL_DIVE_DOWN EQU $2a
DEF COLL_DIVE_UP EQU $2b
DEF COLL_WHIRLPOOL_2C EQU $2c ; unused DEF COLL_WHIRLPOOL_2C EQU $2c ; unused
DEF COLL_WATERFALL_RIGHT EQU $30 ; unused DEF COLL_WATERFALL_RIGHT EQU $30 ; unused
DEF COLL_WATERFALL_LEFT EQU $31 ; unused DEF COLL_WATERFALL_LEFT EQU $31 ; unused

View file

@ -291,6 +291,12 @@ DEF HM01 EQU const_value
add_hm FLASH ; f8 add_hm FLASH ; f8
add_hm WHIRLPOOL ; f9 add_hm WHIRLPOOL ; f9
add_hm WATERFALL ; fa add_hm WATERFALL ; fa
; nihon hms - Bounce is left out under the pretense of it being Waterfall. We are making it a field move, though.
add_hm UPROOT
add_hm WATER_SPORT
add_hm STRONG_ARM
add_hm BRIGHT_MOSS
add_hm WIND_RIDE ; ADDME: this is impossible to add until 16bit items exist. add once it's there.
DEF NUM_HMS EQU __tmhm_value__ - NUM_TMS - 1 DEF NUM_HMS EQU __tmhm_value__ - NUM_TMS - 1
MACRO add_mt MACRO add_mt

View file

@ -55,6 +55,11 @@
const MONMENUITEM_ROCKSMASH ; 12 const MONMENUITEM_ROCKSMASH ; 12
const MONMENUITEM_MILKDRINK ; 13 const MONMENUITEM_MILKDRINK ; 13
const MONMENUITEM_SWEETSCENT ; 14 const MONMENUITEM_SWEETSCENT ; 14
const MONMENUITEM_UPROOT
const MONMENUITEM_WATER_SPORT
const MONMENUITEM_STRONG_ARM
const MONMENUITEM_BRIGHT_MOSS
const MONMENUITEM_WIND_RIDE
; options ; options
const MONMENUITEM_STATS ; 15 const MONMENUITEM_STATS ; 15
const MONMENUITEM_SWITCH ; 16 const MONMENUITEM_SWITCH ; 16

View file

@ -158,4 +158,7 @@
const EFFECT_FLY const EFFECT_FLY
const EFFECT_DEFENSE_CURL const EFFECT_DEFENSE_CURL
const EFFECT_COIN_HURL const EFFECT_COIN_HURL
const EFFECT_SURF
const EFFECT_WHIRLPOOL
const EFFECT_BOUNCE
DEF NUM_MOVE_EFFECTS EQU const_value DEF NUM_MOVE_EFFECTS EQU const_value

View file

@ -145,6 +145,7 @@
const SPRITE_BALDING_GUY const SPRITE_BALDING_GUY
const SPRITE_GAMEBOY_GIRL const SPRITE_GAMEBOY_GIRL
const SPRITE_OVERWORLD_PIKACHU const SPRITE_OVERWORLD_PIKACHU
const SPRITE_DIVE
DEF NUM_OVERWORLD_SPRITES EQU const_value - 1 DEF NUM_OVERWORLD_SPRITES EQU const_value - 1
; SpriteMons indexes (see data/sprites/sprite_mons.asm) ; SpriteMons indexes (see data/sprites/sprite_mons.asm)

View file

@ -273,6 +273,7 @@ DEF PLAYER_SKATE EQU 2
DEF PLAYER_SURF EQU 4 DEF PLAYER_SURF EQU 4
DEF PLAYER_SURF_PIKA EQU 8 DEF PLAYER_SURF_PIKA EQU 8
DEF PLAYER_RUN EQU 16 DEF PLAYER_RUN EQU 16
DEF PLAYER_WATER_SPORT EQU 16
; wCelebiEvent:: ; wCelebiEvent::
DEF CELEBIEVENT_FOREST_IS_RESTLESS_F EQU 2 DEF CELEBIEVENT_FOREST_IS_RESTLESS_F EQU 2

View file

@ -181,4 +181,5 @@ BattleCommandPointers:
dw BattleCommand_StartLoop dw BattleCommand_StartLoop
dw BattleCommand_Curl dw BattleCommand_Curl
dw BattleCommand_CoinHurlPower dw BattleCommand_CoinHurlPower
dw BattleCommand_DoubleUnderwaterDamage
assert_table_length NUM_EFFECT_COMMANDS assert_table_length NUM_EFFECT_COMMANDS

View file

@ -399,4 +399,6 @@ BattleAnimObjects:
battleanimobj ABSOLUTE_X, $ff, BATTLEANIMFRAMESET_75, BATTLEANIMFUNC_COINHURL, PAL_BATTLE_OB_BROWN, ANIM_GFX_STATUS battleanimobj ABSOLUTE_X, $ff, BATTLEANIMFRAMESET_75, BATTLEANIMFUNC_COINHURL, PAL_BATTLE_OB_BROWN, ANIM_GFX_STATUS
; ANIM_OBJ_SHOOTING_MIST ; ANIM_OBJ_SHOOTING_MIST
battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_MIST, BATTLEANIMFUNC_USER_TO_TARGET_DISAPPEAR, PAL_BATTLE_OB_GRAY, ANIM_GFX_HAZE battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_MIST, BATTLEANIMFUNC_USER_TO_TARGET_DISAPPEAR, PAL_BATTLE_OB_GRAY, ANIM_GFX_HAZE
battleanimobj RELATIVE_X | X_FLIP, $a8, BATTLEANIMFRAMESET_67, BATTLEANIMFUNC_26, PAL_BATTLE_OB_BLUE, $1a ; ANIM_OBJ_DIVE_1
battleanimobj RELATIVE_X | X_FLIP, $a8, BATTLEANIMFRAMESET_68, BATTLEANIMFUNC_00, PAL_BATTLE_OB_BLUE, $1a ; ANIM_OBJ_DIVE_2
assert_table_length NUM_ANIM_OBJS assert_table_length NUM_ANIM_OBJS

View file

@ -7,7 +7,7 @@ TileCollisionTable::
db LAND_TILE ; COLL_03 db LAND_TILE ; COLL_03
db LAND_TILE ; COLL_04 db LAND_TILE ; COLL_04
db LAND_TILE ; 05 db LAND_TILE ; 05
db LAND_TILE ; 06 db WALL_TILE ; COLL_ROCKY_WALL
db WALL_TILE ; COLL_WALL db WALL_TILE ; COLL_WALL
db LAND_TILE ; COLL_CUT_08 db LAND_TILE ; COLL_CUT_08
db LAND_TILE ; 09 db LAND_TILE ; 09
@ -43,8 +43,8 @@ TileCollisionTable::
db WALL_TILE ; COLL_BUOY db WALL_TILE ; COLL_BUOY
db WATER_TILE ; COLL_CUT_28 db WATER_TILE ; COLL_CUT_28
db WATER_TILE ; COLL_WATER db WATER_TILE ; COLL_WATER
db WATER_TILE | TALK ; 2a db WATERTILE | TALK ; COLL_DIVE_DOWN
db LAND_TILE ; COLL_ICE_2B db LANDTILE | TALK ; COLL_DIVE_UP
db WATER_TILE | TALK ; COLL_WHIRLPOOL_2C db WATER_TILE | TALK ; COLL_WHIRLPOOL_2C
db WATER_TILE ; 2d db WATER_TILE ; 2d
db WATER_TILE ; 2e db WATER_TILE ; 2e

View file

@ -510,17 +510,17 @@ ItemAttributes:
item_attribute 0, HELD_NONE, 0, CANT_SELECT | CANT_TOSS, TM_HM, ITEMMENU_PARTY, ITEMMENU_NOUSE item_attribute 0, HELD_NONE, 0, CANT_SELECT | CANT_TOSS, TM_HM, ITEMMENU_PARTY, ITEMMENU_NOUSE
; HM07 ; HM07
item_attribute 0, HELD_NONE, 0, CANT_SELECT | CANT_TOSS, TM_HM, ITEMMENU_PARTY, ITEMMENU_NOUSE item_attribute 0, HELD_NONE, 0, CANT_SELECT | CANT_TOSS, TM_HM, ITEMMENU_PARTY, ITEMMENU_NOUSE
; HM08
item_attribute 0, HELD_NONE, 0, CANT_SELECT | CANT_TOSS, TM_HM, ITEMMENU_PARTY, ITEMMENU_NOUSE
; HM09
item_attribute 0, HELD_NONE, 0, CANT_SELECT | CANT_TOSS, TM_HM, ITEMMENU_PARTY, ITEMMENU_NOUSE
; HM10
item_attribute 0, HELD_NONE, 0, CANT_SELECT | CANT_TOSS, TM_HM, ITEMMENU_PARTY, ITEMMENU_NOUSE
; HM11
item_attribute 0, HELD_NONE, 0, CANT_SELECT | CANT_TOSS, TM_HM, ITEMMENU_PARTY, ITEMMENU_NOUSE
; HM12
item_attribute 0, HELD_NONE, 0, CANT_SELECT | CANT_TOSS, TM_HM, ITEMMENU_PARTY, ITEMMENU_NOUSE
assert_table_length NUM_ITEMS + NUM_TMS + NUM_HMS assert_table_length NUM_ITEMS + NUM_TMS + NUM_HMS
; $fb
item_attribute $9999, HELD_NONE, 0, NO_LIMITS, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
; $fc
item_attribute $9999, HELD_NONE, 0, NO_LIMITS, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
; $fd
item_attribute $9999, HELD_NONE, 0, NO_LIMITS, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
; $fe
item_attribute $9999, HELD_NONE, 0, NO_LIMITS, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
; $ff
item_attribute $9999, HELD_NONE, 0, NO_LIMITS, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
; $00 ; $00
item_attribute $9999, HELD_NONE, 0, NO_LIMITS, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE item_attribute $9999, HELD_NONE, 0, NO_LIMITS, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
assert_table_length $100 assert_table_length $100

View file

@ -252,11 +252,12 @@ ItemNames::
li "HM05" li "HM05"
li "HM06" li "HM06"
li "HM07" li "HM07"
li "HM08"
; nihon hms
li "HM09"
li "HM10" ; BUG: HMSs over 9 display numbers incorrectly. Need to account for more than 9 HMs in bag display. The bug isn't here, it should be in the bag script.
li "HM11"
li "HM12"
assert_list_length NUM_ITEMS + NUM_TMS + NUM_HMS assert_list_length NUM_ITEMS + NUM_TMS + NUM_HMS
li "TERU-SAMA"
li "TERU-SAMA"
li "TERU-SAMA"
li "TERU-SAMA"
li "TERU-SAMA"
li "?" li "?"
assert_list_length $100 assert_list_length $100

View file

@ -14,8 +14,13 @@ MonMenuOptions:
dbbw MONMENU_FIELD_MOVE, MONMENUITEM_SOFTBOILED, SOFTBOILED dbbw MONMENU_FIELD_MOVE, MONMENUITEM_SOFTBOILED, SOFTBOILED
dbbw MONMENU_FIELD_MOVE, MONMENUITEM_HEADBUTT, HEADBUTT dbbw MONMENU_FIELD_MOVE, MONMENUITEM_HEADBUTT, HEADBUTT
dbbw MONMENU_FIELD_MOVE, MONMENUITEM_ROCKSMASH, ROCK_SMASH dbbw MONMENU_FIELD_MOVE, MONMENUITEM_ROCKSMASH, ROCK_SMASH
dbbw MONMENU_FIELD_MOVE, MONMENUITEM_MILKDRINK, MILK_DRINK dbbw MONMENU_FIELD_MOVE, MONMENUITEM_MILKDRINK, MILK_DRINK ; TESTME: Am I high or is this wrong?
dbbw MONMENU_FIELD_MOVE, MONMENUITEM_SWEETSCENT, SWEET_SCENT dbbw MONMENU_FIELD_MOVE, MONMENUITEM_SWEETSCENT, SWEET_SCENT
dbbw MONMENU_FIELD_MOVE, MONMENUITEM_UPROOT, UPROOT
dbbw MONMENU_FIELD_MOVE, MONMENUITEM_WATER_SPORT, WATER_SPORT
dbbw MONMENU_FIELD_MOVE, MONMENUITEM_STRONG_ARM, STRONG_ARM
dbbw MONMENU_FIELD_MOVE, MONMENUITEM_BRIGHT_MOSS, BRIGHT_MOSS
dbbw MONMENU_FIELD_MOVE, MONMENUITEM_WIND_RIDE, WIND_RIDE
; options ; options
dbbw MONMENU_MENUOPTION, MONMENUITEM_STATS, .stats dbbw MONMENU_MENUOPTION, MONMENUITEM_STATS, .stats
dbbw MONMENU_MENUOPTION, MONMENUITEM_SWITCH, .switch dbbw MONMENU_MENUOPTION, MONMENUITEM_SWITCH, .switch

View file

@ -291,7 +291,7 @@ BattleAnimations::
dw BattleAnim_Psybeam ; Synchronize dw BattleAnim_Psybeam ; Synchronize
dw BattleAnim_StrongArm dw BattleAnim_StrongArm
dw BattleAnim_Uppercut dw BattleAnim_Uppercut
dw BattleAnim_WaterGun ; uhhh dw BattleAnim_WaterSport
dw BattleAnim_Wind_Ride ; Wind Ride but real dw BattleAnim_Wind_Ride ; Wind Ride but real
dw BattleAnim_Flash ; Dazzling Gleam dw BattleAnim_Flash ; Dazzling Gleam
dw BattleAnim_Sing ; Disarming Voice dw BattleAnim_Sing ; Disarming Voice
@ -5055,3 +5055,40 @@ BattleAnim_ShowMon_1:
anim_incobj 1 anim_incobj 1
anim_wait 1 anim_wait 1
anim_ret anim_ret
BattleAnim_WaterSport:
anim_2gfx ANIM_GFX_SAND, ANIM_GFX_WATER
anim_if_param_equal $0, .hit
anim_if_param_equal $2, .fail
anim_call BattleAnim_FollowPlayerHead_0
anim_bgeffect ANIM_BG_DIG, $0, $1, $1
anim_obj ANIM_OBJ_DIVE_2, 72, 104, $0
anim_sound 0, 0, SFX_BUBBLEBEAM
.loop
anim_obj ANIM_OBJ_DIVE_1, 56, 104, $0
anim_wait 16
anim_loop 6, .loop
anim_wait 32
anim_bgeffect ANIM_BG_HIDE_MON, $0, $1, $0
anim_wait 8
anim_incbgeffect ANIM_BG_DIG
anim_call BattleAnim_ShowMon_0
anim_ret
.hit
anim_bgeffect ANIM_BG_30, $0, $0, $0
anim_sound 0, 1, SFX_HYDRO_PUMP
anim_obj ANIM_OBJ_HYDRO_PUMP, 124, 72, $0
anim_obj ANIM_OBJ_HYDRO_PUMP, 140, 72, $0
anim_bgeffect ANIM_BG_31, $30, $0, $0
anim_wait 12
anim_obj ANIM_OBJ_HYDRO_PUMP, 132, 72, $0
anim_bgeffect ANIM_BG_31, $1c, $0, $0
anim_wait 24
anim_bgeffect ANIM_BG_31, $8, $0, $0
anim_wait 24
anim_bgeffect ANIM_BG_32, $0, $0, $0
anim_wait 16
.fail
anim_bgeffect ANIM_BG_ENTER_MON, $0, $1, $0
anim_wait 32
anim_ret

View file

@ -1324,8 +1324,8 @@ UppercutDescription:
next "cause flinching.@" next "cause flinching.@"
WaterSportDescription: WaterSportDescription:
db "Lowers FIRE move" ; I really want to change this tbh db "Lowers FIRE move"
next "power.@" next "power to attack.@"
DazzlingGleamDescription: DazzlingGleamDescription:
db "Flashes a bright" db "Flashes a bright"

View file

@ -2097,3 +2097,68 @@ CoinHurl: ; Identical to Return, except it calculates damage differently, and do
checkfaint checkfaint
buildopponentrage buildopponentrage
endmove endmove
Surf:
checkobedience
usedmovetext
doturn
critical
damagestats
damagecalc
stab
damagevariation
doubleunderwaterdamage
checkhit
moveanim
failuretext
applydamage
criticaltext
supereffectivetext
buildopponentrage
kingsrock
endmove
Whirlpool:
checkobedience
usedmovetext
doturn
checkhit
critical
damagestats
damagecalc
stab
damagevariation
doubleunderwaterdamage
clearmissdamage
moveanim
failuretext
applydamage
criticaltext
supereffectivetext
buildopponentrage
traptarget
endmove
Bounce:
checkcharge
checkobedience
doturn
charge
usedmovetext
critical
damagestats
damagecalc
stab
damagevariation
checkhit
moveanimnosub
raisesub
failuretext
applydamage
criticaltext
supereffectivetext
checkfaint
buildopponentrage
paralyzetarget
kingsrock
endmove

View file

@ -159,4 +159,7 @@ MoveEffectsPointers:
dw Fly dw Fly
dw DefenseCurl dw DefenseCurl
dw CoinHurl dw CoinHurl
dw Surf
dw Whirlpool
dw Bounce
assert_table_length NUM_MOVE_EFFECTS assert_table_length NUM_MOVE_EFFECTS

View file

@ -74,7 +74,7 @@ Moves1:
move EFFECT_MIST, 0, ICE, 100, 30, 0 ;MIST move EFFECT_MIST, 0, ICE, 100, 30, 0 ;MIST
move EFFECT_NORMAL_HIT, 40, WATER, 100, 25, 0 ;WATER_GUN move EFFECT_NORMAL_HIT, 40, WATER, 100, 25, 0 ;WATER_GUN
move EFFECT_NORMAL_HIT, 120, WATER, 80, 5, 0 ;HYDRO_PUMP move EFFECT_NORMAL_HIT, 120, WATER, 80, 5, 0 ;HYDRO_PUMP
move EFFECT_NORMAL_HIT, 95, WATER, 100, 15, 0 ;SURF move EFFECT_SURF, 95, WATER, 100, 15, 0 ;SURF
move EFFECT_FREEZE_HIT, 95, ICE, 100, 10, 10 ;ICE_BEAM move EFFECT_FREEZE_HIT, 95, ICE, 100, 10, 10 ;ICE_BEAM
move EFFECT_FREEZE_HIT, 120, ICE, 70, 5, 10 ;BLIZZARD move EFFECT_FREEZE_HIT, 120, ICE, 70, 5, 10 ;BLIZZARD
move EFFECT_CONFUSE_HIT, 65, PSYCHIC_TYPE, 100, 20, 10 ;PSYBEAM move EFFECT_CONFUSE_HIT, 65, PSYCHIC_TYPE, 100, 20, 10 ;PSYBEAM
@ -267,21 +267,21 @@ Moves1:
move EFFECT_SP_DEF_DOWN_HIT, 80, GHOST, 100, 15, 20 ;SHADOW_BALL move EFFECT_SP_DEF_DOWN_HIT, 80, GHOST, 100, 15, 20 ;SHADOW_BALL
move EFFECT_FUTURE_SIGHT, 80, PSYCHIC_TYPE, 90, 15, 0 ;FUTURE_SIGHT move EFFECT_FUTURE_SIGHT, 80, PSYCHIC_TYPE, 90, 15, 0 ;FUTURE_SIGHT
move EFFECT_DEFENSE_DOWN_HIT, 20, FIGHTING, 100, 15, 50 ;ROCK_SMASH move EFFECT_DEFENSE_DOWN_HIT, 20, FIGHTING, 100, 15, 50 ;ROCK_SMASH
move EFFECT_TRAP_TARGET, 15, WATER, 70, 15, 0 ;WHIRLPOOL move EFFECT_WHIRLPOOL, 15, WATER, 70, 15, 0 ;WHIRLPOOL
move EFFECT_BEAT_UP, 10, DARK, 100, 10, 0 ;BEAT_UP move EFFECT_BEAT_UP, 10, DARK, 100, 10, 0 ;BEAT_UP
move EFFECT_FLINCH_HIT, 80, ROCK, 100, 15, 30 ;ROCK_HEAD move EFFECT_FLINCH_HIT, 80, ROCK, 100, 15, 30 ;ROCK_HEAD
move EFFECT_NORMAL_HIT, 140, ROCK, 70, 5, 0 ;ROCK_SLASH move EFFECT_NORMAL_HIT, 140, ROCK, 70, 5, 0 ;ROCK_SLASH
move EFFECT_NORMAL_HIT, 50, BUG, 100, 15, 0 ;CROSS_CUTTER move EFFECT_NORMAL_HIT, 50, BUG, 100, 15, 0 ;CROSS_CUTTER
move EFFECT_SP_ATK_DOWN, 0, NORMAL, 100, 40, 0 ;MEGAPHONE move EFFECT_SP_ATK_DOWN, 0, NORMAL, 100, 40, 0 ;MEGAPHONE
move EFFECT_FREEZE_HIT, 100, ICE, 95, 5, 30 ;MYSTIC_ICE move EFFECT_FREEZE_HIT, 100, ICE, 95, 5, 30 ;MYSTIC_ICE
move EFFECT_FLY, 85, WATER, 85, 5, 0 ; BOUNCE - went back and forth on type (making it modern or keeping it spaceworldy), chose spaceworld to diversify the "fly" move category move EFFECT_BOUNCE, 85, FLYING, 85, 5, 0 ; BOUNCE - with Water Sport now in the game, Bounce's SW97 Water typing is no longer necessary.
move EFFECT_ACCURACY_UP, 85, GRASS, 0, 20, 0 ; BRIGHT_MOSS move EFFECT_ACCURACY_UP, 85, GRASS, 0, 20, 0 ; BRIGHT_MOSS
move EFFECT_COIN_HURL, 1, NORMAL, 100, 20, 0 ; COIN_HURL move EFFECT_COIN_HURL, 1, NORMAL, 100, 20, 0 ; COIN_HURL
move EFFECT_NORMAL_HIT, 85, GROUND, 100, 10, 0 ; UPROOT move EFFECT_NORMAL_HIT, 85, GROUND, 100, 10, 0 ; UPROOT
move EFFECT_MIRROR_COAT, 1, PSYCHIC_TYPE, 100, 10, 0 ; SYNCHRONIZE - effect not implemented move EFFECT_MIRROR_COAT, 1, PSYCHIC_TYPE, 100, 10, 0 ; SYNCHRONIZE - effect not implemented
move EFFECT_ATTACK_UP_HIT, 70, STEEL, 90, 10, 10 ; STRONG_ARM move EFFECT_ATTACK_UP_HIT, 70, STEEL, 90, 10, 10 ; STRONG_ARM
move EFFECT_FLINCH_HIT, 55, FIGHTING, 80, 15, 30 ; UPPERCUT move EFFECT_FLINCH_HIT, 55, FIGHTING, 80, 15, 30 ; UPPERCUT
move EFFECT_NORMAL_HIT, 1, WATER, 1, 15, 0 ; WATER_SPORT - effect not implemented move EFFECT_FLY, 80, WATER, 100, 10, 0 ; WATER_SPORT - Now a Dive clone.
move EFFECT_NORMAL_HIT, 55, FLYING, 95, 10, 0 ; WIND_RIDE move EFFECT_NORMAL_HIT, 55, FLYING, 95, 10, 0 ; WIND_RIDE
move EFFECT_NORMAL_HIT, 80, FAIRY, 100, 10, 0 ; DAZZLING_GLEAM move EFFECT_NORMAL_HIT, 80, FAIRY, 100, 10, 0 ; DAZZLING_GLEAM
move EFFECT_ALWAYS_HIT, 40, FAIRY, 100, 15, 0 ; DISARMING_VOICE move EFFECT_ALWAYS_HIT, 40, FAIRY, 100, 15, 0 ; DISARMING_VOICE

View file

@ -4,6 +4,7 @@ ChrisStateSprites:
db PLAYER_SURF, SPRITE_SURF db PLAYER_SURF, SPRITE_SURF
db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU
db PLAYER_RUN, SPRITE_CHRIS_RUN db PLAYER_RUN, SPRITE_CHRIS_RUN
db PLAYER_WATER_SPORT, SPRITE_CHRIS_WATER_SPORT
db -1 ; end db -1 ; end
KrisStateSprites: KrisStateSprites:
@ -12,6 +13,7 @@ KrisStateSprites:
db PLAYER_SURF, SPRITE_SURF db PLAYER_SURF, SPRITE_SURF
db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU
db PLAYER_RUN, SPRITE_KRIS_RUN db PLAYER_RUN, SPRITE_KRIS_RUN
db PLAYER_WATER_SPORT, SPRITE_KRIS_WATER_SPORT
db -1 ; end db -1 ; end
EnbyStateSprites: EnbyStateSprites:
@ -20,5 +22,6 @@ EnbyStateSprites:
db PLAYER_SURF, SPRITE_SURF db PLAYER_SURF, SPRITE_SURF
db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU
db PLAYER_RUN, SPRITE_TOPAZ_RUN db PLAYER_RUN, SPRITE_TOPAZ_RUN
db PLAYER_WATER_SPORT, SPRITE_TOPAZ_WATER_SPORT
db -1 ; end db -1 ; end

View file

@ -150,4 +150,5 @@ OverworldSprites:
overworld_sprite BaldingGuyGFX, 12, STANDING_SPRITE, PAL_OW_BROWN overworld_sprite BaldingGuyGFX, 12, STANDING_SPRITE, PAL_OW_BROWN
overworld_sprite GameboyGirlGFX, 12, STANDING_SPRITE, PAL_OW_RED overworld_sprite GameboyGirlGFX, 12, STANDING_SPRITE, PAL_OW_RED
overworld_sprite OverworldPikachuGFX, 12, STANDING_SPRITE, PAL_OW_BROWN overworld_sprite OverworldPikachuGFX, 12, STANDING_SPRITE, PAL_OW_BROWN
overworld_sprite WaterSportSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
assert_table_length NUM_OVERWORLD_SPRITES assert_table_length NUM_OVERWORLD_SPRITES

View file

@ -1502,8 +1502,6 @@ _OakText3::
text_promptbutton text_promptbutton
text_end text_end
text_end ; unreferenced
_OakText4:: _OakText4::
text "People and #MON" text "People and #MON"
line "live together by" line "live together by"
@ -1528,3 +1526,62 @@ _OakText5::
para "That's why I study" para "That's why I study"
line "#MON every day." line "#MON every day."
prompt prompt
_AskStrongArmText::
text "The wall is very"
line "rocky…"
para "Want to use"
line "STRONG ARM?"
done
_UsedStrongArmText::
text_ram wStringBuffer2
text " used"
line "STRONG ARM!"
prompt
_CantStrongArmText::
text "The wall is very"
line "rocky…"
para "Can a #MON's"
line "move scale it?"
done
_CantWaterSportText::
text "Can't use"
line "WATER SPORT"
cont "here!"
prompt
_CanWaterSportText::
text "The sea is deep."
para "A #MON can"
line "dive here."
done
_AskWaterSportDownText::
text "The sea is deep."
line "Want to use"
cont "WATER SPORT?"
done
_AskWaterSportUpText::
text "Light is filter-"
line "ing from above."
para "Want to use"
line "WATER SPORT?"
done
_UsedWaterSportText::
text_from_ram wStringBuffer2
text " used"
line "WATER SPORT!"
done
HidUnderwaterText::
text_start
line "hid underwater!"
prompt

Binary file not shown.

View file

@ -89,3 +89,5 @@
tilecoll FLOOR, WALL, FLOOR, WARP_CARPET_DOWN ; 58 tilecoll FLOOR, WALL, FLOOR, WARP_CARPET_DOWN ; 58
tilecoll FLOOR, SWITCH, FLOOR, FLOOR ; 59 tilecoll FLOOR, SWITCH, FLOOR, FLOOR ; 59
tilecoll WALL, FLOOR, FLOOR, WARP_CARPET_DOWN ; 5a tilecoll WALL, FLOOR, FLOOR, WARP_CARPET_DOWN ; 5a
tilecoll FLOOR, FLOOR, ROCKY_WALL, WALL ; 5b
tilecoll FLOOR, FLOOR, WALL, ROCKY_WALL ; 5c

Binary file not shown.

View file

@ -62,3 +62,5 @@
tilecoll WATER, WATER, WATER, WATER ; 3d tilecoll WATER, WATER, WATER, WATER ; 3d
tilecoll WATER, WATER, WATER, WATER ; 3e tilecoll WATER, WATER, WATER, WATER ; 3e
tilecoll FLOOR, FLOOR, PIT, FLOOR ; 3f tilecoll FLOOR, FLOOR, PIT, FLOOR ; 3f
tilecoll FLOOR, FLOOR, ROCKY_WALL, WALL ; 40
tilecoll FLOOR, FLOOR, WALL, ROCKY_WALL ; 41

View file

@ -3,4 +3,4 @@
&  &&67&&67&&&&$$$$*+:;$$$$"#23     ()89       !01     $$&&&&    @@@@@@@@@@@@@@@@%&&&%&&&%&&&%&&&&&&&&&&&&&&&&&&&&&&'&&&'&&&'&&&'67&&67&&$$%&&'%' &&&&&&&&  &  &&67&&67&&&&$$$$*+:;$$$$"#23     ()89       !01     $$&&&&    @@@@@@@@@@@@@@@@%&&&%&&&%&&&%&&&&&&&&&&&&&&&&&&&&&&'&&&'&&&'&&&'67&&67&&$$%&&'%' &&&&&&&& 
& &
67'67&'&&&&&&&&&&&&%&&&&&&&&&&'&&&  67'67&'&&&&&&&&&&&&%&&&&&&&&&&'&&& 
&&& &&&AB&&QR&&&&AB&&QR

Binary file not shown.

View file

@ -187,3 +187,4 @@
tilecoll WALL, WALL, WALL, WATER ; ba tilecoll WALL, WALL, WALL, WATER ; ba
tilecoll WALL, WALL, WATER, WALL ; bb tilecoll WALL, WALL, WATER, WALL ; bb
tilecoll WALL, HOP_DOWN_LEFT, WALL, WALL ; bc tilecoll WALL, HOP_DOWN_LEFT, WALL, WALL ; bc
tilecoll FLOOR, FLOOR, ROCKY_WALL, WALL ; bd

Binary file not shown.

View file

@ -387,6 +387,8 @@ AI_Smart_EffectHandlers:
dbw EFFECT_SOLARBEAM, AI_Smart_Solarbeam dbw EFFECT_SOLARBEAM, AI_Smart_Solarbeam
dbw EFFECT_THUNDER, AI_Smart_Thunder dbw EFFECT_THUNDER, AI_Smart_Thunder
dbw EFFECT_FLY, AI_Smart_Fly dbw EFFECT_FLY, AI_Smart_Fly
dbw EFFECT_SURF, AI_Smart_Surf
dbw EFFECT_WHIRLPOOL, AI_Smart_Whirlpool
db -1 ; end db -1 ; end
AI_Smart_Sleep: AI_Smart_Sleep:
@ -1137,15 +1139,19 @@ AI_Smart_SpDefenseUp2:
ret ret
AI_Smart_Fly: AI_Smart_Fly:
; Fly, Dig ; Fly, Dig, Dive, Bounce
; Greatly encourage this move if the player is ; Greatly encourage this move if the player is
; flying or underground, and slower than the enemy. ; flying or underground, and slower than the enemy.
ld a, [wPlayerSubStatus3] ld a, [wPlayerSubStatus3]
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
jr nz, .player_hidden
ld a, [wPlayerSubStatus4]
and 1 << SUBSTATUS_UNDERWATER
ret z ret z
.player_hidden
call AICompareSpeed call AICompareSpeed
ret nc ret nc
@ -1637,10 +1643,13 @@ AI_Smart_PriorityHit:
call AICompareSpeed call AICompareSpeed
ret c ret c
; Dismiss this move if the player is flying or underground. ; Dismiss this move if the player is flying, underwater, or underground.
ld a, [wPlayerSubStatus3] ld a, [wPlayerSubStatus3]
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
jp nz, AIDiscourageMove jp nz, AIDiscourageMove
ld a, [wPlayerSubStatus4]
and 1 << SUBSTATUS_UNDERWATER
jp nz, AIDiscourageMove
; Greatly encourage this move if it will KO the player. ; Greatly encourage this move if it will KO the player.
ld a, 1 ld a, 1
@ -1664,6 +1673,30 @@ AI_Smart_PriorityHit:
dec [hl] dec [hl]
ret ret
AI_Smart_Surf:
AI_Smart_Whirlpool:
; Greatly encourage this move if the player is underwater and the enemy is faster.
ld a, [wLastPlayerCounterMove]
cp DIVE
ret nz
ld a, [wPlayerSubStatus4]
bit SUBSTATUS_UNDERWATER, a
jr z, .could_dive
call AICompareSpeed
ret nc
dec [hl]
dec [hl]
ret
.could_dive
; Try to predict if the player will use Dive this turn.
; 50% chance to encourage this move if the enemy is slower than the player.
call AICompareSpeed
ret c
call AI_50_50
ret c
dec [hl]
ret
AI_Smart_Thief: AI_Smart_Thief:
; Don't use Thief unless it's the only move available. ; Don't use Thief unless it's the only move available.
@ -2633,15 +2666,19 @@ AI_Smart_Gust:
AI_Smart_FutureSight: AI_Smart_FutureSight:
; Greatly encourage this move if the player is ; Greatly encourage this move if the player is
; flying or underground, and slower than the enemy. ; flying, underwater, or underground, and slower than the enemy.
call AICompareSpeed call AICompareSpeed
ret nc ret nc
ld a, [wPlayerSubStatus3] ld a, [wPlayerSubStatus3]
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
jr nz, .player_hidden
ld a, [wPlayerSubStatus4]
and 1 << SUBSTATUS_UNDERWATER
ret z ret z
.player_hidden
dec [hl] dec [hl]
dec [hl] dec [hl]
ret ret

View file

@ -1119,7 +1119,15 @@ ResidualDamage:
ld a, BATTLE_VARS_SUBSTATUS3_OPP ld a, BATTLE_VARS_SUBSTATUS3_OPP
call GetBattleVar call GetBattleVar
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
jr nz, .not_flying_or_underground
call Call_PlayBattleAnim_OnlyIfVisible
jr .called
.not_flying_or_underground
ld a, BATTLE_VARS_SUBSTATUS4_OPP
call GetBattleVar
and 1 << SUBSTATUS_UNDERWATER
call z, Call_PlayBattleAnim_OnlyIfVisible call z, Call_PlayBattleAnim_OnlyIfVisible
.called
call SwitchTurnCore call SwitchTurnCore
call GetEighthMaxHP call GetEighthMaxHP
@ -1303,6 +1311,11 @@ HandleWrap:
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
jr nz, .skip_anim jr nz, .skip_anim
ld a, BATTLE_VARS_SUBSTATUS4
call GetBattleVar
and 1 << SUBSTATUS_UNDERWATER
jr nz, .skip_anim
call SwitchTurnCore call SwitchTurnCore
xor a xor a
ld [wNumHits], a ld [wNumHits], a
@ -7095,6 +7108,11 @@ Call_PlayBattleAnim_OnlyIfVisible:
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
ret nz ret nz
ld a, BATTLE_VARS_SUBSTATUS4
call GetBattleVar
and 1 << SUBSTATUS_UNDERWATER
ret nz
Call_PlayBattleAnim: Call_PlayBattleAnim:
ld a, e ld a, e
ld [wFXAnimID], a ld [wFXAnimID], a

View file

@ -1,3 +1,9 @@
; Heavily edited when adding Water Sport's effect.
; If errors occur (especially involving Substitute), check https://github.com/Rangi42/pokecrystal/commit/c21561ea717feef9b2eb3785c2ea112cd0d19ba0#diff-88dbff1eb3920f69b17a3d5f613643e1a41096514706bc09f449e4aa637f20e4R5647
; There is a high chance you will run out of memory and I am not sure how this is resolved.
; I imagine bankswitches will be necessary.
DoPlayerTurn: DoPlayerTurn:
call SetPlayerTurn call SetPlayerTurn
@ -360,11 +366,16 @@ CantMove:
res SUBSTATUS_UNDERGROUND, [hl] res SUBSTATUS_UNDERGROUND, [hl]
res SUBSTATUS_FLYING, [hl] res SUBSTATUS_FLYING, [hl]
ld a, BATTLE_VARS_SUBSTATUS4
call GetBattleVarAddr
res SUBSTATUS_UNDERWATER, [hl]
jp AppearUserRaiseSub jp AppearUserRaiseSub
.fly_dig_moves .fly_dig_moves
dw FLY dw FLY
dw DIG dw DIG
dw BOUNCE
dw WATER_SPORT
dw -1 dw -1
OpponentCantMove: OpponentCantMove:
@ -529,12 +540,17 @@ CheckEnemyTurn:
xor a xor a
ld [wNumHits], a ld [wNumHits], a
; Flicker the monster pic unless flying or underground. ; Flicker the monster pic unless flying, underwater, or underground.
ld de, ANIM_HIT_CONFUSION ld de, ANIM_HIT_CONFUSION
ld a, BATTLE_VARS_SUBSTATUS3_OPP ld a, BATTLE_VARS_SUBSTATUS3_OPP
call GetBattleVar call GetBattleVar
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
jr nz, .no_flicker
ld a, BATTLE_VARS_SUBSTATUS4_OPP
call GetBattleVar
and 1 << SUBSTATUS_UNDERWATER
call z, PlayFXAnimID call z, PlayFXAnimID
.no_flicker
ld c, TRUE ld c, TRUE
call DoEnemyDamage call DoEnemyDamage
@ -632,12 +648,17 @@ HitConfusion:
xor a xor a
ld [wNumHits], a ld [wNumHits], a
; Flicker the monster pic unless flying or underground. ; Flicker the monster pic unless flying, underwater, or underground.
ld de, ANIM_HIT_CONFUSION ld de, ANIM_HIT_CONFUSION
ld a, BATTLE_VARS_SUBSTATUS3_OPP ld a, BATTLE_VARS_SUBSTATUS3_OPP
call GetBattleVar call GetBattleVar
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
jr nz, .no_flicker
ld a, BATTLE_VARS_SUBSTATUS4_OPP
call GetBattleVar
and 1 << SUBSTATUS_UNDERWATER
call z, PlayFXAnimID call z, PlayFXAnimID
.no_flicker
ld hl, UpdatePlayerHUD ld hl, UpdatePlayerHUD
call CallBattleCore call CallBattleCore
@ -1746,14 +1767,26 @@ BattleCommand_CheckHit:
ret ret
.FlyDigMoves: .FlyDigMoves:
; Check for moves that can hit underground/flying opponents. ; Check for moves that can hit underground/flying opponents. And divers.
; Return z if the current move can hit the opponent. ; Return z if the current move can hit the opponent.
ld a, BATTLE_VARS_SUBSTATUS3_OPP ld a, BATTLE_VARS_SUBSTATUS3_OPP
call GetBattleVar call GetBattleVar
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
jr nz, .flying_or_underground
ld a, BATTLE_VARS_SUBSTATUS4_OPP
call GetBattleVar
and 1 << SUBSTATUS_UNDERWATER
ret z ret z
ld a, BATTLE_VARS_MOVE_ANIM
call GetBattleVar
cp SURF
ret z
cp WHIRLPOOL
ret
.flying_or_underground
bit SUBSTATUS_FLYING, a bit SUBSTATUS_FLYING, a
ld hl, .FlyMoves ld hl, .FlyMoves
jr z, .check_move_in_list jr z, .check_move_in_list
@ -2032,6 +2065,8 @@ BattleCommand_MoveAnimNoSub:
.fly_dig_moves .fly_dig_moves
dw FLY dw FLY
dw DIG dw DIG
dw BOUNCE
dw WATER_SPORT
dw -1 dw -1
.alternate_anim .alternate_anim
@ -2145,12 +2180,17 @@ BattleCommand_FailureText:
call GetBattleVarAddr call GetBattleVarAddr
res SUBSTATUS_UNDERGROUND, [hl] res SUBSTATUS_UNDERGROUND, [hl]
res SUBSTATUS_FLYING, [hl] res SUBSTATUS_FLYING, [hl]
ld a, BATTLE_VARS_SUBSTATUS4
call GetBattleVarAddr
res SUBSTATUS_UNDERWATER, [hl]
call AppearUserRaiseSub call AppearUserRaiseSub
jp EndMoveEffect jp EndMoveEffect
.fly_dig_moves .fly_dig_moves
dw FLY dw FLY
dw DIG dw DIG
dw WATER_SPORT
dw BOUNCE
dw -1 dw -1
BattleCommand_ApplyDamage: BattleCommand_ApplyDamage:
@ -3421,6 +3461,11 @@ FarPlayBattleAnimation:
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
ret nz ret nz
ld a, BATTLE_VARS_SUBSTATUS4
call GetBattleVar
and 1 << SUBSTATUS_UNDERWATER
ret nz
; fallthrough ; fallthrough
PlayFXAnimID: PlayFXAnimID:
@ -3606,7 +3651,12 @@ DoSubstituteDamage:
ld a, BATTLE_VARS_SUBSTATUS3 ld a, BATTLE_VARS_SUBSTATUS3
call GetBattleVar call GetBattleVar
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
jr nz, .dont_lower_sub
ld a, BATTLE_VARS_SUBSTATUS4
call GetBattleVar
and 1 << SUBSTATUS_UNDERWATER
call z, AppearUserLowerSub call z, AppearUserLowerSub
.dont_lower_sub
call BattleCommand_SwitchTurn call BattleCommand_SwitchTurn
ld a, BATTLE_VARS_MOVE_EFFECT ld a, BATTLE_VARS_MOVE_EFFECT
@ -5545,6 +5595,9 @@ BattleCommand_CheckCharge:
res SUBSTATUS_CHARGED, [hl] res SUBSTATUS_CHARGED, [hl]
res SUBSTATUS_UNDERGROUND, [hl] res SUBSTATUS_UNDERGROUND, [hl]
res SUBSTATUS_FLYING, [hl] res SUBSTATUS_FLYING, [hl]
ld a, BATTLE_VARS_SUBSTATUS4
call GetBattleVarAddr
res SUBSTATUS_UNDERWATER, [hl]
ld b, charge_command ld b, charge_command
jp SkipToBattleCommand jp SkipToBattleCommand
@ -5578,19 +5631,13 @@ BattleCommand_Charge:
call LoadMoveAnim call LoadMoveAnim
ld a, BATTLE_VARS_MOVE_ANIM ld a, BATTLE_VARS_MOVE_ANIM
call GetBattleVar call GetBattleVar
ld h, a cp FLY
ld bc, FLY
call CompareMove
ld a, 1 << SUBSTATUS_FLYING
jr z, .got_move_type jr z, .got_move_type
if HIGH(FLY) != HIGH(DIG) cp DIG
ld bc, DIG jr z, .got_move_type
else cp BOUNCE
ld c, LOW(DIG) jr z, .got_move_type
endc cp WATER_SPORT
ld a, h
call CompareMove
ld a, 1 << SUBSTATUS_UNDERGROUND
jr z, .got_move_type jr z, .got_move_type
call BattleCommand_RaiseSub call BattleCommand_RaiseSub
xor a xor a
@ -5659,6 +5706,8 @@ BattleCommand_Charge:
dw SKY_ATTACK, .BattleGlowingText dw SKY_ATTACK, .BattleGlowingText
dw FLY, .BattleFlewText dw FLY, .BattleFlewText
dw DIG, .BattleDugText dw DIG, .BattleDugText
dw BOUNCE, .BattleFlewText
dw WATER_SPORT, .BattleWaterSportText
dw -1 dw -1
.BattleMadeWhirlwindText: .BattleMadeWhirlwindText:
@ -5685,9 +5734,10 @@ BattleCommand_Charge:
text_far _BattleDugText text_far _BattleDugText
text_end text_end
BattleCommand_Unused3C: .BattleWaterSportText:
; effect0x3c ; 'hid underwater!'
ret text_jump HidUnderwaterText
db "@"
BattleCommand_TrapTarget: BattleCommand_TrapTarget:
ld a, [wAttackMissed] ld a, [wAttackMissed]
@ -6440,10 +6490,6 @@ INCLUDE "engine/battle/move_effects/sandstorm.asm"
INCLUDE "engine/battle/move_effects/rollout.asm" INCLUDE "engine/battle/move_effects/rollout.asm"
BattleCommand_Unused5D:
; effect0x5d
ret
INCLUDE "engine/battle/move_effects/fury_cutter.asm" INCLUDE "engine/battle/move_effects/fury_cutter.asm"
INCLUDE "engine/battle/move_effects/attract.asm" INCLUDE "engine/battle/move_effects/attract.asm"

View file

@ -2916,11 +2916,17 @@ BGEffect_CheckFlyDigStatus:
jr nz, .player jr nz, .player
ld a, [wEnemySubStatus3] ; EnemySubStatus3 ld a, [wEnemySubStatus3] ; EnemySubStatus3
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
ret nz
ld a, [wEnemySubStatus4]
and 1 << SUBSTATUS_UNDERWATER
ret ret
.player .player
ld a, [wPlayerSubStatus3] ; PlayerSubStatus3 ld a, [wPlayerSubStatus3] ; PlayerSubStatus3
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
ret nz
ld a, [wPlayerSubStatus4]
and 1 << SUBSTATUS_UNDERWATER
ret ret
BattleBGEffects_CheckSGB: BattleBGEffects_CheckSGB:

View file

@ -564,6 +564,9 @@ FlyFunction:
ld de, ENGINE_STORMBADGE ld de, ENGINE_STORMBADGE
call CheckBadge call CheckBadge
jr c, .nostormbadge jr c, .nostormbadge
ld a, [wMapTileset]
cp TILESET_UNDERWATER
jr z, .indoors
call GetMapEnvironment call GetMapEnvironment
call CheckOutdoorMap call CheckOutdoorMap
jr z, .outdoors jr z, .outdoors
@ -972,12 +975,6 @@ StrengthFunction:
jr c, .Failed jr c, .Failed
jr .UseStrength jr .UseStrength
.AlreadyUsingStrength: ; unreferenced
ld hl, .AlreadyUsingStrengthText
call MenuTextboxBackup
ld a, $80
ret
.AlreadyUsingStrengthText: .AlreadyUsingStrengthText:
text_far _AlreadyUsingStrengthText text_far _AlreadyUsingStrengthText
text_end text_end
@ -1542,6 +1539,8 @@ FishFunction:
jr z, .fail jr z, .fail
cp PLAYER_SURF_PIKA cp PLAYER_SURF_PIKA
jr z, .fail jr z, .fail
cp PLAYER_WATER_SPORT
jr z, .fail
call GetFacingTileCoord call GetFacingTileCoord
call GetTileCollision call GetTileCollision
cp WATER_TILE cp WATER_TILE
@ -1906,3 +1905,309 @@ CantCutScript:
CanCutText: CanCutText:
text_far _CanCutText text_far _CanCutText
text_end text_end
; Strong Arm is currently just Rock Climb. It's progressgated to after the Earth Badge, just as Rock Climb was in HGSS.
; This is a fine reward for beating Kanto, so I think it's ok to be here.
; It implies Rock Climb will be given in Oak's Lab.
; Eventually, this will also contain checks that jump to Strength and Rock Smash.
StrongArmFunction:
call FieldMoveJumptableReset
.loop
ld hl, .jumptable
call FieldMoveJumptable
jr nc, .loop
and $7f
ld [wFieldMoveSucceeded], a
ret
.jumptable:
dw .TryStrongArm
dw .DoStrongArm
dw .FailStrongArm
.TryStrongArm:
ld de, ENGINE_EARTHBADGE
farcall CheckBadge
jr c, .noearthbadge
call TryStrongArmMenu
jr c, .failed
ld a, $1
ret
.noearthbadge
ld a, $80
ret
.failed
ld a, $2
ret
.DoStrongArm:
ld hl, StrongArmFromMenuScript
call QueueScript
ld a, $81
ret
.FailStrongArm:
call FieldMoveFailed
ld a, $80
ret
TryStrongArmMenu:
call GetFacingTileCoord
ld c, a
push de
call CheckRockyWallTile
pop de
jr nz, .failed
xor a
ret
.failed
scf
ret
; You land here when you've successfully checked a wall.
TryStrongArmOW::
; First, check if you have the Earth Badge.
; You will, because you get the move afterwards, it just covers trading.
ld de, ENGINE_EARTHBADGE
call CheckEngineFlag
jr c, .cant_climb
; Now check if Strong Arm is in the party. This takes longer, thus the above going first.
ld d, STRONG_ARM
call CheckPartyMove
jr c, .cant_climb
ld a, BANK(AskStrongArmScript)
ld hl, AskStrongArmScript
call CallScript
scf
ret
.cant_climb
ld a, BANK(CantStrongArmScript)
ld hl, CantStrongArmScript
call CallScript
scf
ret
AskStrongArmScript:
opentext
writetext AskStrongArmText
yesorno
iftrue UsedStrongArmScript
closetext
end
CantStrongArmScript:
jumptext CantStrongArmText
StrongArmFromMenuScript:
reloadmappart
special UpdateTimePals
UsedStrongArmScript:
callasm GetPartyNickname ; BUG: When used in the OW, the Pokemon is picked wrong. Tested with Machamp and Furret in party, and Furret would always be picked, regardless of party position. Seems to be finding the wrong Pokemon in OW scenarios specifically. wStringBuffer2 is failing to update.
writetext UsedStrongArmText
closetext
loadvar VAR_MOVEMENT, PLAYER_NORMAL
special UpdatePlayerSprite
waitsfx
playsound SFX_STRENGTH
readvar VAR_FACING
if_equal DOWN, .Down
.loop_up
applymovement PLAYER, .StrongArmUpStep
callasm .CheckContinueStrongArm
iffalse .loop_up
end
.Down:
applymovement PLAYER, .StrongArmFixFacing
.loop_down
applymovement PLAYER, .StrongArmDownStep
callasm .CheckContinueStrongArm
iffalse .loop_down
applymovement PLAYER, .StrongArmRemoveFixedFacing
end
.CheckContinueStrongArm:
xor a
ld [wScriptVar], a
ld a, [wPlayerTile]
call CheckRockyWallTile
ret z
ld a, $1
ld [wScriptVar], a
ret
.StrongArmUpStep:
step UP
step_end
.StrongArmDownStep:
step DOWN
step_end
.StrongArmFixFacing:
turn_head UP
fix_facing
step_end
.StrongArmRemoveFixedFacing:
remove_fixed_facing
turn_head DOWN
step_end
AskStrongArmText:
text_far _AskStrongArmText
text_end
UsedStrongArmText:
text_far _UsedStrongArmText
text_end
CantStrongArmText:
text_far _CantStrongArmText
text_end
WaterSportFunction:
call FieldMoveJumptableReset
.loop
ld hl, .Jumptable
call FieldMoveJumptable
jr nc, .loop
and $7f
ld [wFieldMoveSucceeded], a
ret
.Jumptable:
dw .TryWaterSport
dw .DoWaterSport
dw .FailWaterSport
.TryWaterSport:
ld de, ENGINE_CASCADEBADGE
call CheckBadge
jr c, .nocascadebadge
call CheckMapCanWaterSport
jr nz, .cannotdive
ld a, $1
ret
.nocascadebadge
ld a, $80
ret
.cannotdive
ld a, $2
ret
.DoWaterSport:
call GetPartyNickname
ld hl, WaterSportFromMenuScript
call QueueScript
ld a, $81
ret
.FailWaterSport:
ld hl, CantWaterSportText
call MenuTextBoxBackup
ld a, $80
ret
CantWaterSportText:
text_jump _CantWaterSportText
db "@"
CheckMapCanWaterSport:
ld a, [wWaterSportMapGroup]
and a
jr z, .failed
ld a, [wWaterSportMapNumber]
and a
jr z, .failed
ld a, [wPlayerStandingTile]
call CheckWaterSportTile
jr nz, .failed
xor a
ret
.failed
scf
ret
TryWaterSportOW::
call CheckMapCanWaterSport
jr c, .failed
ld de, ENGINE_CASCADEBADGE
call CheckEngineFlag
jr c, .cant
ld d, DIVE
call CheckPartyMove
jr c, .cant
call GetPartyNick
ld a, BANK(AskWaterSportScript)
ld hl, AskWaterSportScript
call CallScript
scf
ret
.failed
xor a
ret
.cant
ld a, BANK(CantWaterSportScript)
ld hl, CantWaterSportScript
call CallScript
scf
ret
CantWaterSportScript:
jumptext CanWaterSportText
CanWaterSportText:
text_jump _CanWaterSportText
db "@"
AskWaterSportScript:
opentext
copybytetovar wPlayerStandingTile
ifequal COLL_DIVE_UP, .up
writetext AskWaterSportDownText
jump .continue
.up
writetext AskWaterSportUpText
.continue
yesorno
iftrue UsedWaterSportScript
closetext
end
AskWaterSportDownText:
text_jump _AskWaterSportDownText
db "@"
AskWaterSportUpText:
text_jump _AskWaterSportUpText
db "@"
WaterSportFromMenuScript:
special UpdateTimePals
UsedWaterSportScript:
writetext UsedWaterSportText
waitbutton
closetext
special FadeOutPalettes
waitsfx
divewarp
end
UsedWaterSportText:
text_jump _UsedWaterSportText
db "@"

View file

@ -1269,6 +1269,8 @@ LoadMapPals:
ld a, BANK(wOBPals1) ld a, BANK(wOBPals1)
call FarCopyWRAM call FarCopyWRAM
farcall LoadSpecialMapObjectPalette
ld a, [wEnvironment] ld a, [wEnvironment]
cp TOWN cp TOWN
jr z, .outside jr z, .outside

View file

@ -1143,13 +1143,22 @@ TryTileCollisionEvent::
.headbutt .headbutt
ld a, [wFacingTileID] ld a, [wFacingTileID]
call CheckHeadbuttTreeTile call CheckHeadbuttTreeTile
jr nz, .surf jr nz, .strong_arm
farcall TryHeadbuttOW farcall TryHeadbuttOW
jr c, .done jr c, .done
jr .noevent jr .noevent
.strong_arm
ld a, [wFacingTileID]
call CheckRockyWallTile
jr nz, .surf
farcall TryStrongArmOW
jr .done
.surf .surf
farcall TrySurfOW farcall TrySurfOW
jr c, .done
farcall TryWaterSportOW
jr nc, .noevent jr nc, .noevent
jr .done jr .done

View file

@ -98,6 +98,8 @@ CheckUpdatePlayerSprite:
jr c, .ok jr c, .ok
call .CheckSurfing call .CheckSurfing
jr c, .ok jr c, .ok
call .CheckDiving
jr c, .ok
call .CheckSurfing2 call .CheckSurfing2
jr c, .ok jr c, .ok
ret ret
@ -116,6 +118,18 @@ CheckUpdatePlayerSprite:
scf scf
ret ret
.CheckDiving:
ld a, [wMapTileset]
cp TILESET_UNDERWATER
jr nz, .not_underwater
ld a, PLAYER_WATER_SPORT
ld [wPlayerState], a
scf
ret
.not_underwater
and a
ret
.CheckSurfing2: .CheckSurfing2:
ld a, [wPlayerState] ld a, [wPlayerState]
cp PLAYER_NORMAL cp PLAYER_NORMAL

View file

@ -33,6 +33,8 @@ DoPlayerMovement::
ld a, [wPlayerState] ld a, [wPlayerState]
cp PLAYER_NORMAL cp PLAYER_NORMAL
jr z, .Normal jr z, .Normal
cp PLAYER_WATER_SPORT
jr z, .Normal
cp PLAYER_SURF cp PLAYER_SURF
jr z, .Surf jr z, .Surf
cp PLAYER_SURF_PIKA cp PLAYER_SURF_PIKA

View file

@ -237,6 +237,8 @@ ScriptCommandTable:
dw Script_trainerpic ; aa dw Script_trainerpic ; aa
dw Script_loadmonindex ; ab dw Script_loadmonindex ; ab
dw Script_checkmaplockedmons ; ac dw Script_checkmaplockedmons ; ac
dw Script_divemap
dw Script_divewarp
assert_table_length NUM_EVENT_COMMANDS assert_table_length NUM_EVENT_COMMANDS
StartScript: StartScript:
@ -2414,3 +2416,38 @@ LoadScriptPokemonID:
jp nz, GetPokemonIDFromIndex jp nz, GetPokemonIDFromIndex
ld a, [wScriptVar] ld a, [wScriptVar]
ret ret
Script_divemap:
call GetScriptByte
ld [wDiveMapGroup], a
call GetScriptByte
ld [wDiveMapNumber], a
call GetScriptByte
ld [wDiveDeltaX], a
call GetScriptByte
ld [wDiveDeltaY], a
ret
Script_divewarp:
ld a, [wDiveMapGroup]
ld [wMapGroup], a
ld a, [wDiveMapNumber]
ld [wMapNumber], a
ld a, [wXCoord]
ld b, a
ld a, [wDiveDeltaX]
add b
ld [wXCoord], a
ld a, [wYCoord]
ld b, a
ld a, [wDiveDeltaY]
add b
ld [wYCoord], a
ld a, -1
ld [wDefaultSpawnpoint], a
ld a, MAPSETUP_WARP
ld [hMapEntryMethod], a
ld a, 1
call LoadMapStatus
call StopScript
ret

View file

@ -64,6 +64,7 @@ CheckGrassCollision::
db COLL_LONG_GRASS db COLL_LONG_GRASS
db COLL_CUT_28 db COLL_CUT_28
db COLL_WATER db COLL_WATER
db COLL_DIVE_DOWN
db COLL_GRASS_48 db COLL_GRASS_48
db COLL_GRASS_49 db COLL_GRASS_49
db COLL_GRASS_4A db COLL_GRASS_4A

View file

@ -4,6 +4,7 @@ HandleNewMap:
call ResetFlashIfOutOfCave call ResetFlashIfOutOfCave
call GetCurrentMapSceneID call GetCurrentMapSceneID
call ResetBikeFlags call ResetBikeFlags
call ResetDiveMap
call ResetMapLockedIDs call ResetMapLockedIDs
ld a, MAPCALLBACK_NEWMAP ld a, MAPCALLBACK_NEWMAP
call RunMapCallback call RunMapCallback

View file

@ -141,6 +141,11 @@ PokemonActionSubmenu:
dbw MONMENUITEM_WATERFALL, MonMenu_Waterfall dbw MONMENUITEM_WATERFALL, MonMenu_Waterfall
dbw MONMENUITEM_ROCKSMASH, MonMenu_RockSmash dbw MONMENUITEM_ROCKSMASH, MonMenu_RockSmash
dbw MONMENUITEM_SWEETSCENT, MonMenu_SweetScent dbw MONMENUITEM_SWEETSCENT, MonMenu_SweetScent
dbw MONMENUITEM_UPROOT, MonMenu_Uproot
dbw MONMENUITEM_WATER_SPORT,MonMenu_WaterSport
dbw MONMENUITEM_STRONG_ARM, MonMenu_StrongArm
dbw MONMENUITEM_BRIGHT_MOSS,MonMenu_BrightMoss
dbw MONMENUITEM_WIND_RIDE, MonMenu_WindRide
dbw MONMENUITEM_STATS, OpenPartyStats dbw MONMENUITEM_STATS, OpenPartyStats
dbw MONMENUITEM_SWITCH, SwitchPartyMons dbw MONMENUITEM_SWITCH, SwitchPartyMons
dbw MONMENUITEM_ITEM, GiveTakePartyMonItem dbw MONMENUITEM_ITEM, GiveTakePartyMonItem
@ -794,6 +799,43 @@ MonMenu_SweetScent:
ld a, $2 ld a, $2
ret ret
MonMenu_Uproot:
ld a, $3 ; will be unused for now, so let's stay in the party menu
ret
MonMenu_WaterSport:
farcall WaterSportFunction
ld a, [wFieldMoveSucceeded]
cp $1
jr nz, .Fail
ld b, $4
ld a, $2
ret
.Fail:
ld a, $3
ret
MonMenu_StrongArm: ; just rock climb...
farcall StrongArmFunction
ld a, [wFieldMoveSucceeded]
cp $1
jr nz, .Fail
ld b, $4
ld a, $2
ret
.Fail:
ld a, $3
ret
MonMenu_BrightMoss:
ld a, $3 ; will be unused for now, so let's stay in the party menu
ret
MonMenu_WindRide:
ld a, $3 ; will be unused for now, so let's stay in the party menu
ret
ChooseMoveToDelete: ChooseMoveToDelete:
ld hl, wOptions ld hl, wOptions
ld a, [hl] ld a, [hl]

View file

@ -38,7 +38,7 @@ _AnimateTileset::
Tileset0Anim: Tileset0Anim:
TilesetJohtoModernAnim: TilesetJohtoModernAnim:
dw vTiles2 tile $14, AnimateWaterTile dw vTiles2 tile $14, AnimateWaterTile
dw NULL, WaitTileAnimation dw vTiles2 tile $5b, AnimateDeepWaterTile
dw NULL, WaitTileAnimation dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation dw NULL, WaitTileAnimation
dw NULL, AnimateWaterPalette dw NULL, AnimateWaterPalette
@ -357,6 +357,23 @@ TilesetNihonMartAnim:
dw NULL, WaitTileAnimation dw NULL, WaitTileAnimation
dw NULL, DoneTileAnimation dw NULL, DoneTileAnimation
; Currently unused.
; Zeta, you've made your own tileset, but check here and see what you want.
; https://github.com/Rangi42/pokecrystal/commit/c21561ea717feef9b2eb3785c2ea112cd0d19ba0#diff-88dbff1eb3920f69b17a3d5f613643e1a41096514706bc09f449e4aa637f20e4R5647
TilesetUnderwaterAnim:
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, UnderwaterBubbleTile
dw NULL, WaitTileAnimation
dw NULL, AnimateSeaweedTile1
dw NULL, AnimateSeaweedTile2
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, StandingTileFrame8
dw NULL, DoneTileAnimation
DoneTileAnimation: DoneTileAnimation:
; Reset the animation command loop. ; Reset the animation command loop.
xor a xor a
@ -551,6 +568,32 @@ AnimateWaterTile:
.WaterTileFrames: .WaterTileFrames:
INCBIN "gfx/tilesets/water/water.2bpp" INCBIN "gfx/tilesets/water/water.2bpp"
AnimateDeepWaterTile:
; Draw a deep water tile for the current frame in VRAM tile at de.
; Save sp in bc (see WriteTile).
ld hl, sp+0
ld b, h
ld c, l
ld a, [wTileAnimationTimer]
; 4 tile graphics, updated every other frame.
and %110
; 2 x 8 = 16 bytes per tile
add a
add a
add a
add LOW(DeepWaterTileFrames)
ld l, a
ld a, 0
adc HIGH(DeepWaterTileFrames)
ld h, a
; The stack now points to the start of the tile for this frame.
ld sp, hl
ld l, e
ld h, d
jp WriteTile
DeepWaterTileFrames:
INCBIN "gfx/tilesets/water/deep-water.2bpp"
ForestTreeLeftAnimation: ForestTreeLeftAnimation:
; Save the stack pointer in bc for WriteTile to restore ; Save the stack pointer in bc for WriteTile to restore
ld hl, sp+0 ld hl, sp+0
@ -1124,3 +1167,76 @@ WhirlpoolTiles1: INCBIN "gfx/tilesets/whirlpool/1.2bpp"
WhirlpoolTiles2: INCBIN "gfx/tilesets/whirlpool/2.2bpp" WhirlpoolTiles2: INCBIN "gfx/tilesets/whirlpool/2.2bpp"
WhirlpoolTiles3: INCBIN "gfx/tilesets/whirlpool/3.2bpp" WhirlpoolTiles3: INCBIN "gfx/tilesets/whirlpool/3.2bpp"
WhirlpoolTiles4: INCBIN "gfx/tilesets/whirlpool/4.2bpp" WhirlpoolTiles4: INCBIN "gfx/tilesets/whirlpool/4.2bpp"
UnderwaterBubbleTile:
; No parameters.
; Save sp in bc (see WriteTile).
ld hl, sp+$0
ld b, h
ld c, l
; Alternate tile graphic every frame
ld a, [wTileAnimationTimer]
and %111 ; 8 frames
swap a ; * 16 bytes per tile
ld e, a
ld d, 0
ld hl, UnderwaterBubbleTileFrames
add hl, de
ld sp, hl
ld hl, vTiles2 tile $13 ; index of bubble tile
jp WriteTile
UnderwaterBubbleTileFrames:
INCBIN "gfx/tilesets/bubble/1.2bpp"
INCBIN "gfx/tilesets/bubble/2.2bpp"
INCBIN "gfx/tilesets/bubble/3.2bpp"
INCBIN "gfx/tilesets/bubble/4.2bpp"
INCBIN "gfx/tilesets/bubble/5.2bpp"
INCBIN "gfx/tilesets/bubble/5.2bpp"
INCBIN "gfx/tilesets/bubble/5.2bpp"
INCBIN "gfx/tilesets/bubble/5.2bpp"
AnimateSeaweedTile1:
; No parameters.
; Save sp in bc (see WriteTile).
ld hl, sp+$0
ld b, h
ld c, l
; Alternate tile graphic every eighth frame
ld a, [wTileAnimationTimer]
and %100
srl a
srl a
swap a ; * 16 bytes per tile
ld e, a
ld d, 0
ld hl, SeaweedTileFrames
add hl, de
ld sp, hl
ld hl, vTiles2 tile $03 ; index of seaweed tile 1
jp WriteTile
AnimateSeaweedTile2:
; No parameters.
; Save sp in bc (see WriteTile).
ld hl, sp+$0
ld b, h
ld c, l
; Alternate tile graphic every eighth frame
ld a, [wTileAnimationTimer]
xor %100 ; invert tile alternation from AnimateSeaweedTile1
and %100
srl a
srl a
swap a ; * 16 bytes per tile
ld e, a
ld d, 0
ld hl, SeaweedTileFrames
add hl, de
ld sp, hl
ld hl, vTiles2 tile $04 ; index of seaweed tile 2
jp WriteTile
SeaweedTileFrames:
INCBIN "gfx/tilesets/seaweed/1.2bpp"
INCBIN "gfx/tilesets/seaweed/2.2bpp"

View file

@ -1,3 +1,8 @@
; Zeta, Rangi's Dive code sets something special here.
; https://github.com/Rangi42/pokecrystal/commit/c21561ea717feef9b2eb3785c2ea112cd0d19ba0#diff-3f65a383d53b5b6bef93c0cf6b1078db365ec51031b8c9b8cccff1d8b81b77db
; Test and see if you like it; do so by adding the changes from the equivalent file.
; Requires underwater tileset to exist.
LoadSpecialMapPalette: LoadSpecialMapPalette:
ld a, [wMapTileset] ld a, [wMapTileset]
cp TILESET_POKECOM_CENTER cp TILESET_POKECOM_CENTER

View file

@ -151,3 +151,4 @@ ChannelerGFX:: INCBIN "gfx/sprites/channeler.2bpp"
BaldingGuyGFX:: INCBIN "gfx/sprites/balding_guy.2bpp" BaldingGuyGFX:: INCBIN "gfx/sprites/balding_guy.2bpp"
GameboyGirlGFX:: INCBIN "gfx/sprites/gameboy_girl.2bpp" GameboyGirlGFX:: INCBIN "gfx/sprites/gameboy_girl.2bpp"
OverworldPikachuGFX:: INCBIN "gfx/sprites/pikachu.2bpp" OverworldPikachuGFX:: INCBIN "gfx/sprites/pikachu.2bpp"
DiveSpriteGFX:: INCBIN "gfx/sprites/dive.2bpp"

BIN
gfx/sprites/dive.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

View file

@ -111,6 +111,9 @@ INCLUDE "gfx/tilesets/battle_tower_outside_palette_map.asm"
TilesetLavenderCryptPalMap: TilesetLavenderCryptPalMap:
INCLUDE "gfx/tilesets/lavendercrypt_palette_map.asm" INCLUDE "gfx/tilesets/lavendercrypt_palette_map.asm"
TilesetUnderwaterPalMap:
INCLUDE "gfx/tilesets/underwater_palette_map.asm"
MapGroupPalettes: ; unreferenced MapGroupPalettes: ; unreferenced
; entries correspond to MAPGROUP_* constants ; entries correspond to MAPGROUP_* constants
rept NUM_MAP_GROUPS rept NUM_MAP_GROUPS

View file

@ -36,15 +36,6 @@ INCBIN "data/tilesets/ice_path_metatiles.bin"
TilesetIcePathColl:: TilesetIcePathColl::
INCLUDE "data/tilesets/ice_path_collision.asm" INCLUDE "data/tilesets/ice_path_collision.asm"
TilesetPlayersRoomGFX::
INCBIN "gfx/tilesets/players_room.2bpp.lz"
TilesetPlayersRoomMeta::
INCBIN "data/tilesets/players_room_metatiles.bin"
TilesetPlayersRoomColl::
INCLUDE "data/tilesets/players_room_collision.asm"
SECTION "Tileset Data 2", ROMX SECTION "Tileset Data 2", ROMX
@ -666,3 +657,14 @@ INCLUDE "data/tilesets/forest_kanto_collision.asm"
TilesetForestKantoAttr:: TilesetForestKantoAttr::
INCBIN "data/tilesets/forest_kanto_attributes.bin" INCBIN "data/tilesets/forest_kanto_attributes.bin"
SECTION "Tileset Data 17", ROMX
; moved to make room for new rocky wall colls
TilesetPlayersRoomGFX::
INCBIN "gfx/tilesets/players_room.2bpp.lz"
TilesetPlayersRoomMeta::
INCBIN "data/tilesets/players_room_metatiles.bin"
TilesetPlayersRoomColl::
INCLUDE "data/tilesets/players_room_collision.asm"

BIN
gfx/tilesets/bubble/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 B

BIN
gfx/tilesets/bubble/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

BIN
gfx/tilesets/bubble/3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 B

BIN
gfx/tilesets/bubble/4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 B

BIN
gfx/tilesets/bubble/5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 840 B

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

View file

@ -9,11 +9,10 @@
tilepal 0, RED, BROWN, WATER, WATER, BROWN, GREEN, BROWN, BROWN tilepal 0, RED, BROWN, WATER, WATER, BROWN, GREEN, BROWN, BROWN
tilepal 0, BROWN, WATER, GRAY, BROWN, BROWN, BROWN, GRAY, GRAY tilepal 0, BROWN, WATER, GRAY, BROWN, BROWN, BROWN, GRAY, GRAY
tilepal 0, BROWN, BROWN, BROWN, BROWN, BROWN, BROWN, BROWN, BROWN tilepal 0, BROWN, BROWN, BROWN, BROWN, BROWN, BROWN, BROWN, BROWN
tilepal 0, WATER, GRAY, GRAY, GRAY, BROWN, BROWN, GRAY, GRAY tilepal 0, WATER, GRAY, GRAY, WATER, BROWN, BROWN, GRAY, GRAY
tilepal 0, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF rept 16
tilepal 0, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF db $ff
tilepal 0, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF endr
tilepal 0, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF, TEXT
tilepal 1, BROWN, BROWN, BROWN, RED, RED, RED, RED, RED tilepal 1, BROWN, BROWN, BROWN, RED, RED, RED, RED, RED
tilepal 1, RED, RED, RED, RED, RED, RED, RED, RED tilepal 1, RED, RED, RED, RED, RED, RED, RED, RED
tilepal 1, RED, RED, RED, RED, BROWN, BROWN, BROWN, BROWN tilepal 1, RED, RED, RED, RED, BROWN, BROWN, BROWN, BROWN

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
gfx/tilesets/seaweed/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 B

BIN
gfx/tilesets/seaweed/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 B

View file

@ -29,6 +29,12 @@ EventFlagAction::
call FlagAction call FlagAction
ret ret
ResetDiveMap::
xor a
ld [wDiveMapGroup], a
ld [wDiveMapNumber], a
ret
FlagAction:: FlagAction::
; Perform action b on bit de in flag array hl. ; Perform action b on bit de in flag array hl.

View file

@ -25,4 +25,9 @@ IsHMMove::
dw FLASH dw FLASH
dw WATERFALL dw WATERFALL
dw WHIRLPOOL dw WHIRLPOOL
dw UPROOT
dw WATER_SPORT
dw STRONG_ARM
dw BRIGHT_MOSS ; this will be added as a hm in the 16bit patch
dw WIND_RIDE
dw -1 ; end dw -1 ; end

View file

@ -159,8 +159,6 @@ CheckPitTile::
CheckIceTile:: CheckIceTile::
cp COLL_ICE cp COLL_ICE
ret z ret z
cp COLL_ICE_2B
ret z
scf scf
ret ret
@ -173,6 +171,12 @@ CheckWhirlpoolTile::
scf scf
ret ret
CheckDiveTile::
cp COLL_DIVE_UP
ret z
cp COLL_DIVE_DOWN
ret
CheckWaterfallTile:: CheckWaterfallTile::
cp COLL_WATERFALL cp COLL_WATERFALL
ret z ret z
@ -563,3 +567,7 @@ GetSpriteDirection::
ld a, [hl] ld a, [hl]
maskbits NUM_DIRECTIONS, 2 maskbits NUM_DIRECTIONS, 2
ret ret
CheckRockyWallTile::
cp COLL_ROCKY_WALL
ret

View file

@ -181,6 +181,7 @@ ENDM
command startloop ; ae command startloop ; ae
command curl ; af command curl ; af
command coinhurlpower command coinhurlpower
command doubleunderwaterdamage
DEF NUM_EFFECT_COMMANDS EQU const_value - 1 DEF NUM_EFFECT_COMMANDS EQU const_value - 1
const_def -1, -1 const_def -1, -1

View file

@ -1054,6 +1054,30 @@ MACRO getname
db \1 ; memory db \1 ; memory
ENDM ENDM
; divemap macro.
; When adding a divemap to an area, you do it like so;
; callback MAPCALLBACK_NEWMAP, .DiveMap
;.DiveMap:
; divemap MAPCONSTHERE
; return
; Got it?
const divemap_command
MACRO divemap
if _NARG == 1
divemap \1, 0, 0
else
db divemap_command
map_id \1 ; map
db \2 ; delta x
db \3 ; delta y
endc
ENDM
const divewarp_command
MACRO divewarp
db divewarp_command
ENDM
const wait_command ; $a8 const wait_command ; $a8
MACRO wait MACRO wait
db wait_command db wait_command

View file

@ -1,2 +1,2 @@
”dbQQ>???;”dN>?,,´µ)”dN$W*,¶·)”dN1(,,,)”dP\ŤŽ*,)”d{{y|r(,)”-{ ”dbQQ>>??;”dN>?,(´µ)”dN$½*(¶·)”dN1($W½%”dP\<1A>Ž*,)”d{{y|r(,)”-{
{t(,)”C-$W%<25>™™™™™™™™™ {t(,)”C-$½%˜™™™™™™™™™

View file

@ -8,12 +8,12 @@ DebugRoom_MapScripts:
DebugPokemon1Script: DebugPokemon1Script:
opentext opentext
getmonname STRING_BUFFER_3, COATL getmonname STRING_BUFFER_3, MACHAMP
writetext ReceivedDebugPokemonText writetext ReceivedDebugPokemonText
playsound SFX_CAUGHT_MON playsound SFX_CAUGHT_MON
waitsfx waitsfx
promptbutton promptbutton
givepoke COATL, 65, TM_ROCK_SMASH givepoke MACHAMP, 65, TM_ROCK_SMASH
closetext closetext
end end
@ -211,6 +211,7 @@ DebugItemScript:
giveitem HELIX_FOSSIL, 2 giveitem HELIX_FOSSIL, 2
giveitem OLD_AMBER, 2 giveitem OLD_AMBER, 2
giveitem COIN_CASE giveitem COIN_CASE
giveitem HM_STRONG_ARM
givecoins 2500 givecoins 2500
closetext closetext
end end
@ -409,7 +410,7 @@ DebugRoom_MapEvents:
warp_event 23, 14, PLAYERS_HOUSE_1F, 1 warp_event 23, 14, PLAYERS_HOUSE_1F, 1
warp_event 3, 20, SILENT_HILLS, 1 warp_event 3, 20, SILENT_HILLS, 1
warp_event 11, 15, LAKE_OF_RAGE, 3 warp_event 11, 15, LAKE_OF_RAGE, 3
warp_event 27, 5, PEWTER_CITY, 2 warp_event 27, 5, SILVER_CAVE_ROOM_2, 1 ; test strong arm
warp_event 15, 2, GOLDENROD_CITY, 1 ; city warp warp_event 15, 2, GOLDENROD_CITY, 1 ; city warp
warp_event 4, 9, SUMMER_BEACH_HOUSE, 1 ; left lab/league warp warp_event 4, 9, SUMMER_BEACH_HOUSE, 1 ; left lab/league warp
warp_event 5, 9, BLUE_FOREST, 1 ; right lab/league warp warp_event 5, 9, BLUE_FOREST, 1 ; right lab/league warp

View file

@ -12,5 +12,5 @@
)++ )++
!" (*! !" (*!
+  + 
 *   A* 
(!)+  (!)+ 

View file

@ -19,8 +19,8 @@
)-..7. )-..7.
- -
-/'' -/''
- \-
-  - 
    *-./ \    \*-./
-/,,,-/$$$$-./ -/,,,-/$$$$-./
%)$$$$ # %)$$$$ #

View file

@ -387,7 +387,7 @@ wAttackMissed::
wPlayerSubStatus1:: db wPlayerSubStatus1:: db
wPlayerSubStatus2:: db wPlayerSubStatus2:: db
wPlayerSubStatus3:: db wPlayerSubStatus3:: db
wPlayerSubStatus4:: db wPlayerSubStatus4:: db ; bit 3 is underwater now
wPlayerSubStatus5:: db wPlayerSubStatus5:: db
wEnemySubStatus1:: db wEnemySubStatus1:: db
@ -3291,7 +3291,10 @@ wBackupWarpNumber:: db
wBackupMapGroup:: db wBackupMapGroup:: db
wBackupMapNumber:: db wBackupMapNumber:: db
ds 3 wDiveMapGroup:: db
wDiveMapNumber:: db
wDiveDeltaX:: db
wDiveDeltaY:: db
wLastSpawnMapGroup:: db wLastSpawnMapGroup:: db
wLastSpawnMapNumber:: db wLastSpawnMapNumber:: db