From 98f8bd46cd1f38a3e14a6a2f2285b0590fa17a5f Mon Sep 17 00:00:00 2001 From: hayaunderscore Date: Sat, 26 Oct 2024 13:55:19 +0800 Subject: [PATCH 1/3] support for legacy v1 musicdefs --- src/s_sound.c | 33 +++++++++++++++++++++++++++++++++ src/s_sound.h | 1 + 2 files changed, 34 insertions(+) diff --git a/src/s_sound.c b/src/s_sound.c index e95c110ed..e4da373cf 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -1464,6 +1464,7 @@ ReadMusicDefFields def->numtracks = i; def->volume = DEFAULT_MUSICDEF_VOLUME; + def->legacy = true; def->next = musicdefstart; musicdefstart = def; @@ -1511,11 +1512,13 @@ ReadMusicDefFields { Z_Free(def->title); def->title = Z_StrDup(textline); + def->legacy = false; } else if (!stricmp(stoken, "author")) { Z_Free(def->author); def->author = Z_StrDup(textline); + def->legacy = false; } else if (!stricmp(stoken, "source")) { @@ -1526,15 +1529,22 @@ ReadMusicDefFields { Z_Free(def->composers); def->composers = Z_StrDup(textline); + def->legacy = false; } else if (!stricmp(stoken, "volume")) { def->volume = atoi(textline); + def->legacy = false; } else if (!stricmp(stoken, "contentidunsafe")) { textline[0] = toupper(textline[0]); def->contentidunsafe = (textline[0] == 'Y' || textline[0] == 'T' || textline[0] == '1'); + def->legacy = false; + } + else if (!stricmp(stoken, "usage")) + { + // This does absolutely nothing, just a way to ignore this } else { @@ -1548,6 +1558,16 @@ ReadMusicDefFields return true; } +static char* replacechar(char* str, char find, char replace) +{ + char *current_pos = strchr(str,find); + while (current_pos) { + *current_pos = replace; + current_pos = strchr(current_pos,find); + } + return str; +} + static void S_LoadMusicDefLump(lumpnum_t lumpnum) { char *lump; @@ -1611,6 +1631,19 @@ static void S_LoadMusicDefLump(lumpnum_t lumpnum) else break;/* EOF */ } + + musicdef_t *df; + // Replace all _ with spaces on legacy musicdefs + for (df = musicdefstart; df; df = df->next) + { + if (df->legacy && df->source) + { + df->source = replacechar(df->source, '_', ' '); + df->title = Z_StrDup(df->source); + memset(df->source, 0, strlen(df->source)); + df->source = NULL; + } + } free(musdeftext); } diff --git a/src/s_sound.h b/src/s_sound.h index 4f2f3d4f0..ef4b5dff6 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -179,6 +179,7 @@ typedef struct musicdef_s char *composers; int volume; boolean contentidunsafe; + boolean legacy; struct musicdef_s *next; } musicdef_t; From bed5bb3215576ab3bbf8b50a982265f88d30aa1e Mon Sep 17 00:00:00 2001 From: Alug Date: Fri, 26 Apr 2024 19:20:07 +0200 Subject: [PATCH 2/3] fix ogl y shearing verical aim --- src/hardware/r_opengl/r_opengl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index 02df2e294..1c43606e9 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -3158,7 +3158,7 @@ EXPORT void HWRAPI(SetTransform) (FTransform *stransform) // https://zdoom.org/wiki/Y-shearing if (shearing) { - float fdy = stransform->viewaiming * 2; + float fdy = stransform->viewaiming * 2 * ((float)vid.width / vid.height) / ((float)BASEVIDWIDTH / BASEVIDHEIGHT); //screen_width/BASEVIDWIDTH; if (stransform->flip) fdy *= -1.0f; pglTranslatef(0.0f, -fdy/BASEVIDHEIGHT, 0.0f); From ac7ee79e222a70aff0fe5f06a7f8167503b43bec Mon Sep 17 00:00:00 2001 From: hayaunderscore Date: Mon, 28 Oct 2024 10:23:28 +0800 Subject: [PATCH 3/3] add a fallback to set spr2 for manually set PLAY frames --- src/lua_mobjlib.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++- src/p_spec.c | 5 +++- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/src/lua_mobjlib.c b/src/lua_mobjlib.c index 90f529640..9bc31f922 100644 --- a/src/lua_mobjlib.c +++ b/src/lua_mobjlib.c @@ -540,9 +540,65 @@ static int mobj_set(lua_State *L) break; case mobj_sprite: mo->sprite = luaL_checkinteger(L, 3); + if (mo->sprite == SPR_PLAY) + mo->sprite2 = P_GetSkinSprite2(((skin_t *)mo->skin), SPR2_STIN, mo->player); break; case mobj_frame: - mo->frame = (UINT32)luaL_checkinteger(L, 3); + // Check for SPR2 + if (mo->sprite == SPR_PLAY) + { + UINT32 frame = (UINT32)luaL_checkinteger(L, 3); + switch (frame) + { + case 0: + case 1: + mo->sprite2 = P_GetSkinSprite2(((skin_t *)mo->skin), SPR2_STIN, mo->player); + break; + case 2: + case 3: + mo->sprite2 = P_GetSkinSprite2(((skin_t *)mo->skin), SPR2_STIL, mo->player); + break; + case 4: + case 5: + mo->sprite2 = P_GetSkinSprite2(((skin_t *)mo->skin), SPR2_STIR, mo->player); + break; + case 6: + mo->sprite2 = P_GetSkinSprite2(((skin_t *)mo->skin), SPR2_SLWN, mo->player); + break; + case 7: + mo->sprite2 = P_GetSkinSprite2(((skin_t *)mo->skin), SPR2_SLWL, mo->player); + break; + case 8: + mo->sprite2 = P_GetSkinSprite2(((skin_t *)mo->skin), SPR2_SLWR, mo->player); + break; + case 9: + mo->sprite2 = P_GetSkinSprite2(((skin_t *)mo->skin), SPR2_FSTN, mo->player); + break; + case 10: + mo->sprite2 = P_GetSkinSprite2(((skin_t *)mo->skin), SPR2_FSTL, mo->player); + break; + case 11: + mo->sprite2 = P_GetSkinSprite2(((skin_t *)mo->skin), SPR2_FSTR, mo->player); + break; + case 12: + case 13: + mo->sprite2 = P_GetSkinSprite2(((skin_t *)mo->skin), SPR2_DRLN, mo->player); + break; + case 14: + case 15: + mo->sprite2 = P_GetSkinSprite2(((skin_t *)mo->skin), SPR2_DRRN, mo->player); + break; + case 16: + case 17: // squish technically doesnt really exist + mo->sprite2 = P_GetSkinSprite2(((skin_t *)mo->skin), SPR2_SPIN, mo->player); + break; + case 18: + mo->sprite2 = P_GetSkinSprite2(((skin_t *)mo->skin), SPR2_SIGN, mo->player); + break; + } + } + else + mo->frame = (UINT32)luaL_checkinteger(L, 3); break; case mobj_sprite2: mo->sprite2 = P_GetSkinSprite2(((skin_t *)mo->skin), (UINT8)luaL_checkinteger(L, 3), mo->player); diff --git a/src/p_spec.c b/src/p_spec.c index 6cd6f9bc6..1034cd2bf 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -2942,7 +2942,10 @@ boolean P_ProcessSpecial(activator_t *activator, INT16 special, INT32 *args, cha case 423: // Change Sky if ((mo && mo->player && P_IsLocalPlayer(mo->player)) || args[1]) - P_SetupLevelSky(stringargs[0], args[1]); + if (udmf) + P_SetupLevelSky(stringargs[0], args[1]); + else + P_SetupLevelSky(va("SKY%d", args[0]), args[1]); break; case 424: // Change Weather