Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
actor_rendering.c File Reference

Go to the source code of this file.

Macros

#define LERP_COMPONENT(a, b, alpha)   ((a) * (255 - (alpha)) + (b) * (alpha)) / 255;
 
#define PAL_ANIM_END   0xFF
 

Enumerations

enum  StandardPalettes { STANDARD_PAL_POISON = 1 , STANDARD_PAL_DIZZY = 2 , STANDARD_PAL_STATIC = 3 }
 
enum  PalSwapState { PAL_SWAP_HOLD_A = 0 , PAL_SWAP_A_TO_B = 1 , PAL_SWAP_HOLD_B = 2 , PAL_SWAP_B_TO_A = 3 }
 
enum  { STATIC_DEFAULT = 0 , STATIC_BRIGHT = 1 , STATIC_DARK = 2 }
 
enum  { WATT_DEFAULT = 0 , WATT_BRIGHTEST = 1 , WATT_BRIGHTER = 2 }
 

Functions

void update_player_actor_shadow (void)
 
void appendGfx_npc_actor (s32 isPartner, s32 actorIndex)
 
void create_status_chill_out (s32 iconID)
 
void enable_status_static (s32 iconID)
 
void enable_status_chill_out (s32 iconID)
 
void enable_status_debuff (s16)
 
void enable_status_transparent (s16)
 
void enable_status_icon_boost_jump (s32 iconID)
 
void enable_status_icon_boost_hammer (s32 iconID)
 
s32 get_npc_anim_for_status (u32 *, s32)
 
void set_actor_pal_adjustment (Actor *actor, s32 arg1)
 
void create_status_icon_boost_hammer (s32 iconID)
 
void create_status_icon_boost_jump (s32 iconID)
 
void create_status_icon_peril (s32 iconID)
 
void create_status_icon_danger (s32 iconID)
 
void set_status_icons_offset (s32 iconID, s32 offsetY, s32 arg2)
 
void set_status_icons_properties (s32 iconID, f32 x, f32 y, f32 z, s32 arg, s32 arg2, s32 radius, s32 offsetY)
 
void appendGfx_npc_actor_reflection (s32, Actor *)
 
void make_flash_palettes (ActorPart *)
 
void func_unkA_draw_npc (ActorPart *, s32, Matrix4f)
 
void func_unkB_draw_npc (ActorPart *, s32, Matrix4f)
 
void func_unkA_draw_player (ActorPart *, s32, Matrix4f)
 
void func_unkB_draw_player (ActorPart *, s32, Matrix4f)
 
void part_glow_on (b32 arg0, ActorPart *part, s32 yaw, b32 arg3)
 
void part_flash_on (b32 arg0, ActorPart *part, s32 yaw, b32 arg3)
 
void add_part_decor_none (ActorPart *, s32)
 
void add_part_decor_golden_flames (ActorPart *, s32)
 
void add_part_decor_sweat (ActorPart *, s32)
 
void add_part_decor_seeing_stars (ActorPart *, s32)
 
void add_part_decor_red_flames (ActorPart *, s32)
 
void add_part_decor_smoky_trail (ActorPart *, s32)
 
void add_part_decor_fiery_trail (ActorPart *, s32)
 
void add_part_decor_whirlwind (ActorPart *, s32)
 
void add_part_decor_steam (ActorPart *, s32)
 
void add_part_decor_sparkles (ActorPart *, s32)
 
void add_part_decor_bowser_aura (ActorPart *, s32)
 
void add_part_decor_radiating_stars (ActorPart *, s32)
 
void render_without_adjusted_palettes (b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
 
void render_with_sleep_palettes (b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
 
void render_with_static_palettes (b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
 
void render_with_fear_palettes (b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
 
void render_with_poison_palettes (b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
 
void render_with_paralyze_palettes (b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
 
void render_with_berserk_palettes (b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
 
void render_with_watt_idle_palettes (b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
 
void render_with_watt_attack_palettes (b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
 
void render_with_player_debuff_palettes (b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation, s32 isPoison)
 
void render_with_pal_blending (b32 arg0, ActorPart *part, s32 yaw, s32 arg3, Matrix4f mtx, s32 skipAnimation)
 
void render_with_palset_blending (b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
 
s32 update_part_glow (b32 isNpcSprite, ActorPart *part, s32 yaw, b32 isReflection)
 
s32 update_part_flash (b32 isNpcSprite, ActorPart *part, s32 yaw, b32 isReflection)
 
s32 get_player_anim_for_status (s32 animID)
 
void clear_part_flash_mode (ActorPart *part)
 
s32 get_flash_damage_intensity (ActorPart *part)
 
void mtx_mirror_y (Matrix4f mtx)
 
void enable_actor_blur (Actor *actor)
 
void disable_actor_blur (Actor *actor)
 
void reset_actor_blur (Actor *actor)
 
void force_disable_actor_blur (Actor *actor)
 
void enable_partner_blur (void)
 
void disable_partner_blur (void)
 
void reset_partner_blur (void)
 
void force_disable_partner_blur (void)
 
void enable_player_blur (void)
 
void disable_player_blur (void)
 
void reset_player_blur (void)
 
void force_disable_player_blur (void)
 
void force_disable_player_blur_immediately (void)
 
void update_player_actor_blur_history (Actor *actor)
 
void appendGfx_player_actor_blur (Actor *actor)
 
void update_nonplayer_actor_blur_history (b32 isPartner, Actor *actor)
 
void appendGfx_nonplayer_actor_blur (b32 isPartner, Actor *actor)
 
void update_enemy_actor_blur_history (Actor *actor)
 
void appendGfx_enemy_actor_blur (void *data)
 
void update_partner_actor_blur_history (Actor *actor)
 
void appendGfx_partner_actor_blur (void *data)
 
void update_nonplayer_actor_shadow (b32 isPartner, Actor *actor)
 
void update_enemy_shadows (void)
 
void update_hero_shadows (void)
 
void func_80255FD8 (void)
 
void appendGfx_enemy_actor (void *data)
 
void appendGfx_partner_actor (void *data)
 
void appendGfx_enemy_actor_reflection (void *data)
 
void appendGfx_partner_actor_reflection (void *data)
 
void appendGfx_player_actor (void *arg0)
 
void appendGfx_player_actor_reflection (void *arg0)
 
s32 render_with_adjusted_palettes (b32 isNpcSprite, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
 
void part_glow_off (b32 isNpcSprite, ActorPart *part, s32 yaw, b32 isReflection)
 
void part_flash_off (b32 isNpcSprite, ActorPart *part, s32 yaw, b32 isReflection)
 
void _add_part_decoration (ActorPart *actorPart)
 
void _remove_part_decoration (ActorPart *part, s32 idx)
 
void remove_part_decor_none (ActorPart *part, s32 idx)
 
void remove_part_decor_golden_flames (ActorPart *part, s32 idx)
 
void remove_part_decor_sweat (ActorPart *part, s32 idx)
 
void remove_part_decor_seeing_stars (ActorPart *part, s32 idx)
 
void remove_part_decor_red_flames (ActorPart *part, s32 idx)
 
void remove_part_decor_smoky_trail (ActorPart *part, s32 idx)
 
void remove_part_decor_fiery_trail (ActorPart *part, s32 idx)
 
void remove_part_decor_whirlwind (ActorPart *part, s32 idx)
 
void remove_part_decor_steam (ActorPart *part, s32 idx)
 
void remove_part_decor_sparkles (ActorPart *part, s32 idx)
 
void remove_part_decor_bowser_aura (ActorPart *part, s32 idx)
 
void remove_part_decor_radiating_stars (ActorPart *part, s32 idx)
 

Variables

u8 StaticPalettesAnim []
 
s16 FearPaletteAnimXOffsets [] = { -2, 2, 0, 0, -2, 2, 0, 0, 0, 0, -2, 2, 0, 0, 0, 0, 0, 0, 0xFF }
 
s16 ParalyzePaletteAnimXOffsets [] = { -2, 2, 0, 0, -2, 2, 0, 0, 0, 0, -2, 2, 0, 0, 0, 0, 0, 0, 0xFF }
 
u8 bWattIdlePalettesAnim []
 
u8 WattAttackPalettesAnim []
 
s16 SparkleSpawnIntervals [] = { -1, 15, 10, 7, 5, 3, 2, 1 }
 

Macro Definition Documentation

◆ LERP_COMPONENT

#define LERP_COMPONENT ( a,
b,
alpha )   ((a) * (255 - (alpha)) + (b) * (alpha)) / 255;

◆ PAL_ANIM_END

Enumeration Type Documentation

◆ StandardPalettes

Enumerator
STANDARD_PAL_POISON 
STANDARD_PAL_DIZZY 
STANDARD_PAL_STATIC 

Definition at line 7 of file actor_rendering.c.

7 {
11};
@ STANDARD_PAL_STATIC
@ STANDARD_PAL_DIZZY
@ STANDARD_PAL_POISON

◆ PalSwapState

Enumerator
PAL_SWAP_HOLD_A 
PAL_SWAP_A_TO_B 
PAL_SWAP_HOLD_B 
PAL_SWAP_B_TO_A 

Definition at line 18 of file actor_rendering.c.

18 {
23};
@ PAL_SWAP_HOLD_A
@ PAL_SWAP_HOLD_B
@ PAL_SWAP_B_TO_A
@ PAL_SWAP_A_TO_B

◆ anonymous enum

Enumerator
STATIC_DEFAULT 
STATIC_BRIGHT 
STATIC_DARK 

Definition at line 26 of file actor_rendering.c.

26 {
28 STATIC_BRIGHT = 1,
29 STATIC_DARK = 2,
30};
@ STATIC_BRIGHT
@ STATIC_DARK
@ STATIC_DEFAULT

◆ anonymous enum

Enumerator
WATT_DEFAULT 
WATT_BRIGHTEST 
WATT_BRIGHTER 

Definition at line 67 of file actor_rendering.c.

67 {
68 WATT_DEFAULT = 0,
70 WATT_BRIGHTER = 2,
71};
@ WATT_BRIGHTER
@ WATT_DEFAULT
@ WATT_BRIGHTEST

Function Documentation

◆ update_player_actor_shadow()

void update_player_actor_shadow ( void )

Definition at line 1393 of file actor_rendering.c.

1393 {
1396 Actor* player = battleStatus->playerActor;
1397 ActorPart* parts = player->partsTable;
1398 Shadow* shadow;
1399 f32 x, y, z, distance;
1400
1401 parts->animNotifyValue = spr_update_player_sprite(PLAYER_SPRITE_MAIN, parts->curAnimation, parts->animationRate);
1402
1403 if (player->flags & ACTOR_FLAG_BLUR_ENABLED) {
1405 }
1406
1407 shadow = get_shadow_by_index(player->shadow.id);
1408 shadow->flags &= ~ENTITY_FLAG_HIDDEN;
1409
1410 if (!battleStatus->outtaSightActive) {
1411 shadow->alpha = 128;
1412 } else {
1413 shadow->alpha = 40;
1414 }
1415
1416 distance = 32767.0f;
1417 x = player->curPos.x + player->headOffset.x;
1418 z = player->curPos.z + player->headOffset.z;
1419 y = player->curPos.y + player->headOffset.y + 12.0;
1420 npc_raycast_down_sides(0, &x, &y, &z, &distance);
1421
1422 if (distance > 200.0f) {
1423 shadow->flags |= ENTITY_FLAG_HIDDEN;
1424 }
1425 shadow->pos.x = x;
1426 shadow->pos.y = y;
1427 shadow->pos.z = z;
1428 shadow->rot.y = clamp_angle(player->yaw - camera->curYaw);
1430 shadow->scale.x *= player->shadowScale * player->scalingFactor;
1431
1432 if (parts->opacity >= 255 && !(parts->flags & ACTOR_PART_FLAG_TRANSPARENT)) {
1434 } else {
1436 }
1437}
BSS s32 PopupMenu_SelectedIndex
void update_player_actor_blur_history(Actor *actor)
f32 shadowScale
Vec3s headOffset
f32 scalingFactor
union Actor::@38 shadow
struct ActorPart * partsTable
Vec3f curPos
Vec3f scale
#define npc_raycast_down_sides
#define clamp_angle
@ RENDER_MODE_SURFACE_XLU_LAYER3
Definition enums.h:3333
@ RENDER_MODE_ALPHATEST
Definition enums.h:3310
@ ENTITY_FLAG_HIDDEN
Definition enums.h:2599
@ ACTOR_FLAG_BLUR_ENABLED
Definition enums.h:3378
@ ACTOR_PART_FLAG_TRANSPARENT
Definition enums.h:3391
@ CAM_BATTLE
Definition enums.h:1827
void set_standard_shadow_scale(Shadow *shadow, f32 scale)
Definition entity.c:1671
Shadow * get_shadow_by_index(s32 index)
Definition entity.c:534
s32 spr_update_player_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale)
Definition sprite.c:820
@ PLAYER_SPRITE_MAIN
Definition sprite.h:30
Camera gCameras[4]
Definition cam_main.c:16
BattleStatus gBattleStatus
Definition battle.cpp:14

Referenced by update_hero_shadows().

◆ appendGfx_npc_actor()

void appendGfx_npc_actor ( s32 isPartner,
s32 actorIndex )

Definition at line 832 of file actor_rendering.c.

832 {
838 Actor* actor;
840 EffectInstance* effect;
841 s32 numParts;
848 s32 i;
849
850 if (!isPartner) {
851 actor = battleStatus->enemyActors[actorIndex];
852 } else {
853 actor = battleStatus->partnerActor;
854 }
855 actorPosX = actor->curPos.x + actor->headOffset.x;
856 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
857 actorPosY = actor->curPos.y + actor->headOffset.y + actor->verticalRenderOffset;
858 } else {
859 actorPosY = actor->curPos.y - actor->headOffset.y + actor->verticalRenderOffset;
860 }
861 actorPosZ = actor->curPos.z + actor->headOffset.z;
862
868
870 if (actor->disableDismissTimer != 0) {
871 actor->disableDismissTimer--;
873 } else {
874 actor->disableEffect->data.disableX->scale = (actor->scalingFactor * 0.75);
875 }
876 } else {
878 actor->disableDismissTimer = 10;
879 }
880 if (actor->debuff == STATUS_KEY_FROZEN) {
881 effect = actor->icePillarEffect;
882 if (actor->icePillarEffect != nullptr) {
885 {
886 effect->data.icePillar->pos.x = actorPosX;
887 effect->data.icePillar->pos.y = actorPosY;
888 effect->data.icePillar->pos.z = actorPosZ;
889 effect->data.icePillar->scale = actor->size.y / 24.0;
890 } else {
894 }
895 }
896 } else {
897 effect = actor->icePillarEffect;
898 if (effect != nullptr) {
900 actor->icePillarEffect = nullptr;
901 }
902 }
908
909 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
911 actor->size.y * actor->scalingFactor,
912 actor->size.x * actor->scalingFactor);
913 } else {
915 -actor->size.y * actor->scalingFactor,
916 actor->size.x * actor->scalingFactor);
917 }
918
919 if (actor->debuff == STATUS_KEY_SHRINK) {
920 actor->scalingFactor += ((0.4 - actor->scalingFactor) / 6.0);
921 } else {
922 actor->scalingFactor += ((1.0 - actor->scalingFactor) / 6.0);
923 }
924
925 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
927 -actor->rotPivotOffset.x * actor->scalingFactor,
928 -actor->rotPivotOffset.y * actor->scalingFactor,
929 -actor->rotPivotOffset.z * actor->scalingFactor);
931 actor->rotPivotOffset.x * actor->scalingFactor,
932 actor->rotPivotOffset.y * actor->scalingFactor,
933 actor->rotPivotOffset.z * actor->scalingFactor);
934 } else {
936 -actor->rotPivotOffset.x * actor->scalingFactor,
937 actor->rotPivotOffset.y * actor->scalingFactor,
938 -actor->rotPivotOffset.z * actor->scalingFactor);
940 actor->rotPivotOffset.x * actor->scalingFactor,
941 -actor->rotPivotOffset.y * actor->scalingFactor,
942 actor->rotPivotOffset.z * actor->scalingFactor);
943 }
944 guRotateF(mtxRotX, actor->rot.x, 1.0f, 0.0f, 0.0f);
945 guRotateF(mtxRotY, actor->rot.y, 0.0f, 1.0f, 0.0f);
946 guRotateF(mtxRotZ, actor->rot.z, 0.0f, 0.0f, 1.0f);
950 actor->scale.x * SPRITE_WORLD_SCALE_D * actor->scalingFactor,
951 actor->scale.y * SPRITE_WORLD_SCALE_D * actor->scalingFactor,
952 actor->scale.z * SPRITE_WORLD_SCALE_D);
958
959 part = actor->partsTable;
960 numParts = actor->numParts;
961 for (i = 0; i < numParts; i++) {
963 partPosX = actorPosX + part->partOffset.x + part->visualOffset.x;
964 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
965 partPosY = actorPosY + part->partOffset.y + part->visualOffset.y;
966 } else {
967 partPosY = (actorPosY - part->partOffset.y) - part->visualOffset.y;
968 }
969 partPosZ = actorPosZ + part->partOffset.z + part->visualOffset.z;
970 partYaw = part->yaw = actor->yaw;
971 } else {
972 partPosX = part->absolutePos.x + part->visualOffset.x;
973 partPosY = part->absolutePos.y + part->visualOffset.y;
974 partPosZ = part->absolutePos.z + part->visualOffset.z;
978 actor->scale.z * SPRITE_WORLD_SCALE_D);
979 partYaw = part->yaw;
980 }
981 part->curPos.x = partPosX;
982 part->curPos.y = partPosY;
983 part->curPos.z = partPosZ;
984
985 if (part->flags & ACTOR_PART_FLAG_INVISIBLE) {
986 part = part->nextPart;
987 continue;
988 }
989 if (part->idleAnimations == nullptr) {
990 part = part->nextPart;
991 continue;
992 }
993
996 } else {
998 }
999
1000 lastAnim = part->curAnimation;
1001 animChanged = false;
1002 palChanged = false;
1003 decorChanged = false;
1004
1005 if (isPartner) {
1008 ) {
1009 if (actor->koStatus == 0) {
1010 part->curAnimation = get_npc_anim_for_status(part->idleAnimations, STATUS_KEY_INACTIVE);
1011 spr_update_sprite(part->spriteInstanceID, part->curAnimation, part->animationRate);
1012 animChanged = true;
1013 }
1015 palChanged = true;
1017 decorChanged = true;
1018 }
1020 if (!palChanged) {
1022 }
1023 palChanged = true;
1024 }
1025 }
1026 if (actor->isGlowing) {
1027 if (!decorChanged) {
1029 }
1030 decorChanged = true;
1031 }
1032 if (actor->debuff == STATUS_KEY_POISON) {
1033 if (!palChanged) {
1035 }
1036 palChanged = true;
1037 }
1038 if (actor->debuff == STATUS_KEY_PARALYZE) {
1039 if (!palChanged) {
1041 }
1042 palChanged = true;
1043 }
1044 if (actor->debuff == STATUS_KEY_UNUSED) {
1045 if (!palChanged) {
1047 }
1048 palChanged = true;
1049 }
1050 if (actor->staticStatus == STATUS_KEY_STATIC) {
1051 if (!palChanged) {
1053 }
1054 palChanged = true;
1055 }
1056 if (!palChanged && !(part->flags & ACTOR_PART_FLAG_HAS_PAL_EFFECT)) {
1058 }
1059 if (!decorChanged && !(part->flags & ACTOR_PART_FLAG_HAS_PAL_EFFECT)) {
1061 }
1062
1063 // adjust idle animation for status
1064 if (actor->flags & ACTOR_FLAG_USING_IDLE_ANIM) {
1065 if (!(part->flags & ACTOR_PART_FLAG_NO_STATUS_ANIMS)) {
1066 if (actor->debuff == STATUS_KEY_FROZEN) {
1067 if (!animChanged) {
1068 part->curAnimation = get_npc_anim_for_status(part->idleAnimations, STATUS_KEY_FROZEN);
1069 animChanged = true;
1070 }
1071 } else if (actor->debuff != STATUS_KEY_SHRINK) {
1072 if (actor->debuff == STATUS_KEY_POISON) {
1073 if (!animChanged) {
1074 part->curAnimation = get_npc_anim_for_status(part->idleAnimations, STATUS_KEY_POISON);
1075 animChanged = true;
1076 }
1077 } else if (actor->debuff == STATUS_KEY_DIZZY) {
1078 if (!animChanged) {
1079 part->curAnimation = get_npc_anim_for_status(part->idleAnimations, STATUS_KEY_DIZZY);
1080 animChanged = true;
1081 }
1082 } else if (actor->debuff == STATUS_KEY_UNUSED) {
1083 if (!animChanged) {
1084 part->curAnimation = get_npc_anim_for_status(part->idleAnimations, STATUS_KEY_UNUSED);
1085 animChanged = true;
1086 }
1087 } else if (actor->debuff == STATUS_KEY_SLEEP) {
1088 if (!animChanged) {
1089 part->curAnimation = get_npc_anim_for_status(part->idleAnimations, STATUS_KEY_SLEEP);
1090 animChanged = true;
1091 }
1092 } else if (actor->debuff == STATUS_KEY_PARALYZE) {
1093 if (!animChanged) {
1094 part->curAnimation = get_npc_anim_for_status(part->idleAnimations, STATUS_KEY_PARALYZE);
1095 animChanged = true;
1096 }
1097 }
1098 }
1099
1100 if (actor->staticStatus == STATUS_KEY_STATIC) {
1101 if (!animChanged) {
1102 part->curAnimation = get_npc_anim_for_status(part->idleAnimations, STATUS_KEY_STATIC);
1103 animChanged = true;
1104 }
1105 }
1106 if (!animChanged) {
1107 part->curAnimation = get_npc_anim_for_status(part->idleAnimations, 1);
1108 }
1109
1110 if (isPartner) {
1111 if (actor->koStatus == STATUS_KEY_KO) {
1112 part->curAnimation = get_npc_anim_for_status(part->idleAnimations, STATUS_KEY_KO);
1113 animChanged = true;
1114 } else {
1116 if (temp == get_npc_anim_for_status(part->idleAnimations, STATUS_KEY_KO)) {
1117 part->curAnimation = get_npc_anim_for_status(part->idleAnimations, STATUS_KEY_NORMAL);
1118 }
1119 }
1120 }
1121 if (actor->debuff == STATUS_KEY_STOP) {
1122 part->curAnimation = get_npc_anim_for_status(part->idleAnimations, STATUS_KEY_STOP);
1124 } else if (!animChanged) {
1126 if (temp == get_npc_anim_for_status(part->idleAnimations, STATUS_KEY_STOP)) {
1127 part->curAnimation = get_npc_anim_for_status(part->idleAnimations, STATUS_KEY_NORMAL);
1128 }
1129 }
1130 }
1131 }
1132
1134 if (actor->debuff == STATUS_KEY_POISON) {
1136 } else if (actor->debuff == STATUS_KEY_DIZZY) {
1138 } else if (actor->debuff == STATUS_KEY_SLEEP) {
1140 } else if (actor->debuff == STATUS_KEY_PARALYZE) {
1142 } else if (actor->debuff == STATUS_KEY_SHRINK) {
1144 } else if (actor->debuff == STATUS_KEY_FROZEN) {
1146 }
1147 if (actor->staticStatus == STATUS_KEY_STATIC) {
1149 }
1152 }
1153 if (actor->chillOutAmount != 0) {
1155 }
1156 } else {
1161 }
1162 if (part->spriteInstanceID >= 0) {
1163 if (lastAnim != part->curAnimation) {
1164 spr_update_sprite(part->spriteInstanceID, part->curAnimation, part->animationRate);
1165 part->animNotifyValue = spr_get_notify_value(part->spriteInstanceID);
1166 }
1167 }
1168 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
1170 -part->rotPivotOffset.x * actor->scalingFactor,
1171 -part->rotPivotOffset.y * actor->scalingFactor,
1172 -part->rotPivotOffset.z * actor->scalingFactor);
1174 part->rotPivotOffset.x * actor->scalingFactor,
1175 part->rotPivotOffset.y * actor->scalingFactor,
1176 part->rotPivotOffset.z * actor->scalingFactor);
1177 } else {
1179 -part->rotPivotOffset.x * actor->scalingFactor,
1180 part->rotPivotOffset.y * actor->scalingFactor,
1181 -part->rotPivotOffset.z * actor->scalingFactor);
1183 part->rotPivotOffset.x * actor->scalingFactor,
1184 -part->rotPivotOffset.y * actor->scalingFactor,
1185 part->rotPivotOffset.z * actor->scalingFactor);
1186 }
1188 partPosX + part->palAnimPosOffset[0],
1189 partPosY + part->palAnimPosOffset[1],
1190 partPosZ);
1191 guRotateF(mtxRotX, part->rot.x, 1.0f, 0.0f, 0.0f);
1192 guRotateF(mtxRotY, part->rot.y, 0.0f, 1.0f, 0.0f);
1193 guRotateF(mtxRotZ, part->rot.z, 0.0f, 0.0f, 1.0f);
1196 guScaleF(mtxScale, part->scale.x, part->scale.y * part->verticalStretch, part->scale.z);
1200
1203 } else {
1205 }
1207
1208 part->curPos.x = partPosX + part->palAnimPosOffset[0];
1209 part->curPos.y = partPosY + part->palAnimPosOffset[1];
1210 part->curPos.z = partPosZ;
1211
1212 if (part->spriteInstanceID >= 0) {
1213 if (!isPartner) {
1214 update_part_glow(true, part, partYaw, false);
1215 update_part_flash(true, part, partYaw, false);
1217 } else {
1218 update_part_glow(true, part, clamp_angle(180.0f - partYaw), false);
1219 update_part_flash(true, part, clamp_angle(180.0f - partYaw), false);
1221 }
1222
1224 }
1225
1226 part = part->nextPart;
1227 }
1228}
void set_actor_pal_adjustment(Actor *actor, s32 arg1)
Definition 190B20.c:2337
void enable_status_transparent(s16)
s32 get_npc_anim_for_status(u32 *, s32)
Definition 190B20.c:1674
s32 update_part_glow(b32 isNpcSprite, ActorPart *part, s32 yaw, b32 isReflection)
void _add_part_decoration(ActorPart *actorPart)
s32 render_with_adjusted_palettes(b32 isNpcSprite, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
void enable_status_chill_out(s32 iconID)
void enable_status_debuff(s16)
void enable_status_static(s32 iconID)
s32 update_part_flash(b32 isNpcSprite, ActorPart *part, s32 yaw, b32 isReflection)
void set_status_icons_properties(s32 iconID, f32 x, f32 y, f32 z, s32 arg, s32 arg2, s32 radius, s32 offsetY)
void set_status_icons_offset(s32 iconID, s32 offsetY, s32 arg2)
void create_status_chill_out(s32 iconID)
Vec2b statusIconOffset
struct EffectInstance * disableEffect
s8 transparentStatus
Vec2b statusTextOffset
s8 disableDismissTimer
struct ActorBlueprint * actorBlueprint
s8 verticalRenderOffset
Vec3s rotPivotOffset
Vec3f scaleModifier
struct EffectInstance * icePillarEffect
s8 chillOutAmount
Vec2bu size
f32 Matrix4f[4][4]
s16 hudElementDataIndex
Vec3f scale
#define guRotateF
#define guTranslateF
#define guMtxCatF
#define guScaleF
struct DisableXFXData * disableX
Definition effects.h:2529
struct IcePillarFXData * icePillar
Definition effects.h:2593
EffectInstanceDataPtr data
Definition effects.h:2605
@ FX_INSTANCE_FLAG_DISMISS
Definition enums.h:3551
@ GLOW_PAL_OFF
Definition enums.h:2244
@ GLOW_PAL_ON
Definition enums.h:2245
@ BS_FLAGS1_TATTLE_OPEN
Definition enums.h:3600
@ BS_FLAGS1_SHOW_PLAYER_DECORATIONS
Definition enums.h:3601
@ ACTOR_PAL_ADJUST_FEAR
Definition enums.h:2230
@ ACTOR_PAL_ADJUST_WATT_IDLE
Definition enums.h:2234
@ ACTOR_PAL_ADJUST_POISON
Definition enums.h:2231
@ ACTOR_PAL_ADJUST_PARALYZE
Definition enums.h:2232
@ ACTOR_PAL_ADJUST_STATIC
Definition enums.h:2229
@ ACTOR_PAL_ADJUST_PLAYER_DEBUFF
Definition enums.h:2236
@ ACTOR_PAL_ADJUST_NONE
Definition enums.h:2227
@ BS_FLAGS2_OVERRIDE_INACTIVE_PARTNER
Definition enums.h:3641
@ BS_FLAGS2_PARTNER_TURN_USED
Definition enums.h:3639
@ STATUS_KEY_PARALYZE
Definition enums.h:2806
@ STATUS_KEY_FROZEN
Definition enums.h:2808
@ STATUS_KEY_TRANSPARENT
Definition enums.h:2815
@ STATUS_KEY_STATIC
Definition enums.h:2812
@ STATUS_KEY_KO
Definition enums.h:2814
@ STATUS_KEY_SLEEP
Definition enums.h:2807
@ STATUS_KEY_UNUSED
Definition enums.h:2804
@ STATUS_KEY_STOP
Definition enums.h:2809
@ STATUS_KEY_INACTIVE
Definition enums.h:2819
@ STATUS_KEY_SHRINK
Definition enums.h:2811
@ STATUS_KEY_DIZZY
Definition enums.h:2805
@ STATUS_KEY_POISON
Definition enums.h:2810
@ STATUS_KEY_NORMAL
Definition enums.h:2802
@ ACTOR_FLAG_SHOW_STATUS_ICONS
Definition enums.h:3377
@ ACTOR_FLAG_UPSIDE_DOWN
HP bar offset below actor (e.g. Swooper when upside-down).
Definition enums.h:3365
@ ACTOR_FLAG_USING_IDLE_ANIM
Definition enums.h:3376
@ PARTNER_WATT
Definition enums.h:2925
@ ACTOR_PART_FLAG_NO_STATUS_ANIMS
Definition enums.h:3398
@ ACTOR_PART_FLAG_HAS_PAL_EFFECT
Definition enums.h:3397
@ ACTOR_PART_FLAG_USE_ABSOLUTE_POSITION
Definition enums.h:3395
@ ACTOR_PART_FLAG_INVISIBLE
Definition enums.h:3384
void create_status_debuff(s32, s32)
void create_status_transparent(s32, s32)
void create_status_static(s32, s32)
void set_actor_glow_pal(Actor *actor, s32 arg1)
Definition 190B20.c:2384
#define NPC_DISPOSE_POS_Z
Definition macros.h:172
#define SPRITE_WORLD_SCALE_D
Definition macros.h:151
#define NPC_DISPOSE_POS_X
Definition macros.h:170
#define NPC_DISPOSE_POS_Y
Definition macros.h:171
s32 spr_get_notify_value(s32 spriteInstanceID)
Definition sprite.c:1158
s32 spr_update_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale)
Definition sprite.c:1061
@ SPRITE_MODE_NPC
Definition sprite.h:38
Vec2b statusIconOffset
Definition battle.h:150
Vec2b statusTextOffset
Definition battle.h:151
PlayerData gPlayerData
Definition 77480.c:39

