Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
script_list.c File Reference

Go to the source code of this file.

Functions

s32 evt_execute_next_command (Evt *script)
 
void sort_scripts (void)
 
void find_script_labels (Evt *script)
 
void clear_script_list (void)
 
void init_script_list (void)
 
void suspend_frozen_scripts (Evt *script)
 
Evtstart_script (EvtScript *source, s32 priority, s32 flags)
 
Evtstart_script_in_group (EvtScript *source, u8 priority, u8 flags, u8 groupFlags)
 
Evtstart_child_script (Evt *parentScript, EvtScript *source, s32 flags)
 
Evtstart_child_thread (Evt *parentScript, Bytecode *nextLine, s32 newState)
 
Evtfunc_802C3C10 (Evt *script, Bytecode *line, s32 arg2)
 
Evtrestart_script (Evt *script)
 
void update_scripts (void)
 
void func_802C3EE4 (void)
 
void kill_script (Evt *instanceToKill)
 
void kill_script_by_ID (s32 id)
 
void kill_all_scripts (void)
 
s32 does_script_exist (s32 id)
 
s32 does_script_exist_by_ref (Evt *script)
 
void set_script_priority (Evt *script, s32 priority)
 
void set_script_timescale (Evt *script, f32 timescale)
 
void set_global_timespace (f32 timeScale)
 
f32 get_global_timespace (void)
 
void set_script_group (Evt *script, s32 groupFlags)
 
Triggerbind_trigger (EvtScript *script, s32 flags, s32 triggerFlagIndex, s32 triggerVar0, s32 triggerVar1, s32 priority, s32 arg6)
 
Triggerbind_trigger_1 (EvtScript *script, s32 flags, s32 triggerFlagIndex, s32 triggerVar0, s32 triggerVar1, s32 priority)
 
void suspend_group_script (Evt *script, s32 groupFlags)
 
void resume_group_script (Evt *script, s32 groupFlags)
 
void suspend_all_script (s32 id)
 
void resume_all_script (s32 id)
 
void suspend_group_script_index (s32 id, s32 groupFlags)
 
void resume_group_script_index (s32 id, s32 groupFlags)
 
void suspend_all_group (s32 groupFlags)
 
void resume_all_group (s32 groupFlags)
 
void suspend_group_others (Evt *script, s32 groupFlags)
 
void resume_group_others (Evt *script, s32 groupFlags)
 
Evtget_script_by_index (s32 index)
 
Evtget_script_by_id (s32 id)
 
void set_script_flags (Evt *script, s32 flags)
 
void clear_script_flags (Evt *script, s32 flags)
 

Variables

s32 UniqueScriptCounter = 1
 
s32 IsUpdatingScripts = false
 
f32 GlobalTimeRate = 1.0f
 
BSS u32gMapFlags
 
BSS s32gMapVars
 
BSS s32 gNumScripts
 
BSS ScriptList gWorldScriptList
 
BSS ScriptList gBattleScriptList
 
BSS ScriptListgCurrentScriptListPtr
 
BSS s32 gScriptIndexList [MAX_SCRIPTS]
 
BSS s32 gScriptIdList [MAX_SCRIPTS]
 
BSS s32 gScriptListCount
 
BSS char evtDebugPrintBuffer [0x100]
 
BSS struct LavaResetgLavaResetList
 
BSS s32 LastSafeFloor
 
BSS AnimatedModelList gBattleMeshAnimationList
 
BSS AnimatedModelList gWorldMeshAnimationList
 
BSS AnimatedModelListgCurrentMeshAnimationListPtr
 
BSS s32 wExtraPartnerID
 
BSS s32 wExtraPartnerNpcID
 
BSS s32 ShowMessageScreenOffsetX
 
BSS s32 ShowMessageScreenOffsetY
 
BSS MessagePrintStategCurrentPrintContext
 
BSS MessagePrintStateD_802DB268
 
BSS s32 D_802DB264
 
BSS Npc playerNpcData
 
BSS u16 PlayerImgFXFlags
 
BSS VirtualEntityList bBattleVirtualEntityList
 
BSS VirtualEntityList wWorldVirtualEntityList
 
BSS VirtualEntityListgCurrentVirtualEntityListPtr
 
BSS MusicEventMusicEventList
 
BSS EvtRunningMusicEvents [10]
 
BSS s32 RunningMusicEventIDs [10]
 
BSS PopupMenu gItemChoicePopupMenu
 
BSS u32 gWorldMapFlags [MAX_MAPFLAGS]
 
BSS u32 gBattleMapFlags [MAX_MAPFLAGS]
 
BSS u32 gWorldMapVars [MAX_MAPVARS]
 
BSS u32 gBattleMapVars [MAX_MAPVARS]
 
BSS PushBlockGridwPushBlockGrids [8]
 
BSS s32 DoorModelsSwingCW [3]
 
BSS s32 DoorModelsSwingCCW [3]
 

Function Documentation

◆ evt_execute_next_command()

s32 evt_execute_next_command ( Evt * script)

Definition at line 1360 of file evt.c.

