Setup MkDocs
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1 +1,2 @@
|
||||
/.idea/*
|
||||
.idea/
|
||||
site/
|
||||
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="UserContentModel">
|
||||
<attachedFolders />
|
||||
<explicitIncludes />
|
||||
<explicitExcludes />
|
||||
</component>
|
||||
</project>
|
||||
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RiderProjectSettingsUpdater">
|
||||
<option name="vcsConfiguration" value="2" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -1,52 +0,0 @@
|
||||
# Skills list type
|
||||
|
||||
Display the list of skills that a party member has access to.
|
||||
|
||||
## Options generation
|
||||
|
||||
`listvar` will be the skills array field of the corresponding playerdata (-1, -2 and -3 means 0, 1 and 2 respectively). They corresponds the skills id of skilldata.
|
||||
|
||||
The playerdata's skills are expected to be refreshed by using RefreshSkills which takes into account the party's rank and [Medal](../../Enums%20and%20IDs/Medal.md)s equipped.
|
||||
|
||||
`listredirect` is overridden to null.
|
||||
|
||||
## Option's [SetText](../../SetText/SetText.md) input string
|
||||
|
||||
This behavior differs depending if we were paused or unpaused.
|
||||
|
||||
### When paused
|
||||
|
||||
A first SetText call is done for the tp cost in non [Dialogue mode](../../SetText/Dialogue%20mode.md) where the input string is |[sort](../../SetText/Commands/Individual%20commands/Sort.md),10||[Font](../../SetText/Commands/Individual%20commands/Font.md),0| followed by the cost padded left to 2 characters by ` ` or ` -` if there is no cost. This is rendered towards the right of the item bar.
|
||||
|
||||
After, if the TP cost isn't 0, a TP icon (or HP icon if Life Cast is equipped) is rendered on the far right of the item bar.
|
||||
|
||||
Finally, the input string is set to |[single](../../SetText/Commands/Individual%20commands/Single.md)\| followed by the skill's name from `skilldata`.
|
||||
|
||||
The position of the input string is overridden to (-0.75, -0.2) and the bar height used for calculating the y position of the down arrow is overridden to -0.9.
|
||||
|
||||
### When unpaused
|
||||
|
||||
A first [SetText](../../SetText/SetText.md) call is done for the tp cost in non [Dialogue mode](../../SetText/Dialogue%20mode.md) where the input string is |[sort](../../SetText/Commands/Individual%20commands/Sort.md),10||[size](../../SetText/Commands/Individual%20commands/size.md),0.75||[Font](../../SetText/Commands/Individual%20commands/Font.md),0| followed by |[color](../../SetText/Commands/Individual%20commands/Color.md),1| if the player doesn't have enough TP for the skill followed by the cost padded left to 2 characters by ` `. This is rendered towards the right of the item bar.
|
||||
|
||||
After, if the TP cost isn't 0, a TP icon (or HP icon if Life Cast is equipped) is rendered on the far right of the item bar.
|
||||
|
||||
Then, a string is built with [Icon](../../SetText/Commands/Individual%20commands/Icon.md) commands according to some medals being equipped (this is appended in the respective order if the medal is equipped):
|
||||
|
||||
* Needle Toss and Needle pincer: ` ` + |[size](../../SetText/Commands/Individual%20commands/size.md),0.55,0.6| + |[Icon](../../SetText/Commands/Individual%20commands/Icon.md),192| if Electric Needles, + |[Icon](../../SetText/Commands/Individual%20commands/Icon.md),191| if Sleepy Needles and + |[Icon](../../SetText/Commands/Individual%20commands/Icon.md),193| if Poison Needles + ` ` + |[size](../../SetText/Commands/Individual%20commands/size.md),0.55,0.6| + |[Icon](../../SetText/Commands/Individual%20commands/Icon.md),194| if A.D.B.P Enhancer
|
||||
* Tornado Toss and Hurricane Toss: ` ` + |[size](../../SetText/Commands/Individual%20commands/size.md),0.55,0.6| + |[Icon](../../SetText/Commands/Individual%20commands/Icon.md),194| if A.D.B.P Enhancer
|
||||
* Secret Stash and Sharing Stash: ` ` + |[size](../../SetText/Commands/Individual%20commands/size.md),0.55,0.6| + |[Icon](../../SetText/Commands/Individual%20commands/Icon.md),218| if Heal Plus
|
||||
* Taunt: ` ` + |[size](../../SetText/Commands/Individual%20commands/size.md),0.55,0.6| + |[Icon](../../SetText/Commands/Individual%20commands/Icon.md),195| if Deep Taunt
|
||||
|
||||
Finally, the input string is set to the skill's name from skilldata prepended with |[color](../../SetText/Commands/Individual%20commands/Color.md),1| if the player doesn't have enough TP for the skill and appended with the icons string.
|
||||
|
||||
The x position of the text is overridden to -2.65.
|
||||
|
||||
## Description box rendering
|
||||
|
||||
It uses the default rendering scheme described in [Description box rendering](../ShowItemList%20Life%20Cycle/Description%20box%20rendering.md) where the text is the skill's description obtained from skilldata using the skill id.
|
||||
|
||||
## Confirmation handling (during battle)
|
||||
|
||||
The skill cost will then be checked if the player has enough and if they can use the skill in general. The cost is stored in [flagvar](../../Flags%20arrays/flagvar.md) 0. If the skill can be used and the player can pay the cost, SetItem is called on the battle with the selected skill and DestroyList is called which ends the processing of the list.
|
||||
|
||||
If the skill can't be used, the buzzer sound will play. In addition, if the player couldn't pay the cost and the skill wasn't Hard Charge, the appropriate hud sprite will flash red (the TP one if it's TP cost or the party member's HP if we have Life Cast).
|
||||
10
README.md
10
README.md
@@ -1,13 +1,12 @@
|
||||
# Bug-Fables-Internal-Docs
|
||||
|
||||
A repository to aggregate documentation about Bug Fables's inner working
|
||||
|
||||
This repos contains all the documentation I have accumulated throughout the years as well as new ones that will be pushed here as I learn more about the game. The purpose of this repos is to have a centralised place to consult my docs. It also prevent a situation where these files are lost and it provides a source that doesn't involve the wiki or the Discord. I will seek plans to present the info better such as GitHub pages in the future, but for now, I just put the raw information in markdown which will be refined as I continue working on the game's internals.
|
||||
|
||||
The reason information shouldn't be from the wiki or the discord is because the former has proven to not be as reliable and it is difficult to consult or edit while the later is complex to lookup and isn't guaranteed to always remain available. Informations about the internals are going to be ESSENTIAL for anyone looking to mod anything and for myself in my current project so they MUST be provided in a central place that everyone has access to. This repos also has a [wiki](https://github.com/aldelaro5/Bug-Fables-Internal-Docs/wiki) which will be more focussed on important procedures such as extracting assets, decompiling and debugging the game.
|
||||
|
||||
This repos will get updates as more information is aggregated and figured out so it isn't lost in time. I may accept pull requests or issues (in case of typos or innacurate informations), but everything needs to provide a way for me to validate the infoormation.
|
||||
|
||||
For the Obsidian notebook version of the docs, check the [release](https://github.com/aldelaro5/Bug-Fables-Internal-Docs/releases) section of this repos.
|
||||
This repos will get updates as more information is aggregated and figured out so it isn't lost in time. I accept pull requests or issues (in case of typos or innacurate informations), but everything needs to provide a way for me to validate the infoormation.
|
||||
|
||||
## What is allowed in this repos and what isn't
|
||||
This repos will ONLY contain the informations that describes the interface of the game. This mostly includes:
|
||||
@@ -30,7 +29,4 @@ This isn't just for obvious legal reasons (mainly the code part), but also becau
|
||||
- For code, It can leavy the wrong impression without understanding the proper context of how the game was made. This is because there are parts of the code that suffers from tight coupling or have a monolithic approach which can lead to developmental issues which affects modding. This context explains everything, but is easily overlooked and it isn't really necessary to mention to document the internals unless it becomes historically relevant (such as described a known issue with how it happened). Avoiding to share code avoids this perception problem.
|
||||
- For data files, it's simply because there's no point: the formats are not made to be human readable because automated tools generated them. The goal of this repos is to allow them to be readable by external tools or by a human manually. As for why not providing aggregated versions of them, it's because they arguably don't belong in a docs repos which should only contain the specification of the data, but not its implementation. I rather decouple the 2 since the data won't change, but the knowledge of it can.
|
||||
- For Unity assets, it's just because the actual instances (mainly the maps prefabs) don't matter as much for this repos. What matters is how they work so one can pick an actual instance and understand what it is telling the game to do.
|
||||
- For anything else, it's not needed + the less files I share from the game, the better.
|
||||
|
||||
## About deprecated documentation
|
||||
The OLD directory contains documents that were made in the pas, but are scheduled to be rewritten from scratch. Information within are provided for convenience, but should be taken with a grain of salt while they are being rewritten.
|
||||
- For anything else, it's not needed + the less files I share from the game, the better.
|
||||
@@ -1,19 +0,0 @@
|
||||
# End
|
||||
|
||||
Signal to SetText to not wait for a confirmation input at the end after the input string has been fully processed in [Dialogue mode](../Dialogue%20mode.md) mode
|
||||
|
||||
## Syntax
|
||||
|
||||
````
|
||||
|end|
|
||||
````
|
||||
|
||||
## Parameters
|
||||
|
||||
None
|
||||
|
||||
## Remarks
|
||||
|
||||
In [Dialogue mode](../Dialogue%20mode.md) mode, SetText would normally yield control to the game by setting [waitinput](../Global%20vars%20used/waitinput.md) to true in the [Dialogue Cleanup](../Life%20Cycle.md#dialogue-cleanup) phase. This command allows to bypass this behavior and prevents the yield entirely. Additionally, if the caller was an [Item](../../Enums%20and%20IDs/Items.md), it will call Death on it. While it is generally preferred to place this command on the actual end of the line if the caller is an Item, as far as skipping the wait behavior, it does not matter where this command is placed. All it does is set the flag to skip it for later.
|
||||
|
||||
This commands is only applicable in [Dialogue mode](../Dialogue%20mode.md) mode. It will not do anything in non dialogue mode.
|
||||
@@ -1,35 +0,0 @@
|
||||
# Font
|
||||
|
||||
Change the current [fonttype](../fonttype.md) used by SetText from now on.
|
||||
|
||||
## Syntax
|
||||
|
||||
(1)
|
||||
|
||||
````
|
||||
|font,fonttype|
|
||||
````
|
||||
|
||||
(2)
|
||||
|
||||
````
|
||||
|font,fonttype,lockcontrol|
|
||||
````
|
||||
|
||||
## Parameters
|
||||
|
||||
### `fonttype`: int
|
||||
|
||||
The [fonttype](../Notable%20states.md#fonttype.md) to set the current one to. This must be a valid fonttype or an exception will be thrown.
|
||||
|
||||
### `lockcontrol`: `lock` | var
|
||||
|
||||
Set whether or not to honor [fonttype](../Notable%20states.md#fonttype.md) overrides rules concerning the current [languageid](../languageid.md) during [Letter processing](../Life%20Cycle.md#letter-processing). A value of `lock` indicates to not respect them while any other value indicates to honor them. This can be toggled back and forth during the SetText call, but the default at the start of the SetText call is to honor these rules.
|
||||
|
||||
The default value is to not change this setting and keep using the current state of it.
|
||||
|
||||
## Remarks
|
||||
|
||||
Normally, during the [Setup](../Life%20Cycle.md#setup) phase, the font gets overridden to `Uzura` in `Japanese` and to `ONEMobilePOP` in `Korean`, but this command allows to override this behavior. It can even disregard it completely by placing this command at the start of the input string.
|
||||
|
||||
However, doing so would still allow [Letter processing](../Life%20Cycle.md#letter-processing) to override the [fonttype](../Notable%20states.md#fonttype.md) to the same values under the same languages if in [Dialogue mode](../Dialogue%20mode.md) while not processing a [numberprompt](NumberPrompt.md). The `lockcontrol` allows to also override this which effectively mean that this command allows complete control over which [fonttype](../Notable%20states.md#fonttype.md) to use regardless of the [languageid](../languageid.md).
|
||||
@@ -24,7 +24,7 @@ First, all objects in `animspecific` are destroyed if any were present. Then, th
|
||||
* Ruffian: This only applies if the `extras` have not been initialised. This initialises 4 of them which is his chains (the first 3) and ball (the 4th one). It will then setup them in a specific way such that the first 3 are linked together to the ball. The ball gets a FollowerLite and a ShadowLite. It also considers `hologram` for the materials.
|
||||
* Strider: Initialises the `extraanims` if they weren't already to 4 new elements and the `extras` to being the second child of the model and have all the children of that be the `extraanims`. This simply setups the legs and their animator. Finally the only `extras` gets its scale adjusted on the Z axis to 1.0 unless the [animstate](animstate.md) is `Walk` or `Chase` in which case, the value is 0.5. This creates a constricting effects on his legs when needed
|
||||
* DeadLanderC: `extraanims` is initialised to 4 new elements being the second, third, fourth and fifth child of the `model`. Then, specific animations are played on them depending of the [animstate](animstate.md). This essentially manages the legs.
|
||||
* Scorpion: Same then Spuder, but before, the `basestate` and `walkstate` are overridden to 150 and 151 respectively if the current [Area](../../../SetText/Commands/Individual%20commands/Area.md) is Giant's Lair. This is what makes them look different in that area.
|
||||
* Scorpion: Same then Spuder, but before, the `basestate` and `walkstate` are overridden to 150 and 151 respectively if the current [Area](../../../Enums%20and%20IDs/librarystuff/Areas.md) is Giant's Lair. This is what makes them look different in that area.
|
||||
* Spuder, DivingSpider and PeacockSpider: This is a very complex management of the legs. Notably, `overridejump` is set to false all the time and `extraanims` is initialised with the legs's animators. This also manages special animation clips to play on the legs.
|
||||
* Venus: Setup 6 `extraanims` being all the children of the second child of the `model` with their speed being set to 1 unless the [animstate](animstate.md) is 100 or 101 in which case, the value is 0. This simply manages her legs animations
|
||||
* BeeBot: Ensure its wings's StaticModelAnim are enabled when the `icecube` isn't present or disabled if it is with fixed angles.
|
||||
@@ -1,6 +1,6 @@
|
||||
# MapControl's CreateEntities
|
||||
|
||||
MapControl's Start contains a call to a method called CreateEntities which will initialise many [Entity](../Entity.md) defined in preset data that are defined in [entitydata directory](../TextAsset%20Data/Entity%20data.md#`entitydata`%20directory). This directory contains entity data that applies to each specific [Maps](../../Enums%20and%20IDs/Maps.md) hence why this creation process happens on MapControl. The [EntityControl Creation](EntityControl%20Creation.md) process is exactly the same, but the different fields from map data augments this process right before the entity is fully created and [Start](Start.md) occurs later on the start of the next frame. Exclusive to this scheme of creating entities is making them NPC with [NPCControl](../NPCControl/NPCControl.md) as the fields loaded includes both [EntityControl](EntityControl.md) and [NPCControl](../NPCControl/NPCControl.md) All the data ends up in the `entities` array of the MapControl which can be used for tracking. They are loaded in the order they are defined in TextAsset data which means the 0 indexed position can be used as an id. This is frequently done as part of many [SetText](../../SetText/SetText.md) commands.
|
||||
MapControl's Start contains a call to a method called CreateEntities which will initialise many [Entity](../Entity.md) defined in preset data that are defined in [entitydata directory](../../TextAsset%20Data/Entity%20data.md#`entitydata`%20directory). This directory contains entity data that applies to each specific [Maps](../../Enums%20and%20IDs/Maps.md) hence why this creation process happens on MapControl. The [EntityControl Creation](EntityControl%20Creation.md) process is exactly the same, but the different fields from map data augments this process right before the entity is fully created and [Start](Start.md) occurs later on the start of the next frame. Exclusive to this scheme of creating entities is making them NPC with [NPCControl](../NPCControl/NPCControl.md) as the fields loaded includes both [EntityControl](EntityControl.md) and [NPCControl](../NPCControl/NPCControl.md) All the data ends up in the `entities` array of the MapControl which can be used for tracking. They are loaded in the order they are defined in TextAsset data which means the 0 indexed position can be used as an id. This is frequently done as part of many [SetText](../../SetText/SetText.md) commands.
|
||||
|
||||
This page only describe the behaviors outside of loading the data as there are some notes worth to talk about.
|
||||
|
||||
@@ -41,7 +41,7 @@ These fields manages the animations according to the animid.
|
||||
|animstate|int|Yes|The [animstate](Animations/animstate.md) of the entity, dictates the animation clip to play on the controller of the anim field, set via [CreateEntities](CreateEntities.md) if it is an item|
|
||||
|basestate|int|Yes|The [animstate](Animations/animstate.md) to consider as the `Idle` one which overrides the default of 0, assigned during [CheckSpecialID](Notable%20methods/CheckSpecialID.md) when applicable|
|
||||
|walkstate|int|Yes|The [animstate](Animations/animstate.md) to consider as the `Walk` one which overrides the default of 1, assigned during [CheckSpecialID](Notable%20methods/CheckSpecialID.md) when applicable|
|
||||
|changedstate|bool|Yes|Determines if the [animstate](Animations/animstate.md) was changed externally and thus should bypass the landing on ground logic of [UpdateAirAnim](Update%20process/UpdateAirAnim.md) for all entities with an npcdata. This is only used in the [Anim](../../SetText/Commands/Individual%20commands/Anim.md) SetText command.|
|
||||
|changedstate|bool|Yes|Determines if the [animstate](Animations/animstate.md) was changed externally and thus should bypass the landing on ground logic of [UpdateAirAnim](Update%20process/UpdateAirAnim.md) for all entities with an npcdata. This is only used in the [Anim](../../SetText/Individual%20commands/Anim.md) SetText command.|
|
||||
|animspeed|float|Yes|The time in second to transition between animations during [SetAnim](Animations/SetAnim.md)|
|
||||
|anim|Animator|No|The animator the entity uses. This will use the controller of the animid field. This is first assigned on [Start](Start.md) or [AddModel](Notable%20methods/AddModel.md) , but it can be changed later via ForceAnimator (more details at [Animator change](EntityControl%20Methods.md#animator-change))|
|
||||
|hasiceanim|bool|No|Whether or not the entity has an ice animation clip present to play when the inice field is true. Assigned on [CheckSpecialID](Notable%20methods/CheckSpecialID.md) from `endata`|
|
||||
@@ -225,7 +225,7 @@ These fields provides more information about who this entity is.
|
||||
|mainparty|bool|Yes|Determines if the entity is part of the main party when created which means the party members that follow the player excluding the player itself. Must be set externally and is only used in CloseMove during a [Follow](Notable%20methods/Follow.md)|
|
||||
|playerentity|bool|No|Determines if this entity is related or is the player, assigned to true on [Start](Start.md) if the entity has the `Player` or `PFollower` tag|
|
||||
|isfollower|bool|No|Determines if the entity is a follower, assigned on [LateStart](Notable%20methods/LateStart.md) when the entity has the `PFollower` tag|
|
||||
|tempfollower|bool|No|Determines if the entity is a temporary follower, set to true when the entity was created using [AddFollower](../../SetText/Commands/Individual%20commands/Addfollower.md)|
|
||||
|tempfollower|bool|No|Determines if the entity is a temporary follower, set to true when the entity was created using [AddFollower](../../SetText/Individual%20commands/Addfollower.md)|
|
||||
|battle|bool|Yes|Determines if this is a battle entity, must be set externally or during [CheckSpecialID](Notable%20methods/CheckSpecialID.md) when applicable|
|
||||
|battleid|int|Yes|The index of the entity in the current battle's enemydata, -1 when not applicable|
|
||||
|
||||
@@ -264,7 +264,7 @@ These fields manages the concept of an entity being "active" which means they re
|
||||
|camdistance|float|No|The distance from the entity to the main camera, updated every 3 frames on [LateUpdate](Update%20process/Unity%20events/LateUpdate.md)|
|
||||
|campos|Vector3|No|The viewport position of the entity from the main camera, updated every 3 frames on [LateUpdate](Update%20process/Unity%20events/LateUpdate.md)|
|
||||
|alwaysactive|bool|Yes|Determines if this entity should always be considered active by overriding incamera to true during UpdateCamPos (called by [LateUpdate](Update%20process/Unity%20events/LateUpdate.md)). This also forces the forcetimer to decrease and [UpdateHeight](Update%20process/UpdateHeight.md) to be called from [LateUpdate](Update%20process/Unity%20events/LateUpdate.md) when they apply. Assigned to true on [Start](Start.md) with the `ALW` [Modifiers](Modifiers.md) or during [CheckSpecialID](Notable%20methods/CheckSpecialID.md) when applicable|
|
||||
|activeonpause|bool|Yes|Determines if this entity should receive updates and late updates when paused, minipaused, [message](../../SetText/Global%20vars%20used/message.md) lock being active or dead, assigned to true on [Start](Start.md) with the `PAU` [Modifiers](Modifiers.md)|
|
||||
|activeonpause|bool|Yes|Determines if this entity should receive updates and late updates when paused, minipaused, [message](../../SetText/Notable%20states.md#message) lock being active or dead, assigned to true on [Start](Start.md) with the `PAU` [Modifiers](Modifiers.md)|
|
||||
|
||||
## Shadow
|
||||
|
||||
@@ -304,7 +304,7 @@ These fields are specific to item entities.
|
||||
|item|bool|No|Determines if this entity is an item. This must be set internally when applicable or on [CreateEntities](CreateEntities.md) if it is an item|
|
||||
|showitem|bool|No|Indicates that this entity must render an item sprite. This can be set to true on Start using the `shwKEY` [Modifiers](Modifiers.md)|
|
||||
|itemstate|int|Yes|The [Items](../../Enums%20and%20IDs/Items.md) or [Medal](../../Enums%20and%20IDs/Medal.md) id, only applicable when item is true|
|
||||
|destroytype|DeathType|Yes|The type of death process used for [Death](Notable%20methods/Death.md). This is normally loaded from [entitydata directory](../TextAsset%20Data/Entity%20data.md#`entitydata`%20directory)|
|
||||
|destroytype|DeathType|Yes|The type of death process used for [Death](Notable%20methods/Death.md). This is normally loaded from [entitydata directory](../../TextAsset%20Data/Entity%20data.md#`entitydata`%20directory)|
|
||||
|
||||
## Drop
|
||||
|
||||
@@ -326,12 +326,12 @@ These fields are related to the use of the bubble shield.
|
||||
|
||||
## Dialogue bleep
|
||||
|
||||
These fields dictate the default sound to use during [SetText](../../SetText/SetText.md)'s bleep and its [Bleep](../../SetText/Commands/Individual%20commands/Bleep.md) command.
|
||||
These fields dictate the default sound to use during [SetText](../../SetText/SetText.md)'s bleep and its [Bleep](../../SetText/Individual%20commands/Bleep.md) command.
|
||||
|
||||
|Name|Type|External set?|Description|
|
||||
|----|----|-------------|-----------|
|
||||
|dialoguebleepid|int|Yes|The bleep sound id to use in the [Bleep](../../SetText/Commands/Individual%20commands/Bleep.md) [SetText](../../SetText/SetText.md) command, assigned from `endata` on [Start](Start.md) during SetDialogueBleep|
|
||||
|bleeppitch|int|Yes|The bleep pitch to use in the [Bleep](../../SetText/Commands/Individual%20commands/Bleep.md) [SetText](../../SetText/SetText.md) command, assigned from `endata` on [Start](Start.md) during SetDialogueBleep|
|
||||
|dialoguebleepid|int|Yes|The bleep sound id to use in the [Bleep](../../SetText/Individual%20commands/Bleep.md) [SetText](../../SetText/SetText.md) command, assigned from `endata` on [Start](Start.md) during SetDialogueBleep|
|
||||
|bleeppitch|int|Yes|The bleep pitch to use in the [Bleep](../../SetText/Individual%20commands/Bleep.md) [SetText](../../SetText/SetText.md) command, assigned from `endata` on [Start](Start.md) during SetDialogueBleep|
|
||||
|
||||
## Late transform
|
||||
|
||||
@@ -375,7 +375,7 @@ For `backsprite`, the assignment happens regardless if `forceback` is true, but
|
||||
* `noback` is false
|
||||
* `lockback` is false (this field is unused so this is always the case normally)
|
||||
* The entity is not `talking`
|
||||
* The [message](../../SetText/Global%20vars%20used/message.md) lock is released
|
||||
* The [message](../../SetText/Notable%20states.md#message) lock is released
|
||||
|
||||
As for the new value of `backsprite`, it's the value of the z viewpoint of `other` + -0.5 > the z viewpoint of the `transform`. Basically, it's true if after placing `other` 0.5 units towards the camera, it remains positioned more away from the camera than the entity, false otherwise.
|
||||
|
||||
@@ -15,7 +15,7 @@ Here are all the modifiers that are known:
|
||||
|FxdCol|A lighter version of Fixed which does everything it does except without disabling the ccol so it stays enabled|
|
||||
|ALW|Sets `alwaysactive` to true on [Start](Start.md) which forces `incamera` to true and the entity remains active even out of the camera's range|
|
||||
|ALF|Sets `alwaysflip` to true on [Start](Start.md) which calls [UpdateFlip](Update%20process/UpdateFlip.md) every LateUpdate|
|
||||
|PAU|Sets `activeonpause` to true on [Start](Start.md) which allows the entity to receive updates and late updates on pause, minipause, [message](../../SetText/Global%20vars%20used/message.md) lock and being dead|
|
||||
|PAU|Sets `activeonpause` to true on [Start](Start.md) which allows the entity to receive updates and late updates on pause, minipause, [message](../../SetText/Notable%20states.md#message) lock and being dead|
|
||||
|HIDE|Sets `hideinside` to true on [Start](Start.md) TODO: Involves [NPCControl](../NPCControl/NPCControl.md)|
|
||||
|ROT|Sets `lockrotater` to true on [Start](Start.md) which locks the y angle of the rotater. TODO: Involves [NPCControl](../NPCControl/NPCControl.md)|
|
||||
|ShwEm|Sets `alwaysemoticon` to true on [Start](Start.md) TODO: mostly involves [NPCControl](../NPCControl/NPCControl.md)|
|
||||
@@ -1,6 +1,6 @@
|
||||
# Special animid startup
|
||||
|
||||
This is the part of [CheckSpecialID](Notable%20methods/CheckSpecialID.md) that deals with specific [AnimIDs](../../Enums%20and%20IDs/AnimIDs.md):
|
||||
This is the part of [CheckSpecialID](CheckSpecialID.md) that deals with specific [AnimIDs](../../../Enums%20and%20IDs/AnimIDs.md):
|
||||
|
||||
* `GoldenSeedling`: setups the `Prefabs/Particles/GoldStars`
|
||||
* `RizGrandpa`: creates a line to render as a fishing rod's line
|
||||
@@ -15,10 +15,10 @@ This is the part of [CheckSpecialID](Notable%20methods/CheckSpecialID.md) that d
|
||||
* `None`: the `rigid`'s gravity is disabled on top of its constraint being set to freeze all. Additionally, the `ccol` is disabled
|
||||
* `CoilyVine`: the same thing than `None` on top of overriding the check to load a prefab model for later
|
||||
* `BeeBoss`: the `Prefabs/Particles/BeeBossBottomSmoke` from the root of the asset tree is setup as a child to `shadowtransform`. `shadowtransform`'s local position is then set to 0
|
||||
* `BeeBot`: ensures that the enemydata\[battleid\].data has one element which contains a random number being either 0 or 1. From there [UpdateAnimSpecific](Animations/AnimSpecific.md#updateanimspecific) is called
|
||||
* `CrystalBerry`: `Prefabs/Objects/CrystalBerry` from the root of the asset tree is added as model via [AddModel](Notable%20methods/AddModel.md) with the offset coming from `endata`'s `modeloffset`. The `animid` is overriden to 3 with a `spin` set on the y axis and `item` set to true
|
||||
* `BeeBot`: ensures that the enemydata\[battleid\].data has one element which contains a random number being either 0 or 1. From there [UpdateAnimSpecific](../Animations/AnimSpecific.md#updateanimspecific) is called
|
||||
* `CrystalBerry`: `Prefabs/Objects/CrystalBerry` from the root of the asset tree is added as model via [AddModel](../Notable%20methods/AddModel.md) with the offset coming from `endata`'s `modeloffset`. The `animid` is overriden to 3 with a `spin` set on the y axis and `item` set to true
|
||||
* `Seedling`: the speed is set to 2.5 if it was 0.0 or below on top of the `npcdata`'s `speedmultiplier` being set to 1.0 if it is present
|
||||
* `AngryPlant`: `Prefabs/Objects/LeafSkirt` from the root of the asset tree is setup as the only `extras`. This includes setting all child's shadowCastingMode to off and to set the correct materials if `hologram` and `cotunknown` (the later being changing the color to pure black with 50% transparency)
|
||||
* `Turret`: `Prefabs/Objects/turretbase` from the root of the asset tree is setup as the only `extras`. `cotunknown` changes its material color to pure black with 50% transparency
|
||||
* `WaspDriller`: if npcdata.vectordata\[0\].y is -2.0, setup an item sprite as the only `extra` where the [Items](../../Enums%20and%20IDs/Items.md) id is npcdata.vectordata\[0\].x and its flipX is true
|
||||
* `WaspDriller`: if npcdata.vectordata\[0\].y is -2.0, setup an item sprite as the only `extra` where the [Items](../../../Enums%20and%20IDs/Items.md) id is npcdata.vectordata\[0\].x and its flipX is true
|
||||
* `Zombeetle`: Same as WaspDriller, but also setup the `extras`'s angles and localscale on top
|
||||
@@ -20,8 +20,8 @@ EntityControl defines a Start Unity event which performs several important steps
|
||||
* Unless `noemoticon` is set to true, setup the `emoticon` object which is a new object with an Animator named `Emoticon` childed to the `rotater`, a local position of `emoticonoffset`, and a layer of 15 (`3DUI`). Also set `emoticonsprite` to a new SpriteRenderer added to `emoticon` and set its material to Unity's default sprite material
|
||||
* Ensure an AudioSource is added and assigned to `sound` without playOnAwake
|
||||
* If `startvelocity` is set, set the `rigid`'s velocity to it
|
||||
* Call [CheckSpecialID](Notable%20methods/CheckSpecialID.md) which loads the [EntityValues data](../../TextAsset%20Data/Entity%20data#`EntityValues`%20data.md)
|
||||
* Set the entity's bleep. For more information on the bleep system, check [Bleep](../../SetText/Commands/Individual%20commands/Bleep.md). The bleep id and pitch are expected to be set beforehand in `dialoguebleepid` and `bleeppitch` respectively.
|
||||
* Call [CheckSpecialID](Notable%20methods/CheckSpecialID.md) which loads the [EntityValues data](../../TextAsset%20Data/Entity%20data.md#`EntityValues`%20data)
|
||||
* Set the entity's bleep. For more information on the bleep system, check [bleep](../../SetText/Individual%20commands/Bleep.md). The bleep id and pitch are expected to be set beforehand in `dialoguebleepid` and `bleeppitch` respectively.
|
||||
* If `hasshadow` is true, ensure a an object named `shadow` with a SpriteRenderer is created and assigned to the field of the same name and childed to the entity's transform at (0.0, -999.0, 0.0). The transform of the new object is assigned to `shadowtransform`. The sprite of the shadow is set to the game's shadow sprite with a color of pure white with 40% transparency. The angles of the object are set to (90.0, 0.0, 0.0) and the material's renderQueue is set to 2900
|
||||
* If the entity is an item, assign `itemstate` to the `animstate`
|
||||
* Apply the following [Modifiers](Modifiers.md): `Fixed`, `FxdCol`, `ALW`, `ALF`, `PAU`, `HIDE`, `ROT`, `ShwEm`, `COG`, `NGS` when applicable
|
||||
@@ -2,10 +2,10 @@
|
||||
|
||||
This is the Update of EntityControl. It doesn't do as much as [LateUpdate](LateUpdate.md)
|
||||
|
||||
* Check if the entity should receive updates which only happens when unpaused, minipause isn't active, the [message](../../../../SetText/Global%20vars%20used/message.md) lock is released and the entity isn't dead. This can be overriden with `activeonpause`
|
||||
* Check if the entity should receive updates which only happens when unpaused, minipause isn't active, the [message](../../../../SetText/Notable%20states.md#message) lock is released and the entity isn't dead. This can be overriden with `activeonpause`
|
||||
* Follow the standard animation speed update logic unless `overrideanimspeed` is true which will set the animation speed to 1.0 if there's no `icecube` and to 0.0 if there is one on top of forcing the [animstate](../../Animations/animstate.md) to `Hurt`
|
||||
* Make sure the `sprite` is disabled if this is the player entity and is a submarine, otherwise
|
||||
* Toggle the sprite being enabled if the `icooldown` hasn't expired yet and the player is free (meaning it is present, no minipause or pause, not in an event, the [message](../../../../SetText/Global%20vars%20used/message.md) lock is released, and the player isn't digging)
|
||||
* Toggle the sprite being enabled if the `icooldown` hasn't expired yet and the player is free (meaning it is present, no minipause or pause, not in an event, the [message](../../../../SetText/Notable%20states.md#message) lock is released, and the player isn't digging)
|
||||
* Ensure the sprite is enabled if it's not an item and it has no `npcdata` or it has one and it doesn't have a `disguiseobj`
|
||||
* Ensure the child of the sprite are enabled or disabled according to the main sprite's enabled unless the `npcdata` is present and its `trapped` is true
|
||||
* Decrease the `icooldown` with the framestep
|
||||
@@ -11,6 +11,6 @@ The method first sees if the [animstate](../Animations/animstate.md) should be u
|
||||
|
||||
After, the method prechecks if we proceed to check if the entity has landed which simply checks if it's `onground`. If it is, then there are 2 possible ways to update the [animstate](../Animations/animstate.md): from the `basestate` or the `npcdata`'s `dialogues` at `currentdialogueindex`'s z.
|
||||
|
||||
The `dialogues` one is done when it applies while not in an event, the current [animstate](../Animations/animstate.md) is `Idle` and `changedstate` was not enabled externally. The only way to enable it is through [SetText](../../../SetText/SetText.md)'s [Anim](../../../SetText/Commands/Individual%20commands/Anim.md) command.
|
||||
The `dialogues` one is done when it applies while not in an event, the current [animstate](../Animations/animstate.md) is `Idle` and `changedstate` was not enabled externally. The only way to enable it is through [SetText](../../../SetText/SetText.md)'s [anim](../../../SetText/Individual%20commands/Anim.md) command.
|
||||
|
||||
The `bassestate` one applies when either the above applies, but there is no `currentdialoguesindex` or that the [animstate](../Animations/animstate.md) was at `Fall`.
|
||||
@@ -1,6 +1,6 @@
|
||||
# BoardQuests
|
||||
|
||||
A `BoardQuests` is a task to be done in the game. While most of them are optional, each chapters have one quest reserved to them which are mandatory. The quests are managed by the quests board system which tells which quests are accessible, open, taken or completed. The state of the quest board are saved on the [Save File](../Save%20File.md). They are directly mapped to the quest data entry.
|
||||
A `BoardQuests` is a task to be done in the game. While most of them are optional, each chapters have one quest reserved to them which are mandatory. The quests are managed by the quests board system which tells which quests are accessible, open, taken or completed. The state of the quest board are saved on the [Save File](../External%20data%20format/Save%20File.md). They are directly mapped to the quest data entry.
|
||||
|
||||
## Quests table
|
||||
|
||||
@@ -13,7 +13,7 @@ Where X is a unique int value specific to this event. They are usually private b
|
||||
There are many known way to trigger an event. Here is a list of the currently known ones:
|
||||
|
||||
* Manually via the `EventControl.StartEvent` method
|
||||
* [SetText](../SetText/SetText.md)'s [Event](../SetText/Commands/Individual%20commands/Event.md) command
|
||||
* [SetText](../SetText/SetText.md)'s [Event](../SetText/Individual%20commands/Event.md) command
|
||||
* `MapControl`'s `autoevent` system
|
||||
* A wide variety of [Entity](../Entities/Entity.md) can have a way to trigger a configurable event
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Items
|
||||
|
||||
An `Items` enum value represents an item in the game which can be collected in the overworld. The items in possessions are saved in the [Save File](../Save%20File.md) in 3 arrays corresponding to regular inventory, key items and stored items respectively. They are mapped directly to each item data entry.
|
||||
An `Items` enum value represents an item in the game which can be collected in the overworld. The items in possessions are saved in the [Save File](../External%20data%20format/Save%20File.md) in 3 arrays corresponding to regular inventory, key items and stored items respectively. They are mapped directly to each item data entry.
|
||||
|
||||
## Items table
|
||||
|
||||
@@ -4,7 +4,7 @@ A `Maps` is an enum value that represent a map (aka room) in the game. Each enum
|
||||
|
||||
The maps prefabs are located at `Ressources/prefabs/maps` from the game's assets tree.
|
||||
|
||||
The current map is saved on the [Save File](../Save%20File.md).
|
||||
The current map is saved on the [Save File](../External%20data%20format/Save%20File.md).
|
||||
|
||||
## Maps table
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
A medal or sometimes internally refered to as `badge` is a collectible in the game that can be equipped.
|
||||
|
||||
The medals in possession and their equipment statuses are saved in the [Save File](../Save%20File.md).
|
||||
The medals in possession and their equipment statuses are saved in the [Save File](../External%20data%20format/Save%20File.md).
|
||||
|
||||
Both Shades's and Merab's shops medals available pools and stock are also saved in the [Save File](../Save%20File.md).
|
||||
Both Shades's and Merab's shops medals available pools and stock are also saved in the [Save File](../External%20data%20format/Save%20File.md).
|
||||
|
||||
The IDs are mapped directly to the badge data entries.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Musics
|
||||
|
||||
A `Musics` is an enum value that represent a song in the game. They are not to be confused with sound effects. Most of them have a corresponding int that tells whether the song is available and bougth at Samira's. The Samira list is saved in the [Save File](../Save%20File.md).
|
||||
A `Musics` is an enum value that represent a song in the game. They are not to be confused with sound effects. Most of them have a corresponding int that tells whether the song is available and bougth at Samira's. The Samira list is saved in the [Save File](../External%20data%20format/Save%20File.md).
|
||||
|
||||
The musics in the game are located at `Ressources/audio/music` from the game's asset tree.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Crystalbflags
|
||||
|
||||
A crystel berry is a collectible bound to a bool that tells whether or not this crystal berry has been collected. They are saved in the [Save File](../Save%20File.md) and there are 50 elements available in the `MainManager.instance.crystalbflags` array which corresponds to the amount of them available in the game.
|
||||
A crystel berry is a collectible bound to a bool that tells whether or not this crystal berry has been collected. They are saved in the [Save File](../External%20data%20format/Save%20File.md) and there are 50 elements available in the `MainManager.instance.crystalbflags` array which corresponds to the amount of them available in the game.
|
||||
|
||||
## Crystal berries table
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
|
||||
An `Areas` enum value represents a group of [Maps](../Maps.md) that belongs to a certain location in the game. Each map must belong to one `Areas` and they are important in determining the scope of any [Regionalflags](../../Flags%20arrays/Regionalflags.md).
|
||||
|
||||
The current area is saved on the [Save File](../../Save%20File.md).
|
||||
The current area is saved on the [Save File](../../External%20data%20format/Save%20File.md).
|
||||
|
||||
## Remarks about `librarystuff`
|
||||
|
||||
Each area is bound to a bool value stored in a 2 dimensional jagged array located at index 4 of the `MainManager.instance.librarystuff` array that indicates whether or not the area was seen. This allows the game to track which areas to show on the world map. The subarray of `librarystuff` contains 256 elements (most are not used as the array is overprosioned in size).
|
||||
|
||||
The entire `librarystuff` two dimensional array is saved on the [Save File](../../Save%20File.md).
|
||||
The entire `librarystuff` two dimensional array is saved on the [Save File](../../External%20data%20format/Save%20File.md).
|
||||
|
||||
## Areas table
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Bestiary entry
|
||||
|
||||
A bestiary entry is a collectible bound to a bool that tells whether or not the specific entry for the enemy is unlocked in the library. Their values are saved in the [Save File](../../Save%20File.md) and the array of them is located at index 1 of the `MainManager.instance.librarystuff` 2 dimensional jagged array and it contains 256 elements (most are not used as the array is overprosioned in size).
|
||||
A bestiary entry is a collectible bound to a bool that tells whether or not the specific entry for the enemy is unlocked in the library. Their values are saved in the [Save File](../../External%20data%20format/Save%20File.md) and the array of them is located at index 1 of the `MainManager.instance.librarystuff` 2 dimensional jagged array and it contains 256 elements (most are not used as the array is overprosioned in size).
|
||||
|
||||
> They are not to be confused with [Enemies](../Enemies.md).
|
||||
|
||||
The entire `librarystuff` two dimensional array is saved on the [Save File](../../Save%20File.md).
|
||||
The entire `librarystuff` two dimensional array is saved on the [Save File](../../External%20data%20format/Save%20File.md).
|
||||
|
||||
## Bestiary entries table
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Discovery entry
|
||||
|
||||
A discovery entry is a collectible bound to a bool that tells whether or not the specific entry for the discovery is unlocked in the library. Their values are saved in the [Save File](../../Save%20File.md) and the array of them is located at index 0 of the `MainManager.instance.librarystuff` 2 dimensional jagged array and it contains 256 elements (most are not used as the array is overprosioned in size).
|
||||
A discovery entry is a collectible bound to a bool that tells whether or not the specific entry for the discovery is unlocked in the library. Their values are saved in the [Save File](../../External%20data%20format/Save%20File.md) and the array of them is located at index 0 of the `MainManager.instance.librarystuff` 2 dimensional jagged array and it contains 256 elements (most are not used as the array is overprosioned in size).
|
||||
|
||||
The entire `librarystuff` two dimensional array is saved on the [Save File](../../Save%20File.md).
|
||||
The entire `librarystuff` two dimensional array is saved on the [Save File](../../External%20data%20format/Save%20File.md).
|
||||
|
||||
## Discovery entries table
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Recipe entry
|
||||
|
||||
A recipe entry is a collectible bound to a bool that tells whether or not the specific entry for the recipe is unlocked in the library. Their values are saved in the [Save File](../../Save%20File.md) and the array of them is located at index 2 of the `MainManager.instance.librarystuff` 2 dimensional jagged array and it contains 256 elements (most are not used as the array is overprosioned in size).
|
||||
A recipe entry is a collectible bound to a bool that tells whether or not the specific entry for the recipe is unlocked in the library. Their values are saved in the [Save File](../../External%20data%20format/Save%20File.md) and the array of them is located at index 2 of the `MainManager.instance.librarystuff` 2 dimensional jagged array and it contains 256 elements (most are not used as the array is overprosioned in size).
|
||||
|
||||
The entire `librarystuff` two dimensional array is saved on the [Save File](../../Save%20File.md).
|
||||
The entire `librarystuff` two dimensional array is saved on the [Save File](../../External%20data%20format/Save%20File.md).
|
||||
|
||||
## Recipe entries table
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Record entry
|
||||
|
||||
A record entry is a collectible bound to a bool that tells whether or not the specific entry for the record has been achieved in the library. Their values are saved in the [Save File](../../Save%20File.md) and the array of them is located at index 3 of the `MainManager.instance.librarystuff` 2 dimensional jagged array and it contains 256 elements (most are not used as the array is overprosioned in size). On compatible platforms, enabling a record also unlocks its associated achievement.
|
||||
A record entry is a collectible bound to a bool that tells whether or not the specific entry for the record has been achieved in the library. Their values are saved in the [Save File](../../External%20data%20format/Save%20File.md) and the array of them is located at index 3 of the `MainManager.instance.librarystuff` 2 dimensional jagged array and it contains 256 elements (most are not used as the array is overprosioned in size). On compatible platforms, enabling a record also unlocks its associated achievement.
|
||||
|
||||
The entire `librarystuff` two dimensional array is saved on the [Save File](../../Save%20File.md).
|
||||
The entire `librarystuff` two dimensional array is saved on the [Save File](../../External%20data%20format/Save%20File.md).
|
||||
|
||||
## Record entries table
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Regionalflags
|
||||
|
||||
A `regionalflag` is a bool which is a variable the game can access globally while its value is kept until an [Area](../SetText/Commands/Individual%20commands/Area.md) change occurs in the game or until a reset is specifically requested by the game. When a reset occurs, all regionalflag are set to false. They are saved on the [Save File](../Save%20File.md) and are used to track temporary progress in an area such as defeating an enemy in the overworld. There are 100 regional flags available in the `MainManager.instance.regionalflags` array.
|
||||
A `regionalflag` is a bool which is a variable the game can access globally while its value is kept until an [area](../SetText/Individual%20commands/Area.md) change occurs in the game or until a reset is specifically requested by the game. When a reset occurs, all regionalflag are set to false. They are saved on the [Save File](../External%20data%20format/Save%20File.md) and are used to track temporary progress in an area such as defeating an enemy in the overworld. There are 100 regional flags available in the `MainManager.instance.regionalflags` array.
|
||||
|
||||
## Notes about the regionalflags tables
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Flags
|
||||
|
||||
A global `flags` (not to be confused with the generic programming term) is a bool which is a global variable the game can access for any purpose. They are saved on the [Save File](../Save%20File.md) and typically have one reserved use, but some can be used temporarily notably number 400 and number 0 (reserved for debugging). There are 750 global flags available to the game in the `MainManager.instance.flags` array.
|
||||
A global `flags` (not to be confused with the generic programming term) is a bool which is a global variable the game can access for any purpose. They are saved on the [Save File](../External%20data%20format/Save%20File.md) and typically have one reserved use, but some can be used temporarily notably number 400 and number 0 (reserved for debugging). There are 750 global flags available to the game in the `MainManager.instance.flags` array.
|
||||
|
||||
> Before 1.1.0, there were 700 available flags instead.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Flagstring
|
||||
|
||||
A `flagstring` is a string which is a global variable the game can access for any purpose. They are saved on the [Save File](../Save%20File.md) and typically have one reserved use, but some can be used temporarily notably in [SetText](../SetText/SetText.md) operations. There are 15 flagstrings available to the game in the `MainManager.instance.flagstring` array.
|
||||
A `flagstring` is a string which is a global variable the game can access for any purpose. They are saved on the [Save File](../External%20data%20format/Save%20File.md) and typically have one reserved use, but some can be used temporarily notably in [SetText](../SetText/SetText.md) operations. There are 15 flagstrings available to the game in the `MainManager.instance.flagstring` array.
|
||||
|
||||
## Notes about the flagstrings table
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Flagvar
|
||||
|
||||
A `flagvar` is an int which is a global variable the game can access for any purpose. They are saved on the [Save File](../Save%20File.md) and typically have one reserved use, but some can be used temporarily notably in [SetText](../SetText/SetText.md) operations. There are 70 flagvars available to the game in the `MainManager.instance.flagvar` array.
|
||||
A `flagvar` is an int which is a global variable the game can access for any purpose. They are saved on the [Save File](../External%20data%20format/Save%20File.md) and typically have one reserved use, but some can be used temporarily notably in [SetText](../SetText/SetText.md) operations. There are 70 flagvars available to the game in the `MainManager.instance.flagvar` array.
|
||||
|
||||
> Before 1.1.0, there were 65 slots instead
|
||||
|
||||
@@ -26,7 +26,7 @@ Let's start at the root folder:
|
||||
* `Mono`: This is where Unity's custom version of the Mono runtime is located (in the Embeded runtime subfolder) alongside some configurations to it (located in the etc subfolder). This is directly provided by Unity. On XBOX PC, this folder is called `MonoBleedingEdge` as it uses a newer version of Mono. Consoles versions do not use Mono and instead uses IL2CPP which is a propreatary compilation pipeline Unity provides and is required for consoles support.
|
||||
* `Bug Fables.exe`: This is actually Unity's player executable renamed to match the game's name. It is also directly provided by Unity despite its name.
|
||||
* `config.dat`: This is generated by the game at runtime on the first boot. It contains all the global settings configuration as well as other informations such as the language choice and which modifier code has already been entered (used to list the code allowed via the secret menu).
|
||||
* `save0/1/2.dat`: The save files generated by the game. `save0` is the first slot, `save1` is the second slot and `save2` is the third slot. There can also be saves with the name `backup` which is actually the game's previous save before its corresponding regular save file. This is the game's redundancy mechanism: if the current file somehow becomes corrupted, the game will falback to the backup version. For more info, check [Save File](Save%20File.md).
|
||||
* `save0/1/2.dat`: The save files generated by the game. `save0` is the first slot, `save1` is the second slot and `save2` is the third slot. There can also be saves with the name `backup` which is actually the game's previous save before its corresponding regular save file. This is the game's redundancy mechanism: if the current file somehow becomes corrupted, the game will falback to the backup version. For more info, check [Save File](External%20data%20format/Save%20File.md).
|
||||
* `UnityCrashHandler64,exe`: This file is provided by Unity. It's a small program that is meant to be called whenever Unity player crashes. It will contain the game's icon with a red exclamation mark if it is executing.
|
||||
* `UnityPlayer.dll`: This is most of Unity's player code. The executable mentioned above uses it and it constitutes the core Unity code compiled in C++. The C# scripting merely is an interface to this code.
|
||||
* `version.txt`: This is just a text file with the game's version number. This file isn't actually used anywhere in the game. It is very likely just present to indicate the version without needing to boot the game.
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
There are several static public fields of MainManager that represents the state of an ItemList. All of them can be accessed externally, but extra care must be given in doing so since it can lead to undefined behaviors. The fields are generally kept around between [ShowItemList](ShowItemList.md) calls to preserve them between updates and only changed before doing a refresh.
|
||||
|
||||
To denote that we are currently in an ItemList, `ItemList` gets assigned when the list gets active and it gets set to null when inactive. Additionally, the instance field `inlist` is set to true on the list creation and it is supposed to be set to false when it's handled, but due to the [inlist issue](inlist%20issue.md), this is only guaranteed after a [Pickitem](../SetText/Commands/Individual%20commands/Pickitem.md) command is fully done. This is different than `prompt` which tells if we are in a [Prompt](../SetText/Commands/Individual%20commands/Prompt.md), [NumberPrompt](../SetText/Commands/Individual%20commands/NumberPrompt.md) or [LetterPrompt](../SetText/Commands/Individual%20commands/LetterPrompt.md) and it is managed differently.
|
||||
To denote that we are currently in an ItemList, `ItemList` gets assigned when the list gets active and it gets set to null when inactive. Additionally, the instance field `inlist` is set to true on the list creation and it is supposed to be set to false when it's handled, but due to the [inlist issue](inlist%20issue.md), this is only guaranteed after a [Pickitem](../SetText/Individual%20commands/Pickitem.md) command is fully done. This is different than `prompt` which tells if we are in a [Prompt](../SetText/Individual%20commands/Prompt.md), [NumberPrompt](../SetText/Individual%20commands/NumberPrompt.md) or [LetterPrompt](../SetText/Individual%20commands/LetterPrompt.md) and it is managed differently.
|
||||
|
||||
All fields are static to MainManager unless specified otherwise.
|
||||
|
||||
@@ -19,8 +19,8 @@ These are sent to the method and they are kept in these fields so that the metho
|
||||
|
||||
These are not sent to [ShowItemList](ShowItemList.md), but should be set externally before to configure aspects of the list prompt:
|
||||
|
||||
* `listredirect`: The [Dialogue line id](../SetText/Commands/Dialogue%20line%20id.md) when a confirmation is done (see [Pickitem](../SetText/Commands/Individual%20commands/Pickitem.md) for more info)
|
||||
* `listcancel`: The [Dialogue line id](../SetText/Commands/Dialogue%20line%20id.md) to redirect when a cancellation is done (see [Pickitem](../SetText/Commands/Individual%20commands/Pickitem.md) for more info)
|
||||
* `listredirect`: The [Dialogue line id](../SetText/Common%20commands%20id%20schemes/Dialogue%20line%20id.md) when a confirmation is done (see [Pickitem](../SetText/Individual%20commands/Pickitem.md) for more info)
|
||||
* `listcancel`: The [Dialogue line id](../SetText/Common%20commands%20id%20schemes/Dialogue%20line%20id.md) to redirect when a cancellation is done (see [Pickitem](../SetText/Individual%20commands/Pickitem.md) for more info)
|
||||
* `storeid`: The store id if it's one.
|
||||
* instance.`listammount`: The amount of items shown at once.
|
||||
|
||||
@@ -40,8 +40,8 @@ These are used to track a list prompt's options and selections:
|
||||
* `multiselect`: The list of selected items in the ItemList
|
||||
* `listcanceled`: Whether the ItemList has been cancelled or not
|
||||
* `listvar`: All the available options, depends on listtype
|
||||
* instance.`maxoptions`: The number of available options in the entire list (same use as in a [Prompt](../SetText/Commands/Individual%20commands/Prompt.md), [NumberPrompt](../SetText/Commands/Individual%20commands/NumberPrompt.md) or [LetterPrompt](../SetText/Commands/Individual%20commands/LetterPrompt.md)).
|
||||
* instance.`option`: The option index in the entire list (same use as in a [Prompt](../SetText/Commands/Individual%20commands/Prompt.md), [NumberPrompt](../SetText/Commands/Individual%20commands/NumberPrompt.md) or [LetterPrompt](../SetText/Commands/Individual%20commands/LetterPrompt.md)).
|
||||
* instance.`maxoptions`: The number of available options in the entire list (same use as in a [Prompt](../SetText/Individual%20commands/Prompt.md), [NumberPrompt](../SetText/Individual%20commands/NumberPrompt.md) or [LetterPrompt](../SetText/Individual%20commands/LetterPrompt.md)).
|
||||
* instance.`option`: The option index in the entire list (same use as in a [Prompt](../SetText/Individual%20commands/Prompt.md), [NumberPrompt](../SetText/Individual%20commands/NumberPrompt.md) or [LetterPrompt](../SetText/Individual%20commands/LetterPrompt.md)).
|
||||
* `listoption`: The same then option, but only after the ItemList destruction (which is done after a selection has been done).
|
||||
|
||||
## Scrolling and view
|
||||
@@ -1,11 +1,11 @@
|
||||
# ItemList
|
||||
|
||||
Bug Fables has a way to present different kinds of lists that can be browsed with scrolling and prompt one selection, multiple incontiguous selection or cancellation from the options in the list. Such a list is called an ItemList and the current one can be accessed with the `ItemList` field (it is null when no ItemList is active). This is not to be confused with [Prompt](../SetText/Commands/Individual%20commands/Prompt.md), [NumberPrompt](../SetText/Commands/Individual%20commands/NumberPrompt.md) or [LetterPrompt](../SetText/Commands/Individual%20commands/LetterPrompt.md) which are only usable in [Dialogue mode](../SetText/Dialogue%20mode.md) in [SetText](../SetText/SetText.md) while an ItemList can be used outside of SetText
|
||||
Bug Fables has a way to present different kinds of lists that can be browsed with scrolling and prompt one selection, multiple incontiguous selection or cancellation from the options in the list. Such a list is called an ItemList and the current one can be accessed with the `ItemList` field (it is null when no ItemList is active). This is not to be confused with [Prompt](../SetText/Individual%20commands/Prompt.md), [NumberPrompt](../SetText/Individual%20commands/NumberPrompt.md) or [LetterPrompt](../SetText/Individual%20commands/LetterPrompt.md) which are only usable in [Dialogue mode](../SetText/Dialogue%20mode.md) in [SetText](../SetText/SetText.md) while an ItemList can be used outside of SetText
|
||||
via [ShowItemList](ShowItemList.md). Prompts also does not support scrolling as well as having other limitations in regards to rendering.
|
||||
|
||||
The ItemList has the ability to have a description box rendered for the currently hovered item and to have special behaviors in the pause menu since the same method is used there, just presented differently. This is all maintained through the [ItemList State Machine](ItemList%20State%20Machine.md) that MainManager is responsible to manage via mostly static fields.
|
||||
|
||||
To show one, ShowItemList must be called or use its SetText command counterpart, [Pickitem](../SetText/Commands/Individual%20commands/Pickitem.md). The first call resets the state machine and renders the ItemList for the first time. From this point, MainManager's Update takes over (or PauseMenu's when paused) which has special routines to handle the ItemList after it is done being processed. Whenever the cursor moves or a change of selection with `multiselect` is performed, the ItemList is refreshed which causes another call to ShowItemList, but this time, it will only update the state machine rather than clear it and rerender the ItemList if it needs to be scrolled. This continues until a confirmation or a cancellation is processed which is handled differently depending on the [listtype](listtype.md). If the ItemList came from a Pickitem command, SetText will do the final handling of it.
|
||||
To show one, ShowItemList must be called or use its SetText command counterpart, [Pickitem](../SetText/Individual%20commands/Pickitem.md). The first call resets the state machine and renders the ItemList for the first time. From this point, MainManager's Update takes over (or PauseMenu's when paused) which has special routines to handle the ItemList after it is done being processed. Whenever the cursor moves or a change of selection with `multiselect` is performed, the ItemList is refreshed which causes another call to ShowItemList, but this time, it will only update the state machine rather than clear it and rerender the ItemList if it needs to be scrolled. This continues until a confirmation or a cancellation is processed which is handled differently depending on the [listtype](listtype.md). If the ItemList came from a Pickitem command, SetText will do the final handling of it.
|
||||
|
||||
## Performance concerns
|
||||
|
||||
@@ -18,22 +18,22 @@ The main text corresponds to a certain line from MenuText depending on the optio
|
||||
* Id 65 (Do Nothing)
|
||||
* Id 68 (Flee)
|
||||
|
||||
If the option is Spy while it is disabled or Flee while it isn't possible, the text is prepended with |[color](../../SetText/Commands/Individual%20commands/Color.md),1| and that will be the final string.
|
||||
If the option is Spy while it is disabled or Flee while it isn't possible, the text is prepended with |[color](../../SetText/Individual%20commands/Color.md),1| and that will be the final string.
|
||||
|
||||
Otherwise, if the option is Rotate Party, ` ` + |[size](../../SetText/Commands/Individual%20commands/size.md),0.55,0.6||[button](../../SetText/Commands/Individual%20commands/Button.md),6| is appended to the MenuText line and this is the final string.
|
||||
Otherwise, if the option is Rotate Party, ` ` + |[size](../../SetText/Individual%20commands/size.md),0.55,0.6||[button](../../SetText/Individual%20commands/Button.md),6| is appended to the MenuText line and this is the final string.
|
||||
|
||||
Otherwise, if the option is Do Nothing, |[single](../../SetText/Commands/Individual%20commands/Single.md)\| is prepended to the main text and ` ` + |[size](../../SetText/Commands/Individual%20commands/size.md),0.55,0.6| is appended to it. There are also [Icon](../../SetText/Commands/Individual%20commands/Icon.md) commands that can be appended if a certain medal is equipped which will be appended in this order if that is the case:
|
||||
Otherwise, if the option is Do Nothing, |[single](../../SetText/Individual%20commands/Single.md)\| is prepended to the main text and ` ` + |[size](../../SetText/Individual%20commands/size.md),0.55,0.6| is appended to it. There are also [Icon](../../SetText/Individual%20commands/Icon.md) commands that can be appended if a certain medal is equipped which will be appended in this order if that is the case:
|
||||
|
||||
* Prayer, |[Icon](../../SetText/Commands/Individual%20commands/Icon.md),187|
|
||||
* Meditation, |[Icon](../../SetText/Commands/Individual%20commands/Icon.md),188|
|
||||
* Reflection, |[Icon](../../SetText/Commands/Individual%20commands/Icon.md),189|
|
||||
* Prayer, |[Icon](../../SetText/Individual%20commands/Icon.md),187|
|
||||
* Meditation, |[Icon](../../SetText/Individual%20commands/Icon.md),188|
|
||||
* Reflection, |[Icon](../../SetText/Individual%20commands/Icon.md),189|
|
||||
|
||||
Otherwise, if the option is Flee, |[single](../../SetText/Commands/Individual%20commands/Single.md)\| is prepended to the main text and ` ` + |[size](../../SetText/Commands/Individual%20commands/size.md),0.55,0.6| is appended to it. There are also [Icon](../../SetText/Commands/Individual%20commands/Icon.md) commands that can be appended if a certain medal is equipped which will be appended in this order if that is the case:
|
||||
Otherwise, if the option is Flee, |[single](../../SetText/Individual%20commands/Single.md)\| is prepended to the main text and ` ` + |[size](../../SetText/Individual%20commands/size.md),0.55,0.6| is appended to it. There are also [Icon](../../SetText/Individual%20commands/Icon.md) commands that can be appended if a certain medal is equipped which will be appended in this order if that is the case:
|
||||
|
||||
* Secure Pouch, |[Icon](../../SetText/Commands/Individual%20commands/Icon.md),221|
|
||||
* Quick Flea, |[Icon](../../SetText/Commands/Individual%20commands/Icon.md),222|
|
||||
* Secure Pouch, |[Icon](../../SetText/Individual%20commands/Icon.md),221|
|
||||
* Quick Flea, |[Icon](../../SetText/Individual%20commands/Icon.md),222|
|
||||
|
||||
Otherwise, if the option is Spy and Spy Specs is equipped, |[single](../../SetText/Commands/Individual%20commands/Single.md)\| is prepended to the main text and ` ` + |[size](../../SetText/Commands/Individual%20commands/size.md),0.55,0.6||[Icon](../../SetText/Commands/Individual%20commands/Icon.md),219| is appended to it.
|
||||
Otherwise, if the option is Spy and Spy Specs is equipped, |[single](../../SetText/Individual%20commands/Single.md)\| is prepended to the main text and ` ` + |[size](../../SetText/Individual%20commands/size.md),0.55,0.6||[Icon](../../SetText/Individual%20commands/Icon.md),219| is appended to it.
|
||||
|
||||
The x position of the main text is overridden to -2.6.
|
||||
|
||||
@@ -8,7 +8,7 @@ Display the list of items, key items or storage items.
|
||||
|
||||
## Option's [SetText](../../SetText/SetText.md) input string
|
||||
|
||||
If the [items](../../Enums%20and%20IDs/Items.md) id in question is -1, the string will be |[color](../../SetText/Commands/Individual%20commands/Color.md),1| followed by the no items message from MenuText line id 20.
|
||||
If the [items](../../Enums%20and%20IDs/Items.md) id in question is -1, the string will be |[color](../../SetText/Individual%20commands/Color.md),1| followed by the no items message from MenuText line id 20.
|
||||
|
||||
Otherwise, a sprite of the item matching its id will be rendered mostly on the left side of the bar. Its localScale is 0.55, 0.6, 1.0 when unpaused and 0.9, 0.9, 1.0 when paused. The string will be the item name from itemdata.
|
||||
|
||||
@@ -10,7 +10,7 @@ Display the list of inputs of the game and their bound keyboard key.
|
||||
|
||||
## Option's [SetText](../../SetText/SetText.md) input string
|
||||
|
||||
The text is |[button](../../SetText/Commands/Individual%20commands/Button.md), followed by the option followed by `,0|` followed by MenuText line 88 + the option. In practice, it means that it will show the currently bound keyboard key of the input followed by the input description as they all fall between line 88 and 98 of MenuText.
|
||||
The text is |[button](../../SetText/Individual%20commands/Button.md), followed by the option followed by `,0|` followed by MenuText line 88 + the option. In practice, it means that it will show the currently bound keyboard key of the input followed by the input description as they all fall between line 88 and 98 of MenuText.
|
||||
|
||||
## Description box rendering
|
||||
|
||||
@@ -10,11 +10,11 @@ Display the list of the available languages of the game.
|
||||
|
||||
## List render on refresh
|
||||
|
||||
This list will always rerender whenever a refresh is done regardless if it needs to be scrolled or not. This is done to update the help text to the option being hovered on during the selection. This prompt is refreshed by doing a [SetText](../../SetText/SetText.md) call in non [Dialogue mode](../../SetText/Dialogue%20mode.md) where the input string is the text in languagehelp of the current option prepended with |[color](../../SetText/Commands/Individual%20commands/Color.md),4||[center](../../SetText/Commands/Individual%20commands/Center.md)\||[sort](../../SetText/Commands/Individual%20commands/Sort.md),20|, the position is (1.0, 4.0) and the parent is the [ItemList](../ItemList.md). This call is done on every refresh of the list.
|
||||
This list will always rerender whenever a refresh is done regardless if it needs to be scrolled or not. This is done to update the help text to the option being hovered on during the selection. This prompt is refreshed by doing a [SetText](../../SetText/SetText.md) call in non [Dialogue mode](../../SetText/Dialogue%20mode.md) where the input string is the text in languagehelp of the current option prepended with |[color](../../SetText/Individual%20commands/Color.md),4||[center](../../SetText/Individual%20commands/Center.md)\||[sort](../../SetText/Individual%20commands/Sort.md),20|, the position is (1.0, 4.0) and the parent is the [ItemList](../ItemList.md). This call is done on every refresh of the list.
|
||||
|
||||
## Option's [SetText](../../SetText/SetText.md) input string
|
||||
|
||||
The text is |[sort](../../SetText/Commands/Individual%20commands/Sort.md),20||[color](../../SetText/Commands/Individual%20commands/Color.md),4| followed by the name of the language of the option in languagenames.
|
||||
The text is |[sort](../../SetText/Individual%20commands/Sort.md),20||[color](../../SetText/Individual%20commands/Color.md),4| followed by the name of the language of the option in languagenames.
|
||||
|
||||
The size of the text is overridden to Vector2.one.
|
||||
|
||||
@@ -14,11 +14,11 @@ First, the main text is set to the string representation of the option + 1 padde
|
||||
|
||||
Then, the corresponding name of the library entry is appended to the string.
|
||||
|
||||
If the language is set to `German` and the list is the [Discoveries entry](../../Enums%20and%20IDs/librarystuff/Discoveries%20entry.md), |[Sizemulti](../../SetText/Commands/Individual%20commands/Sizemulti.md),0.7,1| is prepended to the string.
|
||||
If the language is set to `German` and the list is the [Discoveries entry](../../Enums%20and%20IDs/librarystuff/Discoveries%20entry.md), |[Sizemulti](../../SetText/Individual%20commands/Sizemulti.md),0.7,1| is prepended to the string.
|
||||
|
||||
If the language is set to `Japanese` and we are paused, |[size](../../SetText/Commands/Individual%20commands/size.md),0.75,y,[lock](../../SetText/Commands/Individual%20commands/Lock.md)\| is prepended to the string.
|
||||
If the language is set to `Japanese` and we are paused, |[size](../../SetText/Individual%20commands/size.md),0.75,y,[lock](../../SetText/Individual%20commands/Lock.md)\| is prepended to the string.
|
||||
|
||||
Finally, |[single](../../SetText/Commands/Individual%20commands/Single.md)\| is prepended to the string which will serve as the final string.
|
||||
Finally, |[single](../../SetText/Individual%20commands/Single.md)\| is prepended to the string which will serve as the final string.
|
||||
|
||||
The x position of the text is overridden to -0.5 and the size to Vector2.one.
|
||||
|
||||
@@ -6,7 +6,7 @@ Display the list of the unlocked lore books.
|
||||
|
||||
`listvar` is all the integers from 0 to the [flagvar](../../Flags%20arrays/flagvar.md) 15 subtracted by 1. In practice, this represents the numbers from 0 to the amount of lore book unlocked - 1.
|
||||
|
||||
`listredirect` is overridden to -66 which, corresponds to the CommonDialogue line 65 and has the following: |[tail](../../SetText/Commands/Individual%20commands/Tail.md),null||[boxstyle](../../SetText/Commands/Individual%20commands/Boxstyle.md),3||[Bleep](../../SetText/Commands/Individual%20commands/Bleep.md),2,1,1||[Lore](../../SetText/Commands/Individual%20commands/Lore.md)\|.
|
||||
`listredirect` is overridden to -66 which, corresponds to the CommonDialogue line 65 and has the following: |[tail](../../SetText/Individual%20commands/Tail.md),null||[boxstyle](../../SetText/Individual%20commands/Boxstyle.md),3||[Bleep](../../SetText/Individual%20commands/Bleep.md),2,1,1||[Lore](../../SetText/Individual%20commands/Lore.md)\|.
|
||||
|
||||
## Option's [SetText](../../SetText/SetText.md) input string
|
||||
|
||||
@@ -10,9 +10,9 @@ If paused, `listredirect` is overridden to null.
|
||||
|
||||
## Option's [SetText](../../SetText/SetText.md) input string
|
||||
|
||||
If there is no options or the option is -1, the string will be |[color](../../SetText/Commands/Individual%20commands/Color.md),1| followed by the no medals text from MenuText line id 23. Nothing else is done once the string is assigned in this case. It should be noted that if there is indeed no options, this code will never be run because `maxoptions` will also report not having anything so this phase will not have any iterations.
|
||||
If there is no options or the option is -1, the string will be |[color](../../SetText/Individual%20commands/Color.md),1| followed by the no medals text from MenuText line id 23. Nothing else is done once the string is assigned in this case. It should be noted that if there is indeed no options, this code will never be run because `maxoptions` will also report not having anything so this phase will not have any iterations.
|
||||
|
||||
Otherwise, the input string will be |[single](../../SetText/Commands/Individual%20commands/Single.md)\| + ` ` followed by the medal's name obtained from `badgedata` whose medal id is obtained from looking at the medal the player has located at the index of the option. From there a sprite of the medal is rendered on the rightmost part of the bar with different properties whether we are paused or not:
|
||||
Otherwise, the input string will be |[single](../../SetText/Individual%20commands/Single.md)\| + ` ` followed by the medal's name obtained from `badgedata` whose medal id is obtained from looking at the medal the player has located at the index of the option. From there a sprite of the medal is rendered on the rightmost part of the bar with different properties whether we are paused or not:
|
||||
|
||||
* When unpaused, localPosition is (-2.5, 0.0) and localScale is (0.55, 0.6, 1.0)
|
||||
* When paused, localPosition is (-0.25, 0.0) and localScale is (0.7, 0.7, 1.0)
|
||||
@@ -22,7 +22,7 @@ Additionally, there are different additional behaviors depending if we are pause
|
||||
* When unpaused, the y position of the main text is overridden to -0.2.
|
||||
* When paused, the position of the main text is overridden to (0.35, -0.3), the size to Vector2.one and the bar height used for calculating the y position of the down arrow is overridden to -0.9. There is also going to be a bar rendered at the background if the medal is equipped in any way. The color is FFC000 for Vi, 00B800 for Kabbu, 00AFE6 for Leif and FFAE00 for equipped to all. If the medal is equipped to a character, its character icon sprite will also be rendered towards the right of the bar.
|
||||
|
||||
Finally, if this isn't a `sell` list, render the MP icon and the MP cost towards the right of the bar. The cost part is done via [SetText](../../SetText/SetText.md) in non [Dialogue mode](../../SetText/Dialogue%20mode.md) where the input string is |[Font](../../SetText/Commands/Individual%20commands/Font.md),0| followed by the cost obtained from badgedata clamped from 0 to 999 or from 0 to 1 if the RUIGEE [flags](../../Flags%20arrays/flags.md) is active.
|
||||
Finally, if this isn't a `sell` list, render the MP icon and the MP cost towards the right of the bar. The cost part is done via [SetText](../../SetText/SetText.md) in non [Dialogue mode](../../SetText/Dialogue%20mode.md) where the input string is |[Font](../../SetText/Individual%20commands/Font.md),0| followed by the cost obtained from badgedata clamped from 0 to 999 or from 0 to 1 if the RUIGEE [flags](../../Flags%20arrays/flags.md) is active.
|
||||
|
||||
## Description box rendering
|
||||
|
||||
@@ -10,17 +10,17 @@ Display a sanitized version of the taken and completed quests. This is not to be
|
||||
|
||||
## Option's [SetText](../../SetText/SetText.md) input string
|
||||
|
||||
The text is the name of the name of the quest corresponding to the absolute value of the option. If the language is set to `German`, |[Sizemulti](../../SetText/Commands/Individual%20commands/Sizemulti.md),0.7,1| is prepended to the string.
|
||||
The text is the name of the name of the quest corresponding to the absolute value of the option. If the language is set to `German`, |[Sizemulti](../../SetText/Individual%20commands/Sizemulti.md),0.7,1| is prepended to the string.
|
||||
|
||||
If the quest is a story quest (id between 11 and 17), the icon of the corresponding quest is rendered using psprite and the index as the option on the right side of the bar. The y position is 0.2 when completed and 0.25 when taken and if it is taken, the sprite is rendered with a black color.
|
||||
|
||||
Otherwise, if the quest isn't a story quest, but it is completed, a green checkmark is rendered instead of the icon.
|
||||
|
||||
In all cases where a sprite is rendered, `\t` is prepended to the string and |[Tab](../../SetText/Commands/Individual%20commands/Tab.md),tabsize| is appended where tabsize is 6.0 except in `Japanese` where it is 3.0 (also multiplied by 0.85 if the sprite is the checkmark).
|
||||
In all cases where a sprite is rendered, `\t` is prepended to the string and |[Tab](../../SetText/Individual%20commands/Tab.md),tabsize| is appended where tabsize is 6.0 except in `Japanese` where it is 3.0 (also multiplied by 0.85 if the sprite is the checkmark).
|
||||
|
||||
If the language is set to `Japanese` and we are paused, |[size](../../SetText/Commands/Individual%20commands/size.md),0.75,y,[lock](../../SetText/Commands/Individual%20commands/Lock.md)\| is prepended to the string.
|
||||
If the language is set to `Japanese` and we are paused, |[size](../../SetText/Individual%20commands/size.md),0.75,y,[lock](../../SetText/Individual%20commands/Lock.md)\| is prepended to the string.
|
||||
|
||||
Finally, |[single](../../SetText/Commands/Individual%20commands/Single.md)\| is prepended to the string which will serve as the final string.
|
||||
Finally, |[single](../../SetText/Individual%20commands/Single.md)\| is prepended to the string which will serve as the final string.
|
||||
|
||||
The x position of the text is overridden to -0.5 and the size to Vector2.one.
|
||||
|
||||
@@ -21,7 +21,7 @@ If the end result has no quests, add quest id 0 (No Quests) as the only quest of
|
||||
|
||||
## Option's [SetText](../../SetText/SetText.md) input string
|
||||
|
||||
The text is the name of the corresponding quest from boardquestdata prepended with |size,0.5,0.8,lock| in `German` or |[size](../../SetText/Commands/Individual%20commands/size.md),0.6,0.8,lock| in `Japanese`.
|
||||
The text is the name of the corresponding quest from boardquestdata prepended with |size,0.5,0.8,lock| in `German` or |[size](../../SetText/Individual%20commands/size.md),0.6,0.8,lock| in `Japanese`.
|
||||
|
||||
The x position of the text is overridden to 0.0 and the size to Vector2.one.
|
||||
|
||||
@@ -29,13 +29,13 @@ The x position of the text is overridden to 0.0 and the size to Vector2.one.
|
||||
|
||||
`listdescbox` is rendered using a custom rendering scheme. If the quest id isn't No Quest, an image of the quest's author is rendered using `librarysprites` from the index obtained in [boardquestdata](../../TextAsset%20Data/BoardQuests%20data.md#BoardQuests%20data) which will have a name of `Image` and a tag of `Text` towards the top of the description box. Additionally [SetText](../../SetText/SetText.md) is called with the following in non [Dialogue mode](../../SetText/Dialogue%20mode.md):
|
||||
|
||||
* `text`: |[size](../../SetText/Commands/Individual%20commands/size.md),0.75||[sort](../../SetText/Commands/Individual%20commands/Sort.md),1| + The `By:` from MenuText line id 104 + ` ` + The author of the quest obtained from boardquestdata + |[line](../../SetText/Commands/Individual%20commands/Line.md)\||[halfline](../../SetText/Commands/Individual%20commands/Halfline.md)\| + The `Difficulty:` from MenuText line id 105 + ` ` + |[Stars](../../SetText/Commands/Individual%20commands/Stars.md), + The amount of filled in stars of the quest obtained from boardquestdata + `|`
|
||||
* `text`: |[size](../../SetText/Individual%20commands/size.md),0.75||[sort](../../SetText/Individual%20commands/Sort.md),1| + The `By:` from MenuText line id 104 + ` ` + The author of the quest obtained from boardquestdata + |[line](../../SetText/Individual%20commands/Line.md)\||[halfline](../../SetText/Individual%20commands/Halfline.md)\| + The `Difficulty:` from MenuText line id 105 + ` ` + |[Stars](../../SetText/Individual%20commands/Stars.md), + The amount of filled in stars of the quest obtained from boardquestdata + `|`
|
||||
* `position`: (12, 0.35)
|
||||
* `parent`: `listdescbox`
|
||||
|
||||
Whether or not the quest was No Quest, SetText is called in non [Dialogue mode](../../SetText/Dialogue%20mode.md) with the following:
|
||||
|
||||
* `text`: |[sort](../../SetText/Commands/Individual%20commands/Sort.md),1||[single](../../SetText/Commands/Individual%20commands/Single.md)\| + |[singlebreak](../../SetText/Commands/Individual%20commands/Singlebreak.md),10||[Sizemulti](../../SetText/Commands/Individual%20commands/Sizemulti.md),0.8,1| on `German` or |[singlebreak](../../SetText/Commands/Individual%20commands/Singlebreak.md),6| otherwise + the quest's description from boardquestdata before any `}` or `{`
|
||||
* `text`: |[sort](../../SetText/Individual%20commands/Sort.md),1||[single](../../SetText/Individual%20commands/Single.md)\| + |[singlebreak](../../SetText/Individual%20commands/Singlebreak.md),10||[Sizemulti](../../SetText/Individual%20commands/Sizemulti.md),0.8,1| on `German` or |[singlebreak](../../SetText/Individual%20commands/Singlebreak.md),6| otherwise + the quest's description from boardquestdata before any `}` or `{`
|
||||
* `fonttype`: `BubblegumSans`
|
||||
* No linebreak
|
||||
* No tridimensional
|
||||
@@ -61,7 +61,7 @@ In either cases, `questboardobj` will be updated to reflect this page change and
|
||||
|
||||
If type is the open quests board and a `boardcaller` exists, the quest must not be No Quest or a buzzer sound will be played and the confirmation rejected.
|
||||
|
||||
If it is not No Quest, the `questboardobj` is closed which adds an `actioncooldown` of 20 frames, sets `minipause` to false and `inlist` to false. From there, every player entity is set to face towards the entity of the boardcaller. SetText is then called in [Dialogue mode](../../SetText/Dialogue%20mode.md) with the dialogue of the boardcaller prepended with |[Questprompt](../../SetText/Commands/Individual%20commands/Questprompt.md)\| using the entity of the board caller as the parent and its NPCControl as caller. [Flagvar](../../Flags%20arrays/flagvar.md) 0 is set to the selected quest id and the list is finally destroyed which ends this confirmation handling.
|
||||
If it is not No Quest, the `questboardobj` is closed which adds an `actioncooldown` of 20 frames, sets `minipause` to false and `inlist` to false. From there, every player entity is set to face towards the entity of the boardcaller. SetText is then called in [Dialogue mode](../../SetText/Dialogue%20mode.md) with the dialogue of the boardcaller prepended with |[Questprompt](../../SetText/Individual%20commands/Questprompt.md)\| using the entity of the board caller as the parent and its NPCControl as caller. [Flagvar](../../Flags%20arrays/flagvar.md) 0 is set to the selected quest id and the list is finally destroyed which ends this confirmation handling.
|
||||
|
||||
On the other hand, if the type isn't the open quest board and the current map is the TestRoom, the selected quest is removed from the corresponding board, the `questboardobj` is closed (which adds an `actioncooldown` of 20 frames, sets `minipause` to false and `inlist` to false) and the list is destroyed which ends this confirmation handling.
|
||||
|
||||
@@ -8,9 +8,9 @@ Display the list of the currently available [Musics](../../Enums%20and%20IDs/Mus
|
||||
|
||||
## Option's [SetText](../../SetText/SetText.md) input string
|
||||
|
||||
If the option is -1, the text is |[color](../../SetText/Commands/Individual%20commands/Color.md),1| followed by CommonDialogue line 152 which is "We'll buy all songs!" in English.
|
||||
If the option is -1, the text is |[color](../../SetText/Individual%20commands/Color.md),1| followed by CommonDialogue line 152 which is "We'll buy all songs!" in English.
|
||||
|
||||
Otherwise, the entry in `samiramusics` is obtained by using the index of the option (1 is subtracted from it if -1 is in `listvar`). Then, the text becomes the name of the song in `musicnames` using the music id. This is prepended with |[color](../../SetText/Commands/Individual%20commands/Color.md),3| if the song was bought.
|
||||
Otherwise, the entry in `samiramusics` is obtained by using the index of the option (1 is subtracted from it if -1 is in `listvar`). Then, the text becomes the name of the song in `musicnames` using the music id. This is prepended with |[color](../../SetText/Individual%20commands/Color.md),3| if the song was bought.
|
||||
|
||||
The x position of the text is overridden to -2.65.
|
||||
|
||||
@@ -42,7 +42,7 @@ Display the list of the game settings which is platform specific.
|
||||
|
||||
## Option's [SetText](../../SetText/SetText.md) input string
|
||||
|
||||
The text string is rendered on the left side of the bar and it corresponds to the MenuText line id of the settingindex value of the option prepended with |[single](../../SetText/Commands/Individual%20commands/Single.md)\|. Unless otherwise specified, all option will render 2 arrows on the left and right side of the value selection that is located towards the right side of the bar. All [SetText](../../SetText/SetText.md) calls done on the right side of the bar are done in non [Dialogue mode](../../SetText/Dialogue%20mode.md) where the position is (6.25, -0.15), the bar is the parent and the input string is prepended with |[center](../../SetText/Commands/Individual%20commands/Center.md)\||[size](../../SetText/Commands/Individual%20commands/size.md),0.75|. Here are the text and UI details per settings option:
|
||||
The text string is rendered on the left side of the bar and it corresponds to the MenuText line id of the settingindex value of the option prepended with |[single](../../SetText/Individual%20commands/Single.md)\|. Unless otherwise specified, all option will render 2 arrows on the left and right side of the value selection that is located towards the right side of the bar. All [SetText](../../SetText/SetText.md) calls done on the right side of the bar are done in non [Dialogue mode](../../SetText/Dialogue%20mode.md) where the position is (6.25, -0.15), the bar is the parent and the input string is prepended with |[center](../../SetText/Individual%20commands/Center.md)\||[size](../../SetText/Individual%20commands/size.md),0.75|. Here are the text and UI details per settings option:
|
||||
|
||||
|listvar value|settingsindex value|Description|UI rendering (right side of the bar)|
|
||||
|-------------|-------------------|-----------|------------------------------------|
|
||||
52
docs/ItemList/List Types Group Details/Skills List Type.md
Normal file
52
docs/ItemList/List Types Group Details/Skills List Type.md
Normal file
@@ -0,0 +1,52 @@
|
||||
# Skills list type
|
||||
|
||||
Display the list of skills that a party member has access to.
|
||||
|
||||
## Options generation
|
||||
|
||||
`listvar` will be the skills array field of the corresponding playerdata (-1, -2 and -3 means 0, 1 and 2 respectively). They corresponds the skills id of skilldata.
|
||||
|
||||
The playerdata's skills are expected to be refreshed by using RefreshSkills which takes into account the party's rank and [Medal](../../Enums%20and%20IDs/Medal.md)s equipped.
|
||||
|
||||
`listredirect` is overridden to null.
|
||||
|
||||
## Option's [SetText](../../SetText/SetText.md) input string
|
||||
|
||||
This behavior differs depending if we were paused or unpaused.
|
||||
|
||||
### When paused
|
||||
|
||||
A first SetText call is done for the tp cost in non [Dialogue mode](../../SetText/Dialogue%20mode.md) where the input string is |[sort](../../SetText/Individual%20commands/Sort.md),10||[Font](../../SetText/Individual%20commands/Font.md),0| followed by the cost padded left to 2 characters by ` ` or ` -` if there is no cost. This is rendered towards the right of the item bar.
|
||||
|
||||
After, if the TP cost isn't 0, a TP icon (or HP icon if Life Cast is equipped) is rendered on the far right of the item bar.
|
||||
|
||||
Finally, the input string is set to |[single](../../SetText/Individual%20commands/Single.md)\| followed by the skill's name from `skilldata`.
|
||||
|
||||
The position of the input string is overridden to (-0.75, -0.2) and the bar height used for calculating the y position of the down arrow is overridden to -0.9.
|
||||
|
||||
### When unpaused
|
||||
|
||||
A first [SetText](../../SetText/SetText.md) call is done for the tp cost in non [Dialogue mode](../../SetText/Dialogue%20mode.md) where the input string is |[sort](../../SetText/Individual%20commands/Sort.md),10||[size](../../SetText/Individual%20commands/size.md),0.75||[Font](../../SetText/Individual%20commands/Font.md),0| followed by |[color](../../SetText/Individual%20commands/Color.md),1| if the player doesn't have enough TP for the skill followed by the cost padded left to 2 characters by ` `. This is rendered towards the right of the item bar.
|
||||
|
||||
After, if the TP cost isn't 0, a TP icon (or HP icon if Life Cast is equipped) is rendered on the far right of the item bar.
|
||||
|
||||
Then, a string is built with [Icon](../../SetText/Individual%20commands/Icon.md) commands according to some medals being equipped (this is appended in the respective order if the medal is equipped):
|
||||
|
||||
* Needle Toss and Needle pincer: ` ` + |[size](../../SetText/Individual%20commands/size.md),0.55,0.6| + |[Icon](../../SetText/Individual%20commands/Icon.md),192| if Electric Needles, + |[Icon](../../SetText/Individual%20commands/Icon.md),191| if Sleepy Needles and + |[Icon](../../SetText/Individual%20commands/Icon.md),193| if Poison Needles + ` ` + |[size](../../SetText/Individual%20commands/size.md),0.55,0.6| + |[Icon](../../SetText/Individual%20commands/Icon.md),194| if A.D.B.P Enhancer
|
||||
* Tornado Toss and Hurricane Toss: ` ` + |[size](../../SetText/Individual%20commands/size.md),0.55,0.6| + |[Icon](../../SetText/Individual%20commands/Icon.md),194| if A.D.B.P Enhancer
|
||||
* Secret Stash and Sharing Stash: ` ` + |[size](../../SetText/Individual%20commands/size.md),0.55,0.6| + |[Icon](../../SetText/Individual%20commands/Icon.md),218| if Heal Plus
|
||||
* Taunt: ` ` + |[size](../../SetText/Individual%20commands/size.md),0.55,0.6| + |[Icon](../../SetText/Individual%20commands/Icon.md),195| if Deep Taunt
|
||||
|
||||
Finally, the input string is set to the skill's name from skilldata prepended with |[color](../../SetText/Individual%20commands/Color.md),1| if the player doesn't have enough TP for the skill and appended with the icons string.
|
||||
|
||||
The x position of the text is overridden to -2.65.
|
||||
|
||||
## Description box rendering
|
||||
|
||||
It uses the default rendering scheme described in [Description box rendering](../ShowItemList%20Life%20Cycle/Description%20box%20rendering.md) where the text is the skill's description obtained from skilldata using the skill id.
|
||||
|
||||
## Confirmation handling (during battle)
|
||||
|
||||
The skill cost will then be checked if the player has enough and if they can use the skill in general. The cost is stored in [flagvar](../../Flags%20arrays/flagvar.md) 0. If the skill can be used and the player can pay the cost, SetItem is called on the battle with the selected skill and DestroyList is called which ends the processing of the list.
|
||||
|
||||
If the skill can't be used, the buzzer sound will play. In addition, if the player couldn't pay the cost and the skill wasn't Hard Charge, the appropriate hud sprite will flash red (the TP one if it's TP cost or the party member's HP if we have Life Cast).
|
||||
@@ -10,7 +10,7 @@ Otherwise, `listvar` is all the bonus types of the statbonus in order. The amoun
|
||||
|
||||
## Option's [SetText](../../SetText/SetText.md) input string
|
||||
|
||||
If the option is -1, the text is |[color](../../SetText/Commands/Individual%20commands/Color.md),1| followed by MenuText line 20 which is "No Items" in English and [flagvar](../../Flags%20arrays/flagvar.md) 0 is set to -1.
|
||||
If the option is -1, the text is |[color](../../SetText/Individual%20commands/Color.md),1| followed by MenuText line 20 which is "No Items" in English and [flagvar](../../Flags%20arrays/flagvar.md) 0 is set to -1.
|
||||
|
||||
Otherwise, the text is set to the text representation of the StatBonus's name followed by ` x` followed by the amount stored locally followed by `to` followed by the target's name stored locally. The target name is determined like the following: if it's -1, it's `All` and if it isn't, it's MenuText line 46 + the target which are Team Snakemouth's names in order. [flagvar](../../Flags%20arrays/flagvar.md) 1 is also set to `option`.
|
||||
|
||||
@@ -12,9 +12,9 @@ The text is the name of the item from `itemdata` or medal from `badgedata` unles
|
||||
|
||||
The sprite of the item or medal will be rendered on the leftmost side of the bar. This sprite is a gray hexagon with a ? in it if it is a medal and [flags](../../Flags%20arrays/flags.md) 681 (MYSTERY? activation) is true. The localScale of the sprite is (0.55, 0.6, 1).
|
||||
|
||||
If there is only one instance of the item available and its corresponding purchased flags is true, [SetText](../../SetText/SetText.md) is called where the parent is the bar, the position is (1.0, -0.15) and the input string is |[sort](../../SetText/Commands/Individual%20commands/Sort.md),10||[size](../../SetText/Commands/Individual%20commands/size.md),0.6,0.75||[color](../../SetText/Commands/Individual%20commands/Color.md),1| followed by MenuText 190 which is "Sold Out!".
|
||||
If there is only one instance of the item available and its corresponding purchased flags is true, [SetText](../../SetText/SetText.md) is called where the parent is the bar, the position is (1.0, -0.15) and the input string is |[sort](../../SetText/Individual%20commands/Sort.md),10||[size](../../SetText/Individual%20commands/size.md),0.6,0.75||[color](../../SetText/Individual%20commands/Color.md),1| followed by MenuText 190 which is "Sold Out!".
|
||||
|
||||
Otherwise, [SetText](../../SetText/SetText.md) is called where the parent is the bar, the position is (1.4, -0.15) and the input string is |[sort](../../SetText/Commands/Individual%20commands/Sort.md),10||[size](../../SetText/Commands/Individual%20commands/size.md),0.6,0.75| followed by the price of the items in tokens from termacadeprize. Additionally, a token sprite is rendering on the rightmost part of the bar.
|
||||
Otherwise, [SetText](../../SetText/SetText.md) is called where the parent is the bar, the position is (1.4, -0.15) and the input string is |[sort](../../SetText/Individual%20commands/Sort.md),10||[size](../../SetText/Individual%20commands/size.md),0.6,0.75| followed by the price of the items in tokens from termacadeprize. Additionally, a token sprite is rendering on the rightmost part of the bar.
|
||||
|
||||
## Description box rendering
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
* If `sell`:
|
||||
* Set the HUD to show the berry count.
|
||||
* Set [flagvar](../../Flags%20arrays/flagvar.md) 10 to half the buying price rounded down of the item obtained from `itemdata` according to the [listtype](../listtype.md) as the item type and `option` as the item id clamped from 1 to 999.
|
||||
* Prepend the input string prepared earlier with the secondary string obtained earlier followed by `-` + the sell price display line with a [Currency](../../SetText/Commands/Individual%20commands/Currency.md) command at MenuText 49 + |[line](../../SetText/Commands/Individual%20commands/Line.md)\|
|
||||
* Prepend the input string prepared earlier with the secondary string obtained earlier followed by `-` + the sell price display line with a [Currency](../../SetText/Individual%20commands/Currency.md) command at MenuText 49 + |[line](../../SetText/Individual%20commands/Line.md)\|
|
||||
* Calls [SetText](../../SetText/SetText.md) in non [Dialogue mode](../../SetText/Dialogue%20mode.md) with the following:
|
||||
* \|[single](../../SetText/Commands/Individual%20commands/Single.md)\||[singlebreak](../../SetText/Commands/Individual%20commands/Singlebreak.md), + itemdescbreak (This is 10.5 normally) + `|` + the final text determined earlier
|
||||
* \|[single](../../SetText/Individual%20commands/Single.md)\||[singlebreak](../../SetText/Individual%20commands/Singlebreak.md), + itemdescbreak (This is 10.5 normally) + `|` + the final text determined earlier
|
||||
* `BubblegumSans` font
|
||||
* no linebreak
|
||||
* no tridimensional
|
||||
@@ -20,6 +20,6 @@
|
||||
* Create the `listdescbox`.
|
||||
* Render an image of the quest id `option`'s author using `librarysprites` from the index obtained in [BoardQuestData](../../TextAsset%20Data/BoardQuests%20data.md#BoardQuests%20data) which will have a name of `Image` and a tag of `Text`.
|
||||
* Calls [SetText](../../SetText/SetText.md) with the following in non [Dialogue mode](../../SetText/Dialogue%20mode.md):
|
||||
* `text`: |[size](../../SetText/Commands/Individual%20commands/size.md),0.75||[sort](../../SetText/Commands/Individual%20commands/Sort.md),1| + The `By:` from MenuText 104 + ` ` + The author of the quest id `option` obtained from `boardquestdata` + |[line](../../SetText/Commands/Individual%20commands/Line.md)\||[halfline](../../SetText/Commands/Individual%20commands/Halfline.md)\| + The `Difficulty:` from MenuText 105 + ` ` + |[Stars](../../SetText/Commands/Individual%20commands/Stars.md), + The amount of filled in stars of the quest id `option` obtained from `boardquestdata` + `|`.
|
||||
* `text`: |[size](../../SetText/Individual%20commands/size.md),0.75||[sort](../../SetText/Individual%20commands/Sort.md),1| + The `By:` from MenuText 104 + ` ` + The author of the quest id `option` obtained from `boardquestdata` + |[line](../../SetText/Individual%20commands/Line.md)\||[halfline](../../SetText/Individual%20commands/Halfline.md)\| + The `Difficulty:` from MenuText 105 + ` ` + |[Stars](../../SetText/Individual%20commands/Stars.md), + The amount of filled in stars of the quest id `option` obtained from `boardquestdata` + `|`.
|
||||
* `position`: (12, 0.35).
|
||||
* `parent`: `listdescbox`.
|
||||
@@ -2,7 +2,7 @@
|
||||
* If this is a new [ItemList](../ItemList.md), Initializes the static fields: `listmax` to `listammount`, `listlow` to 0, option to 0, `listcursor` to 0, `inlist` to true and create the cursor.
|
||||
* If this is a refresh, free all the letter slots used in [ItemList](../ItemList.md) and itself.
|
||||
* Resets [ItemList](../ItemList.md) to a new GameObject, set its parent to the GUICamera or to the `questboardobj` if it isn't null and set its localPosition to (`position`.x, `position`.y, 10.0).
|
||||
* If [listtype](../listtype.md) is the language selection list, Call [SetText](../../SetText/SetText.md) in non [Dialogue mode](../../SetText/Dialogue%20mode.md) where the text is set to the language selection prompt using the index of option of `listvar` prepended with |[color](../../SetText/Commands/Individual%20commands/Color.md),4||[center](../../SetText/Commands/Individual%20commands/Center.md)\||[sort](../../SetText/Commands/Individual%20commands/Sort.md),20|. This effectively changes the line to match the selected language.
|
||||
* If [listtype](../listtype.md) is the language selection list, Call [SetText](../../SetText/SetText.md) in non [Dialogue mode](../../SetText/Dialogue%20mode.md) where the text is set to the language selection prompt using the index of option of `listvar` prepended with |[color](../../SetText/Individual%20commands/Color.md),4||[center](../../SetText/Individual%20commands/Center.md)\||[sort](../../SetText/Individual%20commands/Sort.md),20|. This effectively changes the line to match the selected language.
|
||||
* If `listlow` is above 0 and `maxoptions` is higher than `listammount` (which means that there are more items than visible at once and we have scrolled below the top):
|
||||
* Setup the up arrow GUI sprite to appear at the top of the list as child of ItemList. The exact setup depends on [listtype](../listtype.md) and if we are in the pause menu.
|
||||
* If we had a list in `overridedlist`, restore it and clear it.
|
||||
@@ -12,7 +12,7 @@
|
||||
* Set the default rendering param to send to [SetText](../../SetText/SetText.md) that can be overridden by [listtype](../listtype.md): x is -2, y is -0.15 and size is (0.75, 0.75).
|
||||
* **Obtain the text of the option according to [listtype](../listtype.md)**.
|
||||
* Calls [SetText](../../SetText/SetText.md) in non [Dialogue mode](../../SetText/Dialogue%20mode.md) using the `BubblegumSans` font in non tridimensional at the position and size determined earlier without a Camoffset with the SpriteRenderer as the parent and without a caller with the text prepended with:
|
||||
* \|[size](../../SetText/Commands/Individual%20commands/size.md),0.6,0.8| when unpaused
|
||||
* \|[size](../../SetText/Individual%20commands/size.md),0.6,0.8| when unpaused
|
||||
* Nothing if paused and [listtype](../listtype.md) is not the current medals list
|
||||
* ` ` otherwise.
|
||||
* If the [ItemList](../ItemList.md) isn't scrolled such that the bottom is visible:
|
||||
@@ -28,7 +28,7 @@ Whether to define the [ItemList](ItemList.md) as an item sell list. This influen
|
||||
|
||||
## Remarks
|
||||
|
||||
This can also be called via the [Pickitem](../SetText/Commands/Individual%20commands/Pickitem.md) [SetText](../SetText/SetText.md) command.
|
||||
This can also be called via the [Pickitem](../SetText/Individual%20commands/Pickitem.md) [SetText](../SetText/SetText.md) command.
|
||||
|
||||
For more information about how ItemLists work, check these documents:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# `inlist` issue
|
||||
|
||||
The [ItemList](ItemList.md) system has a complex issue with `inlist` as it is not always properly cleared after an ItemList is processed which can lead to issues when using the [Pickitem](../SetText/Commands/Individual%20commands/Pickitem.md) command from [SetText](../SetText/SetText.md). This issue has, as of 1.1.2, 2 known reproduction under normal gameplay, but there used to have 3 known reproduction as the first known one was patched in 1.1.0. It is however affecting SetText and ItemList as a whole and its complexity is worth to be thoroughly explained.
|
||||
The [ItemList](ItemList.md) system has a complex issue with `inlist` as it is not always properly cleared after an ItemList is processed which can lead to issues when using the [Pickitem](../SetText/Individual%20commands/Pickitem.md) command from [SetText](../SetText/SetText.md). This issue has, as of 1.1.2, 2 known reproduction under normal gameplay, but there used to have 3 known reproduction as the first known one was patched in 1.1.0. It is however affecting SetText and ItemList as a whole and its complexity is worth to be thoroughly explained.
|
||||
|
||||
## The intent of `inlist`
|
||||
|
||||
@@ -17,7 +17,7 @@ This creates an issue where the following occurs in order:
|
||||
* ShowItemList is called directly which will set `inlist` to true
|
||||
* The ItemList is done processing, but `inlist` remains true
|
||||
* Any SetText calls in [Dialogue mode](../SetText/Dialogue%20mode.md) occurs whose input string starts with anything except Pickitem
|
||||
* The first char loop iteration gets done and now we are in [SetText Life Cycle > Dialogue post-processing](../SetText/SetText%20Life%20Cycle.md#dialogue-post-processing) while ItemList is null and `inlist` is true which is treated as if an ItemList is ready to be handled while no such ItemList happened during the course of this SetText call
|
||||
* The first char loop iteration gets done and now we are in [SetText Life Cycle > Dialogue post-processing](../SetText/Life%20Cycle.md#dialogue-post-processing) while ItemList is null and `inlist` is true which is treated as if an ItemList is ready to be handled while no such ItemList happened during the course of this SetText call
|
||||
* If `listredirect` was set from a previous Pickitem command, SetText will redirect to it which leads to undefined behaviors depending on what value it had before
|
||||
|
||||
## Mitigations in place
|
||||
@@ -37,6 +37,6 @@ Despite all those measures, there are 2 known cases to reproduce this issue:
|
||||
|
||||
While it is possible to apply workarounds as reproductions are found by the caller or after the ItemList is fully handled, it is possible to permanently fix this issue.
|
||||
|
||||
The first way would be to guarantee that `inlist` is set to false during the [SetText Life Cycle > Dialogue setup](../SetText/SetText%20Life%20Cycle.md#dialogue-setup) of SetText. This can work because it is not possible to make use of the value until a Pickitem is processed in which case, it is dangerous to leave it dangling at a false value. While it would still leave the value dangling in the end, any potential problems will be negated immediately by the next SetText call in [Dialogue mode](../SetText/Dialogue%20mode.md).
|
||||
The first way would be to guarantee that `inlist` is set to false during the [SetText Life Cycle > Dialogue setup](../SetText/Life%20Cycle.md#dialogue-setup) of SetText. This can work because it is not possible to make use of the value until a Pickitem is processed in which case, it is dangerous to leave it dangling at a false value. While it would still leave the value dangling in the end, any potential problems will be negated immediately by the next SetText call in [Dialogue mode](../SetText/Dialogue%20mode.md).
|
||||
|
||||
The second way would be to clear `listredirect` right after a redirection is performed if any. This wouldn't entirely fix the problem, but it will neuter the potential problems to a safer level.
|
||||
@@ -97,7 +97,7 @@ The `CapsuleCollider` component of the entity GameObject is accessible via the `
|
||||
|191|initialheight|float||
|
||||
|192|bobrange|float||
|
||||
|193|bobspeed|float||
|
||||
|194|npcdata.activationflag|int|A [Flag](../SetText/Commands/Individual%20commands/Flag.md) slot used when this entity is activated|
|
||||
|194|npcdata.activationflag|int|A [Flag](../SetText/Individual%20commands/Flag.md) slot used when this entity is activated|
|
||||
|195|npcdata.returntoheight|bool or int|Int if the length in string is 1:|
|
||||
|
||||
## Name Modifiers
|
||||
|
Before Width: | Height: | Size: 260 KiB After Width: | Height: | Size: 260 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user