Skip to content

Battle state

These fields describes the state of the battle. Some fields belongs to MainManager, but are mostly BattleControl related.

BattleControl fields

This is all the BattleControl fields.

Battle setup information

Name Type Public? Description
battlemap GameObject Yes The parent of all the battles objects notably the battle map prefab. This is a game object named Battle created on StartBattle
caller NPCControl No The Enemy NPCControl whose encounters caused this battle. This is set to the calledfrom value sent to StartBattle. If it's null, no encounter caused this battle and it was started manually
sadv int No The starting advantage value. Set to the sent adv value of StartBattle, but adv is set to this field if it's a retry. The only recognised value is 3 which means the enemy party has the advantage, other values do nothing
sdata StartUpData No The StartUpData stored during StartBattle when saveddata is false. Restored on StartBattle for a retry
saveddata bool No Whether the sdata have been saved and are ready for restoration. Set to true at the very end of StartBattle
canflee bool Yes Whether fleeing is allowed as well as retry when a GameOver occurs. Set to the canescape value sent to StartBattle

Battle flow

Name Type Public? Description
action bool Yes If true, it means an action coroutine or a method controls the battle flow making it an uncontrolled flow. Set to false on StartBattle
inevent bool Yes Tells if an EventDialogue is in progress or not. If one is, we enter an uncontrolled flow
calleventnext int No If not negative, the EventDialogue whose id is this value will be done on the next uncontrolled flow. This is only used in conjuction with an enemy party member's eventonfall when it triggers
cancelupdate bool Yes Whether updates are disabled which only happen when some kind of terminal event occurs that changes the flow to a terminal flow. Set to false on StartBattle
alreadyending bool Yes Tells when the battle is about to end via GameOver or AddExperience. Set to false on StartBattle. This protects against potential double terminal flow changes
enemy bool Yes Whether we're in the enemy phase or not (false means we're in the player phase) of the turn of a controlled flow or processing a hitaction or processing a delproj. Set to false on StartBattle
mainturn Coroutine No The AdvanceMainTurn coroutine if one is in progress (null if it's not)
delprojs DelayedProjectileData[] Yes The delayed projectiles currently active
turns int No The amount of completed main turns advanced by AdvanceMainTurn. Set to 0 on StartBattle
demomode bool No If true, indicates the battle operates in tutorial mode
gameover Coroutine No The current GameOver coroutine is one is in progress (null if it's not). Set to null on StartBattle
halfload bool Yes Whether or not StartBattle roughly got done half of the starting process. This is set to true right after calling SetLastTurns and it's used by the game to yield until this goes to true
avaliableplayers int No The amount of players that are considered free by GetFreePlayerAmmount. Set to the current amount on StartBattle and updated in specific situations
currentturn int Yes Determine the playerdata index currently selected for an action. -1 means no one is selected yet, being below playerdata length means that player index is selected and being at length or above means all players have taken their actions and the player phase is over. Set to -1 on StartBattle
lastturns int[] No The state of the player index selection cycle which starts with an array with a length of the amount of free players - 1. Advancing it means either assigning the first free slot (-1) to the player being selected or shift the elements such that it falls on the latest while the oldest is removed
receivedrelay bool[] No An array indicating which player index got relayed to via Relay which allows the tiredpart to be rendered whenever tired gets above 0 during UpdateAnim
actedthisturn bool No Tells if PlayerTurn was called at least once during the turn implying at least one player could act. Set back to false on AdvanceMainTurn
noaction int No The amount of main turns in a row where actedthisturn was false. If it reaches 5 without game over, the inactive failsafe triggers in AdvanceMainTurn
attackedally int No The playerdata index that was attacked while the FavoriteOne medal was equipped on them which will cause it to take effect during AdvanceMainTurn. If this medal isn't applicable, the value is -1
firststrike bool No Whether or not the enemy is currently acting as part of the enemy party getting the starting advantage during StartBattle
summonnewenemy bool No If true, it means that the game is in the process of summoning an enemy from the extraenemies to enemydata via SummonEnemy, called duing CheckDead. This prevents SummonEnemy to set checkingdead to null once completed to not interfere with the ongoing CheckDead and it also allows CheckDead to wait the summon is over
selfsacrifice bool No If true, it indicates that the enemy party member killed themselves during their DoAction
eatenkill bool Yes If true, it indicates that a player party member was killed by a Pitcher enemy by draining their HP which allows AdvanceMainTurn to handle this special case
lastdamage int No The last final amount of damage done at the end of DoDamage
damagethisturn int No The amount of damage the player party inflicted in the current main turn. If it gets higher than flagvar 41 (highest damage in one turn), the flagvar value is set to it before resetting the value of damagethisturn in AdvanceMainTurn
charmcooldown int No The amount of main turns that needs to pass for UseCharm to process the next charm even if one is available and could have been processed otherwise. Set to a random integer between 3 and 7 inclusive after a charm has been processed and decremented on AdvanceMainTurn

Actors information

Name Type Public? Description
partypointer int[] Yes The mapping from battle order formation to playerdata index. Aligned with the correct order on StartBattle and changed on SwitchParty or SwitchPos. Check the battle party addressing documentation for more details
partyentities EntityControl[] No Set to all the playerdata battleentity on StartBattle
alldata BattleData[] Yes All the playerdata followed by all the enemydata appended together. Set by RefreshAllData which is only called during StartBattle
enemydata BattleData[] Yes The first enemy party members data with a length up to 4 (the extra ones are stored in extraenemies). Set to a new list with the same length as the sent enemyids on StartBattle (after it was truncated to the first 4) and then filled with the actual enemy data
extraenemies List No This contains the list of enemy ids that overflows the maximum amount of enemies allowed in enemydata which is 4. It is initialised as such on StartBattle
reservedata List No The list of enemies who are no longer part of enemydata because they had died and were moved there by CheckDead since their deathtype indicated they should be moved there. Doing so prevents a full destruction which allows the enemy to be revived later or to visually have a death animation without disappearing. Reset to a new list on StartBattle
enemyfled bool No Whether at least one enemy party member fled the battle or not
lastaddedid int No The last enemy party member index added via AddNewEnemy
tempslot BattleData No The last enemy to be added in enemydata according to NewEnemy if the sent animation value isn't None
deadenemypos List No The list of the positions of previously dead enemies as found by CheckDead. It is only used by CheckDead in case extraenemies needs to be summoned in the place of the dead ones at the same positions they were before
deadmembers int[] No The array of player party members indexes whose hp is 0 or below as returned by GetDeadParty. Used during RevivePlayer to decide whether to resucitate the player party member

Attack and flow modifiers

Name Type Public? Description
dontusecharge bool No If true, the charge of the enemy party member will not be reset to 0 on EndEnemyTurn
nonphyscal bool No If true, indicate to the damage pipeline that the damages aren't physical which affects the effects of the FrostBite, SpikeBod and PoisonTouch medal
nolifesteal bool Yes If true, disables the effects of the LifeSteal medal during the damage pipeline
lockmmatter bool Yes If true, prevents the MiracleMatter medal to take effect. Set to false on StartBattle

Actions commands and blocking

Name Type Public? Description
actionroutine Coroutine No Tracks the progress of a DoCommand coroutine
doingaction bool Yes If true, an action command is in progress
successfulchain int No The amount of sucessful inputs perfomred in a LongRandomBar action commands during DoCommand
presskey int No A general purpose input id for use in DoCommand
barfill float No A number between 0.0 and 1.0 that tells the ratio of an action command's bar's filled portion which is managed by DoCommand
infinitecommand bool No If true, action commands processed by DoCommand will use their infinite variant TODO: define what this is in part 3
killinput bool No Used for the PressKey action command that when set to true, DoCommand will stop listening for inputs
commandsuccess bool Yes Tells if the last action command succeeded or tell if the player is currently blocking (tracked by GetBlock)
buttons ButtonSprite[] No A general purpose array of ButtonSprites for use in DoCommand
commandsprites SpriteRenderer[] No A general purpose SpriteRenderer array for use in DoCommand or other action commands related needs
helpboxid int No The id of the current action command whose description should be rendered in helpbox by CreateHelpBox
helpbox DialogueAnim No The 9box containing the action command description whose id is helpboxid rendered by CreateHelpBox
superblockedthisframe float No A short lived cooldown in frames that allows a super block to still count until it expires, check GetBlock to learn more. Used in the damage pipeline and maintained by LateUpdate
blockcooldown float No The amount of frames left that a block can be processed, check GetBlock for more details
hasblocked bool No If true, the damage pipeline detected the player blocked the attack with a valid block (even if FRAMEONE rules would have prevented it). This is only used in HardSeedVenus, a coroutine specific to the VenusBoss enemy
overridechallengeblock bool Yes Normally, standard blocks are disallowed when flags 615 and 15 are true (FRAMEONE is active while past the first tutorial fight), but if this field is true, it allows to override that behavior to allow them regardless of these conditions being fufilled or not

Targetting

Name Type Public? Description
avaliabletargets BattleData[] No An ephemeral array of actors to track possible targets for an action which is frequently set by calling GetAvailableTargets
forceattack int No The player party member's animid index that will be forced to be returned during GetRandomAvaliablePlayer. This is only set in the course of the Taunt skill during its DoAction logic
playertargetID int No The player party member index whom is currently targetted by the enemy. If it's -1, the enemy isn't targetting anyone
playertargetentity EntityControl No An actor to use for targetting purposes (NOTE: despite the name, it can be an enemy party member as enemies can sometimes target other enemy party members outside of the damage pipeline)
targetedenemy int No Indicates the enemy party member index that Beetle will target when using his basic attack or the HeavyStrike skill during DoAction
target int No The index of the selected target when selecting a player or enemy

Chompy informations

Name Type Public? Description
chompy EntityControl No If flags 402 is true (Chompy is with Team Snakemouth), this is initialised to a new entity created via CreateNewEntity with name chompy with the ChompyChan animid on StartBattle
chompyattack Coroutine Yes The coroutine of Chompy if it's in progress (null if it's not)
chompyaction bool No Tells if Chompy is in progress or not
chompyattacked bool No Tells if Chompy has completed during the player phase when applicable
coptions List No The list of action options available during Chompy: 0 is basic attack, 1 is do nothing, 2 is the ribbon specific attack and 3 is change ribbon
chompyoption int No The last chosen coption the last time Chompy was called
chompylock bool No If true, it prevents Chompy to be a part of the player phase even if it would normally be allowed. This is only used during DoAction specifically for the Centipede enemy

AI party informations

Name Type Public? Description
aiparty EntityControl No The entity that was created as part of AddAI if one was created
aiattacked bool No Tells if AIAttack has completed during the player phase when applicable

EXP and berries

Name Type Public? Description
estimatedexp int No The sum of all the calculated enemydata's exp
expreward int No The amount of EXP cumulated in the course of the battle that will be granted if the battle is won. Set to 0 on StartBattle
oldexp int No The last value of expreward observed since the last RefreshEXP. If it differs with the current one, RefreshEXP will be called on the next applicable Update
leveled bool No Indicates that AddExperience detected a rank up situation
moneyreward int No The amount of berries that will be dropped after the battle. Set to 0 on StartBattle

UI naviguation

Name Type Public? Description
currentaction Pick Yes The current menu being naviguated by the player. Set to BaseAction on StartBattle
currentchoice Actions Yes The current action being selected on the BaseAction menu. Set to Attack on StartBattle
itemarea AttackArea No Tells what actors are selectable to perform the current action
maxoptions int No The amount of available option on the main vine menu
lastoption int No The last selected option on the main vine menu
selecteditem int No The selected listvar option from an ItemList, set by SetItem
vineoption int No Equivalent to maxoption, but for the main vine menu value
option int Yes The current vine menu option. 0 is attack, 1 is skills, 2 is items, 3 is strategies and 4 is turn relay. Set to 0 on StartBattle. This can also be the index of an enemy or player target being selected. NOTE: the vine order is reversed in game as left goes up and right goes down in the option index with wrap around
excludeself bool Yes If true, it will cause the currentturn player to not be selectable in a currentaction of SelectPlayer in GetChoiceInput
tempskill int Yes The skill id that was confirmed from skills selection in SetItem
lastskill int No The last skill id used, set to selecteditem before its usage when confirmed in GetChoiceInput
lastaction int No The last action chosen by a player party member. Set to option on AdvanceMainTurn which keeps the last selected vine menu options since the last one chosen on the new turn
idletimer int No The amount of frames since the player idled which is used in the EXP counter update
turncooldown float No The amount of FixedUpdate cycles left before GetChoiceInput calls are allowed during PlayerTurn. Set to 5.0 in SetItem and CancelList
caninputcooldown float No A general purpose input cooldown in amount of frames left before expiring. Notably, it has an important role in GetBlock

UI rendering

Name Type Public? Description
vinebase Transform No A GameObject named Base childed to choicevine
choicevine Transform No A GameObject named Vine that is the root of the vines UI objects, childed to the battlemap and initialised on CreateVine as part of PlayerTurn
vineicons SpriteRenderer[] No The vine icons of the vine menu, childs of vinebase
cursor Transform No The selection leaf cursor. Initialised on CreateCursor which is only called on StartBattle
switchicon Transform No The parent of the UI objects that composes the switch icon which is a GameObject named switchicon childed to the GUICamera. Initialised on StartBattle
fronticon SpriteRenderer No The SpriteRenderer of the UI object named attackicon childed to the GUICamera that corresponds to the icon the front party member has. Initialised on StartBattle
hexpcounter Transform No The EXP counter shown when idling for 200+ frames when currentaction is BaseAction. Created on the first controlled update flow
expholder Transform No A GameObject named expholder childed to the GUICamera with tag DelAftBtl (destroyed on ReturnToOverworld) that holds the EXP orbs cumulated in the battle for visual rendering
lvicon Transform No The EXP icon sprite used in the UI during AddExperience
hideenemyhp bool Yes If true, the hpbar of every enemy party members's battleentity gets disabled on RefreshEnemyHP
actiontext SpriteRenderer No The UI element for the game to indicate the current action being selected which is the SpriteRenderer of a new GameObject named ActionText childed to the GUICamera. Initialised on StartBattle
smallexporbs Transform[] No The array of smaller orbs (one per 1 EXP below 10 remaining) which are instances of Prefabs/Objects/ExpOrbGUI rendered as child of the expholder
bigexporbs Transform[] No The array of larger orbs (one per 10 EXP) which are instances of Prefabs/Objects/ExpOrbGUI rendered as child of the expholder
longcancel bool No Whether the Cancel input is considered wider for rendering or not. Set to the return of InputIO.LongButton(5) on StartBattle. This is involved during the rendering of the switchicon
cancelb ButtonSprite No A ButtonSprite of the cancel input for use in UpdateText

Visual effects

Name Type Public? Description
wordroutine Coroutine No Tracks the progress of a ShowSuccessWord coroutine
commandword SpriteRenderer No The word SpriteRenderer used in ShowSuccessWord
combo int No The amount of consecutive successful action commands performed which influences visual and audio effects informing of the input successes
damcounters List No All of the currently rendered damage counters maintained by CounterAnimation, a sub coroutine of ShowDamageCounter. Set to a new list on StartBattle
defaultcounteroffset Vector3 No Always set to (0.0, 1.25, 0.0) for use in DoDamage when calculating the start of the ShowDamageCounter call
counterspriteindex int[] No Indicates the guisprites indexes of the different counter used in ShowDamageCounter. This is always {8, 40, 101}
partymiddle Vector3 No Always set to (-4.5, 0.0, 0.0) for use in DoAction
tiredpart Transform[] No Set to a new array of the transform of instances of Prefabs/Particles/Tired on StartBattle belonging to each playerdata battleentity (each is childed to their battleentity) The length is thus the same than playerdata
tskybox Material No The RenderSettings.skybox saved on StartBattle. This is used for restoring later in case of a retry
fogdist float No The value of RenderSettings.fogEndDistance saved on StartBattle if the current one needs to change. Restored from this field during ReturnToOverworld if it had a value above 0.0
dimmer SpriteRenderer No A giant black colored sprite that covers everything behind the transition during load. Initialised on StartBattle after the fade in transition and disabled with a clear color just before the fade out one
charmdance Sprite[] No The sprites Charmy uses during UseCharm. Always set to sprite 98 and 99 of Sprites/Entities/moth0 on StartBattle

Music

Name Type Public? Description
overworldmusic AudioClip No On StartBattle, this is set to MainManager.music[0].clip if the map.music[0] exists and map.musicid is not negative. This is used for restoring the music on ReturnToOverworld
overmusic float No If overworldmusic was saved, the time of that music is saved on this field if MainManager.keepmusicafterbattle is true. This is also used for restore on ReturnToOverworld
keepmusic bool Yes Towards the end of ReturnToOverworld when instance.inevent is true, it is possible to skip the default behavior of fading the current music to silence by having this field set to true before ReturnToOverworld ends which will leave the current music playing instead

Camera

Name Type Public? Description
campos Vector3 No The camtargetpos that will be set when SetDefaultCamera is called, normally Vector3.zero
camoffset Vector3 No The camoffset that will be set when SetDefaultCamera is called, normally MainManager.battlecampos
oldcamoffset Vector3 No Set to instance.camoffset on StartBattle when it's not a retry. This is used for restore later on ReturnToOverWorld
oldcamrotation Vector3 No Set to instance.camangleoffset on StartBattle when it's not a retry. This is used for restore later on ReturnToOverWorld
oldcamspeed float No Saved to instance.camspeed on StartBattle when it's not a retry. This is used for restore later on ReturnToOverWorld

Misc coroutines tracking

Name Type Public? Description
checkingdead Coroutine Yes Store diverse coroutines to track their progression (NOTE: despite the name, it's not just for CheckDead)
enemybounce Coroutine[] No A general purpose coroutines array for use in DoAction that is made to track EnemyBounce and SummonArtifact
tryenemyheal Coroutine No Tracks the progress of a TryHealEnemyItem and EnemyFlee coroutines
spitout Coroutine No The SpitOut coroutine if one is in progress which is a coroutine used by the Pitcher enemy. It is null if it's not in progress
gottaspit bool Yes When calling SpitOut (a coroutine specific to the Pitcher enemy), this needs to be set to false whenever Pitcher should spit out the player party member trapped within them
startdrop bool Yes When a Drop calls occurs, the coroutine will eventually wait for this field to become true so it can proceed with the drops

Spying

Name Type Public? Description
disablespy bool Yes If true, spying is disabled and cannot be performed on any enemy
scopeequipped bool No Whether or not the HPScope medal is equipped. Set as such on StartBattle

General purpose

Name Type Public? Description
tempdata int Yes A general purpose integer for use in DoAction meant to be set externally. This is only used for the Spuder enemy
extraentities EntityControl[] Yes A general purpose array of entities. This is only used when a VenusBoss enemy is involved

Unused fields

These fields are never referenced or never used in any meaningful ways.

Name Type Public? Description
weakenemyfound bool No UNUSED, this is only set to false at the start of DoAction and to true on TryHealEnemyItem when a heal occured, but the field is never read making it unused
actionid int No UNUSED, this is only read during the damage pipeline, but never written to making it unused
oldmusicchannel int No UNUSED
counter int No UNUSED
selection int No UNUSED
specialdefeat bool Yes UNUSED
firstaction bool Yes UNUSED
currententity EntityControl No UNUSED
oldcamtarget Transform No UNUSED, Set to instance.camtarget on StartBattle when it's not a retry
guicooldown float No UNUSED (there is logic in Update implicating it was supposed to be a cooldown that exhausts only during an Update controlled battle, but it is never practically used anywhere else making it practically unused)

MainManager fields

These fields belongs to MainManager, but they are mostly related to BattleControl's state and either have influences on the battle or they are reporting the result of the battle.

Player party

Name Type Static? Description
playerdata BattleData[] No The battle data of the players. The game keeps track of them constantly even outside of battle, but StartBattle resets their fields to a default state
tp int No The amount of TP the player party has (usually clamped from 0 to maxtp)
tpt int No The displayed amount of TP the player party has in the HUD
maxtp int No The maximum amount of TP the player can have (this is basetp + the medals effects from ApplyBadges)
basetp int No The base maximum amount of TP the player can have (this is normally 10 + all the bonuses applied from ApplyStatBonus)
bp int No The amount of MP the player party has, clamped to maxbp
maxbp int No The maximum amount of MP the player party has
partylevel int No The player party's rank, starts at 1 and maxes out at 27 under normal gameplay
partyexp int No The amount of EXP the player party has (this amount is only the one applicable for the current rank's progression)
neededexp int No The amount of EXP needed for the player party to rank up (in other words, partyexp needs to reach this value to rank up). This starts at 100

Battle modifiers

Name Type Static? Description
haltbattleload bool Yes If this is set to true right after StartBattle starts by the caller, StartBattle will wait that it goes to false right after the fade in transition played
battlelossevent bool Yes Tells if ReturnToOverworld should be called without flee if DeadParty happens

Battle state and results

Name Type Static? Description
battle BattleControl Yes The current battle (null if no battle is in progress). Set on StartBattle when it's null (meaning it wasn't a retry)
inbattle bool No Whether we are in battle or not. Set to true on StartBattle after the fade out transition and set to false in a terminal case where we know the battle will end without retry
partyorder int[] No The list of player party members by their animid ordered by their formation in the overworld. Used to align the partypointer on StartBattle
battlenoexp bool Yes Whether the last battle yielded no EXP. Set to false on StartBattle
battlefled bool Yes Tells if the battle ended by fleeing
battleenemyfled bool Yes Whether the battle ended while enemyfled was true without expreward. Set to false on StartBattle. This won't be set to true for an Enemy NPCControl encounter if any GoldenSeedling enemy were defeated
lastdefeated List No The list of enemy ids that were defeated in the last battle (amended when applicable by CheckDead)
lastitemuser int Yes The last player party member's trueid who used an item via UseItem
lastdefeated List No The list of enemy ids that CheckDead detected were killed due to their hp reaching 0 or below. Set to a new list on StartBattle and reset to a new list after processing drops during the Death of the Enemy NPCControl if the battle was caused by a regular encounter
battleresult bool Yes Whether the battle ended by winning (fleeing don't count) Set to true on StartBattle and set to false during TryFlee (when succeeding) and during DeadParty
firstbattleaction bool No This is only set to true on the first StartBattle call since the last save load and it is used to apply an optimisation that involves a dummy DoAction call. This is only needed on the first StartBattle call so when true, this optimisation doesn't happen again