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 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!
- Walls can be climbed using Strong Arm, functionality identical to HGSS Rock Climb.
# 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.
@ -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)
- 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).
- [PiaCarrot/pokeorange](https://github.com/PiaCarrot/pokeorange) - [Rock Climb functionality](https://github.com/pret/pokecrystal/wiki/Rock-Climb)
## 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

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_COIN_HURL
const ANIM_OBJ_SHOOTING_MIST
const ANIM_OBJ_WATER_SPORT_1
const ANIM_OBJ_WATER_SPORT_2
DEF NUM_ANIM_OBJS EQU const_value
; 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_MIST
const SUBSTATUS_FOCUS_ENERGY
const_skip
const SUBSTATUS_UNDERWATER
const SUBSTATUS_SUBSTITUTE
const SUBSTATUS_RECHARGE
const SUBSTATUS_RAGE

View file

@ -10,6 +10,7 @@ DEF COLL_FLOOR EQU $00
DEF COLL_01 EQU $01 ; garbage
DEF COLL_03 EQU $03 ; 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_CUT_08 EQU $08 ; 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_CUT_28 EQU $28 ; garbage
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_WATERFALL_RIGHT EQU $30 ; 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 WHIRLPOOL ; f9
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
MACRO add_mt

View file

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

View file

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

View file

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

View file

@ -267,12 +267,13 @@ DEF REGISTERED_POCKET EQU %11000000
DEF REGISTERED_NUMBER EQU %00111111
; wPlayerState::
DEF PLAYER_NORMAL EQU 0
DEF PLAYER_BIKE EQU 1
DEF PLAYER_SKATE EQU 2
DEF PLAYER_SURF EQU 4
DEF PLAYER_SURF_PIKA EQU 8
DEF PLAYER_RUN EQU 16
DEF PLAYER_NORMAL EQU 0
DEF PLAYER_BIKE EQU 1
DEF PLAYER_SKATE EQU 2
DEF PLAYER_SURF EQU 4
DEF PLAYER_SURF_PIKA EQU 8
DEF PLAYER_RUN EQU 16
DEF PLAYER_WATER_SPORT EQU 16
; wCelebiEvent::
DEF CELEBIEVENT_FOREST_IS_RESTLESS_F EQU 2

View file

@ -181,4 +181,5 @@ BattleCommandPointers:
dw BattleCommand_StartLoop
dw BattleCommand_Curl
dw BattleCommand_CoinHurlPower
dw BattleCommand_DoubleUnderwaterDamage
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
; 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, $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

View file

@ -7,7 +7,7 @@ TileCollisionTable::
db LAND_TILE ; COLL_03
db LAND_TILE ; COLL_04
db LAND_TILE ; 05
db LAND_TILE ; 06
db WALL_TILE ; COLL_ROCKY_WALL
db WALL_TILE ; COLL_WALL
db LAND_TILE ; COLL_CUT_08
db LAND_TILE ; 09
@ -43,8 +43,8 @@ TileCollisionTable::
db WALL_TILE ; COLL_BUOY
db WATER_TILE ; COLL_CUT_28
db WATER_TILE ; COLL_WATER
db WATER_TILE | TALK ; 2a
db LAND_TILE ; COLL_ICE_2B
db WATERTILE | TALK ; COLL_DIVE_DOWN
db LANDTILE | TALK ; COLL_DIVE_UP
db WATER_TILE | TALK ; COLL_WHIRLPOOL_2C
db WATER_TILE ; 2d
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
; HM07
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
; $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
item_attribute $9999, HELD_NONE, 0, NO_LIMITS, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
assert_table_length $100

View file

@ -252,11 +252,12 @@ ItemNames::
li "HM05"
li "HM06"
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
li "TERU-SAMA"
li "TERU-SAMA"
li "TERU-SAMA"
li "TERU-SAMA"
li "TERU-SAMA"
li "?"
assert_list_length $100

View file

@ -14,8 +14,13 @@ MonMenuOptions:
dbbw MONMENU_FIELD_MOVE, MONMENUITEM_SOFTBOILED, SOFTBOILED
dbbw MONMENU_FIELD_MOVE, MONMENUITEM_HEADBUTT, HEADBUTT
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_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
dbbw MONMENU_MENUOPTION, MONMENUITEM_STATS, .stats
dbbw MONMENU_MENUOPTION, MONMENUITEM_SWITCH, .switch

View file

@ -291,7 +291,7 @@ BattleAnimations::
dw BattleAnim_Psybeam ; Synchronize
dw BattleAnim_StrongArm
dw BattleAnim_Uppercut
dw BattleAnim_WaterGun ; uhhh
dw BattleAnim_WaterSport
dw BattleAnim_Wind_Ride ; Wind Ride but real
dw BattleAnim_Flash ; Dazzling Gleam
dw BattleAnim_Sing ; Disarming Voice
@ -5055,3 +5055,40 @@ BattleAnim_ShowMon_1:
anim_incobj 1
anim_wait 1
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.@"
WaterSportDescription:
db "Lowers FIRE move" ; I really want to change this tbh
next "power.@"
db "Lowers FIRE move"
next "power to attack.@"
DazzlingGleamDescription:
db "Flashes a bright"

View file

@ -2097,3 +2097,68 @@ CoinHurl: ; Identical to Return, except it calculates damage differently, and do
checkfaint
buildopponentrage
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 DefenseCurl
dw CoinHurl
dw Surf
dw Whirlpool
dw Bounce
assert_table_length NUM_MOVE_EFFECTS

View file

@ -74,7 +74,7 @@ Moves1:
move EFFECT_MIST, 0, ICE, 100, 30, 0 ;MIST
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, 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, 120, ICE, 70, 5, 10 ;BLIZZARD
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_FUTURE_SIGHT, 80, PSYCHIC_TYPE, 90, 15, 0 ;FUTURE_SIGHT
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_FLINCH_HIT, 80, ROCK, 100, 15, 30 ;ROCK_HEAD
move EFFECT_NORMAL_HIT, 140, ROCK, 70, 5, 0 ;ROCK_SLASH
move EFFECT_NORMAL_HIT, 50, BUG, 100, 15, 0 ;CROSS_CUTTER
move EFFECT_SP_ATK_DOWN, 0, NORMAL, 100, 40, 0 ;MEGAPHONE
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_COIN_HURL, 1, NORMAL, 100, 20, 0 ; COIN_HURL
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_ATTACK_UP_HIT, 70, STEEL, 90, 10, 10 ; STRONG_ARM
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, 80, FAIRY, 100, 10, 0 ; DAZZLING_GLEAM
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_PIKA, SPRITE_SURFING_PIKACHU
db PLAYER_RUN, SPRITE_CHRIS_RUN
db PLAYER_WATER_SPORT, SPRITE_CHRIS_WATER_SPORT
db -1 ; end
KrisStateSprites:
@ -12,6 +13,7 @@ KrisStateSprites:
db PLAYER_SURF, SPRITE_SURF
db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU
db PLAYER_RUN, SPRITE_KRIS_RUN
db PLAYER_WATER_SPORT, SPRITE_KRIS_WATER_SPORT
db -1 ; end
EnbyStateSprites:
@ -20,5 +22,6 @@ EnbyStateSprites:
db PLAYER_SURF, SPRITE_SURF
db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU
db PLAYER_RUN, SPRITE_TOPAZ_RUN
db PLAYER_WATER_SPORT, SPRITE_TOPAZ_WATER_SPORT
db -1 ; end

View file

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

View file

@ -1502,8 +1502,6 @@ _OakText3::
text_promptbutton
text_end
text_end ; unreferenced
_OakText4::
text "People and #MON"
line "live together by"
@ -1528,3 +1526,62 @@ _OakText5::
para "That's why I study"
line "#MON every day."
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, SWITCH, FLOOR, FLOOR ; 59
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 ; 3e
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&'&&&&&&&&&&&&%&&&&&&&&&&'&&& 
&&&
&&&AB&&QR&&&&AB&&QR

Binary file not shown.

View file

@ -187,3 +187,4 @@
tilecoll WALL, WALL, WALL, WATER ; ba
tilecoll WALL, WALL, WATER, WALL ; bb
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_THUNDER, AI_Smart_Thunder
dbw EFFECT_FLY, AI_Smart_Fly
dbw EFFECT_SURF, AI_Smart_Surf
dbw EFFECT_WHIRLPOOL, AI_Smart_Whirlpool
db -1 ; end
AI_Smart_Sleep:
@ -1137,15 +1139,19 @@ AI_Smart_SpDefenseUp2:
ret
AI_Smart_Fly:
; Fly, Dig
; Fly, Dig, Dive, Bounce
; Greatly encourage this move if the player is
; flying or underground, and slower than the enemy.
ld a, [wPlayerSubStatus3]
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
jr nz, .player_hidden
ld a, [wPlayerSubStatus4]
and 1 << SUBSTATUS_UNDERWATER
ret z
.player_hidden
call AICompareSpeed
ret nc
@ -1637,10 +1643,13 @@ AI_Smart_PriorityHit:
call AICompareSpeed
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]
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
jp nz, AIDiscourageMove
ld a, [wPlayerSubStatus4]
and 1 << SUBSTATUS_UNDERWATER
jp nz, AIDiscourageMove
; Greatly encourage this move if it will KO the player.
ld a, 1
@ -1663,6 +1672,30 @@ AI_Smart_PriorityHit:
dec [hl]
dec [hl]
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:
; Don't use Thief unless it's the only move available.
@ -2633,15 +2666,19 @@ AI_Smart_Gust:
AI_Smart_FutureSight:
; 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
ret nc
ld a, [wPlayerSubStatus3]
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
jr nz, .player_hidden
ld a, [wPlayerSubStatus4]
and 1 << SUBSTATUS_UNDERWATER
ret z
.player_hidden
dec [hl]
dec [hl]
ret