1360 {
1362
1363 while (true) {
1364 s32 status = ApiStatus_DONE2;
1365 s32* lines;
1366 s32 nargs;
1367
1368 #if DX_DEBUG_MENU
1369 if (script->debugPaused && script->curOpcode != EVT_OP_INTERNAL_FETCH) {
1370 switch (script->debugStep) {
1372 return EVT_CMD_RESULT_YIELD;
1374 script->debugStep = DEBUG_EVT_STEP_NONE;
1375 break;
1377 // do not pause execution until we get a block
1378 break;
1379 }
1380 }
1381 #endif
1382
1384 if (commandsExecuted >= 10000) {
1385 char scriptName[0x80];
1387 PANIC_MSG("Script %s is blocking for ages (infinite loop?)", scriptName);
1388 }
1389
1390 switch (script->curOpcode) {
1392 script->ptrCurLine = script->ptrNextLine;
1393 lines = script->ptrNextLine;
1394 script->curOpcode = *lines++;
1395 nargs = *lines++;
1396 script->ptrReadPos = lines;
1397 script->blocked = false;
1398 script->curArgc = nargs;
1399 lines = &lines[nargs];
1400 script->ptrNextLine = lines;
1401 status = ApiStatus_REPEAT;
1402 break;
1403 case EVT_OP_RETURN:
1404 status = evt_handle_return(script);
1405 break;
1406 case EVT_OP_LABEL:
1407 status = evt_handle_label(script);
1408 break;
1409 case EVT_OP_GOTO:
1410 status = evt_handle_goto(script);
1411 break;
1412 case EVT_OP_LOOP:
1413 status = evt_handle_loop(script);
1414 break;
1415 case EVT_OP_END_LOOP:
1416 status = evt_handle_end_loop(script);
1417 break;
1418 case EVT_OP_BREAK_LOOP:
1419 status = evt_handle_break_loop(script);
1420 break;
1421 case EVT_OP_WAIT_FRAMES:
1422 status = evt_handle_wait(script);
1423 break;
1424 case EVT_OP_WAIT_SECS:
1426 break;
1427 case EVT_OP_IF_EQ:
1428 status = evt_handle_if_equal(script);
1429 break;
1430 case EVT_OP_IF_NE:
1432 break;
1433 case EVT_OP_IF_LT:
1434 status = evt_handle_if_less(script);
1435 break;
1436 case EVT_OP_IF_GT:
1437 status = evt_handle_if_greater(script);
1438 break;
1439 case EVT_OP_IF_LE:
1441 break;
1442 case EVT_OP_IF_GE:
1444 break;
1445 case EVT_OP_IF_FLAG:
1446 status = evt_handle_if_AND(script);
1447 break;
1448 case EVT_OP_IF_NOT_FLAG:
1449 status = evt_handle_if_not_AND(script);
1450 break;
1451 case EVT_OP_ELSE:
1452 status = evt_handle_else(script);
1453 break;
1454 case EVT_OP_END_IF:
1455 status = evt_handle_end_if(script);
1456 break;
1457 case EVT_OP_SWITCH:
1458 status = evt_handle_switch(script);
1459 break;
1462 break;
1463 case EVT_OP_CASE_EQ:
1464 status = evt_handle_case_equal(script);
1465 break;
1466 case EVT_OP_CASE_NE:
1468 break;
1469 case EVT_OP_CASE_LT:
1470 status = evt_handle_case_less(script);
1471 break;
1472 case EVT_OP_CASE_LE:
1474 break;
1475 case EVT_OP_CASE_GT:
1477 break;
1478 case EVT_OP_CASE_GE:
1480 break;
1483 break;
1485 status = evt_handle_break_case(script);
1486 break;
1487 case EVT_OP_CASE_OR_EQ:
1489 break;
1492 break;
1493 case EVT_OP_CASE_AND_EQ:
1495 break;
1496 case EVT_OP_CASE_FLAG:
1497 status = evt_handle_case_AND(script);
1498 break;
1499 case EVT_OP_CASE_RANGE:
1500 status = evt_handle_case_range(script);
1501 break;
1502 case EVT_OP_END_SWITCH:
1503 status = evt_handle_end_switch(script);
1504 break;
1505 case EVT_OP_SET:
1506 status = evt_handle_set_var(script);
1507 break;
1508 case EVT_OP_SET_CONST:
1509 status = evt_handle_set_const(script);
1510 break;
1511 case EVT_OP_SETF:
1512 status = evt_handle_set_float(script);
1513 break;
1514 case EVT_OP_ADD:
1515 status = evt_handle_add(script);
1516 break;
1517 case EVT_OP_SUB:
1518 status = evt_handle_subtract(script);
1519 break;
1520 case EVT_OP_MUL:
1521 status = evt_handle_multiply(script);
1522 break;
1523 case EVT_OP_DIV:
1524 status = evt_handle_divide(script);
1525 break;
1526 case EVT_OP_MOD:
1527 status = evt_handle_mod(script);
1528 break;
1529 case EVT_OP_ADDF:
1530 status = evt_handle_addF(script);
1531 break;
1532 case EVT_OP_SUBF:
1533 status = evt_handle_subtractF(script);
1534 break;
1535 case EVT_OP_MULF:
1536 status = evt_handle_multiplyF(script);
1537 break;
1538 case EVT_OP_DIVF:
1539 status = evt_handle_divideF(script);
1540 break;
1541 case EVT_OP_USE_BUF:
1543 break;
1544 case EVT_OP_BUF_READ1:
1545 status = evt_handle_get_1_word(script);
1546 break;
1547 case EVT_OP_BUF_READ2:
1548 status = evt_handle_get_2_word(script);
1549 break;
1550 case EVT_OP_BUF_READ3:
1551 status = evt_handle_get_3_word(script);
1552 break;
1553 case EVT_OP_BUF_READ4:
1554 status = evt_handle_get_4_word(script);
1555 break;
1556 case EVT_OP_BUF_PEEK:
1558 break;
1559 case EVT_OP_USE_FBUF:
1561 break;
1562 case EVT_OP_FBUF_READ1:
1564 break;
1565 case EVT_OP_FBUF_READ2:
1567 break;
1568 case EVT_OP_FBUF_READ3:
1570 break;
1571 case EVT_OP_FBUF_READ4:
1573 break;
1574 case EVT_OP_FBUF_PEEK:
1576 break;
1577 case EVT_OP_USE_ARRAY:
1578 status = evt_handle_set_array(script);
1579 break;
1580 case EVT_OP_USE_FLAGS:
1582 break;
1585 break;
1586 case EVT_OP_KILL_THREAD:
1587 status = evt_handle_kill(script);
1588 break;
1589 case EVT_OP_BITWISE_AND:
1590 status = evt_handle_AND(script);
1591 break;
1593 status = evt_handle_AND_const(script);
1594 break;
1595 case EVT_OP_BITWISE_OR:
1596 status = evt_handle_OR(script);
1597 break;
1599 status = evt_handle_OR_const(script);
1600 break;
1601 case EVT_OP_CALL:
1602 status = evt_handle_call(script);
1603 break;
1604 case EVT_OP_EXEC:
1605 status = evt_handle_exec1(script);
1606 break;
1609 break;
1610 case EVT_OP_EXEC_WAIT:
1611 status = evt_handle_exec_wait(script);
1612 break;
1614 status = evt_handle_bind(script);
1615 break;
1616 case EVT_OP_UNBIND:
1617 status = evt_handle_unbind(script);
1618 break;
1621 break;
1624 break;
1625 case EVT_OP_SET_GROUP:
1626 status = evt_handle_set_group(script);
1627 break;
1628 case EVT_OP_JUMP:
1629 status = evt_handle_jump(script);
1630 break;
1632 status = evt_handle_bind_lock(script);
1633 break;
1636 break;
1638 status = evt_handle_resume_all(script);
1639 break;
1642 break;
1645 break;
1647 status = evt_handle_suspend(script);
1648 break;
1650 status = evt_handle_resume(script);
1651 break;
1654 break;
1655 case EVT_OP_THREAD:
1656 status = evt_handle_thread(script);
1657 break;
1658 case EVT_OP_END_THREAD:
1659 status = evt_handle_end_thread(script);
1660 break;
1663 break;
1666 break;
1667 case EVT_OP_DEBUG_LOG:
1668 status = evt_handle_debug_log(script);
1669 break;
1672 break;
1673 case EVT_OP_92:
1674 status = func_802C739C(script);
1675 break;
1676 case EVT_OP_93:
1677 status = func_802C73B0(script);
1678 break;
1679 case EVT_OP_94:
1680 status = func_802C73B8(script);
1681 break;
1684 break;
1685 case EVT_OP_END:
1686 break;
1687 default:
1688 PANIC();
1689 }
1690
1691 if (status == ApiStatus_REPEAT) {
1692 // execute command after a fetch operation
1693 continue;
1694 }
1695
1696 if (status == ApiStatus_FINISH) {
1697 return EVT_CMD_RESULT_YIELD;
1698 }
1699
1700 if (status < 0) {
1701 return EVT_CMD_RESULT_ERROR;
1702 }
1703
1704 if (status == ApiStatus_BLOCK) {
1706 }
1707
1708 #if DX_DEBUG_MENU
1709 // pause again now that the current command is done blocking
1710 if (script->debugStep == DEBUG_EVT_STEP_OVER) {
1711 script->debugStep = DEBUG_EVT_STEP_NONE;
1712 }
1713 #endif
1714
1715 if (status == ApiStatus_DONE1) {
1716 script->curOpcode = EVT_OP_INTERNAL_FETCH;
1718 }
1719
1720 if (status == ApiStatus_DONE2) {
1721 script->curOpcode = EVT_OP_INTERNAL_FETCH;
1723 continue;
1724 }
1726 }
1727 }
1728}
BSS s32 PopupMenu_SelectedIndex
void backtrace_address_to_string(u32 address, char *dest)
Converts a function address to a string representation using its name, offset, and file.
Definition backtrace.c:389
@ DEBUG_SCRIPTS_BLOCK_FUNC_DONE
Definition enums.h:3876
ApiStatus func_802C739C(Evt *script)
Definition evt.c:1333
ApiStatus evt_handle_OR(Evt *script)
Definition evt.c:869
ApiStatus func_802C73B0(Evt *script)
Definition evt.c:1338
ApiStatus evt_handle_set_int_buffer_ptr(Evt *script)
Definition evt.c:679
ApiStatus evt_handle_break_loop(Evt *script)
Definition evt.c:91
ApiStatus evt_handle_AND(Evt *script)
Definition evt.c:849
ApiStatus evt_handle_set_float(Evt *script)
Definition evt.c:563
ApiStatus evt_handle_switch_const(Evt *script)
Definition evt.c:246
ApiStatus evt_handle_call(Evt *script)
Definition evt.c:889
ApiStatus evt_handle_case_greater(Evt *script)
Definition evt.c:351
ApiStatus evt_handle_end_thread(Evt *script)
Definition evt.c:1193
ApiStatus evt_handle_case_equal_OR(Evt *script)
Definition evt.c:463
ApiStatus evt_handle_get_3_word(Evt *script)
Definition evt.c:716
ApiStatus evt_handle_divideF(Evt *script)
Definition evt.c:667
ApiStatus evt_handle_multiply(Evt *script)
Definition evt.c:595
ApiStatus evt_handle_switch(Evt *script)
Definition evt.c:233
ApiStatus evt_handle_AND_const(Evt *script)
Definition evt.c:859
ApiStatus evt_handle_break_case(Evt *script)
Definition evt.c:533
ApiStatus evt_handle_debug_breakpoint(Evt *script)
Definition evt.c:1353
ApiStatus evt_handle_jump(Evt *script)
Definition evt.c:976
ApiStatus evt_handle_suspend_all(Evt *script)
Definition evt.c:1073
ApiStatus evt_handle_case_less(Evt *script)
Definition evt.c:305
ApiStatus evt_handle_set_timescale(Evt *script)
Definition evt.c:1063
ApiStatus evt_handle_set_const(Evt *script)
Definition evt.c:558
ApiStatus evt_handle_subtract(Evt *script)
Definition evt.c:583
ApiStatus evt_handle_if_greater(Evt *script)
Definition evt.c:166
ApiStatus evt_handle_exec_wait(Evt *script)
Definition evt.c:967
ApiStatus evt_handle_set_array(Evt *script)
Definition evt.c:829
ApiStatus evt_handle_if_less(Evt *script)
Definition evt.c:154
ApiStatus evt_handle_case_default(Evt *script)
Definition evt.c:423
ApiStatus evt_handle_exec1(Evt *script)
Definition evt.c:914
ApiStatus evt_handle_add(Evt *script)
Definition evt.c:571
ApiStatus evt_handle_loop(Evt *script)
Definition evt.c:48
ApiStatus evt_handle_return(Evt *script)
Definition evt.c:34
ApiStatus evt_handle_mod(Evt *script)
Definition evt.c:619
ApiStatus evt_handle_thread(Evt *script)
Definition evt.c:1160
ApiStatus evt_handle_case_equal_AND(Evt *script)
Definition evt.c:488
ApiStatus evt_handle_case_range(Evt *script)
Definition evt.c:397
ApiStatus evt_handle_goto(Evt *script)
Definition evt.c:43
ApiStatus evt_handle_OR_const(Evt *script)
Definition evt.c:879
ApiStatus evt_handle_bind(Evt *script)
Definition evt.c:1011
ApiStatus evt_handle_print_debug_var(Evt *script)
Definition evt.c:1234
ApiStatus evt_handle_set_var(Evt *script)
Definition evt.c:550
ApiStatus evt_handle_get_4_word(Evt *script)
Definition evt.c:732
ApiStatus evt_handle_unbind(Evt *script)
Definition evt.c:1048
ApiStatus evt_handle_bind_lock(Evt *script)
Definition evt.c:1130
ApiStatus evt_handle_if_not_equal(Evt *script)
Definition evt.c:142
ApiStatus evt_handle_get_1_float(Evt *script)
Definition evt.c:761
ApiStatus evt_handle_if_less_equal(Evt *script)
Definition evt.c:178
ApiStatus evt_handle_end_loop(Evt *script)
Definition evt.c:61
ApiStatus evt_handle_debug_log(Evt *script)
Definition evt.c:1227
ApiStatus func_802C73B8(Evt *script)
Definition evt.c:1342
ApiStatus evt_handle_get_Nth_word(Evt *script)
Definition evt.c:751
ApiStatus evt_handle_exec1_get_id(Evt *script)
Definition evt.c:939
ApiStatus evt_handle_case_AND(Evt *script)
Definition evt.c:438
ApiStatus evt_handle_subtractF(Evt *script)
Definition evt.c:643
ApiStatus evt_handle_set_flag_array(Evt *script)
Definition evt.c:834
ApiStatus evt_handle_set_float_buffer_ptr(Evt *script)
Definition evt.c:686
ApiStatus evt_handle_end_child_thread(Evt *script)
Definition evt.c:1222
ApiStatus evt_handle_end_case_group(Evt *script)
Definition evt.c:516
ApiStatus evt_handle_get_Nth_float(Evt *script)
Definition evt.c:819
ApiStatus evt_handle_addF(Evt *script)
Definition evt.c:631
ApiStatus evt_handle_get_1_word(Evt *script)
Definition evt.c:693
ApiStatus evt_handle_set_priority(Evt *script)
Definition evt.c:1058
ApiStatus evt_handle_suspend(Evt *script)
Definition evt.c:1093
ApiStatus evt_handle_get_2_float(Evt *script)
Definition evt.c:771
ApiStatus evt_handle_case_less_equal(Evt *script)
Definition evt.c:328
ApiStatus evt_handle_get_2_word(Evt *script)
Definition evt.c:703
ApiStatus evt_handle_end_switch(Evt *script)
Definition evt.c:539
ApiStatus evt_handle_if_greater_equal(Evt *script)
Definition evt.c:190
ApiStatus evt_handle_resume_all(Evt *script)
Definition evt.c:1078
ApiStatus evt_handle_if_equal(Evt *script)
Definition evt.c:130
ApiStatus evt_handle_child_thread(Evt *script)
Definition evt.c:1198
ApiStatus evt_handle_case_equal(Evt *script)
Definition evt.c:259
ApiStatus evt_handle_get_3_float(Evt *script)
Definition evt.c:784
ApiStatus evt_handle_does_script_exist(Evt *script)
Definition evt.c:1103
ApiStatus evt_handle_else(Evt *script)
Definition evt.c:224
ApiStatus evt_handle_set_group(Evt *script)
Definition evt.c:1068
ApiStatus evt_handle_multiplyF(Evt *script)
Definition evt.c:655
ApiStatus evt_handle_resume(Evt *script)
Definition evt.c:1098
ApiStatus evt_handle_if_not_AND(Evt *script)
Definition evt.c:213
ApiStatus evt_handle_end_if(Evt *script)
Definition evt.c:229
ApiStatus evt_handle_kill(Evt *script)
Definition evt.c:1053
ApiStatus evt_handle_resume_others(Evt *script)
Definition evt.c:1088
ApiStatus evt_handle_if_AND(Evt *script)
Definition evt.c:202
ApiStatus evt_handle_wait_seconds(Evt *script)
Definition evt.c:114
ApiStatus evt_handle_wait(Evt *script)
Definition evt.c:98
ApiStatus evt_handle_case_not_equal(Evt *script)
Definition evt.c:282
ApiStatus evt_handle_get_4_float(Evt *script)
Definition evt.c:800
ApiStatus evt_handle_label(Evt *script)
Definition evt.c:39
ApiStatus evt_handle_case_greater_equal(Evt *script)
Definition evt.c:374
ApiStatus evt_handle_suspend_others(Evt *script)
Definition evt.c:1083
ApiStatus evt_handle_allocate_array(Evt *script)
Definition evt.c:839
ApiStatus evt_handle_divide(Evt *script)
Definition evt.c:607
#define ApiStatus_DONE2
Definition evt.h:119
@ EVT_OP_LOOP
Args: number of repeats (0 = infinite)
Definition evt.h:15
@ EVT_OP_EXEC_GET_TID
Args: EvtScript*, container.
Definition evt.h:79
@ EVT_OP_CASE_DEFAULT
Definition evt.h:38
@ EVT_OP_END_IF
Definition evt.h:29
@ EVT_OP_INTERNAL_FETCH
Definition evt.h:10
@ EVT_OP_MOD
Args: container, expression to divide by.
Definition evt.h:53
@ EVT_OP_DEBUG_BREAKPOINT
Definition evt.h:105
@ EVT_OP_FBUF_READ2
Args: container.
Definition evt.h:66
@ EVT_OP_94
Definition evt.h:104
@ EVT_OP_93
Definition evt.h:103
@ EVT_OP_UNBIND
Unbinds any triggers bound to this script.
Definition evt.h:82
@ EVT_OP_ADDF
Args: container, expression to increment by.
Definition evt.h:54
@ EVT_OP_FBUF_READ3
Args: container, container.
Definition evt.h:67
@ EVT_OP_SET_PRIORITY
Args: priority.
Definition evt.h:85
@ EVT_OP_DIVF
Args: container, expression to divide by.
Definition evt.h:57
@ EVT_OP_CASE_FLAG
Args: expression to test for.
Definition evt.h:41
@ EVT_OP_ELSE
Definition evt.h:28
@ EVT_OP_DEBUG_LOG
Definition evt.h:100
@ EVT_OP_MULF
Args: container, expression to multiply by.
Definition evt.h:56
@ EVT_OP_SUSPEND_OTHERS
Args: group.
Definition evt.h:91
@ EVT_OP_SUSPEND_THREAD
Args: ScriptID.
Definition evt.h:93
@ EVT_OP_GOTO
Args: index.
Definition evt.h:14
@ EVT_OP_EXEC
Args: EvtScript*.
Definition evt.h:78
@ EVT_OP_USE_ARRAY
Args: *s32.
Definition evt.h:70
@ EVT_OP_MUL
Args: container, expression to multiply by.
Definition evt.h:51
@ EVT_OP_END_CASE_GROUP
Ends the case block of EVT_OP_CASE_OR_EQ condition(s).
Definition evt.h:42
@ EVT_OP_92
Definition evt.h:102
@ EVT_OP_IF_LE
Args: a, b.
Definition evt.h:24
@ EVT_OP_IF_FLAG
Args: a, b.
Definition evt.h:26
@ EVT_OP_WAIT_SECS
Definition evt.h:19
@ EVT_OP_END
Definition evt.h:11
@ EVT_OP_RETURN
Definition evt.h:12
@ EVT_OP_SET
Args: container, expression.
Definition evt.h:46
@ EVT_OP_IF_NE
Args: a, b.
Definition evt.h:21
@ EVT_OP_CASE_EQ
Args: expression to test for.
Definition evt.h:32
@ EVT_OP_BITWISE_OR_CONST
Args: container, value to bitwise OR with.
Definition evt.h:76
@ EVT_OP_BUF_READ1
Definition evt.h:59
@ EVT_OP_USE_FBUF
Identical to USE_BUFFER. Args: f32*.
Definition evt.h:64
@ EVT_OP_SETF
Args: container, expression.
Definition evt.h:48
@ EVT_OP_CHILD_THREAD
Parallel threads are killed as soon as the parent script returns.
Definition evt.h:98
@ EVT_OP_CASE_GE
Args: expression to test for.
Definition evt.h:37
@ EVT_OP_IF_GT
Args: a, b.
Definition evt.h:23
@ EVT_OP_CASE_OR_EQ
Args: expression to test for.
Definition evt.h:39
@ EVT_OP_END_CHILD_THREAD
Definition evt.h:99
@ EVT_OP_END_SWITCH
Definition evt.h:45
@ EVT_OP_DEBUG_PRINT_VAR
Args: expression.
Definition evt.h:101
@ EVT_OP_BUF_READ3
Args: container, container.
Definition evt.h:61
@ EVT_OP_DIV
Integer division. Args: container, expression to divide by.
Definition evt.h:52
@ EVT_OP_EXEC_WAIT
Spawns a script and waits for it to return before continuing. Args: EvtScript*.
Definition evt.h:80
@ EVT_OP_END_LOOP
Definition evt.h:16
@ EVT_OP_BUF_READ4
Args: container, container, container.
Definition evt.h:62
@ EVT_OP_ADD
Args: container, expression to increment by.
Definition evt.h:49
@ EVT_OP_FBUF_READ4
Args: container, container, container.
Definition evt.h:68
@ EVT_OP_BREAK_SWITCH
Definition evt.h:44
@ EVT_OP_SET_TIMESCALE
Args: timescale.
Definition evt.h:86
@ EVT_OP_USE_BUF
Args: s32*.
Definition evt.h:58
@ EVT_OP_BREAK_LOOP
Definition evt.h:17
@ EVT_OP_USE_FLAGS
Args: *s32.
Definition evt.h:71
@ EVT_OP_CASE_RANGE
Args: from, to.
Definition evt.h:43
@ EVT_OP_BITWISE_AND_CONST
Args: container, value to bitwise AND with.
Definition evt.h:74
@ EVT_OP_FBUF_READ1
Definition evt.h:65
@ EVT_OP_SUBF
Args: container, expression to decrement by.
Definition evt.h:55
@ EVT_OP_WAIT_FRAMES
Definition evt.h:18
@ EVT_OP_JUMP
Args: EvtScript*.
Definition evt.h:84
@ EVT_OP_THREAD
Definition evt.h:96
@ EVT_OP_CASE_AND_EQ
Args: expression to test for.
Definition evt.h:40
@ EVT_OP_SWITCH
Args: expression to test against.
Definition evt.h:30
@ EVT_OP_CASE_LE
Args: expression to test for.
Definition evt.h:36
@ EVT_OP_SUB
Args: container, expression to decrement by.
Definition evt.h:50
@ EVT_OP_IF_GE
Args: a, b.
Definition evt.h:25
@ EVT_OP_CALL
Args: *function, ...
Definition evt.h:77
@ EVT_OP_IF_NOT_FLAG
Args: a, b.
Definition evt.h:27
@ EVT_OP_IS_THREAD_RUNNING
Args: ScriptID, container.
Definition evt.h:95
@ EVT_OP_IF_LT
Args: a, b.
Definition evt.h:22
@ EVT_OP_SWITCH_CONST
Args: value to test against.
Definition evt.h:31
@ EVT_OP_CASE_NE
Args: expression to test for.
Definition evt.h:33
@ EVT_OP_SET_CONST
Args: container, value.
Definition evt.h:47
@ EVT_OP_KILL_THREAD
Args: ScriptID.
Definition evt.h:83
@ EVT_OP_LABEL
Args: index.
Definition evt.h:13
@ EVT_OP_RESUME_OTHERS
Args: group.
Definition evt.h:92
@ EVT_OP_RESUME_THREAD
Args: ScriptID.
Definition evt.h:94
@ EVT_OP_BUF_READ2
Args: container.
Definition evt.h:60
@ EVT_OP_END_THREAD
Definition evt.h:97
@ EVT_OP_RESUME_GROUP
Args: group.
Definition evt.h:90
@ EVT_OP_BIND_TRIGGER
Args: EvtScript*, trigger flags, s32 target, 1, Trigger*.
Definition evt.h:81
@ EVT_OP_BITWISE_AND
Args: container, expression to bitwise AND with.
Definition evt.h:73
@ EVT_OP_CASE_GT
Args: expression to test for.
Definition evt.h:35
@ EVT_OP_BITWISE_OR
Args: container, expression to bitwise OR with.
Definition evt.h:75
@ EVT_OP_SET_GROUP
Args: group.
Definition evt.h:87
@ EVT_OP_BIND_PADLOCK
Args: EvtScript*, trigger flags, s32 target, ItemList*, 0, 1.
Definition evt.h:88
@ EVT_OP_SUSPEND_GROUP
Args: group.
Definition evt.h:89
@ EVT_OP_CASE_LT
Args: expression to test for.
Definition evt.h:34
@ EVT_OP_MALLOC_ARRAY
Allocates a new array. Args: length, s32*.
Definition evt.h:72
@ EVT_OP_BUF_PEEK
Args: container, container, container, container.
Definition evt.h:63
@ EVT_OP_IF_EQ
Args: a, b.
Definition evt.h:20
@ EVT_OP_FBUF_PEEK
Args: container, container, container, container.
Definition evt.h:69
#define ApiStatus_REPEAT
Definition evt.h:120
#define ApiStatus_FINISH
Definition evt.h:121
#define ApiStatus_DONE1
Definition evt.h:118
#define ApiStatus_BLOCK
Definition evt.h:117
@ EVT_CMD_RESULT_YIELD
Definition evt.h:124
@ EVT_CMD_RESULT_CONTINUE
Definition evt.h:125
@ EVT_CMD_RESULT_ERROR
Definition evt.h:126
#define PANIC()
Definition macros.h:54
#define PANIC_MSG(msg, args...)
Definition macros.h:55
GameStatus * gGameStatusPtr
Definition main_loop.c:31

