april fools
This commit is contained in:
parent
c49702c33b
commit
aabc4bdaee
149
leaderboard.lua
149
leaderboard.lua
@ -12,6 +12,10 @@ local splits = {}
|
|||||||
local PATCH = nil
|
local PATCH = nil
|
||||||
local help = true
|
local help = true
|
||||||
|
|
||||||
|
local LIFE = {}
|
||||||
|
local faceranks = {}
|
||||||
|
local dvd = {}
|
||||||
|
|
||||||
local UNCLAIMED = "Unclaimed Record"
|
local UNCLAIMED = "Unclaimed Record"
|
||||||
local HELP_MESSAGE = "\x89Leaderboard Commands:\nretry exit findmap changelevel spba_clearcheats lb_gui rival scroll"
|
local HELP_MESSAGE = "\x89Leaderboard Commands:\nretry exit findmap changelevel spba_clearcheats lb_gui rival scroll"
|
||||||
local FILENAME = "leaderboard.txt"
|
local FILENAME = "leaderboard.txt"
|
||||||
@ -531,6 +535,23 @@ COM_AddCommand("rival", findRival)
|
|||||||
-- end
|
-- end
|
||||||
--end
|
--end
|
||||||
|
|
||||||
|
|
||||||
|
local cellSize = 16
|
||||||
|
local function spawnCells(n)
|
||||||
|
local p = leveltime
|
||||||
|
for i = 0,n do
|
||||||
|
local x = (i * p) % (320/cellSize)
|
||||||
|
p = p + 7
|
||||||
|
local y = (i * p) % (200/cellSize)
|
||||||
|
p = p % 42 + 1
|
||||||
|
|
||||||
|
if not(LIFE[x] and LIFE[y]) then
|
||||||
|
LIFE[x] = $ or {}
|
||||||
|
LIFE[x][y] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
addHook("MapLoad", function()
|
addHook("MapLoad", function()
|
||||||
timeFinished = 0
|
timeFinished = 0
|
||||||
splits = {}
|
splits = {}
|
||||||
@ -541,9 +562,18 @@ addHook("MapLoad", function()
|
|||||||
|
|
||||||
allowJoin(true)
|
allowJoin(true)
|
||||||
--printTable(lb)
|
--printTable(lb)
|
||||||
|
|
||||||
|
LIFE = {}
|
||||||
|
dvd = {}
|
||||||
end
|
end
|
||||||
)
|
)
|
||||||
|
|
||||||
|
local function life(player, ...)
|
||||||
|
local n = ...
|
||||||
|
spawnCells(n)
|
||||||
|
end
|
||||||
|
COM_AddCommand("life", life)
|
||||||
|
|
||||||
function ticsToTime(tics, pure)
|
function ticsToTime(tics, pure)
|
||||||
if tics == 0 and pure then
|
if tics == 0 and pure then
|
||||||
return "-:--:--"
|
return "-:--:--"
|
||||||
@ -557,6 +587,111 @@ function ticsToTime(tics, pure)
|
|||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function ticLife()
|
||||||
|
local neigh = {}
|
||||||
|
local new = {}
|
||||||
|
|
||||||
|
for x, t in pairs(LIFE) do
|
||||||
|
for y, v in pairs(t) do
|
||||||
|
neigh[x-1] = $ or {}
|
||||||
|
neigh[x] = $ or {}
|
||||||
|
neigh[x+1] = $ or {}
|
||||||
|
|
||||||
|
neigh[x-1][y-1] = $ and $ + 1 or 1
|
||||||
|
neigh[x-1][y] = $ and $ + 1 or 1
|
||||||
|
neigh[x-1][y+1] = $ and $ + 1 or 1
|
||||||
|
|
||||||
|
neigh[x][y-1] = $ and $ + 1 or 1
|
||||||
|
neigh[x][y+1] = $ and $ + 1 or 1
|
||||||
|
|
||||||
|
neigh[x+1][y-1] = $ and $ + 1 or 1
|
||||||
|
neigh[x+1][y] = $ and $ + 1 or 1
|
||||||
|
neigh[x+1][y+1] = $ and $ + 1 or 1
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for x, t in pairs(neigh) do
|
||||||
|
if x >= 0 and x * cellSize < 320 then
|
||||||
|
for y, v in pairs(t) do
|
||||||
|
if y >= 0 and y * cellSize < 200 then
|
||||||
|
-- 3 neighbours dead cell
|
||||||
|
if v == 3 and (LIFE[x] == nil or LIFE[x][y] == nil) then
|
||||||
|
new[x] = $ or {}
|
||||||
|
new[x][y] = true
|
||||||
|
elseif v >= 2 and v <= 3 and (LIFE[x] and LIFE[x][y] != nil) then
|
||||||
|
new[x] = $ or {}
|
||||||
|
new[x][y] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
LIFE = new
|
||||||
|
end
|
||||||
|
|
||||||
|
local function drawLife(v, player)
|
||||||
|
for x, t in pairs(LIFE) do
|
||||||
|
for y, _ in pairs(t) do
|
||||||
|
v.drawScaled(
|
||||||
|
x * cellSize * FRACUNIT,
|
||||||
|
y * cellSize * FRACUNIT,
|
||||||
|
FixedDiv(cellSize * FRACUNIT, 16 * FRACUNIT),
|
||||||
|
PATCH["FACERANK"][faceranks[((x + y) % #faceranks) + 1]],
|
||||||
|
0,
|
||||||
|
v.getColormap("sonic", player.skincolor)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function spawnDvd(p)
|
||||||
|
local size = (((p + leveltime) % 3) + 1) * 16
|
||||||
|
local rank = (#faceranks and faceranks[((p + leveltime) % #faceranks) + 1]) or "sonic"
|
||||||
|
local d = {
|
||||||
|
["x"] = max(((p + leveltime % 320) - size), 0) * FRACUNIT,
|
||||||
|
["y"] = max(((p + leveltime % 200) - size), 0) * FRACUNIT,
|
||||||
|
["xvel"] = (((p + leveltime) % 7) + 1) * FRACUNIT / 2,
|
||||||
|
["yvel"] = (((p + leveltime) % 5) + 1) * FRACUNIT / 2,
|
||||||
|
["rank"] = rank,
|
||||||
|
["color"] = ((p + leveltime) % MAXSKINCOLORS - 1) + 1,
|
||||||
|
["size"] = size,
|
||||||
|
}
|
||||||
|
|
||||||
|
table.insert(dvd, d)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function ticDvd()
|
||||||
|
for i, d in ipairs(dvd) do
|
||||||
|
d.x = $ + d.xvel
|
||||||
|
d.y = $ + d.yvel
|
||||||
|
|
||||||
|
if d.x < 0 or d.x + d.size * FRACUNIT > 320 * FRACUNIT then
|
||||||
|
d.xvel = -$
|
||||||
|
clamp(0, d.x, 320 * FRACUNIT)
|
||||||
|
end
|
||||||
|
|
||||||
|
if d.y < 0 or d.y + d.size * FRACUNIT > 200 * FRACUNIT then
|
||||||
|
d.yvel = -$
|
||||||
|
clamp(0, d.y, 200 * FRACUNIT)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function drawDvd(v, player)
|
||||||
|
for i, d in ipairs(dvd) do
|
||||||
|
v.drawScaled(
|
||||||
|
d.x,
|
||||||
|
d.y,
|
||||||
|
FixedDiv(d.size * FRACUNIT, 16 * FRACUNIT),
|
||||||
|
PATCH["FACERANK"][d.rank],
|
||||||
|
0,
|
||||||
|
v.getColormap("sonic", d.color)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- Item patches have the amazing property of being displaced 12x 13y pixels
|
-- Item patches have the amazing property of being displaced 12x 13y pixels
|
||||||
local iXoffset = 13 * FRACUNIT
|
local iXoffset = 13 * FRACUNIT
|
||||||
local iYoffset = 12 * FRACUNIT
|
local iYoffset = 12 * FRACUNIT
|
||||||
@ -814,6 +949,9 @@ local function drawScoreboard(v, player)
|
|||||||
|
|
||||||
cachePatches(v)
|
cachePatches(v)
|
||||||
|
|
||||||
|
drawLife(v, player)
|
||||||
|
drawDvd(v, player)
|
||||||
|
|
||||||
local scoreTable = getScoreTable(gamemap, Flags)
|
local scoreTable = getScoreTable(gamemap, Flags)
|
||||||
|
|
||||||
local gui = cv_gui.value
|
local gui = cv_gui.value
|
||||||
@ -841,6 +979,7 @@ function cachePatches(v)
|
|||||||
PATCH["FACERANK"] = {}
|
PATCH["FACERANK"] = {}
|
||||||
for skin in skins.iterate do
|
for skin in skins.iterate do
|
||||||
PATCH["FACERANK"][skin.name] = v.cachePatch(skin.facerank)
|
PATCH["FACERANK"][skin.name] = v.cachePatch(skin.facerank)
|
||||||
|
table.insert(faceranks, skin.name)
|
||||||
end
|
end
|
||||||
|
|
||||||
PATCH["SPB"] = v.cachePatch("K_ISSPB")
|
PATCH["SPB"] = v.cachePatch("K_ISSPB")
|
||||||
@ -959,6 +1098,10 @@ end
|
|||||||
|
|
||||||
local function regLap(player)
|
local function regLap(player)
|
||||||
if player.laps > prevLap and timeFinished == 0 then
|
if player.laps > prevLap and timeFinished == 0 then
|
||||||
|
spawnCells(1000)
|
||||||
|
for i = 0,player.laps * 3 do
|
||||||
|
spawnDvd((i + 1) + 7)
|
||||||
|
end
|
||||||
prevLap = player.laps
|
prevLap = player.laps
|
||||||
table.insert(splits, player.realtime)
|
table.insert(splits, player.realtime)
|
||||||
showSplit = 5 * TICRATE
|
showSplit = 5 * TICRATE
|
||||||
@ -1006,6 +1149,12 @@ local function think()
|
|||||||
|
|
||||||
showSplit = max(0, showSplit - 1)
|
showSplit = max(0, showSplit - 1)
|
||||||
|
|
||||||
|
if leveltime % 10 == 0 then
|
||||||
|
ticLife()
|
||||||
|
end
|
||||||
|
|
||||||
|
ticDvd()
|
||||||
|
|
||||||
local p = getGamer()
|
local p = getGamer()
|
||||||
if leveltime < START_TIME then
|
if leveltime < START_TIME then
|
||||||
-- Help message
|
-- Help message
|
||||||
|
Loading…
Reference in New Issue
Block a user