View file

@ -1119,7 +1119,15 @@ ResidualDamage:
ld a, BATTLE_VARS_SUBSTATUS3_OPP
call GetBattleVar
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
.called
call SwitchTurnCore
call GetEighthMaxHP
@ -1302,6 +1310,11 @@ HandleWrap:
call GetBattleVar
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
jr nz, .skip_anim
ld a, BATTLE_VARS_SUBSTATUS4
call GetBattleVar
and 1 << SUBSTATUS_UNDERWATER
jr nz, .skip_anim
call SwitchTurnCore
xor a
@ -7094,6 +7107,11 @@ Call_PlayBattleAnim_OnlyIfVisible:
call GetBattleVar
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
ret nz
ld a, BATTLE_VARS_SUBSTATUS4
call GetBattleVar
and 1 << SUBSTATUS_UNDERWATER
ret nz
Call_PlayBattleAnim:
ld a, e

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:
call SetPlayerTurn
@ -360,11 +366,16 @@ CantMove:
res SUBSTATUS_UNDERGROUND, [hl]
res SUBSTATUS_FLYING, [hl]
ld a, BATTLE_VARS_SUBSTATUS4
call GetBattleVarAddr
res SUBSTATUS_UNDERWATER, [hl]
jp AppearUserRaiseSub
.fly_dig_moves
dw FLY
dw DIG
dw BOUNCE
dw WATER_SPORT
dw -1
OpponentCantMove:
@ -529,12 +540,17 @@ CheckEnemyTurn:
xor 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 a, BATTLE_VARS_SUBSTATUS3_OPP
call GetBattleVar
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
.no_flicker
ld c, TRUE
call DoEnemyDamage
@ -632,12 +648,17 @@ HitConfusion:
xor 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 a, BATTLE_VARS_SUBSTATUS3_OPP
call GetBattleVar
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
.no_flicker
ld hl, UpdatePlayerHUD
call CallBattleCore
@ -1746,13 +1767,25 @@ BattleCommand_CheckHit:
ret
.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.
ld a, BATTLE_VARS_SUBSTATUS3_OPP
call GetBattleVar
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
ld a, BATTLE_VARS_MOVE_ANIM
call GetBattleVar
cp SURF
ret z
cp WHIRLPOOL
ret
.flying_or_underground
bit SUBSTATUS_FLYING, a
ld hl, .FlyMoves
@ -2032,6 +2065,8 @@ BattleCommand_MoveAnimNoSub:
.fly_dig_moves
dw FLY
dw DIG
dw BOUNCE
dw WATER_SPORT
dw -1
.alternate_anim
@ -2145,12 +2180,17 @@ BattleCommand_FailureText:
call GetBattleVarAddr
res SUBSTATUS_UNDERGROUND, [hl]
res SUBSTATUS_FLYING, [hl]
ld a, BATTLE_VARS_SUBSTATUS4
call GetBattleVarAddr
res SUBSTATUS_UNDERWATER, [hl]
call AppearUserRaiseSub
jp EndMoveEffect
.fly_dig_moves
dw FLY
dw DIG
dw WATER_SPORT
dw BOUNCE
dw -1
BattleCommand_ApplyDamage:
@ -3420,6 +3460,11 @@ FarPlayBattleAnimation:
call GetBattleVar
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
ret nz
ld a, BATTLE_VARS_SUBSTATUS4
call GetBattleVar
and 1 << SUBSTATUS_UNDERWATER
ret nz
; fallthrough
@ -3606,7 +3651,12 @@ DoSubstituteDamage:
ld a, BATTLE_VARS_SUBSTATUS3
call GetBattleVar
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
.dont_lower_sub
call BattleCommand_SwitchTurn
ld a, BATTLE_VARS_MOVE_EFFECT
@ -5545,6 +5595,9 @@ BattleCommand_CheckCharge:
res SUBSTATUS_CHARGED, [hl]
res SUBSTATUS_UNDERGROUND, [hl]
res SUBSTATUS_FLYING, [hl]
ld a, BATTLE_VARS_SUBSTATUS4
call GetBattleVarAddr
res SUBSTATUS_UNDERWATER, [hl]
ld b, charge_command
jp SkipToBattleCommand
@ -5578,19 +5631,13 @@ BattleCommand_Charge:
call LoadMoveAnim
ld a, BATTLE_VARS_MOVE_ANIM
call GetBattleVar
ld h, a
ld bc, FLY
call CompareMove
ld a, 1 << SUBSTATUS_FLYING
cp FLY
jr z, .got_move_type
if HIGH(FLY) != HIGH(DIG)
ld bc, DIG
else
ld c, LOW(DIG)
endc
ld a, h
call CompareMove
ld a, 1 << SUBSTATUS_UNDERGROUND
cp DIG
jr z, .got_move_type
cp BOUNCE
jr z, .got_move_type
cp WATER_SPORT
jr z, .got_move_type
call BattleCommand_RaiseSub
xor a
@ -5659,6 +5706,8 @@ BattleCommand_Charge:
dw SKY_ATTACK, .BattleGlowingText
dw FLY, .BattleFlewText
dw DIG, .BattleDugText
dw BOUNCE, .BattleFlewText
dw WATER_SPORT, .BattleWaterSportText
dw -1
.BattleMadeWhirlwindText:
@ -5685,9 +5734,10 @@ BattleCommand_Charge:
text_far _BattleDugText
text_end
BattleCommand_Unused3C:
; effect0x3c
ret
.BattleWaterSportText:
; 'hid underwater!'
text_jump HidUnderwaterText
db "@"
BattleCommand_TrapTarget:
ld a, [wAttackMissed]
@ -6440,10 +6490,6 @@ INCLUDE "engine/battle/move_effects/sandstorm.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/attract.asm"