Referenced by appendGfx_enemy_actor(), and appendGfx_partner_actor().

◆ create_status_chill_out()

void create_status_chill_out ( s32 iconID)

Definition at line 1142 of file status_icons.c.

1142 {
1144
1146 if (!statusIcon->status4.active) {
1147 statusIcon->status4.active = true;
1148 statusIcon->status4.activeTask = true;
1149 }
1150}
BSS HudStatusIcon * D_800A0F44

Referenced by appendGfx_npc_actor().

◆ enable_status_static()

void enable_status_static ( s32 iconID)

Definition at line 1106 of file status_icons.c.

1106 {
1108
1110}
@ STATUS_ICON_FLAG_STATIC

Referenced by appendGfx_npc_actor(), and appendGfx_player_actor().

◆ enable_status_chill_out()

void enable_status_chill_out ( s32 iconID)

Definition at line 1165 of file status_icons.c.

1165 {
1167
1169}
@ STATUS_ICON_FLAG_STATUS_CHILL_OUT

Referenced by appendGfx_npc_actor(), and appendGfx_player_actor().

◆ enable_status_debuff()

void enable_status_debuff ( s16 )

◆ enable_status_transparent()

void enable_status_transparent ( s16 )

◆ enable_status_icon_boost_jump()

void enable_status_icon_boost_jump ( s32 iconID)

Definition at line 1197 of file status_icons.c.

1197 {
1199
1201}
@ STATUS_ICON_FLAG_BOOST_JUMP

Referenced by appendGfx_player_actor().

◆ enable_status_icon_boost_hammer()

void enable_status_icon_boost_hammer ( s32 iconID)

Definition at line 1229 of file status_icons.c.

1229 {
1231
1233}
@ STATUS_ICON_FLAG_BOOST_HAMMER

Referenced by appendGfx_player_actor().

◆ get_npc_anim_for_status()

s32 get_npc_anim_for_status ( u32 * animations,
s32 statusKey )

Definition at line 1674 of file 190B20.c.

1674 {
1676
1677 if (animations == nullptr) {
1678 return 0;
1679 }
1680
1681 foundAnim = 0;
1682 while (animations[DICTIONARY_KEY] != nullptr) {
1683 if (animations[DICTIONARY_KEY] == STATUS_KEY_NORMAL) {
1684 foundAnim = animations[DICTIONARY_VALUE];
1685 }
1686 if (animations[DICTIONARY_KEY] == statusKey) {
1687 foundAnim = animations[DICTIONARY_VALUE];
1688 break;
1689 }
1690 animations += DICTIONARY_SIZE;
1691 }
1692 return foundAnim;
1693}
u32 AnimID
@ DICTIONARY_KEY
Definition enums.h:4819
@ DICTIONARY_SIZE
Definition enums.h:4821
@ DICTIONARY_VALUE
Definition enums.h:4820

Referenced by appendGfx_npc_actor(), create_actor(), load_partner_actor(), and load_player_actor().

◆ set_actor_pal_adjustment()

void set_actor_pal_adjustment ( Actor * actor,
s32 arg1 )

Definition at line 2337 of file 190B20.c.

2337 {
2338 for (ActorPart* part = actor->partsTable; part != nullptr; part = part->nextPart) {
2339 if (!(part->flags & ACTOR_PART_FLAG_INVISIBLE)
2340 && (part->idleAnimations != nullptr)
2342 ) {
2344 }
2345 }
2346}
void set_part_pal_adjustment(ActorPart *part, s32 palAdjust)
Definition 190B20.c:2325
@ ACTOR_PART_FLAG_NO_DECORATIONS
Definition enums.h:3385

Referenced by appendGfx_npc_actor(), appendGfx_player_actor(), and inflict_status().

◆ create_status_icon_boost_hammer()

void create_status_icon_boost_hammer ( s32 iconID)

Definition at line 1203 of file status_icons.c.

1203 {
1205 HudElemID hid;
1206
1208 if (!statusIcon->boostHammer.active) {
1209 statusIcon->boostHammer.active = true;
1213 statusIcon->boostHammer.activeElementID = hid;
1214 }
1215}
s32 HudElemID
HudElemID hud_element_create(HudScript *anim)
Creates a new HUD element and returns its ID.
void hud_element_set_flags(s32 id, s32 flags)
Turns on the given flags.
@ HUD_ELEMENT_FLAG_DISABLED
Definition hud_element.h:72
@ HUD_ELEMENT_FLAG_MANUAL_RENDER
Definition hud_element.h:78
HudScript HES_BoostHammerBegin

Referenced by appendGfx_player_actor().

◆ create_status_icon_boost_jump()

void create_status_icon_boost_jump ( s32 iconID)

Definition at line 1171 of file status_icons.c.

1171 {
1173 HudElemID hid;
1174
1176 if (!statusIcon->boostJump.active) {
1177 statusIcon->boostJump.active = true;
1181 statusIcon->boostJump.activeElementID = hid;
1182 }
1183}
HudScript HES_BoostJumpBegin

Referenced by appendGfx_player_actor().

◆ create_status_icon_peril()

void create_status_icon_peril ( s32 iconID)

Definition at line 1293 of file status_icons.c.

1293 {
1295 HudElemID hid;
1296
1298 if (!statusIcon->peril.active) {
1299 statusIcon->peril.active = true;
1303 statusIcon->peril.activeElementID = hid;
1304 }
1305}
HudScript HES_Peril

Referenced by appendGfx_player_actor().

◆ create_status_icon_danger()

void create_status_icon_danger ( s32 iconID)

Definition at line 1322 of file status_icons.c.

1322 {
1324 HudElemID hid;
1325
1327 if (!statusIcon->danger.active) {
1328 statusIcon->danger.active = true;
1332 statusIcon->danger.activeElementID = hid;
1333 }
1334}
HudScript HES_Danger

Referenced by appendGfx_player_actor().

◆ set_status_icons_offset()

void set_status_icons_offset ( s32 iconID,
s32 offsetY,
s32 arg2 )

Definition at line 1045 of file status_icons.c.

1045 {
1047
1048 statusIcon->offsetY = offsetY;
1049 statusIcon->offsetX = offsetX;
1050}

Referenced by appendGfx_npc_actor(), and appendGfx_player_actor().

◆ set_status_icons_properties()

void set_status_icons_properties ( s32 iconID,
f32 x,
f32 y,
f32 z,
s32 arg,
s32 arg2,
s32 radius,
s32 offsetY )

Definition at line 1029 of file status_icons.c.

1029 {
1031
1032 icon->worldPos.x = x;
1033 icon->worldPos.y = y;
1034 icon->worldPos.z = z;
1035 icon->status1Radius = radius + 17;
1036 icon->status1OffsetY = offsetY;
1037 icon->status2Radius = radius + 17;
1038 icon->status2OffsetY = offsetY + 17;
1039 icon->status3Radius = radius + 17;
1040 icon->status3OffsetY = offsetY + 34;
1041 icon->status4Radius = radius + 17;
1042 icon->status4OffsetY = offsetY + 51;
1043}

Referenced by appendGfx_npc_actor(), and appendGfx_player_actor().

◆ appendGfx_npc_actor_reflection()

void appendGfx_npc_actor_reflection ( s32 flipYaw,
Actor * actor )

Definition at line 1230 of file actor_rendering.c.

1230 {
1235 ActorPart* part;
1238 f32 partYaw;
1239 s32 numParts;
1240 s32 i;
1241
1242 actorPosX = actor->curPos.x + actor->headOffset.x;
1243 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
1244 actorPosY = actor->curPos.y + actor->headOffset.y;
1245 } else {
1246 actorPosY = actor->curPos.y - actor->headOffset.y;
1247 }
1248 actorPosZ = actor->curPos.z + actor->headOffset.z - 5.0f;
1249
1250 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
1252 -actor->rotPivotOffset.x * actor->scalingFactor,
1253 -actor->rotPivotOffset.y * actor->scalingFactor,
1254 -actor->rotPivotOffset.z * actor->scalingFactor);
1256 actor->rotPivotOffset.x * actor->scalingFactor,
1257 actor->rotPivotOffset.y * actor->scalingFactor,
1258 actor->rotPivotOffset.z * actor->scalingFactor);
1259 } else {
1261 -actor->rotPivotOffset.x * actor->scalingFactor,
1262 actor->rotPivotOffset.y * actor->scalingFactor,
1263 -actor->rotPivotOffset.z * actor->scalingFactor);
1265 actor->rotPivotOffset.x * actor->scalingFactor,
1266 -actor->rotPivotOffset.y * actor->scalingFactor,
1267 actor->rotPivotOffset.z * actor->scalingFactor);
1268 }
1269
1270 guRotateF(mtxRotX, actor->rot.x, 1.0f, 0.0f, 0.0f);
1271 guRotateF(mtxRotY, actor->rot.y, 0.0f, 1.0f, 0.0f);
1272 guRotateF(mtxRotZ, actor->rot.z, 0.0f, 0.0f, 1.0f);
1275
1277 actor->scale.x * SPRITE_WORLD_SCALE_D * actor->scalingFactor,
1278 actor->scale.y * SPRITE_WORLD_SCALE_D * actor->scalingFactor,
1279 actor->scale.z * SPRITE_WORLD_SCALE_D);
1280
1284
1285 part = actor->partsTable;
1286 numParts = actor->numParts;
1287 for (i = 0; i < numParts; i++) {
1288 // determine part position
1290 partPosX = actorPosX + part->partOffset.x + part->visualOffset.x;
1291 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
1292 partPosY = actorPosY + part->partOffset.y + part->visualOffset.y;
1293 } else {
1294 partPosY = actorPosY - part->partOffset.y - part->visualOffset.y;
1295 }
1296 partPosZ = actorPosZ + part->partOffset.z + part->visualOffset.z;
1297 partYaw = part->yaw = actor->yaw;
1298 } else {
1299 partPosX = part->absolutePos.x + part->visualOffset.x;
1300 partPosY = part->absolutePos.y + part->visualOffset.y;
1301 partPosZ = part->absolutePos.z + part->visualOffset.z;
1303 actor->scale.x * SPRITE_WORLD_SCALE_D,
1304 actor->scale.y * SPRITE_WORLD_SCALE_D,
1305 actor->scale.z * SPRITE_WORLD_SCALE_D);
1306 partYaw = part->yaw;
1307 }
1308
1309 if (part->flags & ACTOR_PART_FLAG_INVISIBLE) {
1310 part = part->nextPart;
1311 continue;
1312 }
1313 if (part->idleAnimations == nullptr) {
1314 part = part->nextPart;
1315 continue;
1316 }
1317
1318 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
1320 -part->rotPivotOffset.x * actor->scalingFactor,
1321 -part->rotPivotOffset.y * actor->scalingFactor,
1322 -part->rotPivotOffset.z * actor->scalingFactor);
1324 part->rotPivotOffset.x * actor->scalingFactor,
1325 part->rotPivotOffset.y * actor->scalingFactor,
1326 part->rotPivotOffset.z * actor->scalingFactor);
1327 } else {
1329 -part->rotPivotOffset.x * actor->scalingFactor,
1330 part->rotPivotOffset.y * actor->scalingFactor,
1331 -part->rotPivotOffset.z * actor->scalingFactor);
1333 part->rotPivotOffset.x * actor->scalingFactor,
1334 -part->rotPivotOffset.y * actor->scalingFactor,
1335 part->rotPivotOffset.z * actor->scalingFactor);
1336 }
1338 partPosX + part->palAnimPosOffset[0],
1339 partPosY + part->palAnimPosOffset[1],
1340 partPosZ - 1.0f);
1341
1342 guRotateF(mtxRotX, part->rot.x, 1.0f, 0.0f, 0.0f);
1343 guRotateF(mtxRotY, part->rot.y, 0.0f, 1.0f, 0.0f);
1344 guRotateF(mtxRotZ, part->rot.z, 0.0f, 0.0f, 1.0f);
1347
1348 guScaleF(mtxScale, part->scale.x, part->scale.y * part->verticalStretch, part->scale.z);
1355 } else {
1357 }
1360
1361 if (flipYaw == 0) {
1362 update_part_glow(true, part, partYaw, true);
1363 update_part_flash(true, part, partYaw, true);
1365 } else {
1366 update_part_glow(true, part, clamp_angle(partYaw + 180.0f), true);
1367 update_part_flash(true, part, clamp_angle(partYaw + 180.0f), true);
1369 }
1370
1371 part = part->nextPart;
1372 }
1373}
void mtx_mirror_y(Matrix4f mtx)

Referenced by appendGfx_enemy_actor_reflection(), and appendGfx_partner_actor_reflection().

◆ make_flash_palettes()

void make_flash_palettes ( ActorPart * part)

Definition at line 2005 of file actor_rendering.c.

2005 {
2006 DecorationTable* decorations = part->decorationTable;
2007 PAL_PTR src;
2008 PAL_PTR dest;
2009 s32 i, j;
2010
2011 for (i = 0; i < decorations->originalPalettesCount; i++) {
2012 if (decorations->adjustedPalettes[i] != nullptr) {
2013 src = decorations->adjustedPalettes[i];
2014 dest = decorations->copiedPalettes[1][i];
2015
2016 for (j = 0; j < SPR_PAL_SIZE; j++) {
2017 *dest = *src | 0xFFFE; // pure white, not affecting alpha bit
2018 src++;
2019 dest++;
2020
2021 }
2022 decorations->flashPalettes[i] = decorations->copiedPalettes[1][i];
2023 }
2024 }
2025}
u16 * flashPalettes[16]
#define PAL_PTR
u16 copiedPalettes[2][27][16]
u16 * adjustedPalettes[27]
#define SPR_PAL_SIZE
Definition macros.h:153

Referenced by func_unkB_draw_npc(), and func_unkB_draw_player().

◆ func_unkA_draw_npc()

void func_unkA_draw_npc ( ActorPart * part,
s32 yaw,
Matrix4f mtx )

Definition at line 2027 of file actor_rendering.c.

