Categories
Article

Arcade-story Path for Ikemen Go

Arcade path for Ikemen Go

Arcade path is a new tool in Ikemen Go that allows us to create specific routes with battles that have certain conditions for Single and Team arcade modes.
Also, we can call storyboards from there. Thanks to this, we can enhance the arcade single-player experience for our games.


a fighting video game with characters fighting each other

The objective of this tutorial

If you feel grateful for this tutorial, go to my YouTube channel and subscribe please!!

This tutorial will guide you to create an arcade path with matches against fixed teams(KOF style) in different team modes, Simul, Turns, single, and Tag mode. The teams will be selected from pools of fixed teams(for example, Kyo, Benimaru, Goro) that will be chosen at random. Check this video on my Youtube channel to see the module in action

The matches for this path will be like this.
1- To start, we will have 3 matches against fixed teams like in some “The King Of Fighters” games in TURNS mode.
2- 1 round mid-boss match against two characters on TAG mode. This is like in SVC Chaos where you fight against a mid-boss.
3- 2 more fights against 3 character teams. Choose from the second pool of fixed teams.
4- 1 round fight against two characters in Simul.
5- 1 round last `final boss` fight.
Conditions
Teams should never repeat, the code will take the last team you fought with out of the pool and choose a new one for the next match.
Team Menu for the CPU side in Team Arcade is not available. Meanwhile, the player can still play SIMUL, TAG, TURNS, or SINGLE.
Single Arcade will work with no change. It is better to remove it.
The goal is to emulate the `KOF` arcade style.

Let’s start!

Download the files needed for this by clicking here. Feel free to change them to your needs. By the way thanks to Wreq!. He was very kind to provide the base code to me.
Then, after we got the files let’s see what they are for:
A) snkArcadePath.lua: This is the file that contains all the path instructions. The language used is LUA. I highly recommend that this be treated carefully since any error breaks the arcade mode. Observe it carefully, change the file, save and if it works, create a backup.
This file can be copied to your char folder if you are planning a custom `arcade path` for that char or in the data folder if you want to use it as a generic `arcade path` for all your roster.
You install it on the char by adding this line below [Arcade] in the char.def using the `arcadepath` parameter.

[Arcade]
intro.storyboard=
ending.storyboard=
arcadepath = data/snkArcadePath.lua

B) no_team_menu_cpu_arcade.lua: This file removes the `Team Mode` menu from the CPU side in `Team Arcade` and the CPU team quantity of characters to 3. The idea is not to allow the user to select `Single` or any other mode that is just not according to the experience. You can change this file if you want the first fight to simul, single, etc.
Right now `Arcade Path` has an issue, if you set the first fight in the `snkArcadePath.lua` to be teams but the player chooses Single, the rest of the TURNS mode’s fights will be single, ruining the experience.
This file is easy to install, only copy it inside the `mod` folder that is located in the `external` folder. If you want to modify it, I let the lines you need to tweak fully commented.

Optionally, you can go to your system.def and disable the Single Arcade Mode.

menu.itemname.menuarcade.arcade = ;

Understanding the `Arcade Path` File

Open the Arcade Path file with any text editor(please do not use Notepad, Notepad++ is ok). The first thing you notice is a LUA table that contains lines with char’s names.
Since this is NOT an LUA tutorial, I won’t waste time explaining the code deeply. Just notice the comments I left and notice that there are blocks separated by commas(,). Every block can be called individually using `teams[number]`. Use teams[1] to call chars from the first block. Using that order you can call more chars from other blocks. For example, teams[5] are for calling chars of the fifth block.
Every line inside a block is another object with its own index. You can use `teams[1],number` to call any of these `objects` in the p2char parameter inside the launchfight{} function. For example, `teams[2],2` equals to call to the second line of the second block, in other words, “N-Geese”,”svc_vega”

The launchfight{} function

This function is to launch matches with features that would not be possible in the standard game modes. The Ikemen Go wiki already covers all the parameters so I will cover only the ones used on the snkArcadePath.lua. The parameters should go inside the brackets {} of the launchfight function separated by a comma.

