Compare commits

...

2 commits

Author SHA1 Message Date
dvorakmortonxd
a0e8d6a6ba might aswell add the last changes before I unfinished the jam 2026-06-12 08:00:28 +02:00
dvorakmortonxd
8aa6154710 still feel like im cooked, theres 9 hours left for the jam and its 9PM 🥀 2026-06-07 21:08:11 +02:00
4 changed files with 90 additions and 14 deletions

View file

@ -2,6 +2,9 @@ from render import load_sprite # this makes it so our function for rendering spr
import pygame
tickd = 0
dialognum = 0
playerx,playery = 596, 245
oldpx, oldpy = 596, 245
playerXc, playerYc = 0,0
DIALOGTEXT = "UNDEFINED"
def level1(screen, sheet, screen_width, screen_height, lastclickpos, basicfont, mouse, click, big_text, level, tick, slightfont, pygamemixer): # the function for our first level, ignore the unused variables here, you can use them when you edit it
global tickd
@ -13,7 +16,7 @@ def level1(screen, sheet, screen_width, screen_height, lastclickpos, basicfont,
screen.blit(overlay, (0, 0))
elif tickd > 450:
tickd = 0
mainmenu_text = slightfont.render("THE DESTROYER OF CITIES", True, (210, 210, 210))
mainmenu_text = slightfont.render("THE LARVAE", True, (210, 210, 210))
playb_collision = pygame.Rect(315, 200, 285, 105)
exitb_collision = pygame.Rect(315, 350, 285, 105)
if playb_collision.collidepoint(mouse.get_pos()):
@ -38,10 +41,10 @@ def level1(screen, sheet, screen_width, screen_height, lastclickpos, basicfont,
screen.blit(load_sprite(sheet, 57, 0, 19, 7, 285, 105), (315, 350))
exit_text = basicfont.render("Exit", True, (255,255,255))
screen.blit(exit_text, (414, 380))
screen.blit(mainmenu_text, (45, 65))
screen.blit(mainmenu_text, (255, 65))
return level # this returns the change we made to the level so that it updates in main.py
def level2(blip, screen, sheet, screen_width, screen_height, lastclickpos, basicfont, mouse, click, big_text, level, tick, slightfont, pygamemixer): # the function for our first level, ignore the unused variables here, you can use them when you edit it
global tickd, dialognum, DIALOGTEXT
global tickd, dialognum, DIALOGTEXT, playerx, playery
if dialognum not in [9, 11]:
tickd += 1
else:
@ -106,14 +109,15 @@ def level2(blip, screen, sheet, screen_width, screen_height, lastclickpos, basic
if dialognum == 12:
DIALOGTEXT = "I'm the parasite..."
screen.blit(load_sprite(sheet, 0, 37, 57,36, 912, 576), (0,0))
screen.blit(load_sprite(sheet,57,40,6,28, 60, 280), (600, 290))
screen.blit(load_sprite(sheet,57,40,6,28, 60, 280), (playerx, playery))
dialog_square = pygame.surface.Surface((800, 68), pygame.SRCALPHA)
dialog_square.fill((0, 0, 0))
screen.blit(dialog_square, (56, 500))
if dialognum == 13:
DIALOGTEXT = ""
tickd = 0
screen.blit(load_sprite(sheet, 0, 37, 57,36, 912, 576), (0,0))
screen.blit(load_sprite(sheet,57,15,8,25, 80, 250), (660, 290))
screen.blit(load_sprite(sheet,57,40,6,28, 60, 280), (600, 290))
level = 3
dialog = basicfont.render(DIALOGTEXT, True, transparency)
if len(DIALOGTEXT) < 16:
@ -132,4 +136,36 @@ def level2(blip, screen, sheet, screen_width, screen_height, lastclickpos, basic
if dialognum != 7:
pygame.mixer.Sound.play(blip)
tickd = 60
return level # returns the current level set
return level # returns the current level set
def level3(blip, screen, sheet, screen_width, screen_height, lastclickpos, basicfont, mouse, click, big_text, level, tick, slightfont, pygamemixer): # the function for our first level, ignore the unused variables here, you can use them when you edit it
global tickd, playerx, playery
tickd += 1
screen.blit(load_sprite(sheet, 0, 37, 57, 36, 912, 576), (0, 0))
screen.blit(load_sprite(sheet,57,40,6,28, 60, 280), (playerx, playery))
square = pygame.surface.Surface((812, 476), pygame.SRCALPHA)
square.fill((0, 0, 0))
if tickd < 255:
transparency = (tickd, tickd, tickd)
else:
transparency = (255,255,255)
dialog1 = basicfont.render("Controls:", True, transparency)
dialog2 = basicfont.render("<WASD> to move around", True, transparency)
dialog3 = basicfont.render("<E> to interact when prompted", True, transparency)
dialog4 = basicfont.render("<H> to hide yourself (the parasite)", True, transparency)
dialog5 = basicfont.render("<Escape> to pause", True, transparency)
dialog6 = basicfont.render("Press <Space> to continue.", True, transparency)
square.blit(dialog1, (15, 15))
square.blit(dialog2, (15, 65))
square.blit(dialog3, (15, 115))
square.blit(dialog4, (15, 165))
square.blit(dialog5, (15, 215))
square.blit(dialog6, (15, 426))
screen.blit(square, (50, 50))
return level
def level4(blip, screen, sheet, screen_width, screen_height, lastclickpos, basicfont, mouse, click, big_text, level, tick, slightfont, pygamemixer): # the function for our first level, ignore the unused variables here, you can use them when you edit it
global tickd,playerx,playery, playerXc, playerYc
screen.blit(load_sprite(sheet, 0, 37, 57, 36, 912, 576), (0, 0))
screen.blit(load_sprite(sheet,57,40,6,28, 60, 280), (playerx, playery))
return level

56
main.py
View file

@ -13,7 +13,7 @@ def main(fps=window_fps): # the main function
screen_width = 912 # the screen width
screen_height = 576 # the screen height
# THE SCREEN IS 19:12 RATIO
title = "The Destroyer of Cities" # the title of the window obviously
title = "The Larvae" # the title of the window obviously
lastclickpos = [0, 0] # last position that was clicked, this changes every time you click somewhere on the game window
screen = pygame.display.set_mode((screen_width, screen_height)) # this initializes the display with the screen_width and screen_height variables
pygame.display.set_caption(title) # this actually sets the title of the window from the title variable
@ -28,13 +28,31 @@ def main(fps=window_fps): # the main function
level = 1 # the level variable, this also gets changed during the "gameplay"
running = True # this variable starts the game loop
while running: # game loop
levels.oldpx, levels.oldpy = levels.playerx, levels.playery
screen.fill((0, 0, 0)) # fills the screen with black, so the sprites loaded previously dont overlap and this clears the last frame every "tick"
for event in pygame.event.get(): # this checks for stuff like key presses and mouse clicks
if event.type == pygame.QUIT: # what happens when you click the X button on the window
running = False # poof
if event.type == pygame.KEYDOWN: # what happens when you press down a key
if event.key == pygame.K_ESCAPE:
levels.dialognum += 1
if event.key == pygame.K_SLASH:
levels.dialognum = 13
pygame.mixer.music.stop()
level = 2
if event.key == pygame.K_SPACE:
if level == 3:
tickd = 0
level = 4
if level > 3:
if event.key == pygame.K_w:
levels.playerYc = -3
if event.key == pygame.K_a:
levels.playerXc = -3
if event.key == pygame.K_s:
levels.playerYc = +3
if event.key == pygame.K_d:
levels.playerXc = +3
if event.key == pygame.K_h:
if levels.dialognum == 9:
levels.tickd = 0
@ -43,6 +61,16 @@ def main(fps=window_fps): # the main function
if levels.dialognum == 11:
levels.tickd = 0
levels.dialognum = 12
if event.type == pygame.KEYUP:
if level > 3:
if event.key == pygame.K_w:
playerYc = 0
if event.key == pygame.K_a:
playerXc = 0
if event.key == pygame.K_s:
playerYc = 0
if event.key == pygame.K_d:
playerXc = 0
if event.type == pygame.MOUSEBUTTONDOWN: # what happens when you press down a mouse button
click = True # sets the click variable to True so level function in levels.py can see
print(pygame.mouse.get_pos()) # prints out where the mouse is during the click for debugging purposes
@ -55,12 +83,24 @@ def main(fps=window_fps): # the main function
level = levels.level1(screen, sheet, screen_width, screen_height, lastclickpos, basicfont, pygame.mouse, click, bigfont, level, tick, slightly_smaller_than_bigfont, pygame.mixer.music) # runs the level1 function from levels.py
if level == 2:
level = levels.level2(blip, screen, sheet, screen_width, screen_height, lastclickpos, basicfont, pygame.mouse, click, bigfont, level, tick, slightly_smaller_than_bigfont, pygame.mixer.music)
# THE REASON WE CALL IT LIKE THIS INSTEAD OF NORMALLY IS SO WE CAN CHANGE THE LEVEL VARIABLE
elif level == 2: # what happens when the level variable is equal to 2 ofc
level = levels.level2(screen, sheet, lastclickpos, basicfont, pygame.mouse, click, level) # runs the level2 function from levels.py
if level == 3:
level = levels.level3(blip, screen, sheet, screen_width, screen_height, lastclickpos, basicfont, pygame.mouse, click, bigfont, level, tick, slightly_smaller_than_bigfont, pygame.mixer.music)
if level == 4:
level = levels.level4(blip, screen, sheet, screen_width, screen_height, lastclickpos, basicfont, pygame.mouse, click, bigfont, level, tick, slightly_smaller_than_bigfont, pygame.mixer.music)
fps_text = sysfont.render(str(int(clock.get_fps())), True, (0, 255, 0)) # defines a thing that renders your fps in the top left corner
screen.blit(fps_text, (5, 5)) # this actually renders "ftp_text" on the screen at the position (5, 5) which is the top left corner
#screen.blit(fps_text, (5, 5)) # this actually renders "ftp_text" on the screen at the position (5, 5) which is the top left corner
if 180 > levels.playerx:
levels.playerx = 180
if 615 < levels.playerx:
levels.playerx = 615
if 165 > levels.playery:
levels.playery = 165
if 275 < levels.playery:
levels.playery = 275
levels.playerx += levels.playerXc
levels.playery += levels.playerYc
pygame.display.flip() # this updates the display so it displays all the new stuff we added
clock.tick(fps) # this makes sure the game loop runs at the fps we set it to before
pygame.quit() #this quits our game when the game loop somehow ends, for example by pressing escape or the X button on the window

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

Before After
Before After

Binary file not shown.