2027 {
2028 DecorationTable* decorations = part->decorationTable;
2029 s32 opacity = 255;
2030 s32 idMask = 0;
2031 PAL_PTR dest;
2032 PAL_PTR src;
2033 s32 i, j;
2034
2035 if (part->opacity < 255) {
2037 opacity = part->opacity;
2038 }
2039 if (part->flags & ACTOR_PART_FLAG_TRANSPARENT) {
2041 opacity = (opacity * 120) / 255;
2042 }
2043
2044 if (decorations->flashEnabled != FLASH_PAL_OFF) {
2045 decorations->originalPalettesList = spr_get_npc_palettes(part->curAnimation >> 0x10);
2046 decorations->originalPalettesCount = 0;
2047 while (decorations->originalPalettesList[decorations->originalPalettesCount] != (PAL_PTR) -1) {
2048 decorations->originalPalettesCount++;
2049 }
2050
2051 for (i = 0; i < decorations->originalPalettesCount; i++) {
2052 src = decorations->originalPalettesList[i];
2053 dest = decorations->copiedPalettes[0][i];
2054 if (src != nullptr) {
2055 for (j = 0; j < ARRAY_COUNT(decorations->copiedPalettes[0][i]); j++) {
2056 *dest = *src;
2057 src++;
2058 dest++;
2059 }
2060 }
2061 }
2062
2063 for (i = 0; i < decorations->originalPalettesCount; i++) {
2064 decorations->adjustedPalettes[i] = decorations->copiedPalettes[0][i];
2065 }
2066
2067 func_unkB_draw_npc(part, yaw, mtx);
2068 } else {
2069 spr_draw_npc_sprite(part->spriteInstanceID | idMask, yaw, opacity, nullptr, mtx);
2070 }
2071}
void func_unkB_draw_npc(ActorPart *, s32, Matrix4f)
@ FLASH_PAL_OFF
Definition enums.h:2256
#define ARRAY_COUNT(arr)
Definition macros.h:39
s32 spr_draw_npc_sprite(s32 spriteInstanceID, s32 yaw, s32 alphaIn, PAL_PTR *paletteList, Matrix4f mtx)
Definition sprite.c:1094
PAL_PTR * spr_get_npc_palettes(s32 npcSpriteID)
Definition sprite.c:1296
@ DRAW_SPRITE_OVERRIDE_ALPHA
Definition sprite.h:26

Referenced by render_with_paralyze_palettes(), and render_without_adjusted_palettes().

◆ func_unkB_draw_npc()

void func_unkB_draw_npc ( ActorPart * part,
s32 yaw,
Matrix4f mtx )

Definition at line 2073 of file actor_rendering.c.

2073 {
2074 DecorationTable* decorations = part->decorationTable;
2075 s32 opacity = 255;
2076 s32 idMask = 0;
2077
2078 if (part->opacity < 255) {
2080 opacity = part->opacity;
2081 }
2082
2083 if (part->flags & ACTOR_PART_FLAG_TRANSPARENT) {
2085 opacity = (opacity * 120) / 255;
2086 }
2087
2088 if (decorations->flashEnabled != FLASH_PAL_OFF) {
2090 spr_draw_npc_sprite(part->spriteInstanceID | DRAW_SPRITE_OVERRIDE_PALETTES | idMask, yaw, opacity, decorations->flashPalettes, mtx);
2091 } else {
2092 spr_draw_npc_sprite(part->spriteInstanceID | DRAW_SPRITE_OVERRIDE_PALETTES | idMask, yaw, opacity, decorations->adjustedPalettes, mtx);
2093 }
2094}
void make_flash_palettes(ActorPart *)
@ DRAW_SPRITE_OVERRIDE_PALETTES
Definition sprite.h:24

Referenced by func_unkA_draw_npc(), render_with_berserk_palettes(), render_with_fear_palettes(), render_with_pal_blending(), render_with_palset_blending(), render_with_paralyze_palettes(), render_with_player_debuff_palettes(), render_with_poison_palettes(), render_with_sleep_palettes(), render_with_static_palettes(), render_with_watt_attack_palettes(), and render_with_watt_idle_palettes().

◆ func_unkA_draw_player()

void func_unkA_draw_player ( ActorPart * part,
s32 yaw,
Matrix4f mtx )

Definition at line 2096 of file actor_rendering.c.

2096 {
2097 DecorationTable* decorations = part->decorationTable;
2098 s32 opacity = 255;
2099 s32 idMask = 0;
2100 PAL_PTR src;
2101 PAL_PTR dest;
2102 s32 i, j;
2103
2104 if (part->opacity < 255) {
2106 opacity = part->opacity;
2107 }
2108 if (part->flags & ACTOR_PART_FLAG_TRANSPARENT) {
2110 opacity = (opacity * 120) / 255;
2111 }
2112
2113 if (decorations->flashEnabled != FLASH_PAL_OFF) {
2114 decorations->originalPalettesList = spr_get_player_palettes(part->curAnimation >> 16);
2115 decorations->originalPalettesCount = 0;
2116
2117 while (decorations->originalPalettesList[decorations->originalPalettesCount] != (PAL_PTR) -1) {
2118 decorations->originalPalettesCount++;
2119 }
2120
2121 for (i = 0; i < decorations->originalPalettesCount; i++) {
2122 src = decorations->originalPalettesList[i];
2123 dest = decorations->copiedPalettes[0][i];
2124 if (decorations->originalPalettesList[i] != nullptr) {
2125 for (j = 0; j < ARRAY_COUNT(decorations->copiedPalettes[0][i]); j++) {
2126 *dest = *src;
2127 dest++;
2128 src++;
2129 }
2130 }
2131 }
2132 for (i = 0; i < decorations->originalPalettesCount; i++) {
2133 decorations->adjustedPalettes[i] = decorations->copiedPalettes[0][i];
2134 }
2135 func_unkB_draw_player(part, yaw, mtx);
2136 } else {
2137 spr_draw_player_sprite(PLAYER_SPRITE_MAIN | idMask, yaw, opacity, nullptr, mtx);
2138 }
2139}
void func_unkB_draw_player(ActorPart *, s32, Matrix4f)
s32 spr_draw_player_sprite(s32 spriteInstanceID, s32 yaw, s32 alphaIn, PAL_PTR *paletteList, Matrix4f mtx)
Definition sprite.c:867
PAL_PTR * spr_get_player_palettes(s32 spriteIndex)
Definition sprite.c:1005

Referenced by render_with_paralyze_palettes(), and render_without_adjusted_palettes().

◆ func_unkB_draw_player()

void func_unkB_draw_player ( ActorPart * part,
s32 yaw,
Matrix4f mtx )

◆ part_glow_on()

void part_glow_on ( b32 arg0,
ActorPart * part,
s32 yaw,
b32 arg3 )

Definition at line 3357 of file actor_rendering.c.

3357 {
3358 DecorationTable* decorations = part->decorationTable;
3359 u8 rbuf[20];
3360 u8 gbuf[20];
3361 u8 bbuf[20];
3362 s32 color;
3363 s32 alpha;
3364 s32 i;
3365
3366 if (decorations->glowStateChanged) {
3367 decorations->glowUnk1 = -2;
3368 decorations->glowUnk3 = 0;
3369 decorations->glowStateChanged = false;
3370 decorations->glowUnk2 = 0;
3373 } else {
3374 set_npc_imgfx_all(part->spriteInstanceID, IMGFX_ALLOC_COLOR_BUF, 20, 0, 0, 255, 0);
3375 }
3376 }
3377
3378 decorations->glowPhase += 7;
3379
3380 if (decorations->glowPhase >= 360) {
3381 decorations->glowPhase %= 360;
3382 }
3383
3384 for (i = 0; i < ARRAY_COUNT(rbuf); i++) {
3385 rbuf[i] = (cosine(decorations->glowPhase + (25 * i)) + 1.0) * 112.0;
3386 gbuf[i] = (cosine(decorations->glowPhase + (25 * i) + 45) + 1.0) * 112.0;
3387 bbuf[i] = (cosine(decorations->glowPhase + (25 * i) + 90) + 1.0) * 112.0;
3388 }
3389
3390 alpha = 255;
3391 if (part->opacity < 255) {
3392 alpha = part->opacity;
3393 }
3394 if (part->flags & ACTOR_PART_FLAG_TRANSPARENT) {
3395 alpha = (alpha * 120) / 255;
3396 }
3397
3398 for (i = 0; i < ARRAY_COUNT(rbuf); i++) {
3399 color = (rbuf[i] << 0x18) | (gbuf[i] << 0x10) | (bbuf[i] << 8) | alpha;
3402 } else {
3403 set_npc_imgfx_all(part->spriteInstanceID, IMGFX_COLOR_BUF_SET_MODULATE, i, color, 0, 255, 0);
3404 }
3405 }
3406
3407 if (!isReflection) {
3408 decorations->glowUnk3--;
3409 }
3410}
@ IMGFX_ALLOC_COLOR_BUF
Definition enums.h:4719
@ IMGFX_COLOR_BUF_SET_MODULATE
Definition enums.h:4714
f32 cosine(s16 arg0)
Definition 43F0.c:352
void set_npc_imgfx_all(s32 spriteIdx, ImgFXType imgfxType, s32 imgfxArg1, s32 imgfxArg2, s32 imgfxArg3, s32 imgfxArg4, s32 imgfxArg5)
Definition sprite.c:1238
void set_player_imgfx_all(s32 animID, ImgFXType imgfxType, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6)
Definition sprite.c:984
@ SPRITE_MODE_PLAYER
Definition sprite.h:37

Referenced by update_part_glow().

◆ part_flash_on()

void part_flash_on ( b32 arg0,
ActorPart * part,
s32 yaw,
b32 arg3 )

Definition at line 3435 of file actor_rendering.c.

3435 {
3436 DecorationTable* decorations = part->decorationTable;
3437
3438 if (decorations->flashStateChanged) {
3441 decorations->flashFramesLeft = 1;
3442 decorations->flashMode = FLASH_MODE_LIGHT;
3443 break;
3445 decorations->flashFramesLeft = 8;
3446 decorations->flashMode = FLASH_MODE_MEDIUM;
3447 break;
3449 default:
3450 decorations->flashFramesLeft = 14;
3451 decorations->flashMode = FLASH_MODE_HEAVY;
3452 break;
3453 }
3454 decorations->flashEnabled = FLASH_PAL_OFF;
3455 decorations->flashStateChanged = false;
3456 }
3457
3458 if (decorations->flashMode == FLASH_MODE_DISPOSE) {
3459 decorations->flashEnabled = FLASH_PAL_OFF;
3461 }
3462
3463 switch (decorations->flashMode) {
3464 case FLASH_MODE_LIGHT:
3465 switch (decorations->flashFramesLeft) {
3466 case 0:
3467 decorations->flashEnabled = FLASH_PAL_ON;
3468 decorations->flashMode = FLASH_MODE_DISPOSE;
3469 break;
3470 default:
3471 decorations->flashEnabled = FLASH_PAL_OFF;
3472 if (!isReflection) {
3473 decorations->flashFramesLeft--;
3474 }
3475 break;
3476 }
3477 break;
3478 case FLASH_MODE_MEDIUM:
3479 switch (decorations->flashFramesLeft) {
3480 case 1:
3481 case 2:
3482 case 5:
3483 case 6:
3484 decorations->flashEnabled = FLASH_PAL_ON;
3485 break;
3486 case 3:
3487 case 4:
3488 case 7:
3489 case 8:
3490 decorations->flashEnabled = FLASH_PAL_OFF;
3491 break;
3492 case 0:
3493 decorations->flashMode = FLASH_MODE_DISPOSE;
3494 break;
3495 }
3496 if (!isReflection) {
3497 decorations->flashFramesLeft--;
3498 }
3499 break;
3500 case FLASH_MODE_HEAVY:
3501 switch (decorations->flashFramesLeft) {
3502 case 1:
3503 case 2:
3504 case 5:
3505 case 6:
3506 case 9:
3507 case 10:
3508 case 13:
3509 case 14:
3510 decorations->flashEnabled = FLASH_PAL_OFF;
3511 break;
3512 case 3:
3513 case 4:
3514 case 7:
3515 case 8:
3516 case 11:
3517 case 12:
3518 decorations->flashEnabled = FLASH_PAL_ON;
3519 break;
3520 case 0:
3521 decorations->flashMode = FLASH_MODE_DISPOSE;
3522 break;
3523 }
3524 if (!isReflection) {
3525 decorations->flashFramesLeft--;
3526 }
3527 break;
3528 }
3529}
void clear_part_flash_mode(ActorPart *part)
Definition 190B20.c:2438
s32 get_flash_damage_intensity(ActorPart *part)
@ DAMAGE_INTENSITY_LIGHT
Definition enums.h:3540
@ DAMAGE_INTENSITY_HEAVY
Definition enums.h:3542
@ DAMAGE_INTENSITY_MEDIUM
Definition enums.h:3541
@ FLASH_MODE_MEDIUM
Definition enums.h:2250
@ FLASH_MODE_HEAVY
Definition enums.h:2251
@ FLASH_MODE_DISPOSE
Definition enums.h:2252
@ FLASH_MODE_LIGHT
Definition enums.h:2249
@ FLASH_PAL_ON
Definition enums.h:2257

Referenced by update_part_flash().

◆ add_part_decor_none()

void add_part_decor_none ( ActorPart * actorPart,
s32 i )

Definition at line 3627 of file actor_rendering.c.

3627 {
3628}

Referenced by _add_part_decoration().

◆ add_part_decor_golden_flames()

void add_part_decor_golden_flames ( ActorPart * part,
s32 idx )

Definition at line 3633 of file actor_rendering.c.

3633 {
3634 DecorationTable* decorations = part->decorationTable;
3635 EffectInstance* effect;
3636 AuraFXData* data;
3637 f32 scale;
3638
3639 switch (decorations->state[idx]) {
3640 case 0:
3641 fx_aura(FX_AURA_GOLD, part->curPos.x, part->curPos.y, part->curPos.z, 0.4f, &decorations->effect[idx]);
3642 decorations->state[idx] = 1;
3643 decorations->decorData[idx].goldenFlames.scaleX = 40;
3644 decorations->decorData[idx].goldenFlames.scaleY = 40;
3645 decorations->decorData[idx].goldenFlames.offsetX = 0;
3646 break;
3647 case 1:
3648 effect = decorations->effect[idx];
3649 data = effect->data.aura;
3650 data->posA.x = part->curPos.x + decorations->decorData[idx].goldenFlames.offsetX;
3651 data->posA.y = part->curPos.y;
3652 data->posA.z = part->curPos.z;
3653 scale = decorations->decorData[idx].goldenFlames.scaleX;
3654 scale /= 100.0f;
3655 effect->data.aura->scale.x = scale;
3656 scale = decorations->decorData[idx].goldenFlames.scaleY;
3657 scale /= 100.0f;
3658 effect->data.aura->scale.y = scale;
3659 break;
3660 }
3661}
struct EffectInstance * effect[2]
DecorationData decorData[2]
DecorGoldenFlames goldenFlames
Vec2f scale
Definition effects.h:996
Vec3f posA
Definition effects.h:994
@ FX_AURA_GOLD
Definition effects.h:989
struct AuraFXData * aura
Definition effects.h:2523

Referenced by _add_part_decoration().

◆ add_part_decor_sweat()

void add_part_decor_sweat ( ActorPart * part,
s32 idx )

Definition at line 3667 of file actor_rendering.c.

3667 {
3668 DecorationTable* decorations = part->decorationTable;
3669
3670 switch (decorations->state[idx]) {
3671 case 0:
3672 if (part->yaw > 90.0f) {
3673 fx_sweat(0, part->curPos.x, part->curPos.y + part->size.y, part->curPos.z, 5.0f, 45.0f, 20);
3674 } else {
3675 fx_sweat(0, part->curPos.x, part->curPos.y + part->size.y, part->curPos.z, 5.0f, -45.0f, 20);
3676 }
3677 decorations->stateResetTimer[idx] = 10;
3678 decorations->state[idx] = true;
3679 break;
3680 case 1:
3681 if (decorations->stateResetTimer[idx] != 0) {
3682 decorations->stateResetTimer[idx]--;
3683 } else {
3684 decorations->state[idx] = false;
3685 }
3686 break;
3687 }
3688}

Referenced by _add_part_decoration().

◆ add_part_decor_seeing_stars()

void add_part_decor_seeing_stars ( ActorPart * part,
s32 idx )

Definition at line 3693 of file actor_rendering.c.

3693 {
3694 DecorationTable* decorations;
3695 StarsOrbitingFXData* data;
3696
3697 decorations = part->decorationTable;
3698 switch (decorations->state[idx]) {
3699 case 0:
3700 fx_stars_orbiting(0, part->curPos.x, part->curPos.y + part->size.y, part->curPos.z, 20.0f, 3, &decorations->effect[idx]);
3701 decorations->state[idx] = 1;
3702 break;
3703 case 1:
3704 data = decorations->effect[idx]->data.starsOrbiting;
3705 data->pos.x = part->curPos.x;
3706 data->pos.y = part->curPos.y + part->size.y;
3707 data->pos.z = part->curPos.z;
3708 break;
3709 }
3710}
struct StarsOrbitingFXData * starsOrbiting
Definition effects.h:2511

Referenced by _add_part_decoration().

◆ add_part_decor_red_flames()

void add_part_decor_red_flames ( ActorPart * part,
s32 idx )

Definition at line 3716 of file actor_rendering.c.

3716 {
3717 DecorationTable* decorations = part->decorationTable;
3718 EffectInstance* effect;
3719 AuraFXData* data;
3720 f32 scale;
3721
3722 switch (decorations->state[idx]) {
3723 case 0:
3724 fx_aura(FX_AURA_RED, part->curPos.x, part->curPos.y, part->curPos.z, 0.4f, &decorations->effect[idx]);
3725 decorations->state[idx] = 1;
3726 decorations->decorData[idx].redFlames.scaleX = 40;
3727 decorations->decorData[idx].redFlames.scaleY = 40;
3728 decorations->decorData[idx].redFlames.alpha = 255;
3729 decorations->decorData[idx].redFlames.offsetZ = 0;
3730 decorations->decorData[idx].redFlames.unused1 = 255;
3731 decorations->decorData[idx].redFlames.unused2 = 0;
3732 decorations->decorData[idx].redFlames.unused3 = 0;
3733 // fallthrough
3734 case 1:
3735 effect = decorations->effect[idx];
3736 data = effect->data.aura;
3737 data->posA.x = part->curPos.x;
3738 data->posA.y = part->curPos.y;
3739 data->posA.z = part->curPos.z + decorations->decorData[idx].redFlames.offsetZ;
3740
3741 scale = decorations->decorData[idx].redFlames.scaleX;
3742 scale /= 100.0f;
3743 effect->data.aura->scale.x = scale;
3744 scale = decorations->decorData[idx].redFlames.scaleY;
3745 scale /= 100.0f;
3746 effect->data.aura->scale.y = scale;
3747 effect->data.aura->primA = decorations->decorData[idx].redFlames.alpha;
3748 break;
3749 }
3750}
DecorRedFlames redFlames
@ FX_AURA_RED
Definition effects.h:987
s32 primA
Definition effects.h:998

Referenced by _add_part_decoration().

◆ add_part_decor_smoky_trail()

void add_part_decor_smoky_trail ( ActorPart * part,
s32 idx )

Definition at line 3756 of file actor_rendering.c.

3756 {
3757 DecorationTable* decorations = part->decorationTable;
3758 EffectInstance* effect;
3759
3760 switch (decorations->state[idx]) {
3761 case 0:
3762 decorations->effect[idx] = fx_effect_65(1, part->curPos.x, part->curPos.y, part->curPos.z, 1.0f, 0);
3763 decorations->state[idx] = 1;
3764 break;
3765 case 1:
3766 effect = decorations->effect[idx];
3767 effect->data.unk_65->pos.x = part->curPos.x;
3768 effect->data.unk_65->pos.y = part->curPos.y;
3769 effect->data.unk_65->pos.z = part->curPos.z;
3770 break;
3771 }
3772}
struct Effect65FXData * unk_65
Definition effects.h:2565

Referenced by _add_part_decoration().

◆ add_part_decor_fiery_trail()

void add_part_decor_fiery_trail ( ActorPart * part,
s32 idx )

Definition at line 3778 of file actor_rendering.c.

3778 {
3779 DecorationTable* decorations = part->decorationTable;
3780 EffectInstance* effect;
3781
3782 switch (decorations->state[idx]) {
3783 case 0:
3784 decorations->effect[idx] = fx_effect_65(2, part->curPos.x, part->curPos.y, part->curPos.z, 1.0f, 0);
3785 decorations->decorData[idx].fireTrail.scale = 1;
3786 decorations->state[idx] = 1;
3787 break;
3788 case 1:
3789 effect = decorations->effect[idx];
3790 effect->data.unk_65->pos.x = part->curPos.x;
3791 effect->data.unk_65->pos.y = part->curPos.y;
3792 effect->data.unk_65->pos.z = part->curPos.z;
3793 effect->data.unk_65->scale = decorations->decorData[idx].fireTrail.scale / 100.0f;
3794 break;
3795 }
3796}
DecorFireTrail fireTrail

Referenced by _add_part_decoration().

◆ add_part_decor_whirlwind()

void add_part_decor_whirlwind ( ActorPart * part,
s32 idx )

Definition at line 3802 of file actor_rendering.c.

3802 {
3803 DecorationTable* decorations = part->decorationTable;
3804 EffectInstance* effect;
3805
3806 switch (decorations->state[idx]) {
3807 case 0:
3808 decorations->effect[idx] = fx_whirlwind(2, part->curPos.x, part->curPos.y, part->curPos.z, 1.0f, 0);
3809 decorations->state[idx] = 1;
3810 break;
3811 case 1:
3812 effect = decorations->effect[idx];
3813 effect->data.whirlwind->pos.x = part->curPos.x;
3814 effect->data.whirlwind->pos.y = part->curPos.y;
3815 effect->data.whirlwind->pos.z = part->curPos.z;
3816 break;
3817 }
3818}
struct WhirlwindFXData * whirlwind
Definition effects.h:2567

Referenced by _add_part_decoration().

◆ add_part_decor_steam()

void add_part_decor_steam ( ActorPart * part,
s32 idx )

Definition at line 3824 of file actor_rendering.c.

3824 {
3825 DecorationTable* decorations = part->decorationTable;
3826 f32 angle, sinA, cosA;
3827
3828 switch (decorations->state[idx]) {
3829 case 0:
3830 decorations->stateResetTimer[idx] = 0;
3831 decorations->state[idx] = 1;
3832 // fallthrough
3833 case 1:
3834 decorations->stateResetTimer[idx]++;
3835 if (decorations->stateResetTimer[idx] >= 4) {
3836 decorations->stateResetTimer[idx] = 0;
3837 angle = DEG_TO_RAD(clamp_angle(-part->yaw));
3838 sinA = sin_rad(angle);
3839 cosA = cos_rad(angle);
3841 part->curPos.x + (part->size.x * sinA * 0.2f),
3842 part->curPos.y + 1.5f,
3843 part->curPos.z + (part->size.x * cosA * 0.2f),
3844 sinA, cosA);
3845 }
3846 break;
3847 }
3848}
f32 cos_rad(f32 x)
Definition 43F0.c:717
f32 sin_rad(f32 x)
Definition 43F0.c:713
#define DEG_TO_RAD(deg)
Definition macros.h:145

Referenced by _add_part_decoration().

◆ add_part_decor_sparkles()

void add_part_decor_sparkles ( ActorPart * part,
s32 idx )

Definition at line 3853 of file actor_rendering.c.

