From 4688ffe1f0fe7fb4d7b974f9f0d7e9dc4dafdf89 Mon Sep 17 00:00:00 2001 From: MysterD Date: Wed, 18 Aug 2021 22:54:46 -0700 Subject: [PATCH] Added toad player character --- Makefile.split | 4 + actors/custom0.h | 5 + actors/custom0_geo.c | 1 + actors/toad_cap/geo.inc.c | 89 ++ actors/toad_player/custom_toad_cap.rgba16.png | Bin 0 -> 870 bytes .../custom_toad_eyes_closed.rgba16.png | Bin 0 -> 4188 bytes .../custom_toad_eyes_dead.rgba16.png | Bin 0 -> 4690 bytes .../custom_toad_eyes_half_closed.rgba16.png | Bin 0 -> 4668 bytes .../toad_player/custom_toad_face.rgba16.png | Bin 0 -> 4716 bytes .../toad_player/custom_toad_hair.rgba16.png | Bin 0 -> 3592 bytes actors/toad_player/geo.inc.c | 870 +++++++++++ actors/toad_player/geo_header.h | 36 + actors/toad_player/model.inc.c | 1344 +++++++++++++++++ actors/zcustom0.c | 3 + actors/zcustom0.h | 3 + actors/zcustom0_geo.c | 2 + bin/segment2.c | 8 +- include/model_ids.h | 5 + levels/scripts.c | 5 + src/game/characters.c | 60 + src/game/characters.h | 1 + src/game/hud.h | 1 + textures/segment2/custom_toad_head.rgba16.png | Bin 0 -> 3428 bytes 23 files changed, 2435 insertions(+), 2 deletions(-) create mode 100644 actors/toad_cap/geo.inc.c create mode 100644 actors/toad_player/custom_toad_cap.rgba16.png create mode 100644 actors/toad_player/custom_toad_eyes_closed.rgba16.png create mode 100644 actors/toad_player/custom_toad_eyes_dead.rgba16.png create mode 100644 actors/toad_player/custom_toad_eyes_half_closed.rgba16.png create mode 100644 actors/toad_player/custom_toad_face.rgba16.png create mode 100644 actors/toad_player/custom_toad_hair.rgba16.png create mode 100644 actors/toad_player/geo.inc.c create mode 100644 actors/toad_player/geo_header.h create mode 100644 actors/toad_player/model.inc.c create mode 100644 textures/segment2/custom_toad_head.rgba16.png 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 0000000000000000000000000000000000000000..c5893dfd35bf967e23a102439baa3d199fd30055 GIT binary patch literal 870 zcmV-s1DX7ZP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0{clsK~z{r%~v~* z+CUh@HZLJqbV+p5nc{>_H0a7S`2#6ZrsY4TNI{V%Wtx-`DbNX}2q;0(3G+B(z+`5< zcD%d}9AC&t$m{j)%=q)}eji4=-Oij7rn;UDNh2U^+peg#M8Dr3=sPe#_fck!F(B&odP4}&C=?1e#bWU` zo6XvmWzj&M17N^gtyY8Oa@luX_se`fzjGX?+w1kZczn>vV+KUC*?bA{*QHYF6@;%% z)4V``5#m`~!!_i?#1dE6_x*bq`8J!)KEcF?PN(x3{d-MVtyW7lw-AY!%jGu+`z^$u zLzvef~w;ESFCi0u70&`ngM1tCKfdPpeI!@UwG6|_Y#o-=5wZ0W;K;q zQUy85O$}8$NW>%HFrPD}qU{DeG-}h zRx&Imn9mWi)S^Hxa*|tBOA#~!0BQ)Q%VGi(?l6%H@~=P+a;XAkt3ui|kYO3cN@g;d zw6SOyiNq#2mmK6Grz+7jY#9I?mQkEA9*^H8H4%!FgIxPcvwaoOoD~ex=L1eI4`=u@ zB$Eo-o2A$;aKAqw>|MP1`$OWyp_(vm!iNFYd<3H=8@$Sqf#?F)DOURrY_+e`>Gb1c w;>3SnmdA0nKPJ0ymcM3Cf?eD2A0m_a4X?l9<;Op>`Tzg`07*qoM6N<$f{!MI>;M1& literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..178601538e25dc7500d2cd014b6fd41fb8d346df GIT binary patch literal 4188 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 U>;;AKasU7T07*qoM6N<$g02_4O8@`> literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..505d3a2f8e837f91d36c5e9e03447dc4a4b9e470 GIT binary patch literal 4668 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 O0000a#Kc literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3b4715491f8d247b1162054043100c774da9ab88 GIT binary patch literal 3428 zcmV-q4V&_bP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0007iNkluh*_;Qr}l7MKO*f%*D+ z+(ScnL!s!Z{(i{Mht*XSk)zQ*d3;}zZC3WiTx^bgBo;^o?2V126c%DLo3UnOU>+YQ zuDJLpsJ$KaBsAW?iCN%b+dU3EcX{_}gs8g*-=gj_O?7ECxnR& z9fCgyz5tGEMjY8!nVR0_y=#-*v~&V_dHk|icr-AeaJ)kR1hhu#9^B$jIL!Xa7W!lZ zpnyiv%_c)jU0000= literal 0 HcmV?d00001