Compare commits

...

No commits in common. "master" and "gh-pages" have entirely different histories.

12 changed files with 849 additions and 9600 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,395 +0,0 @@
--[[
Laser Blast
Inspired by Space Invaders, Astro Smash and a bit of Arkanoid
Destroy falling asteroids and collect powerups
Written by: Nitrogen Fingers
]]--
local version = 1.0
local reponame = "Laser Blast"
local requiresColour = false
if requiresColour then
print("This game can only be played on an Advanced Computer.")
end
local function displayNitrosoftTitle()
term.clear()
local _w,_h = term.getSize()
for i=1,math.random(1,10)+10 do
term.setCursorPos(math.random(1,_w), math.random(1,_h))
term.setTextColour(colours.yellow)
term.write(".")
end
local _t1,_t2 = "nitrosoft", "games"
term.setCursorPos(math.floor(_w/2-#_t1), math.floor(_h/2))
if term.isColour() then term.setTextColour(colours.blue) end
term.write(_t1)
term.setCursorPos(math.floor(_w/2-#_t2/2),math.floor(_h/2)+1)
term.setTextColour(colours.white)
term.write(_t2)
term.setCursorPos(math.floor(_w/2-#_t1), math.floor(_h/2)+2)
if term.isColour() then term.setTextColour(colours.red) end
term.write(string.rep("-",#_t1*2))
if term.isColour() then
term.setBackgroundColour(colours.green)
term.setCursorPos(_w/2+#_t1-4, math.floor(_h/2)-2)
term.write(" ")
term.setCursorPos(_w/2+#_t1-4, math.floor(_h/2)-1)
term.write(" ")
term.setBackgroundColour(colours.lime)
term.setCursorPos(_w/2+#_t1-3, math.floor(_h/2)-1)
term.write(" ")
term.setCursorPos(_w/2+#_t1-3, math.floor(_h/2))
term.write(" ")
end
term.setBackgroundColour(colours.black)
term.setTextColour(colours.white)
term.setCursorPos(1,_h)
term.write("v"..version)
os.pullEvent("key")
end
displayNitrosoftTitle()
local w,h = term.getSize()
local plpos = math.floor(w/2)
--music stuff
local minterval = 1
local mtimer = 1
local left = false
local level = 1
local score = 0
local gameover=false
local killc = 0
--x,y,dir
local projlist = {}
--x,y,intvspeed,dtimer
local baddylist = {}
local btimer = 0
local bintv = 1
local utime = 0
local bsmp = 6
local powerup = 0
--Landscape and stars
local stars = {}
for i=1,math.random()*10+10 do
stars[i] = { x = math.ceil(math.random()*w),
y = math.ceil(math.random() * h-8) }
end
local landscape = {
[6]=" _____________ ";
[5]=" _______ / \\_____ ";
[4]=" / \\___/____ \\_________";
[3]=" / \\ ";
[2]=" / \\_________ ";
[1]="______/ \\______________";
}
function drawHeader()
if term.isColour() then term.setTextColour(colours.white) end
term.setCursorPos(5, 1)
term.write("Score: "..score)
if score~=0 then term.write("00") end
local lstr = "Level: "..level
term.setCursorPos(w-#lstr-5,1)
term.write(lstr)
if powerup > 0 then
local pstr = "POWERUP"
term.setCursorPos(w/2 - #pstr/2,1)
if term.isColour() then term.setTextColour(colours.cyan) end
term.write(pstr)
end
end
function drawPlayer()
if term.isColour() then term.setTextColour(colours.white) end
term.setCursorPos(plpos-1, h-1)
term.write("@@@")
end
function drawProjectile(proj)
if term.isColour() then term.setTextColour(colours.red) end
term.setCursorPos(proj.x, proj.y)
term.write("|")
end
function drawVacance(x,y)
term.setCursorPos(x, y)
for _,baddy in pairs(baddylist) do
if baddy.x == x and baddy.y == y and baddy.dtimer > 0 then
drawBaddie(baddy)
return
end
end
if y >= h-8 and y <= h-3 then
if term.isColour() then term.setTextColour(colours.lime) end
term.write(string.sub(landscape[h - y - 2], x, x))
elseif y < h-8 then
for i=1,#stars do
if x == stars[i].x and y == stars[i].y then
if term.isColour() then term.setTextColour(colours.yellow) end
term.write(".")
return
end
end
term.write(" ")
else
term.write(" ")
end
end
function drawBaddie(baddy)
term.setCursorPos(baddy.x, baddy.y)
if baddy.dtimer==0 then
if baddy.pup then
if term.isColour() then term.setTextColour(colours.blue) end
term.write("P")
elseif baddy.frag then
if term.isColour() then term.setTextColour(colours.brown) end
term.write("*")
else
if term.isColour() then term.setTextColour(colours.brown) end
term.write("O")
end
else
if term.isColour() then term.setTextColour(colours.orange) end
term.write("#")
end
end
--This now only needs to be called once. Awesome!
function drawWorld()
drawLandscape()
drawPlayer()
drawHeader()
end
function drawLandscape()
if term.isColour() then
term.setTextColour(colours.yellow)
end
for i=1,#stars do
term.setCursorPos(stars[i].x, stars[i].y)
term.write(".")
end
term.setCursorPos(1,h)
local land = string.rep("-", w)
if term.isColour() then
term.setTextColour(colours.green)
end
term.write(land)
if term.isColour() then
term.setTextColour(colours.lime)
end
for y,line in ipairs(landscape) do
term.setCursorPos(1,h-y-2)
term.write(line)
end
end
function updateWorld()
--The music stuff
redstone.setOutput("back", false)
mtimer=mtimer-utime
if mtimer<=0 then
mtimer = minterval
if left then
redstone.setOutput("left", true)
redstone.setOutput("right", false)
else
redstone.setOutput("left", false)
redstone.setOutput("right", true)
end
left = not left
end
local i=1
while i<=#projlist do
drawVacance(projlist[i].x, projlist[i].y)
projlist[i].y = projlist[i].y+projlist[i].dir
if projlist[i].y <= 1 or projlist[i].y > h-1 then
table.remove(projlist,i)
i=i-1
else drawProjectile(projlist[i]) end
i=i+1
end
i=1
while i<=#baddylist do
local baddy = baddylist[i]
baddy.timer=baddy.timer+utime
if baddy.y==h-1 and math.abs(baddy.x-plpos)<2 then
if baddy.pup then
powerup = 10
drawPlayer()
else
gameover = true
redstone.setOutput("back", true)
end
end
j=1
while j<=#projlist do
local proj = projlist[j]
if baddy.x==proj.x and math.abs(baddy.y-proj.y)<2
and baddy.dtimer==0 then
baddy.dtimer = 0.5
drawBaddie(baddy)
drawVacance(projlist[j].x, projlist[j].y)
table.remove(projlist,j)
j=j-1
score=score+5
redstone.setOutput("back", true)
killc=killc+1
if killc>5+(level*5) and level<10 then levelUp() end
drawHeader()
--Adds fragments
if math.random(1, 5) == 2 and not baddy.frag then
table.insert(baddylist, {
x = baddy.x-1,
y = baddy.y,
pup = false,
frag = true,
timer = 0,
dtimer = 0,
speed = baddy.speed/2
})
drawBaddie(baddylist[#baddylist])
table.insert(baddylist, {
x = baddy.x+1,
y = baddy.y,
pup = false,
frag = true,
timer = 0,
dtimer = 0,
speed = baddy.speed/2
})
drawBaddie(baddylist[#baddylist])
end
end
j=j+1
end
if baddy.timer>baddy.speed and baddy.dtimer==0 then
drawVacance(baddy.x, baddy.y)
baddy.y=baddy.y+1
if baddy.y==h then
table.remove(baddylist,i)
i=i-1
score=score-1
drawHeader()
else
drawBaddie(baddy)
baddy.timer = 0
end
elseif baddy.dtimer>0 then
baddy.dtimer=baddy.dtimer-utime
if baddy.dtimer<=0 then
drawVacance(baddy.x, baddy.y)
table.remove(baddylist,i)
i=i-1
end
end
i=i+1
end
btimer=btimer+utime
if btimer > bintv then
table.insert(baddylist, {
x = math.random(w/4, 3*(w/4)),
y = 2,
speed = utime*bsmp,
timer = 0,
dtimer = 0,
pup = math.random(1,20)==5,
frag = false
})
drawBaddie(baddylist[#baddylist])
btimer=0
end
end
function levelUp()
level=level+1
bintv=bintv-0.10
bsmp=bsmp-0.5
killc=0
minterval=minterval-0.10
end
function updatePlayer(key)
if powerup>0 then
powerup = powerup-utime
end
if key==203 and plpos>1 then
term.setCursorPos(plpos+1,h-1)
term.write(" ")
plpos=plpos-1
drawPlayer()
elseif key==205 and plpos<w then
term.setCursorPos(plpos-1,h-1)
term.write(" ")
plpos=plpos+1
drawPlayer()
elseif key==57 then
if powerup>0 then
table.insert(projlist, {
dir = -1,
x = plpos+1,
y = h-2
})
drawProjectile(projlist[#projlist])
table.insert(projlist, {
dir = -1,
x = plpos-1,
y = h-2
})
drawProjectile(projlist[#projlist])
else
table.insert(projlist, {
dir = -1,
x = plpos,
y = h-2
})
drawProjectile(projlist[#projlist])
end
end
end
term.setBackgroundColour(colours.black)
term.clear()
drawWorld()
local wtimer os.startTimer(utime)
while not gameover do
local e, v = os.pullEvent()
if e=="timer" then
updateWorld()
wtimer = os.startTimer(utime)
elseif e=="key" then
if v==28 then break end
updatePlayer(v)
end
end
term.setCursorPos(plpos-1, h-1)
if term.isColour() then term.setTextColour(colours.red) end
term.write("###")
local go = "Game Over!"
term.setCursorPos(w/2 - #go/2, 10)
if term.isColour() then term.setTextColour(colours.white) end
term.write(go)
term.setCursorPos(1,h)
sleep(5)
redstone.setOutput("back", false)
term.clear()

File diff suppressed because it is too large Load Diff

View File

@ -1,254 +0,0 @@
--[[ Skyfall
By Nitrogenfingers
]]--
local version = 1
local reponame = "Skyfall"
local requiresColour = true
if requiresColour then
print("This game can only be played on an Advanced Computer.")
end
local function displayNitrosoftTitle()
sub.clr()
local _w,_h = sub.winSize()
local _t1,_t2 = "nitrosoft", "games"
sub.cursPos(math.floor(_w/2-#_t1), math.floor(_h/2))
if term.isColour() then sub.setTxt("blue") end
term.write(_t1)
sub.cursPos(math.floor(_w/2-#_t2/2),math.floor(_h/2)+1)
sub.setTxt("white")
term.write(_t2)
if term.isColour() then sub.setTxt("red") end
sub.cursPos(math.floor(_w/2-#_t1), math.floor(_h/2)+2)
term.write(string.rep("-",#_t1*2))
if term.isColour() then
sub.setBg("green")
sub.cursPos(_w/2+#_t1-4, math.floor(_h/2)-2)
term.write(" ")
sub.cursPos(_w/2+#_t1-4, math.floor(_h/2)-1)
term.write(" ")
sub.setBg("lime")
sub.cursPos(_w/2+#_t1-3, math.floor(_h/2)-1)
term.write(" ")
sub.cursPos(_w/2+#_t1-3, math.floor(_h/2))
term.write(" ")
end
sub.setBg("black")
sub.setTxt("white")
sub.cursPos(1,_h)
term.write("v"..version)
os.pullEvent("key")
end
displayNitrosoftTitle()
local w,h = sub.winSize()
local levelbg = {colours.lightBlue, colours.blue, colours.black}
local level = {}
local title = {
"##### ## # ## ## ##### ### ## ## ";
"## ## ## ## ## ## ##### ## ## ";
"##### #### ##### ### ## ## ## ## ";
" ## ## ## ### ## ##### ### ###";
"##### ## # ### ## ## ## ### ###";
}
local bgcol = colours.lightBlue
local pcol = colours.red
local flakes = {}
local px, py = math.floor(w/2), h
local pjump = 0
local jtimer, jinterval = nil,0.06
local gameOver = false
local levelnum = 1
local gintdef = 0.3
local gtimer, ginterval = nil,gintdef
local function makeLevel()
for y = 1, h+1 do
level[y] = {}
end
for x = 1, w do
level[h+1][x] = "#"
end
flakes = {}
end
local function updateTile(x,y)
sub.cursPos(x, y)
if level[y][x] == nil then sub.bg(bgcol)
else sub.setBg("white") end
term.write(" ")
end
local function drawPlayer()
if py <= 0 then return end
if level[py][px] == nil then
sub.cursPos(px, py)
term.setTextColour(pcol)
sub.bg(bgcol)
term.write("&")
end
end
local draw = function(self)
sub.cursPos(self.x,self.y)
sub.setBg("white")
term.write(" ")
end
local function drawLevel()
for y = 1, h do
for x = 1, w do
updateTile(x,y)
end
end
drawPlayer()
for i=1,#flakes do
sub.cursPos(flakes[i].x, flakes[i].y)
sub.setBg("white")
term.write(" ") -- What the fuck?
end
end
local function addFlake()
local x,y = math.random(1,w),1
level[y][x] = "#"
updateTile(x,y)
end
local function updateBG()
sub.bg(bgcol)
sub.setTxtColour("white")
for i=1,#flakes do
updateTile(flakes[i].x, flakes[i].y)
flakes[i].y = flakes[i].y + 1
if level[flakes[i].y][flakes[i].x] == nil then
sub.cursPos(flakes[i].x, flakes[i].y)
sub.bg(bgcol)
term.write(".")
end
end
for i=1,2 do
table.insert(flakes, {x = math.random(1,w), y = 1})
end
for i = #flakes,1,-1 do
if flakes[i].y >= h + 1 then
table.remove(flakes, i)
end
end
drawPlayer()
end
local function updateSnow()
for y = h-1,1,-1 do
for x = 1,w do
if level[y][x] ~= nil and level[y+1][x] == nil then
level[y][x] = nil
updateTile(x,y)
level[y+1][x] = "#"
updateTile(x,y+1)
end
end
end
if level[py][px] ~= nil then
if level[py+1][px] == nil then
py = py + 1
pjump = -1
else
gameOver = true
end
end
end
local function transitionLevel()
levelnum = levelnum + 1
bgcol = levelbg[math.min(levelnum, #levelbg)]
sub.bg(bgcol)
local ttimer = os.startTimer(0.1)
local inc = 0
while inc < h do
local id,p1 = os.pullEvent("timer")
if p1 == ttimer then
term.scroll(-1)
inc = inc + 1
ttimer = os.startTimer(0)
end
end
makeLevel()
ginterval = math.max(ginterval - 0.1, 0.1)
py = h
gtimer = os.startTimer(ginterval)
jtimer = os.startTimer(jinterval)
end
local function update()
local bgcount = 0
gtimer = os.startTimer(ginterval)
jtimer = os.startTimer(jinterval)
drawLevel()
while not gameOver do
local _id, _p1 = os.pullEvent()
if _id == "timer" then
if _p1 == gtimer then
updateSnow()
for i=0, math.random(0,levelnum) do
addFlake()
end
gtimer = os.startTimer(ginterval)
elseif _p1 == jtimer then
if pjump > 0 then
updateTile(px,py)
py = py -1
pjump = pjump - 1
if py <= 1 then
transitionLevel()
pjump = 0
end
elseif level[py+1][px] == nil then
updateTile(px,py)
py = py + 1
else
pjump = 0
end
drawPlayer()
jtimer = os.startTimer(jinterval)
end
bgcount = bgcount + 1
if bgcount % 8 == 0 then updateBG() end
elseif _id == "key" then
if _p1 == keys.left and px > 1 then
updateTile(px,py)
if level[py][px-1] == nil then
px = px - 1
elseif level[py-1][px] == nil and level[py-1][px-1] == nil then
px = px - 1
py = py - 1
end
drawPlayer()
elseif _p1 == keys.right and px < w then
updateTile(px,py)
if level[py][px+1] == nil then
px = px + 1
elseif level[py-1][px] == nil and level[py-1][px+1] == nil then
px = px + 1
py = py - 1
end
drawPlayer()
elseif _p1 == keys.space and level[py+1][px] ~= nil then
pjump = 2
elseif _p1 == keys.enter then
gameOver = true
end
end
end
end
makeLevel()
update()
sub.clrBg("black")

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +0,0 @@
NOTE: CrossBow has been abandoned until this point, and may be re-released at a later date.
# CrossBow
The next generation of consoles is dawning upon us, and with that Game Fusion and Nova have decided to usher in the new generation in style. Say hello to the future.
Featuring:
• A high-end, flexible and powerful file explorer, NovaBrowse, made specially for CrossBow.
• Cross-platform compatibility, including compatibility with CrossBow Portable.
• Smooth, real time animations in 1 line, thanks to the GFX API "Subsistence", coded specially for CrossBow [by Mr_Iron2]
• A true next-gen experience, with magnificent visuals coating the system in graphical brilliance
• And more!

View File

@ -1,154 +0,0 @@
-- Subsistence Graphical [GFX] API
-- [C] 2016-2018 Game Fusion
function line(y)
term.setCursorPos(1,y)
term.clearLine()
end
--function xWave(colour) broken right now
-- local w,h = term.getSize()
-- for i = 1,w do
-- term.setBackgroundColour(colours[colour])
-- term.setCursorPos(i,1)
-- term.clearLine()
-- end
--end
function yWave(colour)
local w,h = term.getSize()
term.setBackgroundColour(colours[colour])
for i = 1,h do
line(i)
sleep(0.1)
end
end
function yWave(colour)
local w,h = term.getSize()
term.setBackgroundColour(colours[colour])
for i = 1,h do
line(i)
sleep()
end
end
function fastSleep()
os.queueEvent("subsleep")
os.pullEvent()
end
function menuAnim(oc)
if oc == "open" then
for i=1,12 do
paintutils.drawLine(i,2,i,19,colours.orange)
sleep()
end
elseif oc == "close" then
for i=12,1,-1 do
paintutils.drawLine(i,2,i,19,colours.white)
sleep()
end
end
end
blit = term.blit
clr = term.clear
function center(y, str)
local w,h = term.getSize()
local x = (w/2)-(#str/2)
term.setCursorPos(x,y)
print(str)
end
cursPos = term.setCursorPos
cursBlink = term.setCursorBlink
function centerSlow(y, str)
local w,h = term.getSize()
local x = (w/2)-(#str/2)
term.setCursorPos(x,y)
textutils.slowPrint(str)
end
bg = term.setBackgroundColour
function setBg(col) -- thanks to MultMine for fix
term.setBackgroundColour(colours[col])
end
function setTxt(col)
term.setTextColour(colours[col])
end
function clrBg(back)
term.setBackgroundColour(colours[back])
term.clear()
end
function clrLine(y)
term.setCursorPos(1,y)
term.clearLine()
end
-- Window/display commands
winSize = term.getSize
newWindow = window.create
current = term.current
redirect = term.redirect
function setVis(bool)
local func = term.current().setVisible
if func then
func(bool)
end
end
function redraw()
local func = term.current().redraw
if func then
func()
end
end
function monTxtScale(size)
local func = term.current().setTextScale
if func then
func(size)
end
end
-- Paintutils derived commands
loadImg = paintutils.loadImage
drawImg = paintutils.drawImage
function drawPixel(x, y, col)
paintutils.drawPixel(x, y, colours[col])
end
function drawLine(x1, y1, x2, y2, col)
paintutils.drawLine(x1, y1, x2, y2, colours[col])
end
function drawBox(x1, y1, x2, y2, col)
paintutils.drawBox(x1, y1, x2, y2, colours[col])
end
function drawFilledBox(x1, y1, x2, y2, col)
paintutils.drawFilledBox(x1, y1, x2, y2, colours[col])
end
-- Textutils commands
slowWrite = textutils.slowWrite
slowPrint = textutils.slowPrint

50
index.html Normal file
View File

@ -0,0 +1,50 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="UTF-8">
<title>CrossBow by Game-Fusion</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="stylesheets/normalize.css" media="screen">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen">
<link rel="stylesheet" type="text/css" href="stylesheets/github-light.css" media="screen">
</head>
<body>
<section class="page-header">
<h1 class="project-name">CrossBow</h1>
<h2 class="project-tagline">The next generation of consoles.</h2>
<a href="https://github.com/Game-Fusion/CrossBow" class="btn">View on GitHub</a>
<a href="https://github.com/Game-Fusion/CrossBow/zipball/master" class="btn">Download .zip</a>
<a href="https://github.com/Game-Fusion/CrossBow/tarball/master" class="btn">Download .tar.gz</a>
</section>
<section class="main-content">
<h1>
<a id="crossbow" class="anchor" href="#crossbow" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>CrossBow</h1>
<h1>
<a id="say-hello-to-the-future" class="anchor" href="#say-hello-to-the-future" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Say hello to the future.</h1>
<p>The next generation of consoles is upon us, and with that Game Fusion and Nova have decided to usher in the new generation in style. Featuring a high-end, powerful file browser, designed with CrossBow in mind, you'll be able to work in style. Speaking of style, CrossBow is a true next-gen experience, with crisp visuals coating the system in graphical brilliance. CrossBow also makes games extremely easy for developers to port, meaning you'll get the latest releases as they come.</p>
<h2>
<a id="a-game-changer" class="anchor" href="#a-game-changer" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>A game changer</h2>
<p>CrossBow is going to be one of if not the first next-gen console to release. This means hype levels are going to be high. Because of all of this potential hype, we've ensured the system will undergo an entire stage of polishing everything up and smoothing out rough edges, including but not limited to performance improvements, graphical enhancements and feature improvements.</p>
<h2>
<a id="refined" class="anchor" href="#refined" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Refined</h2>
<p>CrossBow's visual splendour is second to none; it has slick animations executed in real time. All it takes is 1 line, and a coloured wave will glide across the screen. So how do they do this? It's simple; the Subsistence API. Subsistence can perform real-time graphical brilliance swiftly and easily. Any developers using Subsistence for graphics will find their games looking superb, and evidence of Subsistence making things look great is in the CrossBow menus. Everything is polished, there's animations in real-time with incredible visual elegance in a sophisticated style. And all of this is only in CrossBow, powered by Subsistence.</p>
<footer class="site-footer">
<span class="site-footer-owner"><a href="https://github.com/Game-Fusion/CrossBow">CrossBow</a> is maintained by <a href="https://github.com/Game-Fusion">Game-Fusion</a>.</span>
<span class="site-footer-credits">This page was generated by <a href="https://pages.github.com">GitHub Pages</a> using the <a href="https://github.com/jasonlong/cayman-theme">Cayman theme</a> by <a href="https://twitter.com/jasonlong">Jason Long</a>.</span>
</footer>
</section>
</body>
</html>

6
params.json Normal file
View File

@ -0,0 +1,6 @@
{
"name": "CrossBow",
"tagline": "The next generation of consoles.",
"body": "# CrossBow\r\n\r\n# Say hello to the future.\r\n\r\nThe next generation of consoles is upon us, and with that Game Fusion and Nova have decided to usher in the new generation in style. Featuring a high-end, powerful file browser, designed with CrossBow in mind, you'll be able to work in style. Speaking of style, CrossBow is a true next-gen experience, with crisp visuals coating the system in graphical brilliance. CrossBow also makes games extremely easy for developers to port, meaning you'll get the latest releases as they come.\r\n\r\n## A game changer\r\n\r\nCrossBow is going to be one of if not the first next-gen console to release. This means hype levels are going to be high. Because of all of this potential hype, we've ensured the system will undergo an entire stage of polishing everything up and smoothing out rough edges, including but not limited to performance improvements, graphical enhancements and feature improvements.\r\n\r\n## Refined\r\n\r\nCrossBow's visual splendour is second to none; it has slick animations executed in real time. All it takes is 1 line, and a coloured wave will glide across the screen. So how do they do this? It's simple; the Subsistence API. Subsistence can perform real-time graphical brilliance swiftly and easily. Any developers using Subsistence for graphics will find their games looking superb, and evidence of Subsistence making things look great is in the CrossBow menus. Everything is polished, there's animations in real-time with incredible visual elegance in a sophisticated style. And all of this is only in CrossBow, powered by Subsistence.",
"note": "Don't delete this file! It's used internally to help with page regeneration."
}

View File

@ -0,0 +1,124 @@
/*
The MIT License (MIT)
Copyright (c) 2015 GitHub, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
.pl-c /* comment */ {
color: #969896;
}
.pl-c1 /* constant, markup.raw, meta.diff.header, meta.module-reference, meta.property-name, support, support.constant, support.variable, variable.other.constant */,
.pl-s .pl-v /* string variable */ {
color: #0086b3;
}
.pl-e /* entity */,
.pl-en /* entity.name */ {
color: #795da3;
}
.pl-s .pl-s1 /* string source */,
.pl-smi /* storage.modifier.import, storage.modifier.package, storage.type.java, variable.other, variable.parameter.function */ {
color: #333;
}
.pl-ent /* entity.name.tag */ {
color: #63a35c;
}
.pl-k /* keyword, storage, storage.type */ {
color: #a71d5d;
}
.pl-pds /* punctuation.definition.string, string.regexp.character-class */,
.pl-s /* string */,
.pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */,
.pl-sr /* string.regexp */,
.pl-sr .pl-cce /* string.regexp constant.character.escape */,
.pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */,
.pl-sr .pl-sre /* string.regexp source.ruby.embedded */ {
color: #183691;
}
.pl-v /* variable */ {
color: #ed6a43;
}
.pl-id /* invalid.deprecated */ {
color: #b52a1d;
}
.pl-ii /* invalid.illegal */ {
background-color: #b52a1d;
color: #f8f8f8;
}
.pl-sr .pl-cce /* string.regexp constant.character.escape */ {
color: #63a35c;
font-weight: bold;
}
.pl-ml /* markup.list */ {
color: #693a17;
}
.pl-mh /* markup.heading */,
.pl-mh .pl-en /* markup.heading entity.name */,
.pl-ms /* meta.separator */ {
color: #1d3e81;
font-weight: bold;
}
.pl-mq /* markup.quote */ {
color: #008080;
}
.pl-mi /* markup.italic */ {
color: #333;
font-style: italic;
}
.pl-mb /* markup.bold */ {
color: #333;
font-weight: bold;
}
.pl-md /* markup.deleted, meta.diff.header.from-file */ {
background-color: #ffecec;
color: #bd2c00;
}
.pl-mi1 /* markup.inserted, meta.diff.header.to-file */ {
background-color: #eaffea;
color: #55a532;
}
.pl-mdr /* meta.diff.range */ {
color: #795da3;
font-weight: bold;
}
.pl-mo /* meta.output */ {
color: #1d3e81;
}

424
stylesheets/normalize.css vendored Normal file
View File

@ -0,0 +1,424 @@
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
/**
* 1. Set default font family to sans-serif.
* 2. Prevent iOS text size adjust after orientation change, without disabling
* user zoom.
*/
html {
font-family: sans-serif; /* 1 */
-ms-text-size-adjust: 100%; /* 2 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/**
* Remove default margin.
*/
body {
margin: 0;
}
/* HTML5 display definitions
========================================================================== */
/**
* Correct `block` display not defined for any HTML5 element in IE 8/9.
* Correct `block` display not defined for `details` or `summary` in IE 10/11
* and Firefox.
* Correct `block` display not defined for `main` in IE 11.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
display: block;
}
/**
* 1. Correct `inline-block` display not defined in IE 8/9.
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
*/
audio,
canvas,
progress,
video {
display: inline-block; /* 1 */
vertical-align: baseline; /* 2 */
}
/**
* Prevent modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Address `[hidden]` styling not present in IE 8/9/10.
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
*/
[hidden],
template {
display: none;
}
/* Links
========================================================================== */
/**
* Remove the gray background color from active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* Improve readability when focused and also mouse hovered in all browsers.
*/
a:active,
a:hover {
outline: 0;
}
/* Text-level semantics
========================================================================== */
/**
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
*/
abbr[title] {
border-bottom: 1px dotted;
}
/**
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
*/
b,
strong {
font-weight: bold;
}
/**
* Address styling not present in Safari and Chrome.
*/
dfn {
font-style: italic;
}
/**
* Address variable `h1` font-size and margin within `section` and `article`
* contexts in Firefox 4+, Safari, and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/**
* Address styling not present in IE 8/9.
*/
mark {
background: #ff0;
color: #000;
}
/**
* Address inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* Embedded content
========================================================================== */
/**
* Remove border when inside `a` element in IE 8/9/10.
*/
img {
border: 0;
}
/**
* Correct overflow not hidden in IE 9/10/11.
*/
svg:not(:root) {
overflow: hidden;
}
/* Grouping content
========================================================================== */
/**
* Address margin not present in IE 8/9 and Safari.
*/
figure {
margin: 1em 40px;
}
/**
* Address differences between Firefox and other browsers.
*/
hr {
box-sizing: content-box;
height: 0;
}
/**
* Contain overflow in all browsers.
*/
pre {
overflow: auto;
}
/**
* Address odd `em`-unit font size rendering in all browsers.
*/
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
/* Forms
========================================================================== */
/**
* Known limitation: by default, Chrome and Safari on OS X allow very limited
* styling of `select`, unless a `border` property is set.
*/
/**
* 1. Correct color not being inherited.
* Known issue: affects color of disabled elements.
* 2. Correct font properties not being inherited.
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
*/
button,
input,
optgroup,
select,
textarea {
color: inherit; /* 1 */
font: inherit; /* 2 */
margin: 0; /* 3 */
}
/**
* Address `overflow` set to `hidden` in IE 8/9/10/11.
*/
button {
overflow: visible;
}
/**
* Address inconsistent `text-transform` inheritance for `button` and `select`.
* All other form control elements do not inherit `text-transform` values.
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
* Correct `select` style inheritance in Firefox.
*/
button,
select {
text-transform: none;
}
/**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Correct inability to style clickable `input` types in iOS.
* 3. Improve usability and consistency of cursor style between image-type
* `input` and others.
*/
button,
html input[type="button"], /* 1 */
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; /* 2 */
cursor: pointer; /* 3 */
}
/**
* Re-set default cursor for disabled elements.
*/
button[disabled],
html input[disabled] {
cursor: default;
}
/**
* Remove inner padding and border in Firefox 4+.
*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
/**
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
* the UA stylesheet.
*/
input {
line-height: normal;
}
/**
* It's recommended that you don't attempt to style these elements.
* Firefox's implementation doesn't respect box-sizing, padding, or width.
*
* 1. Address box sizing set to `content-box` in IE 8/9/10.
* 2. Remove excess padding in IE 8/9/10.
*/
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
* `font-size` values of the `input`, it causes the cursor style of the
* decrement button to change from `default` to `text`.
*/
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
* (include `-moz` to future-proof).
*/
input[type="search"] {
-webkit-appearance: textfield; /* 1 */ /* 2 */
box-sizing: content-box;
}
/**
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
* Safari (but not Chrome) clips the cancel button when the search input has
* padding (and `textfield` appearance).
*/
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* Define consistent border, margin, and padding.
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/**
* 1. Correct `color` not being inherited in IE 8/9/10/11.
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
*/
legend {
border: 0; /* 1 */
padding: 0; /* 2 */
}
/**
* Remove default vertical scrollbar in IE 8/9/10/11.
*/
textarea {
overflow: auto;
}
/**
* Don't inherit the `font-weight` (applied by a rule above).
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
*/
optgroup {
font-weight: bold;
}
/* Tables
========================================================================== */
/**
* Remove most spacing between table cells.
*/
table {
border-collapse: collapse;
border-spacing: 0;
}
td,
th {
padding: 0;
}

245
stylesheets/stylesheet.css Normal file
View File

@ -0,0 +1,245 @@
* {
box-sizing: border-box; }
body {
padding: 0;
margin: 0;
font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 16px;
line-height: 1.5;
color: #606c71; }
a {
color: #1e6bb8;
text-decoration: none; }
a:hover {
text-decoration: underline; }
.btn {
display: inline-block;
margin-bottom: 1rem;
color: rgba(255, 255, 255, 0.7);
background-color: rgba(255, 255, 255, 0.08);
border-color: rgba(255, 255, 255, 0.2);
border-style: solid;
border-width: 1px;
border-radius: 0.3rem;
transition: color 0.2s, background-color 0.2s, border-color 0.2s; }
.btn + .btn {
margin-left: 1rem; }
.btn:hover {
color: rgba(255, 255, 255, 0.8);
text-decoration: none;
background-color: rgba(255, 255, 255, 0.2);
border-color: rgba(255, 255, 255, 0.3); }
@media screen and (min-width: 64em) {
.btn {
padding: 0.75rem 1rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.btn {
padding: 0.6rem 0.9rem;
font-size: 0.9rem; } }
@media screen and (max-width: 42em) {
.btn {
display: block;
width: 100%;
padding: 0.75rem;
font-size: 0.9rem; }
.btn + .btn {
margin-top: 1rem;
margin-left: 0; } }
.page-header {
color: #fff;
text-align: center;
background-color: #159957;
background-image: linear-gradient(120deg, #155799, #159957); }
@media screen and (min-width: 64em) {
.page-header {
padding: 5rem 6rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.page-header {
padding: 3rem 4rem; } }
@media screen and (max-width: 42em) {
.page-header {
padding: 2rem 1rem; } }
.project-name {
margin-top: 0;
margin-bottom: 0.1rem; }
@media screen and (min-width: 64em) {
.project-name {
font-size: 3.25rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.project-name {
font-size: 2.25rem; } }
@media screen and (max-width: 42em) {
.project-name {
font-size: 1.75rem; } }
.project-tagline {
margin-bottom: 2rem;
font-weight: normal;
opacity: 0.7; }
@media screen and (min-width: 64em) {
.project-tagline {
font-size: 1.25rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.project-tagline {
font-size: 1.15rem; } }
@media screen and (max-width: 42em) {
.project-tagline {
font-size: 1rem; } }
.main-content :first-child {
margin-top: 0; }
.main-content img {
max-width: 100%; }
.main-content h1, .main-content h2, .main-content h3, .main-content h4, .main-content h5, .main-content h6 {
margin-top: 2rem;
margin-bottom: 1rem;
font-weight: normal;
color: #159957; }
.main-content p {
margin-bottom: 1em; }
.main-content code {
padding: 2px 4px;
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
font-size: 0.9rem;
color: #383e41;
background-color: #f3f6fa;
border-radius: 0.3rem; }
.main-content pre {
padding: 0.8rem;
margin-top: 0;
margin-bottom: 1rem;
font: 1rem Consolas, "Liberation Mono", Menlo, Courier, monospace;
color: #567482;
word-wrap: normal;
background-color: #f3f6fa;
border: solid 1px #dce6f0;
border-radius: 0.3rem; }
.main-content pre > code {
padding: 0;
margin: 0;
font-size: 0.9rem;
color: #567482;
word-break: normal;
white-space: pre;
background: transparent;
border: 0; }
.main-content .highlight {
margin-bottom: 1rem; }
.main-content .highlight pre {
margin-bottom: 0;
word-break: normal; }
.main-content .highlight pre, .main-content pre {
padding: 0.8rem;
overflow: auto;
font-size: 0.9rem;
line-height: 1.45;
border-radius: 0.3rem; }
.main-content pre code, .main-content pre tt {
display: inline;
max-width: initial;
padding: 0;
margin: 0;
overflow: initial;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0; }
.main-content pre code:before, .main-content pre code:after, .main-content pre tt:before, .main-content pre tt:after {
content: normal; }
.main-content ul, .main-content ol {
margin-top: 0; }
.main-content blockquote {
padding: 0 1rem;
margin-left: 0;
color: #819198;
border-left: 0.3rem solid #dce6f0; }
.main-content blockquote > :first-child {
margin-top: 0; }
.main-content blockquote > :last-child {
margin-bottom: 0; }
.main-content table {
display: block;
width: 100%;
overflow: auto;
word-break: normal;
word-break: keep-all; }
.main-content table th {
font-weight: bold; }
.main-content table th, .main-content table td {
padding: 0.5rem 1rem;
border: 1px solid #e9ebec; }
.main-content dl {
padding: 0; }
.main-content dl dt {
padding: 0;
margin-top: 1rem;
font-size: 1rem;
font-weight: bold; }
.main-content dl dd {
padding: 0;
margin-bottom: 1rem; }
.main-content hr {
height: 2px;
padding: 0;
margin: 1rem 0;
background-color: #eff0f1;
border: 0; }
@media screen and (min-width: 64em) {
.main-content {
max-width: 64rem;
padding: 2rem 6rem;
margin: 0 auto;
font-size: 1.1rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.main-content {
padding: 2rem 4rem;
font-size: 1.1rem; } }
@media screen and (max-width: 42em) {
.main-content {
padding: 2rem 1rem;
font-size: 1rem; } }
.site-footer {
padding-top: 2rem;
margin-top: 2rem;
border-top: solid 1px #eff0f1; }
.site-footer-owner {
display: block;
font-weight: bold; }
.site-footer-credits {
color: #819198; }
@media screen and (min-width: 64em) {
.site-footer {
font-size: 1rem; } }
@media screen and (min-width: 42em) and (max-width: 64em) {
.site-footer {
font-size: 1rem; } }
@media screen and (max-width: 42em) {
.site-footer {
font-size: 0.9rem; } }