local meteors = CV_RegisterVar({"meteors", "On", CV_NETVAR, CV_OnOff}) local meteorsFallIntensity = CV_RegisterVar({"intensity", "200", CV_NETVAR, {MIN = 1, MAX = 255}}) local meteorsFallDistance = CV_RegisterVar({"distance", "4096", CV_NETVAR, CV_Natural}) local function meteorsFall() if meteors.value for player in players.iterate while P_Random() < meteorsFallIntensity.value //local distance = P_RandomKey(meteorsFallDistance.value) //local angle = P_RandomRange(-16384 * FRACUNIT, 16384 * FRACUNIT) * 2 //local x, y = player.mo.x + distance * cos(angle), player.mo.y + distance * sin(angle) local x, y repeat x, y = player.mo.x + P_RandomRange(-meteorsFallDistance.value, meteorsFallDistance.value) * FRACUNIT, player.mo.y + P_RandomRange(-meteorsFallDistance.value, meteorsFallDistance.value) * FRACUNIT until FixedHypot(x - player.mo.x, y - player.mo.y) <= meteorsFallDistance.value * FRACUNIT local mobj = P_SpawnMobj(x, y, player.mo.subsector.sector.ceilingheight, MT_FALLINGROCK) mobj.scale = FRACUNIT + P_Random() * FRACUNIT / 64 if P_CheckPosition(mobj, x, y, mobj.z) and mobj.subsector.sector.ceilingheight - mobj.subsector.sector.floorheight >= mobj.height and mobj.subsector.sector.ceilingpic == "F_SKY1\0\0" mobj.momz = -16 * FRACUNIT - P_Random() * (FRACUNIT / 16) else P_RemoveMobj(mobj) end end end end end addHook("ThinkFrame", meteorsFall)