p2char = {“mikebison”}

Here goes the character the CPU will use. Important: the name used here is the one that is set in the select.def. In the snkArcadePath.lua. I didn’t use the name. I use a random function that selects the value for this parameter from a table. We’ll see that later.

p2numchars = number

Here goes the number of characters the CPU team will have. To get the desired results you need to choose a team mode that fits the number of chars. No point in setting this parameter to 1 and then setting the next parameter to TAG, Simul, or Teams.

p2teammode = “tag”

The team mode the CPU team will use. Use the same values you use on CNS/ZSS.

p2rounds = number

The number of rounds the CPU has to lose to finish the match.

arcade path code explained

The conditionals

Conditionals are the circumstances in which we want to launch the matches. As you get familiar with LUA you can use more of these later. Here I’m gonna explain the basic ones. I’ll expand this section in the future with new circumstances like score, won matches, number of hypers landed on the CPU, etc.

for i = matchno(), 3 do

This is a simple loop that returns true if the match number is 1, 2, or 3. Because is the first conditional declared in the file, matchno() equals 1.

if matchno() == 4 then

This returns true if you are in match number 4(matchno()). Continuing the game after losing or changing your chars from the pause menu do NOT alter matchno().

for i = matchno(), 6 do

Same as the first loop declared but for the 5th and 6th matches. Since this conditional is declared after the block inside the `if matchno() == 4 then` one can expect match number is 5(matchno() == 5).

Note: If `for` loops are hard to read or understand for you, keep using `if matchno() == number then` for every match on your `Arcade Path`.

Choosing char/team then discarding it!

I wrote a small code that chooses one line of every block inside the `teams` table. I’ll explain it here just in case you need to modify it for your own purposes.
For this section, it is important for you to read about the table `teams` again. Click here.

local randomTeam = math.random(1, #teams[1])

This is a simple var assigning. If gives the local `randomTeam` a random value between 1 and the number of lines present in the first block of the `teams` table. Remember this table is declared at the start of the file.

local randomTeam = math.random(1, #teams[1])

This is a simple var assigning. If gives the local variable `randomTeam` a random value between 1 and the number of lines present in the first block of the `teams` table. Remember this table is declared at the start of the file.

local chosenTeam = teams[2][randomTeam]

Another var assigning. If gives the local variable `chosenTeam` the value of the line and the block selected by the previous returned random number.

table.remove(teams[2],randomTeam)

This LUA function removes the line that was assigned previously to the var chosenTeam from the block. This way this line cannot be chosen again in the next match.
Remember the launchfight{ } parameter `p2char = {“mikebison”}~`? These are the variables that define the value of that parameter.

For example:
`local randomTeam = math.random(1, #teams[3])` returns 3
`local chosenTeam = teams[3][randomTeam(returned 3 in the previous line)]` equals the third line of the third block( {“sagat”,”Rugal_LB”,”N-Geese”} )
then p2char = chosenTeam, is like typing `p2char = {“sagat”,”Rugal_LB”,”N-Geese”},

code that creates random values on arcade path

As always I provide a copy of Ikemen Go with the module working. You can download it here.

Warning: If you receive the “Congratulations” screen despite your `arcade path` is not finished is because you already fight every character declared in the select.def. Only press any button to continue to the next fight. This will not happen if you have more characters. So make wise use of your roster and do not create extremely long `arcade paths`

To do list

Add more conditionals. Use them to launch matches based based on score, variables, character names, etc

Special thanks

Wreq!, thanks for that piece of code you shared with me!!
All the guys in the Ikemen Go Spanish-spoken server.
Gacel, K4thos, and all the devs working on Ikemen Go.
To character creators:

Mouser – Sagat
Vans – Rugal
Jin – Nightmare Geese
Hh – M. Bison/Choi
Ahuron -Genjyuro
Sepp – Mike Bison
Raposo – Vega

Anyone I forgot to mention, I apologize.

Have fun!!