3853 {
3854 DecorationTable* decorations = part->decorationTable;
3855 f32 x, y, z;
3856
3857 if (SparkleSpawnIntervals[decorations->decorData[idx].sparkles.spawnInterval] >= 0) {
3858 switch (decorations->state[idx]) {
3859 case 0:
3860 decorations->stateResetTimer[idx] = 0;
3861 decorations->state[idx] = 1;
3862 // fallthrough
3863 case 1:
3864 x = part->curPos.x;
3865 y = part->curPos.y + (part->size.y / 2);
3866 z = part->curPos.z - 5.0f;
3867 if ((gGameStatusPtr->frameCounter % 4) == 0) {
3868 fx_sparkles(FX_SPARKLES_1, x, y, z, 10.0f);
3869 }
3870 decorations->stateResetTimer[idx]++;
3871 if (SparkleSpawnIntervals[decorations->decorData[idx].sparkles.spawnInterval] < decorations->stateResetTimer[idx]) {
3872 decorations->stateResetTimer[idx] = 0;
3873 fx_sparkles(FX_SPARKLES_1, x, y, z, 20.0f);
3874 }
3875 break;
3876 }
3877 }
3878}
s16 SparkleSpawnIntervals[]
DecorDataSparkles sparkles
@ FX_SPARKLES_1
Definition effects.h:235
GameStatus * gGameStatusPtr
Definition main_loop.c:31

Referenced by _add_part_decoration().

◆ add_part_decor_bowser_aura()

void add_part_decor_bowser_aura ( ActorPart * part,
s32 idx )

Definition at line 3883 of file actor_rendering.c.

3883 {
3884 DecorationTable* decorations = part->decorationTable;
3885 EffectInstance* effect;
3886 AuraFXData* data;
3887 f32 scale;
3888
3889 switch (decorations->state[idx]) {
3890 case 0:
3891 fx_aura(FX_AURA_BLUE, part->curPos.x, part->curPos.y, part->curPos.z, 1.2f, &decorations->effect[idx]);
3892 decorations->state[idx] = 1;
3893 decorations->decorData[idx].bowserAura.scaleX = 150;
3894 decorations->decorData[idx].bowserAura.scaleY = 150;
3895 decorations->decorData[idx].bowserAura.alpha = 255;
3896 decorations->decorData[idx].bowserAura.offsetZ = 0;
3897 // fallthrough
3898 case 1:
3899 effect = decorations->effect[idx];
3900 data = effect->data.aura;
3901 data->posA.x = part->curPos.x;
3902 data->posA.y = part->curPos.y;
3903 data->posA.z = part->curPos.z + decorations->decorData[idx].bowserAura.offsetZ;
3904
3905 scale = decorations->decorData[idx].bowserAura.scaleX;
3906 scale /= 100.0f;
3907 effect->data.aura->scale.x = scale;
3908 scale = decorations->decorData[idx].bowserAura.scaleY;
3909 scale /= 100.0f;
3910 effect->data.aura->scale.y = scale * (0.8 - 1e-16); // small epsilon
3911 effect->data.aura->primA = decorations->decorData[idx].bowserAura.alpha;
3912 effect->data.aura->renderYaw = part->yaw;
3913 break;
3914 }
3915}
DecorBowserAura bowserAura
f32 renderYaw
Definition effects.h:1013
@ FX_AURA_BLUE
Definition effects.h:988

Referenced by _add_part_decoration().

◆ add_part_decor_radiating_stars()

void add_part_decor_radiating_stars ( ActorPart * part,
s32 idx )

Definition at line 3921 of file actor_rendering.c.

3921 {
3922 DecorationTable* decorations = part->decorationTable;
3923 EnergyInOutFXData* data;
3924 f32 scale;
3925
3926 switch (decorations->state[idx]) {
3927 case 0:
3928 decorations->effect[idx] = fx_energy_in_out(4, part->curPos.x, part->curPos.y, part->curPos.z, 1.2f, 0);
3929 decorations->state[idx] = 1;
3930 decorations->decorData[idx].stars.scalePct = 120;
3931 decorations->decorData[idx].stars.offsetY = 0;
3932 // fallthrough
3933 case 1:
3934 data = decorations->effect[idx]->data.energyInOut;
3935 scale = decorations->decorData[idx].stars.scalePct;
3936 scale /= 100.0f;
3937 data->unk_44 = scale;
3938 data->pos.x = part->curPos.x;
3939 data->pos.y = (part->curPos.y + (scale * 41.0f));
3940 data->pos.z = (part->curPos.z + decorations->decorData[idx].stars.offsetY);
3941 break;
3942 }
3943}
DecorDataStars stars
struct EnergyInOutFXData * energyInOut
Definition effects.h:2571

Referenced by _add_part_decoration().

◆ render_without_adjusted_palettes()

void render_without_adjusted_palettes ( b32 arg0,
ActorPart * part,
s32 yaw,
Matrix4f mtx,
b32 skipAnimation )

Definition at line 2165 of file actor_rendering.c.

2165 {
2166 DecorationTable* decorations = part->decorationTable;
2167
2168 if (decorations->resetPalAdjust) {
2169 part->verticalStretch = 1;
2170 part->palAnimPosOffset[0] = 0;
2171 part->palAnimPosOffset[1] = 0;
2172 decorations->resetPalAdjust = false;
2173 }
2175 func_unkA_draw_player(part, yaw, mtx);
2176 } else {
2177 func_unkA_draw_npc(part, yaw, mtx);
2178 }
2179}
void func_unkA_draw_npc(ActorPart *, s32, Matrix4f)
void func_unkA_draw_player(ActorPart *, s32, Matrix4f)

Referenced by render_with_adjusted_palettes().

◆ render_with_sleep_palettes()

void render_with_sleep_palettes ( b32 arg0,
ActorPart * part,
s32 yaw,
Matrix4f mtx,
b32 skipAnimation )

Definition at line 2181 of file actor_rendering.c.

2181 {
2182 DecorationTable* decorations = part->decorationTable;
2183 s32 i, j;
2184
2185 if (decorations->resetPalAdjust) {
2187 decorations->originalPalettesList = spr_get_player_palettes(part->curAnimation >> 16);
2188 decorations->originalPalettesCount = 0;
2189 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2190 decorations->originalPalettesCount++;
2191 }
2192 } else {
2193 decorations->originalPalettesList = spr_get_npc_palettes(part->curAnimation >> 16);
2194 decorations->originalPalettesCount = 0;
2195 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2196 decorations->originalPalettesCount++;
2197 }
2198 }
2199 decorations->palAnimState = 0;
2200 decorations->resetPalAdjust = false;
2201 }
2202
2203 for (i = 0; i < decorations->originalPalettesCount; i++) {
2204 PAL_PTR palIn = decorations->originalPalettesList[i];
2205 PAL_PTR palOut = decorations->copiedPalettes[0][i];
2206 decorations->adjustedPalettes[i] = palOut;
2207 if (palIn != nullptr) {
2208 for (j = 0; j < SPR_PAL_SIZE; j++) {
2209 u8 r = UNPACK_PAL_R(*palIn);
2210 u8 g = UNPACK_PAL_G(*palIn);
2211 u8 b = UNPACK_PAL_B(*palIn);
2212 u8 a = UNPACK_PAL_A(*palIn);
2213 palIn++;
2214
2215 // make colors darker and bluer
2216 r *= 0.2;
2217 g *= 0.4;
2218 b *= 0.7;
2219
2220 *palOut++ = PACK_PAL_RGBA(r, g, b, a);
2221 }
2222 }
2223 }
2224 switch (decorations->palAnimState) {
2225 case 0:
2226 case 1:
2228 func_unkB_draw_player(part, yaw, mtx);
2229 } else {
2230 func_unkB_draw_npc(part, yaw, mtx);
2231 }
2232 break;
2233 }
2234}
#define UNPACK_PAL_B(color)
Definition macros.h:280
#define UNPACK_PAL_R(color)
Definition macros.h:278
#define UNPACK_PAL_A(color)
Definition macros.h:281
#define UNPACK_PAL_G(color)
Definition macros.h:279
#define PACK_PAL_RGBA(r, g, b, a)
Definition macros.h:283

Referenced by render_with_adjusted_palettes().

◆ render_with_static_palettes()

void render_with_static_palettes ( b32 arg0,
ActorPart * part,
s32 yaw,
Matrix4f mtx,
b32 skipAnimation )

Definition at line 2236 of file actor_rendering.c.

2236 {
2237 DecorationTable* decorations = part->decorationTable;
2238 PAL_PTR palIn;
2240 s32 i, j;
2243
2244 if (decorations->resetPalAdjust) {
2246 decorations->originalPalettesList = spr_get_player_palettes(part->curAnimation >> 16);
2247 decorations->originalPalettesCount = 0;
2248 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2249 decorations->originalPalettesCount++;
2250 }
2252 } else {
2253 decorations->originalPalettesList = spr_get_npc_palettes(part->curAnimation >> 16);
2254 decorations->originalPalettesCount = 0;
2255 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2256 decorations->originalPalettesCount++;
2257 }
2258 decorations->spriteColorVariations = spr_get_npc_color_variations(part->curAnimation >> 16);
2259 }
2260
2261 for (i = 0; i < decorations->originalPalettesCount; i++) {
2262 palIn = decorations->originalPalettesList[i];
2263 palOut = decorations->copiedPalettes[0][i];
2264 if (palIn != nullptr) {
2265 for (j = 0; j < SPR_PAL_SIZE; j++) {
2266 *palOut++ = *palIn++;
2267 }
2268 }
2269 }
2270
2271 decorations->palAnimState = -2;
2272 decorations->palBlendAlpha = 0;
2273 decorations->resetPalAdjust = false;
2274 decorations->nextPalTime = 0;
2275 }
2276
2277 if (!skipAnimation) {
2278 if (decorations->nextPalTime == 0) {
2279 decorations->palAnimState += 2;
2280 if (StaticPalettesAnim[decorations->palAnimState] == PAL_ANIM_END) {
2281 decorations->palAnimState = 0;
2282 }
2283 decorations->nextPalTime = StaticPalettesAnim[decorations->palAnimState + 1] / 2;
2284 }
2286 decorations->nextPalTime--;
2287 } else {
2289 }
2290
2291 switch (paletteType) {
2292 case STATIC_DEFAULT: // no change
2293 for (i = 0; i < decorations->spriteColorVariations; i++) {
2294 palIn = decorations->originalPalettesList[i];
2295 palOut = decorations->copiedPalettes[0][i];
2296 if (palIn != nullptr) {
2297 for (j = 0; j < SPR_PAL_SIZE; j++) {
2298 *palOut++ = *palIn++;
2299 }
2300 }
2301 }
2302 break;
2303 case STATIC_BRIGHT: // bright yellow
2304 for (i = 0; i < decorations->spriteColorVariations; i++) {
2306 palIn = decorations->originalPalettesList[staticPalIdx];
2307 palOut = decorations->copiedPalettes[0][i];
2308 if (palIn != nullptr) {
2309 for (j = 0; j < SPR_PAL_SIZE; j++) {
2310 *palOut++ = *palIn++;
2311 }
2312 }
2313 }
2314 break;
2315 case STATIC_DARK: // darkened via code
2316 for (i = 0; i < decorations->spriteColorVariations; i++) {
2317 palIn = decorations->originalPalettesList[i];
2318 palOut = decorations->copiedPalettes[0][i];
2319 if (palIn != nullptr) {
2320 for (j = 0; j < SPR_PAL_SIZE; j++) {
2321 u8 r = UNPACK_PAL_R(*palIn);
2322 u8 g = UNPACK_PAL_G(*palIn);
2323 u8 b = UNPACK_PAL_B(*palIn);
2324 u8 a = UNPACK_PAL_A(*palIn);
2325 palIn++;
2326
2327 r *= 0.1;
2328 g *= 0.1;
2329 b *= 0.1;
2330
2331 *palOut++ = PACK_PAL_RGBA(r, g, b, a);
2332 }
2333 }
2334 }
2335 break;
2336 }
2337
2338 for (i = 0; i < decorations->originalPalettesCount; i++) {
2339 decorations->adjustedPalettes[i] = decorations->copiedPalettes[0][i];
2340 }
2341
2343 func_unkB_draw_player(part, yaw, mtx);
2344 } else {
2345 func_unkB_draw_npc(part, yaw, mtx);
2346 }
2347
2348 if (!skipAnimation) {
2349 decorations->palBlendAlpha--;
2350 }
2351}
#define PAL_ANIM_END
u8 StaticPalettesAnim[]
s32 spr_get_npc_color_variations(s32 npcSpriteID)
Definition sprite.c:1306
#define SPR_PLAYER_COLOR_VARIATIONS
Definition sprite.h:6

Referenced by render_with_adjusted_palettes().

◆ render_with_fear_palettes()

void render_with_fear_palettes ( b32 arg0,
ActorPart * part,
s32 yaw,
Matrix4f mtx,
b32 skipAnimation )

Definition at line 2353 of file actor_rendering.c.

2353 {
2354 DecorationTable* decorations = part->decorationTable;
2355 PAL_PTR palIn;
2357 s32 i, j;
2358
2359 if (decorations->resetPalAdjust) {
2361 decorations->originalPalettesList = spr_get_player_palettes(part->curAnimation >> 16);
2362 decorations->originalPalettesCount = 2;
2363 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2364 decorations->originalPalettesCount++;
2365 }
2366 } else {
2367 decorations->originalPalettesList = spr_get_npc_palettes(part->curAnimation >> 16);
2368 decorations->originalPalettesCount = 0;
2369 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2370 decorations->originalPalettesCount++;
2371 }
2372 }
2373
2374 decorations->palAnimState = 0;
2375 decorations->palBlendAlpha = 0;
2376 decorations->nextPalTime = 0;
2377 decorations->resetPalAdjust = false;
2378 }
2379
2380 for (i = 0; i < decorations->originalPalettesCount; i++) {
2381 palIn = decorations->originalPalettesList[i];
2382 palOut = decorations->copiedPalettes[0][i];
2383 decorations->adjustedPalettes[i] = palOut;
2384 if (palIn != nullptr) {
2385 for (j = 0; j < SPR_PAL_SIZE; j++) {
2386 u8 r = UNPACK_PAL_R(*palIn);
2387 u8 g = UNPACK_PAL_G(*palIn);
2388 u8 b = UNPACK_PAL_B(*palIn);
2389 u8 a = UNPACK_PAL_A(*palIn);
2390 palIn++;
2391
2392 // darken the color
2393 r /= 2;
2394 g /= 2;
2395 b /= 2;
2396
2397 *palOut++ = PACK_PAL_RGBA(r, g, b, a);
2398 }
2399 }
2400 }
2401
2402 if (decorations->nextPalTime <= 0) {
2403 part->palAnimPosOffset[0] = FearPaletteAnimXOffsets[abs(decorations->nextPalTime)];
2404 if (part->palAnimPosOffset[0] == PAL_ANIM_END) {
2405 part->palAnimPosOffset[0] = 0;
2406 // 30-90
2407 decorations->nextPalTime = rand_int(60) + 30;
2408 }
2409 }
2410
2411 if (!skipAnimation) {
2412 decorations->nextPalTime--;
2413 }
2414
2416 func_unkB_draw_player(part, yaw, mtx);
2417 } else {
2418 func_unkB_draw_npc(part, yaw, mtx);
2419 }
2420}
s16 FearPaletteAnimXOffsets[]
#define rand_int

Referenced by render_with_adjusted_palettes().

◆ render_with_poison_palettes()

void render_with_poison_palettes ( b32 arg0,
ActorPart * part,
s32 yaw,
Matrix4f mtx,
b32 skipAnimation )

Definition at line 2422 of file actor_rendering.c.

2422 {
2423 DecorationTable* decorations = part->decorationTable;
2424 PAL_PTR palIn;
2426 s32 i, j;
2427
2428 if (decorations->resetPalAdjust) {
2430 decorations->originalPalettesList = spr_get_player_palettes(part->curAnimation >> 16);
2431 decorations->originalPalettesCount = 0;
2432 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2433 decorations->originalPalettesCount++;
2434 }
2436 } else {
2437 decorations->originalPalettesList = spr_get_npc_palettes(part->curAnimation >> 16);
2438 decorations->originalPalettesCount = 0;
2439 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2440 decorations->originalPalettesCount++;
2441 }
2442 decorations->spriteColorVariations = spr_get_npc_color_variations(part->curAnimation >> 16);
2443 }
2444
2445 decorations->palAnimState = 0;
2446 decorations->palBlendAlpha = 0;
2447 decorations->resetPalAdjust = false;
2448 }
2449
2450 for (i = 0; i < decorations->originalPalettesCount; i++) {
2451 palIn = decorations->originalPalettesList[i];
2452 palOut = decorations->copiedPalettes[0][i];
2453 if (palIn != nullptr) {
2454 for (j = 0; j < SPR_PAL_SIZE; j++) {
2455 *palOut++ = *palIn++;
2456 }
2457 }
2458 }
2459 for (i = 0; i < decorations->spriteColorVariations; i++) {
2460 palIn = decorations->originalPalettesList[decorations->spriteColorVariations + i];
2461 palOut = decorations->copiedPalettes[0][i];
2462 if (palIn != nullptr) {
2463 for (j = 0; j < SPR_PAL_SIZE; j++) {
2464 *palOut++ = *palIn++;
2465 }
2466 }
2467 }
2468
2469 for (i = 0; i < decorations->originalPalettesCount; i++) {
2470 decorations->adjustedPalettes[i] = decorations->copiedPalettes[0][i];
2471 }
2472
2474 func_unkB_draw_player(part, yaw, mtx);
2475 } else {
2476 func_unkB_draw_npc(part, yaw, mtx);
2477 }
2478}

Referenced by render_with_adjusted_palettes().

◆ render_with_paralyze_palettes()

void render_with_paralyze_palettes ( b32 arg0,
ActorPart * part,
s32 yaw,
Matrix4f mtx,
b32 skipAnimation )

Definition at line 2480 of file actor_rendering.c.

2480 {
2481 DecorationTable* decorations = part->decorationTable;
2482 PAL_PTR palIn;
2484 s32 i, j;
2485
2486 if (decorations->resetPalAdjust) {
2488 decorations->originalPalettesList = spr_get_player_palettes(part->curAnimation >> 16);
2489 decorations->originalPalettesCount = 0;
2490 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2491 decorations->originalPalettesCount++;
2492 }
2493 } else {
2494 decorations->originalPalettesList = spr_get_npc_palettes(part->curAnimation >> 16);
2495 decorations->originalPalettesCount = 0;
2496 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2497 decorations->originalPalettesCount++;
2498 }
2499 }
2500
2501 decorations->palAnimState = 0;
2502 decorations->nextPalTime = 0;
2503 decorations->palBlendAlpha = 10;
2504 decorations->resetPalAdjust = false;
2505 }
2506
2507 for (i = 0; i < decorations->originalPalettesCount; i++) {
2508 palIn = decorations->originalPalettesList[i];
2509 palOut = decorations->copiedPalettes[0][i];
2510 if (palIn != nullptr) {
2511 for (j = 0; j < SPR_PAL_SIZE; j++) {
2512 u8 r = UNPACK_PAL_R(*palIn);
2513 u8 g = UNPACK_PAL_G(*palIn);
2514 u8 b = UNPACK_PAL_B(*palIn);
2515 u8 a = UNPACK_PAL_A(*palIn);
2516 palIn++;
2517 r += 4;
2518 if (r > 31) {
2519 r = 31;
2520 }
2521 g += 4;
2522 if (g > 31) {
2523 g = 31;
2524 }
2525 b += 4;
2526 if (b > 31) {
2527 b = 31;
2528 }
2529
2530 *palOut++ = PACK_PAL_RGBA(r, g, b, a);
2531 }
2532 }
2533 }
2534
2535 for (i = 0; i < decorations->originalPalettesCount; i++) {
2536 decorations->adjustedPalettes[i] = decorations->copiedPalettes[0][i];
2537 }
2538
2539 switch (decorations->palAnimState) {
2540 case 0:
2541 case 1:
2542 if (decorations->nextPalTime <= 0) {
2543 part->palAnimPosOffset[1] = ParalyzePaletteAnimXOffsets[abs(decorations->nextPalTime)];
2544 if (part->palAnimPosOffset[1] == PAL_ANIM_END) {
2545 part->palAnimPosOffset[1] = 0;
2546 decorations->nextPalTime = rand_int(60) + 30; // 30-90
2547 }
2548 }
2549
2550 if (!skipAnimation) {
2551 decorations->nextPalTime--;
2552 }
2553
2554 switch (decorations->palBlendAlpha) {
2555 case 10:
2556 case 12:
2558 func_unkB_draw_player(part, yaw, mtx);
2559 } else {
2560 func_unkB_draw_npc(part, yaw, mtx);
2561 }
2562 break;
2563 case 13:
2564 decorations->palBlendAlpha = 0;
2565 // fallthrough
2566 default:
2568 func_unkA_draw_player(part, yaw, mtx);
2569 } else {
2570 func_unkA_draw_npc(part, yaw, mtx);
2571 }
2572 break;
2573 }
2574
2575 if (!skipAnimation) {
2576 decorations->palBlendAlpha++;
2577 }
2578 break;
2579 }
2580}
s16 ParalyzePaletteAnimXOffsets[]

Referenced by render_with_adjusted_palettes().

◆ render_with_berserk_palettes()

void render_with_berserk_palettes ( b32 arg0,
ActorPart * part,
s32 yaw,
Matrix4f mtx,
b32 skipAnimation )

Definition at line 2582 of file actor_rendering.c.

2582 {
2583 DecorationTable* decorations = part->decorationTable;
2584 s32 i, j;
2585
2586 if (decorations->resetPalAdjust) {
2588 decorations->originalPalettesList = spr_get_player_palettes(part->curAnimation >> 16);
2589 decorations->originalPalettesCount = 0;
2590 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2591 decorations->originalPalettesCount++;
2592 }
2593 decorations->palAnimState = 0;
2594 } else {
2595 decorations->originalPalettesList = spr_get_npc_palettes(part->curAnimation >> 16);
2596 decorations->originalPalettesCount = 0;
2597 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2598 decorations->originalPalettesCount++;
2599 }
2600 decorations->palAnimState = 0;
2601 }
2602 decorations->palBlendAlpha = 0;
2603 decorations->palAnimState = 0;
2604 decorations->resetPalAdjust = false;
2605 }
2606
2607 // adjust each palette
2608 for (i = 0; i < decorations->originalPalettesCount; i++) {
2609 PAL_PTR palIn = decorations->originalPalettesList[i];
2610 PAL_PTR palOut = decorations->copiedPalettes[0][i];
2611 if (palIn != nullptr) {
2612 for (j = 0; j < SPR_PAL_SIZE; j++) {
2613 u8 r = UNPACK_PAL_R(*palIn);
2614 u8 g = UNPACK_PAL_G(*palIn);
2615 u8 b = UNPACK_PAL_B(*palIn);
2616 u8 a = UNPACK_PAL_A(*palIn);
2617 palIn++;
2618
2619 // make each color darker and redder
2620 r *= 0.8;
2621 g *= 0.6;
2622 b *= 0.1;
2623
2624 *palOut++ = PACK_PAL_RGBA(r, g, b, a);
2625 }
2626 }
2627 }
2628
2629 for (i = 0; i < decorations->originalPalettesCount; i++) {
2630 decorations->adjustedPalettes[i] = decorations->copiedPalettes[0][i];
2631 }
2632
2634 func_unkB_draw_player(part, yaw, mtx);
2635 } else {
2636 func_unkB_draw_npc(part, yaw, mtx);
2637 }
2638}

Referenced by render_with_adjusted_palettes().