Referenced by update_scripts().

◆ sort_scripts()

void sort_scripts ( void )

Definition at line 73 of file script_list.c.

73 {
76 s32 tempID;
79 s32 i;
80 s32 j;
81 s32 x;
85
86 for (i = 0; i < MAX_SCRIPTS; i++) {
87 curScript = (*gCurrentScriptListPtr)[i];
88 if (curScript != nullptr) {
89 if (curScript->stateFlags != 0) {
93 }
94 }
95 }
96
98 for (i = 0; i < (x = numValidScripts - 1); i++) {
102 for (j = i + 1; j < numValidScripts; j++) {
105 x = i;
106 if ((**currentScriptListPtr)[temp_a1]->priority > (**currentScriptListPtr)[temp_a0]->priority) {
109 tempID = scriptIdList[i];
112 }
113 }
114 }
115}
Evt * ScriptList[128]
#define MAX_SCRIPTS
Definition macros.h:89
BSS s32 gScriptListCount
Definition script_list.c:19
BSS s32 gScriptIdList[MAX_SCRIPTS]
Definition script_list.c:18
BSS s32 gScriptIndexList[MAX_SCRIPTS]
Definition script_list.c:17
BSS ScriptList * gCurrentScriptListPtr
Definition script_list.c:16

Referenced by update_scripts().

