2024-06-06 13:56:08 -04:00
# Quest Command Reference
2024-05-27 13:14:18 -04:00
The quest commands are the commands used by the quest state machine in the client. As far as we can tell, the result commands are always executed first. Then the check commands are what control the progress of the state machine to request the next block for the process.
There are certain acronyms used in the command names
| Acronym | Meaning |
|:-------:|:-------:|
| Em | Enemy |
| Eq | Equal |
| OM | Object Manager (doors, levers, glowing points) |
| Pl | Player |
| Prt | Party |
| Qst | Quest |
| Sce | Scenario Bounding box? |
> [!NOTE]
> Some of the commands have misspellings in their names. I left them as originally sourced to help with searching/reverse engineering.
2024-06-06 13:56:08 -04:00
## Check Commands
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
Check commands are commands which gate the progress/advancement of the current quest block in a process to the next quest block in a process.
### TalkNpc
2026-04-10 20:21:59 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00635020` |
| Table index | 1 (check) |
| Key fields | Looks up NPC by npcId; **returns 0 (blocks) when NPC+0x11 != 0** (i.e. NPC is in order mode) |
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2026-04-10 20:21:59 -04:00
* @brief Progresses when the player talks to the specified NPC.
* Fails immediately if the NPC's order mode flag (NPC+0x11) is set — NPC is reserved for an order interaction.
2024-05-27 13:14:18 -04:00
* @param stageNo
* @param npcId
*/
TalkNpc(StageNo stageNo, NpcId npcId, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### DieEnemy
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
*/
DieEnemy(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### SceHitIn
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param sceNo
*/
SceHitIn(StageNo stageNo, int sceNo, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### HaveItem
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param itemId
* @param itemNum
*/
HaveItem(int itemId, int itemNum, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### DeliverItem
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param itemId
* @param itemNum
* @param npcId
* @param msgNo
*/
DeliverItem(int itemId, int itemNum, NpcId npcId = NpcId.None, int msgNo = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### EmDieLight
```
2024-05-27 13:14:18 -04:00
/**
* @brief
2024-10-28 22:01:09 -07:00
* @param enemyGroupId
2024-05-27 13:14:18 -04:00
* @param enemyLv
* @param enemyNum
*/
2024-10-28 22:01:09 -07:00
EmDieLight(int enemyGroupId, int enemyLv, int enemyNum, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### QstFlagOn
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param questId
* @param flagNo
*/
QstFlagOn(int questId, int flagNo, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### QstFlagOff
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param questId
* @param flagNo
*/
QstFlagOff(int questId, int flagNo, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### MyQstFlagOn
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
*/
MyQstFlagOn(int flagNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### MyQstFlagOff
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
*/
MyQstFlagOff(int flagNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### Padding00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
Padding00(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### Padding01
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
Padding01(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### Padding02
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
Padding02(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### StageNo
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
*/
StageNo(StageNo stageNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### EventEnd
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param eventNo
*/
EventEnd(StageNo stageNo, int eventNo, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### Prt
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2024-06-08 23:55:17 -04:00
* @brief Checks to see if all members of the party are ready before proceding.
* There is an equivalent ResultCommand which spawns this point.
2024-05-27 13:14:18 -04:00
* @param stageNo
* @param x
* @param y
* @param z
*/
Prt(StageNo stageNo, int x, int y, int z);
2024-06-06 13:56:08 -04:00
```
### Clearcount
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param minCount
* @param maxCount
*/
Clearcount(int minCount, int maxCount, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### SceFlagOn
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
*/
SceFlagOn(int flagNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### SceFlagOff
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
*/
SceFlagOff(int flagNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### TouchActToNpc
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param npcId
*/
TouchActToNpc(StageNo stageNo, NpcId npcId, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### OrderDecide
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param npcId
*/
OrderDecide(NpcId npcId, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### IsEndCycle
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsEndCycle(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsInterruptCycle
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsInterruptCycle(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsFailedCycle
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsFailedCycle(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsEndResult
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsEndResult(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### NpcTalkAndOrderUi
2026-04-10 20:21:59 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00636570` |
| Table index | 26 (check) |
| Key fields | Sets NPC+0x11 = 1 (order flag); stores `noOrderGroupSerial` at **NPC object +0xc** ; delegates to TalkNpc sub-check; clears NPC+0x11 on success |
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2026-04-10 20:21:59 -04:00
* @brief Orders a quest from an NPC with multiple talking options.
* Sets the NPC's order mode flag (NPC+0x11 = 1), stores noOrderGroupSerial on the NPC object (+0xc)
* for the UI to select the right dialog group, then gates on TalkNpc (player must physically talk).
* On success: clears NPC+0x11 = 0 and calls the order-confirm function.
2024-05-27 13:14:18 -04:00
* @param stageNo
* @param npcId
2026-04-10 20:21:59 -04:00
* @param noOrderGroupSerial Stored at NPC+0xc; selects which dialog group to present.
2024-05-27 13:14:18 -04:00
*/
NpcTalkAndOrderUi(StageNo stageNo, NpcId npcId, int noOrderGroupSerial, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### NpcTouchAndOrderUi
2026-04-10 20:21:59 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00636660` |
| Table index | 27 (check) |
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2026-06-15 18:29:40 +01:00
* @brief Orders a quest from an NPC with no talking options after order (touch/proximity only).
* Sets TalkData to (npcId, noOrderGroupSerial) and plays dialogue when the quest is not ordered.
2024-05-27 13:14:18 -04:00
* @param stageNo
* @param npcId
* @param noOrderGroupSerial
*/
NpcTouchAndOrderUi(StageNo stageNo, NpcId npcId, int noOrderGroupSerial, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### StageNoNotEq
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
*/
StageNoNotEq(StageNo stageNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### Warlevel
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param warLevel
*/
Warlevel(int warLevel, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### TalkNpcWithoutMarker
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param npcId
*/
TalkNpcWithoutMarker(StageNo stageNo, NpcId npcId, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### HaveMoney
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param gold
* @param type
*/
HaveMoney(int gold, int type, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### SetQuestClearNum
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2026-04-09 21:48:57 -04:00
* @brief Waits until the player has cleared at least one world quest ("Set Quest") in the given area.
* Client handler: 0x00636B30
*
* @note "Set Quest" is the internal engine name; "World Quest" is the English localisation.
*
* @param clearNum The required clear count. NOTE: NEVER READ by the client handler — the client
* only checks whether areaId appears in a 4-slot cleared-area byte array at
* ctx+0x5c+0x25a. The count is advisory for the server-side work item only.
* @param areaId The QuestAreaId to check. Scanned against up to 4 stored area-ID bytes.
*
* @note The check also requires bit 5 of ctx+0x5c+0x208 to be set. This bit and the area-ID
* slot are written by the S2CQuestQuestProgressWorkSaveNtc carrying
* QuestNotifyCommand.SetQuestClearNum (notify ID 32). The server sends this NTC either:
* (a) When a world quest in the target area completes (WorldQuestClearedProgressWork), or
* (b) Immediately at block dispatch time if a matching world quest was already cleared
* (HandlePreSatisfiedWorldQuestWork in QuestQuestProgressHandler).
2024-05-27 13:14:18 -04:00
*/
SetQuestClearNum(int clearNum, int areaId, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### MakeCraft
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
MakeCraft(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### PlayEmotion
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
PlayEmotion(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### IsEndTimer
2024-05-27 13:14:18 -04:00
2026-04-12 20:39:06 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00636BF0` |
| Table index | 35 (check) |
| Key callees | `FUN_0064d130(timerNo)` — Timer List A lookup at ctx+0xf0/0xfc; returns `entry+8` |
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2026-04-12 20:39:06 -04:00
* @brief Returns true when a quest instance timer (Timer List A) has expired.
* Walks the timer list keyed by timerNo; returns entry+8 == 0.
* Returns false (-1 sentinel) if timerNo is not registered.
* @note Pair with StartTimer(timerNo, sec). Server must schedule a QuestProgressNtc
* to fire at expiry so the client re-evaluates this check.
* @param timerNo Timer slot identifier (set by StartTimer)
2024-05-27 13:14:18 -04:00
*/
IsEndTimer(int timerNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### IsEnemyFound
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
*/
IsEnemyFound(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### RandomEq
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2026-04-05 09:04:41 -04:00
* @brief Returns true if the value stored in random slot randomNo equals value.
* Slot must have been set by SetRandom first; returns false if unset.
* Ghidra: 0x00636F60. param03/param04 unused.
* @param randomNo Index of the random slot (0-based).
* @param value Value to compare against.
2024-05-27 13:14:18 -04:00
*/
RandomEq(int randomNo, int value, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### RandomNotEq
```
2024-05-27 13:14:18 -04:00
/**
2026-04-05 09:04:41 -04:00
* @brief Returns true if the value stored in random slot randomNo does not equal value.
* Ghidra: 0x00637030. param03/param04 unused.
* @param randomNo Index of the random slot (0-based).
* @param value Value to compare against.
2024-05-27 13:14:18 -04:00
*/
RandomNotEq(int randomNo, int value, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### RandomLess
```
2024-05-27 13:14:18 -04:00
/**
2026-04-05 09:04:41 -04:00
* @brief Returns true if the value stored in random slot randomNo is less than value.
* Ghidra: 0x00637100. param03/param04 unused.
* @param randomNo Index of the random slot (0-based).
* @param value Value to compare against.
2024-05-27 13:14:18 -04:00
*/
RandomLess(int randomNo, int value, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### RandomNotGreater
```
2024-05-27 13:14:18 -04:00
/**
2026-04-05 09:04:41 -04:00
* @brief Returns true if the value stored in random slot randomNo is less than or equal to value.
* Ghidra: 0x006371D0. param03/param04 unused.
* @param randomNo Index of the random slot (0-based).
* @param value Value to compare against.
2024-05-27 13:14:18 -04:00
*/
RandomNotGreater(int randomNo, int value, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### RandomGreater
```
2024-05-27 13:14:18 -04:00
/**
2026-04-05 09:04:41 -04:00
* @brief Returns true if the value stored in random slot randomNo is greater than value.
* Ghidra: 0x006372A0. param03/param04 unused.
* @param randomNo Index of the random slot (0-based).
* @param value Value to compare against.
2024-05-27 13:14:18 -04:00
*/
RandomGreater(int randomNo, int value, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### RandomNotLess
```
2024-05-27 13:14:18 -04:00
/**
2026-04-05 09:04:41 -04:00
* @brief Returns true if the value stored in random slot randomNo is greater than or equal to value.
* Ghidra: 0x00637370. param03/param04 unused.
* @param randomNo Index of the random slot (0-based).
* @param value Value to compare against.
2024-05-27 13:14:18 -04:00
*/
RandomNotLess(int randomNo, int value, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### Clearcount02
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param div
* @param value
*/
Clearcount02(int div, int value, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IngameTimeRangeEq
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param minTime
* @param maxTime
*/
IngameTimeRangeEq(int minTime, int maxTime, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IngameTimeRangeNotEq
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param minTime
* @param maxTime
*/
IngameTimeRangeNotEq(int minTime, int maxTime, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### PlHp
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param hpRate
* @param type
*/
PlHp(int hpRate, int type, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### EmHpNotLess
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param hpRate
*/
EmHpNotLess(StageNo stageNo, int groupNo, int setNo, int hpRate);
2024-06-06 13:56:08 -04:00
```
### EmHpLess
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param hpRate
*/
EmHpLess(StageNo stageNo, int groupNo, int setNo, int hpRate);
2024-06-06 13:56:08 -04:00
```
### WeatherEq
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param weatherId
*/
WeatherEq(int weatherId, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### WeatherNotEq
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param weatherId
*/
WeatherNotEq(int weatherId, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### PlJobEq
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param jobId
*/
PlJobEq(int jobId, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### PlJobNotEq
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param jobId
*/
PlJobNotEq(int jobId, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### PlSexEq
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param sex
*/
PlSexEq(int sex, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### PlSexNotEq
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param sex
*/
PlSexNotEq(int sex, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### SceHitOut
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param sceNo
*/
SceHitOut(StageNo stageNo, int sceNo, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### WaitOrder
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
WaitOrder(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### OmSetTouch
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2024-06-11 01:19:09 -04:00
* @brief Used to touch objects spawned by World Manage Quests.
2024-05-27 13:14:18 -04:00
* @param stageNo
* @param groupNo
* @param setNo
*/
OmSetTouch(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### OmReleaseTouch
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2024-06-11 01:19:09 -04:00
* @brief Used to detect released objects spawned by World Manage Quests.
2024-05-27 13:14:18 -04:00
* @param stageNo
* @param groupNo
* @param setNo
*/
OmReleaseTouch(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### JobLevelNotLess
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param checkType
* @param level
*/
JobLevelNotLess(int checkType, int level, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### JobLevelLess
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param checkType
* @param level
*/
JobLevelLess(int checkType, int level, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### MyQstFlagOnFromFsm
```
2024-05-27 13:14:18 -04:00
/**
2024-06-11 21:08:42 -04:00
* @brief Checks for flags set by the NPC FSM. These flags would be the "FlagNo" values
* under the "MainQstFlagOn" container name inside the npc fsm JSON files.
2024-05-27 13:14:18 -04:00
* @param flagNo
*/
MyQstFlagOnFromFsm(int flagNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### SceHitInWithoutMarker
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param sceNo
*/
SceHitInWithoutMarker(StageNo stageNo, int sceNo, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### SceHitOutWithoutMarker
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param sceNo
*/
SceHitOutWithoutMarker(StageNo stageNo, int sceNo, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### KeyItemPoint
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param idx
* @param num
*/
KeyItemPoint(int idx, int num, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### IsNotEndTimer
2024-05-27 13:14:18 -04:00
2026-04-12 20:39:06 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00638520` |
| Table index | 65 (check) |
| Key callees | `FUN_0064d130(timerNo)` — Timer List A lookup; returns `entry+8` |
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2026-04-12 20:39:06 -04:00
* @brief Returns true while a quest instance timer (Timer List A) is still running.
* Walks the timer list keyed by timerNo; returns 1 if entry+8 != 0 AND entry+8 != -1.
* Returns false if the timer has expired (entry+8==0) or is not registered (-1 sentinel).
* @note Logical inverse of IsEndTimer, but with an additional -1 guard.
* @param timerNo Timer slot identifier (set by StartTimer)
2024-05-27 13:14:18 -04:00
*/
IsNotEndTimer(int timerNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### IsMainQuestClear
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param questId
*/
IsMainQuestClear(int questId, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### DogmaOrb
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2024-06-03 22:44:07 -04:00
* @brief Check is satisfied when player buys blood orb upgrade from the white dragon.
2024-05-27 13:14:18 -04:00
*/
DogmaOrb(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### IsEnemyFoundForOrder
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
*/
IsEnemyFoundForOrder(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### IsTutorialFlagOn
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
*/
IsTutorialFlagOn(int flagNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### QuestOmSetTouch
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
*/
QuestOmSetTouch(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### QuestOmReleaseTouch
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
*/
QuestOmReleaseTouch(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### NewTalkNpc
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param questId
*/
NewTalkNpc(StageNo stageNo, int groupNo, int setNo, int questId);
2024-06-06 13:56:08 -04:00
```
### NewTalkNpcWithoutMarker
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param questId
*/
NewTalkNpcWithoutMarker(StageNo stageNo, int groupNo, int setNo, int questId);
2024-06-06 13:56:08 -04:00
```
### IsTutorialQuestClear
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param questId
*/
IsTutorialQuestClear(int questId, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### IsMainQuestOrder
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param questId
*/
IsMainQuestOrder(int questId, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsTutorialQuestOrder
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param questId
*/
IsTutorialQuestOrder(int questId, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsTouchPawnDungeonOm
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
*/
IsTouchPawnDungeonOm(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsOpenDoorOmQuestSet
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param questId
*/
IsOpenDoorOmQuestSet(StageNo stageNo, int groupNo, int setNo, int questId);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### EmDieForRandomDungeon
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param enemyId
* @param enemyNum
*/
EmDieForRandomDungeon(StageNo stageNo, int enemyId, int enemyNum, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### NpcHpNotLess
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param hpRate
*/
NpcHpNotLess(StageNo stageNo, int groupNo, int setNo, int hpRate);
2024-06-06 13:56:08 -04:00
```
### NpcHpLess
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param hpRate
*/
NpcHpLess(StageNo stageNo, int groupNo, int setNo, int hpRate);
2024-06-06 13:56:08 -04:00
```
### IsEnemyFoundWithoutMarker
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
*/
IsEnemyFoundWithoutMarker(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### IsEventBoardAccepted
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsEventBoardAccepted(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### WorldManageQuestFlagOn
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
* @param questId
*/
WorldManageQuestFlagOn(int flagNo, int questId, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### WorldManageQuestFlagOff
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
* @param questId
*/
WorldManageQuestFlagOff(int flagNo, int questId, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### TouchEventBoard
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
TouchEventBoard(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### OpenEntryRaidBoss
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
OpenEntryRaidBoss(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### OepnEntryFortDefense
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
OepnEntryFortDefense(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### DiePlayer
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
DiePlayer(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### PartyNumNotLessWtihoutPawn
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param partyMemberNum
*/
PartyNumNotLessWtihoutPawn(int partyMemberNum, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### PartyNumNotLessWithPawn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param partyMemberNum
*/
PartyNumNotLessWithPawn(int partyMemberNum, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### LostMainPawn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
LostMainPawn(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### SpTalkNpc
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
SpTalkNpc(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### OepnJobMaster
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
OepnJobMaster(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### TouchRimStone
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
TouchRimStone(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### GetAchievement
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
GetAchievement(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### DummyNotProgress
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
DummyNotProgress(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
### DieRaidBoss
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
DieRaidBoss(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### CycleTimerZero
2026-04-12 20:39:06 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00639CD0` |
| Table index | 99 (check) |
| Key callees | `FUN_00be2460(this)` — reads byte flag at `this+0x649` |
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2026-04-12 20:39:06 -04:00
* @brief Returns the cycle timer "reached zero" flag byte from the world quest manager.
* Reads a byte at cWorldQuestManager+0x649. Non-zero means the cycle timer hit zero.
* @note All params unused. Server evaluates from its own WorldQuestManager state.
2024-05-27 13:14:18 -04:00
*/
CycleTimerZero(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### CycleTimer
2026-04-12 20:39:06 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00639D20` |
| Table index | 100 (check) |
| Key callees | `FUN_00bdbbf0(this)` — returns remaining cycle time as float (`deadline - current` via `this+0x1d0` ) |
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2026-04-12 20:39:06 -04:00
* @brief Returns true if the world quest cycle timer has at least timeSec seconds remaining.
* Computes remaining = deadline - current from the cycle timer object at this+0x1d0.
* Returns timeSec < = remaining.
* @note Server evaluates by reading WorldQuestManager's cycle timer state.
* @param timeSec Minimum seconds required to still be remaining
2024-05-27 13:14:18 -04:00
*/
CycleTimer(int timeSec, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### QuestNpcTalkAndOrderUi
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param questId
*/
QuestNpcTalkAndOrderUi(StageNo stageNo, int groupNo, int setNo, int questId);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### QuestNpcTouchAndOrderUi
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param questId
*/
QuestNpcTouchAndOrderUi(StageNo stageNo, int groupNo, int setNo, int questId);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsFoundRaidBoss
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param enemyId
*/
IsFoundRaidBoss(StageNo stageNo, int groupNo, int setNo, int enemyId);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### QuestOmSetTouchWithoutMarker
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
*/
QuestOmSetTouchWithoutMarker(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### QuestOmReleaseTouchWithoutMarker
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
*/
QuestOmReleaseTouchWithoutMarker(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### TutorialTalkNpc
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param npcId
*/
TutorialTalkNpc(StageNo stageNo, NpcId npcId, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsLogin
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsLogin(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsPlayEndFirstSeasonEndCredit
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsPlayEndFirstSeasonEndCredit(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsKilledTargetEnemySetGroup
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
*/
IsKilledTargetEnemySetGroup(int flagNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsKilledTargetEmSetGrpNoMarker
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
*/
IsKilledTargetEmSetGrpNoMarker(int flagNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsLeftCycleTimer
2026-04-12 20:39:06 -04:00
| Field | Value |
|-------|-------|
| Address | `0x0063A6C0` |
| Table index | 111 (check) |
| Key callees | `FUN_00be1440(this)` — is timer running; `FUN_00bdc580()` — get elapsed time |
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2026-04-12 20:39:06 -04:00
* @brief Returns true if the cycle timer elapsed time is between a lower bound and timeSec.
* Guards on FUN_00be1440 (timer active check). Then: lowerBound < = elapsed < = timeSec.
* Used as a warning threshold: "the cycle is within timeSec seconds of completion."
* @note Server evaluates from WorldQuestManager elapsed state.
* @param timeSec Upper bound on elapsed seconds (warning threshold)
2024-05-27 13:14:18 -04:00
*/
IsLeftCycleTimer(int timeSec, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### OmEndText
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
*/
OmEndText(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### QuestOmEndText
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
*/
QuestOmEndText(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### OpenAreaMaster
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param areaId
*/
OpenAreaMaster(int areaId, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### HaveItemAllBag
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param itemId
* @param itemNum
*/
HaveItemAllBag(int itemId, int itemNum, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### OpenNewspaper
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
OpenNewspaper(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### OpenQuestBoard
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
OpenQuestBoard(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### StageNoWithoutMarker
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
*/
StageNoWithoutMarker(StageNo stageNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### TalkQuestNpcUnitMarker
```
2024-05-27 13:14:18 -04:00
/**
2024-06-11 21:08:42 -04:00
* @brief Used when a NPC walks between multiple points. The marker will continue to float over the NPCs head.
2024-05-27 13:14:18 -04:00
* @param stageNo
* @param groupNo
* @param setNo
* @param questId
*/
TalkQuestNpcUnitMarker(StageNo stageNo, int groupNo, int setNo, int questId);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### TouchQuestNpcUnitMarker
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param questId
*/
TouchQuestNpcUnitMarker(StageNo stageNo, int groupNo, int setNo, int questId);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsExistSecondPawn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsExistSecondPawn(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsOrderJobTutorialQuest
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsOrderJobTutorialQuest(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsOpenWarehouse
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsOpenWarehouse(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsMyquestLayoutFlagOn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param FlagNo
*/
IsMyquestLayoutFlagOn(int FlagNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsMyquestLayoutFlagOff
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param FlagNo
*/
IsMyquestLayoutFlagOff(int FlagNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsOpenWarehouseReward
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsOpenWarehouseReward(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsOrderLightQuest
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsOrderLightQuest(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsOrderWorldQuest
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsOrderWorldQuest(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsLostMainPawn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsLostMainPawn(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsFullOrderQuest
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsFullOrderQuest(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsBadStatus
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsBadStatus(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### CheckAreaRank
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param AreaId
* @param AreaRank
*/
CheckAreaRank(int AreaId, int AreaRank, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### Padding133
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
Padding133(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### EnablePartyWarp
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
EnablePartyWarp(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsHugeble
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsHugeble(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsDownEnemy
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsDownEnemy(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### OpenAreaMasterSupplies
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
OpenAreaMasterSupplies(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### OpenEntryBoard
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
OpenEntryBoard(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### NoticeInterruptContents
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
NoticeInterruptContents(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### OpenRetrySelect
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
OpenRetrySelect(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsPlWeakening
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsPlWeakening(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### NoticePartyInvite
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
NoticePartyInvite(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsKilledAreaBoss
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsKilledAreaBoss(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsPartyReward
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsPartyReward(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsFullBag
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsFullBag(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### OpenCraftExam
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
OpenCraftExam(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### LevelUpCraft
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
LevelUpCraft(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsClearLightQuest
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsClearLightQuest(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### OpenJobMasterReward
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
OpenJobMasterReward(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### TouchActQuestNpc
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param questId
*/
TouchActQuestNpc(StageNo stageNo, int groupNo, int setNo, int questId);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsLeaderAndJoinPawn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param pawnNum
*/
IsLeaderAndJoinPawn(int pawnNum, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsAcceptLightQuest
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsAcceptLightQuest(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsReleaseWarpPoint
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsReleaseWarpPoint(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsSetPlayerSkill
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsSetPlayerSkill(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsOrderMyQuest
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsOrderMyQuest(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsNotOrderMyQuest
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsNotOrderMyQuest(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### HasMypawn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
HasMypawn(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsFavoriteWarpPoint
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param warpPointId
*/
IsFavoriteWarpPoint(int warpPointId, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### Craft
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
Craft(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsKilledTargetEnemySetGroupGmMain
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
*/
IsKilledTargetEnemySetGroupGmMain(int flagNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsKilledTargetEnemySetGroupGmSub
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
*/
IsKilledTargetEnemySetGroupGmSub(int flagNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### HasUsedKey
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param questId
*/
HasUsedKey(StageNo stageNo, int groupNo, int setNo, int questId);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsCycleFlagOffPeriod
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsCycleFlagOffPeriod(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsEnemyFoundGmMain
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
*/
IsEnemyFoundGmMain(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsEnemyFoundGmSub
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
*/
IsEnemyFoundGmSub(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsLoginBugFixedOnly
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsLoginBugFixedOnly(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsSearchClan
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsSearchClan(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsOpenAreaListUi
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsOpenAreaListUi(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsReleaseWarpPointAnyone
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param warpPointId
*/
IsReleaseWarpPointAnyone(int warpPointId, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### DevidePlayer
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
DevidePlayer(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### NowPhase
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param phaseId
*/
NowPhase(int phaseId, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsReleasePortal
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsReleasePortal(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsGetAppraiseItem
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsGetAppraiseItem(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsSetPartnerPawn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsSetPartnerPawn(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsPresentPartnerPawn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsPresentPartnerPawn(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsReleaseMyRoom
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsReleaseMyRoom(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsExistDividePlayer
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsExistDividePlayer(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### NotDividePlayer
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
NotDividePlayer(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsGatherPartyInStage
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
*/
IsGatherPartyInStage(StageNo stageNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsFinishedEnemyDivideAction
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsFinishedEnemyDivideAction(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsOpenDoorOmQuestSetNoMarker
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param questId
*/
IsOpenDoorOmQuestSetNoMarker(StageNo stageNo, int groupNo, int setNo, int questId);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsFinishedEventOrderNum
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param eventNo
*/
IsFinishedEventOrderNum(StageNo stageNo, int eventNo, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsPresentPartnerPawnNoMarker
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsPresentPartnerPawnNoMarker(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsOmBrokenLayout
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
*/
IsOmBrokenLayout(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsOmBrokenQuest
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
*/
IsOmBrokenQuest(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsHoldingPeriodCycleContents
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsHoldingPeriodCycleContents(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsNotHoldingPeriodCycleContents
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsNotHoldingPeriodCycleContents(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsResetInstanceArea
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsResetInstanceArea(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### CheckMoonAge
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param moonAgeStart
* @param moonAgeEnd
*/
CheckMoonAge(int moonAgeStart, int moonAgeEnd, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsOrderPawnQuest
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param orderGroupSerial
* @param noOrderGroupSerial
*/
IsOrderPawnQuest(int orderGroupSerial, int noOrderGroupSerial, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsTakePictures
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsTakePictures(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsStageForMainQuest
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
*/
IsStageForMainQuest(StageNo stageNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsReleasePawnExpedition
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsReleasePawnExpedition(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### OpenPpMode
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
OpenPpMode(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### PpNotLess
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param point
*/
PpNotLess(int point, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### OpenPpShop
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
OpenPpShop(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### TouchClanBoard
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
TouchClanBoard(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsOneOffGather
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsOneOffGather(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsOmBrokenLayoutNoMarker
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
*/
IsOmBrokenLayoutNoMarker(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsOmBrokenQuestNoMarker
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
*/
IsOmBrokenQuestNoMarker(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### KeyItemPointEq
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param idx
* @param num
*/
KeyItemPointEq(int idx, int num, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsEmotion
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param actNo
*/
IsEmotion(int actNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsEquipColor
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param color
*/
IsEquipColor(int color, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsEquip
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param itemId
*/
IsEquip(int itemId, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsTakePicturesNpc
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param npcId01
* @param npcId02
* @param npcId03
*/
IsTakePicturesNpc(StageNo stageNo, int npcId01, int npcId02, int npcId03);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### SayMessage
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
SayMessage(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsTakePicturesWithoutPawn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param x
* @param y
* @param z
*/
IsTakePicturesWithoutPawn(StageNo stageNo, int x, int y, int z);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsLinkageEnemyFlag
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param flagNo
*/
IsLinkageEnemyFlag(StageNo stageNo, int groupNo, int setNo, int flagNo);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsLinkageEnemyFlagOff
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param flagNo
*/
IsLinkageEnemyFlagOff(StageNo stageNo, int groupNo, int setNo, int flagNo);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### IsReleaseSecretRoom
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
IsReleaseSecretRoom(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
```
2024-06-08 23:55:17 -04:00
## Result Commands
### LotOn
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param lotNo
*/
LotOn(StageNo stageNo, int lotNo, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### LotOff
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param lotNo
*/
LotOff(StageNo stageNo, int lotNo, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
### HandItem
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param itemId
* @param itemNum
*/
HandItem(int itemId, int itemNum, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### SetAnnounce
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param announceType
* @param announceSubtype Some announce commands like accept use this parameter to distinguish between distinguish between "discovered (0)" and "accept (1)" banner.
*/
SetAnnounce(QuestAnnounceType announceType, int announceSubtype = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### UpdateAnnounce
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param type
*/
UpdateAnnounce(QuestAnnounceType announceType = QuestAnnounceType.Accept, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
### ChangeMessage
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
ChangeMessage(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
### QstFlagOn
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
QstFlagOn(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### MyQstFlagOn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
*/
MyQstFlagOn(int flagNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### GlobalFlagOn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
GlobalFlagOn(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
### QstTalkChg
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param npcId
* @param msgNo
*/
QstTalkChg(NpcId npcId, int msgNo, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### QstTalkDel
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param npcId
*/
QstTalkDel(NpcId npcId, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
### StageJump
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param startPos
*/
StageJump(StageNo stageNo, int startPos, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### EventExec
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param eventNo
* @param jumpStageNo
* @param jumpStartPosNo
*/
EventExec(StageNo stageNo, int eventNo, StageNo jumpStageNo, int jumpStartPosNo);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### CallMessage
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
CallMessage(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### Prt
```
2024-05-27 13:14:18 -04:00
/**
2024-06-08 23:55:17 -04:00
* @brief Creates a glowing point where a party gathers to start some event.
* Use the integer values of x, y, z from the /info commands to get the coordinates.
* There is an equivalent CheckCommand which you can use to check if the party is here.
2024-05-27 13:14:18 -04:00
* @param stageNo
* @param x
* @param y
* @param z
*/
Prt(StageNo stageNo, int x, int y, int z);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### QstLayoutFlagOn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
*/
QstLayoutFlagOn(int flagNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### QstLayoutFlagOff
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
*/
QstLayoutFlagOff(int flagNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
### QstSceFlagOn
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
QstSceFlagOn(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### QstDogmaOrb
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param orbNum
*/
QstDogmaOrb(int orbNum, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
### GotoMainPwanEdit
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
GotoMainPwanEdit(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### AddFsmNpcList
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param npcId
*/
AddFsmNpcList(NpcId npcId, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### EndCycle
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
EndCycle(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### AddCycleTimer
2026-04-12 20:39:06 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00638F40` |
| Table index | 23 (result) |
| Notes | **Client stub** — body is `return 1` only. Server controls the cycle timer. |
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2026-04-12 20:39:06 -04:00
* @brief Client stub. Intended to add sec seconds to the world quest cycle timer.
* The client does not manage the cycle timer; the server is the authority.
* @note Server should add sec to its WorldQuestManager cycle timer on execution.
* @param sec Seconds to add to the cycle timer
2024-05-27 13:14:18 -04:00
*/
AddCycleTimer(int sec, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### AddMarkerAtItem
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param x
* @param y
* @param z
*/
AddMarkerAtItem(StageNo stageNo, int x, int y, int z);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### AddMarkerAtDest
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param x
* @param y
* @param z
*/
AddMarkerAtDest(StageNo stageNo, int x, int y, int z);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### AddResultPoint
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param tableIndex
*/
AddResultPoint(int tableIndex, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### PushImteToPlBag
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param itemId
* @param itemNum
*/
PushImteToPlBag(int itemId, int itemNum, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### StartTimer
2026-04-12 20:39:06 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00639190` |
| Table index | 28 (result) |
| Key callees | `FUN_009d0230(timerNo, sec)` — context validation; `FUN_0064de30(timerNo, sec)` — allocates entry in Timer List A (ctx+0xf0/0xfc), sets `entry+4=timerNo, entry+8=sec` |
```
/**
* @brief Starts a named countdown timer in the quest instance (Timer List A).
* Allocates a new entry keyed by timerNo if not already present; stores sec as initial countdown.
* If timerNo already exists, the call is a no-op (timer is NOT reset).
* @note Timer List A is a dynamically resized pointer array (ctx+0xf0=count, ctx+0xf4=capacity,
* ctx+0xfc=array ptr). When full it grows by 16 slots at a time (FUN_0064de30).
* timerNo is a byte (u8, range 0– 255) — the timer notification packet S2C_QUEST_11_109_16_NTC
* carries it as a single byte, so max 256 distinct timers per quest instance.
* Use small sequential values (0, 1, 2...). Because the no-op guard prevents reuse within the
* same quest run, use a fresh timerNo for each logically distinct timer — there is no command
* to delete or reset an instance timer.
* @note Server must:
* 1. Store (timerNo, expiryTime = now + sec) in quest state memory.
* 2. When the timer expires, send S2C_QUEST_11_109_16_NTC with QuestScheduleId (u32) +
* timerNo (u8). Verified at FUN_007f49b0 / FUN_008185b0.
* Short-lived (seconds to minutes) — memory only, no DB persistence needed.
* @param timerNo Timer slot identifier (u8, 0– 255), referenced by IsEndTimer / IsNotEndTimer
* @param sec Duration in seconds
2024-05-27 13:14:18 -04:00
*/
StartTimer(int timerNo, int sec, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### SetRandom
```
2024-05-27 13:14:18 -04:00
/**
2026-04-05 09:04:41 -04:00
* @brief Rolls a random integer in [minValue, maxValue] and stores it in random slot randomNo.
* The slot can then be tested with RandomEq/RandomLess/etc. and cleared with ResetRandom.
* Ghidra: 0x00639290.
* The server generates Random(minValue, maxValue) and sends the result as resultValue.
* The client stores resultValue directly; minValue/maxValue are unused by the client handler.
* @param randomNo Index of the random slot to write (0-based).
* @param minValue Inclusive lower bound of the random range (server-side only).
* @param maxValue Inclusive upper bound of the random range (server-side only).
* @param resultValue The rolled value, computed server-side from [minValue, maxValue].
2024-05-27 13:14:18 -04:00
*/
SetRandom(int randomNo, int minValue, int maxValue, int resultValue);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### ResetRandom
```
2024-05-27 13:14:18 -04:00
/**
2026-04-05 09:04:41 -04:00
* @brief Clears the value in random slot randomNo. Subsequent check commands for this slot
* will return false until SetRandom is called again.
* Ghidra: 0x006393B0. Only randomNo is used; param02– param04 are unused.
* @param randomNo Index of the random slot to clear (0-based).
2024-05-27 13:14:18 -04:00
*/
ResetRandom(int randomNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### BgmRequest
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param type
* @param bgmId
*/
BgmRequest(int type, int bgmId, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### BgmStop
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
BgmStop(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### SetWaypoint
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param npcId
* @param waypointNo0
* @param waypointNo1
* @param waypointNo2
*/
SetWaypoint(NpcId npcId, int waypointNo0, int waypointNo1, int waypointNo2);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### ForceTalkQuest
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param npcId
* @param groupSerial
*/
ForceTalkQuest(NpcId npcId, int groupSerial, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### TutorialDialog
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param guideNo
*/
TutorialDialog(int guideNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### AddKeyItemPoint
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param keyItemIdx
* @param pointNum
*/
AddKeyItemPoint(int keyItemIdx, int pointNum, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### DontSaveProcess
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
DontSaveProcess(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### InterruptCycleContents
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
InterruptCycleContents(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### QuestEvaluationPoint
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param point
*/
QuestEvaluationPoint(int point, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### CheckOrderCondition
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
CheckOrderCondition(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### WorldManageLayoutFlagOn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
* @param questId
*/
WorldManageLayoutFlagOn(int flagNo, int questId, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### WorldManageLayoutFlagOff
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
* @param questId
*/
WorldManageLayoutFlagOff(int flagNo, int questId, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### PlayEndingForFirstSeason
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
PlayEndingForFirstSeason(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### AddCyclePurpose
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param announceNo
* @param type
*/
AddCyclePurpose(int announceNo, int type, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### RemoveCyclePurpose
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param announceNo
*/
RemoveCyclePurpose(int announceNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### UpdateAnnounceDirect
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param announceNo
* @param type
*/
UpdateAnnounceDirect(int announceNo, int type, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### SetCheckPoint
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
SetCheckPoint(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### ReturnCheckPoint
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param processNo
*/
ReturnCheckPoint(int processNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### CallGeneralAnnounce
2024-08-31 13:43:33 -04:00

2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2024-08-31 13:43:33 -04:00
* @brief Pops up notification text.
2024-05-27 13:14:18 -04:00
* @param type
* @param msgNo
*/
CallGeneralAnnounce(int type, int msgNo, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### TutorialEnemyInvincibleOff
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
TutorialEnemyInvincibleOff(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### SetDiePlayerReturnPos
```
2024-05-27 13:14:18 -04:00
/**
2026-05-31 14:47:57 +01:00
* @brief Changes a player's respawn position when fully dead and executes command SetBarricade.
* The player is also kept perpetually in combat, disallowing the use of teleports. They must use Exit Content to leave or proceed with quest steps.
* Used in several Main and Personal Quests with closed off arenas.
2024-05-27 13:14:18 -04:00
* @param stageNo
* @param startPos
* @param outSceNo
*/
SetDiePlayerReturnPos(StageNo stageNo, int startPos, int outSceNo, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### WorldManageQuestFlagOn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
* @param questId
*/
WorldManageQuestFlagOn(int flagNo, int questId, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### WorldManageQuestFlagOff
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
* @param questId
*/
WorldManageQuestFlagOff(int flagNo, int questId, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### ReturnCheckPointEx
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param processNo
*/
ReturnCheckPointEx(int processNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### ResetCheckPoint
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
ResetCheckPoint(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### ResetDiePlayerReturnPos
```
2024-05-27 13:14:18 -04:00
/**
2026-05-31 14:47:57 +01:00
* @brief Resets a player's respawn position when fully dead to default and executes command ResetBarricade.
* Used to revert SetDiePlayerReturnPos.
2024-05-27 13:14:18 -04:00
* @param stageNo
* @param startPos
*/
ResetDiePlayerReturnPos(StageNo stageNo, int startPos, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### SetBarricade
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
SetBarricade(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### ResetBarricade
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
ResetBarricade(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### TutorialEnemyInvincibleOn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
TutorialEnemyInvincibleOn(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### ResetTutorialFlag
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
ResetTutorialFlag(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### StartContentsTimer
2026-04-12 20:39:06 -04:00
| Field | Value |
|-------|-------|
| Address | `0x0063A760` |
| Table index | 61 (result) |
| Key callees | S3 season-phase guard (same as ID 246); `FUN_0064bbe0(&DAT_02189ff8)` — contents check; `FUN_0064b5a0(this)` — stores timer value at `this+8` |
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2026-04-12 20:39:06 -04:00
* @brief S3-only: starts the contents-level timer if the season phase guard passes.
* All params are unused. The timer value is written via FUN_0064b5a0 to the contents timer object+8.
* Guarded by the same S3 season-phase pointer check as IsContentsModeTimerNotLess (246).
* @note Server should start its S3 contents timer on execution. This is a longer-lived timer
* than StartTimer — may require SchedulerTask + DB persistence if it survives restarts.
2024-05-27 13:14:18 -04:00
*/
StartContentsTimer(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### MyQstFlagOff
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
*/
MyQstFlagOff(int flagNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### PlayCameraEvent
```
2024-05-27 13:14:18 -04:00
/**
2024-06-08 23:55:17 -04:00
* @brief Plays quicktime events defined in the `stage/< stid > /< stid > /scr/< stid > /fsm/< stid > ev< eventid > .fsm.json files.
* @note These events will only play if they are triggered when you are in the same StageNo.
2024-05-27 13:14:18 -04:00
* @param stageNo
* @param eventNo
*/
PlayCameraEvent(StageNo stageNo, int eventNo, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### EndEndQuest
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
EndEndQuest(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### ReturnAnnounce
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
ReturnAnnounce(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### AddEndContentsPurpose
2024-08-31 13:43:33 -04:00

2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2024-08-31 13:43:33 -04:00
* @brief Prints an update message.
2024-05-27 13:14:18 -04:00
* @param announceNo
* @param type
*/
AddEndContentsPurpose(int announceNo, int type, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### RemoveEndContentsPurpose
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param announceNo
*/
RemoveEndContentsPurpose(int announceNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### StopCycleTimer
2026-04-12 20:39:06 -04:00
| Field | Value |
|-------|-------|
| Address | `0x0063AA70` |
| Table index | 68 (result) |
| Notes | **Client stub** — body is `return 1` only. Server controls the cycle timer. |
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2026-04-12 20:39:06 -04:00
* @brief Client stub. Intended to stop the world quest cycle timer.
* The client does not manage the cycle timer; the server is the authority.
* @note Server should pause its WorldQuestManager cycle timer on execution.
2024-05-27 13:14:18 -04:00
*/
StopCycleTimer(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### RestartCycleTimer
2026-04-12 20:39:06 -04:00
| Field | Value |
|-------|-------|
| Address | `0x0063ABA0` |
| Table index | 69 (result) |
| Notes | **Client stub** — body is `return 1` only. Server controls the cycle timer. |
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2026-04-12 20:39:06 -04:00
* @brief Client stub. Intended to restart the world quest cycle timer.
* The client does not manage the cycle timer; the server is the authority.
* @note Server should reset/restart its WorldQuestManager cycle timer on execution.
2024-05-27 13:14:18 -04:00
*/
RestartCycleTimer(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### AddAreaPoint
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param AreaId
* @param AddPoint
*/
AddAreaPoint(int AreaId, int AddPoint, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### LayoutFlagRandomOn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param FlanNo1
* @param FlanNo2
* @param FlanNo3
* @param ResultNo
*/
LayoutFlagRandomOn(int FlanNo1, int FlanNo2, int FlanNo3, int ResultNo);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### SetDeliverInfo
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param npcId
* @param groupSerial
*/
SetDeliverInfo(StageNo stageNo, NpcId npcId, int groupSerial, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### SetDeliverInfoQuest
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param groupSerial
*/
SetDeliverInfoQuest(StageNo stageNo, int groupNo, int setNo, int groupSerial);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### BgmRequestFix
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param type
* @param bgmId
2024-09-28 14:06:00 -04:00
* @note some bgmIds can be found in the file sound/sound_game_common/sound/stream/bgm/bgm_battle/sound_boss_bgm.sbb.json BgmNo with type=1
2024-05-27 13:14:18 -04:00
*/
BgmRequestFix(int type, int bgmId, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### EventExecCont
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param eventNo
* @param jumpStageNo
* @param jumpStartPosNo
*/
EventExecCont(StageNo stageNo, int eventNo, int jumpStageNo, int jumpStartPosNo);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### PlPadOff
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
PlPadOff(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### PlPadOn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
PlPadOn(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### EnableGetSetQuestList
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
EnableGetSetQuestList(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### StartMissionAnnounce
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
StartMissionAnnounce(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### StageAnnounce
2024-08-31 13:43:33 -04:00

2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
/**
2024-08-31 13:43:33 -04:00
* @brief Pops up stage x start/clear
* @param type 0 = Start, 1 = Clear
* @param num The stage number to print
2024-05-27 13:14:18 -04:00
*/
StageAnnounce(int type, int num, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### ReleaseAnnounce
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param id
*/
ReleaseAnnounce(int id, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### ButtonGuideFlagOn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param buttonGuideNo
*/
ButtonGuideFlagOn(int buttonGuideNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### ButtonGuideFlagOff
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param buttonGuideNo
*/
ButtonGuideFlagOff(int buttonGuideNo, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### AreaJumpFadeContinue
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
AreaJumpFadeContinue(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### ExeEventAfterStageJump
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param eventNo
* @param startPos
*/
ExeEventAfterStageJump(StageNo stageNo, int eventNo, int startPos, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### ExeEventAfterStageJumpContinue
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param eventNo
* @param startPos
*/
ExeEventAfterStageJumpContinue(StageNo stageNo, int eventNo, int startPos, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### PlayMessage
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param groupNo
* @param waitTime
*/
PlayMessage(int groupNo, int waitTime, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### StopMessage
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
StopMessage(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### DecideDivideArea
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param startPosNo
*/
DecideDivideArea(StageNo stageNo, int startPosNo, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### ShiftPhase
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param phaseId
*/
ShiftPhase(int phaseId, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### ReleaseMyRoom
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
ReleaseMyRoom(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### DivideSuccess
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
DivideSuccess(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### DivideFailed
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
DivideFailed(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### SetProgressBonus
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param rewardRank
*/
SetProgressBonus(int rewardRank, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### RefreshOmKeyDisp
```
2024-05-27 13:14:18 -04:00
/**
* @brief
*/
RefreshOmKeyDisp(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### SwitchPawnQuestTalk
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param type
*/
SwitchPawnQuestTalk(int type, int param02 = 0, int param03 = 0, int param04 = 0);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### LinkageEnemyFlagOn
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param flagId
*/
LinkageEnemyFlagOn(StageNo stageNo, int groupNo, int setNo, int flagId);
2024-06-08 23:55:17 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-08 23:55:17 -04:00
### LinkageEnemyFlagOff
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param stageNo
* @param groupNo
* @param setNo
* @param flagId
*/
LinkageEnemyFlagOff(StageNo stageNo, int groupNo, int setNo, int flagId);
```
2024-06-06 13:56:08 -04:00
## Notify Commands
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### KilledTargetEnemySetGroup
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
* @param stageNo
* @param groupNo
*/
KilledTargetEnemySetGroup(int flagNo, StageNo stageNo, int groupNo, int work04 = 0);
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
### KilledTargetEmSetGrpNoMarker
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param flagNo
* @param stageNo
* @param groupNo
*/
KilledTargetEmSetGrpNoMarker(int flagNo, StageNo stageNo, int groupNo, int work04 = 0);
2024-06-06 13:56:08 -04:00
```
### KilledTargetEnemySetGroup1
2024-05-27 13:14:18 -04:00
2024-06-06 13:56:08 -04:00
```
2024-05-27 13:14:18 -04:00
/**
* @brief
* @param npcId
*/
KilledTargetEnemySetGroup1(NpcId npcId, int work02 = 0, int work03 = 0, int work04 = 0);
2026-04-05 09:04:41 -04:00
```
---
## Ghidra-Discovered Commands (Result)
The following result commands were found by analysing the result function dispatch table at `.data:02126770` in `DDO_DUMP_FIX.exe` .
The dispatch function is at `.text:0063E254` . It validates `commandId < 0x87` (135 entries, indices 0– 134).
> [!NOTE]
> Parameter names are inferred from decompilation. Internal function addresses are provided so you can verify the decompilation yourself in Ghidra.
### SubstoryProgress (99)
| Field | Value |
|-------|-------|
| Address | `0x00633730` |
| Table index | 99 |
2026-04-12 02:07:21 -04:00
| Key callees | `FUN_00597d20(id1, id2)` — compute progress ratio; `FUN_00597970(id1, id2, delta)` — add delta, clamp to max; `FUN_00bd3390` — send UI packet 0x117 (increase) or 0x118 (decrease); `FUN_00bd3280(id1, id2, old, new)` — send progress-change packet |
| Key fields | Substory ID pair at ctx+0x5c+0x244 / +0x248 |
2026-04-05 09:04:41 -04:00
```
/**
* @brief Progress a substory objective.
2026-04-12 02:07:21 -04:00
* @param substoryId Substory category number
* @param param02
* @param param03
* @param param04
2026-04-05 09:04:41 -04:00
*/
2026-04-12 02:07:21 -04:00
SubstoryProgress(int substoryId, int param02, int param03, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
### AddSubstoryProgress (100)
| Field | Value |
|-------|-------|
| Address | `0x006338E0` |
| Table index | 100 |
| Key callees | `FUN_00bd3730` (substory list lookup), clamps result to [0, 100] |
```
/**
* @brief Finds a substory entry by substoryId and adds progressDelta to its progress value.
* Result is clamped to [0, 100].
* @param substoryId Substory identifier
* @param progressDelta Amount to add (can be negative)
*/
AddSubstoryProgress(int substoryId, int progressDelta, int param03 = 0, int param04 = 0);
```
### TriggerSubstoryEvent (101)
| Field | Value |
|-------|-------|
| Address | `0x00633920` |
| Table index | 101 |
| Key callees | `FUN_009cffc0` (mode check, must return 0xb), `FUN_00bdee50(0xb)` , `FUN_00598590` |
```
/**
* @brief Triggers a substory event sequence when the quest mode is 0xb.
* Calls FUN_00598590 to set timer data on the substory structure.
*/
TriggerSubstoryEvent(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
```
### EnableSubstoryUIElement (102)
| Field | Value |
|-------|-------|
| Address | `0x006339B0` |
| Table index | 102 |
| Key callees | `FUN_009cff50` (area context), `FUN_00bdee50(0xb)` , `FUN_005986d0` (sets field +0x44) |
2026-04-12 02:07:21 -04:00
| Key callees | `FUN_009cff50` - push/get player context; `FUN_00bdee50(0xb)` - look up entry ID 11 in timer/event list at ctx+0xf8/+0x104; `FUN_005986d0` - writes result to substory object +0x44 |
2026-04-05 09:04:41 -04:00
```
/**
* @brief Enables the substory UI element overlay.
* Gets area context, then enables the element via FUN_005986d0 which sets offset +0x44.
*/
EnableSubstoryUIElement(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
```
### DisableSubstoryUIElement (103)
| Field | Value |
|-------|-------|
| Address | `0x00633A00` |
| Table index | 103 |
| Key callees | `FUN_00bdee50(0xb)` , `FUN_00598670` (clears field +0x44 to DAT_02141084 sentinel) |
```
/**
* @brief Disables the substory UI element overlay.
* Clears the element reference at offset +0x44.
*/
DisableSubstoryUIElement(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
```
### SetSubstoryTalkTarget (104)
| Field | Value |
|-------|-------|
| Address | `0x00633A30` |
| Table index | 104 |
| Key callees | `FUN_009cff50` (area context), `FUN_009ce930(param01, param02)` (NPC talk redirect) |
```
/**
* @brief Redirects NPC dialogue to a substory-specific target.
* @param param01 NPC/group identifier
* @param param02 Talk context identifier
*/
SetSubstoryTalkTarget(int param01, int param02, int param03 = 0, int param04 = 0);
```
### SetSubstoryEnemyInvincible (105)
| Field | Value |
|-------|-------|
| Address | `0x00633A80` |
| Table index | 105 |
| Key callees | `FUN_00b5ba00(4, 0x15, enemyGroupFlag, 1, 0)` , `FUN_00be9b60(invincible)` |
```
/**
* @brief Sets or clears invincibility on a substory enemy group.
* Uses enemy type 4 / category 0x15. FUN_00be9b60 writes flag at +0x92 on matching NPCs.
* @param enemyGroupFlag Group flag / filter value passed to FUN_00b5ba00
* @param invincible 1 = invincible, 0 = vulnerable
*/
SetSubstoryEnemyInvincible(int enemyGroupFlag, int invincible, int param03 = 0, int param04 = 0);
```
### AddFsmTalkNpc (107)
| Field | Value |
|-------|-------|
| Address | `0x00633B30` |
| Table index | 107 |
| Key callees | `FUN_009d07f0` (FSM mode check), `FUN_009cfe00` , `FUN_009d2ba0(npcId, param04)` |
```
/**
* @brief Adds an NPC to the FSM talk NPC list (this+0x94/0xa0).
* Only executes when in FSM quest mode.
* @param npcId NPC or group identifier
* @param param04 Secondary value passed to FUN_009d2ba0
*/
AddFsmTalkNpc(int npcId, int param02 = 0, int param03 = 0, int param04 = 0);
```
2026-05-31 14:47:57 +01:00
### AchievementBanner (108)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00633B80` |
| Table index | 108 |
```
/**
2026-05-31 14:47:57 +01:00
* @brief Displays an achievement banner from a given category.
* Only category 6 (Great Purpose) has banners to display.
* @param categoryNo Achievement category
* @param bannerNo Banner number (1 to 16, 15 is empty/unused)
2026-04-05 09:04:41 -04:00
*/
2026-06-15 18:29:40 +01:00
AchievementBanner(int category, int flagValue, int param03 = 0, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
### EnableSubstoryElementB (109)
| Field | Value |
|-------|-------|
| Address | `0x00633BB0` |
| Table index | 109 |
| Key callees | `FUN_009cff50` , `FUN_00bdee50(0xb)` , `FUN_00598860` (sets field +0x4c) |
```
/**
* @brief Enables substory element variant B (field +0x4c). Paired with DisableSubstoryElementB.
*/
EnableSubstoryElementB(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
```
### DisableSubstoryElementB (110)
| Field | Value |
|-------|-------|
| Address | `0x00633BF0` |
| Table index | 110 |
| Key callees | `FUN_00bdee50(0xb)` , `FUN_005986A0` (clears field +0x4c) |
```
/**
* @brief Disables substory element variant B (field +0x4c). Paired with EnableSubstoryElementB.
*/
DisableSubstoryElementB(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
```
2026-06-25 20:58:18 +01:00
### SetEnvironmentalEffect (111)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00633CE0` |
| Table index | 111 |
| Key callees | `FUN_00c19920(param01, param02)` , sets bit 0 of `*(DAT_021c1250 + 0x850)` |
```
/**
2026-06-25 20:58:18 +01:00
* @brief Overrides lighting and clouds on current map. Effects are purely visual and not persistent.
2026-04-05 09:04:41 -04:00
* Calls FUN_00c19920 then sets bit 0 at DAT_021c1250+0x850.
2026-06-25 20:58:18 +01:00
* @param param01 Time of day
* @param param02 Cloud type passed to FUN_00c19920
2026-04-05 09:04:41 -04:00
*/
2026-06-25 20:58:18 +01:00
SetEnvironmentalEffect(int param01, int param02, int param03 = 0, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
2026-06-25 20:58:18 +01:00
### ResetEnvironmentalEffect (112)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00633D20` |
| Table index | 112 |
| Key callees | `FUN_00c1baa0()` , clears bit 0 of `*(DAT_021c1250 + 0x850)` |
```
/**
2026-06-25 20:58:18 +01:00
* @brief Resets environmental effects set by SetEnvironmentalEffect.
2026-04-05 09:04:41 -04:00
*/
2026-06-25 20:58:18 +01:00
ResetEnvironmentalEffect(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
### SetFsmNpcSchedule (113)
| Field | Value |
|-------|-------|
| Address | `0x00633D50` |
| Table index | 113 |
| Key callees | `FUN_009d1a60(scheduleId)` — param04 is read from stack at +0x10 |
```
/**
* @brief Schedules an FSM NPC behavior by schedule ID.
* @note param04 / scheduleId is consumed from the stack slot at offset +0x10.
* @param scheduleId Schedule identifier
*/
SetFsmNpcSchedule(int param01 = 0, int param02 = 0, int param03 = 0, int scheduleId = 0);
```
### SetQuestEnemyLevel (114)
| Field | Value |
|-------|-------|
| Address | `0x00633D80` |
| Table index | 114 |
| Key callees | `FUN_00a41780(stageNo, groupNo, setNo, 0)` (quest enemy type 3 lookup), `FUN_00bc0670(enemy, level)` |
```
/**
* @brief Sets the level tier (bits controlling level) of a quest enemy group (type 3).
* Phase-gated: checks DAT_0220456c offsets 0x4654 vs 0x45cc.
2026-06-25 20:58:18 +01:00
* @note FUN_00bc0670 checks for OMs 503136 and 503143 - destructible flag objects found in War Missions
2026-04-05 09:04:41 -04:00
* @param stageNo Stage number
* @param groupNo Enemy group number
* @param setNo Enemy set number
* @param level Level tier value passed to FUN_00bc0670
*/
SetQuestEnemyLevel(StageNo stageNo, int groupNo, int setNo, int level);
```
### SetQuestEnemyLevelEx (115)
| Field | Value |
|-------|-------|
| Address | `0x00633E30` |
| Table index | 115 |
| Key callees | `FUN_00a36090` (area mode check), `FUN_00a3f620` + `FUN_00a41890` (area-aware lookup), `FUN_00bc0670` |
```
/**
* @brief Area-aware variant of SetQuestEnemyLevel.
* Uses FUN_00a41890 when an area instance is active (FUN_009cff70 != 0).
2026-06-25 20:58:18 +01:00
* @note FUN_00bc0670 checks for OMs 503136 and 503143 - destructible flag objects found in War Missions
2026-04-05 09:04:41 -04:00
* @param stageNo Stage number
* @param groupNo Enemy group number
* @param setNo Enemy set number
* @param level Level tier value
*/
SetQuestEnemyLevelEx(StageNo stageNo, int groupNo, int setNo, int level);
```
### SetQuestEnemyTierUp (116)
| Field | Value |
|-------|-------|
| Address | `0x00633F30` |
| Table index | 116 |
| Key callees | `FUN_00a41780` (quest enemy lookup), `FUN_00bc0720(enemy, tier)` (sets bits 23– 21 = "danger tier") |
```
/**
* @brief Sets the danger tier (bits 23– 21) of a quest enemy group.
* Phase-gated like SetQuestEnemyLevel.
2026-06-25 20:58:18 +01:00
* @note FUN_00bc0670 checks for OMs 503136 and 503143 - destructible flag objects found in War Missions
2026-04-05 09:04:41 -04:00
* @param stageNo Stage number
* @param groupNo Enemy group number
* @param setNo Enemy set number
* @param tier Danger tier value
*/
SetQuestEnemyTierUp(StageNo stageNo, int groupNo, int setNo, int tier);
```
### SetQuestEnemyTierUpEx (117)
| Field | Value |
|-------|-------|
| Address | `0x00633FC0` |
| Table index | 117 |
| Key callees | Area-aware lookup (same as SetQuestEnemyLevelEx), `FUN_00bc0720` |
```
/**
* @brief Area-aware variant of SetQuestEnemyTierUp.
2026-06-25 20:58:18 +01:00
* @note FUN_00bc0670 checks for OMs 503136 and 503143 - destructible flag objects found in War Missions
2026-04-05 09:04:41 -04:00
* @param stageNo Stage number
* @param groupNo Enemy group number
* @param setNo Enemy set number
* @param tier Danger tier value
*/
SetQuestEnemyTierUpEx(StageNo stageNo, int groupNo, int setNo, int tier);
```
2026-04-16 19:51:05 -04:00
### SetQuestOmMontagueFix (118)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x006341A0` |
| Table index | 118 |
| Key callees | `FUN_00a41780(stageNo, groupNo, setNo, 0)` , `FUN_00bbf670(npc, poseId)` (6-bit field, values 1– 6) |
```
/**
2026-04-16 19:51:05 -04:00
* @brief Sets a body/stance pose on a quest NPC or look/state of an object (like a chest).
* Montague IDs 1– 6 map to different stances.
* @param stageNo Stage number
* @param groupNo Group number
* @param setNo Set number
* @param montagueNo Pose/stance index (1– 6)
2026-04-05 09:04:41 -04:00
*/
2026-04-16 19:51:05 -04:00
SetQuestOmMontagueFix(StageNo stageNo, int groupNo, int setNo, int montagueNo);
2026-04-05 09:04:41 -04:00
```
2026-04-16 19:51:05 -04:00
### SetQuestOmMontagueFixEx (119)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x006341F0` |
| Table index | 119 |
| Key callees | Area-aware NPC lookup, `FUN_00bbf670` |
```
/**
2026-04-16 19:51:05 -04:00
* @brief Area-aware variant of SetQuestOmMontague.
* @param stageNo Stage number
* @param groupNo Group number
* @param setNo Set number
* @param montagueNo Pose/stance index (1– 6)
2026-04-05 09:04:41 -04:00
*/
2026-04-16 19:51:05 -04:00
SetQuestOmMontagueFixEx(StageNo stageNo, int groupNo, int setNo, int montagueNo);
2026-04-05 09:04:41 -04:00
```
### SetQuestLayoutEnemyLevel (121)
| Field | Value |
|-------|-------|
| Address | `0x00634300` |
| Table index | 121 |
| Key callees | `FUN_00a416a0(stageNo, groupNo, setNo, 0)` (layout enemy type 2), `FUN_00b55e70(enemy, level)` |
| Notes | GM-mode guarded. Queues into a CS-guarded buffer (max 10 entries) at `this+0xe48` . |
```
/**
* @brief Sets the level of a layout enemy (type 2) via a thread-safe queue.
* Guarded by GM mode check (FUN_00b19cc0) and player ID comparison.
* Buffer at this+0xe48 holds up to 10 entries.
2026-06-25 20:58:18 +01:00
* @note Calls getQuestId and compares against 90040004 (Acre Selund War Chronicles), checks stage number if this fails.
2026-04-05 09:04:41 -04:00
* @param stageNo Stage number
* @param groupNo Layout enemy group number
* @param setNo Layout enemy set number
* @param level Level value passed to FUN_00b55e70
*/
SetQuestLayoutEnemyLevel(StageNo stageNo, int groupNo, int setNo, int level);
```
### RemoveFsmNpcFromSchedule (124)
| Field | Value |
|-------|-------|
| Address | `0x006343F0` |
| Table index | 124 |
| Key callees | `FUN_0063dda0(param01)` — removes entry from this+0x28/0x1c, frees children, shrinks list |
```
/**
* @brief Removes an FSM NPC entry from the process list and frees its children.
* Paired with AddFsmTalkNpc / SetFsmNpcSchedule.
* @param param01 NPC or process list entry identifier
*/
RemoveFsmNpcFromSchedule(int param01, int param02 = 0, int param03 = 0, int param04 = 0);
```
### SetEnemyExpeditionState (126)
| Field | Value |
|-------|-------|
| Address | `0x00634450` |
| Table index | 126 |
| Key callees | mode=2: `FUN_00bc6ff0(9)` (sets global to 10, signals start); mode=3: `FUN_00bc7070(param02)` (iterates party, fires signal via `FUN_008fdf80` /`FUN_005b8070` ) |
```
/**
* @brief Controls enemy expedition state / area boss trigger.
* @param mode 2 = start expedition signal, 3 = fire per-party-member signal
* @param param02 Secondary value passed to FUN_00bc7070 when mode == 3
*/
SetEnemyExpeditionState(int mode, int param02 = 0, int param03 = 0, int param04 = 0);
```
2026-04-16 19:51:05 -04:00
### EndContentsPurposePhaseChange (128)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x006345D0` |
| Table index | 128 |
| Key callees | `FUN_00be9960` (sets flag +0xf4 on NPC ID 8), `FUN_00bdf4e0` (area ref), `FUN_00b85670` (phase complete), sends messages 0x25f and 0x260 via `FUN_00b82b00` |
```
/**
2026-04-16 19:51:05 -04:00
* @brief Starts the content ending sequence, completing the current phase.
* Updates the purpose message of the quest.
* @note Seen inside chain dungeon packet capture
2026-04-05 09:04:41 -04:00
* Sends world-manager NPC messages 0x25f and 0x260.
2026-06-20 01:01:48 +01:00
* @param
2026-04-05 09:04:41 -04:00
*/
2026-04-16 19:51:05 -04:00
EndContentsPurposePhaseChange(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
2026-06-27 14:52:51 +01:00
### EndChain (130)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x006346B0` |
| Table index | 130 |
2026-06-27 14:52:51 +01:00
| Key callees | `FUN_0087dc50()` — checks OM state == 4 and animation condition |
2026-04-05 09:04:41 -04:00
```
/**
2026-06-27 14:52:51 +01:00
* Sends packet 63.5.16 (C2S_CHAIN_DUNGEON_END_CHAIN_NTC) kickstarting the rewards phase of chain dungeons.
* In the dumps, packet was responded by 63.2.16 (situation data update) and 63.6.16 (spawns chests based on progress tracked by 63.2.16).
* Should have conditions: OM state == 4 and a specific animation condition via FUN_0087dc50, but always sends the packet regardless?
2026-04-05 09:04:41 -04:00
*/
2026-06-27 14:52:51 +01:00
EndChain(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
### SetPawnExpeditionFlag (133)
| Field | Value |
|-------|-------|
| Address | `0x006347A0` |
| Table index | 133 |
| Key callees | mode=1: `FUN_00b6ce30()` (writes action `DAT_01d4db50` ); mode=2: `FUN_00b6cde0()` (writes action `DAT_01d4db54` ) |
```
/**
* @brief Starts or stops a pawn expedition.
* @param mode 1 = start expedition, 2 = stop expedition
*/
SetPawnExpeditionFlag(int mode, int param02 = 0, int param03 = 0, int param04 = 0);
```
2026-04-16 19:51:05 -04:00
### SetQuestLayoutOmMontageFix (134)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00634820` |
| Table index | 134 |
| Key callees | `FUN_00a41780(stageNo, groupNo, setNo, 0)` (layout enemy type 2), `FUN_00bc6f70(enemy, poseId)` , `FUN_005be380(poseId)` |
| Notes | Checks OM alive before setting pose/stance mode. |
```
/**
* @brief Sets a body/stance mode on a layout enemy (type 2).
* Verifies the entity's OM is alive before calling FUN_005be380(poseId).
2026-04-16 19:51:05 -04:00
* @montageNo 0 - NO enemy, 1 enemy in EXM (Chain Dungeon)
* @param stageNo Stage number
* @param groupNo Layout enemy group number
* @param setNo Layout enemy set number
* @param montagueNo Stance/pose mode value
2026-04-05 09:04:41 -04:00
*/
2026-04-16 19:51:05 -04:00
SetQuestLayoutOmMontageFix(StageNo stageNo, int groupNo, int setNo, int montagueNo);
2026-04-05 09:04:41 -04:00
```
---
## Ghidra-Discovered Commands (Check)
The following check commands were found by analysing the check function dispatch table at `.data:02126998` .
The dispatch function is at approximately `.text:0063E04A` . It validates `commandId < 0x101` (257 entries, indices 0– 256).
2026-04-10 20:21:59 -04:00
### IsSubstoryProgressBit18 (211)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00635A00` |
| Table index | 211 |
| State offset | `cQuestProcess+0x5c+0x20c` (substory state word), bit 18 (0x12) |
```
/**
2026-04-10 20:21:59 -04:00
* @brief Returns bit 18 of the substory progress state word.
* All four quest params are unused — only the implicit `this` context is read.
2026-04-05 09:04:41 -04:00
* State word is at *(cQuestProcess+0x5c)+0x20c.
*/
2026-04-10 20:21:59 -04:00
IsSubstoryProgressBit18(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
2026-04-10 20:21:59 -04:00
### SetGlobalSubstoryProgressBit17Inverse (212)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00635A30` |
| Table index | 212 |
| Key fields | Reads bit 17 (`>> 0x11` ) of `*(ctx+0x5c)+0x20c` ; writes inverted result to `DAT_021c06b8+0x263` |
```
/**
2026-04-10 20:21:59 -04:00
* @brief Reads bit 17 of the substory progress state word (+0x20c), inverts it, and stores the
* result to the global flag at DAT_021c06b8+0x263.
2026-04-05 09:04:41 -04:00
* @note This is NOT a conditional check — it only writes global state. No quest params are used.
2026-04-10 20:21:59 -04:00
* @note Formerly named "StoreLinkageEnemyFlagGlobal"; renamed after Ghidra verification confirmed
* this reads the same substory state field (+0x20c) as IsSubstoryProgressBit18/index 211.
2026-04-05 09:04:41 -04:00
*/
2026-04-10 20:21:59 -04:00
SetGlobalSubstoryProgressBit17Inverse(int param01_unused = 0, int param02_unused = 0, int param03_unused = 0, int param04_unused = 0);
2026-04-05 09:04:41 -04:00
```
2026-04-10 20:21:59 -04:00
### NpcPreTalkAndOrderUi (213)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00635A60` |
| Table index | 213 |
2026-04-10 20:21:59 -04:00
| Key callees | `NpcPreTalkAndOrderUi→FUN_009d0170(noOrderGroupSerial)` — NPC lookup at ctx+0x214/+0x218, matches by NPC+0x8 |
| Key fields | Sets `npcObject+0x11 = 1` (order mode flag); writes `storeVal` to ctx+0x5c+0x24c; returns bit 18 of ctx+0x5c+0x220 |
2026-04-05 09:04:41 -04:00
```
/**
2026-04-10 20:21:59 -04:00
* @brief Pre-talk setup for substory NPC order interactions.
*
* Looks up the NPC object by noOrderGroupSerial in the stage NPC list (ctx+0x214/+0x218).
* Sets byte +0x11 on the NPC object to 1 — this is the order mode flag:
* - Shows the order marker above the NPC head in the UI.
* - Blocks the normal TalkNpc check (TalkNpc returns 0 when NPC+0x11 != 0).
* Plays the message identified by noOrderGroupSerial when the player clicks the NPC,
* before the order UI (NpcTalkAndOrderUi) is shown.
* Stores storeVal at ctx+0x5c+0x24c.
* Returns bit 18 of ctx+0x5c+0x220 (the NPC order interaction state field).
* The check passes (returns 1) when proximity triggers the order interaction, which sets bit 18.
*
* @note Not a pure check — has side effects on the NPC object and quest context each call.
* @note Formerly named "SetNpcOrderFlagAndCheckBit18" / "SetNpcOrderModeAndCheckTriggered".
* @param stageNo Stage number — not used in the function body.
* @param npcId NPC ID — not referenced in the function body (used by the framework).
* @param noOrderGroupSerial Used to look up the NPC object; also identifies the pre-talk message
* shown when the player clicks the NPC before the order UI appears.
* @param storeVal Written to ctx+0x5c+0x24c.
*/
NpcPreTalkAndOrderUi(StageNo stageNo, NpcId npcId, int noOrderGroupSerial, int storeVal);
2026-04-05 09:04:41 -04:00
```
2026-04-12 02:07:21 -04:00
### TalkNpcChoice (214)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00635B10` |
| Table index | 214 |
| Key callees | `sGame::mpInstance+0x28` (current stage), `FUN_00c0e9e0()` (current NPC entity ID), `FUN_00c0eda0()` (NPC talk-active state), `FUN_00c0eab0()` (NPC choice field +0x90) |
```
/**
* @brief Progresses when the player chooses a specific dialogue option with an NPC.
* Validates: stageNo == current stage, npcId == current NPC entity ID, NPC is in talk-active state,
* and NPC choice field (+0x90) == choice. Used in branching quests (e.g. Extend Garden).
* NPC is not auto-marked; pair with TalkNpc and QstTalkChg to set up the NPC talk first.
* @param stageNo Stage number
* @param npcId NPC entity ID
* @param choice Expected dialogue choice value (from NPC+0x90)
* @param param04 Unused
*/
2026-04-12 02:07:21 -04:00
TalkNpcChoice(StageNo stageNo, int npcId, int choice, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
### SubstoryEnemyHpNotLess (215)
| Field | Value |
|-------|-------|
| Address | `0x00635BF0` |
| Table index | 215 |
| Key callees | `FUN_00be10d0(substoryId)` returns HP ratio as float; `ratio * 100 >= hpRatePercent` |
```
/**
* @brief Checks if a specific substory enemy's current HP% >= hpRatePercent.
* @param substoryId Substory identifier used to look up the enemy
* @param hpRatePercent HP percentage threshold (0– 100)
*/
SubstoryEnemyHpNotLess(int substoryId, int hpRatePercent, int param03 = 0, int param04 = 0);
```
### SubstoryEnemyHpLess (216)
| Field | Value |
|-------|-------|
| Address | `0x00635C40` |
| Table index | 216 |
| Key callees | Same as SubstoryEnemyHpNotLess but inverted: `ratio * 100 < hpRatePercent` |
```
/**
* @brief Checks if a specific substory enemy's current HP% < hpRatePercent.
* @param substoryId Substory identifier
* @param hpRatePercent HP percentage threshold (0– 100)
*/
SubstoryEnemyHpLess(int substoryId, int hpRatePercent, int param03 = 0, int param04 = 0);
```
### SubstoryAvgEnemyHpNotLess (217)
| Field | Value |
|-------|-------|
| Address | `0x00635C90` |
| Table index | 217 |
| Key callees | `FUN_00be1130()` computes average HP ratio across ALL substory NPCs |
```
/**
* @brief Checks if the average HP% of all substory NPCs >= hpRatePercent.
* Uses the whole-list average, not a specific enemy.
* @param param01 Unused / reserved
* @param hpRatePercent HP percentage threshold (0– 100)
*/
SubstoryAvgEnemyHpNotLess(int param01 = 0, int hpRatePercent = 0, int param03 = 0, int param04 = 0);
```
### SubstoryAvgEnemyHpLess (218)
| Field | Value |
|-------|-------|
| Address | `0x00635CD0` |
| Table index | 218 |
| Key callees | `FUN_00be1130()` , inverted: average HP% < hpRatePercent |
```
/**
* @brief Checks if the average HP% of all substory NPCs < hpRatePercent.
* @param param01 Unused / reserved
* @param hpRatePercent HP percentage threshold (0– 100)
*/
SubstoryAvgEnemyHpLess(int param01 = 0, int hpRatePercent = 0, int param03 = 0, int param04 = 0);
```
### IsOmBehaviorState (219)
| Field | Value |
|-------|-------|
| Address | `0x00635D70` |
| Table index | 219 |
| Key callees | `FUN_0063d480(stageNo, groupNo, setNo)` (resolves OM), `FUN_00c0eab0()` reads field +0x90 |
```
/**
* @brief Checks if an OM's behavior state enum equals the expected value.
* Resolves the OM via FUN_0063d480, reads the state from entity+0x90.
* @param stageNo Stage number
* @param groupNo OM group number
* @param setNo OM set number
* @param behaviorState Expected behavior state enum value
*/
IsOmBehaviorState(StageNo stageNo, int groupNo, int setNo, int behaviorState);
```
2026-05-31 14:47:57 +01:00
### MonsterGatheringSpotState (220)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00635EF0` |
| Table index | 220 |
2026-05-31 14:47:57 +01:00
| Key callees | `FUN_00b19cc0` (GM check), `DAT_022044c4+0x3834+0x8c` (stage number), `FUN_00bfc1e0` (spotId) |
2026-04-05 09:04:41 -04:00
```
/**
2026-05-31 14:47:57 +01:00
* @brief Checks if a specific enemy group has spawned in a monster gathering spot.
* Reads SpotState from CDataAreaRankMonsterGatheringSpot and checks against param3.
* SpotState ranges from 1 to 4 and rotated every 18 hours in the original game, with SpotState = 3 spawning the Spot Boss.
* Returns 1 if FUN_00bfc1e0(spotId) has the expected spot state.
* Used in gathering S3 World Quests that require the Spot Boss to not be present.
* @param stageNo Stage number DAT_022044c4+0x3834+0x8c
* @param spotId Spot identifier passed to FUN_00bfc1e0
* @param spotState Expected spot value from FUN_00bfc1e0
2026-04-05 09:04:41 -04:00
*/
2026-05-31 14:47:57 +01:00
MonsterGatheringSpotState(int stageNo, int spotId, int spotState, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
2026-05-31 14:47:57 +01:00
### OmEndAnimation (221)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00636000` |
| Table index | 221 |
2026-05-31 14:47:57 +01:00
| Key callees | `FUN_00a41780(stageNo, groupNo, setNo, 0)` (quest layout type 3), `FUN_00bc2da0` (checks status bit 15) |
2026-04-05 09:04:41 -04:00
```
/**
2026-05-31 14:47:57 +01:00
* @brief Checks if a player has interacted with an OM and its animation has played out completely.
* Mainly used for the new Season 3 levers with a longer animation.
2026-04-05 09:04:41 -04:00
* @param stageNo Stage number
2026-05-31 14:47:57 +01:00
* @param groupNo Layout group number
* @param setNo Layout set number
2026-04-05 09:04:41 -04:00
*/
2026-05-31 14:47:57 +01:00
OmEndAnimation(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
2026-05-31 14:47:57 +01:00
### OmEndAnimationNoMarker (222)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00636060` |
| Table index | 222 |
2026-05-31 14:47:57 +01:00
| Notes | Identical decompilation to OmEndAnimation (221). May differ in calling convention. |
2026-04-05 09:04:41 -04:00
```
/**
2026-05-31 14:47:57 +01:00
* @brief Variant of OmEndAnimation without a marker.
2026-04-05 09:04:41 -04:00
* @param stageNo Stage number
2026-05-31 14:47:57 +01:00
* @param groupNo Layout group number
* @param setNo Layout set number
2026-04-05 09:04:41 -04:00
*/
2026-05-31 14:47:57 +01:00
OmEndAnimationNoMarker(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
2026-05-31 14:47:57 +01:00
### QuestOmEndAnimation (223)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x006360B0` |
| Table index | 223 |
| Key callees | `FUN_009cff70` (area instance check); if non-zero: `FUN_00a41890` ; else `FUN_00a41780` ; then `FUN_00bc2da0` |
```
/**
2026-05-31 14:47:57 +01:00
* @brief Checks if a player has interacted with a quest-spawned OM and its animation has played out completely.
* Mainly used for the new Season 3 levers with a longer animation.
2026-04-05 09:04:41 -04:00
* Uses the area-specific lookup (FUN_00a41890) when an area instance is active.
* @param stageNo Stage number
2026-05-31 14:47:57 +01:00
* @param groupNo Layout group number
* @param setNo Layout set number
2026-04-05 09:04:41 -04:00
*/
2026-05-31 14:47:57 +01:00
QuestOmEndAnimation(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
2026-05-31 14:47:57 +01:00
### QuestOmEndAnimationNoMarker (224)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00636110` |
| Table index | 224 |
2026-05-31 14:47:57 +01:00
| Notes | Duplicate of QuestOmEndAnimation (223). |
2026-04-05 09:04:41 -04:00
```
/**
2026-05-31 14:47:57 +01:00
* @brief Variant of QuestOmEndAnimation without a marker.
2026-04-05 09:04:41 -04:00
* @param stageNo Stage number
2026-05-31 14:47:57 +01:00
* @param groupNo Layout group number
* @param setNo Layout set number
2026-04-05 09:04:41 -04:00
*/
2026-05-31 14:47:57 +01:00
QuestOmEndAnimationNoMarker(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
### OmSetTouchRadius (226)
| Field | Value |
|-------|-------|
| Address | `0x00636400` (thunk → `0x00638940` ) |
| Table index | 226 |
| Key callees | `FUN_006380c0` — validates ctx+0x210 (touch event present), packed `(groupNo<<16\|stageNo)` vs stored touch ID, `FUN_00be0670()` for setNo; checks **bit 3** of ctx+0x208 (touch-enter flag) |
| Side effects | Calls `FUN_00a336e0(param04)` to update radius marker display on match |
```
/**
* @brief Displays a radius marker around an OM object and progresses when the player enters and interacts with it.
* Validates: stage+group match, setNo match, touch event present, enter bit (ctx+0x208 bit 3) set.
* On match, updates the radius marker display via FUN_00a336e0(param04).
* @note Complement is OmReleaseTouchRadius (227) which fires on exit (bit 4).
* @param stageNo Stage number
* @param groupNo OM group number
* @param setNo OM set number
* @param param04 Passed to FUN_00a336e0 for marker display
*/
OmSetTouchRadius(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
```
### OmReleaseTouchRadius (227)
| Field | Value |
|-------|-------|
| Address | `0x00636450` (thunk → `0x00638AB0` ) |
| Table index | 227 |
| Key callees | `FUN_00638150` — same structure as OmSetTouchRadius but checks **bit 4** of ctx+0x208 (touch-exit flag) |
```
/**
* @brief Displays a radius marker around an OM object and progresses when the player exits its radius.
* Complementary to OmSetTouchRadius (226) — fires on exit (ctx+0x208 bit 4), not entry.
* @param stageNo Stage number
* @param groupNo OM group number
* @param setNo OM set number
* @param param04 Radius marker parameter
*/
OmReleaseTouchRadius(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
```
### IsNpcInteractionComplete (228)
| Field | Value |
|-------|-------|
| Address | `0x006364A0` (thunk → `0x00638B90` ) |
| Table index | 228 |
| Key callees | `FUN_0064c1f0()` (cutscene check), `FUN_0063d480(stageNo, npcId, choiceId, param04)` (NPC interaction validator), `FUN_009d0170()` (NPC lookup), `FUN_00c0ee60()` (NPC talk state) |
| Key fields | `DAT_0220456c+0x9f4+0x4654` vs `+0x45cc` — scene-change counters (cutscene path) |
```
/**
* @brief Checks if an NPC interaction with a specific choice has completed. Two code paths:
* (1) Cutscene path (FUN_0064c1f0 returns true): checks scene-change counter equality.
* (2) Normal path: validates local player entity, NPC talk state, and that an interaction record
* matches stageNo/npcId/choiceId via FUN_0063d480.
* @note param03 is the choiceId distinguishing dialogue branches, not a generic param.
* @note Formerly named "NpcInteraction" — renamed after Ghidra verification.
* @param stageNo Stage number
* @param npcId NPC entity ID
* @param choiceId Dialogue branch/choice identifier
* @param param04 Secondary interaction context value
*/
IsNpcInteractionComplete(StageNo stageNo, int npcId, int choiceId, int param04 = 0);
```
2026-06-22 22:08:18 +01:00
### DieEnemyNoMarker (225)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00636390` |
| Table index | 225 |
2026-06-22 22:08:18 +01:00
| Key callees | `FUN_00bfc5d0: isKilledEnemyGroup(groupNo)` (checks flag at +0x274); `FUN_00bfc5a0(groupNo, setNo)` (group death check) |
2026-04-05 09:04:41 -04:00
```
/**
2026-06-22 22:08:18 +01:00
* @brief Enemy group death checker. Guards on GM mode and stage number match. Does not place quest markers on enemies.
* If groupNo < 0 , checks flag at entry + 0x274 via FUN_00bfc5d0 .
* If groupNo >= 0, calls FUN_00bfc5a0 and checks if setNo matches a dead enemy (-1: check all positions)
* @param stageNo Stage identifier
* @param groupNo Group identifier
* @param setNo Enemy position identifier
2026-04-05 09:04:41 -04:00
*/
2026-06-22 22:08:18 +01:00
DieEnemyNoMarker(int stageNo, int groupNo, int setNo, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
### IsEnemyFoundForOrderRadius (230)
| Field | Value |
|-------|-------|
| Address | `0x00636560` (thunk → `0x00636C20` ) |
| Table index | 230 |
| Key callees | `FUN_00b19320(stageNo)` — stage-to-area-ID map; `FUN_00b2c2a0` / `FUN_00b2c910` — scan packet buffers for SceHit type-9/type-12 entries; `DAT_021af4f4` — area trigger manager |
```
/**
* @brief Places a radius marker on the enemy group position and progresses when the player
* discovers the enemy. param03 (setNo) = -1 matches any set in the group.
* Must be followed by a kill command (e.g. DieEnemy) to complete the quest block.
* @note Params match the DieEnemy / IsEnemyFound (stageNo, groupNo, setNo) convention.
* @param stageNo Stage number
* @param groupNo Enemy group number (marker drawn at group position on map)
* @param setNo Enemy set number (-1 = any)
* @param markerFlag Marker display control
*/
IsEnemyFoundForOrderRadius(StageNo stageNo, int groupNo, int setNo = -1, int markerFlag = 0);
```
### IsEnemyFoundForOrderRadiusNoMarker (231)
| Field | Value |
|-------|-------|
| Address | `0x00636610` |
| Table index | 231 |
| Key callees | `FUN_00bda180()` / `FUN_00bda1a0()` — acquire/release spin lock; `FUN_009cfad0()` — lock contention test; `FUN_00636c20` — same proximity hit function as ID 230 |
```
/**
* @brief No-marker, lock-guarded variant of IsEnemyFoundForOrderRadius.
* Acquires FUN_00bda180() spin lock before checking; if already locked returns false immediately.
* Always passes markerFlag=0 internally — param04 is unused.
* @param stageNo Stage number
* @param groupNo Enemy group number
* @param setNo Enemy set number (-1 = any)
* @param param04 Unused (markerFlag forced to 0 internally)
*/
IsEnemyFoundForOrderRadiusNoMarker(StageNo stageNo, int groupNo, int setNo = -1, int param04 = 0);
```
2026-05-31 14:47:57 +01:00
### HasAchievement (233)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00636900` |
| Table index | 233 |
```
/**
2026-05-31 14:47:57 +01:00
* @brief Checks if player has an achievement from a given category.
* @brief Only seems to work for category 6 (Great Purpose).
* @param1 categoryNo
* @param2 achievementId
2026-04-05 09:04:41 -04:00
*/
2026-05-31 14:47:57 +01:00
HasAchievement(int categoryNo, int achievementId, int param03_unused = 0, int param04_unused = 0);
2026-04-05 09:04:41 -04:00
```
### IsOmBrokenInCurrentPhase (229)
| Field | Value |
|-------|-------|
| Address | `0x006364F0` |
| Table index | 229 |
| Key callees | `FUN_009cff50` / `FUN_00bdf6c0` (phase context), `FUN_00be3160(groupNo, setNo)` (OM broken check), bit 18 of `this+0x5c+0x208` |
```
/**
* @brief Checks if an OM set is broken in the current substory phase.
* Gets phase context via FUN_009cff50/FUN_00bdf6c0, then calls FUN_00be3160.
* Also validates bit 18 of this+0x5c+0x208.
* @param stageNo Stage number
* @param groupNo OM group number
* @param setNo OM set number
*/
IsOmBrokenInCurrentPhase(StageNo stageNo, int groupNo, int setNo, int param04 = 0);
```
### IsTutorialSequenceActive (232)
| Field | Value |
|-------|-------|
| Address | `0x006368A0` |
| Table index | 232 |
| Key callees | `FUN_00be4e10` reads byte at substory+0x262 |
```
/**
* @brief Checks if a tutorial cutscene/sequence OM is active.
* Reads the single-byte flag at substoryObject+0x262 via FUN_00be4e10.
*/
IsTutorialSequenceActive(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
```
### IsSubstoryStateBit19 (234)
| Field | Value |
|-------|-------|
| Address | `0x00636980` |
| Table index | 234 |
| State offset | `cQuestProcess+0x5c+0x20c` , bit 19 (0x13) |
```
/**
* @brief Returns bit 19 of the substory state word at *(cQuestProcess+0x5c)+0x20c.
*/
IsSubstoryStateBit19(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
```
2026-06-20 01:01:48 +01:00
### IsEquipSeasonal (235)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x006369F0` |
| Table index | 235 |
2026-06-20 01:01:48 +01:00
| Key callees | `FUN_00b956a0` (iterate up to 15 equipment slots), `FUN_004dadf0` / `FUN_004df8d0` (check item lists), item ID list at `PTR_LAB_02141040[itemListIdx]` |
2026-04-05 09:04:41 -04:00
```
/**
2026-06-20 01:01:48 +01:00
* @brief Iterates 15 player equipment slots and checks against a seasonal item ID list (param01). Returns 1 if any match is found.
* 0 = Summer, 1 = Christmas. Lists are not comprehensive.
* Summer equipment ID list: 14151-14162, 17954-17955, 19135-19146, 507, 2119, 3142, 4165, 5188, 995, 2607, 3630, 4653, 5676, 8708-8712, 8723-8727
* Christmas equipment ID list: 19568, 19570, 19572, 19574, 19576, 19578, 19580, 19582, 19584, 19586, 19588, 19590, 16788-16799
2026-04-05 09:04:41 -04:00
*/
2026-06-20 01:01:48 +01:00
IsEquipSeasonal(int listNo = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
2026-06-20 01:01:48 +01:00
### DoLimitBreak (236)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00636B10` |
| Table index | 236 |
| State offset | `cQuestProcess+0x5c+0x20c` , bit 20 (0x14) |
```
/**
2026-06-20 01:01:48 +01:00
* @brief Checks if player has performed a limit break on an equipment.
* @brief Equipping limit broken equipment does not quality; the command checks notice bit 20 that signals the limit break action.
2026-04-05 09:04:41 -04:00
*/
2026-06-20 01:01:48 +01:00
DoLimitBreak(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
2026-06-23 19:18:18 +01:00
### DoExtremeSynthesis (237)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00636B70` |
| Table index | 237 |
| State offset | `cQuestProcess+0x5c+0x20c` , bit 21 (0x15) |
```
/**
2026-06-23 19:18:18 +01:00
* @brief Checks if the player has performed extreme synthesis on an equipment (notice bit 21).
2026-04-05 09:04:41 -04:00
*/
2026-06-23 19:18:18 +01:00
DoExtremeSynthesis(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
2026-06-20 19:19:38 +01:00
### GetHighOrb (238)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00636BA0` |
| Table index | 238 |
| State offset | `cQuestProcess+0x5c+0x20c` , bit 22 (0x16) |
```
/**
2026-06-20 19:19:38 +01:00
* @brief Checks if player has obtained a High Orb from any source (notice bit 22). Quantity does not matter.
* @brief High Orbs already in the player's wallet do not count: they must obtain orbs from a new source.
2026-04-05 09:04:41 -04:00
*/
IsSubstoryStateBit22(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
```
2026-06-24 19:57:08 +01:00
### GetDominionPoint (239)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00636BD0` |
| Table index | 239 |
| State offset | `cQuestProcess+0x5c+0x20c` , bit 23 (0x17) |
```
/**
2026-06-24 19:57:08 +01:00
* @brief Checks if player has obtained a Dominion Point from any source (notice bit 23). Quantity does not matter.
* @brief High Orbs already in the player's wallet do not count: they must obtain orbs from a new source.
2026-04-05 09:04:41 -04:00
*/
2026-06-24 19:57:08 +01:00
GetDominionPoint(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
2026-06-22 22:08:18 +01:00
### IsReleaseWarpPointAnyoneNoMarker (240)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00636C10` |
| Table index | 240 |
2026-06-22 22:08:18 +01:00
| Key callees | Thunks to `FUN_00634090` (IsReleaseWarpPointAnyone) |
2026-04-05 09:04:41 -04:00
```
/**
2026-06-22 22:08:18 +01:00
* @brief Jumps to IsReleaseWarpPointAnyone and therefore works in the same way; no quest markers.
* @param waypointId Waypoint identifier
2026-04-05 09:04:41 -04:00
*/
2026-06-22 22:08:18 +01:00
IsReleaseWarpPointAnyoneNoMarker(int waypointId, int param02 = 0, int param03 = 0, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
### IsSubstoryIngameHourInRange (241)
| Field | Value |
|-------|-------|
| Address | `0x00636EF0` |
| Table index | 241 |
| Key callees | `FUN_009cfdf0` / `FUN_009d0160` / `FUN_00bdee50(0xb)` / `FUN_00597d20` (substory clock); multiplier `DAT_01aeaa98` converts raw time to hours |
```
/**
* @brief Checks if the substory clock is within [minHour, maxHour].
* Parameters are sorted internally so order does not matter.
* @param minHour Minimum hour (inclusive)
* @param maxHour Maximum hour (inclusive)
*/
IsSubstoryIngameHourInRange(int minHour, int maxHour, int param03 = 0, int param04 = 0);
```
### IsQuestClearCountNotLess (245)
| Field | Value |
|-------|-------|
| Address | `0x00637250` |
| Table index | 245 |
| Key callees | `FUN_009d0230` , `FUN_0064d170` ; compares against `DAT_0220456c+0xb28` / `+0xb2c` |
```
/**
* @brief Checks if the current quest clear count has reached or exceeded a threshold.
* @param param01 Threshold or context value passed to FUN_009d0230
*/
IsQuestClearCountNotLess(int param01, int param02 = 0, int param03 = 0, int param04 = 0);
```
### IsContentsModeTimerNotLess (246)
| Field | Value |
|-------|-------|
| Address | `0x00637320` |
| Table index | 246 |
| Key callees | `FUN_00bc15d0` (elapsed timer); guards on S3 season-phase pointer at `DAT_0220456c+0x9f4` |
```
/**
* @brief S3-only: checks if the contents mode elapsed timer >= timeSec.
* Returns 0 if not in the correct season phase.
* @param timeSec Minimum elapsed seconds
*/
IsContentsModeTimerNotLess(int timeSec, int param02 = 0, int param03 = 0, int param04 = 0);
```
### IsTriggerFlagSetAndClear (247)
| Field | Value |
|-------|-------|
| Address | `0x006373F0` |
| Table index | 247 |
| Flag address | `DAT_021af4f4 + 0xEEA` |
```
/**
* @brief Fire-once trigger: reads byte at DAT_021af4f4+0xEEA.
* If the byte equals 1, clears it to 0 and returns 1. Otherwise returns 0.
* The flag is set by an external event; this command consumes it atomically.
*/
IsTriggerFlagSetAndClear(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
```
2026-05-31 14:47:57 +01:00
### ChainNotLess (250)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x006374C0` |
| Table index | 250 |
2026-05-31 14:47:57 +01:00
| Key callees | param01==0: checks phase-complete flag at game instance +0x10 and fires message 0x25e; param01>0: compares `param01 <= *(sGame::mpInstance + 0x3a0c)` |
2026-04-05 09:04:41 -04:00
```
/**
2026-05-31 14:47:57 +01:00
* @brief Checks if the player has reached a chain number from a Chain Dungeon (Extreme Mission).
* Reads Unk2 from packet S2CSituationDataUpdateObjectivesNtc and checks against param1.
* chainNo == 0: checks if initial phase is complete (fires announce 0x25e if so).
* chainNo > 0: checks if chainNo < = *(sGame::mpInstance + 0x3a0c).
* @param chainNo Chain counter threshold (0 = phase-complete check)
2026-04-05 09:04:41 -04:00
*/
2026-05-31 14:47:57 +01:00
ChainNotLess(int chainNo, int param02 = 0, int param03 = 0, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
2026-06-20 01:01:48 +01:00
### IsWildHuntClear (253)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00637820` |
| Table index | 253 |
| Key callees | `FUN_00bdee50(0xc)` (area context mode 0xc), reads byte at context+0x3b |
```
/**
2026-06-20 01:01:48 +01:00
* @brief Checks if player has accepted and cleared a wild hunt quest.
2026-04-05 09:04:41 -04:00
* Reads byte at +0x3b from the mode-0xc area context; returns true if non-zero.
2026-06-20 01:01:48 +01:00
* Does not actually check for the accept (progression may be added to the database), only for the notice at quest completion moment.
2026-04-05 09:04:41 -04:00
*/
2026-06-20 01:01:48 +01:00
IsWildHuntClear(int param01 = 0, int param02 = 0, int param03 = 0, int param04 = 0);
2026-04-05 09:04:41 -04:00
```
2026-05-31 14:47:57 +01:00
### IsQuestLayoutHpNotGreater (255)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00637890` |
| Table index | 255 |
2026-05-31 14:47:57 +01:00
| Key callees | `FUN_00a41780` (quest layout type 3 lookup), `FUN_00bc0ab0` computes HP-lost% = `100 - (current/max)*100` |
2026-04-05 09:04:41 -04:00
```
/**
2026-05-31 14:47:57 +01:00
* @brief Checks if a quest layout's HP-lost percentage is within [0, hpPct].
* Effectively checks that the layout's remaining HP >= (100 - hpPct)%.
2026-04-16 19:51:05 -04:00
* @note Works on Layout Enemies in EXM (Chain Dungeon)
* @param stageNo Stage number
2026-05-31 14:47:57 +01:00
* @param groupNo Layout group number
* @param setNo Layout set number
2026-04-16 19:51:05 -04:00
* @param hpPct Hp % to trigger check on (0 = full HP required, 100 = any HP)
2026-04-05 09:04:41 -04:00
*/
2026-05-31 14:47:57 +01:00
IsQuestLayoutHpNotGreater(StageNo stageNo, int groupNo, int setNo, int hpPct);
2026-04-05 09:04:41 -04:00
```
2026-05-31 14:47:57 +01:00
### IsExtremeMissionClear (256)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00637950` |
| Table index | 256 |
2026-05-31 14:47:57 +01:00
| System | **Grand Mission / Extreme Mission / Chain Dungeons** (Area-Linkage battle content) |
| Key callees | Content-mode guard: `DAT_0220456c+0x9f4+0x4654 == +0x45cc` ; `FUN_00a336e0(questId)` (constructs Grand Mission vtable wrapper); `FUN_00be1ce0` → `FUN_00be1f70(9)` (walks type-9 quest list at manager+0x90) |
2026-04-05 09:04:41 -04:00
| Vtable ID | `PTR_FUN_01afa2d0` — same vtable as "Grand Mission:Raid Boss" (`0x01afae08` ) and "Grand Mission:Fort Defense" (`0x01afa388` ) |
| Content-mode guard | `+0x4654 == +0x45cc` — general content-phase equality check; fails during transitions. Same guard used by commands 242/243/244/251. |
```
/**
2026-05-31 14:47:57 +01:00
* @brief Checks if a player has cleared a specific Extreme Mission/Grand Mission/Chain Dungeon (category 9 quests).
* Constructs a typed Grand Mission wrapper via FUN_00a336e0(questId), then walks the type-9 quest
* list at Grand Mission manager+0x90 via FUN_00be1f70(9). Returns 1 if any entry's +4 field matches questId.
* Guarded by content-mode equality (DAT_0220456c+0x9f4+0x4654 == +0x45cc); returns 0 if player has not yet cleared the quest.
* @note This is merely a quest completion check — adding a clear to the database is enough.
2026-04-05 09:04:41 -04:00
* Other sub-types: 3 (+0x68), 4 (+0x7c), 0xb (+0xa4) — each has a parallel check command.
2026-05-31 14:47:57 +01:00
* @param questId Quest identifier matched against entry+4 in the type-9 quest category list (params 2-4 unused)
2026-04-05 09:04:41 -04:00
*/
2026-05-31 14:47:57 +01:00
IsExtremeMissionClear(int questId, int param02_unused = 0, int param03_unused = 0, int param04_unused = 0);
2026-04-05 09:04:41 -04:00
```
2026-06-22 22:08:18 +01:00
### IsKilledTargetEnemySetGroup2 (242)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00636FE0` |
| Table index | 242 |
2026-06-22 22:08:18 +01:00
| Key callees | Content-mode guard: `DAT_0220456c+0x9f4+0x4654` vs `+0x45cc` , `FUN_009d07f0()` , `*(this+0x82)` byte; delegates to `FUN_0063a5e0` (IsKilledTargetEnemySetGroup) |
2026-04-05 09:04:41 -04:00
| Key fields | Kill-group entries: `entry+0x14` =flagNo, `entry+0x18` =valid, `entry+4` =kill-completion counter (0=done) |
```
/**
2026-06-20 01:01:48 +01:00
* @brief Kill-group completion check, gated on content mode. Verifies content mode via counter equality.
* Content guard is also present in several transition check commands: most likely a player readiness check.
2026-04-05 09:04:41 -04:00
* (ctx+0x4654 == ctx+0x45cc) and FUN_009d07f0(). If not in content mode and this+0x82 != 0, returns early.
2026-06-20 01:01:48 +01:00
* Calls check command IsKilledTargetEnemySetGroup (FUN_0063a5e0) which iterates the kill-group list, matches flagNo at entry+0x14,
2026-04-05 09:04:41 -04:00
* checks entry+0x18 (valid byte) and entry+4 == 0 (all kills done).
* The marker vs no-marker distinction (vs ID 243) is a runtime property of this+0x82, not code structure.
* @note 5 total parameters (not 4).
* @param flagNo Kill-group flag identifier
2026-06-20 01:01:48 +01:00
* @param param03 Passed to IsKilledTargetEnemySetGroup
* @param param04 Passed to IsKilledTargetEnemySetGroup
* @param param05 Passed to IsKilledTargetEnemySetGroup
2026-04-05 09:04:41 -04:00
*/
2026-06-22 22:08:18 +01:00
IsKilledTargetEnemySetGroup2(int flagNo, int param03 = 0, int param04 = 0, int param05 = 0);
2026-04-05 09:04:41 -04:00
```
2026-06-22 22:08:18 +01:00
### IsKilledTargetEnemySetGroup2NoMarker (243)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x006370B0` |
| Table index | 243 |
| Notes | Byte-for-byte identical decompilation to ID 242. No-marker is a runtime property of `this+0x82` . |
```
/**
2026-06-22 22:08:18 +01:00
* @brief Identical implementation to IsKilledTargetEnemySetGroup2 (242).
2026-04-05 09:04:41 -04:00
* The no-marker variant is distinguished at runtime by this+0x82 being non-zero, not by code structure.
2026-06-22 22:08:18 +01:00
* See IsKilledTargetEnemySetGroup2 for full documentation.
2026-04-05 09:04:41 -04:00
* @note Original name had a mixed-case typo ("IsKIlled...ENemy") — corrected here.
* @param flagNo Kill-group flag identifier
2026-06-22 22:08:18 +01:00
* @param param03 Passed to IsKilledTargetEnemySetGroup
* @param param04 Passed to IsKilledTargetEnemySetGroup
* @param param05 Passed to IsKilledTargetEnemySetGroup
2026-04-05 09:04:41 -04:00
*/
2026-06-22 22:08:18 +01:00
IsKilledTargetEnemySetGroup2NoMarker(int flagNo, int param03 = 0, int param04 = 0, int param05 = 0);
2026-04-05 09:04:41 -04:00
```
### IsContentsTimerBElapsed (244)
| Field | Value |
|-------|-------|
| Address | `0x00637180` |
| Table index | 244 |
| Key callees | `FUN_0064d170(timerNo)` — Timer List B lookup at ctx+0x104; returns `entry+8` (elapsed value) |
| Key fields | `DAT_0220456c+0xb28` / `+0xb2c` — 64-bit time boundary |
```
/**
* @brief Checks if a Timer List B entry's elapsed value is within a stored 64-bit time boundary.
* Calls FUN_0064d170(timerNo) to find the entry in Timer List B (ctx+0x104) and gets its elapsed
* value at entry+8. Returns 1 if elapsed < = boundary.
* @note Formerly named "IsEndContentsTimer0". Previous description "evaluates bit-flag, not elapsed time"
* was INCORRECT — this performs a 64-bit elapsed-time comparison against DAT_0220456c+0xb28/+0xb2c.
* @note Params 2-4 are unused.
* @param timerNo Timer identifier
*/
IsContentsTimerBElapsed(int timerNo, int param02_unused = 0, int param03_unused = 0, int param04_unused = 0);
```
2026-06-15 18:29:40 +01:00
### IsWildHuntEnemyKilled (248)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x00637430` (direct thunk → `FUN_0063A5E0` ) |
| Table index | 248 |
| Key callees | `FUN_0063a5e0` — same kill-group completion function as IDs 242/243, but with no content-mode guard |
| Key fields | Kill-group entry: `+0x14` =flagNo, `+0x18` =valid, `+4` =kill counter (0=done) |
```
/**
2026-06-20 01:01:48 +01:00
* @brief Direct thunk to IsKilledTargetEnemySetGroup (FUN_0063a5e0) with no content-mode guard (unlike IDs 242/243).
2026-04-05 09:04:41 -04:00
* Iterates the kill-group list on this, finds entry matching flagNo at entry+0x14,
* checks entry+0x18 (valid) and entry+4 == 0 (kill complete). Only flagNo is used.
* @note Formerly named "IsKilledTargetEnemySetGroupInRadius". Previous description "shape type 4 radius"
* was INCORRECT — no shape-type filtering exists in this function. The "radius" refers to the
* visual kill zone representation, not code behaviour.
* @note Only 2 parameters are used (this, flagNo); params 3-4 are ignored.
* @param flagNo Kill-group flag identifier
*/
2026-06-15 18:29:40 +01:00
IsWildHuntEnemyKilled(int flagNo, int param02_unused = 0, int param03_unused = 0, int param04_unused = 0);
2026-04-05 09:04:41 -04:00
```
2026-06-22 22:08:18 +01:00
### IsEndTimer2 (251)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x006375E0` |
| Table index | 251 |
| Key callees | Content-mode guard (same as IDs 242/243); `FUN_0064d130(timerNo)` — Timer List A lookup at ctx+0xf0 |
| Key fields | Returns `entry+8 == 0` — true when timer state is zero |
```
/**
* @brief Checks if a Timer List A entry's state value equals zero. Content-mode gated (same guard as 242/243).
2026-06-22 22:08:18 +01:00
* Checks ctx+0x4654 == ctx+0x45cc (content mode counter), calls isSoloQuest (solo quest or tutorial guide check) and checks for leader only.
* If all checks pass, the command behaves identically to IsEndTimer.
2026-04-05 09:04:41 -04:00
* @note Formerly named "IsEndContentsTimer1". Previous description "byte-flag at +0x1e95" was INCORRECT
* — offset +0x1e95 does not appear in the decompilation. Timer List A is correct.
* @note Only timerNo (param01) is used; param02-04 are ignored.
* @param timerNo Timer identifier to look up in Timer List A
*/
2026-06-22 22:08:18 +01:00
IsEndTimer2(int timerNo, int param02_unused = 0, int param03_unused = 0, int param04_unused = 0);
2026-04-05 09:04:41 -04:00
```
2026-06-15 18:29:40 +01:00
### IsWildHuntEnemyFound (252)
2026-04-05 09:04:41 -04:00
| Field | Value |
|-------|-------|
| Address | `0x006376E0` |
| Table index | 252 |
| System | **Wild Hunt** (`cMobHuntQuestManager` — "MobHunt" is the internal engine name for Wild Hunt) |
2026-06-15 18:29:40 +01:00
| Key callees | `FUN_00a39f80(entry)` reads `entry+0x14` (flag ID); `FUN_00a3c2b0(sub)` reads `sub+4` (em ID field 1); `FUN_00a3a000(sub)` reads `sub+8` (em ID field 2); `FUN_00636c20(id1, id2, -1, param04)` — generic OM enemy discovered-state checker |
2026-06-20 01:01:48 +01:00
| Kill state | vtable+0x2ec returns `0xc` (found); fallback via `FUN_00c82ac0` |
2026-04-05 09:04:41 -04:00
```
/**
2026-06-15 18:29:40 +01:00
* @brief Checks whether a Wild Hunt target enemy has been found.
2026-04-05 09:04:41 -04:00
* "MobHunt" is the internal engine name for the Wild Hunt system (cMobHuntQuestManager).
* Iterates the check-command object's zone-entry list (this[2] = count, this[5] = entry array).
2026-06-15 18:29:40 +01:00
* Finds the entry where entry+0x14 == param01 (flag ID), then for each sub-entry calls
* FUN_00636c20(em_id1, em_id2, -1, markerFlag) which checks vtable+0x2ec for discover state 0xc,
2026-04-05 09:04:41 -04:00
* with FUN_00c82ac0 as an alternate confirmation path.
* @note param02 and param03 are unused.
2026-06-15 18:29:40 +01:00
* @param flagId Enemy flag ID matched against entry+0x14 (param01)
2026-04-05 09:04:41 -04:00
* @param markerFlag Passed directly to FUN_00636c20 as its 4th arg (param04)
*/
2026-06-15 18:29:40 +01:00
IsWildHuntEnemyFound(int flagId, int param02_unused = 0, int param03_unused = 0, int markerFlag = 0);
2024-06-06 13:56:08 -04:00
```