◆ render_with_watt_idle_palettes()

void render_with_watt_idle_palettes ( b32 arg0,
ActorPart * part,
s32 yaw,
Matrix4f mtx,
b32 skipAnimation )

Definition at line 2640 of file actor_rendering.c.

2640 {
2641 DecorationTable* decorations = part->decorationTable;
2642 PAL_PTR palIn;
2644 s32 i, j;
2645 s32 palIdx;
2647
2648 if (decorations->resetPalAdjust) {
2650 decorations->originalPalettesList = spr_get_player_palettes(part->curAnimation >> 16);
2651 decorations->originalPalettesCount = 0;
2652 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2653 decorations->originalPalettesCount++;
2654 }
2656 } else {
2657 decorations->originalPalettesList = spr_get_npc_palettes(part->curAnimation >> 16);
2658 decorations->originalPalettesCount = 0;
2659 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2660 decorations->originalPalettesCount++;
2661 }
2662 decorations->spriteColorVariations = spr_get_npc_color_variations(part->curAnimation >> 16);
2663 }
2664
2665 for (i = 0; i < decorations->originalPalettesCount; i++) {
2666 palIn = decorations->originalPalettesList[i];
2667 palOut = decorations->copiedPalettes[0][i];
2668 if (palIn != nullptr) {
2669 for (j = 0; j < SPR_PAL_SIZE; j++) {
2670 *palOut++ = *palIn++;
2671 }
2672 }
2673 }
2674
2675 decorations->palAnimState = -2;
2676 decorations->palBlendAlpha = 0;
2677 decorations->resetPalAdjust = false;
2678 decorations->nextPalTime = 0;
2679 }
2680
2681 if (!skipAnimation) {
2682 if (decorations->nextPalTime == 0) {
2683 decorations->palAnimState += 2;
2684 if (bWattIdlePalettesAnim[decorations->palAnimState] == PAL_ANIM_END) {
2685 decorations->palAnimState = 0;
2686 }
2687 decorations->nextPalTime = bWattIdlePalettesAnim[decorations->palAnimState + 1] / 2;
2688 }
2690 decorations->nextPalTime--;
2691 } else {
2692 //@bug if only called with skipAnimation set, palAnimPos will always be -2 and the array access is OOB
2694 }
2695
2696 switch (brightnessLevel) {
2697 case WATT_DEFAULT:
2698 for (i = 0; i < decorations->spriteColorVariations; i++) {
2699 // use watt's base palettes
2700 palIn = decorations->originalPalettesList[i];
2701 palOut = decorations->copiedPalettes[0][i];
2702 if (palIn != nullptr) {
2703 for (j = 0; j < SPR_PAL_SIZE; j++) {
2704 *palOut++ = *palIn++;
2705 }
2706 }
2707 }
2708 break;
2709 case WATT_BRIGHTEST:
2710 for (i = 0; i < decorations->spriteColorVariations; i++) {
2711 // use watt's Brightest palettes
2713 palIn = decorations->originalPalettesList[palIdx];
2714 palOut = decorations->copiedPalettes[0][i];
2715 if (palIn != nullptr) {
2716 for (j = 0; j < SPR_PAL_SIZE; j++) {
2717 *palOut++ = *palIn++;
2718 }
2719 }
2720 }
2721 break;
2722 case WATT_BRIGHTER:
2723 for (i = 0; i < decorations->spriteColorVariations; i++) {
2724 // use watt's Brighter palettes
2726 palIn = decorations->originalPalettesList[palIdx];
2727 palOut = decorations->copiedPalettes[0][i];
2728 if (palIn != nullptr) {
2729 for (j = 0; j < SPR_PAL_SIZE; j++) {
2730 *palOut++ = *palIn++;
2731 }
2732 }
2733 }
2734 break;
2735 }
2736
2737 for (i = 0; i < decorations->originalPalettesCount; i++) {
2738 decorations->adjustedPalettes[i] = decorations->copiedPalettes[0][i];
2739 }
2740
2742 func_unkB_draw_player(part, yaw, mtx);
2743 } else {
2744 func_unkB_draw_npc(part, yaw, mtx);
2745 }
2746
2747 if (!skipAnimation) {
2748 decorations->palBlendAlpha--;
2749 }
2750}
u8 bWattIdlePalettesAnim[]

Referenced by render_with_adjusted_palettes().

◆ render_with_watt_attack_palettes()

void render_with_watt_attack_palettes ( b32 arg0,
ActorPart * part,
s32 yaw,
Matrix4f mtx,
b32 skipAnimation )

Definition at line 2752 of file actor_rendering.c.

2752 {
2753 DecorationTable* decorations = part->decorationTable;
2754 PAL_PTR palIn;
2756 s32 i, j;
2757 s32 palIdx;
2758 s32 brightness;
2759
2760 if (decorations->resetPalAdjust) {
2762 decorations->originalPalettesList = spr_get_player_palettes(part->curAnimation >> 16);
2763 decorations->originalPalettesCount = 0;
2764 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2765 decorations->originalPalettesCount++;
2766 }
2768 } else {
2769 decorations->originalPalettesList = spr_get_npc_palettes(part->curAnimation >> 16);
2770 decorations->originalPalettesCount = 0;
2771 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2772 decorations->originalPalettesCount++;
2773 }
2774 decorations->spriteColorVariations = spr_get_npc_color_variations(part->curAnimation >> 16);
2775 }
2776
2777 for (i = 0; i < decorations->originalPalettesCount; i++) {
2778 palIn = decorations->originalPalettesList[i];
2779 palOut = decorations->copiedPalettes[0][i];
2780 if (palIn != nullptr) {
2781 for (j = 0; j < SPR_PAL_SIZE; j++) {
2782 *palOut++ = *palIn++;
2783 }
2784 }
2785 }
2786
2787 decorations->palAnimState = -2;
2788 decorations->palBlendAlpha = 0;
2789 decorations->resetPalAdjust = false;
2790 decorations->nextPalTime = 0;
2791 }
2792
2793 if (!skipAnimation) {
2794 if (decorations->nextPalTime == 0) {
2795 decorations->palAnimState += 2;
2796 if (WattAttackPalettesAnim[decorations->palAnimState] == PAL_ANIM_END) {
2797 decorations->palAnimState = 0;
2798 }
2799 decorations->nextPalTime = WattAttackPalettesAnim[decorations->palAnimState + 1] / 2;
2800 }
2801 brightness = WattAttackPalettesAnim[decorations->palAnimState];
2802 decorations->nextPalTime--;
2803 } else {
2804 //@bug if only called with skipAnimation set, palAnimPos will always be -2 and the array access is OOB
2805 brightness = WattAttackPalettesAnim[decorations->palAnimState];
2806 }
2807
2808 switch (brightness) {
2809 case WATT_DEFAULT:
2810 for (i = 0; i < decorations->spriteColorVariations; i++) {
2811 palIn = decorations->originalPalettesList[i];
2812 palOut = decorations->copiedPalettes[0][i];
2813 if (palIn != nullptr) {
2814 for (j = 0; j < SPR_PAL_SIZE; j++) {
2815 *palOut++ = *palIn++;
2816 }
2817 }
2818 }
2819 break;
2820 case WATT_BRIGHTEST:
2821 for (i = 0; i < decorations->spriteColorVariations; i++) {
2822 // use watt's Brightest palettes
2824 palIn = decorations->originalPalettesList[palIdx];
2825 palOut = decorations->copiedPalettes[0][i];
2826 if (palIn != nullptr) {
2827 for (j = 0; j < SPR_PAL_SIZE; j++) {
2828 *palOut++ = *palIn++;
2829 }
2830 }
2831 }
2832 break;
2833 case WATT_BRIGHTER:
2834 for (i = 0; i < decorations->spriteColorVariations; i++) {
2835 // use watt's Brighter palettes
2837 palIn = decorations->originalPalettesList[palIdx];
2838 palOut = decorations->copiedPalettes[0][i];
2839 if (palIn != nullptr) {
2840 for (j = 0; j < SPR_PAL_SIZE; j++) {
2841 *palOut++ = *palIn++;
2842 }
2843 }
2844 }
2845 break;
2846 }
2847
2848 for (i = 0; i < decorations->originalPalettesCount; i++) {
2849 decorations->adjustedPalettes[i] = decorations->copiedPalettes[0][i];
2850 }
2851
2853 func_unkB_draw_player(part, yaw, mtx);
2854 } else {
2855 func_unkB_draw_npc(part, yaw, mtx);
2856 }
2857
2858 if (!skipAnimation) {
2859 decorations->palBlendAlpha--;
2860 }
2861}
u8 WattAttackPalettesAnim[]

Referenced by render_with_adjusted_palettes().

◆ render_with_player_debuff_palettes()

void render_with_player_debuff_palettes ( b32 arg0,
ActorPart * part,
s32 yaw,
Matrix4f mtx,
b32 skipAnimation,
s32 isPoison )

Definition at line 2863 of file actor_rendering.c.

2863 {
2864 DecorationTable* decorations = part->decorationTable;
2865 PAL_PTR color2;
2866 PAL_PTR color1;
2868 s32 i, j;
2869 u8 blendAlpha;
2870
2871 if (decorations->resetPalAdjust) {
2873 decorations->originalPalettesList = spr_get_player_palettes(part->curAnimation >> 16);
2874 decorations->originalPalettesCount = 0;
2875 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2876 decorations->originalPalettesCount++;
2877 }
2878
2881 } else {
2883 }
2884 } else {
2885 decorations->originalPalettesList = spr_get_npc_palettes(part->curAnimation >> 16);
2886 decorations->originalPalettesCount = 0;
2887 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
2888 decorations->originalPalettesCount++;
2889 }
2890 decorations->spriteColorVariations = spr_get_npc_color_variations(part->curAnimation >> 16);
2891 }
2892
2893 if (decorations->resetPalAdjust == true) {
2894 decorations->palAnimState = 0;
2895 decorations->palBlendAlpha = 0;
2896 } else {
2897 decorations->palAnimState = 0;
2898 decorations->palBlendAlpha = 255;
2899 }
2900
2901 for (i = 0; i < decorations->originalPalettesCount; i++) {
2902 color2 = decorations->originalPalettesList[i];
2903 color1 = decorations->copiedPalettes[0][i];
2904 decorations->adjustedPalettes[i] = color1;
2905 if (color2 != nullptr) {
2906 for (j = 0; j < SPR_PAL_SIZE; j++) {
2907 *color1++ = *color2++;
2908 }
2909 }
2910 }
2911
2912 if (isPoison) {
2913 for (i = 0; i < decorations->spriteColorVariations; i++) {
2914 color2 = decorations->originalPalettesList[decorations->spriteColorVariations + i];
2915 palOut = decorations->copiedPalettes[0][i];
2916 for (j = 0; j < SPR_PAL_SIZE; j++) {
2917 *palOut++ = *color2++;
2918 }
2919 }
2920 }
2921
2922 decorations->nextPalTime = 10;
2923 decorations->palBlendAlpha = 0;
2924 decorations->palAnimState = 0;
2925 decorations->resetPalAdjust = false;
2926 }
2927
2928 if (decorations->palAnimState == 0) {
2929 if (!skipAnimation && decorations->nextPalTime != 0) {
2930 decorations->nextPalTime--;
2931 } else {
2932 if (!skipAnimation) {
2933 decorations->palBlendAlpha += 2560;
2934 if (decorations->palBlendAlpha > 255 * 100) {
2935 decorations->palBlendAlpha = 255 * 100;
2936 }
2937 }
2938 blendAlpha = decorations->palBlendAlpha / 100;
2939 for (i = 0; i < decorations->spriteColorVariations; i++) {
2940 if (!isPoison) {
2941 color2 = decorations->originalPalettesList[i];
2942 } else {
2943 color2 = decorations->originalPalettesList[decorations->spriteColorVariations * STANDARD_PAL_POISON + i];
2944 }
2945 color1 = decorations->originalPalettesList[decorations->spriteColorVariations * STANDARD_PAL_DIZZY + i];
2946 palOut = decorations->copiedPalettes[0][i];
2947
2948 for (j = 0; j < SPR_PAL_SIZE; j++) {
2949 u8 r2 = UNPACK_PAL_R(*color2);
2950 u8 g2 = UNPACK_PAL_G(*color2);
2951 u8 b2 = UNPACK_PAL_B(*color2);
2952 u8 r1 = UNPACK_PAL_R(*color1);
2953 u8 g1 = UNPACK_PAL_G(*color1);
2954 u8 b1 = UNPACK_PAL_B(*color1);
2955 u8 a1 = UNPACK_PAL_A(*color1);
2956 color2++;
2957 color1++;
2958
2962
2963 *palOut++ = PACK_PAL_RGBA(r1, g1, b1, a1);
2964 }
2965 }
2966 if (blendAlpha == 255) {
2967 decorations->palAnimState = 1;
2968 }
2969 }
2970 }
2971
2972 for (i = 0; i < decorations->originalPalettesCount; i++) {
2973 decorations->adjustedPalettes[i] = decorations->copiedPalettes[0][i];
2974 }
2975
2976 switch (decorations->palAnimState) {
2977 case 0:
2978 case 1:
2980 func_unkB_draw_player(part, yaw, mtx);
2981 } else {
2982 func_unkB_draw_npc(part, yaw, mtx);
2983 }
2984 break;
2985 }
2986}
#define LERP_COMPONENT(a, b, alpha)
@ BS_FLAGS2_PEACH_BATTLE
Definition enums.h:3643
#define SPR_PEACH_BTL_PAL_STRIDE
Definition sprite.h:7

Referenced by render_with_adjusted_palettes().

◆ render_with_pal_blending()

void render_with_pal_blending ( b32 arg0,
ActorPart * part,
s32 yaw,
s32 arg3,
Matrix4f mtx,
s32 skipAnimation )

Definition at line 2988 of file actor_rendering.c.

2988 {
2989 DecorationTable* decorations = part->decorationTable;
2990 PAL_PTR color1;
2991 PAL_PTR color2;
2993 s32 i, j;
2994 u8 blendAlpha;
2995 u8 r2, g2, b2, a1;
2996 u8 r1, g1, b1;
2997
2998 if (decorations->resetPalAdjust != 0) {
3000 decorations->originalPalettesList = spr_get_player_palettes(part->curAnimation >> 16);
3001 decorations->originalPalettesCount = 0;
3002 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
3003 decorations->originalPalettesCount++;
3004 }
3005 } else {
3006 decorations->originalPalettesList = spr_get_npc_palettes(part->curAnimation >> 16);
3007 decorations->originalPalettesCount = 0;
3008 while ((s32)decorations->originalPalettesList[decorations->originalPalettesCount] != -1) {
3009 decorations->originalPalettesCount++;
3010 }
3011 }
3012
3013 if (decorations->resetPalAdjust == 1) {
3014 decorations->palAnimState = 0;
3015 decorations->palBlendAlpha = 0;
3016 } else {
3017 decorations->palAnimState = 0;
3018 decorations->palBlendAlpha = 255;
3019 }
3020
3021 for (i = 0; i < decorations->originalPalettesCount; i++) {
3022 color2 = decorations->originalPalettesList[i];
3023 color1 = decorations->copiedPalettes[0][i];
3024 decorations->adjustedPalettes[i] = color1;
3025 if (color2 != nullptr) {
3026 for (j = 0; j < SPR_PAL_SIZE; j++) {
3027 *color1++ = *color2++;
3028 }
3029 }
3030 }
3031
3032 if (!hasDifferentIntervals) {
3033 decorations->palswapTimeAtoB = decorations->palswapTimeHoldA;
3034 decorations->palswapTimeHoldB = decorations->palswapTimeAtoB;
3035 decorations->palswapTimeBtoA = decorations->palswapTimeAtoB;
3036 decorations->palswapTimeHoldA = 0;
3037 }
3038
3039 decorations->nextPalTime = decorations->palswapTimeHoldA;
3040 decorations->palBlendAlpha = 0;
3041 decorations->palAnimState = PAL_SWAP_HOLD_A;
3042 decorations->resetPalAdjust = false;
3043 }
3044
3045 // blending from A -> B
3046 switch (decorations->palAnimState) {
3047 case PAL_SWAP_HOLD_A:
3048 if (skipAnimation) {
3049 break;
3050 }
3051 if (decorations->nextPalTime != 0) {
3052 decorations->nextPalTime--;
3053 break;
3054 }
3055 decorations->palBlendAlpha = 0;
3056 decorations->palAnimState = PAL_SWAP_A_TO_B;
3057 // fallthrough
3058 case PAL_SWAP_A_TO_B:
3059 if (!skipAnimation) {
3060 decorations->palBlendAlpha += 25600 / decorations->palswapTimeAtoB;
3061 if (decorations->palBlendAlpha > 255 * 100) {
3062 decorations->palBlendAlpha = 255 * 100;
3063 }
3064 }
3065 blendAlpha = decorations->palBlendAlpha / 100;
3066 // blend two palettes
3067 color2 = decorations->originalPalettesList[decorations->blendPalA];
3068 color1 = decorations->originalPalettesList[decorations->blendPalB];
3069 outColor = decorations->adjustedPalettes[0] = decorations->copiedPalettes[0][0];
3070
3071 for (j = 0; j < SPR_PAL_SIZE; j++) {
3072 r2 = UNPACK_PAL_R(*color2);
3073 g2 = UNPACK_PAL_G(*color2);
3074 b2 = UNPACK_PAL_B(*color2);
3075 r1 = UNPACK_PAL_R(*color1);
3076 g1 = UNPACK_PAL_G(*color1);
3077 b1 = UNPACK_PAL_B(*color1);
3078 a1 = UNPACK_PAL_A(*color1);
3079 color2++;
3080 color1++;
3081
3085
3086 *outColor++ = PACK_PAL_RGBA(r1, g1, b1, a1);
3087 }
3088
3089 if (blendAlpha == 255) {
3090 decorations->palAnimState = PAL_SWAP_HOLD_B;
3091 decorations->nextPalTime = decorations->palswapTimeHoldB;
3092 }
3093 break;
3094 }
3095
3096 // blending from B -> A
3097 switch (decorations->palAnimState) {
3098 case PAL_SWAP_HOLD_B:
3099 if (skipAnimation) {
3100 break;
3101 }
3102 if (decorations->nextPalTime != 0) {
3103 decorations->nextPalTime--;
3104 break;
3105 }
3106 decorations->palBlendAlpha = 0;
3107 decorations->palAnimState = PAL_SWAP_B_TO_A;
3108 // fallthrough
3109 case PAL_SWAP_B_TO_A:
3110 if (!skipAnimation) {
3111 decorations->palBlendAlpha += 25600 / decorations->palswapTimeBtoA;
3112 if (decorations->palBlendAlpha > 255 * 100) {
3113 decorations->palBlendAlpha = 255 * 100;
3114 }
3115 }
3116 blendAlpha = decorations->palBlendAlpha / 100;
3117 // blend two palettes
3118 color2 = decorations->originalPalettesList[decorations->blendPalB];
3119 color1 = decorations->originalPalettesList[decorations->blendPalA];
3120 outColor = decorations->copiedPalettes[0][0];
3121 decorations->adjustedPalettes[0] = outColor;
3122
3123 for (j = 0; j < SPR_PAL_SIZE; j++) {
3124 r2 = UNPACK_PAL_R(*color2);
3125 g2 = UNPACK_PAL_G(*color2);
3126 b2 = UNPACK_PAL_B(*color2);
3127 r1 = UNPACK_PAL_R(*color1);
3128 g1 = UNPACK_PAL_G(*color1);
3129 b1 = UNPACK_PAL_B(*color1);
3130 a1 = UNPACK_PAL_A(*color1);
3131 color2++;
3132 color1++;
3133
3137
3138 *outColor++ = PACK_PAL_RGBA(r1, g1, b1, a1);
3139 }
3140 if (blendAlpha == 255) {
3141 decorations->palAnimState = PAL_SWAP_HOLD_A;
3142 decorations->nextPalTime = decorations->palswapTimeHoldA;
3143 }
3144 break;
3145 }
3146
3147 switch (decorations->palAnimState) {
3148 case PAL_SWAP_HOLD_A:
3149 case PAL_SWAP_A_TO_B:
3150 case PAL_SWAP_HOLD_B:
3151 case PAL_SWAP_B_TO_A:
3153 func_unkB_draw_player(part, yaw, mtx);
3154 } else {
3155 func_unkB_draw_npc(part, yaw, mtx);
3156 }
3157 break;
3158 }
3159}

Referenced by render_with_adjusted_palettes().

◆ render_with_palset_blending()

void render_with_palset_blending ( b32 arg0,
ActorPart * part,
s32 yaw,
Matrix4f mtx,
b32 skipAnimation )

Definition at line 3161 of file actor_rendering.c.

