diff --git a/src/k_dialogue.cpp b/src/k_dialogue.cpp index f489088cc..40e5674ee 100644 --- a/src/k_dialogue.cpp +++ b/src/k_dialogue.cpp @@ -106,7 +106,8 @@ void Dialogue::Typewriter::WriteText(void) { textTimer += textSpeed; } - else if (std::ispunct(c) + else if (c != '+' && c != '"' // tutorial hack + && std::ispunct(c) && std::isspace(nextc)) { // slow down for punctuation @@ -330,7 +331,7 @@ void Dialogue::Draw(void) return; } - const UINT8 bgcol = 1, darkcol = 235; + const UINT8 bgcol = 235, speakerhilicol = 240; const fixed_t height = 78 * FRACUNIT; @@ -343,7 +344,7 @@ void Dialogue::Draw(void) // TODO -- hack, change when dialogue is made per-player/netsynced UINT32 speakerbgflags = (players[consoleplayer].nocontrol == 0 && P_LevelIsFrozen() == false) - ? (V_ADD|V_30TRANS) + ? V_30TRANS : 0; drawer @@ -374,10 +375,10 @@ void Dialogue::Draw(void) if (speakername && speaker[0]) { - INT32 speakernamewidth = V_StringWidth(speakername, 0); + INT32 speakernamewidth = V_MenuStringWidth(speakername, 0); INT32 existingborder = (portrait == nullptr ? -4 : 3); - INT32 speakernamewidthoffset = (speakernamewidth + (arrowstep - existingborder) - 1) % arrowstep; + INT32 speakernamewidthoffset = (speakernamewidth + (arrowstep - existingborder) - 2) % arrowstep; if (speakernamewidthoffset) { speakernamewidthoffset = (arrowstep - speakernamewidthoffset); @@ -410,14 +411,14 @@ void Dialogue::Draw(void) .width(speakernamewidth - existingborder) .y(-38-11) .height(11) - .fill(darkcol); + .fill(speakerhilicol); } speakernameedge -= speakernamewidth; drawer .xy(speakernamewidthoffset + speakernameedge, -39-9) - .font(srb2::Draw::Font::kConsole) + .font(srb2::Draw::Font::kMenu) .text(speakername); speakernameedge -= 5; @@ -468,9 +469,18 @@ void Dialogue::Draw(void) .patch("TUTDIAG2"); } + auto bt_translate_press = [this]() -> std::optional + { + if (Held()) + return true; + if (TextDone()) + return {}; + return false; + }; + drawer .xy(17-14 - BASEVIDWIDTH, -39-16) - .button(srb2::Draw::Button::z, Held()); + .button(srb2::Draw::Button::z, bt_translate_press()); } } diff --git a/src/menus/options-profiles-edit-controls.c b/src/menus/options-profiles-edit-controls.c index 9adac3dd1..de458a07b 100644 --- a/src/menus/options-profiles-edit-controls.c +++ b/src/menus/options-profiles-edit-controls.c @@ -17,7 +17,7 @@ menuitem_t OPTIONS_ProfileControls[] = { {IT_CONTROL, "Look back", "Look backwards / Go back", "TLB_B", {.routine = M_ProfileSetControl}, gc_b, 0}, - {IT_CONTROL, "Spindash", "Spindash / Extra", + {IT_CONTROL, "Spin Dash", "Spin Dash / Extra", "TLB_C", {.routine = M_ProfileSetControl}, gc_c, 0}, {IT_CONTROL, "Brake / Go back", "Brake / Go back", diff --git a/src/p_mobj.c b/src/p_mobj.c index e6e0b93d7..2596fe0fc 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -12316,7 +12316,7 @@ void P_MovePlayerToSpawn(INT32 playernum, mapthing_t *mthing) mobj->angle = p->drawangle = angle; // FAULT - if (gamestate == GS_LEVEL && leveltime > introtime && !p->spectator) + if (gamestate == GS_LEVEL && leveltime > introtime && !p->spectator && gametype != GT_TUTORIAL) { K_DoIngameRespawn(p); }