◆ find_script_labels()

void find_script_labels ( Evt * script)

Definition at line 117 of file script_list.c.

117 {
118 Bytecode* curLine;
119 s32 type;
120 s32 label;
121 s32 numArgs;
122 s32 i;
123 s32 j;
124
125 for (i = 0; i < ARRAY_COUNT(script->labelIndices); i++) {
126 script->labelIndices[i] = -1;
127 script->labelPositions[i] = 0;
128 }
129
130 j = 0;
131 curLine = script->ptrNextLine;
132 while (j < ARRAY_COUNT(script->labelIndices)) {
133 type = *curLine++;
134 numArgs = *curLine++;
135 label = *curLine;
136 curLine += numArgs;
137
138 if (type == 1) {
139 return;
140 }
141
142 if (type == 3) {
143 script->labelIndices[j] = label;
144 script->labelPositions[j] = curLine;
145 j++;
146 }
147 }
148 PANIC();
149}
s32 Bytecode
Definition evt.h:7
#define ARRAY_COUNT(arr)
Definition macros.h:39

Referenced by func_802C3C10(), restart_script(), start_child_script(), start_child_thread(), start_script(), and start_script_in_group().

◆ clear_script_list()

void clear_script_list ( void )

Definition at line 151 of file script_list.c.

151 {
152 s32 i;
153
158 } else {
162 }
163
164 for (i = 0; i < MAX_SCRIPTS; i++) {
165 (*gCurrentScriptListPtr)[i] = nullptr;
166 }
167
168 gNumScripts = 0;
170 IsUpdatingScripts = false;
171
172 for (i = 0; i < MAX_MAPVARS; i++) {
173 gMapVars[i] = 0;
174 }
175
176 for (i = 0; i < MAX_MAPFLAGS; i++) {
177 gMapFlags[i] = 0;
178 }
179
180 #if DX_DEBUG_MENU
182 #endif
183
186}
@ CONTEXT_WORLD
Definition enums.h:3562
void clear_virtual_entity_list(void)
void reset_model_animators(void)
Definition model_api.c:258
#define MAX_MAPFLAGS
Definition macros.h:81
#define MAX_MAPVARS
Definition macros.h:80
BSS u32 * gMapFlags
Definition script_list.c:11
BSS u32 gWorldMapFlags[MAX_MAPFLAGS]
Definition script_list.c:60
BSS u32 gBattleMapFlags[MAX_MAPFLAGS]
Definition script_list.c:61
BSS u32 gBattleMapVars[MAX_MAPVARS]
Definition script_list.c:64
BSS u32 gWorldMapVars[MAX_MAPVARS]
Definition script_list.c:63
BSS ScriptList gBattleScriptList
Definition script_list.c:15
BSS ScriptList gWorldScriptList
Definition script_list.c:14
BSS s32 * gMapVars
Definition script_list.c:12
s32 IsUpdatingScripts
Definition script_list.c:7
BSS s32 gNumScripts
Definition script_list.c:13

Referenced by load_demo_battle(), load_engine_data(), load_map_by_IDs(), state_init_demo(), state_init_logos(), state_init_title_screen(), state_step_battle(), state_step_demo(), state_step_intro(), state_step_pause(), and state_step_startup().

◆ init_script_list()

void init_script_list ( void )

Definition at line 188 of file script_list.c.

188 {
193 } else {
197 }
198
199 gNumScripts = 0;
200 IsUpdatingScripts = false;
201
204}
void init_model_animators(void)
Definition model_api.c:278
void init_virtual_entity_list(void)

Referenced by state_step_end_battle(), and state_step_unpause().

◆ suspend_frozen_scripts()

void suspend_frozen_scripts ( Evt * script)

Definition at line 207 of file script_list.c.

