PRE BETA RELEASE
[+] - Everything for the version 0.0.1.0
BIN
Executable/Installer/EXODUS - Installer.exe
Normal file
BIN
Executable/Installer/EXODUS.zip
Normal file
BIN
Executable/Not installer/core.exe
Normal file
BIN
Executable/Not installer/font/Savior1.ttf
Normal file
BIN
Executable/Not installer/map/l1.png
Normal file
After Width: | Height: | Size: 483 KiB |
7
Executable/Not installer/music/credits.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
================== CREDITS ==================
|
||||||
|
> mainMenu music is "Void 643" from donbor
|
||||||
|
> play music is "Blind" from donbor
|
||||||
|
ALL CREDITS TO ARTISTS !
|
||||||
|
|
||||||
|
visit donbor's bandcamp to download songs :
|
||||||
|
https://donbor.bandcamp.com
|
BIN
Executable/Not installer/music/mainMenu.ogg
Normal file
BIN
Executable/Not installer/music/play.ogg
Normal file
BIN
Executable/Not installer/sprites/icon/icon2.png
Normal file
After Width: | Height: | Size: 7.7 KiB |
BIN
Executable/Not installer/sprites/loading/loading.png
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
Executable/Not installer/sprites/loading/oldwarn.png
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
Executable/Not installer/sprites/loading/warn.png
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
Executable/Not installer/sprites/menus/main.jpg
Normal file
After Width: | Height: | Size: 696 KiB |
BIN
Executable/Not installer/sprites/menus/play.jpg
Normal file
After Width: | Height: | Size: 7.1 KiB |
BIN
Executable/Not installer/sprites/menus/settings.jpg
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
Executable/Not installer/sprites/player/female.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
Executable/Not installer/sprites/player/female/ante.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
Executable/Not installer/sprites/player/female/postWithBag.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 3.7 KiB |
BIN
Executable/Not installer/sprites/player/male.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
Executable/Not installer/sprites/player/male/ante.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
Executable/Not installer/sprites/player/male/postWithBag.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
Executable/Not installer/sprites/player/male/postWithoutBag.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
632
Source Code/core.py
Normal file
@ -0,0 +1,632 @@
|
|||||||
|
## Coded by SergentThomasKelly
|
||||||
|
################################################################################
|
||||||
|
# INITIALISATION #
|
||||||
|
################################################################################
|
||||||
|
import pygame as pg; import sys; import pytmx; import os
|
||||||
|
import savesystem as save; from settings import *
|
||||||
|
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# CLASS GAME #
|
||||||
|
################################################################################
|
||||||
|
class Game:
|
||||||
|
""" This class is responsible for the well shape of the whole game.
|
||||||
|
In fact, this class IS the game. Firstly we initialize Pygame, then we
|
||||||
|
load every bit of data we need to use, and the we run the game. First,
|
||||||
|
we listen to keys and mouse inputs and then we render the screen."""
|
||||||
|
# >>> INITIALISATION >>>
|
||||||
|
def __init__(self):
|
||||||
|
self.state = 'starting'
|
||||||
|
self.debugMode = False
|
||||||
|
self.offline = False
|
||||||
|
self.decalageX, self.decalageY = 128,0
|
||||||
|
pg.mixer.pre_init(44100, -16, 4, 2048)
|
||||||
|
pg.init()
|
||||||
|
self.screen = pg.display.set_mode((WIDTH, HEIGHT))
|
||||||
|
self.clock = pg.time.Clock()
|
||||||
|
pg.mouse.set_visible(True)
|
||||||
|
pg.display.set_caption(TITLE)
|
||||||
|
pg.key.set_repeat(100, 100)
|
||||||
|
self.loadEverything()
|
||||||
|
if self.debugMode == True:
|
||||||
|
print('debugMode activé')
|
||||||
|
self.washTheScreen()
|
||||||
|
if self.debug():
|
||||||
|
self.clear()
|
||||||
|
self.run()
|
||||||
|
else:
|
||||||
|
self.mainMenu()
|
||||||
|
else:
|
||||||
|
self.mainMenu()
|
||||||
|
|
||||||
|
# >>> HERE'S THE GOD MODE, FOR THE GOD DAMN CREATOR ! >>>
|
||||||
|
def debug(self):
|
||||||
|
print(" =================== WELCOME IN DEBUG MODE ! ==================== ")
|
||||||
|
print(" | [1] - Enter state : | ")
|
||||||
|
print(" | [2] - Cheat Mode : | ")
|
||||||
|
print(" ================================================================ ")
|
||||||
|
self.debugCommand = input("[?] >>> Input something : ")
|
||||||
|
if self.debugCommand == "1":
|
||||||
|
self.clear(); print("[i] >>> [mainMenu, newMenu, settingsMenu, helpMenu, playMenu, game]")
|
||||||
|
self.debugState = input("[?] >>> What state to load ? "); self.state = self.debugState
|
||||||
|
return True
|
||||||
|
if self.debugCommand == "2":
|
||||||
|
self.clear(); print("[!] Entered in cheat menu.")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# >>> LOAD EVERYTHING WE NEED ONCE FOR ALL >>>
|
||||||
|
def loadEverything(self):
|
||||||
|
gameFolder = os.path.dirname(__file__)
|
||||||
|
imgFolder = os.path.join(gameFolder, 'sprites')
|
||||||
|
plyrSpriteFolder = self.playerFolder = os.path.join(imgFolder,'player')
|
||||||
|
femaleFolder = self.femaleFolder = os.path.join(plyrSpriteFolder, 'female'); maleFolder = self.maleFolder = os.path.join(plyrSpriteFolder,'male')
|
||||||
|
musicFolder = os.path.join(gameFolder, 'music')
|
||||||
|
fontFolder = os.path.join(gameFolder, 'font')
|
||||||
|
loadingFolder = os.path.join(imgFolder, 'loading')
|
||||||
|
menuFolder = os.path.join(imgFolder, 'menus')
|
||||||
|
mapFolder = os.path.join(gameFolder, 'map')
|
||||||
|
iconFolder = os.path.join(imgFolder, 'icon'); self.icon = pg.image.load(os.path.join(iconFolder,'icon2.png')).convert_alpha(); pg.display.set_icon(self.icon)
|
||||||
|
self.clear = lambda: os.system('cls')
|
||||||
|
self.loadingScreen = pg.image.load(os.path.join(loadingFolder, 'loading.png')).convert_alpha()
|
||||||
|
self.warningVersion = pg.image.load(os.path.join(loadingFolder, "warn.png")).convert_alpha()
|
||||||
|
self.state = 'loadingScreen'; self.renderWindow()
|
||||||
|
self.guiFont= pg.font.Font(os.path.join(fontFolder, 'Savior1.ttf'), 95)
|
||||||
|
self.guiFontSub = pg.font.Font(os.path.join(fontFolder, 'Savior1.ttf'), 65)
|
||||||
|
self.screenWasher = pg.Surface(self.screen.get_size()).convert_alpha(); self.screenWasher.fill((0, 0, 0, 255))
|
||||||
|
self.colorGrey = (128,128,128); self.colorWhite = (255,255,255)
|
||||||
|
self.allSprites = pg.sprite.LayeredUpdates()
|
||||||
|
self.mapPic = pg.image.load(os.path.join(mapFolder, 'l1.png')).convert_alpha()
|
||||||
|
self.mapWIDTH = self.mapPic.get_width; self.mapHEIGHT = self.mapPic.get_height
|
||||||
|
self.dimScreen = pg.Surface(self.screen.get_size()).convert_alpha(); self.dimScreen.fill((0, 0, 0, 200))
|
||||||
|
self.playerImgFemale = self.playerImg = pg.image.load(os.path.join(femaleFolder, 'ante.png')).convert_alpha()
|
||||||
|
self.femalePreview = pg.image.load(os.path.join(plyrSpriteFolder, 'female.png')).convert_alpha(); self.femalePreview = pg.transform.scale(self.femalePreview, (500,500))
|
||||||
|
self.malePreview = pg.image.load (os.path.join(plyrSpriteFolder, 'male.png')).convert_alpha(); self.malePreview = pg.transform.scale(self.malePreview, (500,500))
|
||||||
|
self.menuNukem = pg.image.load(os.path.join(menuFolder, "main.jpg")).convert(); self.menuNukem = pg.transform.scale(self.menuNukem, (500,500))
|
||||||
|
self.playButton = pg.image.load(os.path.join(menuFolder, "play.jpg")).convert(); self.playButton = pg.transform.scale(self.playButton, (500,500))
|
||||||
|
self.settingsWheel = pg.image.load(os.path.join(menuFolder, "settings.jpg")).convert()
|
||||||
|
self.actualChoicePreview = self.screenWasher
|
||||||
|
self.textColorPlay = self.textColorSettings = self.textColorHelp = self.textColorQuit = self.colorGrey
|
||||||
|
self.textColorContinue = self.textColorNewGame = self.textColorReturn = self.colorGrey
|
||||||
|
self.textColorMale = self.textColorFemale = self.textColorReturn = self.colorGrey
|
||||||
|
self.textColorMusicToggle = self.textColorFullscreenToggle = self.textColordisplayFPSToggle = self.resetSaveColor = self.resetSettingsColor = self.textColorReturn = self.colorGrey
|
||||||
|
self.textColorResume = self.textColorQuitGame = self.textColorMainMenu = self.colorGrey
|
||||||
|
self.textColorReturn = self.colorGrey
|
||||||
|
self.textColorYes = self.textColorNo = self.colorGrey
|
||||||
|
self.lastMove = "+Y"
|
||||||
|
self.mapPosX = self.decalageX; self.mapPosY = self.decalageY
|
||||||
|
if os.path.isfile("settings.txt"):
|
||||||
|
settingsSaved = save.readSettings()
|
||||||
|
self.musicState=settingsSaved[0]; self.fullscreenState=settingsSaved[1]; self.displayFPS=settingsSaved[2]
|
||||||
|
if self.fullscreenState == "ON":
|
||||||
|
pg.display.set_mode((WIDTH, HEIGHT), pg.FULLSCREEN)
|
||||||
|
else:
|
||||||
|
self.musicState = "ON"; self.displayFPS = "OFF"; self.fullscreenState = "OFF"
|
||||||
|
self.wallsList = []
|
||||||
|
for walls in WALLS:
|
||||||
|
self.wallsList.append((walls[0]+self.decalageX, walls[1]+self.decalageY,
|
||||||
|
walls[2], walls[3]))
|
||||||
|
self.posX = POS[0]+self.decalageX; self.posY = POS[1]+self.decalageY
|
||||||
|
self.mainMenuMusic = pg.mixer.Sound(os.path.join(musicFolder, 'mainMenu.ogg'))
|
||||||
|
self.playMusic = pg.mixer.Sound(os.path.join(musicFolder, 'play.ogg'))
|
||||||
|
|
||||||
|
# >>> SHOW THE MAIN MENU >>>
|
||||||
|
def mainMenu(self):
|
||||||
|
self.washTheScreen(); pg.key.set_repeat(0, 100); self.previousState = self.state
|
||||||
|
pg.mouse.set_visible(True)
|
||||||
|
if not pg.mixer.Channel(0).get_busy() or pg.mixer.Channel(0).get_sound() != self.mainMenuMusic:
|
||||||
|
if self.musicState == "ON":
|
||||||
|
pg.mixer.Channel(0).play(self.mainMenuMusic, -1)
|
||||||
|
self.state = 'mainMenu'
|
||||||
|
self.run()
|
||||||
|
|
||||||
|
# >>> SHOW THE PLAY MENU >>>
|
||||||
|
def playMenu(self):
|
||||||
|
self.washTheScreen(); pg.key.set_repeat(0, 100); self.previousState = self.state
|
||||||
|
self.state = 'playMenu'
|
||||||
|
self.run()
|
||||||
|
|
||||||
|
# >>> SHOW THE NEW GAME MENU >>>
|
||||||
|
def newGame(self):
|
||||||
|
self.washTheScreen(); pg.key.set_repeat(0, 100); self.previousState = self.state
|
||||||
|
self.state = 'newGame'
|
||||||
|
self.run()
|
||||||
|
|
||||||
|
# >>> SHOW THE HELP MENU >>>
|
||||||
|
def helpMenu(self):
|
||||||
|
self.washTheScreen(); pg.key.set_repeat(0, 100); self.previousState = self.state
|
||||||
|
self.state = 'helpMenu'
|
||||||
|
self.run()
|
||||||
|
|
||||||
|
# >>> SHOW THE SETTINGS MENU >>>
|
||||||
|
def settingsMenu(self):
|
||||||
|
self.washTheScreen(); pg.key.set_repeat(0, 100); self.previousState = self.state
|
||||||
|
self.state = 'settingsMenu'
|
||||||
|
self.run()
|
||||||
|
|
||||||
|
# >>> PAUSE THE GAME >>>
|
||||||
|
def pause(self):
|
||||||
|
pg.key.set_repeat(0, 100); self.previousState = self.state; pg.mouse.set_visible(True)
|
||||||
|
save.saveGame(self.gender, self.lifeLevel, self.gameLevel)
|
||||||
|
self.screen.blit(self.dimScreen,(0,0))
|
||||||
|
if self.musicState == "ON":
|
||||||
|
pg.mixer.Channel(0).pause()
|
||||||
|
self.state = 'pause'
|
||||||
|
self.run()
|
||||||
|
|
||||||
|
# >>> LET THE MAGIC HAPPEN >>>
|
||||||
|
def continueGame(self):
|
||||||
|
pg.mouse.set_visible(False)
|
||||||
|
if self.musicState == "ON":
|
||||||
|
if pg.mixer.Channel(0).get_sound() != self.playMusic:
|
||||||
|
pg.mixer.Channel(0).play(self.playMusic, -1)
|
||||||
|
if self.state == 'pause':
|
||||||
|
pg.mixer.Channel(0).unpause()
|
||||||
|
actualGame = save.readGame()
|
||||||
|
self.gender = actualGame[0]; self.lifeLevel = actualGame[1]; self.gameLevel = actualGame[2]
|
||||||
|
print("i'm a {} and i have {} percent life and i'm in level {}".format(actualGame[0],self.lifeLevel, self.gameLevel))
|
||||||
|
self.picCoordinates = playerAnimation('noneDown', self.gender)
|
||||||
|
self.washTheScreen(); pg.key.set_repeat(100, 100); self.previousState = self.state
|
||||||
|
self.state = 'game'
|
||||||
|
self.run()
|
||||||
|
|
||||||
|
# >>> VERIFY IF THE PLAYER WANTS TO QUIT GAME >>>
|
||||||
|
def areYouSure(self):
|
||||||
|
self.washTheScreen(); pg.key.set_repeat(0, 100); self.previousState = self.state
|
||||||
|
pg.mouse.set_visible(True)
|
||||||
|
self.state = 'areYouSureToQuit'
|
||||||
|
self.run()
|
||||||
|
|
||||||
|
# >>> VERIFY IF THE PLAYER WANTS TO QUIT GAME >>>
|
||||||
|
def areYouSureToDestroy(self):
|
||||||
|
self.washTheScreen(); pg.key.set_repeat(0, 100); self.previousState = self.state
|
||||||
|
self.state = 'areYouSureToDestroy'
|
||||||
|
self.run()
|
||||||
|
|
||||||
|
# >>> WASH THE SCREEN >>>
|
||||||
|
def washTheScreen(self):
|
||||||
|
self.screen.blit(self.screenWasher, (0,0))
|
||||||
|
pg.display.update()
|
||||||
|
|
||||||
|
# >>> TOGGLE FULLSCREEN MODE >>>
|
||||||
|
def toggleFullscreen(self):
|
||||||
|
if self.screen.get_flags() != pg.FULLSCREEN:
|
||||||
|
pg.display.set_mode((WIDTH, HEIGHT), pg.FULLSCREEN); self.fullscreenState = "ON"
|
||||||
|
else:
|
||||||
|
pg.display.set_mode((WIDTH, HEIGHT)); self.fullscreenState = "OFF"
|
||||||
|
|
||||||
|
# >>> TOGGLE MUSIC STATE >>>
|
||||||
|
def toggleMusic(self):
|
||||||
|
if self.musicState == "ON":
|
||||||
|
self.musicState = "OFF"
|
||||||
|
if pg.mixer.Channel(0).get_busy():
|
||||||
|
pg.mixer.Channel(0).stop()
|
||||||
|
else:
|
||||||
|
self.musicState = "ON"
|
||||||
|
pg.mixer.Channel(0).play(self.mainMenuMusic, -1)
|
||||||
|
|
||||||
|
# >>> TOGGLE FPS COUNTER >>>
|
||||||
|
def toggleFPS(self):
|
||||||
|
if self.displayFPS == "ON":
|
||||||
|
self.displayFPS = "OFF"
|
||||||
|
else:
|
||||||
|
self.displayFPS = "ON"
|
||||||
|
|
||||||
|
# >>> INFINITE LOOP TO LISTEN KEYS AND THEN RENDER WINDOW >>>
|
||||||
|
def run(self):
|
||||||
|
while True:
|
||||||
|
self.clock.tick(60);
|
||||||
|
if self.displayFPS == "ON":
|
||||||
|
pg.display.set_caption(str(TITLE)+" -- FPS :"+str(int(self.clock.get_fps())))
|
||||||
|
else:
|
||||||
|
pg.display.set_caption(TITLE)
|
||||||
|
self.renderWindow()
|
||||||
|
if self.state == "game":
|
||||||
|
self.collideWithWalls()
|
||||||
|
self.KeyListener()
|
||||||
|
|
||||||
|
# >>> COLLISION DETECTION (WITH WALLS OF COURSE) >>>
|
||||||
|
def collideWithWalls(self):
|
||||||
|
for walls in self.wallsList:
|
||||||
|
if self.persoRect.colliderect(walls):
|
||||||
|
if self.lastMove == "+X":
|
||||||
|
self.posX -= 16
|
||||||
|
elif self.lastMove == "+Y":
|
||||||
|
self.posY -= 16
|
||||||
|
elif self.lastMove == "-X":
|
||||||
|
self.posX += 16
|
||||||
|
elif self.lastMove == "-Y":
|
||||||
|
self.posY += 16
|
||||||
|
|
||||||
|
# >>> SCROLLING SYSTEM >>>
|
||||||
|
def scrolling(self):
|
||||||
|
reload = 0
|
||||||
|
if self.posX+128 >= WIDTH:
|
||||||
|
self.mapPosX+=16; self.decalageX+= 16; self.posX+=16; reload+=1
|
||||||
|
elif self.posY+128 >= HEIGHT:
|
||||||
|
self.mapPosY-=16; self.decalageY-=16; self.posY-=16; reload+=1
|
||||||
|
elif self.posX-128 <= 0:
|
||||||
|
self.mapPosX-=16; self.decalageX-=16; self.posX-=16; reload+=1
|
||||||
|
elif self.posY-128 <= 0:
|
||||||
|
self.mapPosY+=16; self.decalageY+= 16; self.posY+=16; reload+=1
|
||||||
|
if reload != 0:
|
||||||
|
self.wallsList = []
|
||||||
|
for walls in WALLS:
|
||||||
|
self.wallsList.append((walls[0]+self.decalageX, walls[1]+self.decalageY,
|
||||||
|
walls[2], walls[3]))
|
||||||
|
|
||||||
|
# >>> LISTEN INPUT FROM PLAYER (MOUSE, KEYS,...) >>>
|
||||||
|
def KeyListener(self):
|
||||||
|
# ========================================== GAME STATE ====================================================== #
|
||||||
|
if self.state == 'game':
|
||||||
|
for event in pg.event.get():
|
||||||
|
if event.type == pg.KEYDOWN:
|
||||||
|
if event.key == pg.K_s or event.key == pg.K_DOWN:
|
||||||
|
self.picCoordinates = playerAnimation('down',self.gender)
|
||||||
|
self.posY += 16; self.lastMove = "+Y"; self.scrolling()
|
||||||
|
if event.key == pg.K_d or event.key == pg.K_RIGHT:
|
||||||
|
self.picCoordinates = playerAnimation('right',self.gender)
|
||||||
|
self.posX += 16; self.lastMove = "+X"; self.scrolling()
|
||||||
|
if event.key == pg.K_w or event.key == pg.K_UP:
|
||||||
|
self.picCoordinates = playerAnimation('up',self.gender)
|
||||||
|
self.posY -= 16; self.lastMove = "-Y"; self.scrolling()
|
||||||
|
if event.key == pg.K_a or event.key == pg.K_LEFT:
|
||||||
|
self.picCoordinates = playerAnimation('left',self.gender)
|
||||||
|
self.posX -= 16; self.lastMove = "-X"; self.scrolling()
|
||||||
|
if event.key == pg.K_ESCAPE:
|
||||||
|
self.pause()
|
||||||
|
elif event.type == pg.KEYUP:
|
||||||
|
if self.lastMove == "+Y":
|
||||||
|
self.picCoordinates = playerAnimation('noneDown', self.gender)
|
||||||
|
elif self.lastMove == "+X":
|
||||||
|
self.picCoordinates = playerAnimation('noneRight', self.gender)
|
||||||
|
elif self.lastMove == "-X":
|
||||||
|
self.picCoordinates = playerAnimation('noneLeft', self.gender)
|
||||||
|
elif self.lastMove == "-Y":
|
||||||
|
self.picCoordinates = playerAnimation('noneUp', self.gender)
|
||||||
|
if event.type == pg.QUIT:
|
||||||
|
self.pause()
|
||||||
|
# ========================================== PAUSE SCREEN ==================================================== #
|
||||||
|
if self.state == 'pause':
|
||||||
|
for event in pg.event.get():
|
||||||
|
if self.resumeBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorResume = self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print('resume game'); self.continueGame()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorResume = self.colorGrey
|
||||||
|
if self.mainMenuBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorMainMenu = self.colorWhite; self.actualChoicePreview = self.malePreview
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print("main menu"); self.mainMenu()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorMainMenu = self.colorGrey
|
||||||
|
if self.quitGameBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorQuitGame = self.colorWhite; self.actualChoicePreview = self.femalePreview
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print("quit game"); self.areYouSure()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorQuitGame = self.colorGrey
|
||||||
|
if event.type == pg.KEYDOWN:
|
||||||
|
if event.key == pg.K_z:
|
||||||
|
print("quit"); self.areYouSure()
|
||||||
|
if event.key == pg.K_r or event.key == pg.K_ESCAPE:
|
||||||
|
print("resume game"); self.continueGame()
|
||||||
|
if event.key == pg.K_SEMICOLON:
|
||||||
|
print("main menu"); self.mainMenu()
|
||||||
|
if event.type == pg.QUIT:
|
||||||
|
self.quit()
|
||||||
|
# ========================================== NEW GAME ======================================================== #
|
||||||
|
if self.state == 'newGame':
|
||||||
|
for event in pg.event.get():
|
||||||
|
if self.returnBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorReturn = self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print('return'); self.playMenu()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorReturn = self.colorGrey
|
||||||
|
if self.maleChoiceBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorMale = self.colorWhite; self.actualChoicePreview = self.malePreview
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print("male"); """save.newGame("male")"""
|
||||||
|
print("YOU CAN ONLY PLAY FEMALE FOR NOW")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorMale = self.colorGrey; self.actualChoicePreview = self.screenWasher
|
||||||
|
if self.femaleChoiceBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorFemale = self.colorWhite; self.actualChoicePreview = self.femalePreview
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print("female"); save.newGame("female"); self.gender = "female"; self.continueGame()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorFemale = self.colorGrey
|
||||||
|
if event.type == pg.KEYDOWN:
|
||||||
|
if event.key == pg.K_f:
|
||||||
|
print("female")
|
||||||
|
if event.key == pg.K_SEMICOLON:
|
||||||
|
print("male")
|
||||||
|
if event.key == pg.K_r or event.key == pg.K_ESCAPE:
|
||||||
|
print("return"); self.playMenu()
|
||||||
|
if event.type == pg.QUIT:
|
||||||
|
self.areYouSure()
|
||||||
|
# ========================================== SETTINGS MENU =================================================== #
|
||||||
|
if self.state == 'settingsMenu':
|
||||||
|
for event in pg.event.get():
|
||||||
|
if self.musicToggleBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorMusicToggle = self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
self.washTheScreen(); self.toggleMusic(); print('music toggle to ' + str(self.musicState))
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorMusicToggle = self.colorGrey
|
||||||
|
if self.fullScreenToggleBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorFullscreenToggle = self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
self.washTheScreen(); self.toggleFullscreen(); print('fullscreen toggle to ' + str(self.fullscreenState))
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorFullscreenToggle = self.colorGrey
|
||||||
|
if self.resetSaveBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.resetSaveColor = self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
self.washTheScreen(); self.lastDestroy = "saves"; self.areYouSureToDestroy()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.resetSaveColor = self.colorGrey
|
||||||
|
if self.resetSettingsBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.resetSettingsColor = self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
self.washTheScreen(); self.lastDestroy = "settings" ; self.areYouSureToDestroy()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.resetSettingsColor = self.colorGrey
|
||||||
|
if self.displayFPSToggleBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColordisplayFPSToggle = self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
self.washTheScreen(); self.toggleFPS(); print('displayFPS toggle to ' + str(self.displayFPS))
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColordisplayFPSToggle = self.colorGrey
|
||||||
|
if self.returnBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorReturn = self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print('return'); save.saveSettings(self.musicState, self.fullscreenState, self.displayFPS); self.mainMenu()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorReturn = self.colorGrey
|
||||||
|
if event.type == pg.KEYDOWN:
|
||||||
|
if event.key == pg.K_SEMICOLON:
|
||||||
|
self.washTheScreen(); self.toggleMusic(); print('music toggle to ' + str(self.musicState))
|
||||||
|
if event.key == pg.K_f:
|
||||||
|
self.washTheScreen(); self.toggleFullscreen(); print('fullscreen toggle to ' + str(self.fullscreenState))
|
||||||
|
if event.key == pg.K_c:
|
||||||
|
self.washTheScreen(); self.toggleFPS(); print('displayFPS toggle to ' + str(self.displayFPS))
|
||||||
|
if event.key == pg.K_r or event.key == pg.K_ESCAPE:
|
||||||
|
print('return'); save.saveSettings(self.musicState, self.fullscreenState, self.displayFPS) ; self.mainMenu()
|
||||||
|
if event.type == pg.QUIT:
|
||||||
|
self.areYouSure()
|
||||||
|
# ========================================== SURE TO QUIT SCREEN ============================================= #
|
||||||
|
if self.state == 'areYouSureToQuit':
|
||||||
|
for event in pg.event.get():
|
||||||
|
if self.yesBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorYes = self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print('yes'); self.quit()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorYes = self.colorGrey
|
||||||
|
if self.noBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorNo= self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print('no'); self.mainMenu()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorNo = self.colorGrey
|
||||||
|
if event.type == pg.KEYDOWN:
|
||||||
|
if event.key == pg.K_y:
|
||||||
|
print('yes'); self.quit()
|
||||||
|
if event.key == pg.K_n or event.key == pg.K_ESCAPE:
|
||||||
|
print('no'); self.mainMenu()
|
||||||
|
if event.type == pg.QUIT:
|
||||||
|
self.quit()
|
||||||
|
# ========================================== SURE TO DESTROY SCREEN ========================================== #
|
||||||
|
if self.state == 'areYouSureToDestroy':
|
||||||
|
for event in pg.event.get():
|
||||||
|
if self.yesBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorYes = self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print('reset ' + str(self.lastDestroy))
|
||||||
|
if self.lastDestroy == "settings":
|
||||||
|
save.resetSettings(); self.restartGame()
|
||||||
|
elif self.lastDestroy == "saves":
|
||||||
|
save.resetSave(); self.settingsMenu()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorYes = self.colorGrey
|
||||||
|
if self.noBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorNo= self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print('no'); self.settingsMenu()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorNo = self.colorGrey
|
||||||
|
if event.type == pg.KEYDOWN:
|
||||||
|
if event.key == pg.K_y:
|
||||||
|
print('reset ' + str(self.lastDestroy))
|
||||||
|
if self.lastDestroy == "settings":
|
||||||
|
save.resetSettings(); self.restartGame()
|
||||||
|
elif self.lastDestroy == "saves":
|
||||||
|
save.resetSave(); self.settingsMenu()
|
||||||
|
if event.key == pg.K_n or event.key == pg.K_ESCAPE:
|
||||||
|
print('no'); self.settingsMenu()
|
||||||
|
if event.type == pg.QUIT:
|
||||||
|
self.areYouSure()
|
||||||
|
# ========================================== PLAY MENU ======================================================= #
|
||||||
|
if self.state == 'playMenu':
|
||||||
|
for event in pg.event.get():
|
||||||
|
if os.path.isfile("savegames.txt") == True:
|
||||||
|
if self.continueBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorContinue = self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print('continue'); self.continueGame()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorContinue = self.colorGrey
|
||||||
|
else:
|
||||||
|
if self.newGameBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorNewGame= self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print('new game'); self.newGame()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorNewGame = self.colorGrey
|
||||||
|
if self.returnBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorReturn = self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print('return'); self.mainMenu()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorReturn = self.colorGrey
|
||||||
|
if event.type == pg.KEYDOWN:
|
||||||
|
if event.key == pg.K_c:
|
||||||
|
print('continue')
|
||||||
|
if event.key == pg.K_n:
|
||||||
|
print('new game'); self.newGame()
|
||||||
|
if event.key == pg.K_r or event.key == pg.K_ESCAPE:
|
||||||
|
print('return'); self.mainMenu()
|
||||||
|
if event.type == pg.QUIT:
|
||||||
|
self.areYouSure(); print('quit')
|
||||||
|
# ========================================== MAIN MENU ======================================================= #
|
||||||
|
if self.state == 'mainMenu':
|
||||||
|
for event in pg.event.get():
|
||||||
|
if self.playOptionBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorPlay = self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print('play'); self.playMenu()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorPlay = self.colorGrey
|
||||||
|
if self.settingsOptionBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorSettings = self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print('settings'); self.settingsMenu()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorSettings = self.colorGrey
|
||||||
|
if self.helpOptionBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorHelp = self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print('help'); self.helpMenu()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorHelp = self.colorGrey
|
||||||
|
if self.quitOptionBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorQuit = self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print("quit"); self.areYouSure()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorQuit = self.colorGrey
|
||||||
|
if event.type == pg.KEYDOWN:
|
||||||
|
if event.key == pg.K_p:
|
||||||
|
print('play'); self.playMenu()
|
||||||
|
if event.key == pg.K_s:
|
||||||
|
print('settings'); self.settingsMenu()
|
||||||
|
if event.key == pg.K_h:
|
||||||
|
print('help'); self.helpMenu()
|
||||||
|
if event.key == pg.K_a or event.key == pg.K_ESCAPE:
|
||||||
|
print('quit'); self.areYouSure()
|
||||||
|
if event.type == pg.QUIT:
|
||||||
|
self.areYouSure()
|
||||||
|
# ========================================== HELP MENU ======================================================= #
|
||||||
|
if self.state == 'helpMenu':
|
||||||
|
for event in pg.event.get():
|
||||||
|
if self.returnBlit.collidepoint(pg.mouse.get_pos()) == True:
|
||||||
|
self.textColorReturn = self.colorWhite
|
||||||
|
if event.type == pg.MOUSEBUTTONDOWN and event.button == 1:
|
||||||
|
print('return'); self.mainMenu()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
self.textColorReturn = self.colorGrey
|
||||||
|
if event.type == pg.KEYDOWN:
|
||||||
|
if event.key == pg.K_r or event.key == pg.K_ESCAPE:
|
||||||
|
print('return'); self.mainMenu()
|
||||||
|
if event.type == pg.QUIT:
|
||||||
|
self.areYouSure()
|
||||||
|
|
||||||
|
# >>> RENDER THE WINDOW. REALLY. >>>
|
||||||
|
def renderWindow(self):
|
||||||
|
if self.state == 'loadingScreen':
|
||||||
|
self.loadingBlit = self.screen.blit(self.loadingScreen,(0,0))
|
||||||
|
if self.state == 'mainMenu':
|
||||||
|
self.titleBlit = self.screen.blit(self.guiFont.render("Main Menu", 4, (255,255,255)), (100,175))
|
||||||
|
self.playOptionBlit = self.screen.blit(self.guiFontSub.render ("(P) - Play", 4, self.textColorPlay), (115, 250))
|
||||||
|
self.settingsOptionBlit = self.screen.blit(self.guiFontSub.render ("(S) - Settings", 4, self.textColorSettings),(115, 300))
|
||||||
|
self.helpOptionBlit = self.screen.blit(self.guiFontSub.render ("(H) - Help", 4, self.textColorHelp), (115, 350))
|
||||||
|
self.quitOptionBlit = self.screen.blit(self.guiFontSub.render ("(Q) - Quit", 4, self.textColorQuit), (115, 400))
|
||||||
|
self.menuNukemBlit = self.screen.blit(self.menuNukem, (700,100))
|
||||||
|
if self.state == 'playMenu':
|
||||||
|
self.titleBlit = self.screen.blit (self.guiFont.render("Play Menu", 4, (255,255,255)), (100,175))
|
||||||
|
if os.path.isfile("savegames.txt") == True :
|
||||||
|
self.continueBlit = self.screen.blit(self.guiFontSub.render("(C) - Continue", 4, self.textColorContinue), (115, 250))
|
||||||
|
else:
|
||||||
|
self.newGameBlit = self.screen.blit(self.guiFontSub.render ("(N) - New game", 4, self.textColorNewGame), (115, 250))
|
||||||
|
self.returnBlit = self.screen.blit(self.guiFontSub.render ("(R) - Return", 4, self.textColorReturn), (115, 300))
|
||||||
|
self.playButtonBlit = self.screen.blit(self.playButton, (700,100))
|
||||||
|
if self.state == 'newGame':
|
||||||
|
self.titleBlit = self.screen.blit(self.guiFont.render("New Game", 4, (255,255,255)), (100,175))
|
||||||
|
self.femaleChoiceBlit = self.screen.blit(self.guiFontSub.render("(F) - I'm a female.", 4 , self.textColorFemale), (115,250))
|
||||||
|
self.maleChoiceBlit = self.screen.blit(self.guiFontSub.render("(M) - I'm a male.", 4, self.textColorMale), (115, 325))
|
||||||
|
self.returnBlit = self.screen.blit(self.guiFontSub.render ("(R) - Return", 4, self.textColorReturn), (115, 400))
|
||||||
|
self.actualChoicePreviewBlit = self.screen.blit(self.actualChoicePreview, (700, 100))
|
||||||
|
if self.state == 'settingsMenu':
|
||||||
|
self.titleBlit = self.screen.blit(self.guiFont.render("Settings Menu", 4, (255,255,255)), (100,175))
|
||||||
|
self.musicToggleBlit = self.screen.blit(self.guiFontSub.render("(M) - Music : " + str(self.musicState), 4, self.textColorMusicToggle), (115, 250))
|
||||||
|
self.fullScreenToggleBlit = self.screen.blit(self.guiFontSub.render("(F) - Fullscreen : " + str(self.fullscreenState), 4, self.textColorFullscreenToggle), (115,300))
|
||||||
|
self.displayFPSToggleBlit = self.screen.blit(self.guiFontSub.render("(C) - FPS Counter : " + str(self.displayFPS),4, self.textColordisplayFPSToggle), (115,350))
|
||||||
|
self.resetSaveBlit = self.screen.blit(self.guiFontSub.render("/!\ RESET SAVES /!\ ", 4, self.resetSaveColor),(115,400))
|
||||||
|
self.resetSettingsBlit = self.screen.blit(self.guiFontSub.render("/!\ RESET SETTINGS /!\ ", 4, self.resetSettingsColor),(115,450))
|
||||||
|
self.returnBlit = self.screen.blit(self.guiFontSub.render ("(R) - Return", 4, self.textColorReturn), (115, 500))
|
||||||
|
self.settiingsWheelBlit = self.screen.blit(self.settingsWheel, (700,100))
|
||||||
|
if self.state == 'helpMenu':
|
||||||
|
self.titleBlit = self.screen.blit(self.guiFont.render("Help Menu", 4, (255,255,255)), (100,175))
|
||||||
|
self.helpText1Blit = self.screen.blit(self.guiFontSub.render("This game is a project from SergentThomasKelly", 4, self.colorGrey), (115,250))
|
||||||
|
self.helpText2Blit = self.screen.blit(self.guiFontSub.render("This is a post apolyptic game about strategy and", 4, self.colorGrey), (115,300))
|
||||||
|
self.helpText3Blit = self.screen.blit(self.guiFontSub.render("saving your life (at least). And Philosophy too.", 4, self.colorGrey), (115,350))
|
||||||
|
self.helpText3Blit = self.screen.blit(self.guiFontSub.render("> To move, use arrows and ZQSD or WASD. <", 4, self.colorGrey), (115,400))
|
||||||
|
self.returnBlit = self.screen.blit(self.guiFontSub.render ("(R) - Return", 4, self.textColorReturn), (115, 460))
|
||||||
|
if self.state == 'areYouSureToQuit':
|
||||||
|
self.titleBlit = self.screen.blit(self.guiFont.render("ARE YOU SURE ?", 4, (255,255,255)), (400,175))
|
||||||
|
self.yesBlit = self.screen.blit(self.guiFontSub.render("(Y) - Yes, let me leave", 4, self.textColorYes), (300, 250))
|
||||||
|
self.noBlit = self.screen.blit(self.guiFontSub.render("(N) - No, I regret, let me come back", 4, self.textColorNo), (300, 300))
|
||||||
|
if self.state == 'areYouSureToDestroy':
|
||||||
|
self.titleBlit = self.screen.blit(self.guiFont.render("SOME DATA WILL BE DESTROYED!", 4, (255,255,255)), (100,175))
|
||||||
|
self.yesBlit = self.screen.blit(self.guiFontSub.render("(Y) - I don't care. Destroy.", 4, self.textColorYes), (115, 250))
|
||||||
|
self.noBlit = self.screen.blit(self.guiFontSub.render("(N) - Don't destroy!", 4, self.textColorNo), (115, 350))
|
||||||
|
if self.state == 'pause':
|
||||||
|
self.titleBlit = self.screen.blit(self.guiFont.render("Paused", 4, (255,255,255)), (100,175))
|
||||||
|
self.resumeBlit = self.screen.blit(self.guiFontSub.render("(R) - Resume game", 4, self.textColorResume), (115, 250))
|
||||||
|
self.mainMenuBlit = self.screen.blit(self.guiFontSub.render("(M) - Main Menu", 4, self.textColorMainMenu), (115, 300))
|
||||||
|
self.quitGameBlit = self.screen.blit(self.guiFontSub.render("(Q) - Quit", 4, self.textColorQuitGame), (115, 350))
|
||||||
|
if self.state == 'game':
|
||||||
|
self.screen.blit(self.screenWasher,(0,0))
|
||||||
|
self.mapBlit = self.screen.blit(self.mapPic, (self.mapPosX, self.mapPosY))
|
||||||
|
self.persoBlit = self.screen.blit(self.playerImg, (self.posX, self.posY), self.picCoordinates); self.persoRect = pg.Rect(self.posX, self.posY, self.persoBlit.w-2, self.persoBlit.h-2)
|
||||||
|
if self.state != 'loading':
|
||||||
|
self.screen.blit(self.warningVersion,(0,0))
|
||||||
|
pg.display.update()
|
||||||
|
|
||||||
|
# >>> DO YOU REALLY NEED COMMENTS FOR THIS ONE ? >>>
|
||||||
|
def quit(self):
|
||||||
|
pg.quit()
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# >>> RESTART THE WHOLE GAME >>>
|
||||||
|
def restartGame(self):
|
||||||
|
os.startfile(r"core.py")
|
||||||
|
self.quit()
|
||||||
|
|
||||||
|
Game()
|
BIN
Source Code/font/Savior1.ttf
Normal file
BIN
Source Code/map/l1.png
Normal file
After Width: | Height: | Size: 483 KiB |
7
Source Code/music/credits.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
================== CREDITS ==================
|
||||||
|
> mainMenu music is "Void 643" from donbor
|
||||||
|
> play music is "Blind" from donbor
|
||||||
|
ALL CREDITS TO ARTISTS !
|
||||||
|
|
||||||
|
visit donbor's bandcamp to download songs :
|
||||||
|
https://donbor.bandcamp.com
|
BIN
Source Code/music/mainMenu.ogg
Normal file
BIN
Source Code/music/play.ogg
Normal file
71
Source Code/savesystem.py
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
##Coded by SergentThomasKelly
|
||||||
|
################################################################################
|
||||||
|
# INITIALISATION #
|
||||||
|
################################################################################
|
||||||
|
import os
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# SAVE SYSTEM #
|
||||||
|
################################################################################
|
||||||
|
# >>> CREATE A NEW GAME >>>
|
||||||
|
def newGame(gender):
|
||||||
|
if os.path.isfile("savegames.txt") == True:
|
||||||
|
savegames = open("savegames.txt","a")
|
||||||
|
savegames.write("\n0:"+ "100:" + str(gender))
|
||||||
|
savegames.close()
|
||||||
|
else:
|
||||||
|
savegames = open("savegames.txt","w")
|
||||||
|
savegames.write("0:"+ "100:" + str(gender))
|
||||||
|
savegames.close
|
||||||
|
|
||||||
|
# >>> READ GAME SAVES >>>
|
||||||
|
def readGame():
|
||||||
|
savegames = open("savegames.txt","r")
|
||||||
|
lastSave = savegames.readline(); savegames.close()
|
||||||
|
lastSS = lastSave.split(":")
|
||||||
|
level = lastSS[0]; life = lastSS[1]; gender = lastSS[2]
|
||||||
|
return [gender, life, level]
|
||||||
|
|
||||||
|
# >>> SAVE GAME >>>
|
||||||
|
def saveGame(gender, life, level):
|
||||||
|
savegames = open("savegames.txt","w")
|
||||||
|
savegames.write(str(level)+":"+str(life)+":"+str(gender))
|
||||||
|
savegames.close
|
||||||
|
|
||||||
|
# >>> RESET GAME SAVES >>>
|
||||||
|
def resetSave():
|
||||||
|
if os.path.isfile("savegames.txt"):
|
||||||
|
os.remove("savegames.txt")
|
||||||
|
|
||||||
|
# >>> SAVE SETTINGS >>>
|
||||||
|
def saveSettings(musicState,fullscreenState,fpsCounterState):
|
||||||
|
if os.path.isfile("settings.txt")==True:
|
||||||
|
settings = open("settings.txt","a")
|
||||||
|
settings.write(str(musicState)+str(":")+str(fullscreenState)+str(":")+str(fpsCounterState)+str(":"))
|
||||||
|
settings.close()
|
||||||
|
else:
|
||||||
|
settings = open("settings.txt","w")
|
||||||
|
settings.write(str(musicState)+str(":")+str(fullscreenState)+str(":")+str(fpsCounterState)+str(":"))
|
||||||
|
settings.close()
|
||||||
|
|
||||||
|
# >>> LOAD SETTINGS SAVED PREVIOUSLY >>>
|
||||||
|
def readSettings():
|
||||||
|
settings = open("settings.txt","r")
|
||||||
|
settingsSaved = settings.readline()
|
||||||
|
settingsSaved = settingsSaved.split(":")
|
||||||
|
musicState = settingsSaved[0]; fullscreenState = settingsSaved[1]; fpsCounterState = settingsSaved[2]
|
||||||
|
return [musicState, fullscreenState, fpsCounterState]
|
||||||
|
|
||||||
|
# >>> RESET THE SETTINGS TO THE DEFAULT VALUES >>>
|
||||||
|
def resetSettings():
|
||||||
|
if os.path.isfile("settings.txt"):
|
||||||
|
os.remove("settings.txt")
|
||||||
|
|
||||||
|
# >>> WRITE ALL WALLS IN A TEXT >>>
|
||||||
|
def writeWalls(offline, map):
|
||||||
|
wallstext = open("walls.txt","w")
|
||||||
|
if not offline:
|
||||||
|
for tile_object in map.mapDATA.objects:
|
||||||
|
if tile_object.name == 'wall':
|
||||||
|
wallstext.write("("+str(tile_object.x)+","+str(tile_object.y)+","+str(tile_object.width)+","+str(tile_object.height)+"),\n")
|
||||||
|
wallstext.close()
|
107
Source Code/settings.py
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
##Coded by SergentThomasKelly
|
||||||
|
################################################################################
|
||||||
|
# INITIALISATION #
|
||||||
|
################################################################################
|
||||||
|
from pygame import math
|
||||||
|
vec = math.Vector2
|
||||||
|
WIDTH = 1280
|
||||||
|
HEIGHT = 720
|
||||||
|
TITLE = "EXODUS (PRE-BETA RELEASE -- GITHUB EDITION)"
|
||||||
|
perso_x = 1280/2
|
||||||
|
perso_y = 720/2
|
||||||
|
playerAnimationLoop = 1
|
||||||
|
f_playerCoordinatesDown = {1:(2,0,30,33), 2:(32,0,33,32), 3:(64,0,31,33)}
|
||||||
|
f_playerCoordinatesLeft = {1:(4,33,27,31), 2:(36,32,25,33), 3:(68,33,24,31)}
|
||||||
|
f_playerCoordinatesRight = {1:(1,65,27,31), 2:(35,64,25,32), 3:(68,65,24,31)}
|
||||||
|
f_playerCoordinatesUp = {1:(3,97,28,31), 2:(33,96,31,32), 3:(66,97,28,31)}
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# PLAYER ANIMATION #
|
||||||
|
################################################################################
|
||||||
|
def playerAnimation(direction, gender):
|
||||||
|
global playerCoordinatesDown, playerAnimationLoop
|
||||||
|
playerAnimationLoop += 2
|
||||||
|
if playerAnimationLoop >= 4:
|
||||||
|
playerAnimationLoop = 1
|
||||||
|
if gender == 'female':
|
||||||
|
if direction == 'down':
|
||||||
|
return f_playerCoordinatesDown[playerAnimationLoop]
|
||||||
|
elif direction == 'noneDown':
|
||||||
|
return f_playerCoordinatesDown[2]
|
||||||
|
elif direction == 'left':
|
||||||
|
return f_playerCoordinatesLeft[playerAnimationLoop]
|
||||||
|
elif direction == 'noneLeft':
|
||||||
|
return f_playerCoordinatesLeft[2]
|
||||||
|
elif direction == 'right':
|
||||||
|
return f_playerCoordinatesRight[playerAnimationLoop]
|
||||||
|
elif direction == 'noneRight':
|
||||||
|
return f_playerCoordinatesRight[2]
|
||||||
|
elif direction == 'up':
|
||||||
|
return f_playerCoordinatesUp[playerAnimationLoop]
|
||||||
|
elif direction == 'noneUp':
|
||||||
|
return f_playerCoordinatesUp[2]
|
||||||
|
|
||||||
|
POS = (753.00,143.67)
|
||||||
|
|
||||||
|
WALLS=[(176.0,32.0,765.333,79.6667),
|
||||||
|
(178.667,33.3333,26.6667,268.0),
|
||||||
|
(50.6667,146.667,154.667,155.333),
|
||||||
|
(48.0,144.0,29.3333,1054.67),
|
||||||
|
(180.0,222.667,73.3333,79.0),
|
||||||
|
(305.333,224.0,154.833,77.0),
|
||||||
|
(337.333,34.6667,26.0,265.667),
|
||||||
|
(526.667,34.6667,33.3333,266.333),
|
||||||
|
(512.167,223.333,141.667,80.0),
|
||||||
|
(704.0,228.333,138.5,74.1667),
|
||||||
|
(724.333,34.6667,25.0,265.0),
|
||||||
|
(916.0,35.0,26.6667,1162.34),
|
||||||
|
(899.5,229.334,41.8333,73.0),
|
||||||
|
(177.333,417.333,188.0,93.3333),
|
||||||
|
(176.0,416.0,29.3333,282.333),
|
||||||
|
(178.667,592.0,317.333,80.3333),
|
||||||
|
(431.333,421.667,493.0,74.0),
|
||||||
|
(465.0,421.334,29.3333,601.0),
|
||||||
|
(470.667,641.333,313.333,109.0),
|
||||||
|
(848.0,640.0,93.3333,92.6667),
|
||||||
|
(177.333,754.667,28.0,265.667),
|
||||||
|
(182.667,833.333,598.667,76.3333),
|
||||||
|
(848.0,832.0,94.6667,78.3333),
|
||||||
|
(49.3333,1108.0,638.667,90.6667),
|
||||||
|
(785.333,1106.67,158.667,90.6667),
|
||||||
|
(362.0,450.0,78.0,61.0),
|
||||||
|
(207.0,112.0,134.0,31.0),
|
||||||
|
(305.0,103.0,33.0,56.0),
|
||||||
|
(402.0,114.0,57.0,43.0),
|
||||||
|
(361.0,201.0,85.0,50.0),
|
||||||
|
(503.0,152.0,26.0,21.0),
|
||||||
|
(594.0,114.5,54.0,42.0),
|
||||||
|
(550.0,201.5,89.0,50.0),
|
||||||
|
(692.0,152.5,26.0,21.0),
|
||||||
|
(786.0,115.5,57.0,41.0),
|
||||||
|
(745.0,202.5,89.0,50.0),
|
||||||
|
(886.0,152.5,26.0,10.0),
|
||||||
|
(258.0,771.0,88.0,24.0),
|
||||||
|
(205.0,663.0,64.0,36.0),
|
||||||
|
(369.0,665.0,104.0,40.0),
|
||||||
|
(370.0,697.0,64.0,103.0),
|
||||||
|
(484.0,790.0,43.0,48.0),
|
||||||
|
(686.0,1197.0,104.0,32.0),
|
||||||
|
(280.0,898.0,51.0,109.0),
|
||||||
|
(198.0,898.0,40.0,93.0),
|
||||||
|
(369.0,880.0,75.0,46.0),
|
||||||
|
(369.0,961.0,27.0,46.0),
|
||||||
|
(439.0,897.0,29.0,111.0),
|
||||||
|
(483.0,882.0,122.0,107.0),
|
||||||
|
(696.0,892.0,55.0,33.0),
|
||||||
|
(524.0,816.0,180.0,22.0),
|
||||||
|
(880.0,705.0,36.0,60.0),
|
||||||
|
(495.0,470.0,286.0,42.0),
|
||||||
|
(495.0,509.0,206.0,56.0),
|
||||||
|
(491.0,616.0,213.0,25.0),
|
||||||
|
(492.0,566.0,260.0,51.0),
|
||||||
|
(750.0,579.0,31.0,25.0),
|
||||||
|
(885.0,517.0,27.0,44.0),
|
||||||
|
(887.0,907.0,29.0,201.0),
|
||||||
|
(602.0,901.0,38.0,26.0),
|
||||||
|
(641.0,901.0,87.0,91.0),
|
||||||
|
(78.0,1088.0,400.0,15.0)]
|
BIN
Source Code/sprites/icon/icon2.png
Normal file
After Width: | Height: | Size: 7.7 KiB |
BIN
Source Code/sprites/loading/loading.png
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
Source Code/sprites/loading/oldwarn.png
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
Source Code/sprites/loading/warn.png
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
Source Code/sprites/menus/main.jpg
Normal file
After Width: | Height: | Size: 696 KiB |
BIN
Source Code/sprites/menus/play.jpg
Normal file
After Width: | Height: | Size: 7.1 KiB |
BIN
Source Code/sprites/menus/settings.jpg
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
Source Code/sprites/player/female.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
Source Code/sprites/player/female/ante.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
Source Code/sprites/player/female/postWithBag.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
Source Code/sprites/player/female/postWithoutBag.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
Source Code/sprites/player/male.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
Source Code/sprites/player/male/ante.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
Source Code/sprites/player/male/postWithBag.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
Source Code/sprites/player/male/postWithoutBag.png
Normal file
After Width: | Height: | Size: 3.2 KiB |