3161 {
3162 DecorationTable* decorations = part->decorationTable;
3163 PAL_PTR color1;
3164 PAL_PTR color2;
3166 s32 i, j;
3167 u8 blendAlpha;
3168 u8 r2, g2, b2, a1;
3169 u8 r1, g1, b1;
3170
3171 // copy palettes from sprite data
3172 if (decorations->resetPalAdjust != 0) {
3174 decorations->originalPalettesList = spr_get_player_palettes(part->curAnimation >> 16);
3175 decorations->originalPalettesCount = 0;
3176 while (decorations->originalPalettesList[decorations->originalPalettesCount] != (PAL_PTR) -1) {
3177 decorations->originalPalettesCount++;
3178 }
3179 } else {
3180 decorations->originalPalettesList = spr_get_npc_palettes(part->curAnimation >> 16);
3181 decorations->originalPalettesCount = 0;
3182 while (decorations->originalPalettesList[decorations->originalPalettesCount] != (PAL_PTR) -1) {
3183 decorations->originalPalettesCount++;
3184 }
3185 decorations->spriteColorVariations = spr_get_npc_color_variations(part->curAnimation >> 16);
3186 }
3187
3188 if (decorations->resetPalAdjust == 1) {
3189 decorations->palAnimState = PAL_SWAP_HOLD_A;
3190 decorations->palBlendAlpha = 0;
3191 } else {
3192 decorations->palAnimState = PAL_SWAP_HOLD_A;
3193 decorations->palBlendAlpha = 255;
3194 }
3195
3196 for (i = 0; i < decorations->originalPalettesCount; i++) {
3197 color2 = decorations->originalPalettesList[i];
3198 color1 = decorations->copiedPalettes[0][i];
3199 decorations->adjustedPalettes[i] = color1;
3200 if (color2 != nullptr) {
3201 for (j = 0; j < SPR_PAL_SIZE; j++) {
3202 *color1++ = *color2++;
3203 }
3204 }
3205 }
3206
3207 decorations->nextPalTime = decorations->palswapTimeHoldA;
3208 decorations->palBlendAlpha = 0;
3209 decorations->palAnimState = PAL_SWAP_HOLD_A;
3210 decorations->resetPalAdjust = false;
3211 }
3212
3213 // blending from A -> B
3214 switch (decorations->palAnimState) {
3215 case PAL_SWAP_HOLD_A:
3216 if (skipAnimation) {
3217 break;
3218 }
3219 if (decorations->nextPalTime != 0) {
3220 decorations->nextPalTime--;
3221 break;
3222 }
3223 decorations->palBlendAlpha = 0;
3224 decorations->palAnimState = PAL_SWAP_A_TO_B;
3225 // fallthrough
3226 case PAL_SWAP_A_TO_B:
3227 if (!skipAnimation) {
3228 decorations->palBlendAlpha += 25600 / decorations->palswapTimeAtoB;
3229 if (decorations->palBlendAlpha > 255 * 100) {
3230 decorations->palBlendAlpha = 255 * 100;
3231 }
3232 }
3233 blendAlpha = decorations->palBlendAlpha / 100;
3234 // blend all palettes from two palette sets
3235 for (i = 0; i < decorations->spriteColorVariations; i++) {
3236 color2 = decorations->originalPalettesList[decorations->blendPalA * decorations->spriteColorVariations + i];
3237 color1 = decorations->originalPalettesList[decorations->blendPalB * decorations->spriteColorVariations + i];
3238 outColor = decorations->copiedPalettes[0][i];
3239 decorations->adjustedPalettes[i] = outColor;
3240
3241 for (j = 0; j < SPR_PAL_SIZE; j++) {
3242 r2 = UNPACK_PAL_R(*color2);
3243 g2 = UNPACK_PAL_G(*color2);
3244 b2 = UNPACK_PAL_B(*color2);
3245 r1 = UNPACK_PAL_R(*color1);
3246 g1 = UNPACK_PAL_G(*color1);
3247 b1 = UNPACK_PAL_B(*color1);
3248 a1 = UNPACK_PAL_A(*color1);
3249 color2++;
3250 color1++;
3251
3255
3256 *outColor++ = PACK_PAL_RGBA(r1, g1, b1, a1);
3257 }
3258 }
3259 if (blendAlpha == 255) {
3260 decorations->palAnimState = PAL_SWAP_HOLD_B;
3261 decorations->nextPalTime = decorations->palswapTimeHoldB;
3262 }
3263 break;
3264 }
3265
3266 switch (decorations->palAnimState) {
3267 case PAL_SWAP_HOLD_B:
3268 if (skipAnimation) {
3269 break;
3270 }
3271 if (decorations->nextPalTime != 0) {
3272 decorations->nextPalTime--;
3273 break;
3274 }
3275 decorations->palBlendAlpha = 0;
3276 decorations->palAnimState = PAL_SWAP_B_TO_A;
3277 // fallthrough
3278 case PAL_SWAP_B_TO_A:
3279 if (!skipAnimation) {
3280 decorations->palBlendAlpha += 25600 / decorations->palswapTimeBtoA;
3281 if (decorations->palBlendAlpha > 255 * 100) {
3282 decorations->palBlendAlpha = 255 * 100;
3283 }
3284 }
3285 blendAlpha = decorations->palBlendAlpha / 100;
3286 // blend all palettes from two palette sets
3287 for (i = 0; i < decorations->spriteColorVariations; i++) {
3288 color2 = decorations->originalPalettesList[decorations->blendPalA * decorations->spriteColorVariations + i];
3289 color1 = decorations->originalPalettesList[decorations->blendPalB * decorations->spriteColorVariations + i];
3290 outColor = decorations->copiedPalettes[0][i];
3291 decorations->adjustedPalettes[i] = outColor;
3292
3293 for (j = 0; j < SPR_PAL_SIZE; j++) {
3294 r2 = UNPACK_PAL_R(*color2);
3295 g2 = UNPACK_PAL_G(*color2);
3296 b2 = UNPACK_PAL_B(*color2);
3297 r1 = UNPACK_PAL_R(*color1);
3298 g1 = UNPACK_PAL_G(*color1);
3299 b1 = UNPACK_PAL_B(*color1);
3300 a1 = UNPACK_PAL_A(*color1);
3301 color2++;
3302 color1++;
3303
3307
3308 *outColor++ = PACK_PAL_RGBA(r1, g1, b1, a1);
3309 }
3310 }
3311 if (blendAlpha == 255) {
3312 decorations->palAnimState = PAL_SWAP_HOLD_A;
3313 decorations->nextPalTime = decorations->palswapTimeHoldA;
3314 }
3315 break;
3316 }
3317
3318 switch (decorations->palAnimState) {
3319 case PAL_SWAP_HOLD_A:
3320 case PAL_SWAP_A_TO_B:
3321 case PAL_SWAP_HOLD_B:
3322 case PAL_SWAP_B_TO_A:
3324 func_unkB_draw_player(part, yaw, mtx);
3325 } else {
3326 func_unkB_draw_npc(part, yaw, mtx);
3327 }
3328 break;
3329 }
3330}

Referenced by render_with_adjusted_palettes().

◆ update_part_glow()

s32 update_part_glow ( b32 isNpcSprite,
ActorPart * part,
s32 yaw,
b32 isReflection )

Definition at line 3332 of file actor_rendering.c.

3332 {
3333 if (!(part->flags & ACTOR_PART_FLAG_NO_DECORATIONS)) {
3334 switch (part->decorationTable->glowState) {
3335 case GLOW_PAL_OFF:
3337 return 0;
3338 case GLOW_PAL_ON:
3340 break;
3341 }
3342 }
3343 return 0;
3344}
void part_glow_on(b32 arg0, ActorPart *part, s32 yaw, b32 arg3)
void part_glow_off(b32 isNpcSprite, ActorPart *part, s32 yaw, b32 isReflection)

Referenced by appendGfx_npc_actor(), appendGfx_npc_actor_reflection(), appendGfx_player_actor(), and appendGfx_player_actor_reflection().

◆ update_part_flash()

s32 update_part_flash ( b32 isNpcSprite,
ActorPart * part,
s32 yaw,
b32 isReflection )

Definition at line 3412 of file actor_rendering.c.

3412 {
3413 if (!(part->flags & ACTOR_PART_FLAG_NO_DECORATIONS)) {
3414 switch (part->decorationTable->flashState) {
3415 case 0:
3417 return 0;
3418 case 1:
3420 return 0;
3421 }
3422 }
3423 return 0;
3424}
void part_flash_off(b32 isNpcSprite, ActorPart *part, s32 yaw, b32 isReflection)
void part_flash_on(b32 arg0, ActorPart *part, s32 yaw, b32 arg3)

Referenced by appendGfx_npc_actor(), appendGfx_npc_actor_reflection(), appendGfx_player_actor(), and appendGfx_player_actor_reflection().

◆ get_player_anim_for_status()

s32 get_player_anim_for_status ( s32 animID)

Definition at line 1695 of file 190B20.c.

1695 {
1698 Actor* player = battleStatus->playerActor;
1699 u32* anim = &player->partsTable->idleAnimations[0];
1700 s32 ret;
1701
1702 if (anim == nullptr) {
1703 return 0;
1704 }
1705 ret = 0;
1706
1707 if (!(battleStatus->flags2 & BS_FLAGS2_PEACH_BATTLE)) {
1708 // switch to danger override animations
1709 if (playerData->curHP <= DANGER_THRESHOLD) {
1712 }
1715 }
1718 }
1719 }
1720
1721 // switch to poisoned override animations
1722 if (player->debuff == STATUS_KEY_POISON) {
1725 }
1728 }
1731 }
1732 }
1733
1734 // switch to dizzy override animations
1735 if (player->debuff == STATUS_KEY_DIZZY) {
1738 }
1739 }
1740 }
1741
1742 // search IdleAnimations to get animID for key
1743 while (*anim != nullptr) {
1744 if (*anim == STATUS_KEY_NORMAL) {
1745 ret = anim[1];
1746 }
1747 if (*anim == statusKey) {
1748 ret = anim[1];
1749 break;
1750 }
1751 anim += 2;
1752 }
1753
1754 return ret;
1755}
u32 * idleAnimations
@ STATUS_KEY_INACTIVE_DIZZY
Definition enums.h:2825
@ STATUS_KEY_THINKING
Definition enums.h:2829
@ STATUS_KEY_WEARY
Definition enums.h:2830
@ STATUS_KEY_INACTIVE_WEARY
Definition enums.h:2823
@ STATUS_KEY_DANGER
Definition enums.h:2827
#define DANGER_THRESHOLD
Definition battle.h:276

Referenced by appendGfx_player_actor().

◆ clear_part_flash_mode()

void clear_part_flash_mode ( ActorPart * part)

Definition at line 2438 of file 190B20.c.

2438 {
2439 if (part->idleAnimations != nullptr && !(part->flags & ACTOR_PART_FLAG_NO_DECORATIONS)) {
2440 part->decorationTable->flashState = 0;
2441 }
2442}

Referenced by part_flash_on().

◆ get_flash_damage_intensity()

s32 get_flash_damage_intensity ( ActorPart * part)

Definition at line 165 of file actor_rendering.c.

165 {
166 s32 ret;
167
170 } else if (gBattleStatus.lastAttackDamage < 5) {
172 } else if (gBattleStatus.lastAttackDamage < 9) {
174 } else {
176 }
177
178 return ret;
179}
@ DAMAGE_INTENSITY_EXTREME
Definition enums.h:3543

Referenced by part_flash_on().

◆ mtx_mirror_y()

void mtx_mirror_y ( Matrix4f mtx)

Definition at line 181 of file actor_rendering.c.

181 {
182 guMtxIdentF(mtx);
183 mtx[0][0] = 1.0f;
184 mtx[1][1] = -1.0f;
185 mtx[2][2] = 1.0f;
186 mtx[3][3] = 1.0f;
187}

Referenced by appendGfx_npc_actor_reflection(), and appendGfx_player_actor_reflection().

◆ enable_actor_blur()

void enable_actor_blur ( Actor * actor)

Definition at line 189 of file actor_rendering.c.

189 {
190 ActorPart* partsTable = actor->partsTable;
191 DecorationTable* decorations = partsTable->decorationTable;
192 s32 i, j;
193 s32 numParts;
194
195 decorations->blurDisableDelay = 0;
196 decorations->blurEnableCount++;
198 partsTable = actor->partsTable;
199 numParts = actor->numParts;
200
201 for (i = 0; i < numParts; i++) {
202 if (partsTable->idleAnimations != nullptr && !(partsTable->flags & ACTOR_PART_FLAG_NO_DECORATIONS)) {
203 decorations = partsTable->decorationTable;
204 decorations->blurUnused = 0;
205 decorations->blurBufferPos = 0;
206 for (j = 0; j < ARRAY_COUNT(decorations->posX); j++) {
207 decorations->posX[j] = partsTable->curPos.x;
208 decorations->posY[j] = partsTable->curPos.y;
209 decorations->posZ[j] = partsTable->curPos.z;
210 decorations->yaw[j] = actor->yaw;
211 decorations->rotPivotOffsetX[j] = (s32)(actor->rotPivotOffset.x * actor->scalingFactor);
212 decorations->rotPivotOffsetY[j] = (s32)(actor->rotPivotOffset.y * actor->scalingFactor);
213
214 decorations->rotX[j] = clamp_angle(actor->rot.x) * 0.5f;
215 decorations->rotY[j] = clamp_angle(actor->rot.y) * 0.5f;
216 decorations->rotZ[j] = clamp_angle(actor->rot.z) * 0.5f;
217 }
218 }
219 partsTable = partsTable->nextPart;
220 }
221}
struct ActorPart * nextPart
struct DecorationTable * decorationTable

Referenced by enable_partner_blur().

◆ disable_actor_blur()

void disable_actor_blur ( Actor * actor)

Definition at line 223 of file actor_rendering.c.

223 {
225
226 if ((actorPart->idleAnimations != nullptr) && !(actorPart->flags & ACTOR_PART_FLAG_NO_DECORATIONS)) {
227 DecorationTable* decorations = actorPart->decorationTable;
228
229 if (decorations->blurEnableCount != 0) {
230 decorations->blurEnableCount--;
231 if (decorations->blurEnableCount == 0) {
232 decorations->blurDisableDelay = 20;
233 }
234 }
235 }
236}

Referenced by disable_partner_blur().

◆ reset_actor_blur()

void reset_actor_blur ( Actor * actor)

Definition at line 238 of file actor_rendering.c.

238 {
240
241 if ((actorPart->idleAnimations != nullptr) && !(actorPart->flags & ACTOR_PART_FLAG_NO_DECORATIONS)) {
242 DecorationTable* decorations = actorPart->decorationTable;
243
244 if (decorations->blurEnableCount != 0) {
245 decorations->blurEnableCount--;
246 if (decorations->blurEnableCount == 0) {
248 decorations->blurDisableDelay = 1;
249 }
250 }
251 }
252}

Referenced by reset_partner_blur().

◆ force_disable_actor_blur()

void force_disable_actor_blur ( Actor * actor)

Definition at line 254 of file actor_rendering.c.

254 {
256
257 if (actorPart->idleAnimations != nullptr && !(actorPart->flags & ACTOR_PART_FLAG_NO_DECORATIONS)) {
258 DecorationTable* decorations = actorPart->decorationTable;
259
260 decorations->blurEnableCount = 0;
261 decorations->blurDisableDelay = 20;
262 }
263}

Referenced by force_disable_partner_blur().

◆ enable_partner_blur()

void enable_partner_blur ( void )

Definition at line 265 of file actor_rendering.c.

265 {
267}
void enable_actor_blur(Actor *actor)
struct Actor * partnerActor

◆ disable_partner_blur()

void disable_partner_blur ( void )

Definition at line 269 of file actor_rendering.c.

269 {
271}
void disable_actor_blur(Actor *actor)

◆ reset_partner_blur()

void reset_partner_blur ( void )

Definition at line 273 of file actor_rendering.c.

273 {
275}
void reset_actor_blur(Actor *actor)

◆ force_disable_partner_blur()

void force_disable_partner_blur ( void )

Definition at line 277 of file actor_rendering.c.

277 {
279}
void force_disable_actor_blur(Actor *actor)

◆ enable_player_blur()

void enable_player_blur ( void )

Definition at line 281 of file actor_rendering.c.

281 {
282 Actor* playerActor = gBattleStatus.playerActor;
283 ActorPart* partsTable = playerActor->partsTable;
284 DecorationTable* decorations = partsTable->decorationTable;
285 s32 i;
286
287 decorations->blurDisableDelay = 0;
288 decorations->blurEnableCount++;
289 playerActor->flags |= ACTOR_FLAG_BLUR_ENABLED;
290 decorations->blurUnused = 0;
291 decorations->blurBufferPos = 0;
292
293 for (i = 0; i < ARRAY_COUNT(decorations->posX); i++) {
294 decorations->posX[i] = partsTable->curPos.x;
295 decorations->posY[i] = partsTable->curPos.y;
296 decorations->posZ[i] = partsTable->curPos.z;
297 decorations->yaw[i] = playerActor->yaw;
298 decorations->rotPivotOffsetX[i] = playerActor->rotPivotOffset.x * playerActor->scalingFactor;
299 decorations->rotPivotOffsetY[i] = playerActor->rotPivotOffset.y * playerActor->scalingFactor;
300
301 decorations->rotX[i] = clamp_angle(playerActor->rot.x) * 0.5f;
302 decorations->rotY[i] = clamp_angle(playerActor->rot.y) * 0.5f;
303 decorations->rotZ[i] = clamp_angle(playerActor->rot.z) * 0.5f;
304 }
305}
struct Actor * playerActor

◆ disable_player_blur()

void disable_player_blur ( void )

Definition at line 307 of file actor_rendering.c.

307 {
308 Actor* playerActor = gBattleStatus.playerActor;
309 ActorPart* partsTable = playerActor->partsTable;
310 DecorationTable* decorations = partsTable->decorationTable;
311
312 if (decorations->blurEnableCount != 0) {
313 decorations->blurEnableCount--;
314 if (decorations->blurEnableCount == 0) {
315 decorations->blurDisableDelay = 20;
316 }
317 }
318}

◆ reset_player_blur()

void reset_player_blur ( void )

Definition at line 320 of file actor_rendering.c.

320 {
321 Actor* playerActor = gBattleStatus.playerActor;
322 ActorPart* partsTable = playerActor->partsTable;
323 DecorationTable* decorations = partsTable->decorationTable;
324
325 if (decorations->blurEnableCount != 0) {
326 decorations->blurEnableCount--;
327 if (decorations->blurEnableCount == 0) {
328 playerActor->flags &= ~ACTOR_FLAG_BLUR_ENABLED;
329 decorations->blurDisableDelay = 1;
330 }
331 }
332}

◆ force_disable_player_blur()

void force_disable_player_blur ( void )

Definition at line 334 of file actor_rendering.c.

334 {
335 Actor* playerActor = gBattleStatus.playerActor;
336 ActorPart* partsTable = playerActor->partsTable;
337 DecorationTable* decorations = partsTable->decorationTable;
338
339 decorations->blurEnableCount = 0;
340 decorations->blurDisableDelay = 20;
341}

◆ force_disable_player_blur_immediately()

void force_disable_player_blur_immediately ( void )

Definition at line 343 of file actor_rendering.c.

343 {
344 Actor* playerActor = gBattleStatus.playerActor;
345 ActorPart* partsTable = playerActor->partsTable;
346 DecorationTable* decorations = partsTable->decorationTable;
347
348 playerActor->flags &= ~ACTOR_FLAG_BLUR_ENABLED;
349 decorations->blurEnableCount = 0;
350 decorations->blurDisableDelay = 1;
351}

◆ update_player_actor_blur_history()

void update_player_actor_blur_history ( Actor * actor)

Definition at line 353 of file actor_rendering.c.

353 {
354 ActorPart* partsTable = actor->partsTable;
355 DecorationTable* decorations = partsTable->decorationTable;
356
357 if (!(partsTable->flags & ACTOR_PART_FLAG_INVISIBLE) && partsTable->idleAnimations != nullptr) {
358 s32 i = decorations->blurBufferPos;
359
360 decorations->posX[i] = partsTable->curPos.x;
361 decorations->posY[i] = partsTable->curPos.y;
362 decorations->posZ[i] = partsTable->curPos.z;
363 decorations->yaw[i] = actor->yaw;
364
365 decorations->rotPivotOffsetX[i] = actor->rotPivotOffset.x * actor->scalingFactor;
366 decorations->rotPivotOffsetY[i] = actor->rotPivotOffset.y * actor->scalingFactor;
367
368 decorations->rotX[i] = clamp_angle(actor->rot.x) * 0.5f;
369 decorations->rotY[i] = clamp_angle(actor->rot.y) * 0.5f;
370 decorations->rotZ[i] = clamp_angle(actor->rot.z) * 0.5f;
371
372 i++;
373 if (i >= ARRAY_COUNT(decorations->posX)) {
374 i = 0;
375 }
376 decorations->blurBufferPos = i;
377 }
378}

Referenced by update_player_actor_shadow().

◆ appendGfx_player_actor_blur()

void appendGfx_player_actor_blur ( Actor * actor)

Definition at line 380 of file actor_rendering.c.

380 {
386 s32 drawIdx;
387 s32 yaw;
389 DecorationTable* decorations;
390 f32 rotX, rotY, rotZ;
392 s32 opacity;
395 s32 bufPos;
398 f32 x, y, z;
399
400 partTable = actor->partsTable;
401 decorations = partTable->decorationTable;
402 if (decorations->blurDisableDelay != 0) {
403 decorations->blurDisableDelay--;
404 if (decorations->blurDisableDelay == 0) {
406 return;
407 }
408 }
409
410 if (!(partTable->flags & ACTOR_PART_FLAG_INVISIBLE) && partTable->idleAnimations != nullptr) {
411 bufPos = decorations->blurBufferPos;
412 strideIdx = 0;
413 drawIdx = 0;
414
415 while (true) {
416 bufPos--;
417 strideIdx++;
418 if (bufPos < 0) {
419 bufPos = ARRAY_COUNT(decorations->posX) - 1;
420 }
421 if (bufPos == decorations->blurBufferPos) {
422 break;
423 }
424
425 // only draw every third blur frame
426 if (strideIdx < 3) {
427 continue;
428 }
429
430 strideIdx = 0;
431 drawIdx++;
432
433 if (decorations->blurDrawCount < drawIdx) {
434 break;
435 }
436
437 opacity = partTable->opacity;
438
439 x = decorations->posX[bufPos];
440 y = decorations->posY[bufPos];
441 z = decorations->posZ[bufPos];
442
443 yaw = decorations->yaw[bufPos];
444
445 pivotOffsetX = decorations->rotPivotOffsetX[bufPos];
446 pivotOffsetY = decorations->rotPivotOffsetY[bufPos];
447
448 rotX = decorations->rotX[bufPos] * 2;
449 rotY = decorations->rotY[bufPos] * 2;
450 rotZ = decorations->rotZ[bufPos] * 2;
451
452 blurOpacityBase = 120;
454 if (opacity < 50) {
455 blurOpacityBase = 50;
457 } else if (opacity < 100) {
458 blurOpacityBase = 70;
460 } else if (opacity < 150) {
461 blurOpacityBase = 100;
463 }
464
465 guTranslateF(mtxTranslate, x, y, z);
468 guRotateF(mtxRotX, rotX, 1.0f, 0.0f, 0.0f);
469 guRotateF(mtxRotY, rotY, 0.0f, 1.0f, 0.0f);
470 guRotateF(mtxRotZ, rotZ, 0.0f, 0.0f, 1.0f);
474 actor->scale.y * SPRITE_WORLD_SCALE_D * actor->scalingFactor * partTable->verticalStretch,
475 actor->scale.z * SPRITE_WORLD_SCALE_D);
480 prevOpacity = partTable->opacity;
483 partTable->opacity = prevOpacity;
484 }
485 }
486}

Referenced by btl_render_actors().

◆ update_nonplayer_actor_blur_history()

void update_nonplayer_actor_blur_history ( b32 isPartner,
Actor * actor )

Definition at line 488 of file actor_rendering.c.

488 {
489 s32 numParts = actor->numParts;
490 ActorPart* partsTable = actor->partsTable;
491 DecorationTable* decorations;
492 s32 i, j;
493
494 for (i = 0; i < numParts; i++) {
495 if (partsTable->flags & ACTOR_PART_FLAG_INVISIBLE || partsTable->idleAnimations == nullptr || partsTable->flags & ACTOR_PART_FLAG_NO_DECORATIONS) {
496 partsTable = partsTable->nextPart;
497 } else {
498 decorations = partsTable->decorationTable;
499 j = decorations->blurBufferPos;
500
501 decorations->posX[j] = partsTable->curPos.x;
502 decorations->posY[j] = partsTable->curPos.y;
503 decorations->posZ[j] = partsTable->curPos.z;
504 decorations->yaw[j] = actor->yaw;
505
506 decorations->rotPivotOffsetX[j] = actor->rotPivotOffset.x;
507 decorations->rotPivotOffsetY[j] = actor->rotPivotOffset.y;
508
509 decorations->rotX[j] = clamp_angle(actor->rot.x) * 0.5f;
510 decorations->rotY[j] = clamp_angle(actor->rot.y) * 0.5f;
511 decorations->rotZ[j] = clamp_angle(actor->rot.z) * 0.5f;
512
513 j++;
514 if (j >= ARRAY_COUNT(decorations->posX)) {
515 j = 0;
516 }
517 decorations->blurBufferPos = j;
518 }
519 }
520}

