diff --git a/levels/hmc/areas/1/geo.inc.c b/levels/hmc/areas/1/geo.inc.c index 5a2baac0d..7c6d9b370 100644 --- a/levels/hmc/areas/1/geo.inc.c +++ b/levels/hmc/areas/1/geo.inc.c @@ -152,7 +152,7 @@ const GeoLayout hmc_geo_000850[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_07014C00), GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07014E48), GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0702, geo_movtex_draw_water_regions), + GEO_ASM(HMC_MOVTEX_TOXIC_MAZE_MIST, geo_movtex_draw_water_regions), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -189,7 +189,7 @@ const GeoLayout hmc_geo_000938[] = { GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701A080), GEO_DISPLAY_LIST(LAYER_ALPHA, hmc_seg7_dl_0701A400), GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0702, geo_movtex_draw_water_regions), + GEO_ASM(HMC_MOVTEX_TOXIC_MAZE_MIST, geo_movtex_draw_water_regions), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -210,8 +210,8 @@ const GeoLayout hmc_geo_000998[] = { GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F818), GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701FD58), GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0701, geo_movtex_draw_water_regions), - GEO_ASM(0x0702, geo_movtex_draw_water_regions), + GEO_ASM(HMC_MOVTEX_DORRIE_POOL_WATER, geo_movtex_draw_water_regions), + GEO_ASM(HMC_MOVTEX_TOXIC_MAZE_MIST, geo_movtex_draw_water_regions), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -231,7 +231,7 @@ const GeoLayout hmc_geo_000A18[] = { GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_0701F818), GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_0701FD58), GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0701, geo_movtex_draw_water_regions), + GEO_ASM(HMC_MOVTEX_DORRIE_POOL_WATER, geo_movtex_draw_water_regions), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -249,7 +249,7 @@ const GeoLayout hmc_geo_000A88[] = { GEO_ASM( 0, geo_painting_update), GEO_ASM( PAINTING_ID(0, 0), geo_painting_draw), GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0701, geo_movtex_draw_water_regions), + GEO_ASM(HMC_MOVTEX_DORRIE_POOL_WATER, geo_movtex_draw_water_regions), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -267,7 +267,7 @@ const GeoLayout hmc_geo_000AE8[] = { GEO_DISPLAY_LIST(LAYER_TRANSPARENT, hmc_seg7_dl_07021BA0), GEO_DISPLAY_LIST(LAYER_OPAQUE, hmc_seg7_dl_070228A0), GEO_ASM( 0, geo_movtex_pause_control), - GEO_ASM(0x0701, geo_movtex_draw_water_regions), + GEO_ASM(HMC_MOVTEX_DORRIE_POOL_WATER, geo_movtex_draw_water_regions), GEO_CLOSE_NODE(), GEO_RETURN(), }; @@ -289,7 +289,7 @@ const GeoLayout hmc_geo_000B48[] = { // 0x0E000B90 const GeoLayout hmc_geo_000B90[] = { - GEO_NODE_SCREEN_AREA(10, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_NODE_SCREEN_AREA(10, SCREEN_CENTER_X, SCREEN_CENTER_Y, SCREEN_CENTER_X, SCREEN_CENTER_Y), GEO_OPEN_NODE(), GEO_ZBUFFER(0), GEO_OPEN_NODE(), @@ -302,7 +302,7 @@ const GeoLayout hmc_geo_000B90[] = { GEO_OPEN_NODE(), GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov), GEO_OPEN_NODE(), - GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main), + GEO_CAMERA(CAMERA_MODE_FREE_ROAM, 0, 2000, 6000, 0, 0, 0, geo_camera_main), GEO_OPEN_NODE(), GEO_SWITCH_CASE(18, geo_switch_area), GEO_OPEN_NODE(), @@ -326,7 +326,7 @@ const GeoLayout hmc_geo_000B90[] = { GEO_BRANCH(1, hmc_geo_000B48), // 0x0E000B48 GEO_CLOSE_NODE(), GEO_RENDER_OBJ(), - GEO_ASM(0, geo_envfx_main), + GEO_ASM(ENVFX_MODE_NONE, geo_envfx_main), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), diff --git a/levels/hmc/areas/1/trajectory.inc.c b/levels/hmc/areas/1/trajectory.inc.c index 7e945c220..2b1a0d6a5 100644 --- a/levels/hmc/areas/1/trajectory.inc.c +++ b/levels/hmc/areas/1/trajectory.inc.c @@ -1,5 +1,5 @@ // 0x0702B86C - 0x0702B8E0 -const Trajectory hmc_seg7_trajectory_0702B86C[] = { +const Trajectory hmc_seg7_trajectory_checkerboard_platform[] = { TRAJECTORY_POS(0, /*pos*/ 1272, 2000, 5120), TRAJECTORY_POS(1, /*pos*/ 1272, 2000, 3500), TRAJECTORY_POS(2, /*pos*/ 1800, 2100, 3000), diff --git a/levels/hmc/grill_door/collision.inc.c b/levels/hmc/grill_door/collision.inc.c index 87046ae3b..e84ac5ef8 100644 --- a/levels/hmc/grill_door/collision.inc.c +++ b/levels/hmc/grill_door/collision.inc.c @@ -1,5 +1,5 @@ // 0x0702B65C - 0x0702B6E0 -const Collision hmc_seg7_collision_0702B65C[] = { +const Collision hmc_seg7_collision_grill_door[] = { COL_INIT(), COL_VERTEX_INIT(0x8), COL_VERTEX(410, 0, 51), diff --git a/levels/hmc/header.h b/levels/hmc/header.h index 68ed2f64c..9ff10e5f3 100644 --- a/levels/hmc/header.h +++ b/levels/hmc/header.h @@ -80,10 +80,10 @@ extern const Collision hmc_seg7_collision_level[]; extern const MacroObject hmc_seg7_macro_objs[]; extern const RoomData hmc_seg7_rooms[]; extern const Collision hmc_seg7_collision_elevator[]; -extern const Collision hmc_seg7_collision_0702B65C[]; +extern const Collision hmc_seg7_collision_grill_door[]; extern const Collision hmc_seg7_collision_controllable_platform[]; extern const Collision hmc_seg7_collision_controllable_platform_sub[]; -extern const Trajectory hmc_seg7_trajectory_0702B86C[]; +extern const Trajectory hmc_seg7_trajectory_checkerboard_platform[]; extern const struct MovtexQuadCollection hmc_movtex_dorrie_pool_water[]; extern const struct MovtexQuadCollection hmc_movtex_toxic_maze_mist[]; diff --git a/levels/intro/geo.c b/levels/intro/geo.c index 13f8e5117..c99074100 100644 --- a/levels/intro/geo.c +++ b/levels/intro/geo.c @@ -19,7 +19,7 @@ // 0x0E0002D0 const GeoLayout intro_geo_splash_screen[] = { - GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_NODE_SCREEN_AREA(0, SCREEN_CENTER_X, SCREEN_CENTER_Y, SCREEN_CENTER_X, SCREEN_CENTER_Y), GEO_OPEN_NODE(), GEO_ZBUFFER(0), GEO_OPEN_NODE(), @@ -32,9 +32,12 @@ const GeoLayout intro_geo_splash_screen[] = { GEO_OPEN_NODE(), GEO_CAMERA_FRUSTUM(45, 128, 16384), GEO_OPEN_NODE(), - GEO_CAMERA(0, 0, 0, 3200, 0, 0, 0, 0x00000000), + GEO_CAMERA(CAMERA_MODE_NONE, 0, 0, 3200, 0, 0, 0, 0x00000000), GEO_OPEN_NODE(), GEO_ASM(0, geo_intro_super_mario_64_logo), +#if defined(HD_INTRO_TEXTURES) && defined(FLOOMBAS) + GEO_RENDER_OBJ(), +#endif GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), GEO_CLOSE_NODE(), @@ -48,7 +51,7 @@ const GeoLayout intro_geo_splash_screen[] = { // 0x0E00035C const GeoLayout intro_geo_mario_head_regular[] = { - GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_NODE_SCREEN_AREA(0, SCREEN_CENTER_X, SCREEN_CENTER_Y, SCREEN_CENTER_X, SCREEN_CENTER_Y), GEO_OPEN_NODE(), GEO_ZBUFFER(0), GEO_OPEN_NODE(), @@ -72,7 +75,7 @@ const GeoLayout intro_geo_mario_head_regular[] = { #if ENABLE_RUMBLE GEO_ZBUFFER(0), GEO_OPEN_NODE(), - GEO_ASM(0, geo_intro_rumble_pak_graphic), + GEO_ASM(INTRO_CONTEXT_NORMAL, geo_intro_rumble_pak_graphic), GEO_CLOSE_NODE(), #endif GEO_CLOSE_NODE(), @@ -81,7 +84,7 @@ const GeoLayout intro_geo_mario_head_regular[] = { // 0x0E0003B8 const GeoLayout intro_geo_mario_head_dizzy[] = { - GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_NODE_SCREEN_AREA(0, SCREEN_CENTER_X, SCREEN_CENTER_Y, SCREEN_CENTER_X, SCREEN_CENTER_Y), GEO_OPEN_NODE(), GEO_ZBUFFER(0), GEO_OPEN_NODE(), @@ -105,7 +108,7 @@ const GeoLayout intro_geo_mario_head_dizzy[] = { #if ENABLE_RUMBLE GEO_ZBUFFER(0), GEO_OPEN_NODE(), - GEO_ASM(1, geo_intro_rumble_pak_graphic), + GEO_ASM(INTRO_CONTEXT_GAME_OVER, geo_intro_rumble_pak_graphic), GEO_CLOSE_NODE(), #endif GEO_CLOSE_NODE(), @@ -114,7 +117,7 @@ const GeoLayout intro_geo_mario_head_dizzy[] = { // 0x0E000414 const GeoLayout intro_geo_debug_level_select[] = { - GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2), + GEO_NODE_SCREEN_AREA(0, SCREEN_CENTER_X, SCREEN_CENTER_Y, SCREEN_CENTER_X, SCREEN_CENTER_Y), GEO_OPEN_NODE(), GEO_ZBUFFER(0), GEO_OPEN_NODE(), @@ -127,7 +130,7 @@ const GeoLayout intro_geo_debug_level_select[] = { GEO_OPEN_NODE(), GEO_CAMERA_FRUSTUM(45, 128, 16384), GEO_OPEN_NODE(), - GEO_CAMERA(0, 0, 0, 1200, 0, 0, 0, 0x00000000), + GEO_CAMERA(CAMERA_MODE_NONE, 0, 0, 1200, 0, 0, 0, 0x00000000), GEO_OPEN_NODE(), GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, -230, 300, 0, debug_level_select_dl_07000858), GEO_TRANSLATE_NODE_WITH_DL(LAYER_OPAQUE, -120, 300, 0, debug_level_select_dl_07001100), diff --git a/levels/intro/leveldata.c b/levels/intro/leveldata.c index c8cbb4010..1b64b93b4 100644 --- a/levels/intro/leveldata.c +++ b/levels/intro/leveldata.c @@ -3318,64 +3318,114 @@ const Gfx intro_seg7_dl_main_logo[] = { }; // 0x0700B420 - 0x0700B460 -static const Vtx intro_seg7_vertex_0700B420[] = { - {{{ 96, 42, -1}, 0, { 0, 512}, {0xff, 0xff, 0xff, 0xff}}}, - {{{ 224, 42, -1}, 0, { 4096, 512}, {0xff, 0xff, 0xff, 0xff}}}, - {{{ 224, 58, -1}, 0, { 4096, 0}, {0xff, 0xff, 0xff, 0xff}}}, - {{{ 96, 58, -1}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}}, +static const Vtx intro_seg7_vertex_copyright[] = { +#ifdef HD_INTRO_TEXTURES + {{{ 80, 60, -1}, 0, { 0, 0}, {0x00, 0xff, 0xf7, 0xff}}}, // 0 + {{{ 240, 60, -1}, 0, {256<<5, 0}, {0x00, 0xff, 0xf7, 0xff}}}, // 1 + + {{{ 80, 48, -1}, 0, { 0, 16<<5}, {0x00, 0xff, 0xff, 0xff}}}, // 2 + {{{ 240, 48, -1}, 0, {256<<5, 16<<5}, {0x00, 0xff, 0xff, 0xff}}}, // 3 + + {{{ 80, 36, -1}, 0, { 0, 32<<5}, {0x00, 0x7f, 0xff, 0xff}}}, // 4 + {{{ 240, 36, -1}, 0, {256<<5, 32<<5}, {0x00, 0x7f, 0xff, 0xff}}}, // 5 +#else + {{{ 96, 58, -1}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}}, // 0 + {{{ 224, 58, -1}, 0, {128<<5, 0}, {0xff, 0xff, 0xff, 0xff}}}, // 1 + {{{ 96, 42, -1}, 0, { 0, 16<<5}, {0xff, 0xff, 0xff, 0xff}}}, // 2 + {{{ 224, 42, -1}, 0, {128<<5, 16<<5}, {0xff, 0xff, 0xff, 0xff}}}, // 3 +#endif }; // 0x0700B460 - 0x0700B4A0 -static const Vtx intro_seg7_vertex_0700B460[] = { - {{{ 268, 180, -1}, 0, { 0, 512}, {0xff, 0xff, 0xff, 0xff}}}, - {{{ 284, 180, -1}, 0, { 544, 512}, {0xff, 0xff, 0xff, 0xff}}}, - {{{ 284, 196, -1}, 0, { 544, 0}, {0xff, 0xff, 0xff, 0xff}}}, - {{{ 268, 196, -1}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}}, +static const Vtx intro_seg7_vertex_trademark[] = { +#ifdef HD_INTRO_TEXTURES + {{{ 268, 192, -1}, 0, { 0, 0}, {0x00, 0xff, 0xf7, 0xff}}}, // 0 + {{{ 284, 192, -1}, 0, { 64<<5, 0}, {0x00, 0xff, 0xf7, 0xff}}}, // 1 + + {{{ 268, 184, -1}, 0, { 0, 32<<5}, {0x00, 0xff, 0xff, 0xff}}}, // 2 + {{{ 284, 184, -1}, 0, { 64<<5, 32<<5}, {0x00, 0xff, 0xff, 0xff}}}, // 3 + + {{{ 268, 176, -1}, 0, { 0, 64<<5}, {0x00, 0x7f, 0xff, 0xff}}}, // 4 + {{{ 284, 176, -1}, 0, { 64<<5, 64<<5}, {0x00, 0x7f, 0xff, 0xff}}}, // 5 +#else + {{{ 268, 196, -1}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}}, // 0 + {{{ 284, 196, -1}, 0, { 544, 0}, {0xff, 0xff, 0xff, 0xff}}}, // 1 + {{{ 268, 180, -1}, 0, { 0, 512}, {0xff, 0xff, 0xff, 0xff}}}, // 2 + {{{ 284, 180, -1}, 0, { 544, 512}, {0xff, 0xff, 0xff, 0xff}}}, // 3 +#endif }; +#ifdef HD_INTRO_TEXTURES +// 0x0700B4A0 - 0x0700B4A2 +ALIGNED8 static const Texture intro_seg7_texture_copyright[] = { +#include "levels/intro/made_with_hackersm64.custom.i4.inc.c" +}; +// 0x0700C4A0 - 0x0700D4A0 +ALIGNED8 static const Texture intro_seg7_texture_trademark[] = { +#include "levels/intro/tm.custom.i4.inc.c" +}; +#else + #if defined(VERSION_EU) || defined(VERSION_SH) // 0x0700B4A0 - 0x0700B4A2 -ALIGNED8 static const Texture intro_seg7_texture_0700B4A0[] = { +ALIGNED8 static const Texture intro_seg7_texture_copyright[] = { #include "levels/intro/2_eu_copyright.rgba16.inc.c" }; - #else // 0x0700B4A0 - 0x0700B4A2 -ALIGNED8 static const Texture intro_seg7_texture_0700B4A0[] = { -#include "levels/intro/made_with_hackersm64.custom.rgba16.inc.c" +ALIGNED8 static const Texture intro_seg7_texture_copyright[] = { +#include "levels/intro/2_copyright.rgba16.inc.c" }; #endif #if defined(VERSION_EU) // 0x0700C4A0 - 0x0700D4A0 -ALIGNED8 static const Texture intro_seg7_texture_0700C4A0[] = { +ALIGNED8 static const Texture intro_seg7_texture_trademark[] = { #include "levels/intro/3_eu_tm.rgba16.inc.c" }; #elif defined(VERSION_SH) -ALIGNED8 static const Texture intro_seg7_texture_0700C4A0[] = { +ALIGNED8 static const Texture intro_seg7_texture_trademark[] = { #include "levels/intro/3_sh_tm.rgba16.inc.c" }; #else // 0x0700C4A0 - 0x0700D4A0 -ALIGNED8 static const Texture intro_seg7_texture_0700C4A0[] = { +ALIGNED8 static const Texture intro_seg7_texture_trademark[] = { #include "levels/intro/3_tm.rgba16.inc.c" }; #endif +#endif + // 0x0700C6A0 - 0x0700C790 const Gfx intro_seg7_dl_copyright_trademark[] = { gsDPPipeSync(), +#ifdef HD_INTRO_TEXTURES + gsDPSetCombineMode(G_CC_MODULATEFADE, G_CC_MODULATEFADE), +#else gsDPSetCombineMode(G_CC_DECALFADE, G_CC_DECALFADE), +#endif gsDPSetTextureFilter(G_TF_POINT), gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPLoadTextureBlock(intro_seg7_texture_0700B4A0, G_IM_FMT_RGBA, G_IM_SIZ_16b, 128, 16, 0, G_TX_CLAMP, G_TX_CLAMP, 7, 4, G_TX_NOLOD, G_TX_NOLOD), - gsSPVertex(intro_seg7_vertex_0700B420, 4, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), - - gsDPLoadTextureBlock(intro_seg7_texture_0700C4A0, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 16, 0, G_TX_CLAMP, G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD), - gsSPVertex(intro_seg7_vertex_0700B460, 4, 0), - gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), +#ifdef HD_INTRO_TEXTURES + gsDPLoadTextureBlock_4b(intro_seg7_texture_copyright, G_IM_FMT_I, 256, 32, (G_TX_NOMIRROR | G_TX_CLAMP), (G_TX_NOMIRROR | G_TX_CLAMP), 0, 8, 5, G_TX_NOLOD, G_TX_NOLOD), + gsSPVertex(intro_seg7_vertex_copyright, 6, 0), + gsSP2Triangles( 0, 3, 1, 0x0, 0, 2, 3, 0x0), + gsSP2Triangles( 2, 5, 3, 0x0, 2, 4, 5, 0x0), + + gsDPLoadTextureBlock_4b(intro_seg7_texture_trademark, G_IM_FMT_I, 64, 64, (G_TX_NOMIRROR | G_TX_CLAMP), (G_TX_NOMIRROR | G_TX_CLAMP), 0, 6, 6, G_TX_NOLOD, G_TX_NOLOD), + gsSPVertex(intro_seg7_vertex_trademark, 6, 0), + gsSP2Triangles( 0, 3, 1, 0x0, 0, 2, 3, 0x0), + gsSP2Triangles( 2, 5, 3, 0x0, 2, 4, 5, 0x0), +#else + gsDPLoadTextureBlock(intro_seg7_texture_copyright, G_IM_FMT_RGBA, G_IM_SIZ_16b, 128, 16, 0, G_TX_CLAMP, G_TX_CLAMP, 7, 4, G_TX_NOLOD, G_TX_NOLOD), + gsSPVertex(intro_seg7_vertex_copyright, 4, 0), + gsSP2Triangles( 0, 3, 1, 0x0, 0, 2, 3, 0x0), + + gsDPLoadTextureBlock(intro_seg7_texture_trademark, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 16, 0, G_TX_CLAMP, G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD), + gsSPVertex(intro_seg7_vertex_trademark, 4, 0), + gsSP2Triangles( 0, 3, 1, 0x0, 0, 2, 3, 0x0), +#endif gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), gsDPPipeSync(), diff --git a/levels/intro/made_with_hackersm64.custom.i4.png b/levels/intro/made_with_hackersm64.custom.i4.png new file mode 100644 index 000000000..d353ec6ce Binary files /dev/null and b/levels/intro/made_with_hackersm64.custom.i4.png differ diff --git a/levels/intro/script.c b/levels/intro/script.c index 04ef71d20..6df32e302 100644 --- a/levels/intro/script.c +++ b/levels/intro/script.c @@ -13,6 +13,7 @@ #include "levels/scripts.h" #include "levels/menu/header.h" +#include "actors/common0.h" #include "actors/common1.h" #include "make_const_nonconst.h" @@ -22,15 +23,44 @@ #include "config.h" #include "game/print.h" +#include "game/object_list_processor.h" + const LevelScript level_intro_splash_screen[] = { INIT_LEVEL(), #ifdef SKIP_TITLE_SCREEN - EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_mario_head_regular, _introSegmentBssStart, _introSegmentBssEnd), + EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ SEGMENT_MENU_INTRO, _introSegmentRomStart, _introSegmentRomEnd, level_intro_mario_head_regular, _introSegmentBssStart, _introSegmentBssEnd), #endif - FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd), - LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), - LOAD_YAY0(/*seg*/ 0x07, _intro_segment_7SegmentRomStart, _intro_segment_7SegmentRomEnd), + LOAD_GODDARD(), + LOAD_BEHAVIOR_DATA(), + LOAD_LEVEL_DATA(intro), +#if defined(HD_INTRO_TEXTURES) && defined(FLOOMBAS) + LOAD_COMMON0(), + // Load "Super Mario 64" logo + ALLOC_LEVEL_POOL(), + LOAD_MODEL_FROM_GEO(MODEL_GOOMBA, goomba_geo), + AREA(/*index*/ 1, intro_geo_splash_screen), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ -570, -480, 1500, /*angle*/ 0, 50, 0, /*behParam*/ BP(0x18, 0x00, 0x10, 0x0B), /*beh*/ bhvFloombaStartup), + OBJECT(/*model*/ MODEL_GOOMBA, /*pos*/ 570, -480, 1500, /*angle*/ 0, -50, 0, /*behParam*/ BP(0x18, 0x00, 0x90, 0x0B), /*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), + 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), + UPDATE_OBJECTS(), + SLEEP(/*frames*/ 1), + JUMP_N_TIMES(), +#else // Load "Super Mario 64" logo ALLOC_LEVEL_POOL(), AREA(/*index*/ 1, intro_geo_splash_screen), @@ -44,21 +74,21 @@ const LevelScript level_intro_splash_screen[] = { SLEEP(/*frames*/ 75), TRANSITION(/*transType*/ WARP_TRANSITION_FADE_INTO_COLOR, /*time*/ 16, /*color*/ 0x00, 0x00, 0x00), SLEEP(/*frames*/ 16), - CMD2A(/*unk2*/ 1), +#endif + UNLOAD_AREA(/*area*/ 1), CLEAR_LEVEL(), SLEEP(/*frames*/ 2), - EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_mario_head_regular, _introSegmentBssStart, _introSegmentBssEnd), + EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ SEGMENT_MENU_INTRO, _introSegmentRomStart, _introSegmentRomEnd, level_intro_mario_head_regular, _introSegmentBssStart, _introSegmentBssEnd), }; const LevelScript level_intro_mario_head_regular[] = { - INIT_LEVEL(), BLACKOUT(/*active*/ TRUE), - FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd), - #ifdef KEEP_MARIO_HEAD + LOAD_GODDARD(), +#ifdef KEEP_MARIO_HEAD LOAD_MARIO_HEAD(/*loadHeadID*/ REGULAR_FACE), - LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), - LOAD_YAY0_TEXTURE(/*seg*/ 0x0A, _title_screen_bg_yay0SegmentRomStart, _title_screen_bg_yay0SegmentRomEnd), + LOAD_BEHAVIOR_DATA(), + LOAD_TITLE_SCREEN_BG(), ALLOC_LEVEL_POOL(), AREA(/*index*/ 1, intro_geo_mario_head_regular), @@ -71,7 +101,7 @@ const LevelScript level_intro_mario_head_regular[] = { SET_MENU_MUSIC(/*seq*/ SEQ_MENU_TITLE_SCREEN), TRANSITION(/*transType*/ WARP_TRANSITION_FADE_FROM_STAR, /*time*/ 20, /*color*/ 0x00, 0x00, 0x00), SLEEP(/*frames*/ 20), - #else +#else BLACKOUT(/*active*/ FALSE), #endif CALL_LOOP(/*arg*/ LVL_INTRO_REGULAR, /*func*/ lvl_intro_update), @@ -83,12 +113,12 @@ const LevelScript level_intro_mario_head_regular[] = { const LevelScript level_intro_mario_head_dizzy[] = { INIT_LEVEL(), BLACKOUT(/*active*/ TRUE), - FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd), + LOAD_GODDARD(), #ifdef KEEP_MARIO_HEAD LOAD_MARIO_HEAD(/*loadHeadID*/ DIZZY_FACE), #endif - LOAD_RAW(/*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), - LOAD_YAY0_TEXTURE(/*seg*/ 0x0A, _title_screen_bg_yay0SegmentRomStart, _title_screen_bg_yay0SegmentRomEnd), + LOAD_BEHAVIOR_DATA(), + LOAD_TITLE_SCREEN_BG(), ALLOC_LEVEL_POOL(), AREA(/*index*/ 1, intro_geo_mario_head_dizzy), @@ -109,9 +139,9 @@ const LevelScript level_intro_mario_head_dizzy[] = { const LevelScript level_intro_entry_level_select[] = { 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), + LOAD_BEHAVIOR_DATA(), + LOAD_TITLE_SCREEN_BG(), + LOAD_YAY0(/*seg*/ SEGMENT_LEVEL_DATA, _debug_level_select_yay0SegmentRomStart, _debug_level_select_yay0SegmentRomEnd), FIXED_LOAD(/*loadAddr*/ _goddardSegmentStart, /*romStart*/ _goddardSegmentRomStart, /*romEnd*/ _goddardSegmentRomEnd), ALLOC_LEVEL_POOL(), @@ -136,8 +166,8 @@ const LevelScript script_intro_file_select[] = { SLEEP(/*frames*/ 16), CLEAR_LEVEL(), SLEEP(/*frames*/ 2), - SET_REG(/*value*/ 16), - EXIT_AND_EXECUTE(/*seg*/ 0x14, _menuSegmentRomStart, _menuSegmentRomEnd, level_main_menu_entry_file_select), + SET_REG(/*value*/ START_LEVEL), + EXIT_AND_EXECUTE(/*seg*/ SEGMENT_MENU_INTRO, _menuSegmentRomStart, _menuSegmentRomEnd, level_main_menu_entry_file_select), }; const LevelScript script_intro_level_select[] = { @@ -145,7 +175,7 @@ const LevelScript script_intro_level_select[] = { SLEEP(/*frames*/ 16), CLEAR_LEVEL(), SLEEP(/*frames*/ 2), - EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_entry_level_select, _introSegmentBssStart, _introSegmentBssEnd), + EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ SEGMENT_MENU_INTRO, _introSegmentRomStart, _introSegmentRomEnd, level_intro_entry_level_select, _introSegmentBssStart, _introSegmentBssEnd), }; const LevelScript script_intro_main_level_entry_stop_music[] = { @@ -158,7 +188,7 @@ const LevelScript script_intro_main_level_entry[] = { SLEEP(/*frames*/ 16), CLEAR_LEVEL(), SLEEP(/*frames*/ 2), - EXIT_AND_EXECUTE(/*seg*/ 0x15, _scriptsSegmentRomStart, _scriptsSegmentRomEnd, level_main_scripts_entry), + EXIT_AND_EXECUTE(/*seg*/ SEGMENT_GLOBAL_LEVEL_SCRIPT, _scriptsSegmentRomStart, _scriptsSegmentRomEnd, level_main_scripts_entry), }; const LevelScript script_intro_splash_screen[] = { @@ -167,5 +197,5 @@ const LevelScript script_intro_splash_screen[] = { SLEEP(/*frames*/ 16), CLEAR_LEVEL(), SLEEP(/*frames*/ 2), - EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_splash_screen, _introSegmentBssStart, _introSegmentBssEnd), + EXIT_AND_EXECUTE_WITH_CODE(/*seg*/ SEGMENT_MENU_INTRO, _introSegmentRomStart, _introSegmentRomEnd, level_intro_splash_screen, _introSegmentBssStart, _introSegmentBssEnd), }; diff --git a/levels/intro/tm.custom.i4.png b/levels/intro/tm.custom.i4.png new file mode 100644 index 000000000..9bcff5b08 Binary files /dev/null and b/levels/intro/tm.custom.i4.png differ