diff --git a/src/deh_lua.c b/src/deh_lua.c index 99c00ca33..c36ebc034 100644 --- a/src/deh_lua.c +++ b/src/deh_lua.c @@ -463,6 +463,42 @@ static inline int lib_getenum(lua_State *L) } return luaL_error(L, "power '%s' could not be found.\n", word); } + else if (!mathlib && fastncmp("k_",word,2)) { + p = word+2; + for (i = 0; i < NUMKARTSTUFF; i++) + if (fasticmp(p, KARTSTUFF_LIST[i])) { + lua_pushinteger(L, i); + return 1; + } + return 0; + } + else if (mathlib && fastncmp("K_",word,2)) { // SOCs are ALL CAPS! + p = word+2; + for (i = 0; i < NUMKARTSTUFF; i++) + if (fastcmp(p, KARTSTUFF_LIST[i])) { + lua_pushinteger(L, i); + return 1; + } + return luaL_error(L, "kartstuff '%s' could not be found.\n", word); + } + else if (!mathlib && fastncmp("khud_",word,5)) { + p = word+5; + for (i = 0; i < NUMKARTHUD; i++) + if (fasticmp(p, KARTHUD_LIST[i])) { + lua_pushinteger(L, i); + return 1; + } + return 0; + } + else if (mathlib && fastncmp("KHUD_",word,5)) { // SOCs are ALL CAPS! + p = word+5; + for (i = 0; i < NUMKARTHUD; i++) + if (fastcmp(p, KARTHUD_LIST[i])) { + lua_pushinteger(L, i); + return 1; + } + return luaL_error(L, "karthud '%s' could not be found.\n", word); + } else if (fastncmp("HUD_",word,4)) { p = word+4; for (i = 0; i < NUMHUDITEMS; i++) diff --git a/src/deh_tables.h b/src/deh_tables.h index d094bcbad..53c52fbfa 100644 --- a/src/deh_tables.h +++ b/src/deh_tables.h @@ -67,6 +67,8 @@ extern const char *const GAMETYPERULE_LIST[]; extern const char *const ML_LIST[16]; // Linedef flags extern const char *COLOR_ENUMS[]; extern const char *const POWERS_LIST[]; +extern const char *const KARTSTUFF_LIST[]; +extern const char *const KARTHUD_LIST[]; extern const char *const HUDITEMS_LIST[]; extern const char *const MENUTYPES_LIST[]; diff --git a/src/p_mobj.c b/src/p_mobj.c index df05e6983..7810636e1 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -9293,6 +9293,9 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) P_SetThingPosition(mobj); I_Assert(mobj->subsector != NULL); + // Make sure scale matches destscale immediately when spawned + P_SetScale(mobj, mobj->destscale); + mobj->floorz = P_GetSectorFloorZAt (mobj->subsector->sector, x, y); mobj->ceilingz = P_GetSectorCeilingZAt(mobj->subsector->sector, x, y); @@ -10462,7 +10465,8 @@ void P_SpawnPlayer(INT32 playernum) p->skincolor = skincolor_blueteam; } - p->powers[pw_flashing] = K_GetKartFlashing(p); // Babysitting deterrent + if (leveltime >= introtime) + p->powers[pw_flashing] = K_GetKartFlashing(p); // Babysitting deterrent mobj = P_SpawnMobj(0, 0, 0, MT_PLAYER); (mobj->player = p)->mo = mobj; @@ -12038,14 +12042,16 @@ static void P_SetObjectSpecial(mobj_t *mobj) static mobj_t *P_SpawnMobjFromMapThing(mapthing_t *mthing, fixed_t x, fixed_t y, fixed_t z, mobjtype_t i) { + fixed_t relativise = FixedDiv(mthing->scale, mapobjectscale); + mobj_t *mobj = NULL; boolean doangle = true; mobj = P_SpawnMobj(x, y, z, i); mobj->spawnpoint = mthing; - P_SetScale(mobj, FixedMul(mobj->scale, mthing->scale)); - mobj->destscale = FixedMul(mobj->destscale, mthing->scale); + P_SetScale(mobj, FixedMul(mobj->scale, relativise)); + mobj->destscale = FixedMul(mobj->destscale, relativise); if (!P_SetupSpawnedMapThing(mthing, mobj, &doangle)) return mobj; diff --git a/src/p_user.c b/src/p_user.c index e1d6838b5..790cf9031 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4592,8 +4592,7 @@ void P_PlayerThink(player_t *player) || player->kartstuff[k_growshrinktimer] > 0 // Grow doesn't flash either. || (player->respawn.state != RESPAWNST_NONE) // Respawn timer (for drop dash effect) || (player->pflags & PF_GAMETYPEOVER) // NO CONTEST explosion - || ((gametyperules & GTR_BUMPERS) && player->bumpers <= 0 && player->karmadelay) - || leveltime < starttime)) // Level intro + || ((gametyperules & GTR_BUMPERS) && player->bumpers <= 0 && player->karmadelay))) { if (player->powers[pw_flashing] > 0 && player->powers[pw_flashing] < K_GetKartFlashing(player) && (leveltime & 1))