207 {
208 switch (gTimeFreezeMode) {
209 default:
210 case TIME_FREEZE_NONE:
211 case TIME_FREEZE_EXIT:
212 return;
215 return;
216 case TIME_FREEZE_FULL:
219 return;
220 }
221}
@ TIME_FREEZE_FULL
Definition enums.h:3500
@ TIME_FREEZE_POPUP_MENU
Definition enums.h:3501
@ TIME_FREEZE_PARTIAL
Definition enums.h:3499
@ TIME_FREEZE_NONE
Definition enums.h:3498
@ TIME_FREEZE_EXIT
Definition enums.h:3502
@ EVT_GROUP_FLAG_MENUS
Definition evt.h:136
@ EVT_GROUP_FLAG_INTERACT
Definition evt.h:135
void suspend_all_group(s32 groupFlags)
s32 gTimeFreezeMode
Definition main_loop.c:11

Referenced by func_802C3C10(), restart_script(), start_child_script(), start_child_thread(), start_script(), and start_script_in_group().

◆ start_script()

Evt * start_script ( EvtScript * source,
s32 priority,
s32 flags )

Definition at line 223 of file script_list.c.

223 {
224 Evt* newScript;
227 s32 i;
228
229 for (i = 0; i < MAX_SCRIPTS; i++) {
230 if ((*gCurrentScriptListPtr)[i] == nullptr) {
231 break;
232 }
233 }
234
235 ASSERT(i < MAX_SCRIPTS);
236 curScriptIndex = i;
237
238 (*gCurrentScriptListPtr)[curScriptIndex] = newScript = heap_malloc(sizeof(*newScript));
239 gNumScripts++;
240 ASSERT(newScript != nullptr);
241
242 newScript->stateFlags = flags | EVT_FLAG_ACTIVE;
243 newScript->curOpcode = EVT_OP_INTERNAL_FETCH;
244 newScript->priority = priority;
246 newScript->ptrNextLine = (Bytecode*)source;
247 newScript->ptrFirstLine = (Bytecode*)source;
248 newScript->ptrCurLine = (Bytecode*)source;
249 newScript->userData = nullptr;
250 newScript->blockingParent = nullptr;
251 newScript->childScript = nullptr;
252 newScript->parentScript = nullptr;
253 newScript->owner1.actorID = -1;
254 newScript->owner2.npcID = -1;
255 newScript->loopDepth = -1;
256 newScript->switchDepth = -1;
257 newScript->groupFlags = EVT_GROUP_NOT_BATTLE;
258 newScript->ptrSavedPos = nullptr;
259 newScript->frameCounter = 0.0f;
260 newScript->unk_158 = 0;
261 newScript->timeScale = GlobalTimeRate;
262 newScript->debugPaused = false;
263
264 scriptListCount = 0;
265
266 for (i = 0; i < ARRAY_COUNT(newScript->varTable); i++) {
267 newScript->varTable[i] = 0;
268 }
269
270 for (i = 0; i < ARRAY_COUNT(newScript->varFlags); i++) {
271 newScript->varFlags[i] = 0;
272 }
273
275
280 }
281
283
284 if (UniqueScriptCounter == 0) {
286 }
287
288 return newScript;
289}
s8 flags
Definition demo_api.c:15
#define ASSERT(condition)
@ EVT_GROUP_NOT_BATTLE
Definition evt.h:148
@ EVT_FLAG_ACTIVE
Definition evt.h:159
@ EVT_FLAG_RUN_IMMEDIATELY
don't wait for next update_scripts call
Definition evt.h:162
void * heap_malloc(s32 size)
Definition heap.c:34
s32 UniqueScriptCounter
Definition script_list.c:6
void find_script_labels(Evt *script)
f32 GlobalTimeRate
Definition script_list.c:8
void suspend_frozen_scripts(Evt *script)

Referenced by _use_partner_ability(), bind_enemy_ai(), bind_enemy_aux(), bind_enemy_interact(), btl_cam_use_preset_impl(), btl_state_update_begin_partner_turn(), btl_state_update_begin_player_turn(), btl_state_update_begin_turn(), btl_state_update_celebration(), btl_state_update_change_partner(), btl_state_update_defeat(), btl_state_update_defend(), btl_state_update_end_battle(), btl_state_update_end_demo_battle(), btl_state_update_end_training_battle(), btl_state_update_end_turn(), btl_state_update_enemy_move(), btl_state_update_enemy_striking_first(), btl_state_update_first_strike(), btl_state_update_next_enemy(), btl_state_update_normal_start(), btl_state_update_partner_move(), btl_state_update_partner_striking_first(), btl_state_update_player_move(), btl_state_update_run_away(), btl_state_update_transfer_turn(), btl_state_update_victory(), btl_substate_try_hpfp_recovery(), calc_enemy_damage_target(), calc_item_damage_enemy(), calc_partner_damage_enemy(), calc_player_damage_enemy(), create_actor(), create_encounters(), dispatch_event_actor(), dispatch_event_partner(), dispatch_event_partner_continue_turn(), dispatch_event_player(), dispatch_event_player_continue_turn(), entity_Chest_adjust_camera(), entity_Chest_reset_camera(), evt_trigger_on_activate_exec_script(), evt_trigger_on_activate_lock(), FireBarAI_Callback(), func_80048E34(), load_partner_actor(), partner_handle_after_battle(), shop_owner_begin_speech(), shop_owner_buy_dialog(), shop_owner_continue_speech(), shop_owner_continue_speech_with_quantity(), shop_owner_end_speech(), shop_owner_reset_speech(), start_battle(), start_rumble_type(), update_command_loss(), update_encounters_neutral(), update_encounters_post_battle(), update_entities(), and use_consumable().

◆ start_script_in_group()

Evt * start_script_in_group ( EvtScript * source,
u8 priority,
u8 flags,
u8 groupFlags )

Definition at line 291 of file script_list.c.

291 {
292 Evt* newScript;
295 s32 i;
296
297 for (i = 0; i < MAX_SCRIPTS; i++) {
298 if ((*gCurrentScriptListPtr)[i] == nullptr) {
299 break;
300 }
301 }
302
303 ASSERT(i < MAX_SCRIPTS);
304 curScriptIndex = i;
305
306 (*gCurrentScriptListPtr)[curScriptIndex] = newScript = heap_malloc(sizeof(*newScript));
307 gNumScripts++;
308 ASSERT(newScript != nullptr);
309
310 newScript->stateFlags = flags | EVT_FLAG_ACTIVE;
311 newScript->curOpcode = EVT_OP_INTERNAL_FETCH;
312 newScript->priority = priority;
314 newScript->ptrNextLine = (Bytecode*)source;
315 newScript->ptrFirstLine = (Bytecode*)source;
316 newScript->ptrCurLine = (Bytecode*)source;
317 newScript->userData = nullptr;
318 newScript->blockingParent = nullptr;
319 newScript->childScript = nullptr;
320 newScript->parentScript = nullptr;
321 newScript->owner1.actorID = -1;
322 newScript->owner2.npcID = -1;
323 newScript->loopDepth = -1;
324 newScript->switchDepth = -1;
325 newScript->groupFlags = groupFlags;
326 newScript->ptrSavedPos = nullptr;
327 newScript->frameCounter = 0.0f;
328 newScript->unk_158 = 0;
329 newScript->timeScale = GlobalTimeRate;
330 newScript->debugPaused = false;
331
332 scriptListCount = 0;
333
334 for (i = 0; i < ARRAY_COUNT(newScript->varTable); i++) {
335 newScript->varTable[i] = 0;
336 }
337 for (i = 0; i < ARRAY_COUNT(newScript->varFlags); i++) {
338 newScript->varFlags[i] = 0;
339 }
340
342
347 }
348
350
351 if (UniqueScriptCounter == 0) {
353 }
354
355 return newScript;
356}

Referenced by evt_handle_exec1(), evt_handle_exec1_get_id(), evt_handle_thread(), exec_ShakeCam1(), exec_ShakeCamX(), load_map_by_IDs(), and update_encounters_post_battle().

◆ start_child_script()

Evt * start_child_script ( Evt * parentScript,
EvtScript * source,
s32 flags )

Definition at line 358 of file script_list.c.

358 {
361 Evt* child;
362 s32 i;
363
364 for (i = 0; i < MAX_SCRIPTS; i++) {
365 if ((*gCurrentScriptListPtr)[i] == nullptr) {
366 break;
367 }
368 }
369
370 ASSERT(i < MAX_SCRIPTS);
371 curScriptIndex = i;
372
373 (*gCurrentScriptListPtr)[curScriptIndex] = child = heap_malloc(sizeof(*child));
374 gNumScripts++;
375 ASSERT(child != nullptr);
376
377 parentScript->childScript = child;
378 parentScript->stateFlags |= EVT_FLAG_BLOCKED_BY_CHILD;
380 child->ptrCurLine = child->ptrFirstLine = child->ptrNextLine = (Bytecode*)source;
381
383 child->userData = nullptr;
384 child->blockingParent = parentScript;
385 child->childScript = nullptr;
386 child->parentScript = nullptr;
387 child->priority = parentScript->priority + 1;
388 child->id = UniqueScriptCounter++;
389 child->owner1 = parentScript->owner1;
390 child->owner2 = parentScript->owner2;
391 child->loopDepth = -1;
392 child->switchDepth = -1;
393 child->groupFlags = parentScript->groupFlags;
394 child->ptrSavedPos = nullptr;
395 child->array = parentScript->array;
396 child->flagArray = parentScript->flagArray;
397 child->timeScale = GlobalTimeRate;
398 child->frameCounter = 0.0f;
399 child->unk_158 = 0;
400 child->debugPaused = false;
401
402 scriptListCount = 0;
403
404 for (i = 0; i < ARRAY_COUNT(child->varTable); i++) {
405 child->varTable[i] = parentScript->varTable[i];
406 }
407
408 for (i = 0; i < ARRAY_COUNT(child->varFlags); i++) {
409 child->varFlags[i] = parentScript->varFlags[i];
410 }
411
412 find_script_labels(child);
413 if (IsUpdatingScripts) {
417 }
418
420
421 if (UniqueScriptCounter == 0) {
423 }
424
425 return child;
426}
Bytecode * ptrNextLine
b8 debugPaused
u8 stateFlags
struct Evt * parentScript
u8 curOpcode
struct Evt * childScript
u8 groupFlags
struct Evt * blockingParent
s32 * flagArray
s8 switchDepth
union Evt::@11 owner2
Initially -1.
s8 loopDepth
s32 * array
s32 unk_158
Bytecode * ptrSavedPos
s32 varFlags[3]
Bytecode * ptrCurLine
void * userData
f32 frameCounter
Bytecode * ptrFirstLine
f32 timeScale
union Evt::@10 owner1
Initially -1.
u8 priority
@ EVT_FLAG_BLOCKED_BY_CHILD
Definition evt.h:161

