diff --git a/src/game/level_update.c b/src/game/level_update.c index c611e550..94f90cec 100644 --- a/src/game/level_update.c +++ b/src/game/level_update.c @@ -43,6 +43,7 @@ #include "pc/djui/djui.h" #include "pc/lua/smlua_hooks.h" #include "pc/mods/mods.h" +#include "pc/nametags.h" #include "game/screen_transition.h" @@ -681,6 +682,7 @@ void check_instant_warp(void) { } warp_camera(warp->displacement[0], warp->displacement[1], warp->displacement[2]); + skip_camera_interpolation(); gMarioStates[0].area->camera->yaw = cameraAngle; return; @@ -1351,6 +1353,7 @@ s32 play_mode_paused(void) { if (!gLevelValues.zoomOutCameraOnPause || !network_check_singleplayer_pause()) { gCameraMovementFlags &= ~CAM_MOVE_PAUSE_SCREEN; + skip_camera_interpolation(); } return 0; } @@ -1831,6 +1834,9 @@ s32 init_level(void) { extern u8 gGfxPcResetTex1; gGfxPcResetTex1 = 1; + // reset nametags + nametags_reset(); + if (gDelayedInitSound >= 0) { play_character_sound(&gMarioStates[0], gDelayedInitSound); gDelayedInitSound = -1; diff --git a/src/pc/nametags.c b/src/pc/nametags.c index b8d3c234..f72eebe9 100644 --- a/src/pc/nametags.c +++ b/src/pc/nametags.c @@ -15,6 +15,7 @@ struct StateExtras { Vec3f prevPos; f32 prevScale; + bool inited; }; static struct StateExtras sStateExtras[MAX_PLAYERS]; @@ -43,7 +44,7 @@ void djui_hud_print_outlined_text_interpolated(const char* text, f32 prevX, f32 djui_hud_print_text_interpolated(text, prevX, prevY - prevOffset, prevScale, x, y - offset, scale); djui_hud_print_text_interpolated(text, prevX, prevY + prevOffset, prevScale, x, y + offset, scale); // render text - djui_hud_set_color(r, g, b, 255); + djui_hud_set_color(r, g, b, a); djui_hud_print_text_interpolated(text, prevX, prevY, prevScale, x, y, scale); djui_hud_set_color(255, 255, 255, 255); } @@ -72,6 +73,8 @@ void nametags_render(void) { case ACT_START_CRAWLING: case ACT_CRAWLING: case ACT_STOP_CRAWLING: + case ACT_IN_CANNON: + case ACT_DISAPPEARED: continue; } @@ -81,7 +84,6 @@ void nametags_render(void) { pos[1] = m->pos[1] + 210; if (djui_hud_world_pos_to_screen_pos(pos, out) && - m->action != ACT_IN_CANNON && (i != 0 || (i == 0 && m->action != ACT_FIRST_PERSON))) { f32 scale = NAMETAG_MAX_SCALE; f32 dist = vec3f_dist(gLakituState.pos, m->pos); @@ -100,9 +102,14 @@ void nametags_render(void) { }; f32 measure = djui_hud_measure_text(name) * scale * 0.5f; - f32 alpha = (np->fadeOpacity / 32.0f) * 255; + u8 alpha = i == 0 ? 255 : MIN(np->fadeOpacity << 3, 255); struct StateExtras* e = &sStateExtras[i]; + if (!e->inited) { + vec3f_copy(e->prevPos, out); + e->prevScale = scale; + e->inited = true; + } djui_hud_print_outlined_text_interpolated(name, e->prevPos[0] - measure, e->prevPos[1], e->prevScale, out[0] - measure, out[1], scale, color[0], color[1], color[2], alpha, 0.25); if (i != 0 && gNametagsSettings.showHealth) { @@ -120,3 +127,9 @@ void nametags_render(void) { } } } + +void nametags_reset(void) { + for (u8 i = 0; i < MAX_PLAYERS; i++) { + sStateExtras[i].inited = false; + } +} diff --git a/src/pc/nametags.h b/src/pc/nametags.h index 4fc5b628..9601401b 100644 --- a/src/pc/nametags.h +++ b/src/pc/nametags.h @@ -4,5 +4,6 @@ #include "sm64.h" void nametags_render(void); +void nametags_reset(void); #endif // NAMETAGS_H \ No newline at end of file