Referenced by update_enemy_actor_blur_history(), and update_partner_actor_blur_history().

◆ appendGfx_nonplayer_actor_blur()

void appendGfx_nonplayer_actor_blur ( b32 isPartner,
Actor * actor )

Definition at line 522 of file actor_rendering.c.

522 {
523 DecorationTable* decorations;
530 s32 numParts;
532 f32 x, y, z;
533 f32 rotX, rotY, rotZ;
534 s32 yaw;
535 s32 opacity;
536 s32 pivotX;
537 s32 pivotY;
541 s32 flags;
542
543 guRotateF(mtxRotX, actor->rot.x, 1.0f, 0.0f, 0.0f);
544 guRotateF(mtxRotY, actor->rot.y, 0.0f, 1.0f, 0.0f);
545 guRotateF(mtxRotZ, actor->rot.z, 0.0f, 0.0f, 1.0f);
549 actor->scale.y * SPRITE_WORLD_SCALE_D * actor->scalingFactor,
550 actor->scale.z * SPRITE_WORLD_SCALE_D);
552
553 numParts = actor->numParts;
554 partTable = actor->partsTable;
555 for (i = 0; i < numParts; i++) {
556 if ((partTable->idleAnimations == nullptr) || (partTable->flags & ACTOR_PART_FLAG_NO_DECORATIONS)) {
558 continue;
559 }
560
561 decorations = partTable->decorationTable;
562 if (decorations->blurDisableDelay != 0) {
563 decorations->blurDisableDelay--;
564 if (decorations->blurDisableDelay == 0) {
566 partTable = partTable->nextPart;
567 continue;
568 }
569 }
570
572 partTable = partTable->nextPart;
573 continue;
574 }
575
578 }
579
580 bufPos = decorations->blurBufferPos;
581 strideIdx = 0;
582 drawIdx = 0;
583
584 while (true) {
585 bufPos--;
586 strideIdx++;
587
588 if (bufPos < 0) {
590 }
591
592 if (bufPos == decorations->blurBufferPos) {
593 break;
594 }
595
596 // only draw every third blur frame
597 if (strideIdx < 3) {
598 continue;
599 }
600
601 strideIdx = 0;
602 drawIdx++;
603
604 if (decorations->blurDrawCount < drawIdx) {
605 break;
606 }
607
608 opacity = partTable->opacity;
609
610 x = decorations->posX[bufPos];
611 y = decorations->posY[bufPos];
612 z = decorations->posZ[bufPos];
613
614 yaw = decorations->yaw[bufPos];
615
616 pivotX = decorations->rotPivotOffsetX[bufPos];
617 pivotY = decorations->rotPivotOffsetY[bufPos];
618
619 rotX = decorations->rotX[bufPos] * 2;
620 rotY = decorations->rotY[bufPos] * 2;
621 rotZ = decorations->rotZ[bufPos] * 2;
622
623 blurOpacityBase = 120;
625 if (opacity < 50) {
626 blurOpacityBase = 50;
628 } else if (opacity < 100) {
629 blurOpacityBase = 70;
631 } else if (opacity < 150) {
632 blurOpacityBase = 100;
634 }
635
636 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
639 } else {
642 }
643
644 guTranslateF(mtxTranslate, x, y, z);
645 guRotateF(mtxRotX, rotX, 1.0f, 0.0f, 0.0f);
646 guRotateF(mtxRotY, rotY, 0.0f, 1.0f, 0.0f);
647 guRotateF(mtxRotZ, rotZ, 0.0f, 0.0f, 1.0f);
650 guScaleF(mtxScale, partTable->scale.x, partTable->scale.y * partTable->verticalStretch, partTable->scale.z);
654
657 } else {
659 }
661
664 if (!isPartner) {
665 spr_draw_npc_sprite(partTable->spriteInstanceID | flags, yaw, blurOpacity, 0, mtxTransform);
666 } else {
667 spr_draw_npc_sprite(partTable->spriteInstanceID | flags, clamp_angle(yaw + 180), blurOpacity, 0, mtxTransform);
668 }
669 }
670 }
671}
#define ACTOR_BLUR_FRAMES
s8 flags
Definition demo_api.c:15

Referenced by appendGfx_enemy_actor_blur(), and appendGfx_partner_actor_blur().

◆ update_enemy_actor_blur_history()

void update_enemy_actor_blur_history ( Actor * actor)

Definition at line 673 of file actor_rendering.c.

673 {
675}
void update_nonplayer_actor_blur_history(b32 isPartner, Actor *actor)

Referenced by update_nonplayer_actor_shadow().

◆ appendGfx_enemy_actor_blur()

void appendGfx_enemy_actor_blur ( void * data)

Definition at line 677 of file actor_rendering.c.

677 {
678 Actor* actor = data;
679
680 appendGfx_nonplayer_actor_blur(false, actor);
681}
void appendGfx_nonplayer_actor_blur(b32 isPartner, Actor *actor)

Referenced by btl_render_actors().

◆ update_partner_actor_blur_history()

void update_partner_actor_blur_history ( Actor * actor)

Definition at line 683 of file actor_rendering.c.

683 {
685}

Referenced by update_nonplayer_actor_shadow().

◆ appendGfx_partner_actor_blur()

void appendGfx_partner_actor_blur ( void * data)

Definition at line 687 of file actor_rendering.c.

687 {
688 Actor* actor = data;
689
691}

Referenced by btl_render_actors().

◆ update_nonplayer_actor_shadow()

void update_nonplayer_actor_shadow ( b32 isPartner,
Actor * actor )

Definition at line 693 of file actor_rendering.c.

693 {
696 Shadow* shadow;
697 s32 numParts;
698 f32 x1, y1, z1;
699 f32 x2, y2, z2;
700 f32 dist;
702 f32 yaw;
703 s32 i;
704
705 if (actor != nullptr) {
706 shadow = get_shadow_by_index(actor->shadow.id);
707 shadow->flags |= ENTITY_FLAG_HIDDEN;
708 if (!(actor->flags & ACTOR_FLAG_INVISIBLE)) {
709 if (actor->flags & ACTOR_FLAG_BLUR_ENABLED) {
710 if (!isPartner) {
712 } else {
714 }
715 }
716
718 x1 = actor->curPos.x + actor->headOffset.x;
719 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
720 y1 = actor->curPos.y + actor->headOffset.y;
721 } else {
722 y1 = actor->curPos.y - actor->headOffset.y;
723 }
724 z1 = actor->curPos.z + actor->headOffset.z;
725 numParts = actor->numParts;
726 actorPart = actor->partsTable;
727
728 for (i = 0; i < numParts; i++) {
729 if (!(actorPart->flags & ACTOR_PART_FLAG_INVISIBLE) && actorPart->idleAnimations != nullptr) {
731 if (spriteID >= 0) {
732 spr_update_sprite(spriteID, actorPart->curAnimation, actorPart->animationRate);
733 actorPart->animNotifyValue = spr_get_notify_value(actorPart->spriteInstanceID);
734 }
735
737 x2 = x1 + actorPart->partOffset.x + actorPart->visualOffset.x;
738 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
739 y2 = y1 + actorPart->partOffset.y + actorPart->visualOffset.y;
740 } else {
741 y2 = y1 - actorPart->partOffset.y - actorPart->visualOffset.y;
742 }
743 z2 = z1 + actorPart->partOffset.z + actorPart->visualOffset.z;
744 yaw = actorPart->yaw = actor->yaw;
745 } else {
746 x2 = actorPart->absolutePos.x + actorPart->visualOffset.x;
747 y2 = actorPart->absolutePos.y + actorPart->visualOffset.y;
748 z2 = actorPart->absolutePos.z + actorPart->visualOffset.z;
749 yaw = actorPart->yaw;
750 }
751 actorPart->curPos.x = x2;
752 actorPart->curPos.y = y2;
753 actorPart->curPos.z = z2;
754
755 if (!(actorPart->flags & ACTOR_PART_FLAG_NO_SHADOW)) {
756 shadow = get_shadow_by_index(actorPart->shadowIndex);
757 shadow->flags &= ~ENTITY_FLAG_HIDDEN;
758 x1 = actorPart->curPos.x;
759 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
760 y1 = actorPart->curPos.y + 12.0;
761 } else {
762 y1 = actorPart->curPos.y - 12.0;
763 }
764 z1 = actorPart->curPos.z;
765
766 dist = 32767.0f;
767 npc_raycast_down_sides(0, &x1, &y1, &z1, &dist);
768
769 if (200.0f < dist) {
770 shadow->flags |= ENTITY_FLAG_HIDDEN;
771 }
772 shadow->pos.x = x1;
773 shadow->pos.y = y1;
774 shadow->pos.z = z1;
775 shadow->rot.y = clamp_angle(yaw - camera->curYaw);
776 set_standard_shadow_scale(shadow, dist);
777 shadow->scale.x *= actorPart->shadowScale;
778 }
779 if (actorPart->opacity < 255 || actorPart->flags & ACTOR_PART_FLAG_TRANSPARENT) {
781 }
782 }
783 actorPart = actorPart->nextPart;
784 }
785
786 shadow = get_shadow_by_index(actor->shadow.id);
787 if (!(actor->flags & ACTOR_FLAG_NO_SHADOW)) {
788 shadow->flags &= ~ENTITY_FLAG_HIDDEN;
789 }
790
791 x1 = actor->curPos.x + actor->headOffset.x;
792 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
793 y1 = actor->curPos.y + actor->headOffset.y + 12.0;
794 } else {
795 y1 = actor->curPos.y - actor->headOffset.y + 12.0;
796 }
797 z1 = actor->curPos.z + actor->headOffset.z;
798
799 dist = 32767.0f;
800 npc_raycast_down_sides(0, &x1, &y1, &z1, &dist);
801
802 if (200.0f < dist) {
803 shadow->flags |= ENTITY_FLAG_HIDDEN;
804 }
805 shadow->pos.x = x1;
806 shadow->pos.y = y1;
807 shadow->pos.z = z1 + bActorOffsets[actor->actorType].shadow;
808 shadow->rot.y = clamp_angle(actor->yaw - camera->curYaw);
809 set_standard_shadow_scale(shadow, dist);
810 shadow->scale.x *= actor->shadowScale * actor->scalingFactor;
811 }
812 }
813}
void update_enemy_actor_blur_history(Actor *actor)
void update_partner_actor_blur_history(Actor *actor)
@ ACTOR_FLAG_INVISIBLE
Actor is not rendered.
Definition enums.h:3358
@ ACTOR_FLAG_NO_SHADOW
Hide shadow.
Definition enums.h:3359
@ ACTOR_PART_FLAG_NO_SHADOW
Definition enums.h:3386
ActorOffsets bActorOffsets[]

Referenced by update_enemy_shadows(), and update_hero_shadows().

◆ update_enemy_shadows()

void update_enemy_shadows ( void )

Definition at line 815 of file actor_rendering.c.

815 {
817 s32 i;
818
819 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
820 update_nonplayer_actor_shadow(false, battleStatus->enemyActors[i]);
821 }
822}
void update_nonplayer_actor_shadow(b32 isPartner, Actor *actor)

Referenced by update_nonplayer_actor_shadows().

◆ update_hero_shadows()

void update_hero_shadows ( void )

Definition at line 824 of file actor_rendering.c.

Referenced by update_nonplayer_actor_shadows().

◆ func_80255FD8()

void func_80255FD8 ( void )

Definition at line 829 of file actor_rendering.c.

829 {
830}

Referenced by btl_render_actors().

◆ appendGfx_enemy_actor()

void appendGfx_enemy_actor ( void * data)

Definition at line 1375 of file actor_rendering.c.

1375 {
1376 appendGfx_npc_actor(false, (s32) data);
1377}
void appendGfx_npc_actor(s32 isPartner, s32 actorIndex)

Referenced by btl_render_actors().

◆ appendGfx_partner_actor()

void appendGfx_partner_actor ( void * data)

Definition at line 1379 of file actor_rendering.c.

1379 {
1380 appendGfx_npc_actor(true, (s32) data);
1381}

Referenced by btl_render_actors().

◆ appendGfx_enemy_actor_reflection()

void appendGfx_enemy_actor_reflection ( void * data)

Definition at line 1383 of file actor_rendering.c.

1383 {
1384 Actor* actor = data;
1385
1387}
void appendGfx_npc_actor_reflection(s32, Actor *)

Referenced by btl_render_actors().

◆ appendGfx_partner_actor_reflection()

void appendGfx_partner_actor_reflection ( void * data)

Definition at line 1389 of file actor_rendering.c.

Referenced by btl_render_actors().

◆ appendGfx_player_actor()

void appendGfx_player_actor ( void * arg0)

Definition at line 1439 of file actor_rendering.c.

1439 {
1446
1447 Actor* partner;
1448 Actor* player;
1450 EffectInstance* effect;
1451 f32 playerPosX, playerPosY, playerPosZ, playerYaw;
1453 u32 lastAnim;
1454
1455 player = battleStatus->playerActor;
1456 partner = battleStatus->partnerActor;
1457 playerParts = player->partsTable;
1458
1459 playerPosX = player->curPos.x + player->headOffset.x;
1460 playerPosY = player->curPos.y + player->headOffset.y + player->verticalRenderOffset;
1461 playerPosZ = player->curPos.z + player->headOffset.z;
1462
1463 playerYaw = playerParts->yaw = player->yaw;
1464
1466 (player->actorBlueprint->statusIconOffset.x + player->statusIconOffset.x) * player->scalingFactor;
1467 player->disableEffect->data.disableX->pos.y = playerPosY +
1468 (player->actorBlueprint->statusIconOffset.y + player->statusIconOffset.y) * player->scalingFactor;
1469 player->disableEffect->data.disableX->pos.z = playerPosZ;
1470
1472 if (player->disableDismissTimer != 0) {
1473 player->disableDismissTimer--;
1474 player->disableEffect->data.disableX->pos.y = NPC_DISPOSE_POS_Y;
1475 } else {
1476 player->disableEffect->data.disableX->scale = player->scalingFactor * 0.75;
1477 }
1478 } else {
1479 player->disableEffect->data.disableX->pos.y = NPC_DISPOSE_POS_Y;
1480 player->disableDismissTimer = 10;
1481 }
1482
1483 if (battleStatus->waterBlockTurnsLeft != 0) {
1486 {
1487 effect = battleStatus->waterBlockEffect;
1488 effect->data.waterBlock->pos.x = playerPosX;
1489 effect->data.waterBlock->pos.y = playerPosY;
1490 effect->data.waterBlock->pos.z = playerPosZ;
1491 } else {
1492 effect = battleStatus->waterBlockEffect;
1493 effect->data.waterBlock->pos.x = playerPosX;
1494 effect->data.waterBlock->pos.y = NPC_DISPOSE_POS_Y;
1495 effect->data.waterBlock->pos.z = playerPosZ;
1496 }
1497 }
1498 if (battleStatus->cloudNineTurnsLeft != 0) {
1501 {
1502 effect = battleStatus->cloudNineEffect;
1503 effect->data.endingDecals->pos.x = playerPosX;
1504 effect->data.endingDecals->pos.y = playerPosY;
1505 effect->data.endingDecals->pos.z = playerPosZ;
1506 effect->data.endingDecals->scale = player->scalingFactor;
1507 } else {
1508 effect = battleStatus->cloudNineEffect;
1509 effect->data.endingDecals->pos.x = playerPosX;
1510 effect->data.endingDecals->pos.y = NPC_DISPOSE_POS_Y;
1511 effect->data.endingDecals->pos.z = playerPosZ;
1512 }
1513 }
1514 if (player->debuff == STATUS_KEY_FROZEN) {
1515 effect = player->icePillarEffect;
1516 if (player->icePillarEffect != nullptr) {
1519 {
1520 effect->data.icePillar->pos.x = playerPosX - 8.0f;
1521 effect->data.icePillar->pos.y = playerPosY;
1522 effect->data.icePillar->pos.z = playerPosZ;
1523 effect->data.icePillar->scale = player->size.y / 24.0;
1524 } else {
1525 effect->data.icePillar->pos.x = NPC_DISPOSE_POS_X;
1526 effect->data.icePillar->pos.y = NPC_DISPOSE_POS_Y;
1527 effect->data.icePillar->pos.z = NPC_DISPOSE_POS_Z;
1528 }
1529 } else {
1530 effect->data.icePillar->pos.x = NPC_DISPOSE_POS_X;
1531 effect->data.icePillar->pos.y = NPC_DISPOSE_POS_Y;
1532 effect->data.icePillar->pos.z = NPC_DISPOSE_POS_Z;
1533 }
1534 } else {
1535 effect = player->icePillarEffect;
1536 if (effect != nullptr) {
1537 effect->flags |= FX_INSTANCE_FLAG_DISMISS;
1538 player->icePillarEffect = nullptr;
1539 }
1540 }
1541
1544 && (player->flags & ACTOR_FLAG_SHOW_STATUS_ICONS)
1545 ) {
1546 battleStatus->buffEffect->data.partnerBuff->visible = true;
1547 } else {
1548 battleStatus->buffEffect->data.partnerBuff->visible = false;
1549 }
1550
1551 if (player->debuff == STATUS_KEY_SHRINK) {
1552 player->scalingFactor += (0.4 - player->scalingFactor) / 6.0;
1553 } else {
1554 player->scalingFactor += (1.0 - player->scalingFactor) / 6.0;
1555 }
1556
1557 if (player->flags & ACTOR_FLAG_SHOW_STATUS_ICONS) {
1558 if (battleStatus->hammerCharge > 0) {
1559 create_status_icon_boost_hammer(player->hudElementDataIndex);
1560 remove_status_icon_boost_jump(player->hudElementDataIndex);
1561 } else {
1562 remove_status_icon_boost_hammer(player->hudElementDataIndex);
1563 }
1564 if (battleStatus->jumpCharge > 0) {
1565 create_status_icon_boost_jump(player->hudElementDataIndex);
1566 remove_status_icon_boost_hammer(player->hudElementDataIndex);
1567 } else {
1568 remove_status_icon_boost_jump(player->hudElementDataIndex);
1569 }
1570 } else {
1571 enable_status_icon_boost_jump(player->hudElementDataIndex);
1572 enable_status_icon_boost_hammer(player->hudElementDataIndex);
1573 }
1574
1576 if (playerData->curHP <= PERIL_THRESHOLD) {
1577 create_status_icon_peril(player->hudElementDataIndex);
1578 remove_status_icon_danger(player->hudElementDataIndex);
1579 } else if (playerData->curHP <= DANGER_THRESHOLD) {
1580 remove_status_icon_peril(player->hudElementDataIndex);
1581 create_status_icon_danger(player->hudElementDataIndex);
1582 } else {
1583 remove_status_icon_peril(player->hudElementDataIndex);
1584 remove_status_icon_danger(player->hudElementDataIndex);
1585 }
1586 } else {
1587 remove_status_icon_peril(player->hudElementDataIndex);
1588 remove_status_icon_danger(player->hudElementDataIndex);
1589 }
1590
1591 if (player->transparentStatus == STATUS_KEY_TRANSPARENT) {
1593 } else {
1595 }
1596
1597 animChanged = false;
1598 palChanged = false;
1599 decorChanged = false;
1600 cond4 = false;
1601 lastAnim = playerParts->curAnimation;
1602
1605 && (partner != nullptr))
1606 || (battleStatus->outtaSightActive > 0))
1607 && !(player->flags & ACTOR_FLAG_NO_INACTIVE_ANIM)
1608 && !((partner != nullptr) && (partner->flags & ACTOR_FLAG_NO_ATTACK))
1609 ) {
1611 if ((player->debuff != STATUS_KEY_UNUSED)
1612 && (player->debuff != STATUS_KEY_PARALYZE)
1613 && (player->debuff != STATUS_KEY_FROZEN)
1614 && (player->debuff != STATUS_KEY_STOP)
1615 ) {
1616 if ((player->transparentStatus != STATUS_KEY_TRANSPARENT) &&
1617 (player->stoneStatus != STATUS_KEY_STONE) &&
1618 ((battleStatus->outtaSightActive > 0) || (gBattleStatus.flags2 & BS_FLAGS2_PLAYER_TURN_USED)))
1619 {
1622 } else if (player->debuff == STATUS_KEY_SLEEP) {
1624 } else if (player->debuff == STATUS_KEY_DIZZY) {
1626 } else {
1628 }
1630 animChanged = true;
1631 }
1632 }
1633
1634 if (player->debuff != STATUS_KEY_POISON) {
1636 } else {
1638 }
1639 palChanged = true;
1640
1642 decorChanged = true;
1643 }
1644 }
1645
1646 if (player->stoneStatus == STATUS_KEY_STONE) {
1649 animChanged = true;
1650
1651 if (!palChanged) {
1653 }
1655 palChanged = true;
1656 enable_status_debuff(player->hudElementDataIndex);
1657 decorChanged = true;
1658 enable_status_static(player->hudElementDataIndex);
1659 cond4 = true;
1660
1661 enable_status_transparent(player->hudElementDataIndex);
1662 enable_status_chill_out(player->hudElementDataIndex);
1663 }
1664
1665 if ((player->flags & ACTOR_FLAG_USING_IDLE_ANIM) && !animChanged) {
1666 s32 temp = playerParts->curAnimation;
1669 }
1670 }
1671
1673 if (!palChanged) {
1675 }
1676 palChanged = true;
1677 }
1678 if (player->debuff == STATUS_KEY_POISON) {
1679 if (!palChanged) {
1681 }
1682 palChanged = true;
1683 }
1684 if (player->debuff == STATUS_KEY_PARALYZE) {
1685 if (!palChanged) {
1687 }
1688 palChanged = true;
1689 }
1690 if (player->staticStatus == STATUS_KEY_STATIC) {
1691 if (!palChanged) {
1693 }
1694 palChanged = true;
1695 }
1696 if (battleStatus->turboChargeTurnsLeft != 0) {
1697 if (!decorChanged) {
1699 }
1700 decorChanged = true;
1701 }
1703 if (!palChanged) {
1705 }
1706 palChanged = true;
1707 }
1708 if (!palChanged) {
1710 }
1711 if (!decorChanged) {
1713 }
1714 if (player->flags & ACTOR_FLAG_USING_IDLE_ANIM) {
1715 if (battleStatus->hustleTurns != 0) {
1717 animChanged = true;
1718 } else if (!animChanged) {
1722 }
1723 }
1724
1725 if (player->debuff == STATUS_KEY_FROZEN) {
1726 if (!animChanged) {
1728 animChanged = true;
1729 }
1730 } else if (player->debuff != STATUS_KEY_SHRINK) {
1731 if (player->debuff == STATUS_KEY_POISON) {
1732 if (!animChanged) {
1734 animChanged = true;
1735 }
1736 } else if (player->debuff == STATUS_KEY_DIZZY) {
1737 if (!animChanged) {
1739 animChanged = true;
1740 }
1741 } else if (player->debuff == STATUS_KEY_SLEEP) {
1742 if (!animChanged) {
1744 animChanged = true;
1745 }
1746 } else if (player->debuff == STATUS_KEY_PARALYZE) {
1747 if (!animChanged) {
1749 animChanged = true;
1750 }
1751 } else {
1753 if (!animChanged) {
1755 animChanged = true;
1756 }
1757 }
1758 }
1759 }
1761 if (!animChanged) {
1763 animChanged = true;
1764 }
1765 player->staticStatus = STATUS_KEY_STATIC;
1766 player->staticDuration = 127;
1767 } else if ((player->staticStatus == STATUS_KEY_STATIC) && !animChanged) {
1769 animChanged = true;
1770 }
1771 if ((player->transparentStatus == STATUS_KEY_TRANSPARENT) || (playerParts->flags & ACTOR_PART_FLAG_TRANSPARENT)) {
1772 if (!animChanged) {
1774 animChanged = true;
1775 }
1776 create_status_transparent(player->hudElementDataIndex, STATUS_KEY_TRANSPARENT);
1777 }
1778 if (!animChanged) {
1780 }
1781 }
1782
1784 if (!cond4) {
1785 if (player->debuff == STATUS_KEY_POISON) {
1786 create_status_debuff(player->hudElementDataIndex, STATUS_KEY_POISON);
1787 } else if (player->debuff == STATUS_KEY_SLEEP) {
1788 create_status_debuff(player->hudElementDataIndex, STATUS_KEY_SLEEP);
1789 } else if (player->debuff == STATUS_KEY_PARALYZE) {
1790 create_status_debuff(player->hudElementDataIndex, STATUS_KEY_PARALYZE);
1791 } else if (player->debuff == STATUS_KEY_DIZZY) {
1792 create_status_debuff(player->hudElementDataIndex, STATUS_KEY_DIZZY);
1793 } else if (player->debuff == STATUS_KEY_SHRINK) {
1794 create_status_debuff(player->hudElementDataIndex, STATUS_KEY_SHRINK);
1795 } else if (player->debuff == STATUS_KEY_FROZEN) {
1796 create_status_debuff(player->hudElementDataIndex, STATUS_KEY_FROZEN);
1797 }
1798 if (is_ability_active(ABILITY_ZAP_TAP) || (player->staticStatus == STATUS_KEY_STATIC)) {
1799 create_status_static(player->hudElementDataIndex, STATUS_KEY_STATIC);
1800 }
1801 }
1802 if ((player->transparentStatus == STATUS_KEY_TRANSPARENT) || (playerParts->flags & ACTOR_PART_FLAG_TRANSPARENT)) {
1803 create_status_transparent(player->hudElementDataIndex, STATUS_KEY_TRANSPARENT);
1804 }
1805 } else {
1806 enable_status_debuff(player->hudElementDataIndex);
1807 enable_status_static(player->hudElementDataIndex);
1808 enable_status_transparent(player->hudElementDataIndex);
1809 enable_status_chill_out(player->hudElementDataIndex);
1810 }
1811
1812 if (player->debuff != STATUS_KEY_STOP) {
1813 if (!animChanged) {
1814 s32 temp = playerParts->curAnimation;
1817 }
1818 }
1819 } else {
1821 create_status_debuff(player->hudElementDataIndex, STATUS_KEY_STOP);
1822 }
1823
1824 set_status_icons_properties(player->hudElementDataIndex,
1826 player->actorBlueprint->statusIconOffset.x * player->scalingFactor,
1827 player->actorBlueprint->statusIconOffset.y * player->scalingFactor,
1828 player->actorBlueprint->statusTextOffset.x * player->scalingFactor,
1829 player->actorBlueprint->statusTextOffset.y * player->scalingFactor);
1830 set_status_icons_offset(player->hudElementDataIndex,
1831 player->size.y * player->scalingFactor,
1832 player->size.x * player->scalingFactor);
1833
1834 playerPosX += playerParts->palAnimPosOffset[0];
1835 playerPosY += playerParts->palAnimPosOffset[1];
1836
1837 playerParts->curPos.x = playerPosX;
1838 playerParts->curPos.y = playerPosY;
1839 playerParts->curPos.z = playerPosZ;
1841
1843 -player->rotPivotOffset.x * player->scalingFactor,
1844 -player->rotPivotOffset.y * player->scalingFactor,
1845 -player->rotPivotOffset.z * player->scalingFactor);
1847 player->rotPivotOffset.x * player->scalingFactor,
1848 player->rotPivotOffset.y * player->scalingFactor,
1849 player->rotPivotOffset.z * player->scalingFactor);
1850
1851 guRotateF(mtxRotX, player->rot.x, 1.0f, 0.0f, 0.0f);
1852 guRotateF(mtxRotY, player->rot.y, 0.0f, 1.0f, 0.0f);
1853 guRotateF(mtxRotZ, player->rot.z, 0.0f, 0.0f, 1.0f);
1856
1858 player->scale.x * SPRITE_WORLD_SCALE_D * player->scalingFactor,
1859 player->scale.y * SPRITE_WORLD_SCALE_D * player->scalingFactor * playerParts->verticalStretch,
1860 player->scale.z * SPRITE_WORLD_SCALE_D);
1861
1866
1867 if (lastAnim != playerParts->curAnimation) {
1869 }
1870 update_part_glow(false, playerParts, clamp_angle(playerYaw + 180.0f), false);
1871 update_part_flash(false, playerParts, clamp_angle(playerYaw + 180.0f), false);
1874}
void enable_status_icon_boost_hammer(s32 iconID)
void enable_status_icon_boost_jump(s32 iconID)
void create_status_icon_boost_jump(s32 iconID)
void create_status_icon_boost_hammer(s32 iconID)
s32 get_player_anim_for_status(s32 animID)
Definition 190B20.c:1695
void create_status_icon_peril(s32 iconID)
void create_status_icon_danger(s32 iconID)
@ ACTOR_PAL_ADJUST_PLAYER_POISON
Definition enums.h:2237
@ ACTOR_PAL_ADJUST_BERSERK
Definition enums.h:2233
@ BS_FLAGS2_PLAYER_TURN_USED
Definition enums.h:3638
@ BS_FLAGS2_NO_PLAYER_PAL_ADJUST
Definition enums.h:3650
@ BS_FLAGS2_OVERRIDE_INACTIVE_PLAYER
Definition enums.h:3640
@ BS_FLAGS2_HIDE_BUFF_COUNTERS
Definition enums.h:3649
@ STATUS_KEY_INACTIVE_SLEEP
Definition enums.h:2822
@ STATUS_KEY_INACTIVE_BERSERK
Definition enums.h:2820
@ STATUS_KEY_STONE
Definition enums.h:2813
@ STATUS_KEY_HUSTLE
Definition enums.h:2826
@ STATUS_KEY_BERSERK
Definition enums.h:2817
@ ABILITY_BERSERKER
Definition enums.h:457
@ ABILITY_ZAP_TAP
Definition enums.h:455
@ ACTOR_FLAG_NO_INACTIVE_ANIM
Definition enums.h:3379
@ ACTOR_FLAG_NO_ATTACK
Skip attack turn.
Definition enums.h:3373
s32 is_ability_active(s32 arg0)
Definition inventory.c:1735
s32 player_team_is_ability_active(Actor *actor, s32 ability)
Definition 190B20.c:2495
void remove_status_icon_boost_hammer(s32)
void remove_status_icon_boost_jump(s32)
void remove_status_icon_peril(s32)
void remove_status_icon_danger(s32)
#define PERIL_THRESHOLD
Definition battle.h:277