View file

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

View file

@ -564,6 +564,9 @@ FlyFunction:
ld de, ENGINE_STORMBADGE
call CheckBadge
jr c, .nostormbadge
ld a, [wMapTileset]
cp TILESET_UNDERWATER
jr z, .indoors
call GetMapEnvironment
call CheckOutdoorMap
jr z, .outdoors
@ -972,12 +975,6 @@ StrengthFunction:
jr c, .Failed
jr .UseStrength
.AlreadyUsingStrength: ; unreferenced
ld hl, .AlreadyUsingStrengthText
call MenuTextboxBackup
ld a, $80
ret
.AlreadyUsingStrengthText:
text_far _AlreadyUsingStrengthText
text_end
@ -1542,6 +1539,8 @@ FishFunction:
jr z, .fail
cp PLAYER_SURF_PIKA
jr z, .fail
cp PLAYER_WATER_SPORT
jr z, .fail
call GetFacingTileCoord
call GetTileCollision
cp WATER_TILE
@ -1906,3 +1905,309 @@ CantCutScript:
CanCutText:
text_far _CanCutText
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

@ -1268,6 +1268,8 @@ LoadMapPals:
ld bc, 8 palettes
ld a, BANK(wOBPals1)
call FarCopyWRAM
farcall LoadSpecialMapObjectPalette
ld a, [wEnvironment]
cp TOWN