Referenced by evt_handle_exec_wait().

◆ start_child_thread()

Evt * start_child_thread ( Evt * parentScript,
Bytecode * nextLine,
s32 newState )

Definition at line 428 of file script_list.c.

428 {
429 Evt* child;
431 s32 i;
433
434 for (i = 0; i < MAX_SCRIPTS; i++) {
435 if ((*gCurrentScriptListPtr)[i] == nullptr) {
436 break;
437 }
438 }
439
440 ASSERT(i < MAX_SCRIPTS);
441 curScriptIndex = i;
442
443 (*gCurrentScriptListPtr)[curScriptIndex] = child = heap_malloc(sizeof(*child));
444 gNumScripts++;
445 ASSERT(child != nullptr);
446
448 child->ptrNextLine = nextLine;
449 child->ptrFirstLine = nextLine;
450 child->ptrCurLine = nextLine;
452 child->userData = nullptr;
453 child->blockingParent = nullptr;
454 child->parentScript = parentScript;
455 child->childScript = nullptr;
456 child->priority = parentScript->priority;
457 child->id = UniqueScriptCounter++;
458 child->owner1.actorID = parentScript->owner1.actorID;
459 child->owner2.npcID = parentScript->owner2.npcID;
460 child->loopDepth = -1;
461 child->switchDepth = -1;
462 child->groupFlags = parentScript->groupFlags;
463 child->ptrSavedPos = nullptr;
464 child->array = parentScript->array;
465 child->flagArray = parentScript->flagArray;
466 child->timeScale = GlobalTimeRate;
467 child->frameCounter = 0.0f;
468 child->unk_158 = 0;
469 child->debugPaused = false;
470
471 scriptListCount = 0;
472
473 for (i = 0; i < ARRAY_COUNT(child->varTable); i++) {
474 child->varTable[i] = parentScript->varTable[i];
475 }
476
477 for (i = 0; i < ARRAY_COUNT(child->varFlags); i++) {
478 child->varFlags[i] = parentScript->varFlags[i];
479 }
480
481 find_script_labels(child);
482 if (IsUpdatingScripts) {
486 }
487
488 if (UniqueScriptCounter == 0) {
490 }
491
493 return child;
494}

Referenced by evt_handle_child_thread().

◆ func_802C3C10()

Evt * func_802C3C10 ( Evt * script,
Bytecode * line,
s32 arg2 )

Definition at line 496 of file script_list.c.

496 {
497 Evt* curScript;
498 s32 i;
499
501 script->ptrFirstLine = line;
502 script->ptrCurLine = line;
503 script->curOpcode = EVT_OP_INTERNAL_FETCH;
504 script->frameCounter = 0;
505 script->stateFlags |= arg2;
506 script->timeScale = 1.0f;
507
508 #if DX_DEBUG_MENU
510 #endif
511
512 if (script->userData != nullptr) {
513 heap_free(script->userData);
514 script->userData = nullptr;
515 }
516
517 if (script->childScript != 0) {
518 kill_script(script->childScript);
519 }
520
521 for (i = 0; i < MAX_SCRIPTS; i++) {
522 curScript = (*gCurrentScriptListPtr)[i];
523 if ((curScript != 0) && (curScript->parentScript == script)) {
525 }
526 }
527 script->loopDepth = -1;
528 script->switchDepth = -1;
529 script->blockingParent = nullptr;
530 script->parentScript = nullptr;
531 script->childScript = nullptr;
532 script->frameCounter = 0.0f;
533 script->unk_158 = 0;
534 script->timeScale = GlobalTimeRate;
537
538 return script;
539}
s32 heap_free(void *ptr)
Definition heap.c:42
void kill_script(Evt *instanceToKill)

◆ restart_script()

Evt * restart_script ( Evt * script)

Definition at line 541 of file script_list.c.

541 {
542 Bytecode* ptrFirstLine = script->ptrFirstLine;
543
544 // frameCounter gets set to 0 twice which makes me think a macro is being used here
545 script->loopDepth = -1;
546 script->switchDepth = -1;
547 script->frameCounter = 0;
548 script->curOpcode = EVT_OP_INTERNAL_FETCH;
549
550 script->ptrNextLine = ptrFirstLine;
551 script->ptrCurLine = ptrFirstLine;
552 script->timeScale = 1.0f;
553 script->frameCounter = 0;
554 script->unk_158 = 0;
555
556 script->timeScale = GlobalTimeRate;
557
560
561 return script;
562}

Referenced by btl_cam_move(), and evt_handle_jump().

◆ update_scripts()

void update_scripts ( void )

Definition at line 564 of file script_list.c.

564 {
565 s32 i;
566
568 return;
569 }
570
571 IsUpdatingScripts = true;
572 sort_scripts();
573
574 for (i = 0; i < gScriptListCount; i++) {
575 Evt* script = (*gCurrentScriptListPtr)[gScriptIndexList[i]];
576
577 if (script != nullptr
578 && script->id == gScriptIdList[i]
579 && script->stateFlags != 0
581 ) {
582 b32 stop = false;
583 s32 status;
584
585 script->frameCounter += script->timeScale;
586
587 do {
588 if (script->frameCounter < 1.0) {
589 // Continue to next script
590 break;
591 };
592
593 script->frameCounter -= 1.0;
595 if (status == EVT_CMD_RESULT_ERROR) {
596 stop = true;
597 break;
598 }
599 } while (status != EVT_CMD_RESULT_YIELD);
600
601 if (stop) {
602 break;
603 }
604 }
605 }
606 IsUpdatingScripts = false;
607}
s32 b32
@ DEBUG_SCRIPTS_NO_UPDATE
Definition enums.h:3875
@ EVT_FLAG_PAUSED
paused through suspend_group_script / resume_group_script
Definition evt.h:160
@ EVT_FLAG_SUSPENDED
doesn't affect child
Definition evt.h:164
void sort_scripts(void)
Definition script_list.c:73
s32 evt_execute_next_command(Evt *script)
Definition evt.c:1360

Referenced by step_game_loop().

◆ func_802C3EE4()

void func_802C3EE4 ( void )

Definition at line 610 of file script_list.c.

610 {
611 s32 temp;
612 s32 i;
613
614 for (i = 0; i < gScriptListCount; i++) {
616 temp = *((s32*) temp);
617 if (temp == gScriptIdList[i]) {
618 temp = 1;
619 }
620 }
621}

Referenced by gfx_draw_frame().

◆ kill_script()

void kill_script ( Evt * instanceToKill)

Definition at line 623 of file script_list.c.

623 {
624 Evt* childScript;
625 Evt* blockingParent;
626 s32 j;
627 s32 i;
628
629 for (i = 0; i < MAX_SCRIPTS; i++) {
631 break;
632 }
633 }
634
635 if (i >= MAX_SCRIPTS) {
636 return;
637 }
638
639 childScript = instanceToKill->childScript;
640 if (childScript != nullptr) {
641 kill_script(childScript);
642 }
643
644 for (j = 0; j < MAX_SCRIPTS; j++) {
645 Evt* tempScriptInstance = (*gCurrentScriptListPtr)[j];
646 if (tempScriptInstance != nullptr) {
647 if (tempScriptInstance->parentScript == instanceToKill) {
649 }
650 }
651 }
652
653 blockingParent = instanceToKill->blockingParent;
654 if (blockingParent != nullptr) {
655 blockingParent->childScript = nullptr;
656 blockingParent->stateFlags &= ~EVT_FLAG_BLOCKED_BY_CHILD;
657
658 for (j = 0; j < ARRAY_COUNT(blockingParent->varTable); j++) {
659 blockingParent->varTable[j] = instanceToKill->varTable[j];
660 }
661
662 for (j = 0; j < ARRAY_COUNT(blockingParent->varFlags); j++) {
663 blockingParent->varFlags[j] = instanceToKill->varFlags[j];
664 }
665 }
666
667 #if DX_DEBUG_MENU
669 #endif
670
671 if (instanceToKill->userData != nullptr) {
672 heap_free(instanceToKill->userData);
673 instanceToKill->userData = nullptr;
674 }
675
677 (*gCurrentScriptListPtr)[i] = nullptr;
678 gNumScripts--;
679}

