Files

203 lines
8.0 KiB
C
Raw Permalink Normal View History

2019-11-03 14:36:27 -05: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-01 21:52:53 -05:00
#include "game/area.h"
2019-11-03 14:36:27 -05:00
#include "game/level_update.h"
2021-07-12 23:17:54 -04:00
#include "menu/title_screen.h"
2019-11-03 14:36:27 -05:00
#include "levels/scripts.h"
#include "levels/menu/header.h"
2021-10-05 22:50:38 -04:00
#include "actors/common0.h"
2019-11-03 14:36:27 -05:00
#include "actors/common1.h"
#include "make_const_nonconst.h"
#include "levels/intro/header.h"
2021-08-22 13:39:47 +01:00
#include "farcall.h"
2019-11-03 14:36:27 -05:00
#include "config.h"
2021-08-22 13:39:47 +01:00
#include "game/print.h"
#include "game/object_list_processor.h"
2020-12-03 14:26:38 -05:00
const LevelScript level_intro_splash_screen[] = {
2019-11-03 14:36:27 -05:00
INIT_LEVEL(),
#ifdef SKIP_TITLE_SCREEN
2021-08-22 13:39:47 +01:00
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_mario_head_regular, _introSegmentBssStart, _introSegmentBssEnd),
#endif
2019-11-03 14:36:27 -05:00
FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd),
2021-10-14 18:48:16 -07:00
LOAD_RAW( /*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
LOAD_YAY0(/*seg*/ 0x07, _intro_segment_7SegmentRomStart, _intro_segment_7SegmentRomEnd),
#if defined(HD_INTRO_TEXTURES) && defined(FLOOMBAS)
2021-10-14 18:48:16 -07:00
LOAD_YAY0(/*seg*/ 0x08, _common0_yay0SegmentRomStart, _common0_yay0SegmentRomEnd),
LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd),
2019-11-03 14:36:27 -05:00
2020-12-03 14:26:38 -05:00
// Load "Super Mario 64" logo
ALLOC_LEVEL_POOL(),
2021-10-05 22:50:38 -04:00
LOAD_MODEL_FROM_GEO(MODEL_GOOMBA, goomba_geo),
AREA(/*index*/ 1, intro_geo_splash_screen),
2021-10-08 01:35:23 -04:00
OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -570, -480, 1500, /*angle*/ 0, 50, 0, /*behParam*/ 0x1800100B, /*beh*/ bhvFloombaStartup),
OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 570, -480, 1500, /*angle*/ 0, -50, 0, /*behParam*/ 0x1800900B, /*beh*/ bhvFloombaStartup),
END_AREA(),
FREE_LEVEL_POOL(),
// Start animation
LOAD_AREA(/*area*/ 1),
CALL(/*arg*/ LVL_INTRO_PLAY_ITS_A_ME_MARIO, /*func*/ lvl_intro_update),
CALL(/*arg*/ 0, /*func*/ load_mario_area),
JUMP_LINK_PUSH_ARG(75),
CALL(/*arg*/ 0, /*func*/ area_update_objects),
SLEEP(/*frames*/ 1),
JUMP_N_TIMES(),
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_INTO_COLOR, /*time*/ 16, /*color*/ 0x00, 0x00, 0x00),
JUMP_LINK_PUSH_ARG(16),
CALL(/*arg*/ 0, /*func*/ area_update_objects),
SLEEP(/*frames*/ 1),
JUMP_N_TIMES(),
#else
2020-12-03 14:26:38 -05:00
// Load "Super Mario 64" logo
ALLOC_LEVEL_POOL(),
AREA(/*index*/ 1, intro_geo_splash_screen),
2019-11-03 14:36:27 -05:00
END_AREA(),
FREE_LEVEL_POOL(),
2020-12-03 14:26:38 -05:00
// Start animation
2019-11-03 14:36:27 -05:00
LOAD_AREA(/*area*/ 1),
2020-12-03 14:26:38 -05:00
2021-07-12 23:17:54 -04:00
CALL(/*arg*/ LVL_INTRO_PLAY_ITS_A_ME_MARIO, /*func*/ lvl_intro_update),
2019-11-03 14:36:27 -05:00
SLEEP(/*frames*/ 75),
2019-12-01 21:52:53 -05:00
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_INTO_COLOR, /*time*/ 16, /*color*/ 0x00, 0x00, 0x00),
2019-11-03 14:36:27 -05:00
SLEEP(/*frames*/ 16),
#endif
2019-11-03 14:36:27 -05:00
CMD2A(/*unk2*/ 1),
CLEAR_LEVEL(),
SLEEP(/*frames*/ 2),
2021-08-22 13:39:47 +01:00
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_mario_head_regular, _introSegmentBssStart, _introSegmentBssEnd),
2019-11-03 14:36:27 -05:00
};
2020-12-03 14:26:38 -05:00
const LevelScript level_intro_mario_head_regular[] = {
INIT_LEVEL(),
2019-11-03 14:36:27 -05:00
BLACKOUT(/*active*/ TRUE),
FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd),
2021-10-12 18:53:59 -07:00
#ifdef KEEP_MARIO_HEAD
LOAD_MARIO_HEAD(/*loadHeadID*/ REGULAR_FACE),
2019-11-03 14:36:27 -05:00
LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
LOAD_YAY0_TEXTURE(/*seg*/ 0x0A, _title_screen_bg_yay0SegmentRomStart, _title_screen_bg_yay0SegmentRomEnd),
2020-12-03 14:26:38 -05:00
2019-11-03 14:36:27 -05:00
ALLOC_LEVEL_POOL(),
2020-12-03 14:26:38 -05:00
AREA(/*index*/ 1, intro_geo_mario_head_regular),
2019-11-03 14:36:27 -05:00
END_AREA(),
FREE_LEVEL_POOL(),
2020-12-03 14:26:38 -05:00
2019-11-03 14:36:27 -05:00
SLEEP(/*frames*/ 2),
BLACKOUT(/*active*/ FALSE),
LOAD_AREA(/*area*/ 1),
2021-07-12 23:17:54 -04:00
SET_MENU_MUSIC(/*seq*/ SEQ_MENU_TITLE_SCREEN),
2019-12-01 21:52:53 -05:00
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_FROM_STAR, /*time*/ 20, /*color*/ 0x00, 0x00, 0x00),
2019-11-03 14:36:27 -05:00
SLEEP(/*frames*/ 20),
2021-10-12 18:53:59 -07:00
#else
2021-09-24 17:28:02 +01:00
BLACKOUT(/*active*/ FALSE),
#endif
2021-07-12 23:17:54 -04:00
CALL_LOOP(/*arg*/ LVL_INTRO_REGULAR, /*func*/ lvl_intro_update),
JUMP_IF(/*op*/ OP_EQ, /*arg*/ LEVEL_FILE_SELECT, script_intro_file_select),
JUMP_IF(/*op*/ OP_EQ, /*arg*/ LEVEL_LEVEL_SELECT, script_intro_level_select),
JUMP(script_intro_main_level_entry),
2019-11-03 14:36:27 -05:00
};
2020-12-03 14:26:38 -05:00
const LevelScript level_intro_mario_head_dizzy[] = {
2019-11-03 14:36:27 -05:00
INIT_LEVEL(),
BLACKOUT(/*active*/ TRUE),
FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd),
#ifdef KEEP_MARIO_HEAD
LOAD_MARIO_HEAD(/*loadHeadID*/ DIZZY_FACE),
#endif
2019-11-03 14:36:27 -05:00
LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
LOAD_YAY0_TEXTURE(/*seg*/ 0x0A, _title_screen_bg_yay0SegmentRomStart, _title_screen_bg_yay0SegmentRomEnd),
2019-11-03 14:36:27 -05:00
ALLOC_LEVEL_POOL(),
2020-12-03 14:26:38 -05:00
AREA(/*index*/ 1, intro_geo_mario_head_dizzy),
2019-11-03 14:36:27 -05:00
END_AREA(),
FREE_LEVEL_POOL(),
SLEEP(/*frames*/ 2),
BLACKOUT(/*active*/ FALSE),
LOAD_AREA(/*area*/ 1),
2021-07-12 23:17:54 -04:00
SET_MENU_MUSIC(/*seq*/ SEQ_MENU_GAME_OVER),
2019-12-01 21:52:53 -05:00
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_FROM_STAR, /*time*/ 20, /*color*/ 0x00, 0x00, 0x00),
2019-11-03 14:36:27 -05:00
SLEEP(/*frames*/ 20),
2021-07-12 23:17:54 -04:00
CALL_LOOP(/*arg*/ LVL_INTRO_GAME_OVER, /*func*/ lvl_intro_update),
JUMP_IF(/*op*/ OP_EQ, /*arg*/ LEVEL_FILE_SELECT, script_intro_file_select),
JUMP_IF(/*op*/ OP_EQ, /*arg*/ LEVEL_LEVEL_SELECT, script_intro_level_select),
JUMP(script_intro_main_level_entry),
2019-11-03 14:36:27 -05:00
};
const LevelScript level_intro_entry_level_select[] = {
2019-11-03 14:36:27 -05:00
INIT_LEVEL(),
LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
LOAD_YAY0_TEXTURE(/*seg*/ 0x0A, _title_screen_bg_yay0SegmentRomStart, _title_screen_bg_yay0SegmentRomEnd),
LOAD_YAY0(/*seg*/ 0x07, _debug_level_select_yay0SegmentRomStart, _debug_level_select_yay0SegmentRomEnd),
2019-11-03 14:36:27 -05:00
FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd),
ALLOC_LEVEL_POOL(),
AREA(/*index*/ 1, intro_geo_debug_level_select),
2019-11-03 14:36:27 -05:00
END_AREA(),
FREE_LEVEL_POOL(),
LOAD_AREA(/*area*/ 1),
2021-07-12 23:17:54 -04:00
SET_MENU_MUSIC(/*seq*/ SEQ_MENU_TITLE_SCREEN),
2019-12-01 21:52:53 -05:00
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_FROM_COLOR, /*time*/ 16, /*color*/ 0xFF, 0xFF, 0xFF),
2019-11-03 14:36:27 -05:00
SLEEP(/*frames*/ 16),
2021-07-12 23:17:54 -04:00
CALL_LOOP(/*arg*/ LVL_INTRO_LEVEL_SELECT, /*func*/ lvl_intro_update),
JUMP_IF(/*op*/ OP_EQ, /*arg*/ LEVEL_RESTART_GAME, script_intro_splash_screen),
JUMP(script_intro_main_level_entry_stop_music),
2019-11-03 14:36:27 -05:00
};
// These should be static, but C doesn't allow non-sized forward declarations of static arrays
const LevelScript script_intro_file_select[] = {
2019-11-03 14:36:27 -05:00
STOP_MUSIC(/*fadeOutTime*/ 0x00BE),
2019-12-01 21:52:53 -05:00
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_INTO_COLOR, /*time*/ 16, /*color*/ 0xFF, 0xFF, 0xFF),
2019-11-03 14:36:27 -05:00
SLEEP(/*frames*/ 16),
CLEAR_LEVEL(),
SLEEP(/*frames*/ 2),
2021-10-14 18:48:16 -07:00
SET_REG(/*value*/ START_LEVEL),
EXIT_AND_EXECUTE(/*seg*/ 0x14, _menuSegmentRomStart, _menuSegmentRomEnd, level_main_menu_entry_file_select),
2019-11-03 14:36:27 -05:00
};
const LevelScript script_intro_level_select[] = {
2019-12-01 21:52:53 -05:00
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_INTO_COLOR, /*time*/ 16, /*color*/ 0xFF, 0xFF, 0xFF),
2019-11-03 14:36:27 -05:00
SLEEP(/*frames*/ 16),
CLEAR_LEVEL(),
SLEEP(/*frames*/ 2),
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_entry_level_select, _introSegmentBssStart, _introSegmentBssEnd),
2019-11-03 14:36:27 -05:00
};
const LevelScript script_intro_main_level_entry_stop_music[] = {
2019-11-03 14:36:27 -05:00
STOP_MUSIC(/*fadeOutTime*/ 0x00BE),
JUMP(script_intro_main_level_entry),
};
const LevelScript script_intro_main_level_entry[] = {
2019-12-01 21:52:53 -05:00
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_INTO_COLOR, /*time*/ 16, /*color*/ 0xFF, 0xFF, 0xFF),
2019-11-03 14:36:27 -05:00
SLEEP(/*frames*/ 16),
CLEAR_LEVEL(),
SLEEP(/*frames*/ 2),
EXIT_AND_EXECUTE(/*seg*/ 0x15, _scriptsSegmentRomStart, _scriptsSegmentRomEnd, level_main_scripts_entry),
};
const LevelScript script_intro_splash_screen[] = {
2019-11-03 14:36:27 -05:00
STOP_MUSIC(/*fadeOutTime*/ 0x00BE),
2019-12-01 21:52:53 -05:00
TRANSITION(/*transType*/ WARP_TRANSITION_FADE_INTO_COLOR, /*time*/ 16, /*color*/ 0x00, 0x00, 0x00),
2019-11-03 14:36:27 -05:00
SLEEP(/*frames*/ 16),
CLEAR_LEVEL(),
SLEEP(/*frames*/ 2),
2021-08-22 13:39:47 +01:00
EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_splash_screen, _introSegmentBssStart, _introSegmentBssEnd),
2019-11-03 14:36:27 -05:00
};