Added intro game state and placeholder assets.

This commit is contained in:
2025-09-28 14:56:43 -04:00
parent 0023c0a0a2
commit dada9d2ae1
15 changed files with 158 additions and 31 deletions

View File

@@ -4,7 +4,21 @@ A dungeon crawler game made with LoveDOS for the DOSember Game Jam https://itch.
## Assets used ## Assets used
- [Click.wav by frosty ham](https://opengameart.org/content/click-0) ### Sprites
- [B&W Ornamental Cursor by qubodup](https://opengameart.org/content/bw-ornamental-cursor-19x19) - [B&W Ornamental Cursor by qubodup](https://opengameart.org/content/bw-ornamental-cursor-19x19)
- [Dogs of Cyberspace by congusbongus](https://modarchive.org/index.php?request=view_by_moduleid&query=207032)
- [Microchip texture by ZeptoBARS](https://opengameart.org/content/microchip-texture) - [Microchip texture by ZeptoBARS](https://opengameart.org/content/microchip-texture)
- [Eris in colour by Stephen](https://openclipart.org/detail/329762/eris-in-colour)
### Sound effects
- [Click.wav by frosty ham](https://opengameart.org/content/click-0)
- [Sci-Fi Sound Effects Library by Little Robot Sound Factory](https://opengameart.org/content/sci-fi-sound-effects-library)
### Music
- [Dogs of Cyberspace by congusbongus](https://modarchive.org/index.php?request=view_by_moduleid&query=207032)
### Fonts
- [Concrete by Frank Baranowski](https://fontlibrary.org/en/font/concrete)
- [Nemoy by BSozoo](https://fontlibrary.org/en/font/nemoy)
- [Banana Brick by artmaker](https://fontlibrary.org/en/font/banana-brick)

BIN
fonts/BBrick.ttf Normal file

Binary file not shown.

BIN
fonts/Concrete.ttf Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

BIN
imgs/splash.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
imgs/title.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
imgs/wally.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -14,14 +14,33 @@ local Fader = require 'src.fader'
Current_state = 1 Current_state = 1
Fade = Fader() Fade = Fader()
Change_state = false Change_state = false
Debug = false
------------------------------------------------------------------------------
-- Helper methods
------------------------------------------------------------------------------
local function parse_args(args)
for _, v in pairs(args) do
-- Enable debug mode.
if v == '-debug' then Debug = true end
end
end
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
-- Game methods -- Game methods
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
function love.load() function love.load(args)
parse_args(args)
-- Load the assets of the intro game state.
game_states[Current_state]:load() game_states[Current_state]:load()
-- Call a fade in after the intro assets are loaded.
Fade:fade_in() Fade:fade_in()
end end
@@ -61,21 +80,43 @@ function love.draw()
love.graphics.clear() love.graphics.clear()
game_states[Current_state]:draw() game_states[Current_state]:draw()
Fade:draw() Fade:draw()
end
if Debug then
function love.keypressed(key) love.graphics.print(string.format('OS: %s', love.system.getOS()), 5, 5)
-- Send events to the active game state if there is no fade active. love.graphics.print(string.format('Love version: %s', love.getVersion()), 5, 15)
if Fade.done then love.graphics.print(string.format('Memory usage: %s KiB', love.system.getMemUsage()), 5, 25)
game_states[Current_state]:keypressed(key)
end end
end end
function love.mousemoved(x, y) function love.keypressed(key, code, isrepeat)
-- Send events to the active game state if there is no fade active. -- Send events to the active game state if there is no fade active.
if Fade.done then if Fade.done then
game_states[Current_state]:mousemoved(x, y) game_states[Current_state]:keypressed(key, code, isrepeat)
end
end
function love.keyreleased(key, code)
-- Send events to the active game state if there is no fade active.
if Fade.done then
game_states[Current_state]:keyreleased(key, code)
end
end
function love.textinput(text)
-- Send events to the active game state if there is no fade active.
if Fade.done then
game_states[Current_state]:textinput(text)
end
end
function love.mousemoved(x, y, dx, dy)
-- Send events to the active game state if there is no fade active.
if Fade.done then
game_states[Current_state]:mousemoved(x, y, dx, dy)
end end
end end
@@ -86,3 +127,11 @@ function love.mousepressed(x, y, btn)
game_states[Current_state]:mousemoved(x, y, btn) game_states[Current_state]:mousemoved(x, y, btn)
end end
end end
function love.mousereleased(x, y, btn)
-- Send events to the active game state if there is no fade active.
if Fade.done then
game_states[Current_state]:mousereleased(x, y, btn)
end
end

BIN
snd/ablhole.wav Normal file

Binary file not shown.

BIN
snd/ablhole2.wav Normal file

Binary file not shown.

BIN
snd/alang.wav Normal file

Binary file not shown.

BIN
snd/jachiev.wav Normal file

Binary file not shown.

View File

@@ -22,6 +22,7 @@ function Fader:_init()
self.step = 0 self.step = 0
self.done = true self.done = true
self.reverse = false self.reverse = false
self.callback = nil
end end
@@ -32,15 +33,17 @@ function Fader:_reset()
end end
function Fader:fade_in() function Fader:fade_in(callback)
self:_reset() self:_reset()
self.reverse = true self.reverse = true
self.callback = callback
end end
function Fader:fade_out() function Fader:fade_out(callback)
self:_reset() self:_reset()
self.reverse = false self.reverse = false
self.callback = callback
end end
@@ -53,7 +56,13 @@ function Fader:update(dt)
self.t = 0.0 self.t = 0.0
end end
if self.step > 175 then self.done = true end if self.step > 175 then
self.done = true
if self.callback ~= nil then
self.callback()
self.callback = nil
end
end
end end
end end
@@ -78,10 +87,6 @@ function Fader:draw()
end end
love.graphics.setColor() love.graphics.setColor()
-- love.graphics.print(string.format('t: %s', self.t), 5, 35)
-- love.graphics.print(string.format('step: %s', self.step), 5, 45)
-- love.graphics.print(string.format('W: %s', love.graphics.getWidth()), 5, 55)
-- love.graphics.print(string.format('H: %s', love.graphics.getHeight()), 5, 65)
end end

View File

@@ -39,11 +39,20 @@ end
function GameState:unload() function GameState:unload()
end end
function GameState:keypressed(_)
function GameState:keypressed(_, _ , _)
end end
function GameState:mousemoved(_, _) function GameState:textinput(_)
end
function GameState:keyreleased(_, _)
end
function GameState:mousemoved(_, _, _, _)
end end
@@ -51,6 +60,9 @@ function GameState:mousepressed(_, _, _)
end end
function GameState:mousereleased(_, _, _)
end
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
-- Module return -- Module return
------------------------------------------------------------------------------ ------------------------------------------------------------------------------

View File

@@ -5,6 +5,7 @@
local love = require 'love' local love = require 'love'
local make_class = require 'src.classes' local make_class = require 'src.classes'
local GameState = require 'src.gstate' local GameState = require 'src.gstate'
local Fader = require 'src.fader'
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@@ -19,37 +20,83 @@ local Intro = make_class(GameState)
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
function Intro:_init(name, index) function Intro:_init(name, index)
-- Call super-class constructor.
GameState._init(self, name, index) GameState._init(self, name, index)
-- Attribute definitions
self.skip = false self.skip = false
self.fade = Fader()
self.stage = 0
self.timer = 0
end end
function Intro:load() function Intro:load()
self.background = love.graphics.newImage('imgs/cpu.png') self.splash = love.graphics.newImage('imgs/splash.png')
self.author = love.graphics.newImage('imgs/wally.png')
self.title = love.graphics.newImage('imgs/title.png')
self.splash_snd = love.audio.newSource('snd/jachiev.wav')
self.author_snd = love.audio.newSource('snd/alang.wav')
self.title_snd = love.audio.newSource('snd/ablhole.wav')
self.valid = true self.valid = true
self.splash_snd:play()
end end
function Intro:update(_) function Intro:update(dt)
if not self.skip then return self.index else return 0 end local total_time
if self.stage == 0 then
total_time = 4.5
elseif self.stage == 1 then
total_time = 3.0
else
total_time = 8.0
end
if self.fade.done then
self.timer = self.timer + dt
end
if self.timer >= total_time then
self.fade:fade_out(
function ()
self.stage = self.stage + 1
if self.stage == 1 then
self.author_snd:play()
elseif self.stage == 2 then
self.title_snd:play()
end
self.fade:fade_in()
end
)
self.timer = 0.0
end
self.fade:update(dt)
if not self.skip and self.stage < 3 then return self.index else return 2 end
end end
function Intro:draw() function Intro:draw()
if self.valid then if self.valid then
love.graphics.draw(self.background, 0, 0) if self.stage == 0 then love.graphics.draw(self.splash, 0, 0)
love.graphics.print(string.format('OS: %s', love.system.getOS()), 5, 5) elseif self.stage == 1 then love.graphics.draw(self.author, 0, 0)
love.graphics.print(string.format('Love version: %s', love.getVersion()), 5, 15) elseif self.stage == 2 then love.graphics.draw(self.title, 0, 0) end
love.graphics.print(string.format('Memory usage: %s KiB', love.system.getMemUsage()), 5, 25)
end end
self.fade:draw()
end end
function Intro:unload() function Intro:unload()
self.background = nil self.splash = nil
self.author = nil
self.title = nil
self.splash_snd = nil
self.author_snd = nil
self.title_snd = nil
self.valid = false self.valid = false
end end