Well I'm going to pinch this one off and make another huge post about my progress.
I added an entrance to one side of route69.dat, linking to a copy of pokemon center, outbackfosters.dat.
You can view it in its entirety here
This map features the usual NPC dialogue changes on 2 characters, which we have already covered. It also makes use of script blocks and 3 very special NPCs, a trio of pokeballs.
First lets look at my adaption of the elm's lab trigger zone for starting the sequences
Code:
entrance script:
{"Entity"{ENT[{"EntityID"{str[ScriptBlock]}}{"Position"{sngArr[4,0,7]}}{"TexturePath"{str[Center]}}{"Textures"{recArr[[0,48,16,16]]}}{"TextureIndex"{intArr[0,0]}}{"Collision"{bool[0]}}{"ModelID"{int[0]}}{"Action"{int[0]}}{"AdditionalValue"{str[outbackentrance]}}{"Rotation"{int[0]}}]}}
{"Entity"{ENT[{"EntityID"{str[ScriptBlock]}}{"Position"{sngArr[5,0,7]}}{"TexturePath"{str[Center]}}{"Textures"{recArr[[0,48,16,16]]}}{"TextureIndex"{intArr[0,0]}}{"Collision"{bool[0]}}{"ModelID"{int[0]}}{"Action"{int[0]}}{"AdditionalValue"{str[outbackentrance]}}{"Rotation"{int[0]}}]}}
{"Entity"{ENT[{"EntityID"{str[ScriptBlock]}}{"Position"{sngArr[6,0,7]}}{"TexturePath"{str[Center]}}{"Textures"{recArr[[0,48,16,16]]}}{"TextureIndex"{intArr[0,0]}}{"Collision"{bool[0]}}{"ModelID"{int[0]}}{"Action"{int[0]}}{"AdditionalValue"{str[outbackentrance]}}{"Rotation"{int[0]}}]}}
{"Entity"{ENT[{"EntityID"{str[ScriptBlock]}}{"Position"{sngArr[7,0,7]}}{"TexturePath"{str[Center]}}{"Textures"{recArr[[0,48,16,16]]}}{"TextureIndex"{intArr[0,0]}}{"Collision"{bool[0]}}{"ModelID"{int[0]}}{"Action"{int[0]}}{"AdditionalValue"{str[outbackentrance]}}{"Rotation"{int[0]}}]}}
{"Entity"{ENT[{"EntityID"{str[ScriptBlock]}}{"Position"{sngArr[8,0,7]}}{"TexturePath"{str[Center]}}{"Textures"{recArr[[0,48,16,16]]}}{"TextureIndex"{intArr[0,0]}}{"Collision"{bool[0]}}{"ModelID"{int[0]}}{"Action"{int[0]}}{"AdditionalValue"{str[outbackentrance]}}{"Rotation"{int[0]}}]}}
{"Entity"{ENT[{"EntityID"{str[ScriptBlock]}}{"Position"{sngArr[9,0,7]}}{"TexturePath"{str[Center]}}{"Textures"{recArr[[0,48,16,16]]}}{"TextureIndex"{intArr[0,0]}}{"Collision"{bool[0]}}{"ModelID"{int[0]}}{"Action"{int[0]}}{"AdditionalValue"{str[outbackentrance]}}{"Rotation"{int[0]}}]}}
{"Entity"{ENT[{"EntityID"{str[ScriptBlock]}}{"Position"{sngArr[10,0,7]}}{"TexturePath"{str[Center]}}{"Textures"{recArr[[0,48,16,16]]}}{"TextureIndex"{intArr[0,0]}}{"Collision"{bool[0]}}{"ModelID"{int[0]}}{"Action"{int[0]}}{"AdditionalValue"{str[outbackentrance]}}{"Rotation"{int[0]}}]}}
This is a line of script blocks to trigger if you try and enter or leave the room.
Code:
:if:register(enteredoutbackbutnotdone)
:then
@Text:BRUCE: Crikey, mate!~ Come back here.
@Turn:Player,2
@Move:Player,1
@Text:BRUCE: Cheers, big ears!
:endif
First we check if we have started the sequence but it isn't over yet, if so we are drawn back to the starter pokemon.This is achieved by checking the player registry, which is a text file containing keywords 'registered' by scripts, that can be checked for if they do or don't exist, and can be unregistered. We register enteredoutbackbutnotdone later
Code:
:if:register(leavingoutback)
:then
@Text:BRUCE: Go get me steaks!*It's dangerous to go alone~take this
@Unregister:leavingoutback
@Register:outbackdone
@GiveItem:18,5
:endif
we check if we're done in here, this is so Bruce gives us potions. Note the GiveItem keyword, it takes an id number for the item then the quantity to give, this is 5 potions. We also flag the player as done with the sequence so it can't start again.
Code:
:if:not register(enteredoutback)
:then
:if:not register(outbackdone)
:then
@Text:BRUCE: G'Day <playername>!~Me name's Bruce*You're probably after~some steak?
@Options:Strewth,Nah
:when:Strewth
@Text:Fair 'nuff, mate. There's a~problem though.*A dingo took me steak!~You have to get it back.*I'm going to give you one~ of these pokemon,*each one a fair dinkum Aussie.
@Register:enteredoutback
@Register:enteredoutbackbutnotdone
:when:Nah
@Text:Bugger off then! Crikey.
@Turn:Player,2
@Move:Player,4
:endwhen
:endif
:endif
This is the part that goes the first time you are there, it sets the sequence up and does the dialogue. Unfortunately, moving the character through the door in script will not trigger warp blocks, so the character walks through the wall, oops! This is something I probably can't help.
With that done you are free to choose your starter, but only 1. When you grab it it has to be removed from the world, and the game must remember what you chose for the rival later. This is done in 2 parts, the NPC and the script.
Code:
balls:
{"NPC"{NPC[{"Scale"{sngArr[0.5,0.5,0.5]}}{"Position"{sngArr[6,0.15,2]}}{"TextureID"{str[Pokeball]}}{"ID"{int[3]}}{"Name"{str[Pidgey]}}{"Action"{int[1]}}{"AdditionalValue"{str[outbackpidgey]}}{"Rotation"{int[0]}}{"Movement"{str[Pokeball]}}{"MoveRectangles"{recArr[]}}]}}
{"NPC"{NPC[{"Scale"{sngArr[0.5,0.5,0.5]}}{"Position"{sngArr[8,0.15,2]}}{"TextureID"{str[Pokeball]}}{"ID"{int[4]}}{"Name"{str[Rattata]}}{"Action"{int[1]}}{"AdditionalValue"{str[outbackrattata]}}{"Rotation"{int[0]}}{"Movement"{str[Pokeball]}}{"MoveRectangles"{recArr[]}}]}}
{"NPC"{NPC[{"Scale"{sngArr[0.5,0.5,0.5]}}{"Position"{sngArr[9,0.15,2]}}{"TextureID"{str[Pokeball]}}{"ID"{int[5]}}{"Name"{str[Catapie]}}{"Action"{int[1]}}{"AdditionalValue"{str[outbackcatapie]}}{"Rotation"{int[0]}}{"Movement"{str[Pokeball]}}{"MoveRectangles"{recArr[]}}]}}
These are just NPCs set to a pokeball model that do nothing, and have a script attached to their additional value. Let's look at catapie,
Code:
:if:register(brucepokemongot)
:then
@Text:It contains a~POKEMON caught by~BRUCE.
:end
:endif
This checks if we already have a pokemon from Bruce. If you do you just get text and that is it.
Code:
:if:not register(brucepokemongot)
:then
@ViewPokemonImage:10,0,1
@Text:BRUCE: You'll take~Catapie, the bug~POKEMON?
@Options:Yes,No
:when:Yes
@NPC:remove(5)
@NPC:register(outbackfosters.dat|5|remove|5)
@Register:brucepokemongot
@Register:starter3
@Text:BRUCE: I think that one's a~bloody legend too!
@Action:GetPokemon(10,5,As a gift from BRUCE,5,at Outback Steakhouse)
@Text:<playername> received~Catapie!
@Text:This shiela will heal~your pokemon*Hey true blue.
@Unregister:enteredoutback
@Unregister:enteredoutbackbutnotdone
@Register:leavingoutback
:when:No
@Text:BRUCE: Good idea, mate.~Think it over.
:endwhen
:else
@Text:It contains a~POKEMON caught by~BRUCE.
:endif
:end
This is the actual selection sequence. ViewPokemonImage will bring up a square window with the sprite of the pokemon facing you. Pokemon that can't be given or battled at the time can't be used by this either or it will crash (dragonair has a sprite but isn't actually in yet for example). it takes the national pokedex number, then 2 arguments, which might make it shiny etc, did not try them myself.
Here we have an Options, you give it the possible choices and they will be presented to the player in a list. There can be more than 2 options, I am not aware of the hard limit the game can display, if there even is one (the list could scroll already for all I know). Options can be multiple words like 'yeah sure' or 'no thanks' but you separate them out with commas, so options can't use commas (eg "crikey, mate!") so avoid fancy formatting. Whitespace matters when setting options, for example
Code:
@Options:One, Two, Three, Four
:when:One
@Text:Number One
:end
:when:Two
@Text:Number Two
:end
:when:Three
@Text:Number Three
:end
:when:Four
@Text:Number Four
:end
:endwhen
will only work for 'One', because of the spaces after commas, to make it work the first line would be
@Options

ne,Two,Three,Four
On 'Yes' we remove the NPC, this takes the same NPC index as move and turn, look at the order you defined the NPCs, that is the order in which they will spawn and be assigned index numbers. The next line seems to ensure that the game does not forget that NPC is removed.
Then we register some things and give the player the pokemon, this takes a few arguments. The first is national pokedex number for the pokemon, then level, then a description to put in the stats sheet, some number I don't know about, then a description of where it was caught.
That covers what I've got working so far, youtube incoming