Created
January 31, 2017 17:45
-
-
Save alepmaros/83ca86061bc966d765fcf49d736c3d77 to your computer and use it in GitHub Desktop.
The game "Snake" built on Garry's Mod using E2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@name SNAKE! | |
@inputs E:wirelink Pod:wirelink Seat:entity | |
@outputs | |
@persist Bounds:vector2 SnakeSize:vector2 X Y Background:vector2 TICKS GameState Speed | |
@persist SnakePosition:vector2 FruitPosition:vector2 FruitExists Number_Snakes | |
@persist SnakeMovements:array CurrentPlayer:entity MenuIndex MenuCredits MaxTicks FirstTime | |
@trigger all | |
# Author: http://steamcommunity.com/profiles/76561198000439477/ | |
# | |
# This is my first attempt at making a silly snake game purely in Wiremod's E2 | |
# Keys: W A S D Space | |
# | |
# GameState | |
# 0 -> MenuScreen | |
# 1 -> Game | |
# 2 -> GameOver / HighScore | |
# | |
# Probably gonna be updated in the future! | |
# | |
# | |
function void initialSetup() | |
{ | |
##Snake | |
SnakeSize = vec2(32,32) | |
SnakePosition = vec2(240, 240) | |
Speed = 32 | |
Number_Snakes = 0 | |
##Tela | |
E:egpClear() | |
Bounds = vec2(512,512) | |
E:egpBox(1,vec2(256,256),Bounds) | |
E:egpColor(1,vec(0,0,0)) | |
Background = vec2(448,448) | |
E:egpBox(2,vec2(256,256),Background) | |
E:egpColor(2,vec(61,90,59)) | |
##Score | |
E:egpText(3,"MADE BY PRIDEXS - Score :", vec2(0,0)) | |
##Variables | |
FruitExists = 0 | |
TICKS = 0 | |
GameState = 0 | |
MenuIndex = 0 | |
MenuCredits = 0 | |
Y = 0 | |
MaxTicks = 20 | |
} | |
if (FirstTime == 0) | |
{ | |
initialSetup() | |
FirstTime = 1 | |
} | |
function void resetScreen() | |
{ | |
##Tela | |
E:egpClear() | |
Bounds = vec2(512,512) | |
E:egpBox(1,vec2(256,256),Bounds) | |
E:egpColor(1,vec(0,0,0)) | |
Background = vec2(448,448) | |
E:egpBox(2,vec2(256,256),Background) | |
E:egpColor(2,vec(61,90,59)) | |
} | |
function void runMenu() | |
{ | |
Bounds = vec2(512,512) | |
E:egpBox(1,vec2(256,256),Bounds) | |
E:egpColor(1,vec(0,0,0)) | |
Background = vec2(448,448) | |
E:egpBox(2,vec2(256,256),Background) | |
E:egpColor(2,vec(61,90,59)) | |
if (MenuCredits == 1) | |
{ | |
E:egpText(3, "Authors:", vec2(256,100)) | |
E:egpAlign(3,1,1) | |
E:egpSize(3, 30) | |
E:egpFont(3, "Lucida Console") | |
E:egpColor(3, vec(0,255,0)) | |
E:egpText(5, "Pridexs", vec2(256, 200)) | |
E:egpAlign(5,1,1) | |
E:egpSize(5, 30) | |
E:egpFont(5, "Lucida Console") | |
E:egpColor(5, vec(0,255,0)) | |
E:egpText(6, "Lancu", vec2(256, 230)) | |
E:egpAlign(6,1,1) | |
E:egpSize(6, 30) | |
E:egpFont(6, "Lucida Console") | |
E:egpColor(6, vec(0,255,0)) | |
} | |
else | |
{ | |
E:egpText(3, "SNAKE!", vec2(256,100)) | |
E:egpAlign(3,1,1) | |
E:egpSize(3, 30) | |
E:egpFont(3, "Lucida Console") | |
E:egpColor(3, vec(0,255,0)) | |
E:egpText(5, "Play!", vec2(256, 200)) | |
E:egpAlign(5,1,1) | |
E:egpSize(5, 30) | |
E:egpFont(5, "Lucida Console") | |
E:egpColor(5, vec(0,255,0)) | |
E:egpText(6, "Credits!", vec2(256, 256)) | |
E:egpAlign(6,1,1) | |
E:egpSize(6, 30) | |
E:egpFont(6, "Lucida Console") | |
E:egpColor(6, vec(0,255,0)) | |
E:egpText(7, "Press Space to confirm!", vec2(256, 300)) | |
E:egpAlign(7,1,1) | |
E:egpSize(7, 20) | |
E:egpFont(7, "Lucida Console") | |
E:egpColor(7, vec(0,255,0)) | |
MenuIndex = MenuIndex + Y | |
Y = 0 | |
if (MenuIndex > 1) { | |
MenuIndex = 0 | |
} elseif (MenuIndex < 0) { | |
MenuIndex = 1 | |
} | |
if (MenuIndex == 0) | |
{ | |
E:egpColor(5,vec(255,0,0)) | |
E:egpColor(6,vec(0,255,0)) | |
} | |
elseif (MenuIndex == 1) | |
{ | |
E:egpColor(6,vec(255,0,0)) | |
E:egpColor(5,vec(0,255,0)) | |
} | |
} | |
} | |
function void runGame() | |
{ | |
if (SnakeMovements:exists(Number_Snakes+1)) { | |
SnakeMovements:remove(1) | |
} | |
Movement = vec2(Speed * X, Speed * Y) | |
SnakePosition += Movement | |
if (Number_Snakes > 0) { | |
SnakeMovements:pushVector2(SnakePosition) | |
} | |
## -- Spawn Fruit if there isnt one already | |
if (!FruitExists) { | |
FruitPosition = vec2( (16) + (randint(1,14) * 32), 16 + (randint(1,14) * 32)) | |
FruitExists = 1 | |
} | |
if (FruitPosition == SnakePosition) { | |
FruitExists = 0 | |
Number_Snakes++ | |
} | |
## DRAW | |
## Fruit | |
if (FruitExists) { | |
E:egpBox(4, FruitPosition, SnakeSize) | |
E:egpColor(4, vec(255,0,255)) | |
} | |
## Snake | |
E:egpBox(5,SnakePosition,SnakeSize) | |
E:egpColor(5,vec(150,150,150)) | |
## Snake Body | |
if (Number_Snakes > 0) { | |
Cont = 6 | |
for (I = Number_Snakes+5, 6, -1) { | |
E:egpBox(Cont,SnakeMovements[I-5,vector2], SnakeSize) | |
E:egpColor(Cont,vec(255,255,255)) | |
Cont++ | |
if (SnakeMovements[I-5,vector2] == SnakePosition && (I-5) < Number_Snakes ) | |
{ | |
resetScreen() | |
GameState = 2 | |
} | |
} | |
} | |
## Score | |
E:egpSetText(3, "Score: " + Number_Snakes) | |
## Check if SnakeHead hit Bounds == GameOver | |
if (SnakePosition:x() >= 480 || SnakePosition:x() <= 32) | |
{ | |
GameState = 2 | |
} | |
if (SnakePosition:y() >= 480 || SnakePosition:y() <= 32) | |
{ | |
GameState = 2 | |
} | |
} | |
function void runGameOver() | |
{ | |
E:egpText(3, "Score: " + Number_Snakes, vec2(256,200)) | |
E:egpAlign(3,1,1) | |
E:egpSize(3, 30) | |
E:egpFont(3, "Lucida Console") | |
E:egpColor(3, vec(0,0,0)) | |
E:egpText(4, "Press Space to Restart", vec2(256,400)) | |
E:egpAlign(4,1,1) | |
E:egpSize(4, 25) | |
E:egpFont(4, "Lucida Console") | |
E:egpColor(4, vec(0,0,0)) | |
E:egpText(5, "GAME OVER!", vec2(256, 256)) | |
E:egpAlign(5,1,1) | |
E:egpSize(5, 60) | |
E:egpFont(5, "Lucida Console") | |
E:egpColor(5, vec(0,0,0)) | |
} | |
PodActive = Pod["Active",number] | |
runOnTick(1) | |
if (first() || dupefinished() || duped()){ | |
initialSetup() | |
} | |
Speed = 32 | |
W = Pod["W",number] | |
A = Pod["A",number] | |
S = Pod["S",number] | |
D = Pod["D",number] | |
SPACE = Pod["Space",number] | |
if (GameState == 0) | |
{ | |
if(W) { | |
Y = 1 | |
} elseif (S) { | |
Y = -1 | |
} | |
if(SPACE) { | |
if (MenuCredits == 1) | |
{ | |
resetScreen() | |
MenuCredits = 0 | |
} | |
elseif (MenuIndex == 0) | |
{ | |
initialSetup() | |
X = 0 | |
Y = 1 | |
MaxTicks = 10 | |
GameState = 1 | |
} | |
elseif (MenuIndex == 1) | |
{ | |
resetScreen() | |
MenuCredits = 1 | |
} | |
} | |
} | |
elseif (GameState == 1) | |
{ | |
if(W && Y != 1) { | |
X = 0 | |
Y = -1 | |
} elseif (S && Y != 1) { | |
X = 0 | |
Y = 1 | |
} elseif (A && X != 1) { | |
X = -1 | |
Y = 0 | |
} elseif (D && X != -1) { | |
X = 1 | |
Y = 0 | |
} | |
} | |
elseif (GameState == 2) | |
{ | |
if(SPACE) { | |
initialSetup() | |
GameState = 0 | |
} | |
} | |
if (PodActive) { | |
CurrentPlayer = Seat:driver() | |
if (TICKS > MaxTicks) | |
{ | |
TICKS = 0 | |
if (GameState == 0) | |
{ | |
runMenu() | |
} | |
elseif (GameState == 1) | |
{ | |
runGame() | |
} | |
elseif (GameState == 2) | |
{ | |
runGameOver() | |
} | |
} | |
else | |
{ | |
TICKS++ | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment