How to add a second partner: Difference between revisions

From SkyTemple
mNo edit summary
m Remove Drive link since everything has been ported now
 
(6 intermediate revisions by 2 users not shown)
Line 1: Line 1:
== '''How to Implement a Second Partner in SkyTemple''' ==
== '''How to Implement a Second Partner in SkyTemple''' ==
'''Who this guide is for:''' People who want to have a second partner, for a total party of three pokemon for your ROM Hack. This may work to have a party of four as well but I have not tested it.  
  '''Who this guide is for:''' People who want to have a second partner, for a total party of three pokemon for your ROM Hack. This may work to have a party of four as well but I have not tested it.


'''Considerations:'''  
'''Considerations:'''  
Line 6: Line 6:
# Having a three member party also means having more pokemon talking and being present in cutscenes, thus more scripting and writing on your part.
# Having a three member party also means having more pokemon talking and being present in cutscenes, thus more scripting and writing on your part.
# If the Chimeco Assembly is enabled, the player will be able to remove the second partner. You can either let them do this, or delete the Chimeco Assembly.  
# If the Chimeco Assembly is enabled, the player will be able to remove the second partner. You can either let them do this, or delete the Chimeco Assembly.  
==== Version with images: ====
https://docs.google.com/document/d/e/2PACX-1vRi3ZieBTBFC7eg2gFIQhhKGpoAkOsf_NyJ0628-PA5CqqSjRYInbttLouDrPeQRxwSEA4XiUSisbGE/pub


== '''Adding a Pokemon To Your Starting Party (Credit: @Ajifer on the SkyTemple Discord)''' ==
== '''Adding a Pokemon To Your Starting Party (Credit: @Ajifer on the SkyTemple Discord)''' ==
Line 17: Line 14:
# In the dropdown menus on the left, go to Lists > Recruitment List. Scroll to the pokemon with the ID 16 (it should be a Manaphy assuming you haven’t changed it.)  
# In the dropdown menus on the left, go to Lists > Recruitment List. Scroll to the pokemon with the ID 16 (it should be a Manaphy assuming you haven’t changed it.)  
#* Click on the pokemon’s name and change it to whatever species you’d like. In the example below, I changed it from Manaphy to Growlithe.
#* Click on the pokemon’s name and change it to whatever species you’d like. In the example below, I changed it from Manaphy to Growlithe.
#* You may also want to change the default level and the recruitment location. If you change the recruit location to “Beach (0215)”, then if the recruit gets ko’d in a dungeon, it counts as a party wipe. <br />5. Add the following script to any cutscene after the tutorial dungeon (ie Beach Cave). For some reason the game will crash if you do so before Beach Cave. I personally put it in the cutscene before the first Koffing-Zubat fight and it worked.
#* You may also want to change the default level and the recruitment location. If you change the recruit location to “Beach (0215)”, then if the recruit gets ko’d in a dungeon, it counts as a party wipe.   [[File:T1.png|frameless|300x300px|right]]
# Add the following script to any cutscene after the tutorial dungeon (ie Beach Cave). For some reason the game will crash if you do so before Beach Cave. I personally put it in the cutscene before the first Koffing-Zubat fight and it worked.


<code>ProcessSpecial(PROCESS_SPECIAL_PREPARE_MENU_ACCEPT_TEAM_MEMBER, 16, 0) ) { }switch ( message_Menu(MENU_ACCEPT_TEAM_MEMBER) )</code>
<code>ProcessSpecial(PROCESS_SPECIAL_PREPARE_MENU_ACCEPT_TEAM_MEMBER, 16, 0) ) { }switch ( message_Menu(MENU_ACCEPT_TEAM_MEMBER) )</code>
Line 72: Line 70:
==== Using the crossroads (map P01P01A) as an example. ====
==== Using the crossroads (map P01P01A) as an example. ====
Step 1: Open the Enter scene and scan for (2 Acts) sectors
Step 1: Open the Enter scene and scan for (2 Acts) sectors
[[File:T2.png|frameless|600x600px]]




Step 2: Click the S checkbox to single-out the sector. (You can ignore any sectors that only have Bidoof + Sunflora)
Step 2: Click the S checkbox to single-out the sector. (You can ignore any sectors that only have Bidoof + Sunflora)
[[File:T3.png|frameless|600x600px]]


