Skip to content

Instantly share code, notes, and snippets.

@alepmaros
Created January 31, 2017 17:45
Show Gist options
  • Save alepmaros/83ca86061bc966d765fcf49d736c3d77 to your computer and use it in GitHub Desktop.
Save alepmaros/83ca86061bc966d765fcf49d736c3d77 to your computer and use it in GitHub Desktop.
The game "Snake" built on Garry's Mod using E2
@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