View file

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

View file

@ -98,6 +98,8 @@ CheckUpdatePlayerSprite:
jr c, .ok
call .CheckSurfing
jr c, .ok
call .CheckDiving
jr c, .ok
call .CheckSurfing2
jr c, .ok
ret
@ -116,6 +118,18 @@ CheckUpdatePlayerSprite:
scf
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:
ld a, [wPlayerState]
cp PLAYER_NORMAL

View file

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

View file

@ -237,6 +237,8 @@ ScriptCommandTable:
dw Script_trainerpic ; aa
dw Script_loadmonindex ; ab
dw Script_checkmaplockedmons ; ac
dw Script_divemap
dw Script_divewarp
assert_table_length NUM_EVENT_COMMANDS
StartScript:
@ -2414,3 +2416,38 @@ LoadScriptPokemonID:
jp nz, GetPokemonIDFromIndex
ld a, [wScriptVar]
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_CUT_28
db COLL_WATER
db COLL_DIVE_DOWN
db COLL_GRASS_48
db COLL_GRASS_49
db COLL_GRASS_4A

View file

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

View file

@ -141,6 +141,11 @@ PokemonActionSubmenu:
dbw MONMENUITEM_WATERFALL, MonMenu_Waterfall
dbw MONMENUITEM_ROCKSMASH, MonMenu_RockSmash
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_SWITCH, SwitchPartyMons
dbw MONMENUITEM_ITEM, GiveTakePartyMonItem
@ -794,6 +799,43 @@ MonMenu_SweetScent:
ld a, $2
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:
ld hl, wOptions
ld a, [hl]