Referenced by evt_handle_end_child_thread(), evt_handle_end_thread(), evt_handle_return(), func_802C3C10(), kill_all_scripts(), kill_script(), and kill_script_by_ID().

◆ kill_script_by_ID()

◆ kill_all_scripts()

void kill_all_scripts ( void )

Definition at line 693 of file script_list.c.

693 {
694 s32 i;
696
697 for (i = 0; i < MAX_SCRIPTS; i++) {
698 scriptContextPtr = (*gCurrentScriptListPtr)[i];
699 if (scriptContextPtr != nullptr) {
701 }
702 }
703}

Referenced by btl_state_update_end_battle(), and btl_state_update_end_demo_battle().

◆ does_script_exist()

s32 does_script_exist ( s32 id)

Definition at line 705 of file script_list.c.

705 {
706 s32 i;
708
709 for (i = 0; i < MAX_SCRIPTS; i++) {
710 scriptContextPtr = (*gCurrentScriptListPtr)[i];
711 if (scriptContextPtr != nullptr && scriptContextPtr->id == id) {
712 return true;
713 }
714 }
715 return false;
716}

Referenced by _use_partner_ability(), btl_state_update_begin_partner_turn(), btl_state_update_begin_player_turn(), btl_state_update_begin_turn(), btl_state_update_celebration(), btl_state_update_change_partner(), btl_state_update_defeat(), btl_state_update_defend(), btl_state_update_end_battle(), btl_state_update_end_demo_battle(), btl_state_update_end_player_turn(), btl_state_update_end_training_battle(), btl_state_update_end_turn(), btl_state_update_enemy_move(), btl_state_update_enemy_striking_first(), btl_state_update_first_strike(), btl_state_update_next_enemy(), btl_state_update_normal_start(), btl_state_update_partner_move(), btl_state_update_partner_striking_first(), btl_state_update_player_move(), btl_state_update_run_away(), btl_state_update_transfer_turn(), btl_state_update_victory(), create_encounters(), evt_handle_does_script_exist(), evt_trigger_on_activate_exec_script(), evt_trigger_on_activate_lock(), partner_handle_after_battle(), partner_handle_before_battle(), partner_kill_ability_script(), partner_resume_ability_script(), partner_suspend_ability_script(), state_step_change_map(), state_step_enter_world(), state_step_game_over(), state_step_intro(), update_encounters_conversation(), update_encounters_post_battle(), update_entities(), update_item_entity_collectable(), and update_status_damage().

◆ does_script_exist_by_ref()

s32 does_script_exist_by_ref ( Evt * script)

Definition at line 718 of file script_list.c.

718 {
719 s32 i;
720
721 for (i = 0; i < MAX_SCRIPTS; i++) {
722 if (script == (*gCurrentScriptListPtr)[i]) {
723 return true;
724 }
725 }
726 return false;
727}

◆ set_script_priority()

void set_script_priority ( Evt * script,
s32 priority )

Definition at line 729 of file script_list.c.

729 {
730 script->priority = priority;
731}

Referenced by evt_handle_set_priority().

◆ set_script_timescale()

void set_script_timescale ( Evt * script,
f32 timescale )

Definition at line 733 of file script_list.c.

733 {
734 script->timeScale = timescale * GlobalTimeRate;
735}

Referenced by evt_handle_set_timescale().

◆ set_global_timespace()

void set_global_timespace ( f32 timeScale)

Definition at line 737 of file script_list.c.

737 {
738 GlobalTimeRate = timeScale;
739}

◆ get_global_timespace()

f32 get_global_timespace ( void )

Definition at line 741 of file script_list.c.

741 {
742 return GlobalTimeRate;
743}

◆ set_script_group()

void set_script_group ( Evt * script,
s32 groupFlags )

Definition at line 745 of file script_list.c.

745 {
746 script->groupFlags = groupFlags;
747}

Referenced by evt_handle_set_group().

◆ bind_trigger()

Trigger * bind_trigger ( EvtScript * script,
s32 flags,
s32 triggerFlagIndex,
s32 triggerVar0,
s32 triggerVar1,
s32 priority,
s32 arg6 )

Definition at line 749 of file script_list.c.

750 {
751 Trigger* trigger;
753
755 bp.colliderID = triggerFlagIndex;
756 bp.tattleMsg = 0;
758 bp.hasPlayerInteractPrompt = arg6;
759
760 trigger = create_trigger(&bp);
761 trigger->onTriggerEvt = script;
762 trigger->runningScript = nullptr;
763 trigger->priority = priority;
764 trigger->varTable[0] = triggerVar0;
765 trigger->varTable[1] = triggerVar1;
766 return trigger;
767}
@ TRIGGER_SCRIPT_BOUND
Definition enums.h:2677
s32 evt_trigger_on_activate_exec_script(Trigger *trigger)
Definition evt.c:984
Trigger * create_trigger(TriggerBlueprint *def)
Definition trigger.c:55
EvtScript * onTriggerEvt
struct Evt * runningScript

Referenced by bind_trigger_1().

◆ bind_trigger_1()

Trigger * bind_trigger_1 ( EvtScript * script,
s32 flags,
s32 triggerFlagIndex,
s32 triggerVar0,
s32 triggerVar1,
s32 priority )

Definition at line 769 of file script_list.c.

770 {
772}
Trigger * bind_trigger(EvtScript *script, s32 flags, s32 triggerFlagIndex, s32 triggerVar0, s32 triggerVar1, s32 priority, s32 arg6)

◆ suspend_group_script()

void suspend_group_script ( Evt * script,
s32 groupFlags )

Definition at line 774 of file script_list.c.

774 {
775 Evt* childScript = script->childScript;
776 s32 i;
777
778 if (childScript != nullptr) {
779 suspend_group_script(childScript, groupFlags);
780 }
781
782 for (i = 0; i < MAX_SCRIPTS; i++) {
783 Evt* scriptContextPtr = (*gCurrentScriptListPtr)[i];
784
785 if (scriptContextPtr != nullptr && scriptContextPtr->parentScript == script) {
787 }
788 }
789
790 if ((script->groupFlags & groupFlags) != 0) {
791 script->stateFlags |= EVT_FLAG_PAUSED;
792 }
793}
void suspend_group_script(Evt *script, s32 groupFlags)

Referenced by resume_group_script(), suspend_all_group(), suspend_all_script(), suspend_group_others(), suspend_group_script(), and suspend_group_script_index().

◆ resume_group_script()

void resume_group_script ( Evt * script,
s32 groupFlags )

Definition at line 795 of file script_list.c.

795 {
796 Evt* childScript = script->childScript;
797 s32 i;
798
799 if (childScript != nullptr) {
800 resume_group_script(childScript, groupFlags);
801 }
802
803 for (i = 0; i < MAX_SCRIPTS; i++) {
804 Evt* scriptContextPtr = (*gCurrentScriptListPtr)[i];
805
806 if (scriptContextPtr != nullptr && scriptContextPtr->parentScript == script) {
808 }
809 }
810
811 if ((script->groupFlags & groupFlags) != 0) {
812 script->stateFlags &= ~EVT_FLAG_PAUSED;
813 }
814}
void resume_group_script(Evt *script, s32 groupFlags)

Referenced by resume_all_group(), resume_all_script(), resume_group_others(), resume_group_script(), and resume_group_script_index().

◆ suspend_all_script()

void suspend_all_script ( s32 id)

Definition at line 816 of file script_list.c.

816 {
817 s32 i;
818
819 for (i = 0; i < MAX_SCRIPTS; i++) {
820 Evt* scriptContextPtr = (*gCurrentScriptListPtr)[i];
821
822 if (scriptContextPtr != nullptr && scriptContextPtr->id == id) {
824 }
825 }
826}

Referenced by evt_handle_suspend(), partner_suspend_ability_script(), start_battle(), update_encounters_neutral(), and update_encounters_pre_battle().

◆ resume_all_script()

void resume_all_script ( s32 id)

Definition at line 828 of file script_list.c.

828 {
829 s32 i;
831
832 for (i = 0; i < MAX_SCRIPTS; i++) {
833 scriptContextPtr = (*gCurrentScriptListPtr)[i];
834 if (scriptContextPtr != nullptr && scriptContextPtr->id == id) {
836 }
837 }
838}

Referenced by evt_handle_resume(), partner_resume_ability_script(), update_encounters_conversation(), and update_encounters_post_battle().

◆ suspend_group_script_index()

void suspend_group_script_index ( s32 id,
s32 groupFlags )

Definition at line 840 of file script_list.c.

840 {
841 s32 i;
843
844 for (i = 0; i < MAX_SCRIPTS; i++) {
845 scriptContextPtr = (*gCurrentScriptListPtr)[i];
846 if (scriptContextPtr != nullptr && scriptContextPtr->id == id) {
848 }
849 }
850}

◆ resume_group_script_index()

void resume_group_script_index ( s32 id,
s32 groupFlags )

Definition at line 852 of file script_list.c.

852 {
853 s32 i;
855
856 for (i = 0; i < MAX_SCRIPTS; i++) {
857 scriptContextPtr = (*gCurrentScriptListPtr)[i];
858 if (scriptContextPtr != nullptr && scriptContextPtr->id == id) {
860 }
861 }
862}

◆ suspend_all_group()

void suspend_all_group ( s32 groupFlags)