Step 3: Add the actor of your second partner. Make sure that  
Step 3: Add the actor of your second partner. Make sure that  
Line 80: Line 82:
# “kind” is “ATTENDANT_MANAFI” (this will line up with the pokemon ID 16 in your recruitment list, which is Growlithe in my case)
# “kind” is “ATTENDANT_MANAFI” (this will line up with the pokemon ID 16 in your recruitment list, which is Growlithe in my case)
# The actor’s sector is the same as the player and ATTENDANT1
# The actor’s sector is the same as the player and ATTENDANT1
# They are facing the same direction as the player and ATTENDANT1
# They are facing the same direction as the player and ATTENDANT1 [[File:T5.png|frameless|600x600px]]<br />
 
Step 4: Repeat for every (2 acts) sector (except the bidoof+sunflora) on every overworld map. In vanilla this includes:
Step 4: Repeat for every (2 acts) sector (except the bidoof+sunflora) on every overworld map. In vanilla this includes:


Line 92: Line 93:
# I’m certain I’m missing some later on in the game. Like anytime you get to encounter a Kangaskhan Rock in the middle of or before a dungeon.
# I’m certain I’m missing some later on in the game. Like anytime you get to encounter a Kangaskhan Rock in the middle of or before a dungeon.


'''Other Tips:'''  
== '''Other Tips:''' ==
 
# If you ever see “ProcessSpecial(PROCESS_SPECIAL_SET_TEAM_SETUP_HERO_AND_PARTNER_ONLY,0,0);” Make sure to delete it/comment it out or else it will reset your party.
# If you ever see “ProcessSpecial(PROCESS_SPECIAL_SET_TEAM_SETUP_HERO_AND_PARTNER_ONLY,0,0);” Make sure to delete it/comment it out or else it will reset your party.
# You can refer to the second partner in dialogue using the “[c_name:UNIT_NPC1]” variable.  
# You can refer to the second partner in dialogue using the “[c_name:UNIT_NPC1]” variable.  
Line 151: Line 151:


<code>§label_6;</code>
<code>§label_6;</code>
 
[[Category:Tutorials]]
   <nowiki>[[Category:Tutorials]]</nowiki>

Latest revision as of 23:18, 27 March 2026

How to Implement a Second Partner in SkyTemple

  Who this guide is for: People who want to have a second partner, for a total party of three pokemon for your ROM Hack. This may work to have a party of four as well but I have not tested it.

Considerations:

  1. Having a three member party also means having more pokemon talking and being present in cutscenes, thus more scripting and writing on your part.
  2. If the Chimeco Assembly is enabled, the player will be able to remove the second partner. You can either let them do this, or delete the Chimeco Assembly.

Adding a Pokemon To Your Starting Party (Credit: @Ajifer on the SkyTemple Discord)

  1. Download this patch by Adex (please credit appropriately): https://github.com/Adex-8x/EoS-ASM-Effects/blob/main/special_processes/monster_entry/add_mentry_to_party.asm  
  2. The above is a custom special process. In order to import custom special processes, you'll first need to apply the patch "ExtractSPCode" from Patches > ASM (double click) > Utility.
  3. That will let you go to Patches > ASM > Special Process Effects (From the dropdown), where you'll have to (in the second tab) add a new effect ID with the [+], import code to that ID to then in the first tab, add a new special process that you'll give the effect ID to.
  4. In the dropdown menus on the left, go to Lists > Recruitment List. Scroll to the pokemon with the ID 16 (it should be a Manaphy assuming you haven’t changed it.)
    • Click on the pokemon’s name and change it to whatever species you’d like. In the example below, I changed it from Manaphy to Growlithe.
    • You may also want to change the default level and the recruitment location. If you change the recruit location to “Beach (0215)”, then if the recruit gets ko’d in a dungeon, it counts as a party wipe.
  5. Add the following script to any cutscene after the tutorial dungeon (ie Beach Cave). For some reason the game will crash if you do so before Beach Cave. I personally put it in the cutscene before the first Koffing-Zubat fight and it worked.

ProcessSpecial(PROCESS_SPECIAL_PREPARE_MENU_ACCEPT_TEAM_MEMBER, 16, 0) ) { }switch ( message_Menu(MENU_ACCEPT_TEAM_MEMBER) )

ProcessSpecial(64,5,0);

***Replace the ‘64’ in ProcessSpecial(64,5,0) with whatever the ID of the special process effect is. For me it just happened to be 64. (I think by default it’s 62 but I may be wrong.)

Those three lines will give the player a prompt to either accept or deny the second party member. To force the play to pick yes, paste this script (written by Ajifer)

