diff --git a/Makefile.split b/Makefile.split index 73feff12..a65df8dd 100644 --- a/Makefile.split +++ b/Makefile.split @@ -71,6 +71,10 @@ MARIO_DIRS := mario bubble walk_smoke burn_smoke stomp_smoke water_wave sp CUSTOM_DIRS := luigi_cap ZCUSTOM_DIRS := luigi +# Add Toad +CUSTOM_DIRS += toad_cap +ZCUSTOM_DIRS += toad_player + # Actor Files CUSTOM_FILES := $(foreach dir,$(addprefix $(ACTOR_DIR)/,$(CUSTOM_DIRS)),$(patsubst %.png,%.inc.c,$(wildcard $(dir)/*.png))) AMP_CHUCKYA_FILES := $(foreach dir,$(addprefix $(ACTOR_DIR)/,$(AMP_DIRS)),$(patsubst %.png,%.inc.c,$(wildcard $(dir)/*.png))) diff --git a/actors/custom0.h b/actors/custom0.h index b06e49d5..8c5fb2d9 100644 --- a/actors/custom0.h +++ b/actors/custom0.h @@ -23,4 +23,9 @@ extern const Gfx luigi_cap_seg3_dl_03023108[]; extern const Gfx luigi_cap_seg3_dl_03023160[]; extern const Gfx luigi_cap_seg3_dl_03023298[]; +// toad_cap +extern const GeoLayout toads_cap_geo[]; +extern const GeoLayout toads_metal_cap_geo[]; +extern const GeoLayout toads_wing_cap_geo[]; + #endif diff --git a/actors/custom0_geo.c b/actors/custom0_geo.c index 7522ea4b..429e1d40 100644 --- a/actors/custom0_geo.c +++ b/actors/custom0_geo.c @@ -5,3 +5,4 @@ #include "custom0.h" #include "luigi_cap/geo.inc.c" // custom luigi_cap +#include "toad_cap/geo.inc.c" // custom toad_cap diff --git a/actors/toad_cap/geo.inc.c b/actors/toad_cap/geo.inc.c new file mode 100644 index 00000000..96576150 --- /dev/null +++ b/actors/toad_cap/geo.inc.c @@ -0,0 +1,89 @@ +extern const GeoLayout toad_player_geo_cap[]; +extern const GeoLayout toad_player_geo_vanish_cap[]; +extern const GeoLayout toad_player_geo_cap_wing[]; +extern const GeoLayout toad_player_geo_vanish_cap_wing[]; +extern const GeoLayout toad_player_geo_metal_cap[]; +extern const GeoLayout toad_player_geo_metal_vanish_cap[]; +extern const Gfx toad_player_metal_start[]; +extern const Gfx toad_player_metal_stop[]; + +const GeoLayout toads_cap_geo[] = { + GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE(0, 0, 80, 0, 30, 0, 0), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_set_player_colors), + GEO_ASM(10, geo_update_layer_transparency), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_cap), + GEO_CLOSE_NODE(), + + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_vanish_cap), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), +}; + +const GeoLayout toads_wing_cap_geo[] = { + GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE(0, 0, 80, 0, 30, 0, 0), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_set_player_colors), + GEO_ASM(10, geo_update_layer_transparency), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_cap_wing), + GEO_CLOSE_NODE(), + + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_vanish_cap_wing), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), +}; + +const GeoLayout toads_metal_cap_geo[] = { + GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, toad_player_metal_start), // starts sharing solid color with mario_torso (blue) + GEO_TRANSLATE_ROTATE(0, 0, 80, 0, 30, 0, 0), + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(2, geo_switch_anim_state), + GEO_OPEN_NODE(), + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_metal_cap), + GEO_CLOSE_NODE(), + + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_metal_vanish_cap), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, toad_player_metal_stop), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), +}; diff --git a/actors/toad_player/custom_toad_cap.rgba16.png b/actors/toad_player/custom_toad_cap.rgba16.png new file mode 100644 index 00000000..c5893dfd Binary files /dev/null and b/actors/toad_player/custom_toad_cap.rgba16.png differ diff --git a/actors/toad_player/custom_toad_eyes_closed.rgba16.png b/actors/toad_player/custom_toad_eyes_closed.rgba16.png new file mode 100644 index 00000000..17860153 Binary files /dev/null and b/actors/toad_player/custom_toad_eyes_closed.rgba16.png differ diff --git a/actors/toad_player/custom_toad_eyes_dead.rgba16.png b/actors/toad_player/custom_toad_eyes_dead.rgba16.png new file mode 100644 index 00000000..3c6a8750 Binary files /dev/null and b/actors/toad_player/custom_toad_eyes_dead.rgba16.png differ diff --git a/actors/toad_player/custom_toad_eyes_half_closed.rgba16.png b/actors/toad_player/custom_toad_eyes_half_closed.rgba16.png new file mode 100644 index 00000000..505d3a2f Binary files /dev/null and b/actors/toad_player/custom_toad_eyes_half_closed.rgba16.png differ diff --git a/actors/toad_player/custom_toad_face.rgba16.png b/actors/toad_player/custom_toad_face.rgba16.png new file mode 100644 index 00000000..f56f7f89 Binary files /dev/null and b/actors/toad_player/custom_toad_face.rgba16.png differ diff --git a/actors/toad_player/custom_toad_hair.rgba16.png b/actors/toad_player/custom_toad_hair.rgba16.png new file mode 100644 index 00000000..7bfc50f5 Binary files /dev/null and b/actors/toad_player/custom_toad_hair.rgba16.png differ diff --git a/actors/toad_player/geo.inc.c b/actors/toad_player/geo.inc.c new file mode 100644 index 00000000..943a8f0c --- /dev/null +++ b/actors/toad_player/geo.inc.c @@ -0,0 +1,870 @@ +const GeoLayout toad_player_geo_cap[] = { + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, toad_player_dl_cap), + GEO_ASM(2, geo_mirror_mario_backface_culling), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, toad_player_dl_cap_decal), + GEO_ASM(3, geo_mirror_mario_backface_culling), + GEO_CLOSE_NODE(), + GEO_RETURN(), +}; + +const GeoLayout toad_player_geo_cap_wing[] = { + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, toad_player_dl_cap), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, toad_player_dl_cap_decal), + GEO_TRANSLATE_ROTATE(0, 180, 50, 0, -10, 0, -20), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, toad_player_cap_wings), // left + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, -180, 50, 0, 10, 180, -20), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, toad_player_cap_wings), // right + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), +}; + +const GeoLayout toad_player_geo_face_and_wings[] = { + GEO_ASM(0, geo_mario_head_rotation), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE(LAYER_OPAQUE, 100, -20, 0, -90, -90, 0), + + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_eyes), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, toad_player_dl_face), + GEO_DISPLAY_LIST(LAYER_OPAQUE, toad_player_dl_eyes_half_closed), + GEO_DISPLAY_LIST(LAYER_OPAQUE, toad_player_dl_eyes_closed), + GEO_DISPLAY_LIST(LAYER_OPAQUE, NULL), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, NULL), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, NULL), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, NULL), // unused + GEO_DISPLAY_LIST(LAYER_OPAQUE, toad_player_dl_eyes_dead), + GEO_CLOSE_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, toad_player_dl_hair), + GEO_ASM(0, geo_mirror_mario_backface_culling), + GEO_CLOSE_NODE(), + + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), + GEO_OPEN_NODE(), + // cap + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_cap), + GEO_CLOSE_NODE(), + + // no cap + GEO_DISPLAY_LIST(LAYER_OPAQUE, NULL), + GEO_CLOSE_NODE(), + + GEO_TRANSLATE_ROTATE(0, 180, 50, 0, -10, 0, -20), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, toad_player_cap_wings), // left + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, -180, 50, 0, 10, 180, -20), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, toad_player_cap_wings), // right + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + + GEO_CLOSE_NODE(), + GEO_RETURN(), +}; + +const GeoLayout toad_player_geo_right_hand[] = { + GEO_TRANSLATE(LAYER_OPAQUE, 100, 0, 0), + GEO_OPEN_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + // FISTS + GEO_DISPLAY_LIST(LAYER_OPAQUE, NULL), + // OPEN + GEO_DISPLAY_LIST(LAYER_OPAQUE, NULL), + // PEACE SIGN + GEO_DISPLAY_LIST(LAYER_OPAQUE, NULL), + // HOLDING CAP + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE(LAYER_OPAQUE, 120, 0, -120, 0, 90, -90), + GEO_BRANCH(1, toad_player_geo_cap), + GEO_CLOSE_NODE(), + // HOLDING WING CAP + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE(LAYER_OPAQUE, 120, 0, -120, 0, 90, -90), + GEO_BRANCH(1, toad_player_geo_cap_wing), + GEO_CLOSE_NODE(), + // HAND RIGHT OPEN + GEO_DISPLAY_LIST(LAYER_OPAQUE, NULL), + GEO_CLOSE_NODE(), + + GEO_RETURN(), +}; + +const GeoLayout toad_player_geo_body[] = { + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -70, 0, /*mario_butt*/ NULL), // starts sharing solid color with mario_torso (blue) + GEO_OPEN_NODE(), + GEO_ASM(0, geo_move_mario_part_from_parent), + GEO_ASM(0, geo_mario_tilt_torso), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, /*mario_torso*/ NULL), + + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_OPAQUE, -90, -90, 0, toad_player_dl_body), // torso + GEO_ASM(0, geo_mirror_mario_backface_culling), + GEO_ASM(2, geo_mario_set_player_colors), + GEO_CLOSE_NODE(), + + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_face_and_wings), // stops sharing because faces has its own dl + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -15, -5, /*mario_left_arm*/ NULL), // starts sharing solid color with mario_left_forearm (red) + + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_OPAQUE, -20, 120, -45, toad_player_dl_arm_left), // left arm + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, /*mario_left_forearm_shared_dl*/ NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, /*mario_left_hand_closed*/ NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 68, -10, -79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -15, 5, /*mario_right_arm*/ NULL), // starts sharing solid color of his dl with mario_right_forearm (red) + + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_OPAQUE, 20, -120, -45, toad_player_dl_arm_right), // right arm + GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_right_hand), // stops sharing because hand has its solid color (white) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, /*mario_right_forearm_shared_dl*/ NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, /*mario_right_hand_closed*/ NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, -8, 50, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, /*mario_left_thigh*/ NULL), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, /*mario_left_leg_shared_dl*/ NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, /*mario_left_foot*/ NULL), // stops sharing because foot has its solid color (brown) + + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_OPAQUE, 160, -90, 0, toad_player_dl_foot_left), // left foot + GEO_CLOSE_NODE(), + + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, -8, -50, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, /*mario_right_thigh*/ NULL), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, /*mario_right_leg_shared_dl*/ NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(2, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_OPAQUE, 200, 90, 0, /*mario_right_foot*/ toad_player_dl_foot_right), // stops sharing because foot has its solid color (brown) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), +}; + + //////////// + // vanish // +//////////// + +const GeoLayout toad_player_geo_vanish_cap[] = { + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, toad_player_dl_cap), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, toad_player_dl_cap_decal), + GEO_CLOSE_NODE(), + GEO_RETURN(), +}; + +const GeoLayout toad_player_geo_vanish_cap_wing[] = { + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, toad_player_dl_cap), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, toad_player_dl_cap_decal), + GEO_TRANSLATE_ROTATE(0, 180, 50, 0, -10, 0, -20), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, toad_player_cap_wings), // left + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, -180, 50, 0, 10, 180, -20), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, toad_player_cap_wings), // right + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), +}; + +const GeoLayout toad_player_geo_vanish_face_and_wings[] = { + GEO_ASM(0, geo_mario_head_rotation), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE(LAYER_TRANSPARENT, 100, -20, 0, -90, -90, 0), + + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_eyes), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, toad_player_dl_face), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, toad_player_dl_eyes_half_closed), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, toad_player_dl_eyes_closed), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, NULL), // unused + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, NULL), // unused + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, NULL), // unused + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, NULL), // unused + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, toad_player_dl_eyes_dead), + GEO_CLOSE_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, toad_player_dl_hair), + GEO_CLOSE_NODE(), + + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), + GEO_OPEN_NODE(), + // cap + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_vanish_cap), + GEO_CLOSE_NODE(), + + // no cap + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, NULL), + GEO_CLOSE_NODE(), + + GEO_TRANSLATE_ROTATE(0, 180, 50, 0, -10, 0, -20), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, toad_player_cap_wings), // left + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, -180, 50, 0, 10, 180, -20), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, toad_player_cap_wings), // right + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + + GEO_CLOSE_NODE(), + GEO_RETURN(), +}; + +const GeoLayout toad_player_geo_vanish_right_hand[] = { + GEO_TRANSLATE(LAYER_TRANSPARENT, 100, 0, 0), + GEO_OPEN_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + // FISTS + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, NULL), + // OPEN + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, NULL), + // PEACE SIGN + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, NULL), + // HOLDING CAP + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE(LAYER_TRANSPARENT, 120, 0, -120, 0, 90, -90), + GEO_BRANCH(1, toad_player_geo_vanish_cap), + GEO_CLOSE_NODE(), + // HOLDING WING CAP + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE(LAYER_TRANSPARENT, 120, 0, -120, 0, 90, -90), + GEO_BRANCH(1, toad_player_geo_vanish_cap_wing), + GEO_CLOSE_NODE(), + // HAND RIGHT OPEN + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, NULL), + GEO_CLOSE_NODE(), + + GEO_RETURN(), +}; + +const GeoLayout toad_player_geo_vanish_body[] = { + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, -70, 0, /*mario_butt*/ NULL), // starts sharing solid color with mario_torso (blue) + GEO_OPEN_NODE(), + GEO_ASM(0, geo_move_mario_part_from_parent), + GEO_ASM(0, geo_mario_tilt_torso), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, /*mario_torso*/ NULL), + + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_TRANSPARENT, -90, -90, 0, toad_player_dl_body), // torso + GEO_CLOSE_NODE(), + + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_vanish_face_and_wings), // stops sharing because faces has its own dl + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, -15, -5, /*mario_left_arm*/ NULL), // starts sharing solid color with mario_left_forearm (red) + + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_TRANSPARENT, -20, 120, -45, toad_player_dl_arm_left), // left arm + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, /*mario_left_forearm_shared_dl*/ NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, /*mario_left_hand_closed*/ NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, -10, -79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, -15, 5, /*mario_right_arm*/ NULL), // starts sharing solid color of his dl with mario_right_forearm (red) + + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_TRANSPARENT, 20, -120, -45, toad_player_dl_arm_right), // right arm + GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_vanish_right_hand), // stops sharing because hand has its solid color (white) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, /*mario_right_forearm_shared_dl*/ NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, /*mario_right_hand_closed*/ NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, -8, 50, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, /*mario_left_thigh*/ NULL), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, /*mario_left_leg_shared_dl*/ NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, /*mario_left_foot*/ NULL), // stops sharing because foot has its solid color (brown) + + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_TRANSPARENT, 160, -90, 0, toad_player_dl_foot_left), // left foot + GEO_CLOSE_NODE(), + + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, -8, -50, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, /*mario_right_thigh*/ NULL), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, /*mario_right_leg_shared_dl*/ NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(2, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_TRANSPARENT, 200, 90, 0, /*mario_right_foot*/ toad_player_dl_foot_right), // stops sharing because foot has its solid color (brown) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), +}; + + /////////// + // metal // +/////////// + +const GeoLayout toad_player_geo_metal_cap[] = { + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, toad_player_dl_cap_inner), + GEO_CLOSE_NODE(), + GEO_RETURN(), +}; + +const GeoLayout toad_player_geo_metal_cap_wing[] = { + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, toad_player_dl_cap_inner), + GEO_TRANSLATE_ROTATE(0, 180, 50, 0, -10, 0, -20), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, toad_player_metal_cap_wings), // left + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, -180, 50, 0, 10, 180, -20), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, toad_player_metal_cap_wings), // right + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), +}; + +const GeoLayout toad_player_geo_metal_face_and_wings[] = { + GEO_ASM(0, geo_mario_head_rotation), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE(LAYER_OPAQUE, 100, -20, 0, -90, -90, 0), + + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_OPAQUE, toad_player_dl_face_inner), + GEO_CLOSE_NODE(), + + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), + GEO_OPEN_NODE(), + // cap + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_metal_cap), + GEO_CLOSE_NODE(), + + // no cap + GEO_DISPLAY_LIST(LAYER_OPAQUE, NULL), + GEO_CLOSE_NODE(), + + GEO_TRANSLATE_ROTATE(0, 180, 50, 0, -10, 0, -20), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, toad_player_metal_cap_wings), // left + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, -180, 50, 0, 10, 180, -20), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, toad_player_metal_cap_wings), // right + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + + GEO_CLOSE_NODE(), + GEO_RETURN(), +}; + +const GeoLayout toad_player_geo_metal_right_hand[] = { + GEO_TRANSLATE(LAYER_OPAQUE, 100, 0, 0), + GEO_OPEN_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + // FISTS + GEO_DISPLAY_LIST(LAYER_OPAQUE, NULL), + // OPEN + GEO_DISPLAY_LIST(LAYER_OPAQUE, NULL), + // PEACE SIGN + GEO_DISPLAY_LIST(LAYER_OPAQUE, NULL), + // HOLDING CAP + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE(LAYER_OPAQUE, 120, 0, -120, 0, 90, -90), + GEO_BRANCH(1, toad_player_geo_metal_cap), + GEO_CLOSE_NODE(), + // HOLDING WING CAP + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE(LAYER_OPAQUE, 120, 0, -120, 0, 90, -90), + GEO_BRANCH(1, toad_player_geo_metal_cap_wing), + GEO_CLOSE_NODE(), + // HAND RIGHT OPEN + GEO_DISPLAY_LIST(LAYER_OPAQUE, NULL), + GEO_CLOSE_NODE(), + + GEO_RETURN(), +}; + +const GeoLayout toad_player_geo_metal_body[] = { + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -70, 0, /*mario_butt*/ toad_player_metal_start), // starts sharing solid color with mario_torso (blue) + GEO_OPEN_NODE(), + GEO_ASM(0, geo_move_mario_part_from_parent), + GEO_ASM(0, geo_mario_tilt_torso), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, /*mario_torso*/ NULL), + + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_OPAQUE, -90, -90, 0, toad_player_metal_dl_body), // torso + GEO_CLOSE_NODE(), + + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_metal_face_and_wings), // stops sharing because faces has its own dl + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -15, -5, /*mario_left_arm*/ NULL), // starts sharing solid color with mario_left_forearm (red) + + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_OPAQUE, -20, 120, -45, toad_player_dl_arm_left_inner), // left arm + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, /*mario_left_forearm_shared_dl*/ NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, /*mario_left_hand_closed*/ NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 68, -10, -79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, -15, 5, /*mario_right_arm*/ NULL), // starts sharing solid color of his dl with mario_right_forearm (red) + + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_OPAQUE, 20, -120, -45, toad_player_dl_arm_right_inner), // right arm + GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_metal_right_hand), // stops sharing because hand has its solid color (white) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, /*mario_right_forearm_shared_dl*/ NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, /*mario_right_hand_closed*/ NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, -8, 50, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, /*mario_left_thigh*/ NULL), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, /*mario_left_leg_shared_dl*/ NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, /*mario_left_foot*/ NULL), // stops sharing because foot has its solid color (brown) + + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_OPAQUE, 160, -90, 0, toad_player_dl_foot_left_inner), // left foot + GEO_CLOSE_NODE(), + + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 60, -8, -50, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, /*mario_right_thigh*/ NULL), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 89, 0, 0, /*mario_right_leg_shared_dl*/ NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_OPAQUE, 67, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(2, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_OPAQUE, 200, 90, 0, /*mario_right_foot*/ toad_player_dl_foot_right_metal), // stops sharing because foot has its solid color (brown) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), +}; + + ////////////////// + // metal-vanish // +////////////////// + +const GeoLayout toad_player_geo_metal_vanish_cap[] = { + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, toad_player_dl_cap_inner), + GEO_CLOSE_NODE(), + GEO_RETURN(), +}; + +const GeoLayout toad_player_geo_metal_vanish_cap_wing[] = { + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, toad_player_dl_cap_inner), + GEO_TRANSLATE_ROTATE(0, 180, 50, 0, -10, 0, -20), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, toad_player_metal_cap_wings), // left + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, -180, 50, 0, 10, 180, -20), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, toad_player_metal_cap_wings), // right + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), +}; + +const GeoLayout toad_player_geo_metal_vanish_face_and_wings[] = { + GEO_ASM(0, geo_mario_head_rotation), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE(LAYER_TRANSPARENT, 100, -20, 0, -90, -90, 0), + + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, toad_player_dl_face_inner), + GEO_CLOSE_NODE(), + + GEO_OPEN_NODE(), + GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off), + GEO_OPEN_NODE(), + // cap + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_metal_vanish_cap), + GEO_CLOSE_NODE(), + + // no cap + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, NULL), + GEO_CLOSE_NODE(), + + GEO_TRANSLATE_ROTATE(0, 180, 50, 0, -10, 0, -20), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, toad_player_metal_cap_wings), // left + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_TRANSLATE_ROTATE(0, -180, 50, 0, 10, 180, -20), + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_rotate_wing_cap_wings), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_DISPLAY_LIST(LAYER_ALPHA, toad_player_metal_cap_wings), // right + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + + GEO_CLOSE_NODE(), + GEO_RETURN(), +}; + +const GeoLayout toad_player_geo_metal_vanish_right_hand[] = { + GEO_TRANSLATE(LAYER_TRANSPARENT, 100, 0, 0), + GEO_OPEN_NODE(), + GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos), + GEO_CLOSE_NODE(), + + GEO_SWITCH_CASE(0, geo_switch_mario_hand), + GEO_OPEN_NODE(), + // FISTS + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, NULL), + // OPEN + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, NULL), + // PEACE SIGN + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, NULL), + // HOLDING CAP + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE(LAYER_TRANSPARENT, 120, 0, -120, 0, 90, -90), + GEO_BRANCH(1, toad_player_geo_metal_vanish_cap), + GEO_CLOSE_NODE(), + // HOLDING WING CAP + GEO_NODE_START(), + GEO_OPEN_NODE(), + GEO_TRANSLATE_ROTATE(LAYER_TRANSPARENT, 120, 0, -120, 0, 90, -90), + GEO_BRANCH(1, toad_player_geo_metal_vanish_cap_wing), + GEO_CLOSE_NODE(), + // HAND RIGHT OPEN + GEO_DISPLAY_LIST(LAYER_TRANSPARENT, NULL), + GEO_CLOSE_NODE(), + + GEO_RETURN(), +}; + +const GeoLayout toad_player_geo_metal_vanish_body[] = { + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, -70, 0, /*mario_butt*/ toad_player_metal_start), // starts sharing solid color with mario_torso (blue) + GEO_OPEN_NODE(), + GEO_ASM(0, geo_move_mario_part_from_parent), + GEO_ASM(0, geo_mario_tilt_torso), + GEO_ROTATION_NODE(0x00, 0, 0, 0), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, /*mario_torso*/ NULL), + + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_TRANSPARENT, -90, -90, 0, toad_player_metal_dl_body), // torso + GEO_CLOSE_NODE(), + + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_metal_vanish_face_and_wings), // stops sharing because faces has its own dl + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, -15, -5, /*mario_left_arm*/ NULL), // starts sharing solid color with mario_left_forearm (red) + + GEO_OPEN_NODE(), + GEO_ASM(1, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_TRANSPARENT, -20, 120, -45, toad_player_dl_arm_left_inner), // left arm + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, /*mario_left_forearm_shared_dl*/ NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, /*mario_left_hand_closed*/ NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 68, -10, -79, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, -15, 5, /*mario_right_arm*/ NULL), // starts sharing solid color of his dl with mario_right_forearm (red) + + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_TRANSPARENT, 20, -120, -45, toad_player_dl_arm_right_inner), // right arm + GEO_CLOSE_NODE(), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_metal_vanish_right_hand), // stops sharing because hand has its solid color (white) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, /*mario_right_forearm_shared_dl*/ NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, /*mario_right_hand_closed*/ NULL), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, -8, 50, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, /*mario_left_thigh*/ NULL), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, /*mario_left_leg_shared_dl*/ NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, /*mario_left_foot*/ NULL), // stops sharing because foot has its solid color (brown) + + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_TRANSPARENT, 160, -90, 0, toad_player_dl_foot_left_inner), // left foot + GEO_CLOSE_NODE(), + + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, -8, -50, NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, /*mario_right_thigh*/ NULL), // starts sharing solid color of his dl with mario_left_leg (blue) + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 89, 0, 0, /*mario_right_leg_shared_dl*/ NULL), + GEO_OPEN_NODE(), + GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, 0, 0, NULL), + GEO_OPEN_NODE(), + GEO_ASM(2, geo_mario_hand_foot_scaler), + GEO_SCALE(0x00, 65536), + GEO_OPEN_NODE(), + GEO_ROTATION_NODE_WITH_DL(LAYER_TRANSPARENT, 200, 90, 0, /*mario_right_foot*/ toad_player_dl_foot_right_metal), // stops sharing because foot has its solid color (brown) + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_RETURN(), +}; + + ////////// + // main // +////////// + +const GeoLayout toad_player_geo[] = { + GEO_SHADOW(SHADOW_CIRCLE_PLAYER, 0x96, 100), + GEO_OPEN_NODE(), + GEO_SCALE(0x00, 16384), + GEO_OPEN_NODE(), + GEO_ASM(0, geo_mario_set_player_colors), + GEO_ASM(0, geo_mirror_mario_backface_culling), + GEO_ASM(0, geo_mirror_mario_set_alpha), + + GEO_SWITCH_CASE(0, geo_switch_mario_cap_effect), + GEO_OPEN_NODE(), + GEO_BRANCH(1, toad_player_geo_body), + GEO_BRANCH(1, toad_player_geo_vanish_body), + GEO_BRANCH(1, toad_player_geo_metal_body), + GEO_BRANCH(1, toad_player_geo_metal_vanish_body), + GEO_CLOSE_NODE(), + + GEO_ASM(1, geo_mirror_mario_backface_culling), + + GEO_CLOSE_NODE(), + GEO_CLOSE_NODE(), + GEO_END(), +}; diff --git a/actors/toad_player/geo_header.h b/actors/toad_player/geo_header.h new file mode 100644 index 00000000..24547dab --- /dev/null +++ b/actors/toad_player/geo_header.h @@ -0,0 +1,36 @@ +extern const Gfx toad_player_metal_start[]; + +extern const Gfx toad_player_dl_face[]; +extern const Gfx toad_player_dl_eyes_closed[]; +extern const Gfx toad_player_dl_eyes_half_closed[]; +extern const Gfx toad_player_dl_eyes_dead[]; +extern const Gfx toad_player_dl_hair[]; + +extern const Gfx toad_player_dl_cap_inner[]; +extern const Gfx toad_player_dl_cap[]; +extern const Gfx toad_player_dl_cap_decal[]; + +extern const Gfx toad_player_cap_wings[]; +extern const Gfx toad_player_metal_cap_wings[]; + +extern const Gfx toad_player_dl_jacket[]; +extern const Gfx toad_player_dl_body[]; +extern const Gfx toad_player_dl_foot_left_inner[]; +extern const Gfx toad_player_dl_foot_left[]; +extern const Gfx toad_player_dl_foot_right[]; +extern const Gfx toad_player_dl_foot_right_metal[]; +extern const Gfx toad_player_dl_arm_left_inner[]; +extern const Gfx toad_player_dl_arm_left[]; +extern const Gfx toad_player_dl_arm_right_inner[]; +extern const Gfx toad_player_dl_arm_right[]; +extern const Gfx toad_player_dl_face_inner[]; +extern const Gfx toad_player_dl_head_base[]; +extern const Gfx toad_player_dl_head_transparent[]; + +extern const Gfx toad_player_metal_dl_body[]; + +#ifndef VERSION_JP +extern const Gfx toad_player_dl_face_2[]; +#endif + +extern const GeoLayout toad_player_geo[]; \ No newline at end of file diff --git a/actors/toad_player/model.inc.c b/actors/toad_player/model.inc.c new file mode 100644 index 00000000..f4c268e6 --- /dev/null +++ b/actors/toad_player/model.inc.c @@ -0,0 +1,1344 @@ +// Toad player + /////////// + // metal // +/////////// +static const Lights1 toad_player_lights_white = gdSPDefLights1( + 0x7f, 0x7f, 0x7f, + 0xff, 0xff, 0xff, 0x28, 0x28, 0x28 +); + +ALIGNED8 static const u8 toad_player_texture_metal[] = { +#include "actors/mario/mario_metal.rgba16.inc.c" +}; + +const Gfx toad_player_metal_start[] = { + gsDPPipeSync(), + gsSPSetGeometryMode(G_TEXTURE_GEN), + gsDPSetCombineMode(G_CC_DECALFADE, G_CC_DECALFADE), + gsDPLoadTextureBlock(toad_player_texture_metal, G_IM_FMT_RGBA, G_IM_SIZ_16b, 64, 32, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, 6, 5, G_TX_NOLOD, G_TX_NOLOD), + gsSPTexture(0x0F80, 0x07C0, 0, G_TX_RENDERTILE, G_ON), + gsSPLight(&toad_player_lights_white.l, 1), + gsSPLight(&toad_player_lights_white.a, 2), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_metal_stop[] = { + gsDPPipeSync(), + gsSPClearGeometryMode(G_TEXTURE_GEN), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsSPTexture(0x0F80, 0x07C0, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetEnvColor(255, 255, 255, 255), + gsDPSetAlphaCompare(G_AC_NONE), + gsSPEndDisplayList(), +}; + + ////////// + // face // +////////// + +static const Lights1 toad_player_lights_face = gdSPDefLights1( + 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0x28, 0x28, 0x28 +); + +ALIGNED8 static const u8 toad_player_texture_face[] = { +#include "actors/toad_player/custom_toad_face.rgba16.inc.c" +}; + +ALIGNED8 static const u8 toad_player_texture_eyes_closed[] = { +#include "actors/toad_player/custom_toad_eyes_closed.rgba16.inc.c" +}; + +ALIGNED8 static const u8 toad_player_texture_eyes_half_closed[] = { +#include "actors/toad_player/custom_toad_eyes_half_closed.rgba16.inc.c" +}; + +ALIGNED8 static const u8 toad_player_texture_eyes_dead[] = { +#include "actors/toad_player/custom_toad_eyes_dead.rgba16.inc.c" +}; + +Vtx toad_player_vertex_face[] = { + {{{-50, 14, 3},0, {-436, 298},{0xC2, 0x68, 0xD9, 0xFF}}}, + {{{-24, 27, 39},0, {-134, 0},{0xDE, 0x7A, 0xF3, 0xFF}}}, + {{{0, 20, 0},0, {-436, 298},{0x0, 0x75, 0xCE, 0xFF}}}, + {{{-68, -1, 10},0, {-436, 298},{0x99, 0x47, 0xE8, 0xFF}}}, + {{{-42, 21, 72},0, {-134, 0},{0xBC, 0x68, 0x1C, 0xFF}}}, + {{{-79, -28, 21},0, {-436, 298},{0x87, 0x24, 0xF4, 0xFF}}}, + {{{-51, 1, 95},0, {-134, 0},{0xAE, 0x43, 0x46, 0xFF}}}, + {{{-56, -20, 101},0, {-134, 0},{0xA6, 0x1B, 0x55, 0xFF}}}, + {{{-86, -52, 32},0, {-436, 298},{0x81, 0x1, 0xFF, 0xFF}}}, + {{{-56, -68, 103},0, {-124, 432},{0xA6, 0xF8, 0x59, 0xFF}}}, + {{{-77, -96, 50},0, {-330, 686},{0x8D, 0xCB, 0xD, 0xFF}}}, + {{{-43, -102, 106},0, {20, 832},{0xB7, 0xCC, 0x5A, 0xFF}}}, + {{{-42, -128, 69},0, {30, 974},{0xBC, 0x98, 0x1B, 0xFF}}}, + {{{0, -135, 97},0, {470, 1028},{0x0, 0x92, 0x40, 0xFF}}}, + {{{0, -99, 124},0, {464, 706},{0x0, 0xD8, 0x79, 0xFF}}}, + {{{44, -102, 106},0, {914, 824},{0x48, 0xCC, 0x5B, 0xFF}}}, + {{{0, -135, 97},0, {470, 1028},{0x0, 0x92, 0x40, 0xFF}}}, + {{{43, -128, 69},0, {910, 964},{0x43, 0x98, 0x1D, 0xFF}}}, + {{{44, -102, 106},0, {914, 824},{0x48, 0xCC, 0x5B, 0xFF}}}, + {{{78, -96, 50},0, {1258, 672},{0x73, 0xCC, 0xF, 0xFF}}}, + {{{57, -68, 103},0, {1042, 420},{0x5A, 0xF8, 0x59, 0xFF}}}, + {{{87, -52, 32},0, {1348, 280},{0x7F, 0x2, 0xFF, 0xFF}}}, + {{{57, -20, 101},0, {1036, -12},{0x5A, 0x1B, 0x55, 0xFF}}}, + {{{80, -28, 21},0, {1348, 280},{0x79, 0x24, 0xF4, 0xFF}}}, + {{{52, 1, 95},0, {1036, -12},{0x52, 0x43, 0x46, 0xFF}}}, + {{{43, 21, 72},0, {1036, -12},{0x44, 0x68, 0x1C, 0xFF}}}, + {{{69, -1, 10},0, {1348, 280},{0x67, 0x47, 0xE8, 0xFF}}}, + {{{24, 27, 39},0, {1036, -12},{0x22, 0x7A, 0xF3, 0xFF}}}, + {{{51, 14, 3},0, {1348, 280},{0x3E, 0x68, 0xD9, 0xFF}}}, + {{{0, 20, 0},0, {1036, -12},{0x0, 0x75, 0xCE, 0xFF}}}, + {{{0, 32, 50},0, {444, -224},{0x0, 0x7F, 0xFC, 0xFF}}}, + {{{0, 20, 0},0, {444, -224},{0x0, 0x75, 0xCE, 0xFF}}}, + {{{43, 21, 72},0, {1036, -12},{0x44, 0x68, 0x1C, 0xFF}}}, + {{{0, 32, 50},0, {444, -224},{0x0, 0x7F, 0xFC, 0xFF}}}, + {{{0, 28, 88},0, {444, -224},{0x0, 0x72, 0x38, 0xFF}}}, + {{{-42, 21, 72},0, {-134, 0},{0xBC, 0x68, 0x1C, 0xFF}}}, + {{{-24, 27, 39},0, {-134, 0},{0xDE, 0x7A, 0xF3, 0xFF}}}, + {{{0, 20, 0},0, {-134, 0},{0x0, 0x75, 0xCE, 0xFF}}}, + {{{-51, 1, 95},0, {-134, 0},{0xAE, 0x43, 0x46, 0xFF}}}, + {{{0, 4, 113},0, {444, -224},{0x0, 0x44, 0x6B, 0xFF}}}, + {{{-56, -20, 101},0, {-134, 0},{0xA6, 0x1B, 0x55, 0xFF}}}, + {{{0, -29, 125},0, {450, 76},{0x0, 0x17, 0x7D, 0xFF}}}, + {{{-56, -68, 103},0, {-124, 432},{0xA6, 0xF8, 0x59, 0xFF}}}, + {{{0, -55, 127},0, {456, 316},{0x0, 0x1, 0x7F, 0xFF}}}, + {{{-43, -102, 106},0, {20, 832},{0xB7, 0xCC, 0x5A, 0xFF}}}, + {{{0, -99, 124},0, {464, 706},{0x0, 0xD8, 0x79, 0xFF}}}, + {{{44, -102, 106},0, {914, 824},{0x48, 0xCC, 0x5B, 0xFF}}}, + {{{57, -68, 103},0, {1042, 420},{0x5A, 0xF8, 0x59, 0xFF}}}, + {{{57, -68, 103},0, {1042, 420},{0x5A, 0xF8, 0x59, 0xFF}}}, + {{{57, -20, 101},0, {1036, -12},{0x5A, 0x1B, 0x55, 0xFF}}}, + {{{0, -29, 125},0, {450, 76},{0x0, 0x17, 0x7D, 0xFF}}}, + {{{0, 4, 113},0, {444, -224},{0x0, 0x44, 0x6B, 0xFF}}}, + {{{52, 1, 95},0, {1036, -12},{0x52, 0x43, 0x46, 0xFF}}}, + {{{0, 28, 88},0, {444, -224},{0x0, 0x72, 0x38, 0xFF}}}, + {{{43, 21, 72},0, {1036, -12},{0x44, 0x68, 0x1C, 0xFF}}}, + {{{-35, 1, -23},0, {-354, 24},{0xDA, 0x5C, 0xB1, 0xFF}}}, + {{{-50, 14, 3},0, {-874, -276},{0xC2, 0x68, 0xD9, 0xFF}}}, + {{{0, 20, 0},0, {-354, 24},{0x0, 0x75, 0xCE, 0xFF}}}, + {{{-68, -1, 10},0, {-874, -276},{0x99, 0x47, 0xE8, 0xFF}}}, + {{{-53, -23, -35},0, {-354, 24},{0xB3, 0x25, 0xA2, 0xFF}}}, + {{{0, -8, -41},0, {-108, 166},{0x0, 0x52, 0x9F, 0xFF}}}, + {{{0, 20, 0},0, {-108, 166},{0x0, 0x75, 0xCE, 0xFF}}}, + {{{0, -32, -55},0, {-108, 166},{0x0, 0x19, 0x83, 0xFF}}}, + {{{54, -23, -35},0, {-354, 24},{0x4C, 0x25, 0xA1, 0xFF}}}, + {{{54, -23, -35},0, {-354, 24},{0x4C, 0x25, 0xA1, 0xFF}}}, + {{{0, -8, -41},0, {-108, 166},{0x0, 0x52, 0x9F, 0xFF}}}, + {{{36, 1, -23},0, {-354, 24},{0x26, 0x5C, 0xB1, 0xFF}}}, + {{{0, 20, 0},0, {-354, 24},{0x0, 0x75, 0xCE, 0xFF}}}, + {{{69, -1, 10},0, {-874, -276},{0x67, 0x47, 0xE8, 0xFF}}}, + {{{80, -28, 21},0, {-874, -276},{0x79, 0x24, 0xF4, 0xFF}}}, + {{{62, -51, -28},0, {-354, 24},{0x5C, 0xF5, 0xA9, 0xFF}}}, + {{{87, -52, 32},0, {-874, -276},{0x7F, 0x2, 0xFF, 0xFF}}}, + {{{62, -80, -18},0, {-354, 24},{0x59, 0xD2, 0xB2, 0xFF}}}, + {{{78, -96, 50},0, {-1014, 166},{0x73, 0xCC, 0xF, 0xFF}}}, + {{{57, -113, 7},0, {-576, 354},{0x52, 0xAC, 0xD0, 0xFF}}}, + {{{43, -128, 69},0, {-1162, 494},{0x43, 0x98, 0x1D, 0xFF}}}, + {{{30, -135, 34},0, {-818, 576},{0x32, 0x8C, 0xF5, 0xFF}}}, + {{{0, -135, 97},0, {-1428, 558},{0x0, 0x92, 0x40, 0xFF}}}, + {{{0, -143, 8},0, {-562, 656},{0x6, 0x87, 0xD9, 0xFF}}}, + {{{-29, -135, 34},0, {-818, 576},{0xCB, 0x8D, 0xFB, 0xFF}}}, + {{{0, -135, 97},0, {-1428, 558},{0x0, 0x92, 0x40, 0xFF}}}, + {{{-42, -128, 69},0, {-1162, 494},{0xBC, 0x98, 0x1B, 0xFF}}}, + {{{-29, -135, 34},0, {-818, 576},{0xCB, 0x8D, 0xFB, 0xFF}}}, + {{{-77, -96, 50},0, {-1014, 166},{0x8D, 0xCB, 0xD, 0xFF}}}, + {{{-56, -113, 7},0, {-576, 354},{0xAA, 0xAE, 0xD4, 0xFF}}}, + {{{-86, -52, 32},0, {-874, -276},{0x81, 0x1, 0xFF, 0xFF}}}, + {{{-61, -80, -18},0, {-354, 24},{0xA5, 0xD3, 0xB3, 0xFF}}}, + {{{-61, -51, -28},0, {-354, 24},{0xA4, 0xF5, 0xA9, 0xFF}}}, + {{{-79, -28, 21},0, {-874, -276},{0x87, 0x24, 0xF4, 0xFF}}}, + {{{-53, -23, -35},0, {-354, 24},{0xB3, 0x25, 0xA2, 0xFF}}}, + {{{-68, -1, 10},0, {-874, -276},{0x99, 0x47, 0xE8, 0xFF}}}, + {{{0, -62, -54},0, {-108, 166},{0x0, 0xE7, 0x83, 0xFF}}}, + {{{0, -94, -43},0, {-108, 166},{0x0, 0xC7, 0x8E, 0xFF}}}, + {{{62, -80, -18},0, {-354, 24},{0x59, 0xD2, 0xB2, 0xFF}}}, + {{{62, -51, -28},0, {-354, 24},{0x5C, 0xF5, 0xA9, 0xFF}}}, + {{{54, -23, -35},0, {-354, 24},{0x4C, 0x25, 0xA1, 0xFF}}}, + {{{0, -62, -54},0, {-108, 166},{0x0, 0xE7, 0x83, 0xFF}}}, + {{{0, -32, -55},0, {-108, 166},{0x0, 0x19, 0x83, 0xFF}}}, + {{{54, -23, -35},0, {-354, 24},{0x4C, 0x25, 0xA1, 0xFF}}}, + {{{-53, -23, -35},0, {-354, 24},{0xB3, 0x25, 0xA2, 0xFF}}}, + {{{57, -113, 7},0, {-576, 354},{0x52, 0xAC, 0xD0, 0xFF}}}, + {{{0, -94, -43},0, {-108, 166},{0x0, 0xC7, 0x8E, 0xFF}}}, + {{{62, -80, -18},0, {-354, 24},{0x59, 0xD2, 0xB2, 0xFF}}}, + {{{0, -124, -23},0, {-270, 476},{0x3, 0xA4, 0xA8, 0xFF}}}, + {{{30, -135, 34},0, {-818, 576},{0x32, 0x8C, 0xF5, 0xFF}}}, + {{{0, -143, 8},0, {-562, 656},{0x6, 0x87, 0xD9, 0xFF}}}, + {{{-56, -113, 7},0, {-576, 354},{0xAA, 0xAE, 0xD4, 0xFF}}}, + {{{-29, -135, 34},0, {-818, 576},{0xCB, 0x8D, 0xFB, 0xFF}}}, + {{{-61, -80, -18},0, {-354, 24},{0xA5, 0xD3, 0xB3, 0xFF}}}, + {{{51, 14, 3},0, {-874, -276},{0x3E, 0x68, 0xD9, 0xFF}}}, + {{{36, 1, -23},0, {-354, 24},{0x26, 0x5C, 0xB1, 0xFF}}}, + {{{0, 20, 0},0, {-874, -276},{0x0, 0x75, 0xCE, 0xFF}}}, + {{{69, -1, 10},0, {-874, -276},{0x67, 0x47, 0xE8, 0xFF}}}, + {{{36, 1, -23},0, {-354, 24},{0x26, 0x5C, 0xB1, 0xFF}}}, + {{{51, 14, 3},0, {-874, -276},{0x3E, 0x68, 0xD9, 0xFF}}}, +}; + +const Gfx toad_player_dl_face_inner[] = { + gsSPVertex(toad_player_vertex_face + 0, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSP1Triangle(3, 4, 1, 0), + gsSP1Triangle(5, 4, 3, 0), + gsSP1Triangle(5, 6, 4, 0), + gsSP1Triangle(7, 6, 5, 0), + gsSP1Triangle(7, 5, 8, 0), + gsSP1Triangle(9, 7, 8, 0), + gsSP1Triangle(8, 10, 9, 0), + gsSP1Triangle(11, 9, 10, 0), + gsSP1Triangle(10, 12, 11, 0), + gsSP1Triangle(13, 11, 12, 0), + gsSP1Triangle(13, 14, 11, 0), + gsSP1Triangle(13, 15, 14, 0), + gsSPVertex(toad_player_vertex_face + 16, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSP1Triangle(3, 4, 2, 0), + gsSP1Triangle(4, 3, 5, 0), + gsSP1Triangle(5, 6, 4, 0), + gsSP1Triangle(6, 5, 7, 0), + gsSP1Triangle(6, 7, 8, 0), + gsSP1Triangle(7, 9, 8, 0), + gsSP1Triangle(7, 10, 9, 0), + gsSP1Triangle(10, 11, 9, 0), + gsSP1Triangle(10, 12, 11, 0), + gsSP1Triangle(11, 12, 13, 0), + gsSP1Triangle(9, 11, 14, 0), + gsSP1Triangle(14, 11, 15, 0), + gsSPVertex(toad_player_vertex_face + 32, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 2, 1, 0), + gsSP1Triangle(3, 1, 4, 0), + gsSP1Triangle(4, 1, 5, 0), + gsSP1Triangle(6, 2, 3, 0), + gsSP1Triangle(6, 7, 2, 0), + gsSP1Triangle(8, 7, 6, 0), + gsSP1Triangle(8, 9, 7, 0), + gsSP1Triangle(9, 8, 10, 0), + gsSP1Triangle(10, 11, 9, 0), + gsSP1Triangle(11, 10, 12, 0), + gsSP1Triangle(12, 13, 11, 0), + gsSP1Triangle(11, 13, 14, 0), + gsSP1Triangle(14, 15, 11, 0), + gsSP1Triangle(9, 11, 15, 0), + gsSPVertex(toad_player_vertex_face + 48, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(1, 3, 2, 0), + gsSP1Triangle(1, 4, 3, 0), + gsSP1Triangle(4, 5, 3, 0), + gsSP1Triangle(4, 6, 5, 0), + gsSP1Triangle(7, 8, 9, 0), + gsSP1Triangle(10, 8, 7, 0), + gsSP1Triangle(10, 7, 11, 0), + gsSP1Triangle(11, 7, 12, 0), + gsSP1Triangle(12, 7, 13, 0), + gsSP1Triangle(11, 12, 14, 0), + gsSP1Triangle(15, 14, 12, 0), + gsSPVertex(toad_player_vertex_face + 64, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSP1Triangle(4, 0, 2, 0), + gsSP1Triangle(5, 0, 4, 0), + gsSP1Triangle(5, 6, 0, 0), + gsSP1Triangle(7, 6, 5, 0), + gsSP1Triangle(7, 8, 6, 0), + gsSP1Triangle(9, 8, 7, 0), + gsSP1Triangle(9, 10, 8, 0), + gsSP1Triangle(11, 10, 9, 0), + gsSP1Triangle(11, 12, 10, 0), + gsSP1Triangle(13, 12, 11, 0), + gsSP1Triangle(13, 14, 12, 0), + gsSP1Triangle(13, 15, 14, 0), + gsSPVertex(toad_player_vertex_face + 80, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSP1Triangle(2, 3, 4, 0), + gsSP1Triangle(4, 3, 5, 0), + gsSP1Triangle(4, 5, 6, 0), + gsSP1Triangle(5, 7, 6, 0), + gsSP1Triangle(5, 8, 7, 0), + gsSP1Triangle(8, 9, 7, 0), + gsSP1Triangle(8, 10, 9, 0), + gsSP1Triangle(11, 7, 9, 0), + gsSP1Triangle(6, 7, 11, 0), + gsSP1Triangle(6, 11, 12, 0), + gsSP1Triangle(13, 12, 11, 0), + gsSP1Triangle(13, 11, 14, 0), + gsSP1Triangle(11, 15, 14, 0), + gsSPVertex(toad_player_vertex_face + 96, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(0, 3, 1, 0), + gsSP1Triangle(4, 5, 6, 0), + gsSP1Triangle(4, 7, 5, 0), + gsSP1Triangle(8, 7, 4, 0), + gsSP1Triangle(8, 9, 7, 0), + gsSP1Triangle(9, 10, 7, 0), + gsSP1Triangle(9, 11, 10, 0), + gsSP1Triangle(7, 10, 12, 0), + gsSP1Triangle(7, 12, 5, 0), + gsSP1Triangle(13, 14, 15, 0), + gsSPVertex(toad_player_vertex_face + 112, 3, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_dl_face_textured[] = { + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_MODULATERGBFADE, G_CC_MODULATERGBFADE), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0, G_TX_RENDERTILE, 0, G_TX_CLAMP, 5, G_TX_NOLOD, G_TX_CLAMP, 5, G_TX_NOLOD), + gsDPSetTileSize(0, 0, 0, (32 - 1) << G_TEXTURE_IMAGE_FRAC, (32 - 1) << G_TEXTURE_IMAGE_FRAC), + + gsDPLoadSync(), + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)), + gsSPLight(&toad_player_lights_face.l, 1), + gsSPLight(&toad_player_lights_face.a, 2), + + gsSPDisplayList(toad_player_dl_face_inner), + + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_dl_face[] = { + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, toad_player_texture_face), + gsSPDisplayList(toad_player_dl_face_textured), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_dl_eyes_closed[] = { + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, toad_player_texture_eyes_closed), + gsSPDisplayList(toad_player_dl_face_textured), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_dl_eyes_half_closed[] = { + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, toad_player_texture_eyes_half_closed), + gsSPDisplayList(toad_player_dl_face_textured), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_dl_eyes_dead[] = { + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, toad_player_texture_eyes_dead), + gsSPDisplayList(toad_player_dl_face_textured), + gsSPEndDisplayList(), +}; + + ////////// + // hair // +////////// + +ALIGNED8 static const u8 toad_player_texture_hair[] = { +#include "actors/toad_player/custom_toad_hair.rgba16.inc.c" +}; + +Vtx toad_player_vertex_hair[] = { + {{{-20, 10 + 40, -11}, 0, {-7, -8},{0x0, 0x27, 0x79, 0xFF}}}, + {{{ 20, -28 + 40, 1}, 0, {999, 997},{0x0, 0x27, 0x79, 0xFF}}}, + {{{ 20, 10 + 40, -11}, 0, {999, -8},{0x0, 0x27, 0x79, 0xFF}}}, + {{{-20, -28 + 40, 1}, 0, {-7, 997},{0x0, 0x27, 0x79, 0xFF}}}, +}; + +const Gfx toad_player_dl_hair_inner[] = { + gsDPLoadSync(), + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)), + gsSPClearGeometryMode(G_CULL_BACK), + gsSPVertex(toad_player_vertex_hair + 0, 4, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(0, 3, 1, 0), + gsSPSetGeometryMode(G_CULL_BACK), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_dl_hair[] = { + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_MODULATERGBFADEA, G_CC_MODULATERGBFADEA), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPTileSync(), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0, G_TX_RENDERTILE, 0, G_TX_CLAMP, 5, G_TX_NOLOD, G_TX_CLAMP, 5, G_TX_NOLOD), + gsDPSetTileSize(0, 0, 0, (32 - 1) << G_TEXTURE_IMAGE_FRAC, (32 - 1) << G_TEXTURE_IMAGE_FRAC), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, toad_player_texture_hair), + gsSPDisplayList(toad_player_dl_hair_inner), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsSPEndDisplayList(), +}; + + ///////// + // cap // +///////// + +ALIGNED8 static const u8 toad_player_texture_cap[] = { +#include "actors/toad_player/custom_toad_cap.rgba16.inc.c" +}; + +static const Lights1 toad_player_lights_cap = gdSPDefLights1( + 0x7f, 0x7f, 0x7f, + 0xff, 0xff, 0xff, 0x28, 0x28, 0x28 +); + +Vtx toad_player_vertex_cap_decal[] = { + {{{34, -28, 97},0, {-42, 926},{0x18, 0x99, 0x46, 0xFF}}}, + {{{142, -44, 36},0, {1024, 984},{0x61, 0xB9, 0x28, 0xFF}}}, + {{{71, 13, 144},0, {82, 380},{0x4A, 0xC0, 0x52, 0xFF}}}, + {{{176, 0, 13},0, {1466, 550},{0x7A, 0xE2, 0x10, 0xFF}}}, + {{{89, 71, 148},0, {290, -208},{0x49, 0x17, 0x66, 0xFF}}}, + {{{89, 71, 148},0, {-92, 952},{0x49, 0x17, 0x66, 0xFF}}}, + {{{176, 0, 13},0, {1016, 906},{0x7A, 0xE2, 0x10, 0xFF}}}, + {{{176, 47, -12},0, {1010, 594},{0x7C, 0x1C, 0x5, 0xFF}}}, + {{{89, 119, 122},0, {-98, 640},{0x3D, 0x51, 0x4D, 0xFF}}}, + {{{142, 91, -36},0, {892, 212},{0x51, 0x60, 0xEB, 0xFF}}}, + {{{71, 149, 72},0, {2, 250},{0x35, 0x6D, 0x25, 0xFF}}}, + {{{79, 122, -52},0, {688, -162},{0x34, 0x63, 0xC3, 0xFF}}}, + {{{176, 0, 13},0, {-196, 438},{0x7A, 0xE2, 0x10, 0xFF}}}, + {{{88, -24, -147},0, {1220, 36},{0x2D, 0xDD, 0x8E, 0xFF}}}, + {{{176, 47, -12},0, {-198, -10},{0x7C, 0x1C, 0x5, 0xFF}}}, + {{{88, -72, -121},0, {1222, 482},{0x4E, 0xBE, 0xB4, 0xFF}}}, + {{{142, -44, 36},0, {-54, 916},{0x61, 0xB9, 0x28, 0xFF}}}, + {{{88, -72, -121},0, {1222, 482},{0x4E, 0xBE, 0xB4, 0xFF}}}, + {{{176, 0, 13},0, {-196, 438},{0x7A, 0xE2, 0x10, 0xFF}}}, + {{{71, -102, -71},0, {1084, 952},{0x5F, 0xAD, 0xEF, 0xFF}}}, + {{{-70, 13, 145},0, {184, 1066},{0xC6, 0xEA, 0x6F, 0xFF}}}, + {{{89, 71, 148},0, {1214, 712},{0x49, 0x17, 0x66, 0xFF}}}, + {{{-87, 71, 148},0, {34, 812},{0xC3, 0x13, 0x6E, 0xFF}}}, + {{{89, 119, 122},0, {1186, 352},{0x3D, 0x51, 0x4D, 0xFF}}}, + {{{-87, 119, 122},0, {6, 452},{0xD2, 0x4B, 0x5C, 0xFF}}}, + {{{71, 149, 72},0, {1050, -18},{0x35, 0x6D, 0x25, 0xFF}}}, + {{{-70, 149, 72},0, {104, 62},{0xE8, 0x78, 0x23, 0xFF}}}, + {{{-141, 91, -35},0, {456, 1066},{0xC3, 0x62, 0xCC, 0xFF}}}, + {{{-70, 149, 72},0, {1404, 676},{0xE8, 0x78, 0x23, 0xFF}}}, + {{{-38, 154, 8},0, {1000, 266},{0xD2, 0x72, 0xE1, 0xFF}}}, + {{{-78, 122, -51},0, {474, 484},{0xD0, 0x68, 0xC9, 0xFF}}}, + {{{0, 133, -57},0, {490, -104},{0xFB, 0x6C, 0xBD, 0xFF}}}, + {{{-38, 90, -112},0, {-38, 168},{0xE8, 0x55, 0xA4, 0xFF}}}, + {{{-78, 122, -51},0, {474, 484},{0xD0, 0x68, 0xC9, 0xFF}}}, + {{{0, 133, -57},0, {490, -104},{0xFB, 0x6C, 0xBD, 0xFF}}}, + {{{-70, 34, -143},0, {-462, 496},{0xEF, 0x2D, 0x8A, 0xFF}}}, + {{{-141, 91, -35},0, {456, 1066},{0xC3, 0x62, 0xCC, 0xFF}}}, + {{{-141, -44, 37},0, {-184, 898},{0x97, 0xC1, 0x22, 0xFF}}}, + {{{-70, 13, 145},0, {1120, 942},{0xC6, 0xEA, 0x6F, 0xFF}}}, + {{{-87, 71, 148},0, {1264, 448},{0xC3, 0x13, 0x6E, 0xFF}}}, + {{{-175, 0, 13},0, {-362, 392},{0x86, 0xE2, 0x10, 0xFF}}}, + {{{-87, 119, 122},0, {1258, -4},{0xD2, 0x4B, 0x5C, 0xFF}}}, + {{{-175, 48, -12},0, {-370, -58},{0x81, 0x0, 0x0, 0xFF}}}, + {{{71, 34, -144},0, {-26, 196},{0x10, 0x2D, 0x8A, 0xFF}}}, + {{{-70, 34, -143},0, {888, 166},{0xEF, 0x2D, 0x8A, 0xFF}}}, + {{{-38, 90, -112},0, {646, -188},{0xE8, 0x55, 0xA4, 0xFF}}}, + {{{88, -24, -147},0, {-106, 592},{0x2D, 0xDD, 0x8E, 0xFF}}}, + {{{-88, -23, -147},0, {1032, 556},{0xD2, 0xDE, 0x8E, 0xFF}}}, + {{{88, -72, -121},0, {-88, 942},{0x4E, 0xBE, 0xB4, 0xFF}}}, + {{{-88, -23, -147},0, {1032, 556},{0xD2, 0xDE, 0x8E, 0xFF}}}, + {{{88, -24, -147},0, {-106, 592},{0x2D, 0xDD, 0x8E, 0xFF}}}, + {{{-88, -72, -121},0, {1050, 906},{0xB2, 0xBE, 0xB4, 0xFF}}}, + {{{-70, -102, -71},0, {-96, 882},{0xA2, 0xAD, 0xF0, 0xFF}}}, + {{{-141, -44, 37},0, {1122, 1024},{0x97, 0xC1, 0x22, 0xFF}}}, + {{{-175, 0, 13},0, {1320, 596},{0x86, 0xE2, 0x10, 0xFF}}}, + {{{-88, -72, -121},0, {-198, 414},{0xB2, 0xBE, 0xB4, 0xFF}}}, + {{{-175, 48, -12},0, {1372, 98},{0x81, 0x0, 0x0, 0xFF}}}, + {{{-88, -23, -147},0, {-146, -82},{0xD2, 0xDE, 0x8E, 0xFF}}}, + {{{71, 34, -144},0, {832, 1186},{0x10, 0x2D, 0x8A, 0xFF}}}, + {{{-38, 90, -112},0, {1162, -70},{0xE8, 0x55, 0xA4, 0xFF}}}, + {{{39, 90, -112},0, {654, 498},{0x17, 0x55, 0xA4, 0xFF}}}, + {{{0, 133, -57},0, {414, -278},{0xFB, 0x6C, 0xBD, 0xFF}}}, + {{{79, 122, -52},0, {-98, 326},{0x34, 0x63, 0xC3, 0xFF}}}, + {{{142, 91, -36},0, {-524, 874},{0x51, 0x60, 0xEB, 0xFF}}}, +}; + +Vtx toad_player_vertex_cap[] = { + {{{-175, 48, -12},0, {-418, 482},{0x86, 0x1F, 0xF1, 0xFF}}}, + {{{-70, 149, 72},0, {178, 72},{0xD3, 0x74, 0x1A, 0xFF}}}, + {{{-141, 91, -35},0, {-280, 152},{0xA6, 0x50, 0xD6, 0xFF}}}, + {{{89, 71, 148},0, {-92, 952},{0x3D, 0x12, 0x6E, 0xFF}}}, + {{{176, 0, 13},0, {1016, 906},{0x7A, 0xE2, 0x10, 0xFF}}}, + {{{176, 47, -12},0, {1010, 594},{0x7A, 0x1E, 0xF0, 0xFF}}}, + {{{89, 119, 122},0, {-98, 640},{0x3D, 0x51, 0x4D, 0xFF}}}, + {{{142, 91, -36},0, {892, 212},{0x5B, 0x4F, 0xD6, 0xFF}}}, + {{{71, 149, 72},0, {2, 250},{0x2C, 0x74, 0x1A, 0xFF}}}, + {{{79, 122, -52},0, {688, -162},{0x2F, 0x68, 0xC8, 0xFF}}}, + {{{39, 154, 7},0, {194, -140},{0x17, 0x7B, 0xED, 0xFF}}}, + {{{176, 0, 13},0, {-196, 438},{0x7A, 0xE2, 0x10, 0xFF}}}, + {{{88, -24, -147},0, {1220, 36},{0x3D, 0xED, 0x92, 0xFF}}}, + {{{176, 47, -12},0, {-198, -10},{0x7A, 0x1E, 0xF0, 0xFF}}}, + {{{88, -72, -121},0, {1222, 482},{0x3D, 0xAF, 0xB3, 0xFF}}}, + {{{142, -44, 36},0, {-54, 916},{0x51, 0xAA, 0x2E, 0xFF}}}, + {{{142, -44, 36},0, {-54, 916},{0x51, 0xAA, 0x2E, 0xFF}}}, + {{{71, -102, -71},0, {1084, 952},{0x28, 0x88, 0xF1, 0xFF}}}, + {{{88, -72, -121},0, {1222, 482},{0x3D, 0xAF, 0xB3, 0xFF}}}, + {{{-70, 13, 145},0, {184, 1066},{0xD9, 0xC9, 0x6C, 0xFF}}}, + {{{89, 71, 148},0, {1214, 712},{0x3D, 0x12, 0x6E, 0xFF}}}, + {{{-87, 71, 148},0, {34, 812},{0xC3, 0x13, 0x6E, 0xFF}}}, + {{{89, 119, 122},0, {1186, 352},{0x3D, 0x51, 0x4D, 0xFF}}}, + {{{-87, 119, 122},0, {6, 452},{0xC3, 0x51, 0x4D, 0xFF}}}, + {{{71, 149, 72},0, {1050, -18},{0x2C, 0x74, 0x1A, 0xFF}}}, + {{{-70, 149, 72},0, {104, 62},{0xD3, 0x74, 0x1A, 0xFF}}}, + {{{-70, 149, 72},0, {178, 72},{0xD3, 0x74, 0x1A, 0xFF}}}, + {{{39, 154, 7},0, {780, -272},{0x17, 0x7B, 0xED, 0xFF}}}, + {{{-38, 154, 8},0, {304, -170},{0xE9, 0x7B, 0xED, 0xFF}}}, + {{{71, 149, 72},0, {1036, -112},{0x2C, 0x74, 0x1A, 0xFF}}}, + {{{-141, 91, -35},0, {456, 1066},{0xA6, 0x50, 0xD6, 0xFF}}}, + {{{-70, 149, 72},0, {1404, 676},{0xD3, 0x74, 0x1A, 0xFF}}}, + {{{-38, 154, 8},0, {1000, 266},{0xE9, 0x7B, 0xED, 0xFF}}}, + {{{-78, 122, -51},0, {474, 484},{0xD0, 0x68, 0xC9, 0xFF}}}, + {{{0, 133, -57},0, {490, -104},{0x0, 0x70, 0xC4, 0xFF}}}, + {{{-38, 90, -112},0, {-38, 168},{0xE8, 0x55, 0xA4, 0xFF}}}, + {{{-70, 34, -143},0, {-462, 496},{0xD4, 0x2C, 0x91, 0xFF}}}, + {{{-38, 154, 8},0, {-16, -16},{0xE9, 0x7B, 0xED, 0xFF}}}, + {{{39, 154, 7},0, {-16, -16},{0x17, 0x7B, 0xED, 0xFF}}}, + {{{0, 133, -57},0, {-16, -16},{0x0, 0x70, 0xC4, 0xFF}}}, + {{{79, 122, -52},0, {-16, -16},{0x2F, 0x68, 0xC8, 0xFF}}}, + {{{-141, -44, 37},0, {-184, 898},{0xAE, 0xAA, 0x2E, 0xFF}}}, + {{{-70, 13, 145},0, {1120, 942},{0xD9, 0xC9, 0x6C, 0xFF}}}, + {{{-87, 71, 148},0, {1264, 448},{0xC3, 0x13, 0x6E, 0xFF}}}, + {{{-175, 0, 13},0, {-362, 392},{0x86, 0xE2, 0x10, 0xFF}}}, + {{{-87, 119, 122},0, {1258, -4},{0xC3, 0x51, 0x4D, 0xFF}}}, + {{{-175, 0, 13},0, {-362, 392},{0x86, 0xE2, 0x10, 0xFF}}}, + {{{-87, 119, 122},0, {1258, -4},{0xC3, 0x51, 0x4D, 0xFF}}}, + {{{-175, 48, -12},0, {-370, -58},{0x86, 0x1F, 0xF1, 0xFF}}}, + {{{-70, 149, 72},0, {1100, -320},{0xD3, 0x74, 0x1A, 0xFF}}}, + {{{71, 34, -144},0, {-26, 196},{0x2D, 0x2B, 0x91, 0xFF}}}, + {{{-70, 34, -143},0, {888, 166},{0xD4, 0x2C, 0x91, 0xFF}}}, + {{{-38, 90, -112},0, {646, -188},{0xE8, 0x55, 0xA4, 0xFF}}}, + {{{88, -24, -147},0, {-106, 592},{0x3D, 0xED, 0x92, 0xFF}}}, + {{{-88, -23, -147},0, {1032, 556},{0xC3, 0xEF, 0x92, 0xFF}}}, + {{{88, -72, -121},0, {-88, 942},{0x3D, 0xAF, 0xB3, 0xFF}}}, + {{{-88, -72, -121},0, {1050, 906},{0xC3, 0xAF, 0xB3, 0xFF}}}, + {{{-70, -102, -71},0, {-96, 882},{0xD8, 0x88, 0xF1, 0xFF}}}, + {{{-141, -44, 37},0, {1122, 1024},{0xAE, 0xAA, 0x2E, 0xFF}}}, + {{{-175, 0, 13},0, {1320, 596},{0x86, 0xE2, 0x10, 0xFF}}}, + {{{-88, -72, -121},0, {-198, 414},{0xC3, 0xAF, 0xB3, 0xFF}}}, + {{{-175, 48, -12},0, {1372, 98},{0x86, 0x1F, 0xF1, 0xFF}}}, + {{{-88, -72, -121},0, {-198, 414},{0xC3, 0xAF, 0xB3, 0xFF}}}, + {{{-175, 48, -12},0, {1372, 98},{0x86, 0x1F, 0xF1, 0xFF}}}, + {{{-88, -23, -147},0, {-146, -82},{0xC3, 0xEF, 0x92, 0xFF}}}, + {{{176, 47, -12},0, {-16, -16},{0x7A, 0x1E, 0xF0, 0xFF}}}, + {{{71, 34, -144},0, {-16, -16},{0x2D, 0x2B, 0x91, 0xFF}}}, + {{{142, 91, -36},0, {-16, -16},{0x5B, 0x4F, 0xD6, 0xFF}}}, + {{{88, -24, -147},0, {-16, -16},{0x3D, 0xED, 0x92, 0xFF}}}, + {{{71, -102, -71},0, {-16, -16},{0x28, 0x88, 0xF1, 0xFF}}}, + {{{-88, -72, -121},0, {-16, -16},{0xC3, 0xAF, 0xB3, 0xFF}}}, + {{{88, -72, -121},0, {-16, -16},{0x3D, 0xAF, 0xB3, 0xFF}}}, + {{{-70, -102, -71},0, {-16, -16},{0xD8, 0x88, 0xF1, 0xFF}}}, + {{{-88, -23, -147},0, {-16, -16},{0xC3, 0xEF, 0x92, 0xFF}}}, + {{{-141, 91, -35},0, {-16, -16},{0xA6, 0x50, 0xD6, 0xFF}}}, + {{{-70, 34, -143},0, {-16, -16},{0xD4, 0x2C, 0x91, 0xFF}}}, + {{{-175, 48, -12},0, {-16, -16},{0x86, 0x1F, 0xF1, 0xFF}}}, + {{{34, -28, 97},0, {-42, 926},{0xD8, 0xAD, 0x57, 0xFF}}}, + {{{-17, 8, 42},0, {-548, 1048},{0x29, 0x88, 0xFB, 0xFF}}}, + {{{18, 8, 42},0, {-42, 926},{0xDF, 0x86, 0xF9, 0xFF}}}, + {{{-33, -28, 97},0, {-548, 1048},{0x2C, 0xB3, 0x5B, 0xFF}}}, + {{{34, -28, 97},0, {-42, 926},{0x8, 0xC2, 0x6F, 0xFF}}}, + {{{-33, -28, 97},0, {-548, 1048},{0xFC, 0xC1, 0x6E, 0xFF}}}, + {{{71, 13, 144},0, {82, 380},{0x27, 0xC7, 0x6B, 0xFF}}}, + {{{142, -44, 36},0, {1024, 984},{0x51, 0xAA, 0x2E, 0xFF}}}, + {{{176, 0, 13},0, {1466, 550},{0x7A, 0xE2, 0x10, 0xFF}}}, + {{{89, 71, 148},0, {290, -208},{0x3D, 0x12, 0x6E, 0xFF}}}, + {{{-70, 13, 145},0, {-982, 638},{0xD9, 0xC9, 0x6C, 0xFF}}}, + {{{34, -28, 97},0, {718, 1666},{0x8, 0xC2, 0x6F, 0xFF}}}, + {{{76, -57, 47},0, {606, 1810},{0x15, 0xBA, 0x68, 0xFF}}}, + {{{142, -44, 36},0, {624, 1980},{0x51, 0xAA, 0x2E, 0xFF}}}, + {{{34, -28, 97},0, {718, 1666},{0xD8, 0xAD, 0x57, 0xFF}}}, + {{{76, -57, 47},0, {606, 1810},{0xC9, 0xE2, 0x6F, 0xFF}}}, + {{{76, -57, 47},0, {606, 1810},{0xC9, 0xE2, 0x6F, 0xFF}}}, + {{{34, -28, 97},0, {718, 1666},{0xD8, 0xAD, 0x57, 0xFF}}}, + {{{18, 8, 42},0, {718, 1666},{0xDF, 0x86, 0xF9, 0xFF}}}, + {{{39, -7, 17},0, {606, 1810},{0xB4, 0xA8, 0x33, 0xFF}}}, + {{{18, -23, -10},0, {442, 1742},{0xDE, 0xCB, 0x6E, 0xFF}}}, + {{{-34, -9, 16},0, {538, 1444},{0x4F, 0xAB, 0x33, 0xFF}}}, + {{{-17, 8, 42},0, {690, 1492},{0x29, 0x88, 0xFB, 0xFF}}}, + {{{-33, -28, 97},0, {690, 1492},{0x2C, 0xB3, 0x5B, 0xFF}}}, + {{{-66, -61, 45},0, {538, 1444},{0x3C, 0xE5, 0x6D, 0xFF}}}, + {{{-33, -28, 97},0, {690, 1492},{0xFC, 0xC1, 0x6E, 0xFF}}}, + {{{-66, -61, 45},0, {538, 1444},{0xED, 0xB8, 0x67, 0xFF}}}, + {{{-70, 13, 145},0, {826, 1356},{0xD9, 0xC9, 0x6C, 0xFF}}}, + {{{-141, -44, 37},0, {508, 1254},{0xAE, 0xAA, 0x2E, 0xFF}}}, + {{{-33, -88, -5},0, {416, 1570},{0xF5, 0xAA, 0x5D, 0xFF}}}, + {{{-70, -102, -71},0, {250, 1518},{0xD8, 0x88, 0xF1, 0xFF}}}, + {{{34, -88, -5},0, {442, 1742},{0xB, 0xAB, 0x5E, 0xFF}}}, + {{{34, -88, -5},0, {442, 1742},{0xB, 0xAB, 0x5E, 0xFF}}}, + {{{-70, -102, -71},0, {250, 1518},{0xD8, 0x88, 0xF1, 0xFF}}}, + {{{71, -102, -71},0, {306, 1880},{0x28, 0x88, 0xF1, 0xFF}}}, + {{{76, -57, 47},0, {606, 1810},{0x15, 0xBA, 0x68, 0xFF}}}, + {{{142, -44, 36},0, {624, 1980},{0x51, 0xAA, 0x2E, 0xFF}}}, + {{{76, -57, 47},0, {606, 1810},{0xC9, 0xE2, 0x6F, 0xFF}}}, + {{{34, -88, -5},0, {442, 1742},{0xE9, 0xFF, 0x7D, 0xFF}}}, + {{{39, -7, 17},0, {606, 1810},{0xB4, 0xA8, 0x33, 0xFF}}}, + {{{18, -23, -10},0, {442, 1742},{0xDE, 0xCB, 0x6E, 0xFF}}}, + {{{-33, -88, -5},0, {416, 1570},{0x19, 0xFE, 0x7D, 0xFF}}}, + {{{-17, -23, -10},0, {416, 1570},{0x27, 0xCB, 0x6D, 0xFF}}}, + {{{-34, -9, 16},0, {538, 1444},{0x4F, 0xAB, 0x33, 0xFF}}}, + {{{-66, -61, 45},0, {538, 1444},{0x3C, 0xE5, 0x6D, 0xFF}}}, + {{{-66, -61, 45},0, {538, 1444},{0xED, 0xB8, 0x67, 0xFF}}}, + {{{-33, -88, -5},0, {416, 1570},{0xF5, 0xAA, 0x5D, 0xFF}}}, + {{{71, 34, -144},0, {832, 1186},{0x2D, 0x2B, 0x91, 0xFF}}}, + {{{-38, 90, -112},0, {1162, -70},{0xE8, 0x55, 0xA4, 0xFF}}}, + {{{39, 90, -112},0, {654, 498},{0x17, 0x55, 0xA4, 0xFF}}}, + {{{0, 133, -57},0, {414, -278},{0x0, 0x70, 0xC4, 0xFF}}}, + {{{79, 122, -52},0, {-98, 326},{0x2F, 0x68, 0xC8, 0xFF}}}, + {{{142, 91, -36},0, {-524, 874},{0x5B, 0x4F, 0xD6, 0xFF}}}, +}; + +const Gfx toad_player_dl_cap_decal[] = { + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_MODULATERGBFADEA, G_CC_MODULATERGBFADEA), + + gsDPTileSync(), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0, G_TX_RENDERTILE, 0, G_TX_CLAMP, 6, G_TX_NOLOD, G_TX_CLAMP, 5, G_TX_NOLOD), + gsDPSetTileSize(0, 0, 0, (32 - 1) << G_TEXTURE_IMAGE_FRAC, (32 - 1) << G_TEXTURE_IMAGE_FRAC), + + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, toad_player_texture_cap), + gsDPLoadSync(), + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)), + + //gsSPClearGeometryMode(G_CULL_BACK), + + gsSPCopyLightEXT(1, 5), + gsSPCopyLightEXT(2, 6), + + gsSPVertex(toad_player_vertex_cap_decal + 0, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSP1Triangle(2, 3, 4, 0), + gsSP1Triangle(5, 6, 7, 0), + gsSP1Triangle(5, 7, 8, 0), + gsSP1Triangle(8, 7, 9, 0), + gsSP1Triangle(8, 9, 10, 0), + gsSP1Triangle(10, 9, 11, 0), + gsSP1Triangle(12, 13, 14, 0), + gsSP1Triangle(12, 15, 13, 0), + gsSPVertex(toad_player_vertex_cap_decal + 16, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(0, 3, 1, 0), + gsSP1Triangle(4, 5, 6, 0), + gsSP1Triangle(6, 5, 7, 0), + gsSP1Triangle(6, 7, 8, 0), + gsSP1Triangle(8, 7, 9, 0), + gsSP1Triangle(8, 9, 10, 0), + gsSP1Triangle(11, 12, 13, 0), + gsSP1Triangle(11, 13, 14, 0), + gsSP1Triangle(14, 13, 15, 0), + gsSPVertex(toad_player_vertex_cap_decal + 32, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 1, 0, 0), + gsSP1Triangle(3, 4, 1, 0), + gsSP1Triangle(5, 6, 7, 0), + gsSP1Triangle(5, 7, 8, 0), + gsSP1Triangle(8, 7, 9, 0), + gsSP1Triangle(8, 9, 10, 0), + gsSP1Triangle(11, 12, 13, 0), + gsSP1Triangle(14, 12, 11, 0), + gsSP1Triangle(14, 15, 12, 0), + gsSPVertex(toad_player_vertex_cap_decal + 48, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(0, 3, 1, 0), + gsSP1Triangle(4, 5, 6, 0), + gsSP1Triangle(4, 6, 7, 0), + gsSP1Triangle(7, 6, 8, 0), + gsSP1Triangle(7, 8, 9, 0), + gsSP1Triangle(10, 11, 12, 0), + gsSP1Triangle(12, 11, 13, 0), + gsSP1Triangle(14, 12, 13, 0), + gsSP1Triangle(15, 12, 14, 0), + gsSP1Triangle(15, 10, 12, 0), + //gsSPSetGeometryMode(G_CULL_BACK), + + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_dl_cap_inner[] = { + gsSPVertex(toad_player_vertex_cap + 0, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 4, 5, 0), + gsSP1Triangle(3, 5, 6, 0), + gsSP1Triangle(6, 5, 7, 0), + gsSP1Triangle(6, 7, 8, 0), + gsSP1Triangle(8, 7, 9, 0), + gsSP1Triangle(8, 9, 10, 0), + gsSP1Triangle(11, 12, 13, 0), + gsSP1Triangle(11, 14, 12, 0), + gsSP1Triangle(15, 14, 11, 0), + gsSPVertex(toad_player_vertex_cap + 16, 14, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 4, 5, 0), + gsSP1Triangle(5, 4, 6, 0), + gsSP1Triangle(5, 6, 7, 0), + gsSP1Triangle(7, 6, 8, 0), + gsSP1Triangle(7, 8, 9, 0), + gsSP1Triangle(10, 11, 12, 0), + gsSP1Triangle(10, 13, 11, 0), + gsSPVertex(toad_player_vertex_cap + 30, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(0, 2, 3, 0), + gsSP1Triangle(3, 2, 4, 0), + gsSP1Triangle(5, 3, 4, 0), + gsSP1Triangle(6, 3, 5, 0), + gsSP1Triangle(6, 0, 3, 0), + gsSP1Triangle(7, 8, 9, 0), + gsSP1Triangle(8, 10, 9, 0), + gsSP1Triangle(11, 12, 13, 0), + gsSP1Triangle(11, 13, 14, 0), + gsSP1Triangle(14, 13, 15, 0), + gsSPVertex(toad_player_vertex_cap + 46, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSP1Triangle(4, 5, 6, 0), + gsSP1Triangle(7, 5, 4, 0), + gsSP1Triangle(7, 8, 5, 0), + gsSP1Triangle(9, 8, 7, 0), + gsSP1Triangle(9, 10, 8, 0), + gsSP1Triangle(11, 12, 13, 0), + gsSP1Triangle(11, 13, 14, 0), + gsSP1Triangle(14, 13, 15, 0), + gsSPVertex(toad_player_vertex_cap + 62, 15, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 4, 5, 0), + gsSP1Triangle(3, 6, 4, 0), + gsSP1Triangle(7, 8, 9, 0), + gsSP1Triangle(7, 10, 8, 0), + gsSP1Triangle(11, 12, 13, 0), + gsSP1Triangle(11, 14, 12, 0), + gsSPVertex(toad_player_vertex_cap + 77, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(0, 3, 1, 0), + gsSP1Triangle(4, 3, 0, 0), + gsSP1Triangle(4, 5, 3, 0), + gsSP1Triangle(5, 4, 6, 0), + gsSP1Triangle(4, 7, 6, 0), + gsSP1Triangle(6, 7, 8, 0), + gsSP1Triangle(6, 8, 9, 0), + gsSP1Triangle(10, 6, 9, 0), + gsSP1Triangle(5, 6, 10, 0), + gsSP1Triangle(11, 12, 13, 0), + gsSP1Triangle(12, 11, 14, 0), + gsSP1Triangle(12, 14, 15, 0), + gsSPVertex(toad_player_vertex_cap + 93, 16, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(0, 2, 3, 0), + gsSP1Triangle(4, 3, 2, 0), + gsSP1Triangle(5, 4, 2, 0), + gsSP1Triangle(2, 6, 5, 0), + gsSP1Triangle(7, 5, 6, 0), + gsSP1Triangle(7, 8, 5, 0), + gsSP1Triangle(9, 8, 7, 0), + gsSP1Triangle(9, 10, 8, 0), + gsSP1Triangle(10, 9, 11, 0), + gsSP1Triangle(10, 11, 12, 0), + gsSP1Triangle(13, 10, 12, 0), + gsSP1Triangle(13, 12, 14, 0), + gsSP1Triangle(15, 13, 14, 0), + gsSPVertex(toad_player_vertex_cap + 109, 15, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(3, 0, 2, 0), + gsSP1Triangle(3, 2, 4, 0), + gsSP1Triangle(0, 3, 5, 0), + gsSP1Triangle(0, 5, 6, 0), + gsSP1Triangle(6, 5, 7, 0), + gsSP1Triangle(6, 7, 8, 0), + gsSP1Triangle(9, 6, 8, 0), + gsSP1Triangle(9, 8, 10, 0), + gsSP1Triangle(11, 10, 8, 0), + gsSP1Triangle(12, 10, 11, 0), + gsSP1Triangle(12, 9, 10, 0), + gsSP1Triangle(13, 9, 12, 0), + gsSP1Triangle(13, 14, 9, 0), + gsSP1Triangle(14, 6, 9, 0), + gsSP1Triangle(14, 0, 6, 0), + gsSPVertex(toad_player_vertex_cap + 124, 6, 0), + gsSP1Triangle(0, 1, 2, 0), + gsSP1Triangle(2, 1, 3, 0), + gsSP1Triangle(4, 2, 3, 0), + gsSP1Triangle(5, 2, 4, 0), + gsSP1Triangle(5, 0, 2, 0), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_dl_cap[] = { + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_SHADEFADEA, G_CC_SHADEFADEA), + + gsSPLight(&toad_player_lights_cap.l, 1), + gsSPLight(&toad_player_lights_cap.a, 2), + + gsSPDisplayList(toad_player_dl_cap_inner), + + gsSPEndDisplayList(), +}; + + /////////////// + // cap wings // +/////////////// + +static const Lights1 toad_player_lights_wings = gdSPDefLights1( + 0x7f, 0x7f, 0x7f, + 0xff, 0xff, 0xff, 0x28, 0x28, 0x28 +); + +ALIGNED8 static const u8 toad_player_texture_wings_half_1[] = { +#include "actors/mario/mario_wing.rgba16.inc.c" +}; + +ALIGNED8 static const u8 toad_player_texture_wings_half_2[] = { +#include "actors/mario/mario_wing_tip.rgba16.inc.c" +}; + +ALIGNED8 static const u8 toad_player_texture_metal_wings_half_1[] = { +#include "actors/mario/mario_metal_wing_unused.rgba16.inc.c" +}; + +ALIGNED8 static const u8 toad_player_texture_metal_wings_half_2[] = { +#include "actors/mario/mario_metal_wing_tip_unused.rgba16.inc.c" +}; + +static const Vtx toad_player_vertex_wings_half_1[] = { + {{{ -105, 212, 0}, 0, { 0, 0}, {0x00, 0x00, 0x7f, 0xff}}}, + {{{ -105, 0, 0}, 0, { 0, 2012}, {0x00, 0x00, 0x7f, 0xff}}}, + {{{ 0, 0, 0}, 0, { 990, 2012}, {0x00, 0x00, 0x7f, 0xff}}}, + {{{ 0, 212, 0}, 0, { 990, 0}, {0x00, 0x00, 0x7f, 0xff}}}, +}; + +static const Vtx toad_player_vertex_wings_half_2[] = { + {{{ 0, 0, 0}, 0, { 0, 2012}, {0x00, 0x00, 0x7f, 0xff}}}, + {{{ 106, 212, 0}, 0, { 990, 0}, {0x00, 0x00, 0x7f, 0xff}}}, + {{{ 0, 212, 0}, 0, { 0, 0}, {0x00, 0x00, 0x7f, 0xff}}}, + {{{ 106, 0, 0}, 0, { 990, 2012}, {0x00, 0x00, 0x7f, 0xff}}}, +}; + +const Gfx toad_player_dl_wings_half_1[] = { + gsSPVertex(toad_player_vertex_wings_half_1, 4, 0), + gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_dl_wings_half_2[] = { + gsSPVertex(toad_player_vertex_wings_half_2, 4, 0), + gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_cap_wings[] = { + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsSPClearGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPTileSync(), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0, G_TX_RENDERTILE, 0, G_TX_CLAMP, 6, G_TX_NOLOD, G_TX_CLAMP, 5, G_TX_NOLOD), + gsDPSetTileSize(0, 0, 0, (32 - 1) << G_TEXTURE_IMAGE_FRAC, (64 - 1) << G_TEXTURE_IMAGE_FRAC), + gsSPLight(&toad_player_lights_wings.l, 1), + gsSPLight(&toad_player_lights_wings.a, 2), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, toad_player_texture_wings_half_1), + gsDPLoadSync(), + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)), + gsSPDisplayList(toad_player_dl_wings_half_1), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, toad_player_texture_wings_half_2), + gsDPLoadSync(), + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)), + gsSPDisplayList(toad_player_dl_wings_half_2), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_metal_cap_wings[] = { + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsSPClearGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPTileSync(), + gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0, G_TX_RENDERTILE, 0, G_TX_CLAMP, 6, G_TX_NOLOD, G_TX_CLAMP, 5, G_TX_NOLOD), + gsDPSetTileSize(0, 0, 0, (32 - 1) << G_TEXTURE_IMAGE_FRAC, (64 - 1) << G_TEXTURE_IMAGE_FRAC), + gsSPLight(&toad_player_lights_wings.l, 1), + gsSPLight(&toad_player_lights_wings.a, 2), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, toad_player_texture_metal_wings_half_1), + gsDPLoadSync(), + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)), + gsSPDisplayList(toad_player_dl_wings_half_1), + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, toad_player_texture_metal_wings_half_2), + gsDPLoadSync(), + gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)), + gsSPDisplayList(toad_player_dl_wings_half_2), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), +}; + +//////////////////// + +static const Vtx toad_player_dl_vertex_jacket_1[] = { + {{{ -80, -27, -24}, 0, { 0, 0}, {0x90, 0x28, 0xd5, 0xff}}}, + {{{ -61, 26, 28}, 0, { 0, 0}, {0x9c, 0x3a, 0x32, 0xff}}}, + {{{ -61, 26, -27}, 0, { 0, 0}, {0x93, 0x37, 0xdf, 0xff}}}, + {{{ -35, 68, -34}, 0, { 0, 0}, {0xc6, 0x48, 0xaa, 0xff}}}, + {{{ 36, 68, -34}, 0, { 0, 0}, {0x57, 0x4b, 0xcb, 0xff}}}, + {{{ 31, 26, -60}, 0, { 0, 0}, {0x26, 0x35, 0x94, 0xff}}}, + {{{ 36, 60, 20}, 0, { 0, 0}, {0x54, 0x4d, 0x35, 0xff}}}, + {{{ 62, 26, 28}, 0, { 0, 0}, {0x63, 0x3f, 0x2d, 0xff}}}, + {{{ 62, 26, -27}, 0, { 0, 0}, {0x6d, 0x2e, 0xd5, 0xff}}}, + {{{ 26, 29, 50}, 0, { 0, 0}, {0x45, 0x31, 0x5e, 0xff}}}, + {{{ 81, -23, 30}, 0, { 0, 0}, {0x6a, 0x2e, 0x33, 0xff}}}, + {{{ 81, -27, -24}, 0, { 0, 0}, {0x71, 0x26, 0xd6, 0xff}}}, + {{{ 40, -30, -76}, 0, { 0, 0}, {0x32, 0x25, 0x92, 0xff}}}, + {{{ 40, -18, 65}, 0, { 0, 0}, {0x4f, 0x32, 0x55, 0xff}}}, + {{{ -80, -23, 30}, 0, { 0, 0}, {0x93, 0x2c, 0x2f, 0xff}}}, + {{{ -30, 26, -60}, 0, { 0, 0}, {0xcf, 0x2b, 0x94, 0xff}}}, +}; + +static const Vtx toad_player_dl_vertex_jacket_2[] = { + {{{ -35, 60, 20}, 0, { 0, 0}, {0xa1, 0x4b, 0x23, 0xff}}}, + {{{ -61, 26, -27}, 0, { 0, 0}, {0x93, 0x37, 0xdf, 0xff}}}, + {{{ -61, 26, 28}, 0, { 0, 0}, {0x9c, 0x3a, 0x32, 0xff}}}, + {{{ -25, 29, 50}, 0, { 0, 0}, {0xc2, 0x3a, 0x5d, 0xff}}}, + {{{ -39, -18, 65}, 0, { 0, 0}, {0xb7, 0x2a, 0x5e, 0xff}}}, + {{{ -35, 68, -34}, 0, { 0, 0}, {0xc6, 0x48, 0xaa, 0xff}}}, + {{{ 40, -30, -76}, 0, { 0, 0}, {0x32, 0x25, 0x92, 0xff}}}, + {{{ -39, -30, -76}, 0, { 0, 0}, {0xcd, 0x27, 0x93, 0xff}}}, + {{{ -30, 26, -60}, 0, { 0, 0}, {0xcf, 0x2b, 0x94, 0xff}}}, + {{{ 31, 26, -60}, 0, { 0, 0}, {0x26, 0x35, 0x94, 0xff}}}, + {{{ -80, -23, 30}, 0, { 0, 0}, {0x93, 0x2c, 0x2f, 0xff}}}, + {{{ -80, -27, -24}, 0, { 0, 0}, {0x90, 0x28, 0xd5, 0xff}}}, +}; + +const Gfx toad_player_dl_jacket_inner[] = { + gsSPClearGeometryMode(G_CULL_BACK), + gsSPVertex(toad_player_dl_vertex_jacket_1, 16, 0), + gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), + gsSP2Triangles( 4, 6, 7, 0x0, 4, 7, 8, 0x0), + gsSP2Triangles( 8, 5, 4, 0x0, 9, 7, 6, 0x0), + gsSP2Triangles(10, 8, 7, 0x0, 10, 7, 9, 0x0), + gsSP2Triangles(10, 11, 8, 0x0, 12, 8, 11, 0x0), + gsSP2Triangles(12, 5, 8, 0x0, 10, 9, 13, 0x0), + gsSP2Triangles( 0, 14, 1, 0x0, 15, 0, 2, 0x0), + gsSPVertex(toad_player_dl_vertex_jacket_2, 12, 0), + gsSP2Triangles( 0, 1, 2, 0x0, 2, 3, 0, 0x0), + gsSP2Triangles( 4, 3, 2, 0x0, 0, 5, 1, 0x0), + gsSP2Triangles( 6, 7, 8, 0x0, 6, 8, 9, 0x0), + gsSP2Triangles( 5, 9, 8, 0x0, 4, 2, 10, 0x0), + gsSP2Triangles( 8, 1, 5, 0x0, 8, 7, 11, 0x0), + gsSPSetGeometryMode(G_CULL_BACK), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_dl_jacket[] = { + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_SHADEFADEA, G_CC_SHADEFADEA), + gsSPCopyLightEXT(1, 3), + gsSPCopyLightEXT(2, 4), + gsSPDisplayList(toad_player_dl_jacket_inner), + gsSPEndDisplayList(), +}; + +static const Lights1 toad_player_lights_body_1 = gdSPDefLights1( + 0x7f, 0x7f, 0x7f, + 0xff, 0xff, 0xff, 0x28, 0x28, 0x28 +); + +static const Lights1 toad_player_lights_body_2 = gdSPDefLights1( + 0x7f, 0x6a, 0x50, + 0xfe, 0xd5, 0xa1, 0x28, 0x28, 0x28 +); + +static const Vtx toad_player_vertex_body_1[] = { + {{{ 44, -69, -33}, 0, { 0, 0}, {0x21, 0x90, 0xd1, 0xff}}}, + {{{ -34, -45, -60}, 0, { 0, 0}, {0xdb, 0xd0, 0x91, 0xff}}}, + {{{ 35, -45, -60}, 0, { 0, 0}, {0x2e, 0xf5, 0x8b, 0xff}}}, + {{{ 71, -33, 25}, 0, { 0, 0}, {0x74, 0x05, 0x32, 0xff}}}, + {{{ 57, 9, 22}, 0, { 0, 0}, {0x67, 0x41, 0x23, 0xff}}}, + {{{ 29, 9, 49}, 0, { 0, 0}, {0x2b, 0x33, 0x6b, 0xff}}}, + {{{ 35, -33, 61}, 0, { 0, 0}, {0x28, 0xe3, 0x74, 0xff}}}, + {{{ 44, -69, 34}, 0, { 0, 0}, {0x43, 0xa0, 0x2e, 0xff}}}, + {{{ 71, -38, -29}, 0, { 0, 0}, {0x72, 0xdc, 0xd7, 0xff}}}, + {{{ 57, 9, -26}, 0, { 0, 0}, {0x69, 0x30, 0xce, 0xff}}}, + {{{ -43, -69, 34}, 0, { 0, 0}, {0xdb, 0x96, 0x3a, 0xff}}}, + {{{ -34, -33, 61}, 0, { 0, 0}, {0xcf, 0x04, 0x74, 0xff}}}, + {{{ -28, 9, -51}, 0, { 0, 0}, {0xd6, 0x25, 0x8f, 0xff}}}, + {{{ 29, 9, -51}, 0, { 0, 0}, {0x21, 0x2d, 0x8f, 0xff}}}, +}; + +static const Vtx toad_player_vertex_body_2[] = { + {{{ -70, -38, -29}, 0, { 0, 0}, {0x8d, 0xfe, 0xcc, 0xff}}}, + {{{ -56, 9, 22}, 0, { 0, 0}, {0x96, 0x35, 0x2c, 0xff}}}, + {{{ -56, 9, -26}, 0, { 0, 0}, {0x98, 0x3c, 0xda, 0xff}}}, + {{{ 44, -69, -33}, 0, { 0, 0}, {0x21, 0x90, 0xd1, 0xff}}}, + {{{ -43, -69, 34}, 0, { 0, 0}, {0xdb, 0x96, 0x3a, 0xff}}}, + {{{ -43, -69, -33}, 0, { 0, 0}, {0xc0, 0x99, 0xdc, 0xff}}}, + {{{ -34, -45, -60}, 0, { 0, 0}, {0xdb, 0xd0, 0x91, 0xff}}}, + {{{ -34, -33, 61}, 0, { 0, 0}, {0xcf, 0x04, 0x74, 0xff}}}, + {{{ -28, 9, 49}, 0, { 0, 0}, {0xdf, 0x3f, 0x68, 0xff}}}, + {{{ -70, -33, 25}, 0, { 0, 0}, {0x8c, 0xe2, 0x29, 0xff}}}, + {{{ 29, 9, 49}, 0, { 0, 0}, {0x2b, 0x33, 0x6b, 0xff}}}, + {{{ -28, 9, -51}, 0, { 0, 0}, {0xd6, 0x25, 0x8f, 0xff}}}, +}; + +static const Vtx toad_player_vertex_body_3[] = { + {{{ 29, 9, 49}, 0, { 0, 0}, {0x2b, 0x33, 0x6b, 0xff}}}, + {{{ 57, 9, 22}, 0, { 0, 0}, {0x67, 0x41, 0x23, 0xff}}}, + {{{ 21, 55, 14}, 0, { 0, 0}, {0x22, 0x6d, 0x36, 0xff}}}, + {{{ -28, 9, 49}, 0, { 0, 0}, {0xdf, 0x3f, 0x68, 0xff}}}, + {{{ 21, 55, -28}, 0, { 0, 0}, {0x43, 0x60, 0xd0, 0xff}}}, + {{{ 57, 9, -26}, 0, { 0, 0}, {0x69, 0x30, 0xce, 0xff}}}, + {{{ -20, 55, -28}, 0, { 0, 0}, {0xdc, 0x67, 0xc0, 0xff}}}, + {{{ -20, 55, 14}, 0, { 0, 0}, {0xc0, 0x65, 0x29, 0xff}}}, + {{{ 29, 9, -51}, 0, { 0, 0}, {0x21, 0x2d, 0x8f, 0xff}}}, + {{{ -28, 9, -51}, 0, { 0, 0}, {0xd6, 0x25, 0x8f, 0xff}}}, + {{{ -56, 9, 22}, 0, { 0, 0}, {0x96, 0x35, 0x2c, 0xff}}}, + {{{ -56, 9, -26}, 0, { 0, 0}, {0x98, 0x3c, 0xda, 0xff}}}, +}; + +const Gfx toad_player_dl_body_inner[] = { + gsSPVertex(toad_player_vertex_body_1, 14, 0), + gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), + gsSP2Triangles( 3, 5, 6, 0x0, 3, 6, 7, 0x0), + gsSP2Triangles( 7, 8, 3, 0x0, 3, 9, 4, 0x0), + gsSP2Triangles( 3, 8, 9, 0x0, 10, 7, 6, 0x0), + gsSP2Triangles(10, 6, 11, 0x0, 11, 6, 5, 0x0), + gsSP2Triangles( 7, 0, 8, 0x0, 0, 7, 10, 0x0), + gsSP2Triangles( 2, 12, 13, 0x0, 2, 1, 12, 0x0), + gsSP2Triangles( 2, 8, 0, 0x0, 2, 13, 9, 0x0), + gsSP1Triangle( 2, 9, 8, 0x0), + gsSPVertex(toad_player_vertex_body_2, 12, 0), + gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0), + gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 1, 0x0), + gsSP2Triangles( 7, 1, 9, 0x0, 7, 10, 8, 0x0), + gsSP2Triangles( 7, 9, 4, 0x0, 5, 4, 9, 0x0), + gsSP2Triangles( 5, 9, 0, 0x0, 0, 9, 1, 0x0), + gsSP2Triangles(11, 6, 0, 0x0, 11, 0, 2, 0x0), + gsSP1Triangle( 0, 6, 5, 0x0), + gsSPLight(&toad_player_lights_body_2.l, 1), + gsSPLight(&toad_player_lights_body_2.a, 2), + gsSPVertex(toad_player_vertex_body_3, 12, 0), + gsSP2Triangles( 0, 1, 2, 0x0, 2, 3, 0, 0x0), + gsSP2Triangles( 4, 2, 1, 0x0, 4, 1, 5, 0x0), + gsSP2Triangles( 6, 7, 2, 0x0, 6, 2, 4, 0x0), + gsSP2Triangles( 2, 7, 3, 0x0, 5, 8, 4, 0x0), + gsSP2Triangles( 6, 8, 9, 0x0, 6, 4, 8, 0x0), + gsSP2Triangles(10, 3, 7, 0x0, 7, 11, 10, 0x0), + gsSP2Triangles( 7, 6, 11, 0x0, 9, 11, 6, 0x0), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_dl_body[] = { + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_SHADEFADEA, G_CC_SHADEFADEA), + gsSPCopyLightEXT(1, 5), + gsSPCopyLightEXT(2, 6), + gsSPDisplayList(toad_player_dl_body_inner), + gsSPCopyLightEXT(1, 3), + gsSPCopyLightEXT(2, 4), + gsSPDisplayList(toad_player_dl_jacket_inner), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_metal_dl_body[] = { + gsSPDisplayList(toad_player_dl_body_inner), + gsSPDisplayList(toad_player_dl_jacket_inner), + gsSPEndDisplayList(), +}; + +static const Lights1 toad_player_lights_arm_left = gdSPDefLights1( + 0x7f, 0x6a, 0x50, + 0xfe, 0xd5, 0xa1, 0x28, 0x28, 0x28 +); + +static const Vtx toad_player_vertex_arm_left_1[] = { + {{{ 7, 14, -12}, 0, { 0, 0}, {0x4b, 0x1f, 0x9f, 0xff}}}, + {{{ -1, 14, -12}, 0, { 0, 0}, {0xcf, 0x36, 0x99, 0xff}}}, + {{{ 11, 34, 0}, 0, { 0, 0}, {0x24, 0x79, 0xfc, 0xff}}}, + {{{ 3, -43, -27}, 0, { 0, 0}, {0x35, 0x1e, 0x91, 0xff}}}, + {{{ 11, -43, -2}, 0, { 0, 0}, {0x7e, 0xf5, 0x0a, 0xff}}}, + {{{ -11, 14, 0}, 0, { 0, 0}, {0x97, 0x46, 0x0d, 0xff}}}, + {{{ -1, 14, 13}, 0, { 0, 0}, {0xd2, 0x3f, 0x63, 0xff}}}, + {{{ 7, 14, 13}, 0, { 0, 0}, {0x3d, 0x21, 0x69, 0xff}}}, + {{{ 3, -43, 28}, 0, { 0, 0}, {0x50, 0xee, 0x60, 0xff}}}, + {{{ 20, -51, -15}, 0, { 0, 0}, {0x73, 0xf7, 0xcd, 0xff}}}, + {{{ 4, -57, 18}, 0, { 0, 0}, {0x62, 0xd9, 0x45, 0xff}}}, + {{{ 4, -57, -25}, 0, { 0, 0}, {0x40, 0xbe, 0xa9, 0xff}}}, + {{{ -17, -43, -27}, 0, { 0, 0}, {0xcb, 0xf8, 0x8d, 0xff}}}, + {{{ -17, -43, 28}, 0, { 0, 0}, {0xcd, 0xf9, 0x73, 0xff}}}, + {{{ 12, -76, 3}, 0, { 0, 0}, {0x42, 0xa7, 0x3b, 0xff}}}, + {{{ 12, -76, -9}, 0, { 0, 0}, {0x50, 0xa6, 0xdb, 0xff}}}, +}; + +static const Vtx toad_player_vertex_arm_left_2[] = { + {{{ 4, -57, 18}, 0, { 0, 0}, {0x62, 0xd9, 0x45, 0xff}}}, + {{{ -17, -43, 28}, 0, { 0, 0}, {0xcd, 0xf9, 0x73, 0xff}}}, + {{{ -15, -73, 8}, 0, { 0, 0}, {0xd4, 0x97, 0x37, 0xff}}}, + {{{ 3, -43, 28}, 0, { 0, 0}, {0x50, 0xee, 0x60, 0xff}}}, + {{{ 12, -76, 3}, 0, { 0, 0}, {0x42, 0xa7, 0x3b, 0xff}}}, + {{{ -15, -73, -12}, 0, { 0, 0}, {0xc5, 0xa6, 0xbe, 0xff}}}, + {{{ -17, -43, -27}, 0, { 0, 0}, {0xcb, 0xf8, 0x8d, 0xff}}}, + {{{ 4, -57, -25}, 0, { 0, 0}, {0x40, 0xbe, 0xa9, 0xff}}}, + {{{ 12, -76, -9}, 0, { 0, 0}, {0x50, 0xa6, 0xdb, 0xff}}}, + {{{ -35, -43, 0}, 0, { 0, 0}, {0x83, 0xfa, 0xef, 0xff}}}, + {{{ -11, 14, 0}, 0, { 0, 0}, {0x97, 0x46, 0x0d, 0xff}}}, + {{{ -1, 14, 13}, 0, { 0, 0}, {0xd2, 0x3f, 0x63, 0xff}}}, + {{{ -1, 14, -12}, 0, { 0, 0}, {0xcf, 0x36, 0x99, 0xff}}}, +}; + +const Gfx toad_player_dl_arm_left_inner[] = { + gsSPVertex(toad_player_vertex_arm_left_1, 16, 0), + gsSP2Triangles( 0, 1, 2, 0x0, 1, 0, 3, 0x0), + gsSP2Triangles( 0, 2, 4, 0x0, 4, 3, 0, 0x0), + gsSP2Triangles( 2, 5, 6, 0x0, 6, 7, 2, 0x0), + gsSP2Triangles( 4, 2, 7, 0x0, 5, 2, 1, 0x0), + gsSP2Triangles( 7, 8, 4, 0x0, 4, 9, 3, 0x0), + gsSP2Triangles( 4, 8, 10, 0x0, 11, 9, 4, 0x0), + gsSP2Triangles( 4, 10, 11, 0x0, 1, 3, 12, 0x0), + gsSP2Triangles(11, 3, 9, 0x0, 12, 3, 11, 0x0), + gsSP2Triangles( 7, 13, 8, 0x0, 7, 6, 13, 0x0), + gsSP2Triangles(10, 14, 15, 0x0, 10, 15, 11, 0x0), + gsSPVertex(toad_player_vertex_arm_left_2, 13, 0), + gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0), + gsSP2Triangles( 2, 4, 0, 0x0, 5, 6, 7, 0x0), + gsSP2Triangles( 7, 8, 5, 0x0, 2, 8, 4, 0x0), + gsSP2Triangles( 2, 5, 8, 0x0, 5, 2, 9, 0x0), + gsSP2Triangles( 5, 9, 6, 0x0, 9, 2, 1, 0x0), + gsSP2Triangles(10, 9, 1, 0x0, 10, 1, 11, 0x0), + gsSP2Triangles( 9, 12, 6, 0x0, 9, 10, 12, 0x0), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_dl_arm_left[] = { + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_SHADEFADEA, G_CC_SHADEFADEA), + gsSPLight(&toad_player_lights_arm_left.l, 1), + gsSPLight(&toad_player_lights_arm_left.a, 2), + gsSPDisplayList(toad_player_dl_arm_left_inner), + gsSPEndDisplayList(), +}; + +static const Lights1 toad_player_lights_arm_right = gdSPDefLights1( + 0x7f, 0x6a, 0x50, + 0xfe, 0xd5, 0xa1, 0x28, 0x28, 0x28 +); + +static const Vtx toad_player_vertex_arm_right_1[] = { + {{{ 11, -43, 3}, 0, { 0, 0}, {0x7d, 0xf5, 0xf5, 0xff}}}, + {{{ 3, -43, -27}, 0, { 0, 0}, {0x40, 0xfa, 0x93, 0xff}}}, + {{{ 7, 15, -12}, 0, { 0, 0}, {0x4d, 0x1f, 0xa1, 0xff}}}, + {{{ 3, -43, 28}, 0, { 0, 0}, {0x41, 0x1c, 0x69, 0xff}}}, + {{{ 20, -51, 16}, 0, { 0, 0}, {0x73, 0xf7, 0x33, 0xff}}}, + {{{ 4, -57, -17}, 0, { 0, 0}, {0x53, 0xc9, 0xb2, 0xff}}}, + {{{ 4, -57, 26}, 0, { 0, 0}, {0x54, 0xce, 0x50, 0xff}}}, + {{{ 11, 34, 0}, 0, { 0, 0}, {0x25, 0x79, 0xff, 0xff}}}, + {{{ 7, 15, 13}, 0, { 0, 0}, {0x3c, 0x22, 0x6a, 0xff}}}, + {{{ -1, 15, -12}, 0, { 0, 0}, {0xcf, 0x37, 0x99, 0xff}}}, + {{{ -11, 15, 0}, 0, { 0, 0}, {0x98, 0x46, 0x0d, 0xff}}}, + {{{ -1, 15, 13}, 0, { 0, 0}, {0xd2, 0x40, 0x62, 0xff}}}, + {{{ -17, -43, 28}, 0, { 0, 0}, {0xca, 0x05, 0x72, 0xff}}}, + {{{ -15, -73, 13}, 0, { 0, 0}, {0xcc, 0x9b, 0x37, 0xff}}}, + {{{ 12, -76, 10}, 0, { 0, 0}, {0x3e, 0xa2, 0x3a, 0xff}}}, + {{{ 12, -76, -2}, 0, { 0, 0}, {0x52, 0xa9, 0xda, 0xff}}}, +}; + +static const Vtx toad_player_vertex_arm_right_2[] = { + {{{ -15, -73, -7}, 0, { 0, 0}, {0xcf, 0xa0, 0xbe, 0xff}}}, + {{{ -17, -43, -27}, 0, { 0, 0}, {0xd1, 0xe4, 0x8e, 0xff}}}, + {{{ 4, -57, -17}, 0, { 0, 0}, {0x53, 0xc9, 0xb2, 0xff}}}, + {{{ 3, -43, -27}, 0, { 0, 0}, {0x40, 0xfa, 0x93, 0xff}}}, + {{{ 12, -76, -2}, 0, { 0, 0}, {0x52, 0xa9, 0xda, 0xff}}}, + {{{ -15, -73, 13}, 0, { 0, 0}, {0xcc, 0x9b, 0x37, 0xff}}}, + {{{ 12, -76, 10}, 0, { 0, 0}, {0x3e, 0xa2, 0x3a, 0xff}}}, + {{{ -35, -43, 0}, 0, { 0, 0}, {0x83, 0xf9, 0xf0, 0xff}}}, + {{{ -17, -43, 28}, 0, { 0, 0}, {0xca, 0x05, 0x72, 0xff}}}, + {{{ -1, 15, -12}, 0, { 0, 0}, {0xcf, 0x37, 0x99, 0xff}}}, + {{{ -11, 15, 0}, 0, { 0, 0}, {0x98, 0x46, 0x0d, 0xff}}}, +}; + +const Gfx toad_player_dl_arm_right_inner[] = { + gsSPVertex(toad_player_vertex_arm_right_1, 16, 0), + gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 0, 0x0), + gsSP2Triangles( 5, 1, 0, 0x0, 0, 4, 6, 0x0), + gsSP2Triangles( 0, 7, 8, 0x0, 8, 3, 0, 0x0), + gsSP2Triangles( 2, 7, 0, 0x0, 6, 5, 0, 0x0), + gsSP2Triangles( 9, 10, 7, 0x0, 7, 11, 8, 0x0), + gsSP2Triangles( 7, 2, 9, 0x0, 11, 7, 10, 0x0), + gsSP2Triangles(12, 3, 8, 0x0, 12, 8, 11, 0x0), + gsSP2Triangles( 4, 3, 6, 0x0, 6, 3, 12, 0x0), + gsSP2Triangles( 1, 9, 2, 0x0, 12, 11, 10, 0x0), + gsSP2Triangles( 6, 12, 13, 0x0, 6, 14, 15, 0x0), + gsSP2Triangles( 6, 15, 5, 0x0, 13, 14, 6, 0x0), + gsSPVertex(toad_player_vertex_arm_right_2, 11, 0), + gsSP2Triangles( 0, 1, 2, 0x0, 1, 3, 2, 0x0), + gsSP2Triangles( 2, 4, 0, 0x0, 4, 5, 0, 0x0), + gsSP2Triangles( 4, 6, 5, 0x0, 7, 0, 5, 0x0), + gsSP2Triangles( 8, 7, 5, 0x0, 3, 1, 9, 0x0), + gsSP2Triangles( 1, 0, 7, 0x0, 9, 1, 7, 0x0), + gsSP2Triangles( 8, 10, 7, 0x0, 9, 7, 10, 0x0), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_dl_arm_right[] = { + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_SHADEFADEA, G_CC_SHADEFADEA), + gsSPLight(&toad_player_lights_arm_right.l, 1), + gsSPLight(&toad_player_lights_arm_right.a, 2), + gsSPDisplayList(toad_player_dl_arm_right_inner), + gsSPEndDisplayList(), +}; + +static const Lights1 toad_player_lights_foot_left = gdSPDefLights1( + 0x34, 0x20, 0x0d, + 0x68, 0x40, 0x1b, 0x28, 0x28, 0x28 +); + +static const Vtx toad_player_vertex_foot_left_1[] = { + {{{ -17, 17, -45}, 0, { 0, 0}, {0xce, 0x3b, 0x9d, 0xff}}}, + {{{ 18, 17, -45}, 0, { 0, 0}, {0x28, 0x51, 0xa8, 0xff}}}, + {{{ 23, -15, -51}, 0, { 0, 0}, {0x1e, 0x98, 0xbf, 0xff}}}, + {{{ -22, -15, -51}, 0, { 0, 0}, {0xcf, 0xd9, 0x92, 0xff}}}, + {{{ 46, -15, -25}, 0, { 0, 0}, {0x77, 0xe2, 0xe3, 0xff}}}, + {{{ 34, -15, 26}, 0, { 0, 0}, {0x70, 0xdf, 0x30, 0xff}}}, + {{{ 17, -15, 52}, 0, { 0, 0}, {0x2c, 0xab, 0x52, 0xff}}}, + {{{ -45, -15, -25}, 0, { 0, 0}, {0x89, 0xe0, 0xe6, 0xff}}}, + {{{ -33, -15, 26}, 0, { 0, 0}, {0xa5, 0xb1, 0x27, 0xff}}}, + {{{ -16, -15, 52}, 0, { 0, 0}, {0xc7, 0xda, 0x6a, 0xff}}}, + {{{ 36, 17, -20}, 0, { 0, 0}, {0x6f, 0x39, 0xea, 0xff}}}, + {{{ -35, 17, -20}, 0, { 0, 0}, {0x9b, 0x4b, 0xf9, 0xff}}}, + {{{ -26, 11, 26}, 0, { 0, 0}, {0x99, 0x36, 0x31, 0xff}}}, + {{{ -13, 7, 47}, 0, { 0, 0}, {0xda, 0x51, 0x59, 0xff}}}, + {{{ 14, 7, 47}, 0, { 0, 0}, {0x34, 0x3b, 0x63, 0xff}}}, + {{{ 27, 11, 26}, 0, { 0, 0}, {0x5f, 0x45, 0x2e, 0xff}}}, +}; + +static const Vtx toad_player_vertex_foot_left_2[] = { + {{{ -13, 7, 47}, 0, { 0, 0}, {0xda, 0x51, 0x59, 0xff}}}, + {{{ 14, 7, 47}, 0, { 0, 0}, {0x34, 0x3b, 0x63, 0xff}}}, + {{{ 14, 21, 26}, 0, { 0, 0}, {0x18, 0x6f, 0x37, 0xff}}}, + {{{ -13, 21, 26}, 0, { 0, 0}, {0xcf, 0x69, 0x31, 0xff}}}, + {{{ -26, 11, 26}, 0, { 0, 0}, {0x99, 0x36, 0x31, 0xff}}}, + {{{ 18, 35, -16}, 0, { 0, 0}, {0x37, 0x72, 0xfd, 0xff}}}, + {{{ -17, 35, -16}, 0, { 0, 0}, {0xe0, 0x7a, 0xf3, 0xff}}}, + {{{ 27, 11, 26}, 0, { 0, 0}, {0x5f, 0x45, 0x2e, 0xff}}}, + {{{ -35, 17, -20}, 0, { 0, 0}, {0x9b, 0x4b, 0xf9, 0xff}}}, + {{{ 34, -15, 26}, 0, { 0, 0}, {0x70, 0xdf, 0x30, 0xff}}}, + {{{ 36, 17, -20}, 0, { 0, 0}, {0x6f, 0x39, 0xea, 0xff}}}, + {{{ 18, 17, -45}, 0, { 0, 0}, {0x28, 0x51, 0xa8, 0xff}}}, + {{{ -17, 17, -45}, 0, { 0, 0}, {0xce, 0x3b, 0x9d, 0xff}}}, +}; + +const Gfx toad_player_dl_foot_left_inner[] = { + gsSPVertex(toad_player_vertex_foot_left_1, 16, 0), + gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), + gsSP2Triangles( 2, 4, 5, 0x0, 2, 5, 6, 0x0), + gsSP2Triangles( 2, 7, 3, 0x0, 2, 8, 7, 0x0), + gsSP2Triangles( 2, 9, 8, 0x0, 2, 6, 9, 0x0), + gsSP2Triangles( 2, 1, 10, 0x0, 2, 10, 4, 0x0), + gsSP2Triangles( 7, 11, 0, 0x0, 12, 11, 7, 0x0), + gsSP2Triangles(12, 7, 8, 0x0, 7, 0, 3, 0x0), + gsSP2Triangles(12, 8, 9, 0x0, 10, 5, 4, 0x0), + gsSP2Triangles(12, 9, 13, 0x0, 14, 9, 6, 0x0), + gsSP2Triangles(14, 13, 9, 0x0, 5, 14, 6, 0x0), + gsSP1Triangle(10, 15, 5, 0x0), + gsSPVertex(toad_player_vertex_foot_left_2, 13, 0), + gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), + gsSP2Triangles( 3, 4, 0, 0x0, 2, 5, 6, 0x0), + gsSP2Triangles( 2, 6, 3, 0x0, 2, 1, 7, 0x0), + gsSP2Triangles( 7, 5, 2, 0x0, 8, 4, 3, 0x0), + gsSP2Triangles( 8, 3, 6, 0x0, 9, 7, 1, 0x0), + gsSP2Triangles( 7, 10, 5, 0x0, 5, 10, 11, 0x0), + gsSP2Triangles(11, 6, 5, 0x0, 11, 12, 6, 0x0), + gsSP1Triangle( 6, 12, 8, 0x0), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_dl_foot_left[] = { + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_SHADEFADEA, G_CC_SHADEFADEA), + gsSPLight(&toad_player_lights_foot_left.l, 1), + gsSPLight(&toad_player_lights_foot_left.a, 2), + gsSPDisplayList(toad_player_dl_foot_left_inner), + gsSPEndDisplayList(), +}; + +static const Lights1 toad_player_lights_foot_right = gdSPDefLights1( + 0x34, 0x20, 0x0d, + 0x68, 0x40, 0x1b, 0x28, 0x28, 0x28 +); + +static const Vtx toad_player_vertex_foot_right_1[] = { + {{{ -22, -15, 52}, 0, { 0, 0}, {0xe2, 0x98, 0x41, 0xff}}}, + {{{ -17, 17, 46}, 0, { 0, 0}, {0xd8, 0x51, 0x58, 0xff}}}, + {{{ -35, 17, 21}, 0, { 0, 0}, {0x91, 0x39, 0x16, 0xff}}}, + {{{ 23, -15, 52}, 0, { 0, 0}, {0x31, 0xd9, 0x6e, 0xff}}}, + {{{ 18, 17, 46}, 0, { 0, 0}, {0x32, 0x3b, 0x63, 0xff}}}, + {{{ -45, -15, 26}, 0, { 0, 0}, {0x89, 0xe2, 0x1d, 0xff}}}, + {{{ -33, -15, -25}, 0, { 0, 0}, {0x90, 0xdf, 0xd0, 0xff}}}, + {{{ -16, -15, -51}, 0, { 0, 0}, {0xd4, 0xab, 0xae, 0xff}}}, + {{{ 46, -15, 26}, 0, { 0, 0}, {0x77, 0xe0, 0x1a, 0xff}}}, + {{{ 34, -15, -25}, 0, { 0, 0}, {0x5b, 0xb1, 0xd9, 0xff}}}, + {{{ 17, -15, -51}, 0, { 0, 0}, {0x39, 0xda, 0x96, 0xff}}}, + {{{ 27, 11, -25}, 0, { 0, 0}, {0x67, 0x36, 0xcf, 0xff}}}, + {{{ 36, 17, 21}, 0, { 0, 0}, {0x65, 0x4b, 0x07, 0xff}}}, + {{{ -13, 7, -46}, 0, { 0, 0}, {0xcc, 0x3b, 0x9d, 0xff}}}, + {{{ 14, 7, -46}, 0, { 0, 0}, {0x26, 0x51, 0xa7, 0xff}}}, + {{{ -26, 11, -25}, 0, { 0, 0}, {0xa1, 0x45, 0xd2, 0xff}}}, +}; + +static const Vtx toad_player_vertex_foot_right_2[] = { + {{{ -13, 21, -25}, 0, { 0, 0}, {0xe8, 0x6f, 0xc9, 0xff}}}, + {{{ -17, 35, 17}, 0, { 0, 0}, {0xc9, 0x72, 0x03, 0xff}}}, + {{{ 18, 35, 17}, 0, { 0, 0}, {0x20, 0x7a, 0x0d, 0xff}}}, + {{{ 14, 21, -25}, 0, { 0, 0}, {0x31, 0x69, 0xcf, 0xff}}}, + {{{ -26, 11, -25}, 0, { 0, 0}, {0xa1, 0x45, 0xd2, 0xff}}}, + {{{ 14, 7, -46}, 0, { 0, 0}, {0x26, 0x51, 0xa7, 0xff}}}, + {{{ -13, 7, -46}, 0, { 0, 0}, {0xcc, 0x3b, 0x9d, 0xff}}}, + {{{ 27, 11, -25}, 0, { 0, 0}, {0x67, 0x36, 0xcf, 0xff}}}, + {{{ 36, 17, 21}, 0, { 0, 0}, {0x65, 0x4b, 0x07, 0xff}}}, + {{{ -35, 17, 21}, 0, { 0, 0}, {0x91, 0x39, 0x16, 0xff}}}, + {{{ 18, 17, 46}, 0, { 0, 0}, {0x32, 0x3b, 0x63, 0xff}}}, + {{{ -17, 17, 46}, 0, { 0, 0}, {0xd8, 0x51, 0x58, 0xff}}}, +}; + +const Gfx toad_player_dl_foot_right_inner[] = { + gsSPVertex(toad_player_vertex_foot_right_1, 16, 0), + gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 4, 0x0), + gsSP2Triangles( 0, 4, 1, 0x0, 0, 2, 5, 0x0), + gsSP2Triangles( 0, 5, 6, 0x0, 0, 6, 7, 0x0), + gsSP2Triangles( 0, 8, 3, 0x0, 0, 9, 8, 0x0), + gsSP2Triangles( 0, 10, 9, 0x0, 0, 7, 10, 0x0), + gsSP2Triangles( 8, 11, 12, 0x0, 8, 9, 11, 0x0), + gsSP2Triangles( 8, 12, 4, 0x0, 8, 4, 3, 0x0), + gsSP2Triangles(10, 11, 9, 0x0, 6, 5, 2, 0x0), + gsSP2Triangles(10, 13, 14, 0x0, 10, 7, 13, 0x0), + gsSP2Triangles(10, 14, 11, 0x0, 13, 7, 6, 0x0), + gsSP2Triangles(13, 6, 15, 0x0, 6, 2, 15, 0x0), + gsSPVertex(toad_player_vertex_foot_right_2, 12, 0), + gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), + gsSP2Triangles( 1, 0, 4, 0x0, 0, 3, 5, 0x0), + gsSP2Triangles( 0, 5, 6, 0x0, 6, 4, 0, 0x0), + gsSP2Triangles( 7, 5, 3, 0x0, 3, 8, 7, 0x0), + gsSP2Triangles( 3, 2, 8, 0x0, 1, 4, 9, 0x0), + gsSP2Triangles(10, 8, 2, 0x0, 2, 11, 10, 0x0), + gsSP2Triangles( 2, 1, 11, 0x0, 9, 11, 1, 0x0), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_dl_foot_right[] = { + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_SHADEFADEA, G_CC_SHADEFADEA), + gsSPLight(&toad_player_lights_foot_right.l, 1), + gsSPLight(&toad_player_lights_foot_right.a, 2), + gsSPDisplayList(toad_player_dl_foot_right_inner), + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsDPSetEnvColor(255, 255, 255, 255), + gsDPSetAlphaCompare(G_AC_NONE), + gsSPClearGeometryMode(G_CULL_FRONT), + gsSPSetGeometryMode(G_CULL_BACK), + gsSPEndDisplayList(), +}; + +const Gfx toad_player_dl_foot_right_metal[] = { + gsSPDisplayList(toad_player_dl_foot_right_inner), + gsDPPipeSync(), + gsSPClearGeometryMode(G_TEXTURE_GEN), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsSPTexture(0x0F80, 0x07C0, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetEnvColor(255, 255, 255, 255), + gsDPSetAlphaCompare(G_AC_NONE), + gsSPEndDisplayList(), +}; diff --git a/actors/zcustom0.c b/actors/zcustom0.c index 9eb1393b..e2ce5906 100644 --- a/actors/zcustom0.c +++ b/actors/zcustom0.c @@ -6,3 +6,6 @@ // luigi model #include "luigi/model.inc.c" + +// toad model +#include "toad_player/model.inc.c" diff --git a/actors/zcustom0.h b/actors/zcustom0.h index e0e1fb22..5594a304 100644 --- a/actors/zcustom0.h +++ b/actors/zcustom0.h @@ -6,4 +6,7 @@ // luigi #include "actors/luigi/geo_header.h" +// toad_player +#include "actors/toad_player/geo_header.h" + #endif diff --git a/actors/zcustom0_geo.c b/actors/zcustom0_geo.c index 33cc92a2..ca261bc9 100644 --- a/actors/zcustom0_geo.c +++ b/actors/zcustom0_geo.c @@ -5,3 +5,5 @@ #include "zcustom0.h" #include "luigi/geo.inc.c" + +#include "toad_player/geo.inc.c" diff --git a/bin/segment2.c b/bin/segment2.c index 9ad56187..36090535 100644 --- a/bin/segment2.c +++ b/bin/segment2.c @@ -217,6 +217,10 @@ ALIGNED8 static const u8 texture_hud_char_luigi_head[] = { #include "textures/segment2/custom_luigi_head.rgba16.inc.c" }; +ALIGNED8 static const u8 texture_hud_char_toad_head[] = { +#include "textures/segment2/custom_toad_head.rgba16.inc.c" +}; + ALIGNED8 static const u8 texture_hud_char_star[] = { #include "textures/segment2/segment2.05C00.rgba16.inc.c" }; @@ -1841,7 +1845,7 @@ const u8 *const main_hud_lut[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, texture_hud_char_multiply, texture_hud_char_coin, - texture_hud_char_mario_head, texture_hud_char_star, texture_hud_char_luigi_head, 0x0, + texture_hud_char_mario_head, texture_hud_char_star, texture_hud_char_luigi_head, texture_hud_char_toad_head, texture_hud_char_apostrophe, texture_hud_char_double_quote, #else texture_hud_char_0, texture_hud_char_1, texture_hud_char_2, texture_hud_char_3, @@ -2081,7 +2085,7 @@ const u8 *const main_credits_font_lut[] = { // HUD camera table 0x020087CC-0x020087E3 const u8 *const main_hud_camera_lut[] = { texture_hud_char_camera, texture_hud_char_mario_head, texture_hud_char_lakitu, texture_hud_char_no_camera, - texture_hud_char_arrow_up, texture_hud_char_arrow_down, texture_hud_char_luigi_head, + texture_hud_char_arrow_up, texture_hud_char_arrow_down, texture_hud_char_luigi_head, texture_hud_char_toad_head }; // If you change the language here, the following Makefile rule also needs to diff --git a/include/model_ids.h b/include/model_ids.h index 09319dae..00c2c74c 100644 --- a/include/model_ids.h +++ b/include/model_ids.h @@ -595,4 +595,9 @@ #define MODEL_LUIGIS_WING_CAP 0xE6 // luigis_wing_cap_geo #define MODEL_LUIGIS_WINGED_METAL_CAP 0xE7 // luigis_winged_metal_cap_geo +#define MODEL_TOAD_PLAYER 0xE8 // toad_player_geo +#define MODEL_TOADS_CAP 0xE9 // toads_cap_geo +#define MODEL_TOADS_METAL_CAP 0xEA // toads_metal_cap_geo +#define MODEL_TOADS_WING_CAP 0xEB // toads_wing_cap_geo + #endif // MODEL_IDS_H diff --git a/levels/scripts.c b/levels/scripts.c index 7ccd613f..7c04acec 100644 --- a/levels/scripts.c +++ b/levels/scripts.c @@ -125,6 +125,11 @@ const LevelScript level_main_scripts_entry[] = { LOAD_MODEL_FROM_GEO(MODEL_LUIGIS_WING_CAP, luigis_wing_cap_geo), LOAD_MODEL_FROM_GEO(MODEL_LUIGIS_WINGED_METAL_CAP, luigis_winged_metal_cap_geo), + LOAD_MODEL_FROM_GEO(MODEL_TOAD_PLAYER, toad_player_geo), + LOAD_MODEL_FROM_GEO(MODEL_TOADS_CAP, toads_cap_geo), + LOAD_MODEL_FROM_GEO(MODEL_TOADS_METAL_CAP, toads_metal_cap_geo), + LOAD_MODEL_FROM_GEO(MODEL_TOADS_WING_CAP, toads_wing_cap_geo), + // CUSTOM MODELS END FREE_LEVEL_POOL(), diff --git a/src/game/characters.c b/src/game/characters.c index 5ac9be36..df1a3dac 100644 --- a/src/game/characters.c +++ b/src/game/characters.c @@ -11,6 +11,8 @@ extern Gfx mario_cap_seg3_dl_03022F48[]; extern Gfx luigi_cap_seg3_dl_03022F48[]; +extern Gfx toad_player_dl_cap[]; +extern Gfx toad_player_dl_cap_decal[]; struct Character gCharacters[CT_MAX] = { [CT_MARIO] = { @@ -128,6 +130,64 @@ struct Character gCharacters[CT_MAX] = { .soundSoLongaBowser = SOUND_LUIGI_SO_LONGA_BOWSER, .soundImaTired = SOUND_LUIGI_IMA_TIRED, }, + + [CT_TOAD] = { + .name = "Toad", + .hudHead = '/', + .cameraHudHead = GLYPH_CAM_TOAD_HEAD, + .modelId = MODEL_TOAD_PLAYER, + .capModelId = MODEL_TOADS_CAP, + .capMetalModelId = MODEL_TOADS_METAL_CAP, + .capWingModelId = MODEL_TOADS_WING_CAP, + .capMetalWingModelId = MODEL_TOADS_CAP, + .capEnemyLayer = LAYER_TRANSPARENT, + .capEnemyGfx = toad_player_dl_cap, + .capEnemyDecalGfx = toad_player_dl_cap_decal, + .soundFreqScale = 1.25f, + // sounds + .soundYahWahHoo = SOUND_MARIO_YAH_WAH_HOO, + .soundHoohoo = SOUND_MARIO_HOOHOO, + .soundYahoo = SOUND_MARIO_YAHOO, + .soundUh = SOUND_MARIO_UH, + .soundHrmm = SOUND_MARIO_HRMM, + .soundWah2 = SOUND_MARIO_WAH2, + .soundWhoa = SOUND_MARIO_WHOA, + .soundEeuh = SOUND_MARIO_EEUH, + .soundAttacked = SOUND_MARIO_ATTACKED, + .soundOoof = SOUND_MARIO_OOOF, + .soundOoof2 = SOUND_MARIO_OOOF2, + .soundHereWeGo = SOUND_MARIO_HERE_WE_GO, + .soundYawning = SOUND_MARIO_YAWNING, + .soundSnoring1 = SOUND_MARIO_SNORING1, + .soundSnoring2 = SOUND_MARIO_SNORING2, + .soundWaaaooow = SOUND_MARIO_WAAAOOOW, + .soundHaha = SOUND_MARIO_HAHA, + .soundHaha_2 = SOUND_MARIO_HAHA_2, + .soundUh2 = SOUND_MARIO_UH2, + .soundUh2_2 = SOUND_MARIO_UH2_2, + .soundOnFire = SOUND_MARIO_ON_FIRE, + .soundDying = SOUND_MARIO_DYING, + .soundPantingCold = SOUND_MARIO_PANTING_COLD, + .soundPanting = SOUND_MARIO_PANTING, + .soundCoughing1 = SOUND_MARIO_COUGHING1, + .soundCoughing2 = SOUND_MARIO_COUGHING2, + .soundCoughing3 = SOUND_MARIO_COUGHING3, + .soundPunchYah = SOUND_MARIO_PUNCH_YAH, + .soundPunchHoo = SOUND_MARIO_PUNCH_HOO, + .soundMamaMia = SOUND_MARIO_MAMA_MIA, + .soundGroundPoundWah = SOUND_MARIO_GROUND_POUND_WAH, + .soundDrowning = SOUND_MARIO_DROWNING, + .soundPunchWah = SOUND_MARIO_PUNCH_WAH, + .soundYahooWahaYippee = SOUND_MARIO_YAHOO_WAHA_YIPPEE, + .soundDoh = SOUND_MARIO_DOH, + .soundGameOver = SOUND_MARIO_GAME_OVER, + .soundHello = SOUND_MARIO_HELLO, + .soundPressStartToPlay = SOUND_MARIO_PRESS_START_TO_PLAY, + .soundTwirlBounce = SOUND_MARIO_TWIRL_BOUNCE, + .soundSnoring3 = SOUND_MARIO_SNORING3, + .soundSoLongaBowser = SOUND_MARIO_SO_LONGA_BOWSER, + .soundImaTired = SOUND_MARIO_IMA_TIRED, + }, }; struct Character* get_character(struct MarioState* m) { diff --git a/src/game/characters.h b/src/game/characters.h index dda30815..6d38d5d9 100644 --- a/src/game/characters.h +++ b/src/game/characters.h @@ -6,6 +6,7 @@ enum CharacterType { CT_MARIO, CT_LUIGI, + CT_TOAD, // must be last CT_MAX diff --git a/src/game/hud.h b/src/game/hud.h index c788e41e..76167426 100644 --- a/src/game/hud.h +++ b/src/game/hud.h @@ -20,6 +20,7 @@ enum CameraHUDLut { GLYPH_CAM_ARROW_UP, GLYPH_CAM_ARROW_DOWN, GLYPH_CAM_LUIGI_HEAD, + GLYPH_CAM_TOAD_HEAD, }; // Functions diff --git a/textures/segment2/custom_toad_head.rgba16.png b/textures/segment2/custom_toad_head.rgba16.png new file mode 100644 index 00000000..3b471549 Binary files /dev/null and b/textures/segment2/custom_toad_head.rgba16.png differ