Definition at line 864 of file script_list.c.

864 {
865 s32 i;
867
868 for (i = 0; i < MAX_SCRIPTS; i++) {
869 scriptContextPtr = (*gCurrentScriptListPtr)[i];
870 if (scriptContextPtr != nullptr) {
872 }
873 }
874}

Referenced by evt_handle_suspend_all(), set_time_freeze_mode(), suspend_frozen_scripts(), update_encounters_neutral(), and update_encounters_pre_battle().

◆ resume_all_group()

void resume_all_group ( s32 groupFlags)

Definition at line 876 of file script_list.c.

876 {
877 s32 i;
879
880 for (i = 0; i < MAX_SCRIPTS; i++) {
881 scriptContextPtr = (*gCurrentScriptListPtr)[i];
882 if (scriptContextPtr != nullptr) {
884 }
885 }
886}

Referenced by create_encounters(), evt_handle_resume_all(), set_time_freeze_mode(), start_battle(), update_encounters_conversation(), update_encounters_post_battle(), and update_item_entity_collectable().

◆ suspend_group_others()

void suspend_group_others ( Evt * script,
s32 groupFlags )

Definition at line 888 of file script_list.c.

888 {
889 s32 i;
891
892 for (i = 0; i < MAX_SCRIPTS; i++) {
893 scriptContextPtr = (*gCurrentScriptListPtr)[i];
894 if (scriptContextPtr != nullptr && scriptContextPtr != script) {
896 }
897 }
898}

Referenced by evt_handle_suspend_others().

◆ resume_group_others()

void resume_group_others ( Evt * script,
s32 groupFlags )

Definition at line 900 of file script_list.c.

900 {
901 s32 i;
903
904 for (i = 0; i < MAX_SCRIPTS; i++) {
905 scriptContextPtr = (*gCurrentScriptListPtr)[i];
906 if (scriptContextPtr != nullptr && scriptContextPtr != script) {
908 }
909 }
910}

Referenced by evt_handle_resume_others().

◆ get_script_by_index()

Evt * get_script_by_index ( s32 index)

Definition at line 912 of file script_list.c.

912 {
913 return (*gCurrentScriptListPtr)[index];
914}

Referenced by dispatch_event_actor(), and func_802C73B8().

◆ get_script_by_id()

Evt * get_script_by_id ( s32 id)

Definition at line 916 of file script_list.c.

916 {
917 s32 i;
919
920 for (i = 0; i < MAX_SCRIPTS; i++) {
921 if ((*gCurrentScriptListPtr)[i] != nullptr) {
922 scriptContextPtr = (*gCurrentScriptListPtr)[i];
923 if (scriptContextPtr->id == id) {
924 return scriptContextPtr;
925 }
926 }
927 }
928 return 0;
929}

Referenced by update_encounters_neutral().

◆ set_script_flags()

void set_script_flags ( Evt * script,
s32 flags )

Definition at line 931 of file script_list.c.

931 {
932 Evt* childScript = script->childScript;
933 s32 i;
934
936 if (childScript != nullptr) {
937 set_script_flags(childScript, flags);
938 }
939
940 for (i = 0; i < MAX_SCRIPTS; i++) {
941 Evt* scriptContextPtr = (*gCurrentScriptListPtr)[i];
942
943 if (scriptContextPtr != nullptr && scriptContextPtr->parentScript == script) {
944 set_script_flags(script->parentScript, flags);
945 }
946 }
947}
void set_script_flags(Evt *script, s32 flags)

Referenced by set_script_flags(), and update_encounters_neutral().

◆ clear_script_flags()

void clear_script_flags ( Evt * script,
s32 flags )

Definition at line 949 of file script_list.c.

949 {
950 Evt* childScript = script->childScript;
951 s32 i;
952
954 if (childScript != nullptr) {
955 clear_script_flags(childScript, flags);
956 }
957
958 for (i = 0; i < MAX_SCRIPTS; i++) {
959 Evt* scriptContextPtr = (*gCurrentScriptListPtr)[i];
960
961 if (scriptContextPtr != nullptr && scriptContextPtr->parentScript == script) {
963 }
964 }
965}
void clear_script_flags(Evt *script, s32 flags)

Referenced by clear_script_flags(), and update_encounters_neutral().

Variable Documentation

◆ UniqueScriptCounter

s32 UniqueScriptCounter = 1

◆ IsUpdatingScripts

◆ GlobalTimeRate

◆ gMapFlags

◆ gMapVars

◆ gNumScripts

◆ gWorldScriptList

BSS ScriptList gWorldScriptList

Definition at line 14 of file script_list.c.

Referenced by clear_script_list(), and init_script_list().

◆ gBattleScriptList

BSS ScriptList gBattleScriptList

Definition at line 15 of file script_list.c.

Referenced by clear_script_list(), and init_script_list().

◆ gCurrentScriptListPtr

◆ gScriptIndexList

◆ gScriptIdList

◆ gScriptListCount

◆ evtDebugPrintBuffer

BSS char evtDebugPrintBuffer[0x100]

Definition at line 22 of file script_list.c.

Referenced by evt_handle_print_debug_var().

◆ gLavaResetList

BSS struct LavaReset* gLavaResetList

Definition at line 25 of file script_list.c.

Referenced by get_lava_reset_pos().

◆ LastSafeFloor

BSS s32 LastSafeFloor

Definition at line 26 of file script_list.c.

Referenced by get_lava_reset_pos().

◆ gBattleMeshAnimationList

BSS AnimatedModelList gBattleMeshAnimationList

Definition at line 29 of file script_list.c.

Referenced by init_model_animators(), and reset_model_animators().

◆ gWorldMeshAnimationList

BSS AnimatedModelList gWorldMeshAnimationList

Definition at line 30 of file script_list.c.

Referenced by init_model_animators(), and reset_model_animators().

◆ gCurrentMeshAnimationListPtr

BSS AnimatedModelList* gCurrentMeshAnimationListPtr

Definition at line 31 of file script_list.c.

Referenced by init_model_animators(), and reset_model_animators().

◆ wExtraPartnerID

BSS s32 wExtraPartnerID

Definition at line 34 of file script_list.c.

◆ wExtraPartnerNpcID

BSS s32 wExtraPartnerNpcID

Definition at line 35 of file script_list.c.

◆ ShowMessageScreenOffsetX

BSS s32 ShowMessageScreenOffsetX

Definition at line 38 of file script_list.c.

Referenced by _show_message().

◆ ShowMessageScreenOffsetY

BSS s32 ShowMessageScreenOffsetY

Definition at line 39 of file script_list.c.

Referenced by _show_message().

◆ gCurrentPrintContext

BSS MessagePrintState* gCurrentPrintContext

Definition at line 40 of file script_list.c.

Referenced by _show_message(), and cancel_current_message().

◆ D_802DB268

BSS MessagePrintState* D_802DB268

Definition at line 41 of file script_list.c.

◆ D_802DB264

BSS s32 D_802DB264

Definition at line 42 of file script_list.c.

Referenced by _show_message().

◆ playerNpcData

BSS Npc playerNpcData

Definition at line 45 of file script_list.c.

◆ PlayerImgFXFlags

BSS u16 PlayerImgFXFlags

Definition at line 46 of file script_list.c.

◆ bBattleVirtualEntityList

BSS VirtualEntityList bBattleVirtualEntityList

Definition at line 47 of file script_list.c.

Referenced by clear_virtual_entity_list(), and init_virtual_entity_list().

◆ wWorldVirtualEntityList

BSS VirtualEntityList wWorldVirtualEntityList

Definition at line 48 of file script_list.c.

Referenced by clear_virtual_entity_list(), and init_virtual_entity_list().

◆ gCurrentVirtualEntityListPtr

◆ MusicEventList

BSS MusicEvent* MusicEventList

Definition at line 52 of file script_list.c.

◆ RunningMusicEvents

BSS Evt* RunningMusicEvents[10]

Definition at line 53 of file script_list.c.

◆ RunningMusicEventIDs

BSS s32 RunningMusicEventIDs[10]

Definition at line 54 of file script_list.c.

◆ gItemChoicePopupMenu

BSS PopupMenu gItemChoicePopupMenu

Definition at line 57 of file script_list.c.

◆ gWorldMapFlags

BSS u32 gWorldMapFlags[MAX_MAPFLAGS]

Definition at line 60 of file script_list.c.

Referenced by clear_script_list(), and init_script_list().

◆ gBattleMapFlags

BSS u32 gBattleMapFlags[MAX_MAPFLAGS]

Definition at line 61 of file script_list.c.

Referenced by clear_script_list(), and init_script_list().

◆ gWorldMapVars

BSS u32 gWorldMapVars[MAX_MAPVARS]

Definition at line 63 of file script_list.c.

Referenced by clear_script_list(), and init_script_list().

◆ gBattleMapVars

BSS u32 gBattleMapVars[MAX_MAPVARS]

Definition at line 64 of file script_list.c.

Referenced by clear_script_list(), and init_script_list().

◆ wPushBlockGrids

BSS PushBlockGrid* wPushBlockGrids[8]

Definition at line 66 of file script_list.c.

◆ DoorModelsSwingCW

BSS s32 DoorModelsSwingCW[3]

Definition at line 68 of file script_list.c.

◆ DoorModelsSwingCCW

BSS s32 DoorModelsSwingCCW[3]

Definition at line 69 of file script_list.c.