Referenced by btl_render_actors().

◆ appendGfx_player_actor_reflection()

void appendGfx_player_actor_reflection ( void * arg0)

Definition at line 1876 of file actor_rendering.c.

1876 {
1881 ActorPart* part = &player->partsTable[0];
1882 f32 playerYaw = player->yaw;
1883 f32 dx, dy, dz;
1884
1885 dx = player->curPos.x + player->headOffset.x;
1886 dx += part->palAnimPosOffset[0];
1887 dy = player->curPos.y + player->headOffset.y;
1888 dy += part->palAnimPosOffset[1];
1889 dz = player->curPos.z + player->headOffset.z - 5.0f;
1890 part->yaw = playerYaw;
1891
1892 guTranslateF(mtxTranslate, dx, dy, dz - 1.0f);
1893
1895 -player->rotPivotOffset.x * player->scalingFactor,
1896 -player->rotPivotOffset.y * player->scalingFactor,
1897 -player->rotPivotOffset.z * player->scalingFactor);
1899 player->rotPivotOffset.x * player->scalingFactor,
1900 player->rotPivotOffset.y * player->scalingFactor,
1901 player->rotPivotOffset.z * player->scalingFactor);
1902
1903 guRotateF(mtxRotX, player->rot.x, 1.0f, 0.0f, 0.0f);
1904 guRotateF(mtxRotY, player->rot.y, 0.0f, 1.0f, 0.0f);
1905 guRotateF(mtxRotZ, player->rot.z, 0.0f, 0.0f, 1.0f);
1909 player->scale.x * SPRITE_WORLD_SCALE_D * player->scalingFactor,
1910 player->scale.y * SPRITE_WORLD_SCALE_D * player->scalingFactor * part->verticalStretch,
1911 player->scale.z * SPRITE_WORLD_SCALE_D);
1913
1919
1920 update_part_glow(false, part, clamp_angle(playerYaw + 180.0f), true);
1921 update_part_flash(false, part, clamp_angle(playerYaw + 180.0f), true);
1923}

Referenced by btl_render_actors().

◆ render_with_adjusted_palettes()

s32 render_with_adjusted_palettes ( b32 isNpcSprite,
ActorPart * part,
s32 yaw,
Matrix4f mtx,
b32 skipAnimation )

Definition at line 1925 of file actor_rendering.c.

1925 {
1926 s32 opacity;
1928
1929 if (part->flags & ACTOR_PART_FLAG_NO_DECORATIONS) {
1930 opacity = 255;
1931 sprDrawOpts = 0;
1932 if (part->opacity < 255) {
1934 opacity = part->opacity;
1935 }
1936 if (part->flags & ACTOR_PART_FLAG_TRANSPARENT) {
1938 opacity = opacity * 120 / 255;
1939 }
1941 if (opacity == 255) {
1942 spr_draw_player_sprite(PLAYER_SPRITE_MAIN, yaw, 0, nullptr, mtx);
1943 } else {
1944 spr_draw_player_sprite(PLAYER_SPRITE_MAIN | sprDrawOpts, yaw, opacity, nullptr, mtx);
1945 }
1946 } else {
1947 if (opacity == 255) {
1948 spr_draw_npc_sprite(part->spriteInstanceID, yaw, 0, nullptr, mtx);
1949 } else {
1950 spr_draw_npc_sprite(part->spriteInstanceID | sprDrawOpts, yaw, opacity, nullptr, mtx);
1951 }
1952 }
1953 return 0;
1954 }
1955
1956 switch (part->decorationTable->paletteAdjustment) {
1959 break;
1962 break;
1965 break;
1968 break;
1971 break;
1974 break;
1977 break;
1980 break;
1983 break;
1986 break;
1989 break;
1992 break;
1995 break;
1998 break;
1999 default:
2000 break;
2001 }
2002 return 0;
2003}
void render_with_watt_idle_palettes(b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
void render_with_player_debuff_palettes(b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation, s32 isPoison)
void render_with_fear_palettes(b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
void render_without_adjusted_palettes(b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
void render_with_watt_attack_palettes(b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
void render_with_sleep_palettes(b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
void render_with_berserk_palettes(b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
void render_with_pal_blending(b32 arg0, ActorPart *part, s32 yaw, s32 arg3, Matrix4f mtx, s32 skipAnimation)
void render_with_palset_blending(b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
void render_with_paralyze_palettes(b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
void render_with_static_palettes(b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
void render_with_poison_palettes(b32 arg0, ActorPart *part, s32 yaw, Matrix4f mtx, b32 skipAnimation)
@ ACTOR_PAL_ADJUST_BLEND_PALETTES_VARYING_INTERVALS
Definition enums.h:2239
@ ACTOR_PAL_ADJUST_BLEND_PALSETS
Definition enums.h:2240
@ ACTOR_PAL_ADJUST_WATT_ATTACK
Definition enums.h:2235
@ ACTOR_PAL_ADJUST_BLEND_PALETTES_UNIFORM_INTERVALS
Definition enums.h:2238
@ ACTOR_PAL_ADJUST_SLEEP
Definition enums.h:2228

Referenced by appendGfx_npc_actor(), appendGfx_npc_actor_reflection(), appendGfx_player_actor(), appendGfx_player_actor_blur(), and appendGfx_player_actor_reflection().

◆ part_glow_off()

void part_glow_off ( b32 isNpcSprite,
ActorPart * part,
s32 yaw,
b32 isReflection )

Definition at line 3346 of file actor_rendering.c.

3346 {
3347 if (part->decorationTable->glowStateChanged) {
3348 part->decorationTable->glowStateChanged = false;
3351 } else {
3352 set_npc_imgfx_all(part->spriteInstanceID, IMGFX_CLEAR, 0, 0, 0, 0, 0);
3353 }
3354 }
3355}
@ IMGFX_CLEAR
Definition enums.h:4702

Referenced by update_part_glow().

◆ part_flash_off()

void part_flash_off ( b32 isNpcSprite,
ActorPart * part,
s32 yaw,
b32 isReflection )

Definition at line 3426 of file actor_rendering.c.

3426 {
3427 DecorationTable* decorations = part->decorationTable;
3428
3429 if (decorations->flashStateChanged) {
3430 decorations->flashStateChanged = false;
3431 }
3432 decorations->flashEnabled = FLASH_PAL_OFF;
3433}

Referenced by update_part_flash().

◆ _add_part_decoration()

void _add_part_decoration ( ActorPart * actorPart)

Definition at line 3531 of file actor_rendering.c.

3531 {
3532 DecorationTable* decorations;
3533 s32 i;
3534
3536 return;
3537 }
3538
3539 decorations = actorPart->decorationTable;
3540 for (i = 0; i < ARRAY_COUNT(decorations->type); i++) {
3541 switch (decorations->type[i]) {
3544 break;
3547 break;
3550 break;
3553 break;
3556 break;
3559 break;
3562 break;
3565 break;
3568 break;
3571 break;
3574 break;
3577 break;
3578 }
3579 }
3580}
void add_part_decor_steam(ActorPart *, s32)
void add_part_decor_sparkles(ActorPart *, s32)
void add_part_decor_fiery_trail(ActorPart *, s32)
void add_part_decor_golden_flames(ActorPart *, s32)
void add_part_decor_radiating_stars(ActorPart *, s32)
void add_part_decor_seeing_stars(ActorPart *, s32)
void add_part_decor_sweat(ActorPart *, s32)
void add_part_decor_smoky_trail(ActorPart *, s32)
void add_part_decor_bowser_aura(ActorPart *, s32)
void add_part_decor_whirlwind(ActorPart *, s32)
void add_part_decor_none(ActorPart *, s32)
void add_part_decor_red_flames(ActorPart *, s32)
@ ACTOR_DECORATION_NONE
Definition enums.h:2076
@ ACTOR_DECORATION_SEEING_STARS
Definition enums.h:2079
@ ACTOR_DECORATION_GREY_SMOKE_TRAIL
Definition enums.h:2081
@ ACTOR_DECORATION_RED_FLAMES
Definition enums.h:2080
@ ACTOR_DECORATION_WHIRLWIND
Definition enums.h:2083
@ ACTOR_DECORATION_RADIAL_STAR_EMITTER
Definition enums.h:2087
@ ACTOR_DECORATION_BOWSER_AURA
Definition enums.h:2086
@ ACTOR_DECORATION_SWEAT
Definition enums.h:2078
@ ACTOR_DECORATION_STEAM_EMITTER
Definition enums.h:2084
@ ACTOR_DECORATION_GOLDEN_FLAMES
Definition enums.h:2077
@ ACTOR_DECORATION_SPARKLES
Definition enums.h:2085
@ ACTOR_DECORATION_FIRE_SMOKE_TRAIL
Definition enums.h:2082

Referenced by add_part_decoration(), appendGfx_npc_actor(), and appendGfx_player_actor().

◆ _remove_part_decoration()

void _remove_part_decoration ( ActorPart * part,
s32 idx )

Definition at line 3582 of file actor_rendering.c.

3582 {
3583 DecorationTable* decorations = part->decorationTable;
3584
3585 switch (decorations->type[idx]) {
3588 break;
3591 break;
3594 break;
3597 break;
3600 break;
3603 break;
3606 break;
3609 break;
3612 break;
3615 break;
3618 break;
3621 break;
3622 }
3623
3624 decorations->type[idx] = ACTOR_DECORATION_NONE;
3625}
void remove_part_decor_bowser_aura(ActorPart *part, s32 idx)
void remove_part_decor_sweat(ActorPart *part, s32 idx)
void remove_part_decor_none(ActorPart *part, s32 idx)
void remove_part_decor_steam(ActorPart *part, s32 idx)
void remove_part_decor_red_flames(ActorPart *part, s32 idx)
void remove_part_decor_seeing_stars(ActorPart *part, s32 idx)
void remove_part_decor_radiating_stars(ActorPart *part, s32 idx)
void remove_part_decor_sparkles(ActorPart *part, s32 idx)
void remove_part_decor_golden_flames(ActorPart *part, s32 idx)
void remove_part_decor_whirlwind(ActorPart *part, s32 idx)
void remove_part_decor_smoky_trail(ActorPart *part, s32 idx)
void remove_part_decor_fiery_trail(ActorPart *part, s32 idx)

Referenced by add_part_decoration(), and remove_part_decoration().

◆ remove_part_decor_none()

void remove_part_decor_none ( ActorPart * part,
s32 idx )

Definition at line 3630 of file actor_rendering.c.

3630 {
3631}

Referenced by _remove_part_decoration().

◆ remove_part_decor_golden_flames()

void remove_part_decor_golden_flames ( ActorPart * part,
s32 idx )

Definition at line 3663 of file actor_rendering.c.

3663 {
3664 part->decorationTable->effect[idx]->data.aura->fadeTime = 5;
3665}

Referenced by _remove_part_decoration().

◆ remove_part_decor_sweat()

void remove_part_decor_sweat ( ActorPart * part,
s32 idx )

Definition at line 3690 of file actor_rendering.c.

3690 {
3691}

Referenced by _remove_part_decoration().

◆ remove_part_decor_seeing_stars()

void remove_part_decor_seeing_stars ( ActorPart * part,
s32 idx )

Definition at line 3712 of file actor_rendering.c.

3712 {
3713 remove_effect(part->decorationTable->effect[idx]);
3714}
#define remove_effect

Referenced by _remove_part_decoration().

◆ remove_part_decor_red_flames()

void remove_part_decor_red_flames ( ActorPart * part,
s32 idx )

Definition at line 3752 of file actor_rendering.c.

3752 {
3753 part->decorationTable->effect[idx]->data.aura->fadeTime = 5;
3754}

Referenced by _remove_part_decoration().

◆ remove_part_decor_smoky_trail()

void remove_part_decor_smoky_trail ( ActorPart * part,
s32 idx )

Definition at line 3774 of file actor_rendering.c.

3774 {
3775 part->decorationTable->effect[idx]->flags |= FX_INSTANCE_FLAG_DISMISS;
3776}

Referenced by _remove_part_decoration().

◆ remove_part_decor_fiery_trail()

void remove_part_decor_fiery_trail ( ActorPart * part,
s32 idx )

Definition at line 3798 of file actor_rendering.c.

3798 {
3799 part->decorationTable->effect[idx]->flags |= FX_INSTANCE_FLAG_DISMISS;
3800}

Referenced by _remove_part_decoration().

◆ remove_part_decor_whirlwind()

void remove_part_decor_whirlwind ( ActorPart * part,
s32 idx )

Definition at line 3820 of file actor_rendering.c.

3820 {
3821 part->decorationTable->effect[idx]->flags |= FX_INSTANCE_FLAG_DISMISS;
3822}

Referenced by _remove_part_decoration().

◆ remove_part_decor_steam()

void remove_part_decor_steam ( ActorPart * part,
s32 idx )

Definition at line 3850 of file actor_rendering.c.

3850 {
3851}

Referenced by _remove_part_decoration().

◆ remove_part_decor_sparkles()

void remove_part_decor_sparkles ( ActorPart * part,
s32 idx )

Definition at line 3880 of file actor_rendering.c.

3880 {
3881}

Referenced by _remove_part_decoration().

◆ remove_part_decor_bowser_aura()

void remove_part_decor_bowser_aura ( ActorPart * part,
s32 idx )

Definition at line 3917 of file actor_rendering.c.

3917 {
3918 part->decorationTable->effect[idx]->data.aura->fadeTime = 5;
3919}

Referenced by _remove_part_decoration().

◆ remove_part_decor_radiating_stars()

void remove_part_decor_radiating_stars ( ActorPart * part,
s32 idx )

Definition at line 3945 of file actor_rendering.c.

3945 {
3946 part->decorationTable->effect[idx]->flags |= FX_INSTANCE_FLAG_DISMISS;
3947}

Referenced by _remove_part_decoration().

Variable Documentation

◆ StaticPalettesAnim

◆ FearPaletteAnimXOffsets

s16 FearPaletteAnimXOffsets[] = { -2, 2, 0, 0, -2, 2, 0, 0, 0, 0, -2, 2, 0, 0, 0, 0, 0, 0, 0xFF }

Definition at line 62 of file actor_rendering.c.

62{ -2, 2, 0, 0, -2, 2, 0, 0, 0, 0, -2, 2, 0, 0, 0, 0, 0, 0, PAL_ANIM_END };

Referenced by render_with_fear_palettes().

◆ ParalyzePaletteAnimXOffsets

s16 ParalyzePaletteAnimXOffsets[] = { -2, 2, 0, 0, -2, 2, 0, 0, 0, 0, -2, 2, 0, 0, 0, 0, 0, 0, 0xFF }

Definition at line 64 of file actor_rendering.c.

64{ -2, 2, 0, 0, -2, 2, 0, 0, 0, 0, -2, 2, 0, 0, 0, 0, 0, 0, PAL_ANIM_END };

Referenced by render_with_paralyze_palettes().

◆ bWattIdlePalettesAnim

u8 bWattIdlePalettesAnim[]
Initial value:

Definition at line 75 of file actor_rendering.c.

75 {
77 WATT_DEFAULT, 52,
79 WATT_DEFAULT, 54,
80 WATT_DEFAULT, 54,
82 WATT_DEFAULT, 28,
84 WATT_DEFAULT, 6,
86 WATT_DEFAULT, 44,
88 WATT_DEFAULT, 44,
90};

Referenced by render_with_watt_idle_palettes().

◆ WattAttackPalettesAnim

u8 WattAttackPalettesAnim[]
Initial value:

Definition at line 92 of file actor_rendering.c.

92 {
94 WATT_DEFAULT, 10,
96 WATT_DEFAULT, 14,
98 WATT_DEFAULT, 10,
100 WATT_DEFAULT, 4,
102};

Referenced by render_with_watt_attack_palettes().

◆ SparkleSpawnIntervals

s16 SparkleSpawnIntervals[] = { -1, 15, 10, 7, 5, 3, 2, 1 }

Definition at line 104 of file actor_rendering.c.

104{ -1, 15, 10, 7, 5, 3, 2, 1 };

Referenced by add_part_decor_sparkles().