§label_5;

   CallCommon(CORO_MESSAGE_CLOSE_WAIT_FUNC);

   switch ( ProcessSpecial(PROCESS_SPECIAL_PREPARE_MENU_ACCEPT_TEAM_MEMBER, 16, 0) ) { }

   switch ( message_Menu(MENU_ACCEPT_TEAM_MEMBER) ) {

       case 1:

       default:

           //Player said yes to accepting the partner

           //Celebrations for the partner joining.

           //Script continues here, ending with an end; or you can add a jump @label_6 to continue further down for clarity.

       ProcessSpecial(64,5,0);

       jump @label_6;

       case 2:

           //Player said no to accepting the partner

           //Guilt trip the player into reconsider, have the question asked again

           jump @label_5

   ;}

§label_6;

Congrats! Now this pokemon is the third member of your party in dungeons.

Having the Second Partner Follow You In the Overworld

In every “enter(sse)” scene of every overworld map, do the following:

  1. Go to the “sectors” list in the top-right.
  2. Find any sectors with 2 actors listed (player + Attendant1).
  3. Add actor “ACTOR_ATTENDANT_MANAFI” at the same location as those 2 actors. This will be the second partner’s “spawn point” whenever the player enters that map.

Using the crossroads (map P01P01A) as an example.

Step 1: Open the Enter scene and scan for (2 Acts) sectors


Step 2: Click the S checkbox to single-out the sector. (You can ignore any sectors that only have Bidoof + Sunflora)

Step 3: Add the actor of your second partner. Make sure that

  1. “kind” is “ATTENDANT_MANAFI” (this will line up with the pokemon ID 16 in your recruitment list, which is Growlithe in my case)
  2. The actor’s sector is the same as the player and ATTENDANT1
  3. They are facing the same direction as the player and ATTENDANT1

Step 4: Repeat for every (2 acts) sector (except the bidoof+sunflora) on every overworld map. In vanilla this includes:

  1. Every Guild Floor and Room
  2. The Crossroads
  3. Spinda’s Cafe
  4. Both Town maps + Sharpedo’s Bluff
  5. The beach and path to the beach
  6. The outside of the guild
  7. I’m certain I’m missing some later on in the game. Like anytime you get to encounter a Kangaskhan Rock in the middle of or before a dungeon.

Other Tips:

  1. If you ever see “ProcessSpecial(PROCESS_SPECIAL_SET_TEAM_SETUP_HERO_AND_PARTNER_ONLY,0,0);” Make sure to delete it/comment it out or else it will reset your party.
  2. You can refer to the second partner in dialogue using the “[c_name:UNIT_NPC1]” variable.
  3. To have the second partner talk, use “ACTOR_UNIT_NPC1”. For ex.

message_SetFace(ACTOR_UNIT_NPC1, FACE_NORMAL, FACE_POS_STANDARD);

   message_Talk({

       english=" No worries little buddy![K] Just be careful ya hear!",

   });

4. You use the actor “UNIT_NPC1” in cutscenes/scene editors to refer to the second partner.

5. When on the Overworld, for non-dialogue script (like turning or moving in an overworld cutscene), you refer to the second partner as “ACTOR_ATTENDANT_MANAFI” instead. For ex.

MovePositionOffset<actor ACTOR_ATTENDANT_MANAFI>(1, 15, 0);

6. The player’s bedroom only has two beds in it. You can add a third by replacing the map background with this one drawn by @Basealeios (please credit appropriately)

https://imgur.com/gallery/3-bed-bedroom-pmd-eos-T4I9Ktb

7. When testing, you may need to re-recruit/add the second partner to the party every time. For ex. If you’re starting your testing in Main 3, but the partner was added in Main 1, then the game will crash when it tries to call UNIT_NPC1 because it hasn’t been defined as of playing Main 3. You can resolve this by copy/pasting the below script at the beginning of Main 3 (or whatever Main you’re starting from)

§label_5;

   CallCommon(CORO_MESSAGE_CLOSE_WAIT_FUNC);

   switch ( ProcessSpecial(PROCESS_SPECIAL_PREPARE_MENU_ACCEPT_TEAM_MEMBER, 16, 0) ) { }

   switch ( message_Menu(MENU_ACCEPT_TEAM_MEMBER) ) {

       case 1:

       default:

           //Player said yes to accepting the partner

           //Celebrations for the partner joining.

           //Script continues here, ending with an end; or you can add a jump @label_6 to continue further down for clarity.

       ProcessSpecial(64,5,0);

       jump @label_6;

       case 2:

           //Player said no to accepting the partner

           //Guilt trip the player into reconsider, have the question asked again

           jump @label_5

   ;}

§label_6;