The PokéCommunity Forums

The PokéCommunity Forums (https://www.pokecommunity.com/index.php)
-   Binary ROM Hacking (https://www.pokecommunity.com/forumdisplay.php?f=284)
-   -   Other "The ship set sail" (https://www.pokecommunity.com/showthread.php?t=360570)

Xcisor December 30th, 2015 6:37 PM

"The ship set sail"
 
Is there anyway to make the Mystic/Aurora Tickets/Rainbow Pass work before you have access to the Sevii Islands/Defeat Elite 4+National Dex?

I wanted the character to be able to travel to Navel Rock before the elite 4 (After the Sliph Co. Plot/Route 19). I already have set the proper flag when the NPC gives you the ticket, and Mystic Ticket works no problem post National Dex/Rainbow Pass, but whenever you approach the boatman in Vermillion before defeating this he simply replies "The ship set sail."

Is it something with the VARS at the Vermillion port or does it have to do with a setflag operation with Professor Oak? Or something else all together?

[[INFO: I added the beach house on route 19 back into the game that was in Yellow Version where you could use your SURF Pikachu. Now instead of the SURF mini-game the NPC presents you with the OLD SEA MAP (Mysticticket) allowing you to go catch Mew.

Just wanting the player to be able to capture the Mew and use it on their team to face the E4 rather than defeating them then going and capturing the legendary.]]

===

PS: Was also wondering if it were possible to replace the flames on the fire red start screen with the animation for the THUNDER attack from the game's data? Not as concerned with this last minute aesthetic feature as I am about the initial above problem however...

Buffel Saft December 30th, 2015 10:30 PM

This is all handled by the boatman's script; it only checks for the mystic and aurora tickets after confirming that the player has a rainbow pass. To get the mystic ticket to work before the post-game, you'll need to move the check to another part of the script.

Xcisor December 31st, 2015 6:16 AM

Quote:

Originally Posted by Buffel Saft (Post 9056944)
This is all handled by the boatman's script; it only checks for the mystic and aurora tickets after confirming that the player has a rainbow pass. To get the mystic ticket to work before the post-game, you'll need to move the check to another part of the script.

Ok, well I see that there is a checkflag 0x84A for the Mystic Ticket and another for the Aurora Ticket but don't see one that registers for the Rainbow Pass. Where and what edits should I make to the below script to allow for the boat to recognize the Mystic Ticket before post game? I tried just moving this script:

#org 0x8166958
'-----------------------------------
checkflag 0x84A
if false jump 0x81A77B0 ' Flag is unset
checkitem MYSTICTICKET 1
compare LASTRESULT 0x0
if == jump 0x81A77B0 ' Equal To
jump 0x81A77AA


Upward in the script progression but when I compiled the script it just reset back to its previous location. Could you show me where I need to make changes to the below script to make the pre-game events unfold?

Code:

#org 0x8166941
'-----------------------------------
lock
faceplayer
compare 0x407E 0x3
if == jump 0x8166996 ' Equal To
msgbox 0x817FA22 ' Welcome to the S.S. ...
callstd MSG_NOCLOSE ' Non-closing message
release
    ' Release commands close any open messages
end

#org 0x8166996
'-----------------------------------
setvar 0x8004 0x0
compare 0x4076 0x5
if >= jump 0x81669BB ' Larger Than or Equal To
compare 0x4076 0x1
if >= jump 0x8166B3B ' Larger Than or Equal To
msgbox 0x817FB10 ' The ship set sail.
callstd MSG_NOCLOSE ' Non-closing message
release
    ' Release commands close any open messages
end

#org 0x81669BB
'-----------------------------------
special INIT_STEPCOUNT
compare LASTRESULT 0x2
if == jump 0x81A7AE0 ' Equal To
special GET_STEPCOUNT
call 0x8166958
compare LASTRESULT 0x1
if == jump 0x81669FD ' Equal To
call 0x8166977
compare LASTRESULT 0x1
if == jump 0x8166A5F ' Equal To
setvar 0x8004 0x0
message 0x817FBB8 ' Ah, you have a RAINB...
showmsg
jump 0x81A911E

#org 0x81A7AE0
'-----------------------------------
release
end

#org 0x8166B3B
'-----------------------------------
message 0x817FB23 ' Ah, you have a TRI-P...
showmsg
setvar 0x8004 0x0
multichoice 0x13 0x5 0x39 0x0
copyvar 0x8000 LASTRESULT
compare 0x8000 0x0
if == jump 0x81A8FEE ' Equal To
compare 0x8000 0x1
if == jump 0x81A8FF9 ' Equal To
compare 0x8000 0x2
if == jump 0x81A9004 ' Equal To
compare 0x8000 0x3
if == jump 0x81A90F6 ' Equal To
compare 0x8000 0x7F
if == jump 0x81A90F6 ' Equal To
end

#org 0x81A8FEE
'-----------------------------------
setvar 0x8006 0x1
jump 0x81A909E

#org 0x81A909E
'-----------------------------------
special2 LASTRESULT 0x1A9
storevar 0x0 LASTRESULT
compare 0x8004 0x0
if == jump 0x81A90BE ' Equal To
compare 0x8004 0x0
if != jump 0x81A90CC ' Not Equal To
end

#org 0x81A90BE
'-----------------------------------
msgbox 0x817FB67 ' Okay, everything's i...
callstd MSG_NOCLOSE ' Non-closing message
jump 0x81A90DA

#org 0x81A90DA
'-----------------------------------
closemsg
pause 0x14
special INIT_STEPCOUNT
compare LASTRESULT 0x2
if == jump 0x81A7AE0 ' Equal To
special GET_STEPCOUNT
fadescreen FADEOUT_BLACK
special 0x17B
waitspecial
end

#org 0x81A8FF9
'-----------------------------------
setvar 0x8006 0x2
jump 0x81A909E

#org 0x8166958
'-----------------------------------
checkflag 0x84A
if false jump 0x81A77B0 ' Flag is unset
checkitem MYSTICTICKET 1
compare LASTRESULT 0x0
if == jump 0x81A77B0 ' Equal To
jump 0x81A77AA

#org 0x81A77B0
'-----------------------------------
setvar LASTRESULT 0x0
return

#org 0x81A77AA
'-----------------------------------
setvar LASTRESULT 0x1
return

#org 0x81669FD
'-----------------------------------
call 0x8166977
compare LASTRESULT 0x1
if == jump 0x8166AB1 ' Equal To
checkflag 0x2F0
if false call 0x8166A53 ' Flag is unset
message 0x817FCC1 ' Would you like to bo...
showmsg
multichoice 0x11 0x6 0x36 0x0
copyvar 0x8000 LASTRESULT
compare 0x8000 0x0
if == jump 0x81A911E ' Equal To
compare 0x8000 0x1
if == jump 0x8166B0B ' Equal To
compare 0x8000 0x2
if == jump 0x81A90F6 ' Equal To
compare 0x8000 0x7F
if == jump 0x81A90F6 ' Equal To
end

#org 0x8166977
'-----------------------------------
checkflag 0x84B
if false jump 0x81A77B0 ' Flag is unset
checkitem AURORATICKET 1
compare LASTRESULT 0x0
if == jump 0x81A77B0 ' Equal To
jump 0x81A77AA

#org 0x8166AB1
'-----------------------------------
checkflag 0x2F0
if false call 0x8166A53 ' Flag is unset
checkflag 0x2F1
if false call 0x8166AA5 ' Flag is unset
message 0x817FCC1 ' Would you like to bo...
showmsg
multichoice 0xD 0x5 0x38 0x0
copyvar 0x8000 LASTRESULT
compare 0x8000 0x0
if == jump 0x81A911E ' Equal To
compare 0x8000 0x1
if == jump 0x8166B0B ' Equal To
compare 0x8000 0x2
if == jump 0x8166B23 ' Equal To
compare 0x8000 0x3
if == jump 0x81A90F6 ' Equal To
compare 0x8000 0x7F
if == jump 0x81A90F6 ' Equal To
end

#org 0x8166A53
'-----------------------------------
setflag 0x2F0
msgbox 0x817FC00 ' Oh! This OLD SEA MAP...
callstd MSG_NOCLOSE ' Non-closing message
return

#org 0x8166AA5
'-----------------------------------
setflag 0x2F1
msgbox 0x817FC5F ' Oh! That's an AURORA...
callstd MSG_NOCLOSE ' Non-closing message
return

#org 0x8166A5F
'-----------------------------------
checkflag 0x2F1
if false call 0x8166AA5 ' Flag is unset
message 0x817FCC1 ' Would you like to bo...
showmsg
multichoice 0xD 0x6 0x37 0x0
copyvar 0x8000 LASTRESULT
compare 0x8000 0x0
if == jump 0x81A911E ' Equal To
compare 0x8000 0x1
if == jump 0x8166B23 ' Equal To
compare 0x8000 0x2
if == jump 0x81A90F6 ' Equal To
compare 0x8000 0x7F
if == jump 0x81A90F6 ' Equal To
end

#org 0x81A911E
'-----------------------------------
setvar 0x8005 0x0
special 0x1A7
waitspecial
special2 0x8006 0x1A8
copyvar 0x8000 0x8006
compare 0x8000 0x0
if == jump 0x81A91D5 ' Equal To
compare 0x8000 0x1
if == jump 0x81A91E0 ' Equal To
compare 0x8000 0x2
if == jump 0x81A91EB ' Equal To
compare 0x8000 0x3
if == jump 0x81A91F6 ' Equal To
compare 0x8000 0x4
if == jump 0x81A9201 ' Equal To
compare 0x8000 0xFE
if == jump 0x81A917F ' Equal To
compare 0x8000 0x7F
if == jump 0x81A90F6 ' Equal To
end

#org 0x81A91D5
'-----------------------------------
setvar 0x8006 0x0
jump 0x81A909E

#org 0x8166B23
'-----------------------------------
msgbox 0x817FD5F ' Okay, everything's i...
callstd MSG_NOCLOSE ' Non-closing message
setvar 0x8004 0x0
setvar 0x8006 0xA
jump 0x81A90DA

#org 0x81A90F6
'-----------------------------------
special2 LASTRESULT 0x1AD
compare LASTRESULT 0x1
if == jump 0x81A9108 ' Equal To
release
end

#org 0x81A9108
'-----------------------------------
closemsg
applymovement 0x6 0x81A75E5 ' face_default end
applymovement PLAYER 0x81A911C ' walk_up end
pauseevent 0x0
releaseall
end

#org 0x81A9004
'-----------------------------------
setvar 0x8006 0x3
jump 0x81A909E

#org 0x81A90CC
'-----------------------------------
msgbox 0x81A641B ' All right!\nAll aboa...
callstd MSG_NOCLOSE ' Non-closing message
jump 0x81A90DA

#org 0x8166B0B
'-----------------------------------
msgbox 0x817FCEC ' Okay, everything's i...
callstd MSG_NOCLOSE ' Non-closing message
setvar 0x8004 0x0
setvar 0x8006 0x9
jump 0x81A90DA

#org 0x81A91E0
'-----------------------------------
setvar 0x8006 0x1
jump 0x81A909E

#org 0x81A91EB
'-----------------------------------
setvar 0x8006 0x2
jump 0x81A909E

#org 0x81A91F6
'-----------------------------------
setvar 0x8006 0x3
jump 0x81A909E

#org 0x81A9201
'-----------------------------------
setvar 0x8006 0x4
jump 0x81A909E

#org 0x81A917F
'-----------------------------------
setvar 0x8005 0x1
special 0x1A7
waitspecial
special2 0x8006 0x1A8
copyvar 0x8000 0x8006
compare 0x8000 0x4
if == jump 0x81A9201 ' Equal To
compare 0x8000 0x5
if == jump 0x81A920C ' Equal To
compare 0x8000 0x6
if == jump 0x81A9217 ' Equal To
compare 0x8000 0x7
if == jump 0x81A9222 ' Equal To
compare 0x8000 0xFE
if == jump 0x81A911E ' Equal To
compare 0x8000 0x7F
if == jump 0x81A90F6 ' Equal To
end

#org 0x81A920C
'-----------------------------------
setvar 0x8006 0x5
jump 0x81A909E

#org 0x81A9217
'-----------------------------------
setvar 0x8006 0x6
jump 0x81A909E

#org 0x81A9222
'-----------------------------------
setvar 0x8006 0x7
jump 0x81A909E

#org 0x817FA22
= Welcome to the S.S. ANNE!

#org 0x817FB10
= The ship set sail.

#org 0x817FBB8
= Ah, you have a RAINBOW PASS.\pWould you like to board\na SEAGALLOP ferry?

#org 0x817FB23
= Ah, you have a TRI-PASS.\pWould you like to board\na SEAGALLOP ferry?

#org 0x817FB67
= Okay, everything's in order.\pSEAGALLOP HI-SPEED 7 will be\ndeparting immediately.

#org 0x817FCC1
= Would you like to board\na SEAGALLOP ferry?

#org 0x817FC00
= Oh! This OLD SEA MAP!\nNow that is rare.\pWe'll be happy to take you to\nthis island anytime.

#org 0x817FC5F
= Oh! That's an AURORATICKET!\nNow that is rare.\pWe'll be happy to take you to\nBIRTH ISLAND anytime.

#org 0x817FD5F
= Okay, everything's in order for you\nto board a special ferry.\pSEAGALLOP HI-SPEED 12 will be\ndeparting immediately.

#org 0x81A641B
= All right!\nAll aboard SEAGALLOP HI-SPEED \v\h02!

#org 0x817FCEC
= Okay, everything's in order for you\nto board a special ferry.\pSEAGALLOP HI-SPEED 11 will be\ndeparting immediately.

#org 0x81A75E5
M face_default end

#org 0x81A911C
M walk_up end



Xcisor December 31st, 2015 8:35 AM

UPDATE: I got the dockman to recognize the OLD SEA MAP before the Elite 4 by changing the

compare 0x4076 0x5 >> compare 0x4076 0x0

However now this also registers to the ferryman that you already have a RAINBOW PASS. However, I would like to be able to have the player ONLY access FARAWAY ISLAND/NAVEL ROCK and not the Sevii Islands. What else would I need to change while still keeping the Sevii Islands intact post-game?

Buffel Saft December 31st, 2015 8:20 PM

Quote:

Originally Posted by Xcisor (Post 9057360)
Could you show me where I need to make changes to the below script to make the pre-game events unfold?

The game jumps to this part of the script if var 0x4076 is greater than or equal to 5 (which I assume means the player has a rainbow pass):
Code:

#org 0x81669BB
'-----------------------------------
special INIT_STEPCOUNT
compare LASTRESULT 0x2
if == jump 0x81A7AE0 ' Equal To
special GET_STEPCOUNT
call 0x8166958
compare LASTRESULT 0x1
if == jump 0x81669FD ' Equal To
call 0x8166977
compare LASTRESULT 0x1
if == jump 0x8166A5F ' Equal To
setvar 0x8004 0x0
message 0x817FBB8 ' Ah, you have a RAINB...
showmsg
jump 0x81A911E


This part checks for the Mystic Ticket:
Code:

call 0x8166958
compare LASTRESULT 0x1
if == jump 0x81669FD ' Equal To


So, to check for the ticket before the post game, add the above code to a part of the script that doesn't require the player to have something else first. I'd suggest placing it here:
Code:

#org 0x8166996
'-----------------------------------
setvar 0x8004 0x0
compare 0x4076 0x5
if >= jump 0x81669BB ' Larger Than or Equal To
compare 0x4076 0x1
if >= jump 0x8166B3B ' Larger Than or Equal To

call 0x8166958
compare LASTRESULT 0x1
if == jump 0x81669FD ' Equal To

msgbox 0x817FB10 ' The ship set sail.
callstd MSG_NOCLOSE ' Non-closing message
release
    ' Release commands close any open messages
end


Obviously you'll also need to repoint this part of the script as there probably won't be enough space in its original location.

Also, note that I haven't had a chance to test this myself so there may be some issues, but it should at least get the ticket to work once the S.S. Anne has set sail.

Xcisor January 1st, 2016 4:46 AM

Quote:

Originally Posted by Buffel Saft (Post 9058150)
The game jumps to this part of the script if var 0x4076 is greater than or equal to 5 (which I assume means the player has a rainbow pass):
Code:

#org 0x81669BB
'-----------------------------------
special INIT_STEPCOUNT
compare LASTRESULT 0x2
if == jump 0x81A7AE0 ' Equal To
special GET_STEPCOUNT
call 0x8166958
compare LASTRESULT 0x1
if == jump 0x81669FD ' Equal To
call 0x8166977
compare LASTRESULT 0x1
if == jump 0x8166A5F ' Equal To
setvar 0x8004 0x0
message 0x817FBB8 ' Ah, you have a RAINB...
showmsg
jump 0x81A911E


This part checks for the Mystic Ticket:
Code:

call 0x8166958
compare LASTRESULT 0x1
if == jump 0x81669FD ' Equal To


So, to check for the ticket before the post game, add the above code to a part of the script that doesn't require the player to have something else first. I'd suggest placing it here:
Code:

#org 0x8166996
'-----------------------------------
setvar 0x8004 0x0
compare 0x4076 0x5
if >= jump 0x81669BB ' Larger Than or Equal To
compare 0x4076 0x1
if >= jump 0x8166B3B ' Larger Than or Equal To

call 0x8166958
compare LASTRESULT 0x1
if == jump 0x81669FD ' Equal To

msgbox 0x817FB10 ' The ship set sail.
callstd MSG_NOCLOSE ' Non-closing message
release
    ' Release commands close any open messages
end


Obviously you'll also need to repoint this part of the script as there probably won't be enough space in its original location.

Also, note that I haven't had a chance to test this myself so there may be some issues, but it should at least get the ticket to work once the S.S. Anne has set sail.

Ok yeah, thank you. I repointed the script to make room and everything is going fine as far as recognizing the ticket at the appropriate time without changing the setvar 0x4076 function. However, when directed to if == jump 0x81669FD that script is still prompting the player with the multichoice options:

SEVII ISLANDS
NAVEL ROCK

Code:

#org 0x81669FD
'-----------------------------------
call 0x8166977
compare LASTRESULT 0x1
if == jump 0x8166AB1 ' Equal To
checkflag 0x2F0
if false call 0x8166A53 ' Flag is unset
message 0x817FCC1 ' Would you like to bo...
showmsg
multichoice 0x11 0x6 0x36 0x0
copyvar 0x8000 LASTRESULT
compare 0x8000 0x0
if == jump 0x81A911E ' Equal To
compare 0x8000 0x1
if == jump 0x8166B0B ' Equal To
compare 0x8000 0x2
if == jump 0x81A90F6 ' Equal To
compare 0x8000 0x7F
if == jump 0x81A90F6 ' Equal To
end


Would there be a way to find some free space and configure it so that way the choice to travel to the SEVII ISLANDS will not be an option until the player receives the RAINBOW PASS?

===

The same concern is for the following script which appears after the player recieves the TRI PASS. Would it be possible to add the option to travel to NAVEL ROCK on here once the player has set the flag for the MYSTERY TICKET?

Code:

#org 0x8166B3B
'-----------------------------------
message 0x817FB23 ' Ah, you have a TRI-P...
showmsg
setvar 0x8004 0x0
multichoice 0x13 0x5 0x39 0x0
copyvar 0x8000 LASTRESULT
compare 0x8000 0x0
if == jump 0x81A8FEE ' Equal To
compare 0x8000 0x1
if == jump 0x81A8FF9 ' Equal To
compare 0x8000 0x2
if == jump 0x81A9004 ' Equal To
compare 0x8000 0x3
if == jump 0x81A90F6 ' Equal To
compare 0x8000 0x7F
if == jump 0x81A90F6 ' Equal To
end



Buffel Saft January 2nd, 2016 12:41 AM

Quote:

Originally Posted by Xcisor (Post 9058553)
Ok yeah, thank you. I repointed the script to make room and everything is going fine as far as recognizing the ticket at the appropriate time without changing the setvar 0x4076 function. However, when directed to if == jump 0x81669FD that script is still prompting the player with the multichoice options:

SEVII ISLANDS
NAVEL ROCK

Code:

#org 0x81669FD
'-----------------------------------
call 0x8166977
compare LASTRESULT 0x1
if == jump 0x8166AB1 ' Equal To
checkflag 0x2F0
if false call 0x8166A53 ' Flag is unset
message 0x817FCC1 ' Would you like to bo...
showmsg
multichoice 0x11 0x6 0x36 0x0
copyvar 0x8000 LASTRESULT
compare 0x8000 0x0
if == jump 0x81A911E ' Equal To
compare 0x8000 0x1
if == jump 0x8166B0B ' Equal To
compare 0x8000 0x2
if == jump 0x81A90F6 ' Equal To
compare 0x8000 0x7F
if == jump 0x81A90F6 ' Equal To
end


Would there be a way to find some free space and configure it so that way the choice to travel to the SEVII ISLANDS will not be an option until the player receives the RAINBOW PASS?

You're welcome! Yes, you can do this by editing the options in the multi-choice boxes using a hex editor (see this thread for details: http://www.pokecommunity.com/showthread.php?t=165939) and then adding or removing branches in each of the multi-choice scripts.

Xcisor January 2nd, 2016 4:03 PM

Quote:

Originally Posted by Buffel Saft (Post 9059709)
You're welcome! Yes, you can do this by editing the options in the multi-choice boxes using a hex editor (see this thread for details: http://www.pokecommunity.com/showthread.php?t=165939) and then adding or removing branches in each of the multi-choice scripts.

Ok yeah I've managed to get a script that satisfies what I wanted to do for the most part so thanks a lot for the help through this! Problem: SOLVED!


All times are GMT -8. The time now is 2:26 AM.


Like our Facebook Page Follow us on Twitter © 2002 - 2018 The PokéCommunity™, pokecommunity.com.
Pokémon characters and images belong to The Pokémon Company International and Nintendo. This website is in no way affiliated with or endorsed by Nintendo, Creatures, GAMEFREAK, The Pokémon Company or The Pokémon Company International. We just love Pokémon.
All forum styles, their images (unless noted otherwise) and site designs are © 2002 - 2016 The PokéCommunity / PokéCommunity.com.
PokéCommunity™ is a trademark of The PokéCommunity. All rights reserved. Sponsor advertisements do not imply our endorsement of that product or service. User generated content remains the property of its creator.

Acknowledgements
Use of PokéCommunity Assets
vB Optimise by DragonByte Technologies Ltd © 2023.