Module:TheEntireCastOfEoSD
Jump to navigation
Jump to search
Documentation for this module may be created at Module:TheEntireCastOfEoSD/doc
p = {}
core_str = [[{
"width": 320, "height": 480, "background": "black",
"signals": [
{"name": "gameover", "init": false, "streams": [
{"type":"mouseover","expr": "gameover"}]},
{"name": "timer", "init": 0, "streams": [
{"type":"mouseover","expr": "if(gameover, timer, timer + 1)"}]},
{"name": "dAngle", "init": 0, "streams": [
{"type": "mouseover", "expr": "(dAngle + 1) % 360"}]},
{"name": "currAngle", "init": 0, "streams": [
{"type": "mouseover", "expr": "1080*pow(sin(timer/50), 5)"}]},
{"name": "key_w", "init": 0, "streams": [
{"type":"*:keydown[event.key=='w']","expr":"1"},
{"type":"*:keyup[event.key=='w']","expr":"0"},
{"type":"*:keydown[event.key=='W']","expr":"1"},
{"type":"*:keyup[event.key=='W']","expr":"0"}]},
{"name": "key_a", "init": 0, "streams": [
{"type":"*:keydown[event.key=='a']","expr":"1"},
{"type":"*:keyup[event.key=='a']","expr":"0"},
{"type":"*:keydown[event.key=='A']","expr":"1"},
{"type":"*:keyup[event.key=='A']","expr":"0"}]},
{"name": "key_s", "init": 0, "streams": [
{"type":"*:keydown[event.key=='s']","expr":"1"},
{"type":"*:keyup[event.key=='s']","expr":"0"},
{"type":"*:keydown[event.key=='S']","expr":"1"},
{"type":"*:keyup[event.key=='S']","expr":"0"}]},
{"name": "key_d", "init": 0, "streams": [
{"type":"*:keydown[event.key=='d']","expr":"1"},
{"type":"*:keyup[event.key=='d']","expr":"0"},
{"type":"*:keydown[event.key=='D']","expr":"1"},
{"type":"*:keyup[event.key=='D']","expr":"0"}]},
{"name": "key_shift", "init": 0, "streams": [
{"type":"*:keydown[event.shiftKey]","expr":"1"},
{"type":"*:keyup[event.shiftKey]","expr":"0"}]},
{"name": "playery", "init": 400, "streams": [
{"type":"mouseover","expr": "if(gameover, playery, clamp(playery + (key_s-key_w)*(6-3*key_shift), 0, height))"}
]},
{"name": "playerx", "init": 160, "streams": [
{"type":"mouseover","expr": "if(gameover, playerx, clamp(playerx + (key_d-key_a)*(6-3*key_shift), 0, width))"}
]},
{"name": "pos", "init": {"x": 145, "y": 385}, "streams": [
{"type": "mouseover", "expr": "{x: playerx - 15, y:playery - 15}"}
]}
],
"marks": [
{"type": "image",
"properties": {
"enter": {
"url": {"value": "wikifile:///DiaNiko.png"}
},
"update": {
"x": {"signal":"pos.x"},
"y": {"signal":"pos.y"},
"aspect": {"value": "true"},
"width": {"value": 31},
"height": {"value": 31}
}
}},
{"type": "image",
"properties": {
"enter": {
"url": {"value": "wikifile:///TECOEoSD-Sprite.png"}
},
"update": {
"x": {"value":137},
"y": {"value":45},
"aspect": {"value": "true"},
"width": {"value": 46},
"height": {"value": 71}
}
}}
]
}]]
gameover_blocker = mw.text.jsonDecode([[
{"type": "rect", "properties": {
"enter": {
"x": {"value": 0},
"y": {"value": 0},
"width": {"value": 320},
"height": {"value": 480},
"fill": {"value": "grey"}
},
"update": {
"opacity": {"signal": "gameover"}
}
}}]])
gameover_text = mw.text.jsonDecode([[
{"type": "text", "properties": {
"enter": {
"x": {"value": 160},
"y": {"value": 200},
"width": {"value": 320},
"height": {"value": 200},
"align": {"value": "center"},
"baseline": {"value": "top"},
"fontWeight": {"value": "bold"},
"fontSize": {"value": 36},
"fill": {"value": "white"},
"stroke": {"value": "lightblue"},
"strokeWidth": {"value": 2}
},
"update": {
"text": {"value": "Game Over"},
"opacity": {"signal": "gameover"}
}
}}]])
gameover_score = mw.text.jsonDecode([[
{"type": "text", "properties": {
"enter": {
"x": {"value": 160},
"y": {"value": 250},
"width": {"value": 320},
"height": {"value": 200},
"align": {"value": "center"},
"baseline": {"value": "top"},
"fontWeight": {"value": "bold"},
"fontSize": {"value": 20},
"fill": {"value": "white"},
"stroke": {"value": "lightblue"},
"strokeWidth": {"value": 1}
},
"update": {
"text": {"template": "Score: {{timer|number:'09d'}}00"},
"opacity": {"signal": "gameover"}
}
}}]])
ARMS = 12
-- Radius
local function formatR(i)
return "if(timer < " ..i.. " || gameover, bulletR"..i.." , if(bulletR"..i.. " > 497, 0, bulletR"..i.." + 5))"
end
-- Angle
local function formatT(i)
return "if(bulletR" ..i.. " <= 5, currAngle, bulletT" ..i.. ")"
end
local function formatBulletSignal(i, j)
angle = "bulletT" ..i.. " + " .. (math.floor(360 / ARMS) * (j-1))
return "{x: 160 + bulletR" .. i .. " * cos((" .. angle .. ") * PI/180), "..
"y: 80 + bulletR" .. i .. " * sin((" .. angle .. ") * PI/180)}"
end
function formatJson()
core = mw.text.jsonDecode(core_str)
gameover_str = "gameover"
for i = 1,101 do
table.insert(core.signals, {name = "bulletR"..i, init = 500, streams = {
{type = "mouseover", expr = formatR(i)}
}});
table.insert(core.signals, {name = "bulletT"..i, init = 0, streams = {
{type = "mouseover", expr = formatT(i)}
}});
for j = 1,ARMS do
table.insert(core.signals, {name = "bulletRing"..i.."Num"..j, init = {x = 100, y = 100, a = 0}, streams = {
{type = "mouseover", expr = formatBulletSignal(i,j)}
}});
table.insert(core.marks, {type = "symbol", properties = {
enter = {
shape = {value = "circle"},
size = {value = 20},
fill= {value = "white"},
stroke = {value = "red"},
strokeWidth = {value = 1}
},
update = {
xc = {signal = "bulletRing"..i.."Num"..j..".x"},
yc = {signal = "bulletRing"..i.."Num"..j..".y"}
}
}})
gameover_str = gameover_str ..
" | (pow(playerx - bulletRing"..i.."Num"..j..".x, 2) + pow(playery - bulletRing"..i.."Num"..j..".y, 2) < 25)"
end
end
core.signals[1].streams[1].expr = gameover_str
table.insert(core.marks, gameover_blocker)
table.insert(core.marks, gameover_text)
table.insert(core.marks, gameover_score)
return mw.text.jsonEncode(core)
end
p.process = function(frame)
return frame:preprocess("<graph>" .. formatJson() .. "</graph>")
end
p.formatJson = formatJson;
return p