From b91dc51d6ff33b732e8708a4a0c0feddbdd3dcda Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Sat, 8 Jul 2017 11:41:20 +0100 Subject: [PATCH] * Lua P_MobjFromMobj. * Make A_Repeat only set extravalue2 if it has a var1. * Improve sound caption. * Make activesound state-controllable. --- src/lua_baselib.c | 18 ++++++++++++++++++ src/p_enemy.c | 4 +--- src/sounds.c | 2 +- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 93f2979fa..43ca84a6e 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -422,6 +422,23 @@ static int lib_pSpawnMobj(lua_State *L) return 1; } +static int lib_pSpawnMobjFromMobj(lua_State *L) +{ + mobj_t *actor = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ)); + fixed_t x = luaL_checkfixed(L, 2); + fixed_t y = luaL_checkfixed(L, 3); + fixed_t z = luaL_checkfixed(L, 4); + mobjtype_t type = luaL_checkinteger(L, 5); + NOHUD + INLEVEL + if (!actor) + return LUA_ErrInvalid(L, "mobj_t"); + if (type >= NUMMOBJTYPES) + return luaL_error(L, "mobj type %d out of range (0 - %d)", type, NUMMOBJTYPES-1); + LUA_PushUserdata(L, P_SpawnMobjFromMobj(actor, x, y, z, type), META_MOBJ); + return 1; +} + static int lib_pRemoveMobj(lua_State *L) { mobj_t *th = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ)); @@ -2384,6 +2401,7 @@ static luaL_Reg lib[] = { // p_mobj // don't add P_SetMobjState or P_SetPlayerMobjState, use "mobj.state = S_NEWSTATE" instead. {"P_SpawnMobj",lib_pSpawnMobj}, + {"P_SpawnMobjFromMobj",lib_pSpawnMobjFromMobj}, {"P_RemoveMobj",lib_pRemoveMobj}, {"P_IsValidSprite2", lib_pIsValidSprite2}, {"P_SpawnLockOn", lib_pSpawnLockOn}, diff --git a/src/p_enemy.c b/src/p_enemy.c index 450e4883d..e1d5744ae 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -9505,7 +9505,7 @@ void A_Repeat(mobj_t *actor) return; #endif - if ((!(actor->extravalue2)) || actor->extravalue2 > locvar1) + if (locvar1 && (!actor->extravalue2 || actor->extravalue2 > locvar1)) actor->extravalue2 = locvar1; if (--actor->extravalue2 > 0) @@ -10893,8 +10893,6 @@ void A_Boss5Jump(mobj_t *actor) // Okay, complicated math done. Let's make this object jump already. A_FaceTracer(actor); - if (actor->info->activesound) - S_StartSound(actor, actor->info->activesound); if (actor->eflags & MFE_VERTICALFLIP) actor->z--; diff --git a/src/sounds.c b/src/sounds.c index 2f5f6acf0..36dc964e3 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -299,7 +299,7 @@ sfxinfo_t S_sfx[NUMSFX] = {"s3k49", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Falling rock"}, {"s3k4a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Grab"}, {"s3k4b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Water splash"}, - {"s3k4c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Heavy landing"}, + {"s3k4c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Heavy hit"}, {"s3k4d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Firing bullet"}, {"s3k4e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Bomb explosion"}, {"s3k4f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Flamethrower"},