<aside> 💡
“>” sign in the described parameters means that in its place you can use ANY one of the following signs: <, <=, =, >=, >
</aside>
| Action name | Parameters | Restrictions in usage | Description | Additional info |
|---|---|---|---|---|
| QUESTS | ||||
| NextQuest | “sidQuest” | Only in the .json quest file | 1. Disables the quest within which this action is called. |
sidQuest can be omitted entirely. In that case the current quest will simply be disabled. | | EndQuest | “sidQuest1”, “sidQuest2”, “sidQuest3”, … | Only in the .json quest file | Disables ALL quests with the specified sids. | | | SUBQUESTS | | | | | | NextSubQuest | “sidSubQuest1”, “sidSubQuest2”, … | Only in the .json quest file | 1. Disables ALL subquests of the quest within which this action is called. 2. Activates ALL subquests with the specified sids. | | | SubQuestActivate | “sidQuest”, “sidSubQuest” | Only in the .json quest file | 1. Searches the script file for the quest with the specified sid. 2. Activates its subquest with the specified sid. | | | SubQuestDeactivate | “sidQuest”, “sidSubQuest” | Only in the .json quest file | 1. Searches the script file for the quest with the specified sid. 2. Deactivates its subquest with the specified sid. | | | CurrentSubQuestDone | — | Only in the .json quest file | “Greys out” the current subquest in the quest log (i.e. the one within which this action is called) = makes it visually finished. | ❗The subquest remains active.
This action only affects the visuals for the player. | | SubQuestDone | “sidQuest”, “sidSubQuest” | Only in the .json quest file | 1. Searches the script file for the quest with the specified sid. 2. "Greys out" its subquest with the specified sid in the quest log. | ❗The subquest remains active.
This action only affects the visuals for the player. | | SUBQUEST GROUPS | | | | | | NextQuestAfterGroup | “sidSubQuestGroup”, “sidQuest” | Only in the .json quest file | WHEN ALL subquests comprising the subquest group with the specified sid are completed, enables the quest with the specified sid. | 🔑 Action with a precondition = only triggers when the internal condition is satisfied. | | NextAfterGroup | “sidSubQuestGroup”, “sidSubQuest” | Only in the .json quest file | WHEN ALL subquests comprising the subquest group with the specified sid are completed, enables the subquest with the specified sid. | 🔑 Action with a precondition. | | NextSubGroupAfterGroup | “sidSubQuestGroup1”, “sidSubQuestGroup2” | Only in the .json quest file | WHEN ALL subquests comprising the subquest group with sid1 are completed, enables ALL subquests comprising the subquest group with sid2. | 🔑 Action with a precondition. | | RE-ACTIVATING CONDITIONS | | | | | | TriggerClear | “sidQuest”, “sidSubQuest”, “indexTrigger” | Only in the .json quest file | 1. Searches the script file for the quest with the specified sid. 2. Searches for its subquest with the specified sid. 3. RE-enables ALL conditions of the trigger with the specified index. | Effectively forces the conditions to "forget" that they were triggered previously.
❗index assignment happens automatically when map is saved in the editor, based on the order of lines in the script file.
❗index numbering starts from 0. ”Trigger1” = 0, “Trigger2” = 1, etc. | | TriggerClearCustom | “sidQuest”, “sidSubQuest”, “indexTrigger”, “indexCondition” | Only in the .json quest file | 1. Searches the script file for the quest with the specified sid. 2. Searches for its subquest with the specified sid. 3. Searches for its trigger with the specified index. 4. RE-enables its condition with the specified index.. | Effectively forces the conditions to "forget" that they were triggered previously.
Used primarily to disable individual conditions linked by "conditionsLogic": "And".
❗index assignment happens automatically when map is saved in the editor, based on the order of lines in the script file.
❗index numbering starts from 0. ”Condition1” = 0, “Condition2” = 1, etc. |
| Action name | Parameters | Restrictions in usage | Description | Additional info |
|---|---|---|---|---|
| GENERAL TECHNICAL THINGS | ||||
| AutoSave | — | — | Artificially forces the game to create an autosave at the moment the action is called. | ❗All actions that were supposed to execute immediately AFTER the AutoSave call will not be saved. |
❗In the current implementation, does NOT create a new autosave, but overwrites the autosave of the last day. | | Print | “string1”, “string2”, … | — | Outputs the specified lines of text to the developer log / console. | An exclusively debugging tool. Has no effect in the game. | | THE “INTERRUPTIONS” SYSTEM | | | | | | DisableInterruption | “sidInterruption” | Only in the .json quest file | Forces the specified interruption to stop triggering. | The interruption continues to physically exist, but it will no longer be called when its condition is satisfied (which depends on the type of interruption and its parameters). | | EnableInterruption | “sidInterruption” | Only in the .json quest file | Forces the specified disabled interruption to start triggering again. | | | BreakInterruptions | — | Only in dialogues | Stops the current interruption, allowing the game to continue operating under normal rules. A technical auxiliary action. | Used to move one hero out of another's aggro zone when it is necessary to end their interaction without starting a battle (since while an interruption is active, heroes cannot move).
❗Used exclusively within the following context:
"mapActions": [ { "a": "BreakInterruptions" }, { "a": "StepBack" } ], "actions": [ { "a": "End", "p": [ "break" ] } ] |
| LOCAL COUNTERS (MAP-SPECIFIC) | | | | |
| CounterPlus | “sidCounter”, “X” | — | Increases the value of the local counter with the given sidCounter by the specified integer X. | 📌 Map-specific action = Interacts with the local counters of the map within which it was called. Their list is defined in the "counters" block of the *map_name*.jsonfile. |
| CounterMinus | “sidCounter”, “X” | — | Decreases the value of the local counter with the given sidCounter by the specified integer X. | 📌 Map-specific action. |
| CounterSet | “sidCounter”, “X” | — | Overwrites the value of the local counter with the given sidCounter with the new specified integer X. | 📌 Map-specific action. |
| CounterSetRandom | “counterSid”, ”XMin”, ”XMax” | — | Overwrites the value of the local counter with the given sidCounter with a random integer value in the range from XMin to XMax. | 📌 Map-specific action. |
| GLOBAL COUNTERS (CAMPAIGN-SPECIFIC) | | | | |
| StoryCounterPlus | “sidStoryCounter”, “X” | — | Increases the value of the global counter with the given sidStoryCounter by the specified integer X. | 🗺️ Campaign-specific action = Interacts with the global counters of the campaign within which it was called. Their list is defined in the file:
HeroesOldenEra_Data\StreamingAssets\Core.zip\DB\campaigns\*campaign_name*\storyCounters.json
❗Will not work outside of a campaign. ❗When added inside a dialog, must be written into the "actions" block, not the "mapActions" block. | | StoryCounterMinus | “sidStoryCounter”, “X” | — | Decreases the value of the global counter with the given sidStoryCounter by the specified integer X. | 🗺️ Campaign-specific action.
❗Will not work outside of a campaign. ❗When added inside a dialog, must be written into the "actions" block, not the "mapActions" block. | | StoryCounterSet | “sidStoryCounter”, “X” | — | Overwrites the value of the global counter with the given sidStoryCounter with the new specified integer X. | 🗺️ Campaign-specific action.
❗Will not work outside of a campaign. ❗When added inside a dialog, must be written into the "actions" block, not the "mapActions" block. |
All dialogs are called instantly on top of all other interfaces. If another dialog is already open at the moment a new one is called, the new dialog is added to the dialog queue.
All dialog actions, except RandomDialog, can have an optional "break" parameter added. If it is specified, after the dialog ends, ALL further game logic in the queue will be interrupted. That is, if "break" was specified:
| Action name | Parameters | Restrictions in usage | Description | Additional info |
|---|---|---|---|---|
| DIALOGUES | ||||
| Dialog | “sidDialogue”, “break” | — | Calls the dialog with the specified sid. | |
| DialogIfHero | “sidDialogue”, “sidHero”, “break” | — | IF the currently selected hero has the specified sid, calls the dialog with the specified sid. | 🔑 Action with a precondition = only triggers when the internal condition is satisfied. |
| DialogIfRes | “sidDialogue”, “sidResource”, ”>”, ”X”, “break” | — | IF at the moment this action is called the player has a supply of the resource with the specified sid that satisfies the specified inequality, calls the dialog with the specified sid. |
X — any integer. | 🔑 Action with a precondition. **** | | DialogIfCounter | “sidDialogue”, “sidCounter”, ”>”, ”X”, “break” | — | IF at the moment this action is called the value of the local counter with the specified sid satisfies the specified inequality, calls the dialog with the specified sid.
X — any integer. | 🔑 Action with a precondition. ****
❗Works only with the local counters. | | DialogIfItem | “sidDialogue”, “sidItem”, “break” | — | IF at the moment this action is called the currently selected hero has an item with the specified sidItem in their inventory / backpack, calls the dialog with the specified sid. | 🔑 Action with a precondition. **** | | RandomDialog | “sidDialogue1”, “sidDialogue2”, … | — | Calls one random dialog from the specified list of sids. | ❗“break” cannot be added. | | ONE-TIME DIALOGUES | | | | | | DialogOne | “sidDialogue”, “break” | — | A Dialog action that triggers only once and is disabled for the rest of the match. | | | DialogOneIfHero | “sidDialogue”, “sidHero”, “break” | — | A DialogIfHero action that triggers only once and is disabled for the rest of the match. | | | DialogOneIfRes | “sidDialogue”, “sidResource”, ”>”, ”X”, “break” | — | A DialogIfRes action that triggers only once and is disabled for the rest of the match. | | | DialogOneIfCounter | “sidDialogue”, “sidCounter”, ”>”, ”X”, “break” | — | A DialogIfCounter action that triggers only once and is disabled for the rest of the match. | | | OTHER UIs | | | | | | ShowFloatingUI | “sidIcon”, “string” | — | Displays a floating and then fading icon with the specified sid and the specified text string above the currently selected hero. | Currently used only to display faction reputation changes.
Possible sidIcon values: dungeon_icon — Dungeon human_icon — Temple undead_icon — Necropolis spring_icon — Grove unfrozen_icon — Schism hive_icon — Hive | | OpenUI | “sidUI” | — | Forcibly opens the interface with the specified sid. | Possible sidUI values: LevelUp — level up screen HeroUI — hero screen (inventory + stats) HeroWithHero — exchange between heroes MagicBook — spellbook on the map MagicBookBattle — spellbook in combat | | Guide | “sidGuide” | — | Opens a tutorial window (a block of several slides) with the specified sid. | ❗When added inside a dialog, must be written into the "actions" block, not the "mapActions" block.
The list of available sids can be found in the files:
HeroesOldenEra_Data\StreamingAssets\Core.zip\DB\guides\*tutorial_name*\*guide_name*.json |
| Action name | Parameters | Restrictions in usage | Description | Additional info |
|---|---|---|---|---|
| GAME RULES | ||||
| SideLose | “indexPlayer” | — | Forces the player with the specified index to lose. | • A defeat message is displayed for them; |
| • All of their heroes are removed; | ||||
| • All of their castles and captured objects become neutral. | ||||
| GameLose | — | — | Forces the player interacting with this quest/trigger to lose. | In the script file, it acts on the player who falls under the specified "sharing" type. |
As a trigger, it acts on the player whose hero performs the interaction. | | GameVictory | — | — | Forces the player interacting with this quest/trigger to win. | In the script file, it acts on the player who falls under the specified "sharing" type.
As a trigger, it acts on the player whose hero performs the interaction. | | ChangeCampaignOneStep | “bool” | — | Enables or disables single-turn mode. | Single-turn mode: • All heroes receive an unlimited supply of movement points; • The ability to skip turns is blocked.
Possible bool values:
true — enable
false — disnable |
| AddGlobalBuff | “sidBuff”, ”durationType”, ”X” | — | Applies a global effect with the specified sid for one or more turns/battles.
(or for X turns/battles — depends on the durationType). | The list of available sidBuff values is located in the file:
HeroesOldenEra_Data\StreamingAssets\Core.zip\DB\logic_global_buffs\logic_global_buffs.json
X — an optional parameter. Only specified for certain durationType values.
Possible durationType values: Infinite — until the end of the match UntilNextWeek — until the end of the week UntilNextDay — until the end of the turn UntilNextBattle — until the end of a battle ForSeveralDays — for X days ForSeveralBattles — for X battles | | RemoveGlobalBuff | “sidBuff” | — | Disables the global effect with the specified sid. | The effect is removed from the game. To enable it again, it will need to be re-applied using AddGlobalBuff. | | CAMERA AND FOR OF WAR | | | | | | MoveCamera | “indexNode” | — | Moves the camera center of the given player to the node/cell with the specified index. | The node index can be seen in the editor in the bottom right corner of the screen by hovering the cursor over it. | | MoveCameraToSelectHero | — | — | Moves the camera center of the given player to the node/cell where the currently selected hero is located. | | | RevealFogOfWar | “indexNode”, “X” | — | Reveals the fog of war within a radius of X around the node with the specified index. | At the minimum possible value of X=1, the fog will be revealed in the cell with the specified indexNode and in all adjacent cells.
❗If X=0, no cells will be dispelled. |
| CreateFogOfWar | “indexNode”, “X” | — | Creates fog of war within a radius of X around the node with the specified index. | ❗Cannot create fog in the visibility range of a hero / castle / object with an owner. |
| ECONOMY, CASTLES, OBJECT CONTROL | | | | т |
| GiveRes | “sidResource”, “X” | — | Gives X units of the resource with the specified sid to the interacting player. | |
| RemoveRes | “sidResource”, “X” | — | Takes X units of the resource with the specified sid from the interacting player. | Takes away down to 0.
A player cannot have a negative amount of resources. |
| UnlockSpell | “sidSpell” | — | Unlocks the spell with the specified sid in the player's magic observatory. | The lists of all sidSpell values are located in the files:
HeroesOldenEra_Data\StreamingAssets\Core.zip\DB\magic\*magic_type*.json |
| UnlockBuildingCity | ”sidBuilding”, “level”, ”entityObject” | — | Unlocks for construction the building with the specified sid at the specified level in the castle with the specified entity. | Used only for castles that had initial restrictions on the construction of certain buildings.
❗level — a required parameter. Possible level values: • For mage guild — 1-5 • For main building and walls — 1-3 • For dwellings — 1-2 • For all other buildings — only 1 | | CreateBuildingCity | ”sidBuilding”, “level”, ”entityObject” | — | Creates the building with the specified sid at the specified level in the castle with the specified entity. | ❗level — a required parameter. Possible level values: • For mage guild — 1-5 • For main building and walls — 1-3 • For dwellings — 1-2 • For all other buildings — only 1 | | CaptureObject | “entityObject” | — | Transfers the object with the specified entity under the control of the given player. | | | LoseObject | “entityObject” | — | Makes the object with the specified entity neutral. | |
| Action name | Parameters | Restrictions in usage | Description | Additional info |
|---|---|---|---|---|
| CREATING / “RECHARGING” OBJECTS | ||||
| SpawnObject | “sidMapObject”, “indexNode”, “boolMirror”, “entityObject” | — | 1. Creates an interactive object with the specified sidObject in node indexNode. |
entityObject — optional parameter
Possible boolMirror values: true — mirror horizontally false — do not mirror | | SpawnMapObject | “sidMapObject”, “indexNode”, “rotation”, “entityObject” | — | 1. Creates an non-nteractive object with the specified sidMapObject in node indexNode. 2. Rotates it according to the specified rotation. 3. Assigns entityObject entity property to it. | ❗For decorations only.
entityObject — optional parameter
Possible rotation values (correspond to those in the object's properties): 0 — 0° 1 — 90° 2 — 180° 3 — 270° | | CreateVFX | “sidVFX”, “indexNode”, “boolRotation”, “isActive”, “entityVFX” | — | 1. Creates an visual effect with the specified sid in node indexNode. 2. Rotates / does not rotate it to a random position according to the value of boolRotation. 3. Enables/disables it 4. Assigns entityVFX entity property to it. | entityVFX — optional parameter
Possible boolRotation values: true — rotate to a random position false — do not rotate
Example:
"a": "CreateVFX", "p": [ "fx_map_fire", "520", "false", "true", "fire_ending" ]
Possible bool values: true — enable false — disable | | SetQuestMarker | “entityObject”, “locationQMarker” | — | Sets the Quest marker property on any object with the specified entity — a visual label above the model (the marker type is determined by the specified locationQMarker address). | Quest markers come in two categories: • Gold (main quests) • Silver (side quests)
Quest markers come in three types: ? — dialog object / quest giver ! — quest objective (something to interact with, …) ^ — object/point to be reached
❗A new quest marker will not be visible above an object if its Active property has been disabled (see SetActiveQuestMarker for details)
Possible locationQMarker values: effects/global_map/quest_mark_gold_01 = ? effects/global_map/quest_mark_gold_02 = ! effects/global_map/quest_mark_gold_03 = ^ effects/global_map/quest_mark_silver_01 = ? effects/global_map/quest_mark_silver_02 = ! effects/global_map/quest_mark_silver_03 = ^ | | SetActiveQuestMarker | “entityObject”, “bool” | — | Enables or disables the visibility of the quest marker on any object with the specified entity. | ❗No marker will be visible above the object if a quest marker has not been set on it beforehand (see SetQuestMarker for details)
Possible bool values: true — enable false — disable | | SetActivePortal | “entityPortal”, “bool” | — | Enables or disables the portal with the specified entity. | A disabled portal will be displayed in-game as an "exit portal.”
Possible bool values: true — enable false — disable | | SetActiveMarker | “entityZone”, ”bool” | — | Enables or disables the trigger zone with the specified entity. | ❗Trigger zones that are not disabled will interrupt hero movement every time. EVEN if their action had a precondition that wasn’t met. | | DELETING OBJECTS / THEIR TRIGGERS | | | | | | DeleteEntity | “entityObject” | — | Removes any entity (interactive object / decoration object / VFX / castle / neutral squad) from the map, EXCEPT heroes. | A separate action DeleteHero is used for removing heroes — see Heroes
❗A non-interactive object can only be deleted if the "No combine geometry" property was added and enabled in its parameters.
❗Neutral squads removed by this action will ALWAYS trigger their death animation. A separate action DeleteSquad is used to configure any different animation — see Neutral squads | | DeleteMarkerByNode | “indexNode” | — | Deletes ONE trigger zone, any of whose cells lies in the node with the specified indexNode. | Used for forcibly deleting trigger zones that do not have their own ‘entity’ property.
Most commonly — for trigger zones that call a dialog ending with a slide containing "resultDialog": "Interrupt” (since this field prevents the zone from automatically deleting itself via the "Delete after trigger" checkbox). |
| EntityActionsOff | “entityObject” | — | Disables all triggers on the object with the specified entity. | The action permanently removes all contents of the Actions Before and Actions After properties. |
| CAPTURING OBJECTS | | | | |
| CaptureObject | “entityObject” | — | Transfers the object with the specified entity under the control of the given player | |
| LoseObject | “entityObject” | — | Makes the object with the specified entity neutral. | |