diff --git a/README.md b/README.md index 23a0fb1..22b63c5 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/audio.asm b/audio.asm index 43c55e0..c538c60 100644 --- a/audio.asm +++ b/audio.asm @@ -165,7 +165,8 @@ INCLUDE "audio/music/NihonTrainerBattle.asm" INCLUDE "audio/music/NorthCity.asm" INCLUDE "audio/music/Tanoby01.asm" INCLUDE "audio/music/mart.asm" - +INCLUDE "audio/music/SepiaCity.asm" +INCLUDE "audio/music/CoralCity.asm" SECTION "Sound Effects", ROMX diff --git a/audio/music/CoralCity.asm b/audio/music/CoralCity.asm new file mode 100644 index 0000000..f1d3dea --- /dev/null +++ b/audio/music/CoralCity.asm @@ -0,0 +1,665 @@ +; Coral City theme +; 4/4 rhythm, composed in D Mixolydian. +; Behold, a harbor town! The wave channel uses a sawtooth waveform, emulating an accordeon(At least I think that's the English name), which works really well in my opinion. +; The Mixolydian scale gives the theme a centered feeling, without going too deep into dramatic territory(As I tend to do with my music, but alas). +; Other than that, this theme, uhhhhh, just sounds harbor-y. I am not sure how to explain it, to be honest. It does invoke the feeling for me and I grew up close to a harbor town, so it checks out in my head! +; Composed by LuciShrimp. + +Music_CoralCity: + channel_count 4 + channel 1, Music_CoralCity_Ch1 + channel 2, Music_CoralCity_Ch2 + channel 3, Music_CoralCity_Ch3 + channel 4, Music_CoralCity_Ch4 + +Music_CoralCity_Ch1: + volume 7, 7 + note_type 12, 12, 7 + duty_cycle 3 + vibrato 13, 1, 3 + tempo 200 + octave 2 + note A_, 8 + note D_, 8 + note A_, 8 + note F#, 8 + note A_, 8 + note G_, 4 + note E_, 4 + note G_, 4 + note F#, 4 + note E_, 4 + note D_, 4 + octave 8 +.mainLoop: + octave 2 + volume_envelope 12, 7 + note A_, 8 + note D_, 4 + note E_, 2 + note F#, 1 + note G_, 1 + note A_, 8 + note F#, 4 + note E_, 2 + note F#, 1 + note G_, 1 + note A_, 8 + note G_, 4 + note C_, 1 + note D_, 1 + note E_, 1 + note F#, 1 + note G_, 4 + note F#, 4 + note E_, 4 + note D_, 4 + note D_, 12 + octave 1 + note G_, 1 + note A_, 1 + note B_, 1 + octave 2 + note C_, 1 + note D_, 4 + note E_, 4 + note D_, 4 + note C_, 2 + octave 1 + note B_, 1 + octave 2 + note C_, 1 + note D_, 12 + note A_, 1 + note G_, 1 + note F#, 1 + note E_, 1 + note E_, 4 + note C_, 4 + note D_, 4 + note G_, 1 + note F#, 1 + note E_, 1 + note D_, 1 + octave 1 + note A_, 8 + note B_, 4 + octave 2 + note D_, 4 + note C_, 8 + note D_, 4 + note F#, 4 + note E_, 8 + note A_, 1 + note G_, 1 + note F#, 1 + note E_, 1 + note G_, 1 + note F#, 1 + note E_, 1 + note D_, 1 + note E_, 8 + note D_, 4 + note D_, 1 + note E_, 1 + note F#, 1 + note G_, 1 + note D_, 12 + octave 1 + note G_, 1 + note A_, 1 + note B_, 1 + octave 2 + note C_, 1 + note D_, 4 + note E_, 4 + note D_, 4 + note C_, 2 + octave 1 + note B_, 1 + octave 2 + note C_, 1 + note D_, 12 + note A_, 1 + note G_, 1 + note F#, 1 + note E_, 1 + note E_, 4 + note C_, 4 + note D_, 4 + note G_, 1 + note F#, 1 + note E_, 1 + note D_, 1 + octave 8 + note_type 12, 15, 8 + sound_loop 0, .mainLoop + +Music_CoralCity_Ch2: + note_type 12, 12, 7 + vibrato 7, 1, 1 + duty_cycle 3 + octave 4 + note D_, 1 + rest 1 + volume_envelope 6, 7 + note D_, 1 + rest 1 + volume_envelope 3, 7 + note D_, 1 + rest 1 + volume_envelope 12, 7 + note C_, 1 + rest 1 + volume_envelope 6, 7 + note C_, 1 + rest 1 + volume_envelope 3, 7 + note C_, 1 + rest 1 + volume_envelope 12, 7 + note E_, 1 + rest 1 + volume_envelope 6, 7 + note E_, 1 + rest 1 + volume_envelope 12, 7 + note D_, 1 + rest 1 + volume_envelope 6, 7 + note D_, 1 + rest 1 + volume_envelope 3, 7 + note D_, 1 + rest 1 + volume_envelope 12, 7 + note C_, 1 + rest 1 + volume_envelope 6, 7 + note C_, 1 + rest 1 + volume_envelope 3, 7 + note C_, 1 + rest 1 + volume_envelope 12, 7 + note G_, 1 + rest 1 + volume_envelope 6, 7 + note G_, 1 + rest 1 + volume_envelope 12, 7 + note F#, 1 + rest 1 + volume_envelope 6, 7 + note F#, 1 + rest 1 + volume_envelope 3, 7 + note F#, 1 + rest 1 + volume_envelope 12, 7 + note D_, 1 + rest 1 + volume_envelope 6, 7 + note D_, 1 + rest 1 + volume_envelope 3, 7 + note D_, 1 + rest 1 + volume_envelope 12, 7 + note F#, 1 + rest 1 + volume_envelope 6, 7 + note F#, 1 + rest 1 + volume_envelope 12, 7 + note E_, 1 + rest 1 + volume_envelope 6, 7 + note E_, 1 + rest 1 + volume_envelope 3, 7 + note E_, 1 + rest 1 + volume_envelope 12, 7 + note G_, 1 + rest 1 + volume_envelope 6, 7 + note G_, 1 + rest 1 + volume_envelope 3, 7 + note G_, 1 + rest 1 + volume_envelope 12, 7 + note A_, 1 + rest 1 + volume_envelope 6, 7 + note A_, 1 + rest 1 + octave 8 +.mainLoop: + octave 4 + volume_envelope 12, 7 + note D_, 6 + octave 3 + note B_, 1 + octave 4 + note C_, 1 + note D_, 4 + note F#, 1 + note E_, 1 + note D_, 2 + note C_, 8 + octave 3 + note A_, 2 + note B_, 2 + octave 4 + note C_, 2 + note D_, 1 + note E_, 1 + note F#, 14 + note E_, 2 + note F#, 8 + note G_, 4 + note F#, 4 + note E_, 6 + note D_, 2 + note E_, 8 + note F#, 14 + note E_, 2 + note F#, 8 + note B_, 1 + note A_, 1 + note G_, 1 + note F#, 1 + note G_, 1 + note F#, 1 + note E_, 1 + note D_, 1 + note E_, 8 + note F#, 4 + note E_, 4 + note G_, 8 + note D_, 2 + note E_, 2 + note F#, 1 + note G_, 1 + note A_, 1 + note B_, 1 + octave 5 + note C_, 8 + octave 4 + note B_, 2 + note A_, 2 + note G_, 1 + note A_, 1 + note G_, 1 + note F#, 1 + note E_, 8 + note D_, 4 + note D_, 1 + note E_, 1 + note F#, 1 + note G_, 1 + note A_, 4 + note B_, 4 + note F#, 2 + note A_, 2 + note F#, 1 + note E_, 1 + note D_, 1 + note C#, 1 + note D_, 8 + note F#, 4 + note E_, 2 + note D_, 1 + note C#, 1 + note D_, 8 + octave 3 + note B_, 1 + octave 4 + note C_, 1 + note D_, 2 + note E_, 4 + note D_, 8 + note_type 8, 12, 7 + note C_, 2 + note D_, 2 + note E_, 2 + note F#, 2 + note G_, 2 + note E_, 2 + note_type 12, 12, 7 + note D_, 8 + note C_, 4 + octave 3 + note B_, 1 + note A_, 1 + note B_, 1 + octave 4 + note C_, 1 + octave 8 + note_type 12, 15, 8 + sound_loop 0, .mainLoop + +Music_CoralCity_Ch3: + note_type 12, 1, 0 + octave 3 + sound_call .sub1 + volume_envelope 1, 4 + note B_, 4 + note A_, 4 + sound_call .sub1 + note_type 12, 1, 4 + octave 3 + note B_, 4 + octave 4 + note D_, 4 + octave 8 +.mainLoop: + octave 3 + sound_call .sub2 + volume_envelope 1, 4 + note B_, 4 + note A_, 4 + sound_call .sub2 + note_type 12, 1, 4 + octave 3 + note B_, 4 + octave 4 + note D_, 4 + octave 3 + sound_call .sub3 + octave 4 + volume_envelope 1, 4 + note D_, 4 + note C_, 4 + octave 3 + sound_call .sub3 + note_type 12, 1, 4 + octave 4 + note D_, 4 + note F#, 4 + octave 3 + sound_call .sub4 + octave 4 + volume_envelope 1, 4 + note E_, 4 + note D_, 4 + octave 3 + sound_call .sub4 + note_type 12, 1, 4 + octave 4 + note E_, 4 + note G_, 4 + octave 3 + sound_call .sub5 + octave 4 + volume_envelope 1, 4 + note D_, 4 + note C_, 4 + octave 3 + sound_call .sub5 + note_type 12, 1, 4 + octave 3 + note B_, 4 + note A_, 2 + note E_, 2 + octave 8 + note_type 12, 1, 0 + sound_loop 0, .mainLoop + +.sub1: + volume_envelope 1, 4 + note D_, 2 + note G_, 2 + note E_, 2 + octave 2 + note B_, 1 + octave 3 + note C_, 1 + note G_, 2 + note F#, 2 + note E_, 4 + note D_, 2 + note G_, 2 + note E_, 2 + octave 2 + note B_, 1 + octave 3 + note C_, 1 + sound_ret + +.sub2: + volume_envelope 1, 4 + note D_, 2 + note G_, 1 + note F#, 1 + note E_, 2 + octave 2 + note B_, 1 + octave 3 + note C_, 1 + note G_, 2 + note F#, 2 + note E_, 2 + octave 2 + note B_, 1 + octave 3 + note C_, 1 + note D_, 2 + note G_, 1 + note F#, 1 + note E_, 2 + octave 2 + note B_, 1 + octave 3 + note C_, 1 + sound_ret + +.sub3: + volume_envelope 1, 4 + note F#, 2 + note B_, 1 + note A_, 1 + note G_, 2 + note D_, 1 + note E_, 1 + note B_, 2 + note A_, 2 + note G_, 2 + note D_, 1 + note E_, 1 + note F#, 2 + note B_, 1 + note A_, 1 + note G_, 2 + note D_, 1 + note E_, 1 + sound_ret + +.sub4: + volume_envelope 1, 4 + note G_, 2 + octave 4 + note C_, 1 + octave 3 + note B_, 1 + note A_, 2 + note E_, 1 + note F#, 1 + octave 4 + note C_, 2 + octave 3 + note B_, 2 + note A_, 2 + note E_, 1 + note F#, 1 + note G_, 2 + octave 4 + note C_, 1 + octave 3 + note B_, 1 + note A_, 2 + note E_, 1 + note F#, 1 + sound_ret + +.sub5: + volume_envelope 1, 4 + note F#, 2 + note B_, 1 + note A_, 1 + note G_, 2 + note D_, 1 + note E_, 1 + note B_, 2 + note A_, 2 + note G_, 2 + note D_, 1 + note E_, 1 + note F#, 2 + note B_, 1 + note A_, 1 + note G_, 2 + note D_, 1 + note E_, 1 + sound_ret + +Music_CoralCity_Ch4: + toggle_noise 0 + drum_speed 12 + octave 6 + toggle_noise + toggle_noise 3 + drum_note 1, 4 + drum_note 1, 4 + drum_note 1, 3 + octave 5 + drum_note 11, 1 + octave 6 + drum_note 1, 1 + drum_note 1, 3 + drum_note 1, 4 + drum_note 1, 4 + drum_note 1, 3 + octave 5 + drum_note 11, 1 + octave 6 + drum_note 1, 2 + drum_note 1, 1 + drum_note 1, 1 + drum_note 1, 1 + rest 1 + drum_note 1, 1 + rest 1 + drum_note 1, 1 + rest 1 + octave 5 + drum_note 11, 1 + rest 1 + drum_note 11, 1 + rest 1 + drum_note 11, 1 + rest 1 + octave 6 + drum_note 1, 1 + rest 1 + drum_note 1, 1 + rest 1 + drum_note 1, 1 + rest 1 + drum_note 1, 1 + drum_note 1, 1 + drum_note 1, 1 + rest 1 + drum_note 1, 1 + drum_note 1, 1 + drum_note 1, 1 + rest 1 + octave 5 + drum_note 11, 1 + drum_note 11, 1 + octave 6 + drum_note 1, 1 + drum_note 1, 1 + drum_note 1, 1 + drum_note 1, 1 + octave 8 +.mainLoop: + octave 5 +.loop1: + drum_note 12, 2 + octave 6 + drum_note 1, 2 + drum_note 1, 2 + octave 5 + drum_note 11, 2 + octave 6 + drum_note 1, 2 + drum_note 1, 2 + octave 5 + drum_note 11, 2 + octave 6 + drum_note 1, 1 + drum_note 1, 1 + octave 5 + drum_note 11, 1 + drum_note 11, 1 + octave 6 + drum_note 1, 2 + drum_note 1, 2 + octave 5 + drum_note 11, 1 + drum_note 11, 1 + octave 6 + drum_note 1, 2 + drum_note 1, 1 + drum_note 1, 1 + octave 5 + drum_note 11, 1 + drum_note 11, 1 + octave 6 + drum_note 1, 1 + drum_speed 6 + drum_note 1, 2 + octave 5 + drum_speed 12 + drum_note 12, 2 + octave 6 + drum_note 1, 1 + drum_note 2, 1 + octave 5 + drum_note 11, 2 + octave 6 + drum_note 1, 1 + drum_note 2, 1 + octave 5 + drum_note 11, 2 + octave 6 + drum_note 1, 1 + drum_note 2, 1 + octave 5 + drum_note 12, 2 + octave 6 + drum_note 1, 1 + drum_note 2, 1 + drum_note 1, 2 + octave 5 + drum_note 12, 2 + octave 6 + drum_note 1, 2 + octave 5 + drum_note 12, 2 + octave 6 + drum_note 1, 2 + octave 5 + drum_note 12, 2 + octave 6 + drum_note 1, 1 + drum_note 1, 1 + drum_note 1, 1 + drum_note 1, 1 + octave 5 + sound_loop 4, .loop1 + octave 8 + sound_loop 0, .mainLoop diff --git a/audio/music/SepiaCity.asm b/audio/music/SepiaCity.asm new file mode 100644 index 0000000..4e6b22e --- /dev/null +++ b/audio/music/SepiaCity.asm @@ -0,0 +1,440 @@ +; Sepia City theme +; 4/4 rhythm, composed in A Lydian. +; This theme aims to invoke a similar vibe to the Peaceful route theme, utilizing the same mode(But a different key) and a bit more tempo for a more "towny" sound. +; Getting this one done took me quite a while. I went through countless ideas and temporarily burnt myself out as I did not want this theme to sound too similar to the one on the route next to the city. +; This took me quite a few attempts, but here we are! +; Composed by LuciShrimp. + +Music_SepiaCity: + channel_count 4 + channel 1, Music_SepiaCity_Ch1 + channel 2, Music_SepiaCity_Ch2 + channel 3, Music_SepiaCity_Ch3 + channel 4, Music_SepiaCity_Ch4 + +Music_SepiaCity_Ch1: + volume 7, 7 + note_type 12, 8, 7 + vibrato 24, 2, 4 + tempo 289 + duty_cycle 3 + octave 1 + note A_, 4 + note F#, 4 + octave 2 + note C#, 4 + octave 1 + note B_, 1 + note A_, 1 + note G#, 1 + note F#, 1 + octave 8 +.mainLoop: + octave 1 + volume_envelope 7, 7 + vibrato 24, 2, 4 + duty_cycle 1 + tempo 289 + note A_, 6 + note B_, 1 + octave 2 + note C#, 1 + note F#, 8 + octave 1 + note A_, 6 + note B_, 1 + octave 2 + note C#, 1 + note F#, 4 + note E_, 4 + note C#, 6 + octave 1 + note B_, 6 + note A_, 4 + octave 2 + note C#, 6 + note E_, 1 + note F#, 1 + note G#, 2 + note A_, 2 + note D#, 2 + note E_, 2 + octave 1 + note A_, 6 + note B_, 1 + octave 2 + note C#, 1 + note F#, 4 + note E_, 4 + octave 1 + note A_, 6 + note B_, 1 + octave 2 + note C#, 1 + note F#, 2 + note G#, 2 + note E_, 2 + note D#, 2 + note C#, 6 + note E_, 1 + note F#, 1 + note G#, 8 + note C#, 6 + note E_, 1 + note F#, 1 + note G#, 2 + note A_, 2 + note G#, 2 + note F#, 2 + sound_call .sub1 + octave 2 + volume_envelope 7, 7 + vibrato 24, 2, 4 + duty_cycle 1 + tempo 289 + note E_, 4 + note C#, 2 + note D#, 1 + note E_, 1 + note F#, 8 + sound_call .sub1 + note_type 12, 7, 7 + octave 2 + vibrato 24, 2, 4 + duty_cycle 1 + tempo 289 + note E_, 4 + note C#, 2 + note D#, 1 + note E_, 1 + note F#, 3 + note D#, 1 + octave 1 + note B_, 2 + note G#, 2 + octave 8 + note_type 12, 15, 8 + sound_loop 0, .mainLoop + +.sub1: + octave 2 + volume_envelope 7, 7 + vibrato 24, 2, 4 + duty_cycle 1 + tempo 289 + note E_, 4 + note C#, 2 + note E_, 1 + note F#, 1 + note A_, 4 + note G#, 4 + octave 3 + sound_ret + +Music_SepiaCity_Ch2: + note_type 12, 10, 6 + vibrato 20, 2, 4 + duty_cycle 3 + octave 3 + note C#, 4 + octave 2 + note A_, 4 + note B_, 4 + note G#, 1 + note F#, 1 + note E_, 1 + note D#, 1 + octave 8 +.mainLoop: + volume_envelope 10, 7 + vibrato 20, 2, 4 + duty_cycle 1 + octave 2 + note E_, 6 + note F#, 2 + note G#, 4 + note C#, 2 + note E_, 1 + note F#, 1 + note A_, 2 + octave 3 + note F#, 1 + note E_, 1 + note D#, 1 + note C#, 1 + octave 2 + note B_, 2 + octave 3 + note C#, 4 + octave 2 + note A_, 4 + note G#, 2 + note E_, 1 + note F#, 1 + note G#, 1 + note A_, 1 + note F#, 6 + note B_, 4 + note E_, 1 + note D#, 1 + octave 1 + note B_, 1 + octave 2 + note D#, 1 + note E_, 2 + note G#, 1 + note B_, 1 + note E_, 2 + note D#, 1 + note F#, 1 + note G#, 4 + note E_, 6 + note D#, 6 + note C#, 2 + note E_, 1 + note F#, 1 + note A_, 2 + note G#, 1 + note A_, 1 + note B_, 1 + octave 3 + note C#, 1 + octave 2 + note B_, 4 + octave 3 + note E_, 1 + octave 2 + note B_, 1 + octave 3 + note C#, 1 + octave 2 + note F#, 1 + note A_, 1 + note F#, 1 + note G#, 6 + note F#, 6 + note B_, 4 + note G#, 6 + note F#, 6 + note G#, 4 + note B_, 4 + note G#, 1 + note A_, 1 + note B_, 6 + note A_, 1 + note G#, 1 + note F#, 2 + note G#, 4 + note A_, 1 + note B_, 1 + octave 3 + note C#, 6 + octave 2 + note B_, 2 + note A_, 2 + note G#, 4 + note F#, 1 + note A_, 1 + note B_, 6 + octave 3 + note C#, 1 + octave 2 + note B_, 1 + octave 3 + note C#, 1 + note D#, 1 + note E_, 4 + octave 2 + note B_, 2 + octave 3 + note C#, 4 + octave 2 + note B_, 2 + note A_, 1 + note F#, 1 + note E_, 1 + note D#, 1 + octave 8 + note_type 12, 15, 8 + sound_loop 0, .mainLoop + +Music_SepiaCity_Ch3: + note_type 12, 1, 1 + vibrato 22, 2, 4 + rest 16 + octave 8 +.mainLoop: + octave 4 + sound_call .sub1 + vibrato 22, 2, 4 + volume_envelope 1, 1 + octave 5 + note G#, 2 + note F#, 2 + note E_, 2 + note D#, 2 + octave 4 + note B_, 6 + octave 5 + note D#, 1 + note C#, 1 + octave 4 + note B_, 6 + octave 5 + note C#, 1 + octave 4 + note B_, 1 + note A_, 6 + note G#, 1 + note B_, 1 + octave 5 + note C#, 2 + note D#, 1 + note C#, 1 + note D#, 2 + octave 4 + note B_, 1 + note G#, 1 + sound_call .sub1 + note_type 12, 1, 1 + vibrato 22, 2, 4 + octave 5 + note G#, 1 + note E_, 1 + note F#, 1 + note D#, 1 + note E_, 1 + note C#, 1 + note D#, 1 + octave 4 + note B_, 1 + octave 5 + note E_, 6 + note D#, 1 + note C#, 1 + octave 4 + note B_, 6 + octave 5 + note C#, 1 + octave 4 + note B_, 1 + octave 5 + note D#, 6 + octave 4 + note G#, 1 + note B_, 1 + octave 5 + note C#, 2 + note D#, 2 + note C#, 2 + octave 4 + note A_, 2 + note B_, 6 + octave 5 + note E_, 1 + note D#, 1 + note C#, 4 + octave 4 + note B_, 2 + octave 5 + note C#, 2 + note D#, 4 + note C#, 2 + note D#, 2 + note E_, 4 + note D#, 1 + note C#, 1 + octave 4 + note B_, 1 + note A_, 1 + note B_, 4 + note A_, 4 + octave 5 + note C#, 4 + octave 4 + note B_, 4 + note G#, 8 + note A_, 4 + note G#, 4 + octave 8 + sound_loop 0, .mainLoop + +.sub1: + vibrato 22, 2, 4 + volume_envelope 1, 1 + octave 4 + note A_, 2 + note B_, 2 + note G#, 2 + note A_, 2 + octave 5 + note C#, 1 + octave 4 + note B_, 3 + octave 5 + note E_, 1 + note D#, 3 + note F#, 8 + octave 4 + sound_ret + +Music_SepiaCity_Ch4: + toggle_noise 0 + drum_speed 12 + octave 6 + toggle_noise + toggle_noise 3 + drum_note 9, 1 + drum_note 2, 1 + drum_note 2, 1 + drum_note 2, 1 + drum_note 9, 1 + drum_note 2, 1 + drum_note 2, 1 + drum_note 3, 1 + drum_note 9, 1 + drum_note 2, 1 + drum_note 9, 1 + drum_note 1, 1 + drum_note 9, 1 + drum_note 9, 1 + drum_note 9, 1 + drum_note 9, 1 + octave 8 +.mainLoop: + octave 6 + toggle_noise + toggle_noise 3 +.loop1: + drum_note 9, 2 + drum_note 2, 1 + drum_note 9, 1 + drum_note 9, 2 + drum_note 3, 2 + drum_note 9, 2 + drum_note 2, 1 + drum_note 9, 1 + drum_note 9, 1 + drum_note 2, 1 + drum_note 2, 1 + drum_note 3, 1 + sound_loop 8, .loop1 +.loop2: + drum_note 9, 1 + drum_note 2, 1 + drum_note 2, 1 + drum_note 9, 1 + drum_note 9, 2 + drum_note 3, 2 + drum_note 9, 1 + drum_note 2, 1 + drum_note 2, 1 + drum_note 9, 1 + drum_note 9, 1 + drum_note 2, 1 + drum_note 2, 1 + drum_note 3, 1 + sound_loop 4, .loop2 + drum_speed 12 + octave 8 + sound_loop 0, .mainLoop diff --git a/audio/music_pointers.asm b/audio/music_pointers.asm index 3a7adf0..f3e6c02 100644 --- a/audio/music_pointers.asm +++ b/audio/music_pointers.asm @@ -120,4 +120,6 @@ Music: dba Music_NorthCity dba Music_Tanoby01 dba Music_Mart + dba Music_CoralCity + dba Music_SepiaCity assert_table_length NUM_MUSIC_SONGS diff --git a/constants/battle_anim_constants.asm b/constants/battle_anim_constants.asm index 518eb2c..c0194d0 100644 --- a/constants/battle_anim_constants.asm +++ b/constants/battle_anim_constants.asm @@ -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) diff --git a/constants/battle_constants.asm b/constants/battle_constants.asm index 621cde1..9bff323 100644 --- a/constants/battle_constants.asm +++ b/constants/battle_constants.asm @@ -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 diff --git a/constants/collision_constants.asm b/constants/collision_constants.asm index c683ff6..5bbdef0 100644 --- a/constants/collision_constants.asm +++ b/constants/collision_constants.asm @@ -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 diff --git a/constants/item_constants.asm b/constants/item_constants.asm index 5d026d2..8adc55c 100644 --- a/constants/item_constants.asm +++ b/constants/item_constants.asm @@ -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 diff --git a/constants/menu_constants.asm b/constants/menu_constants.asm index 63b0f5d..45d3738 100644 --- a/constants/menu_constants.asm +++ b/constants/menu_constants.asm @@ -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 diff --git a/constants/move_effect_constants.asm b/constants/move_effect_constants.asm index a4dfd2a..f8e7921 100644 --- a/constants/move_effect_constants.asm +++ b/constants/move_effect_constants.asm @@ -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 diff --git a/constants/music_constants.asm b/constants/music_constants.asm index 58890a5..0b391a1 100644 --- a/constants/music_constants.asm +++ b/constants/music_constants.asm @@ -118,6 +118,8 @@ const MUSIC_NORTHCITY ; 71 const MUSIC_TANOBY01 ; 72 const MUSIC_MART ; 74 + const MUSIC_CORALCITY ; 75 + const MUSIC_SEPIACITY ; 76 DEF NUM_MUSIC_SONGS EQU const_value ; GetMapMusic picks music for this value (see home/map.asm) diff --git a/constants/sprite_constants.asm b/constants/sprite_constants.asm index d851509..e2f5dbb 100644 --- a/constants/sprite_constants.asm +++ b/constants/sprite_constants.asm @@ -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) diff --git a/constants/wram_constants.asm b/constants/wram_constants.asm index 6437d17..c5626fd 100644 --- a/constants/wram_constants.asm +++ b/constants/wram_constants.asm @@ -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 diff --git a/data/battle/effect_command_pointers.asm b/data/battle/effect_command_pointers.asm index 53ea3fd..63d611c 100644 --- a/data/battle/effect_command_pointers.asm +++ b/data/battle/effect_command_pointers.asm @@ -181,4 +181,5 @@ BattleCommandPointers: dw BattleCommand_StartLoop dw BattleCommand_Curl dw BattleCommand_CoinHurlPower + dw BattleCommand_DoubleUnderwaterDamage assert_table_length NUM_EFFECT_COMMANDS diff --git a/data/battle_anims/objects.asm b/data/battle_anims/objects.asm index e64f596..3040387 100644 --- a/data/battle_anims/objects.asm +++ b/data/battle_anims/objects.asm @@ -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 diff --git a/data/collision/collision_permissions.asm b/data/collision/collision_permissions.asm index 645ab3f..b726697 100644 --- a/data/collision/collision_permissions.asm +++ b/data/collision/collision_permissions.asm @@ -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 diff --git a/data/items/attributes.asm b/data/items/attributes.asm index bc41826..5a2c59b 100644 --- a/data/items/attributes.asm +++ b/data/items/attributes.asm @@ -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 diff --git a/data/items/names.asm b/data/items/names.asm index 45c76b9..aaaecf3 100644 --- a/data/items/names.asm +++ b/data/items/names.asm @@ -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 diff --git a/data/maps/maps.asm b/data/maps/maps.asm index 6f6d6e4..6a0b4c2 100644 --- a/data/maps/maps.asm +++ b/data/maps/maps.asm @@ -715,7 +715,7 @@ MapGroup_SilentHills: MapGroup_OldCity: table_width MAP_LENGTH, MapGroup_OldCity - map OldCity, TILESET_NIHON_OLD, TOWN, LANDMARK_OLD_CITY, MUSIC_VIOLET_CITY, TRUE, PALETTE_AUTO, FISHGROUP_POND + map OldCity, TILESET_NIHON_OLD, TOWN, LANDMARK_OLD_CITY, MUSIC_SEPIACITY, TRUE, PALETTE_AUTO, FISHGROUP_POND map OldCityPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_OLD_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE map OldMart, TILESET_NIHON_MART, INDOOR, LANDMARK_OLD_CITY, MUSIC_MART, FALSE, PALETTE_DAY, FISHGROUP_NONE map HoneyGrandmasHouse, TILESET_TRADITIONAL_HOUSE, INDOOR, LANDMARK_OLD_CITY, MUSIC_VIOLET_CITY, FALSE, PALETTE_DAY, FISHGROUP_NONE @@ -742,7 +742,7 @@ MapGroup_SavoyCity: MapGroup_CoralCity: table_width MAP_LENGTH, MapGroup_CoralCity - map CoralCity, TILESET_NIHON_HIGHTECH, TOWN, LANDMARK_CORAL_CITY, MUSIC_VERMILION_CITY, FALSE, PALETTE_AUTO, FISHGROUP_SHORE + map CoralCity, TILESET_NIHON_HIGHTECH, TOWN, LANDMARK_CORAL_CITY, MUSIC_CORALCITY, FALSE, PALETTE_AUTO, FISHGROUP_SHORE map CoralCityPokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_CORAL_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_NONE map CoralMart, TILESET_NIHON_MART, INDOOR, LANDMARK_CORAL_CITY, MUSIC_MART, FALSE, PALETTE_DAY, FISHGROUP_NONE map Route51, TILESET_NIHON_HIGHTECH, ROUTE, LANDMARK_ROUTE_51, MUSIC_LAKE_OF_RAGE, FALSE, PALETTE_AUTO, FISHGROUP_SHORE diff --git a/data/mon_menu.asm b/data/mon_menu.asm index dec1293..702fa4a 100644 --- a/data/mon_menu.asm +++ b/data/mon_menu.asm @@ -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 diff --git a/data/moves/animations.asm b/data/moves/animations.asm index bf45c11..f3f172c 100644 --- a/data/moves/animations.asm +++ b/data/moves/animations.asm @@ -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 diff --git a/data/moves/descriptions.asm b/data/moves/descriptions.asm index 8b43d4e..e647828 100644 --- a/data/moves/descriptions.asm +++ b/data/moves/descriptions.asm @@ -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" diff --git a/data/moves/effects.asm b/data/moves/effects.asm index 57a3b59..26c9e00 100644 --- a/data/moves/effects.asm +++ b/data/moves/effects.asm @@ -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 diff --git a/data/moves/effects_pointers.asm b/data/moves/effects_pointers.asm index 7661887..6248f73 100644 --- a/data/moves/effects_pointers.asm +++ b/data/moves/effects_pointers.asm @@ -159,4 +159,7 @@ MoveEffectsPointers: dw Fly dw DefenseCurl dw CoinHurl + dw Surf + dw Whirlpool + dw Bounce assert_table_length NUM_MOVE_EFFECTS diff --git a/data/moves/moves.asm b/data/moves/moves.asm index 9d26639..bd26838 100644 --- a/data/moves/moves.asm +++ b/data/moves/moves.asm @@ -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 diff --git a/data/sprites/player_sprites.asm b/data/sprites/player_sprites.asm index 3555e33..4bab7f1 100644 --- a/data/sprites/player_sprites.asm +++ b/data/sprites/player_sprites.asm @@ -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 \ No newline at end of file diff --git a/data/sprites/sprites.asm b/data/sprites/sprites.asm index c5c46c1..47b2197 100644 --- a/data/sprites/sprites.asm +++ b/data/sprites/sprites.asm @@ -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 diff --git a/data/text/common_2.asm b/data/text/common_2.asm index b0fafff..0ad2fba 100644 --- a/data/text/common_2.asm +++ b/data/text/common_2.asm @@ -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 diff --git a/data/tilesets/cave_attributes.bin b/data/tilesets/cave_attributes.bin index 5e327a8..20ca695 100644 Binary files a/data/tilesets/cave_attributes.bin and b/data/tilesets/cave_attributes.bin differ diff --git a/data/tilesets/cave_collision.asm b/data/tilesets/cave_collision.asm index 0ef5556..5120fd7 100644 --- a/data/tilesets/cave_collision.asm +++ b/data/tilesets/cave_collision.asm @@ -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 diff --git a/data/tilesets/cave_metatiles.bin b/data/tilesets/cave_metatiles.bin index d4996cd..1bcf8a3 100644 Binary files a/data/tilesets/cave_metatiles.bin and b/data/tilesets/cave_metatiles.bin differ diff --git a/data/tilesets/dark_cave_attributes.bin b/data/tilesets/dark_cave_attributes.bin index 0c79ad3..6cd8eee 100644 Binary files a/data/tilesets/dark_cave_attributes.bin and b/data/tilesets/dark_cave_attributes.bin differ diff --git a/data/tilesets/dark_cave_collision.asm b/data/tilesets/dark_cave_collision.asm index 18f9b80..ccbf13b 100644 --- a/data/tilesets/dark_cave_collision.asm +++ b/data/tilesets/dark_cave_collision.asm @@ -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 diff --git a/data/tilesets/dark_cave_metatiles.bin b/data/tilesets/dark_cave_metatiles.bin index a41b5b0..8033d27 100644 --- a/data/tilesets/dark_cave_metatiles.bin +++ b/data/tilesets/dark_cave_metatiles.bin @@ -3,4 +3,4 @@ &  &&67&&67&&&&$$$$*+:;$$$$"#23     ()89       !01     $$&&&&    @@@@@@@@@@@@@@@@%&&&%&&&%&&&%&&&&&&&&&&&&&&&&&&&&&&'&&&'&&&'&&&'67&&67&&$$%&&'%' &&&&&&&&  & 67'67&'&&&&&&&&&&&&%&&&&&&&&&&'&&&  -&&& \ No newline at end of file +&&&AB&&QR&&&&AB&&QR \ No newline at end of file diff --git a/data/tilesets/kanto_attributes.bin b/data/tilesets/kanto_attributes.bin index 3d97227..2fcd8af 100644 Binary files a/data/tilesets/kanto_attributes.bin and b/data/tilesets/kanto_attributes.bin differ diff --git a/data/tilesets/kanto_collision.asm b/data/tilesets/kanto_collision.asm index 34271e5..898894b 100644 --- a/data/tilesets/kanto_collision.asm +++ b/data/tilesets/kanto_collision.asm @@ -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 diff --git a/data/tilesets/kanto_metatiles.bin b/data/tilesets/kanto_metatiles.bin index b75222e..1e6ef19 100644 Binary files a/data/tilesets/kanto_metatiles.bin and b/data/tilesets/kanto_metatiles.bin differ diff --git a/engine/battle/ai/scoring.asm b/engine/battle/ai/scoring.asm index 024bb72..18faae1 100644 --- a/engine/battle/ai/scoring.asm +++ b/engine/battle/ai/scoring.asm @@ -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 diff --git a/engine/battle/core.asm b/engine/battle/core.asm index 8d075fe..21be413 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -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 diff --git a/engine/battle/effect_commands.asm b/engine/battle/effect_commands.asm index 9d228ec..cba500f 100644 --- a/engine/battle/effect_commands.asm +++ b/engine/battle/effect_commands.asm @@ -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" diff --git a/engine/battle_anims/bg_effects.asm b/engine/battle_anims/bg_effects.asm index 14fe693..9c7a3d3 100644 --- a/engine/battle_anims/bg_effects.asm +++ b/engine/battle_anims/bg_effects.asm @@ -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: diff --git a/engine/events/overworld.asm b/engine/events/overworld.asm index 8dfab30..de6bfb2 100644 --- a/engine/events/overworld.asm +++ b/engine/events/overworld.asm @@ -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 "@" diff --git a/engine/gfx/color.asm b/engine/gfx/color.asm index 1104825..e2864f7 100644 --- a/engine/gfx/color.asm +++ b/engine/gfx/color.asm @@ -1268,6 +1268,8 @@ LoadMapPals: ld bc, 8 palettes ld a, BANK(wOBPals1) call FarCopyWRAM + + farcall LoadSpecialMapObjectPalette ld a, [wEnvironment] cp TOWN diff --git a/engine/overworld/events.asm b/engine/overworld/events.asm index bd928bd..f5558a5 100644 --- a/engine/overworld/events.asm +++ b/engine/overworld/events.asm @@ -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 diff --git a/engine/overworld/map_setup.asm b/engine/overworld/map_setup.asm index c55f308..6f126a6 100644 --- a/engine/overworld/map_setup.asm +++ b/engine/overworld/map_setup.asm @@ -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 diff --git a/engine/overworld/player_movement.asm b/engine/overworld/player_movement.asm index c29647e..510201d 100644 --- a/engine/overworld/player_movement.asm +++ b/engine/overworld/player_movement.asm @@ -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 diff --git a/engine/overworld/scripting.asm b/engine/overworld/scripting.asm index 35e9997..e810c47 100644 --- a/engine/overworld/scripting.asm +++ b/engine/overworld/scripting.asm @@ -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 diff --git a/engine/overworld/tile_events.asm b/engine/overworld/tile_events.asm index 36b4944..918adb2 100644 --- a/engine/overworld/tile_events.asm +++ b/engine/overworld/tile_events.asm @@ -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 diff --git a/engine/overworld/warp_connection.asm b/engine/overworld/warp_connection.asm index c77ed1c..d672f59 100644 --- a/engine/overworld/warp_connection.asm +++ b/engine/overworld/warp_connection.asm @@ -4,6 +4,7 @@ HandleNewMap: call ResetFlashIfOutOfCave call GetCurrentMapSceneID call ResetBikeFlags + call ResetDiveMap call ResetMapLockedIDs ld a, MAPCALLBACK_NEWMAP call RunMapCallback diff --git a/engine/pokemon/mon_menu.asm b/engine/pokemon/mon_menu.asm index 84c6926..aae4026 100644 --- a/engine/pokemon/mon_menu.asm +++ b/engine/pokemon/mon_menu.asm @@ -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] diff --git a/engine/tilesets/tileset_anims.asm b/engine/tilesets/tileset_anims.asm index 2965b44..296eb45 100644 --- a/engine/tilesets/tileset_anims.asm +++ b/engine/tilesets/tileset_anims.asm @@ -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" diff --git a/engine/tilesets/tileset_palettes.asm b/engine/tilesets/tileset_palettes.asm index eec03da..0692a5f 100644 --- a/engine/tilesets/tileset_palettes.asm +++ b/engine/tilesets/tileset_palettes.asm @@ -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 diff --git a/gfx/sprites.asm b/gfx/sprites.asm index 2a19773..81aafbb 100644 --- a/gfx/sprites.asm +++ b/gfx/sprites.asm @@ -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" diff --git a/gfx/sprites/dive.png b/gfx/sprites/dive.png new file mode 100644 index 0000000..06ef575 Binary files /dev/null and b/gfx/sprites/dive.png differ diff --git a/gfx/tileset_palette_maps.asm b/gfx/tileset_palette_maps.asm index 5bc8581..1264e08 100644 --- a/gfx/tileset_palette_maps.asm +++ b/gfx/tileset_palette_maps.asm @@ -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 diff --git a/gfx/tilesets.asm b/gfx/tilesets.asm index 34e4a56..9750cc5 100644 --- a/gfx/tilesets.asm +++ b/gfx/tilesets.asm @@ -665,4 +665,15 @@ TilesetForestKantoColl:: INCLUDE "data/tilesets/forest_kanto_collision.asm" TilesetForestKantoAttr:: -INCBIN "data/tilesets/forest_kanto_attributes.bin" \ No newline at end of file +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" diff --git a/gfx/tilesets/bubble/1.png b/gfx/tilesets/bubble/1.png new file mode 100644 index 0000000..ffb5caa Binary files /dev/null and b/gfx/tilesets/bubble/1.png differ diff --git a/gfx/tilesets/bubble/2.png b/gfx/tilesets/bubble/2.png new file mode 100644 index 0000000..4e42dc9 Binary files /dev/null and b/gfx/tilesets/bubble/2.png differ diff --git a/gfx/tilesets/bubble/3.png b/gfx/tilesets/bubble/3.png new file mode 100644 index 0000000..121b9db Binary files /dev/null and b/gfx/tilesets/bubble/3.png differ diff --git a/gfx/tilesets/bubble/4.png b/gfx/tilesets/bubble/4.png new file mode 100644 index 0000000..0720f8a Binary files /dev/null and b/gfx/tilesets/bubble/4.png differ diff --git a/gfx/tilesets/bubble/5.png b/gfx/tilesets/bubble/5.png new file mode 100644 index 0000000..545fa41 Binary files /dev/null and b/gfx/tilesets/bubble/5.png differ diff --git a/gfx/tilesets/cave.png b/gfx/tilesets/cave.png index 7e0f942..1d805ea 100644 Binary files a/gfx/tilesets/cave.png and b/gfx/tilesets/cave.png differ diff --git a/gfx/tilesets/dark_cave.png b/gfx/tilesets/dark_cave.png index 1d0a91e..d5d954a 100644 Binary files a/gfx/tilesets/dark_cave.png and b/gfx/tilesets/dark_cave.png differ diff --git a/gfx/tilesets/ice_path.png b/gfx/tilesets/ice_path.png index c410f27..2c32c1d 100644 Binary files a/gfx/tilesets/ice_path.png and b/gfx/tilesets/ice_path.png differ diff --git a/gfx/tilesets/johto.png b/gfx/tilesets/johto.png index 9cb225b..b40ec5e 100644 Binary files a/gfx/tilesets/johto.png and b/gfx/tilesets/johto.png differ diff --git a/gfx/tilesets/johto_modern.png b/gfx/tilesets/johto_modern.png index ab4bcfb..4d1d364 100644 Binary files a/gfx/tilesets/johto_modern.png and b/gfx/tilesets/johto_modern.png differ diff --git a/gfx/tilesets/johto_palette_map.asm b/gfx/tilesets/johto_palette_map.asm index 7c52840..074a68a 100644 --- a/gfx/tilesets/johto_palette_map.asm +++ b/gfx/tilesets/johto_palette_map.asm @@ -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 diff --git a/gfx/tilesets/kanto.png b/gfx/tilesets/kanto.png index 0af1509..1644ef8 100644 Binary files a/gfx/tilesets/kanto.png and b/gfx/tilesets/kanto.png differ diff --git a/gfx/tilesets/nihon_south.png b/gfx/tilesets/nihon_south.png index 6ddb7f4..884e634 100644 Binary files a/gfx/tilesets/nihon_south.png and b/gfx/tilesets/nihon_south.png differ diff --git a/gfx/tilesets/seaweed/1.png b/gfx/tilesets/seaweed/1.png new file mode 100644 index 0000000..57cf932 Binary files /dev/null and b/gfx/tilesets/seaweed/1.png differ diff --git a/gfx/tilesets/seaweed/2.png b/gfx/tilesets/seaweed/2.png new file mode 100644 index 0000000..a86a8a1 Binary files /dev/null and b/gfx/tilesets/seaweed/2.png differ diff --git a/gfx/tilesets/water/deep-water.png b/gfx/tilesets/water/deep-water.png new file mode 100644 index 0000000..e39b8f2 Binary files /dev/null and b/gfx/tilesets/water/deep-water.png differ diff --git a/home/flag.asm b/home/flag.asm index 243b0e0..bc323af 100644 --- a/home/flag.asm +++ b/home/flag.asm @@ -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. diff --git a/home/hm_moves.asm b/home/hm_moves.asm index 3862a7a..d483031 100644 --- a/home/hm_moves.asm +++ b/home/hm_moves.asm @@ -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 diff --git a/home/map_objects.asm b/home/map_objects.asm index 9bd0377..e54d740 100644 --- a/home/map_objects.asm +++ b/home/map_objects.asm @@ -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 diff --git a/macros/scripts/battle_commands.asm b/macros/scripts/battle_commands.asm index e023b72..59a50b9 100644 --- a/macros/scripts/battle_commands.asm +++ b/macros/scripts/battle_commands.asm @@ -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 diff --git a/macros/scripts/events.asm b/macros/scripts/events.asm index 182f4d8..104fef5 100644 --- a/macros/scripts/events.asm +++ b/macros/scripts/events.asm @@ -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 diff --git a/maps/CinnabarIsland.ablk b/maps/CinnabarIsland.ablk index 09ec62e..8923029 100644 --- a/maps/CinnabarIsland.ablk +++ b/maps/CinnabarIsland.ablk @@ -1,2 +1,2 @@ -”dbQQ>???;”dN>?,,“µ)”dN$W*,¶·)”dN1(,,,)”dP\Ž*,)”d{{y|r(,)”-{ -{t(,)”C-$W%˜™™™™™™™™™ \ No newline at end of file +”dbQQ>>??;”dN>?,(“µ)”dN$½*(¶·)”dN1($W½%”dP\Ž*,)”d{{y|r(,)”-{ +{t(,)”C-$½%˜™™™™™™™™™ \ No newline at end of file diff --git a/maps/DebugRoom.asm b/maps/DebugRoom.asm index fb3a5a0..03e5f74 100644 --- a/maps/DebugRoom.asm +++ b/maps/DebugRoom.asm @@ -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 diff --git a/maps/RockTunnelB1F.ablk b/maps/RockTunnelB1F.ablk index 8c2a3e4..6e926f3 100644 --- a/maps/RockTunnelB1F.ablk +++ b/maps/RockTunnelB1F.ablk @@ -12,5 +12,5 @@ )++ !" (*! +  -  *  +  A*  (!)+  \ No newline at end of file diff --git a/maps/SilverCaveRoom2.ablk b/maps/SilverCaveRoom2.ablk index 19e352b..21ff169 100644 --- a/maps/SilverCaveRoom2.ablk +++ b/maps/SilverCaveRoom2.ablk @@ -19,8 +19,8 @@ )-..7. - -/'' - - + \- -  -     *-./ + \    \*-./ -/,,,-/$$$$-./ %)$$$$ # \ No newline at end of file diff --git a/ram/wram.asm b/ram/wram.asm index 5d4b7a0..826d003 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -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