sm64pc/levels/intro/script.c

166 lines
6.3 KiB
C
Raw Normal View History

2019-11-03 19:36:27 +00:00
#include <ultra64.h>
#include "sm64.h"
#include "behavior_data.h"
#include "model_ids.h"
#include "seq_ids.h"
#include "segment_symbols.h"
#include "level_commands.h"
2019-12-02 02:52:53 +00:00
#include "game/area.h"
2019-11-03 19:36:27 +00:00
#include "game/level_update.h"
#include "menu/level_select_menu.h"
#include "levels/scripts.h"
#include "levels/menu/header.h"
#include "actors/common1.h"
#include "make_const_nonconst.h"
#include "levels/intro/header.h"
const LevelScript level_intro_entry_1[] = {
INIT_LEVEL(),
FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd),
LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
LOAD_MIO0(/*seg*/ 0x07, _intro_segment_7SegmentRomStart, _intro_segment_7SegmentRomEnd),
ALLOC_LEVEL_POOL(),
AREA(/*index*/ 1, intro_geo_0002D0),
END_AREA(),
FREE_LEVEL_POOL(),
LOAD_AREA(/*area*/ 1),
2020-04-03 18:57:26 +00:00
CALL(/*arg*/ 0, /*func*/ lvl_intro_update),
2019-11-03 19:36:27 +00:00
SLEEP(/*frames*/ 75),
2019-12-02 02:52:53 +00:00
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_INTO_COLOR, /*time*/ 16, /*color*/ 0x00, 0x00, 0x00),
2019-11-03 19:36:27 +00:00
SLEEP(/*frames*/ 16),
CMD2A(/*unk2*/ 1),
CLEAR_LEVEL(),
SLEEP(/*frames*/ 2),
EXIT_AND_EXECUTE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_entry_2),
};
const LevelScript level_intro_entry_2[] = {
INIT_LEVEL(),
BLACKOUT(/*active*/ TRUE),
FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd),
2020-05-07 18:21:22 +00:00
//LOAD_MARIO_HEAD(/*loadHeadID*/ REGULAR_FACE),
2019-11-03 19:36:27 +00:00
LOAD_MARIO_HEAD(/*loadHeadID*/ REGULAR_FACE),
LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
LOAD_MIO0_TEXTURE(/*seg*/ 0x0A, _title_screen_bg_mio0SegmentRomStart, _title_screen_bg_mio0SegmentRomEnd),
ALLOC_LEVEL_POOL(),
2020-05-07 18:21:22 +00:00
//AREA(/*index*/ 1, intro_geo_00035C),
//END_AREA(),
2019-11-03 19:36:27 +00:00
AREA(/*index*/ 1, intro_geo_00035C),
END_AREA(),
FREE_LEVEL_POOL(),
SLEEP(/*frames*/ 2),
BLACKOUT(/*active*/ FALSE),
2020-05-07 18:21:22 +00:00
//LOAD_AREA(/*area*/ 1),
CLEAR_DEMO_PTR(), // we need to do this or else file select will be tainted with inputs
GET_OR_SET(/*op*/ OP_GET, /*var*/ 5),
JUMP_IF(/*op*/ OP_EQ, /*arg*/ 1, script_intro_L1), // was start pressed when demo ended last time?
2019-11-03 19:36:27 +00:00
LOAD_AREA(/*area*/ 1),
SET_MENU_MUSIC(/*seq*/ 0x0002),
2019-12-02 02:52:53 +00:00
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_FROM_STAR, /*time*/ 20, /*color*/ 0x00, 0x00, 0x00),
2019-11-03 19:36:27 +00:00
SLEEP(/*frames*/ 20),
2020-04-03 18:57:26 +00:00
CALL_LOOP(/*arg*/ 1, /*func*/ lvl_intro_update),
2019-11-03 19:36:27 +00:00
JUMP_IF(/*op*/ OP_EQ, /*arg*/ 100, script_intro_L1),
JUMP_IF(/*op*/ OP_EQ, /*arg*/ 101, script_intro_L2),
JUMP(script_intro_L4),
};
const LevelScript level_intro_entry_3[] = {
INIT_LEVEL(),
BLACKOUT(/*active*/ TRUE),
FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd),
LOAD_MARIO_HEAD(/*loadHeadID*/ DIZZY_FACE),
LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
LOAD_MIO0_TEXTURE(/*seg*/ 0x0A, _title_screen_bg_mio0SegmentRomStart, _title_screen_bg_mio0SegmentRomEnd),
ALLOC_LEVEL_POOL(),
AREA(/*index*/ 1, intro_geo_0003B8),
END_AREA(),
FREE_LEVEL_POOL(),
SLEEP(/*frames*/ 2),
BLACKOUT(/*active*/ FALSE),
LOAD_AREA(/*area*/ 1),
SET_MENU_MUSIC(/*seq*/ 0x0082),
2019-12-02 02:52:53 +00:00
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_FROM_STAR, /*time*/ 20, /*color*/ 0x00, 0x00, 0x00),
2019-11-03 19:36:27 +00:00
SLEEP(/*frames*/ 20),
2020-04-03 18:57:26 +00:00
CALL_LOOP(/*arg*/ 2, /*func*/ lvl_intro_update),
2019-11-03 19:36:27 +00:00
JUMP_IF(/*op*/ OP_EQ, /*arg*/ 100, script_intro_L1),
JUMP_IF(/*op*/ OP_EQ, /*arg*/ 101, script_intro_L2),
JUMP(script_intro_L4),
};
const LevelScript level_intro_entry_4[] = {
INIT_LEVEL(),
LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
LOAD_MIO0_TEXTURE(/*seg*/ 0x0A, _title_screen_bg_mio0SegmentRomStart, _title_screen_bg_mio0SegmentRomEnd),
LOAD_MIO0(/*seg*/ 0x07, _debug_level_select_mio0SegmentRomStart, _debug_level_select_mio0SegmentRomEnd),
FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd),
ALLOC_LEVEL_POOL(),
AREA(/*index*/ 1, intro_geo_000414),
END_AREA(),
FREE_LEVEL_POOL(),
LOAD_AREA(/*area*/ 1),
SET_MENU_MUSIC(/*seq*/ 0x0002),
2019-12-02 02:52:53 +00:00
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_FROM_COLOR, /*time*/ 16, /*color*/ 0xFF, 0xFF, 0xFF),
2019-11-03 19:36:27 +00:00
SLEEP(/*frames*/ 16),
2020-04-03 18:57:26 +00:00
CALL_LOOP(/*arg*/ 3, /*func*/ lvl_intro_update),
2019-11-03 19:36:27 +00:00
JUMP_IF(/*op*/ OP_EQ, /*arg*/ -1, script_intro_L5),
JUMP(script_intro_L3),
};
// These should be static, but C doesn't allow non-sized forward declarations of static arrays
const LevelScript script_intro_L1[] = {
STOP_MUSIC(/*fadeOutTime*/ 0x00BE),
2019-12-02 02:52:53 +00:00
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_INTO_COLOR, /*time*/ 16, /*color*/ 0xFF, 0xFF, 0xFF),
2019-11-03 19:36:27 +00:00
SLEEP(/*frames*/ 16),
CLEAR_LEVEL(),
SLEEP(/*frames*/ 2),
SET_REG(/*value*/ 16),
EXIT_AND_EXECUTE(/*seg*/ 0x14, _menuSegmentRomStart, _menuSegmentRomEnd, level_main_menu_entry_1),
};
const LevelScript script_intro_L2[] = {
2019-12-02 02:52:53 +00:00
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_INTO_COLOR, /*time*/ 16, /*color*/ 0xFF, 0xFF, 0xFF),
2019-11-03 19:36:27 +00:00
SLEEP(/*frames*/ 16),
CLEAR_LEVEL(),
SLEEP(/*frames*/ 2),
EXIT_AND_EXECUTE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_entry_4),
};
const LevelScript script_intro_L3[] = {
STOP_MUSIC(/*fadeOutTime*/ 0x00BE),
2019-12-02 02:52:53 +00:00
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_INTO_COLOR, /*time*/ 16, /*color*/ 0xFF, 0xFF, 0xFF),
2019-11-03 19:36:27 +00:00
SLEEP(/*frames*/ 16),
CLEAR_LEVEL(),
SLEEP(/*frames*/ 2),
EXIT_AND_EXECUTE(/*seg*/ 0x15, _scriptsSegmentRomStart, _scriptsSegmentRomEnd, level_main_scripts_entry),
};
const LevelScript script_intro_L4[] = {
2019-12-02 02:52:53 +00:00
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_INTO_COLOR, /*time*/ 16, /*color*/ 0xFF, 0xFF, 0xFF),
2019-11-03 19:36:27 +00:00
SLEEP(/*frames*/ 16),
CLEAR_LEVEL(),
SLEEP(/*frames*/ 2),
EXIT_AND_EXECUTE(/*seg*/ 0x15, _scriptsSegmentRomStart, _scriptsSegmentRomEnd, level_main_scripts_entry),
};
const LevelScript script_intro_L5[] = {
STOP_MUSIC(/*fadeOutTime*/ 0x00BE),
2019-12-02 02:52:53 +00:00
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_INTO_COLOR, /*time*/ 16, /*color*/ 0x00, 0x00, 0x00),
2019-11-03 19:36:27 +00:00
SLEEP(/*frames*/ 16),
CLEAR_LEVEL(),
SLEEP(/*frames*/ 2),
EXIT_AND_EXECUTE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_entry_1),
};