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)
 
s32 suspend_all_script (s32 id)
 
s32 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)
 
s32 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 1359 of file evt.c.

1359 {
1361
1362 while (TRUE) {
1363 s32 status = ApiStatus_DONE2;
1364 s32* lines;
1365 s32 nargs;
1366
1367 #if DX_DEBUG_MENU
1368 if (script->debugPaused && script->curOpcode != EVT_OP_INTERNAL_FETCH) {
1369 switch (script->debugStep) {
1371 return EVT_CMD_RESULT_YIELD;
1373 script->debugStep = DEBUG_EVT_STEP_NONE;
1374 break;
1376 // do not pause execution until we get a block
1377 break;
1378 }
1379 }
1380 #endif
1381
1383 ASSERT_MSG(commandsExecuted < 10000, "Script %x is blocking for ages (infinite loop?)", script->ptrFirstLine);
1384
1385 switch (script->curOpcode) {
1387 script->ptrCurLine = script->ptrNextLine;
1388 lines = script->ptrNextLine;
1389 script->curOpcode = *lines++;
1390 nargs = *lines++;
1391 script->ptrReadPos = lines;
1392 script->blocked = FALSE;
1393 script->curArgc = nargs;
1394 lines = &lines[nargs];
1395 script->ptrNextLine = lines;
1396 status = ApiStatus_REPEAT;
1397 break;
1398 case EVT_OP_RETURN:
1399 status = evt_handle_return(script);
1400 break;
1401 case EVT_OP_LABEL:
1402 status = evt_handle_label(script);
1403 break;
1404 case EVT_OP_GOTO:
1405 status = evt_handle_goto(script);
1406 break;
1407 case EVT_OP_LOOP:
1408 status = evt_handle_loop(script);
1409 break;
1410 case EVT_OP_END_LOOP:
1411 status = evt_handle_end_loop(script);
1412 break;
1413 case EVT_OP_BREAK_LOOP:
1414 status = evt_handle_break_loop(script);
1415 break;
1416 case EVT_OP_WAIT_FRAMES:
1417 status = evt_handle_wait(script);
1418 break;
1419 case EVT_OP_WAIT_SECS:
1421 break;
1422 case EVT_OP_IF_EQ:
1423 status = evt_handle_if_equal(script);
1424 break;
1425 case EVT_OP_IF_NE:
1427 break;
1428 case EVT_OP_IF_LT:
1429 status = evt_handle_if_less(script);
1430 break;
1431 case EVT_OP_IF_GT:
1432 status = evt_handle_if_greater(script);
1433 break;
1434 case EVT_OP_IF_LE:
1436 break;
1437 case EVT_OP_IF_GE:
1439 break;
1440 case EVT_OP_IF_FLAG:
1441 status = evt_handle_if_AND(script);
1442 break;
1443 case EVT_OP_IF_NOT_FLAG:
1444 status = evt_handle_if_not_AND(script);
1445 break;
1446 case EVT_OP_ELSE:
1447 status = evt_handle_else(script);
1448 break;
1449 case EVT_OP_END_IF:
1450 status = evt_handle_end_if(script);
1451 break;
1452 case EVT_OP_SWITCH:
1453 status = evt_handle_switch(script);
1454 break;
1457 break;
1458 case EVT_OP_CASE_EQ:
1459 status = evt_handle_case_equal(script);
1460 break;
1461 case EVT_OP_CASE_NE:
1463 break;
1464 case EVT_OP_CASE_LT:
1465 status = evt_handle_case_less(script);
1466 break;
1467 case EVT_OP_CASE_LE:
1469 break;
1470 case EVT_OP_CASE_GT:
1472 break;
1473 case EVT_OP_CASE_GE:
1475 break;
1478 break;
1480 status = evt_handle_break_case(script);
1481 break;
1482 case EVT_OP_CASE_OR_EQ:
1484 break;
1487 break;
1488 case EVT_OP_CASE_AND_EQ:
1490 break;
1491 case EVT_OP_CASE_FLAG:
1492 status = evt_handle_case_AND(script);
1493 break;
1494 case EVT_OP_CASE_RANGE:
1495 status = evt_handle_case_range(script);
1496 break;
1497 case EVT_OP_END_SWITCH:
1498 status = evt_handle_end_switch(script);
1499 break;
1500 case EVT_OP_SET:
1501 status = evt_handle_set_var(script);
1502 break;
1503 case EVT_OP_SET_CONST:
1504 status = evt_handle_set_const(script);
1505 break;
1506 case EVT_OP_SETF:
1507 status = evt_handle_set_float(script);
1508 break;
1509 case EVT_OP_ADD:
1510 status = evt_handle_add(script);
1511 break;
1512 case EVT_OP_SUB:
1513 status = evt_handle_subtract(script);
1514 break;
1515 case EVT_OP_MUL:
1516 status = evt_handle_multiply(script);
1517 break;
1518 case EVT_OP_DIV:
1519 status = evt_handle_divide(script);
1520 break;
1521 case EVT_OP_MOD:
1522 status = evt_handle_mod(script);
1523 break;
1524 case EVT_OP_ADDF:
1525 status = evt_handle_addF(script);
1526 break;
1527 case EVT_OP_SUBF:
1528 status = evt_handle_subtractF(script);
1529 break;
1530 case EVT_OP_MULF:
1531 status = evt_handle_multiplyF(script);
1532 break;
1533 case EVT_OP_DIVF:
1534 status = evt_handle_divideF(script);
1535 break;
1536 case EVT_OP_USE_BUF:
1538 break;
1539 case EVT_OP_BUF_READ1:
1540 status = evt_handle_get_1_word(script);
1541 break;
1542 case EVT_OP_BUF_READ2:
1543 status = evt_handle_get_2_word(script);
1544 break;
1545 case EVT_OP_BUF_READ3:
1546 status = evt_handle_get_3_word(script);
1547 break;
1548 case EVT_OP_BUF_READ4:
1549 status = evt_handle_get_4_word(script);
1550 break;
1551 case EVT_OP_BUF_PEEK:
1553 break;
1554 case EVT_OP_USE_FBUF:
1556 break;
1557 case EVT_OP_FBUF_READ1:
1559 break;
1560 case EVT_OP_FBUF_READ2:
1562 break;
1563 case EVT_OP_FBUF_READ3:
1565 break;
1566 case EVT_OP_FBUF_READ4:
1568 break;
1569 case EVT_OP_FBUF_PEEK:
1571 break;
1572 case EVT_OP_USE_ARRAY:
1573 status = evt_handle_set_array(script);
1574 break;
1575 case EVT_OP_USE_FLAGS:
1577 break;
1580 break;
1581 case EVT_OP_KILL_THREAD:
1582 status = evt_handle_kill(script);
1583 break;
1584 case EVT_OP_BITWISE_AND:
1585 status = evt_handle_AND(script);
1586 break;
1588 status = evt_handle_AND_const(script);
1589 break;
1590 case EVT_OP_BITWISE_OR:
1591 status = evt_handle_OR(script);
1592 break;
1594 status = evt_handle_OR_const(script);
1595 break;
1596 case EVT_OP_CALL:
1597 status = evt_handle_call(script);
1598 break;
1599 case EVT_OP_EXEC:
1600 status = evt_handle_exec1(script);
1601 break;
1604 break;
1605 case EVT_OP_EXEC_WAIT:
1606 status = evt_handle_exec_wait(script);
1607 break;
1609 status = evt_handle_bind(script);
1610 break;
1611 case EVT_OP_UNBIND:
1612 status = evt_handle_unbind(script);
1613 break;
1616 break;
1619 break;
1620 case EVT_OP_SET_GROUP:
1621 status = evt_handle_set_group(script);
1622 break;
1623 case EVT_OP_JUMP:
1624 status = evt_handle_jump(script);
1625 break;
1627 status = evt_handle_bind_lock(script);
1628 break;
1631 break;
1633 status = evt_handle_resume_all(script);
1634 break;
1637 break;
1640 break;
1642 status = evt_handle_suspend(script);
1643 break;
1645 status = evt_handle_resume(script);
1646 break;
1649 break;
1650 case EVT_OP_THREAD:
1651 status = evt_handle_thread(script);
1652 break;
1653 case EVT_OP_END_THREAD:
1654 status = evt_handle_end_thread(script);
1655 break;
1658 break;
1661 break;
1662 case EVT_OP_DEBUG_LOG:
1663 status = evt_handle_debug_log(script);
1664 break;
1667 break;
1668 case EVT_OP_92:
1669 status = func_802C739C(script);
1670 break;
1671 case EVT_OP_93:
1672 status = func_802C73B0(script);
1673 break;
1674 case EVT_OP_94:
1675 status = func_802C73B8(script);
1676 break;
1679 break;
1680 case EVT_OP_END:
1681 break;
1682 default:
1683 PANIC();
1684 }
1685
1686 if (status == ApiStatus_REPEAT) {
1687 // execute command after a fetch operation
1688 continue;
1689 }
1690
1691 if (status == ApiStatus_FINISH) {
1692 return EVT_CMD_RESULT_YIELD;
1693 }
1694
1695 if (status < 0) {
1696 return EVT_CMD_RESULT_ERROR;
1697 }
1698
1699 if (status == ApiStatus_BLOCK) {
1701 }
1702
1703 #if DX_DEBUG_MENU
1704 // pause again now that the current command is done blocking
1705 if (script->debugStep == DEBUG_EVT_STEP_OVER) {
1706 script->debugStep = DEBUG_EVT_STEP_NONE;
1707 }
1708 #endif
1709
1710 if (status == ApiStatus_DONE1) {
1711 script->curOpcode = EVT_OP_INTERNAL_FETCH;
1713 }
1714
1715 if (status == ApiStatus_DONE2) {
1716 script->curOpcode = EVT_OP_INTERNAL_FETCH;
1718 continue;
1719 }
1721 }
1722 }
1723}
BSS s32 PopupMenu_SelectedIndex
@ DEBUG_SCRIPTS_BLOCK_FUNC_DONE
Definition enums.h:3876
ApiStatus func_802C739C(Evt *script)
Definition evt.c:1332
ApiStatus evt_handle_OR(Evt *script)
Definition evt.c:868
ApiStatus func_802C73B0(Evt *script)
Definition evt.c:1337
ApiStatus evt_handle_set_int_buffer_ptr(Evt *script)
Definition evt.c:678
ApiStatus evt_handle_break_loop(Evt *script)
Definition evt.c:90
ApiStatus evt_handle_AND(Evt *script)
Definition evt.c:848
ApiStatus evt_handle_set_float(Evt *script)
Definition evt.c:562
ApiStatus evt_handle_switch_const(Evt *script)
Definition evt.c:245
ApiStatus evt_handle_call(Evt *script)
Definition evt.c:888
ApiStatus evt_handle_case_greater(Evt *script)
Definition evt.c:350
ApiStatus evt_handle_end_thread(Evt *script)
Definition evt.c:1191
ApiStatus evt_handle_case_equal_OR(Evt *script)
Definition evt.c:462
ApiStatus evt_handle_get_3_word(Evt *script)
Definition evt.c:715
ApiStatus evt_handle_divideF(Evt *script)
Definition evt.c:666
ApiStatus evt_handle_multiply(Evt *script)
Definition evt.c:594
ApiStatus evt_handle_switch(Evt *script)
Definition evt.c:232
ApiStatus evt_handle_AND_const(Evt *script)
Definition evt.c:858
ApiStatus evt_handle_break_case(Evt *script)
Definition evt.c:532
ApiStatus evt_handle_debug_breakpoint(Evt *script)
Definition evt.c:1352
ApiStatus evt_handle_jump(Evt *script)
Definition evt.c:975
ApiStatus evt_handle_suspend_all(Evt *script)
Definition evt.c:1072
ApiStatus evt_handle_case_less(Evt *script)
Definition evt.c:304
ApiStatus evt_handle_set_timescale(Evt *script)
Definition evt.c:1062
ApiStatus evt_handle_set_const(Evt *script)
Definition evt.c:557
ApiStatus evt_handle_subtract(Evt *script)
Definition evt.c:582
ApiStatus evt_handle_if_greater(Evt *script)
Definition evt.c:165
ApiStatus evt_handle_exec_wait(Evt *script)
Definition evt.c:966
ApiStatus evt_handle_set_array(Evt *script)
Definition evt.c:828
ApiStatus evt_handle_if_less(Evt *script)
Definition evt.c:153
ApiStatus evt_handle_case_default(Evt *script)
Definition evt.c:422
ApiStatus evt_handle_exec1(Evt *script)
Definition evt.c:913
ApiStatus evt_handle_add(Evt *script)
Definition evt.c:570
ApiStatus evt_handle_loop(Evt *script)
Definition evt.c:47
ApiStatus evt_handle_return(Evt *script)
Definition evt.c:33
ApiStatus evt_handle_mod(Evt *script)
Definition evt.c:618
ApiStatus evt_handle_thread(Evt *script)
Definition evt.c:1158
ApiStatus evt_handle_case_equal_AND(Evt *script)
Definition evt.c:487
ApiStatus evt_handle_case_range(Evt *script)
Definition evt.c:396
ApiStatus evt_handle_goto(Evt *script)
Definition evt.c:42
ApiStatus evt_handle_OR_const(Evt *script)
Definition evt.c:878
ApiStatus evt_handle_bind(Evt *script)
Definition evt.c:1010
ApiStatus evt_handle_print_debug_var(Evt *script)
Definition evt.c:1233
ApiStatus evt_handle_set_var(Evt *script)
Definition evt.c:549
ApiStatus evt_handle_get_4_word(Evt *script)
Definition evt.c:731
ApiStatus evt_handle_unbind(Evt *script)
Definition evt.c:1047
ApiStatus evt_handle_bind_lock(Evt *script)
Definition evt.c:1128
ApiStatus evt_handle_if_not_equal(Evt *script)
Definition evt.c:141
ApiStatus evt_handle_get_1_float(Evt *script)
Definition evt.c:760
ApiStatus evt_handle_if_less_equal(Evt *script)
Definition evt.c:177
ApiStatus evt_handle_end_loop(Evt *script)
Definition evt.c:60
ApiStatus evt_handle_debug_log(Evt *script)
Definition evt.c:1226
ApiStatus func_802C73B8(Evt *script)
Definition evt.c:1341
ApiStatus evt_handle_get_Nth_word(Evt *script)
Definition evt.c:750
ApiStatus evt_handle_exec1_get_id(Evt *script)
Definition evt.c:938
ApiStatus evt_handle_case_AND(Evt *script)
Definition evt.c:437
ApiStatus evt_handle_subtractF(Evt *script)
Definition evt.c:642
ApiStatus evt_handle_set_flag_array(Evt *script)
Definition evt.c:833
ApiStatus evt_handle_set_float_buffer_ptr(Evt *script)
Definition evt.c:685
ApiStatus evt_handle_end_child_thread(Evt *script)
Definition evt.c:1221
ApiStatus evt_handle_end_case_group(Evt *script)
Definition evt.c:515
ApiStatus evt_handle_get_Nth_float(Evt *script)
Definition evt.c:818
ApiStatus evt_handle_addF(Evt *script)
Definition evt.c:630
ApiStatus evt_handle_get_1_word(Evt *script)
Definition evt.c:692
ApiStatus evt_handle_set_priority(Evt *script)
Definition evt.c:1057
ApiStatus evt_handle_suspend(Evt *script)
Definition evt.c:1092
ApiStatus evt_handle_get_2_float(Evt *script)
Definition evt.c:770
ApiStatus evt_handle_case_less_equal(Evt *script)
Definition evt.c:327
ApiStatus evt_handle_get_2_word(Evt *script)
Definition evt.c:702
ApiStatus evt_handle_end_switch(Evt *script)
Definition evt.c:538
ApiStatus evt_handle_if_greater_equal(Evt *script)
Definition evt.c:189
ApiStatus evt_handle_resume_all(Evt *script)
Definition evt.c:1077
ApiStatus evt_handle_if_equal(Evt *script)
Definition evt.c:129
ApiStatus evt_handle_child_thread(Evt *script)
Definition evt.c:1196
ApiStatus evt_handle_case_equal(Evt *script)
Definition evt.c:258
ApiStatus evt_handle_get_3_float(Evt *script)
Definition evt.c:783
ApiStatus evt_handle_does_script_exist(Evt *script)
Definition evt.c:1102
ApiStatus evt_handle_else(Evt *script)
Definition evt.c:223
ApiStatus evt_handle_set_group(Evt *script)
Definition evt.c:1067
ApiStatus evt_handle_multiplyF(Evt *script)
Definition evt.c:654
ApiStatus evt_handle_resume(Evt *script)
Definition evt.c:1097
ApiStatus evt_handle_if_not_AND(Evt *script)
Definition evt.c:212
ApiStatus evt_handle_end_if(Evt *script)
Definition evt.c:228
ApiStatus evt_handle_kill(Evt *script)
Definition evt.c:1052
ApiStatus evt_handle_resume_others(Evt *script)
Definition evt.c:1087
ApiStatus evt_handle_if_AND(Evt *script)
Definition evt.c:201
ApiStatus evt_handle_wait_seconds(Evt *script)
Definition evt.c:113
ApiStatus evt_handle_wait(Evt *script)
Definition evt.c:97
ApiStatus evt_handle_case_not_equal(Evt *script)
Definition evt.c:281
ApiStatus evt_handle_get_4_float(Evt *script)
Definition evt.c:799
ApiStatus evt_handle_label(Evt *script)
Definition evt.c:38
ApiStatus evt_handle_case_greater_equal(Evt *script)
Definition evt.c:373
ApiStatus evt_handle_suspend_others(Evt *script)
Definition evt.c:1082
ApiStatus evt_handle_allocate_array(Evt *script)
Definition evt.c:838
ApiStatus evt_handle_divide(Evt *script)
Definition evt.c:606
@ 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_DONE2
Definition evt.h:119
#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:55
#define ASSERT_MSG(condition, msg, args...)
Definition macros.h:66
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 != NULL) {
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:90
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:40

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] = NULL;
166 }
167
168 gNumScripts = 0;
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:82
#define MAX_MAPVARS
Definition macros.h:81
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;
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] == NULL) {
231 break;
232 }
233 }
234
235 ASSERT(i < MAX_SCRIPTS);
236 curScriptIndex = i;
237
238 (*gCurrentScriptListPtr)[curScriptIndex] = newScript = heap_malloc(sizeof(*newScript));
239 gNumScripts++;
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 = NULL;
250 newScript->blockingParent = NULL;
251 newScript->childScript = NULL;
252 newScript->parentScript = NULL;
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 = NULL;
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] == NULL) {
299 break;
300 }
301 }
302
303 ASSERT(i < MAX_SCRIPTS);
304 curScriptIndex = i;
305
306 (*gCurrentScriptListPtr)[curScriptIndex] = newScript = heap_malloc(sizeof(*newScript));
307 gNumScripts++;
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 = NULL;
318 newScript->blockingParent = NULL;
319 newScript->childScript = NULL;
320 newScript->parentScript = NULL;
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 = NULL;
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] == NULL) {
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 != NULL);
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 = NULL;
384 child->blockingParent = parentScript;
385 child->childScript = NULL;
386 child->parentScript = NULL;
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 = NULL;
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] == NULL) {
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 != NULL);
446
448 child->ptrNextLine = nextLine;
449 child->ptrFirstLine = nextLine;
450 child->ptrCurLine = nextLine;
452 child->userData = NULL;
453 child->blockingParent = NULL;
454 child->parentScript = parentScript;
455 child->childScript = NULL;
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 = NULL;
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 != NULL) {
513 heap_free(script->userData);
514 script->userData = NULL;
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 = NULL;
530 script->parentScript = NULL;
531 script->childScript = NULL;
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
572 sort_scripts();
573
574 for (i = 0; i < gScriptListCount; i++) {
575 Evt* script = (*gCurrentScriptListPtr)[gScriptIndexList[i]];
576
577 if (script != NULL
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 }
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:1359

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 != NULL) {
641 kill_script(childScript);
642 }
643
644 for (j = 0; j < MAX_SCRIPTS; j++) {
645 Evt* tempScriptInstance = (*gCurrentScriptListPtr)[j];
646 if (tempScriptInstance != NULL) {
647 if (tempScriptInstance->parentScript == instanceToKill) {
649 }
650 }
651 }
652
653 blockingParent = instanceToKill->blockingParent;
654 if (blockingParent != NULL) {
655 blockingParent->childScript = NULL;
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 != NULL) {
672 heap_free(instanceToKill->userData);
673 instanceToKill->userData = NULL;
674 }
675
677 (*gCurrentScriptListPtr)[i] = NULL;
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 != NULL) {
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 != NULL && 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 = NULL;
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:983
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 != NULL) {
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 != NULL && 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 != NULL) {
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 != NULL && 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()

s32 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 != NULL && 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()

s32 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 != NULL && 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 != NULL && 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 != NULL && 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 != NULL) {
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()

s32 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 != NULL) {
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];
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];
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] != NULL) {
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 != NULL) {
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 != NULL && 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 != NULL) {
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 != NULL && 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.