View file

@ -38,7 +38,7 @@ _AnimateTileset::
Tileset0Anim:
TilesetJohtoModernAnim:
dw vTiles2 tile $14, AnimateWaterTile
dw NULL, WaitTileAnimation
dw vTiles2 tile $5b, AnimateDeepWaterTile
dw NULL, WaitTileAnimation
dw NULL, WaitTileAnimation
dw NULL, AnimateWaterPalette
@ -357,6 +357,23 @@ TilesetNihonMartAnim:
dw NULL, WaitTileAnimation
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:
; Reset the animation command loop.
xor a
@ -551,6 +568,32 @@ AnimateWaterTile:
.WaterTileFrames:
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:
; Save the stack pointer in bc for WriteTile to restore
ld hl, sp+0
@ -1124,3 +1167,76 @@ WhirlpoolTiles1: INCBIN "gfx/tilesets/whirlpool/1.2bpp"
WhirlpoolTiles2: INCBIN "gfx/tilesets/whirlpool/2.2bpp"
WhirlpoolTiles3: INCBIN "gfx/tilesets/whirlpool/3.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:
ld a, [wMapTileset]
cp TILESET_POKECOM_CENTER

View file

@ -151,3 +151,4 @@ ChannelerGFX:: INCBIN "gfx/sprites/channeler.2bpp"
BaldingGuyGFX:: INCBIN "gfx/sprites/balding_guy.2bpp"
GameboyGirlGFX:: INCBIN "gfx/sprites/gameboy_girl.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:
INCLUDE "gfx/tilesets/lavendercrypt_palette_map.asm"
TilesetUnderwaterPalMap:
INCLUDE "gfx/tilesets/underwater_palette_map.asm"
MapGroupPalettes: ; unreferenced
; entries correspond to MAPGROUP_* constants
rept NUM_MAP_GROUPS

View file

@ -36,15 +36,6 @@ INCBIN "data/tilesets/ice_path_metatiles.bin"
TilesetIcePathColl::
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
@ -665,4 +656,15 @@ TilesetForestKantoColl::
INCLUDE "data/tilesets/forest_kanto_collision.asm"
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, BROWN, WATER, GRAY, BROWN, BROWN, BROWN, GRAY, GRAY
tilepal 0, BROWN, BROWN, BROWN, BROWN, BROWN, BROWN, BROWN, BROWN
tilepal 0, WATER, GRAY, GRAY, GRAY, BROWN, BROWN, GRAY, GRAY
tilepal 0, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF
tilepal 0, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF
tilepal 0, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF
tilepal 0, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF, ROOF, TEXT
tilepal 0, WATER, GRAY, GRAY, WATER, BROWN, BROWN, GRAY, GRAY
rept 16
db $ff
endr
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, 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
ret
ResetDiveMap::
xor a
ld [wDiveMapGroup], a
ld [wDiveMapNumber], a
ret
FlagAction::
; Perform action b on bit de in flag array hl.

View file

@ -25,4 +25,9 @@ IsHMMove::
dw FLASH
dw WATERFALL
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

View file

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

View file

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

View file

@ -1054,6 +1054,30 @@ MACRO getname
db \1 ; memory
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
MACRO wait
db wait_command

View file

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

View file

@ -8,12 +8,12 @@ DebugRoom_MapScripts:
DebugPokemon1Script:
opentext
getmonname STRING_BUFFER_3, COATL
getmonname STRING_BUFFER_3, MACHAMP
writetext ReceivedDebugPokemonText
playsound SFX_CAUGHT_MON
waitsfx
promptbutton
givepoke COATL, 65, TM_ROCK_SMASH
givepoke MACHAMP, 65, TM_ROCK_SMASH
closetext
end
@ -211,6 +211,7 @@ DebugItemScript:
giveitem HELIX_FOSSIL, 2
giveitem OLD_AMBER, 2
giveitem COIN_CASE
giveitem HM_STRONG_ARM
givecoins 2500
closetext
end
@ -409,7 +410,7 @@ DebugRoom_MapEvents:
warp_event 23, 14, PLAYERS_HOUSE_1F, 1
warp_event 3, 20, SILENT_HILLS, 1
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 4, 9, SUMMER_BEACH_HOUSE, 1 ; left 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.
-
-/''
-
\-
- 
    *-./
\    \*-./
-/,,,-/$$$$-./
%)$$$$ #

View file

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