This commit is contained in:
wan-may 2025-11-02 22:07:29 -04:00
parent ddaf61c52c
commit 0bbbae1a6e
9 changed files with 252 additions and 20 deletions

View File

@ -0,0 +1,29 @@
return {
_font = "client/assets/fonts/Montserrat-Bold.ttf",
_title = "SOUS L'ŒIL",
["newgame_button"] = "New Game",
["join_button"] = "Join Server",
["quit_button"] = "Quit",
["option_button"] = "Settings",
["mainmenu_button"] = "Main Menu",
["option_name"] = "Player Name",
["option_pron"] = "Player Pronouns",
["option_tint"] = "Player Colour",
["option_keybinds"] = "Edit Keybindings",
["utf8_error"] = "[countrypilled]",
["server_browser"] = "Server Browser",
["ip_button"] = "Enter IP:",
["svinfo_name"] = "Server Name",
["svinfo_map"] = "Current Map",
["svinfo_players"] = "In",
["svinfo_capacity"] = "Max",
["svinfo_ip"] = "IP",
["svinfo_port"] = "Port",
["refresh_button"] = "Refresh",
["cancel_button"] = "Cancel",
optionsMenu = {
language = "Language",
resolution = "Resolution",
},
game_intro = "A gaze blank and pitiless as the sun",
}

View File

@ -1,4 +1,6 @@
return setmetatable({ return {
_font = "client/assets/fonts/Montserrat-Bold.ttf",
_title = "SOUS L'ŒIL",
["newgame_button"] = "New Game", ["newgame_button"] = "New Game",
["join_button"] = "Join Server", ["join_button"] = "Join Server",
["quit_button"] = "Quit", ["quit_button"] = "Quit",
@ -20,4 +22,4 @@ return setmetatable({
["refresh_button"] = "Refresh", ["refresh_button"] = "Refresh",
["cancel_button"] = "Cancel", ["cancel_button"] = "Cancel",
game_intro = "A gaze blank and pitiless as the sun", game_intro = "A gaze blank and pitiless as the sun",
}, {__index = function( t, k ) return k end } ) }

View File

@ -1,5 +1,5 @@
function love.conf(t) function love.conf(t)
t.identity = "vision-dajjal" -- The name of the save directory (string) t.identity = "sous-loeil" -- The name of the save directory (string)
t.appendidentity = false -- Search files in source directory before save directory (boolean) t.appendidentity = false -- Search files in source directory before save directory (boolean)
t.version = "11.4" -- The LÖVE version this game was made for (string) t.version = "11.4" -- The LÖVE version this game was made for (string)
t.console = true -- Attach a console (boolean, Windows only) t.console = true -- Attach a console (boolean, Windows only)
@ -10,8 +10,8 @@ function love.conf(t)
t.audio.mic = false -- Request and use microphone capabilities in Android (boolean) t.audio.mic = false -- Request and use microphone capabilities in Android (boolean)
t.audio.mixwithsystem = true -- Keep background music playing when opening LOVE (boolean, iOS and Android only) t.audio.mixwithsystem = true -- Keep background music playing when opening LOVE (boolean, iOS and Android only)
t.window.title = "vision-dajjal" -- The window title (string) t.window.title = "SOUS L'OEIL" -- The window title (string)
t.window.icon = "assets/client-icon.png" -- Filepath to an image to use as the window's icon (string) t.window.icon = "client/assets/client-icon.png" -- Filepath to an image to use as the window's icon (string)
t.window.width = 800 -- The window width (number) t.window.width = 800 -- The window width (number)
t.window.height = 600 -- The window height (number) t.window.height = 600 -- The window height (number)
t.window.borderless = false -- Remove all border visuals from the window (boolean) t.window.borderless = false -- Remove all border visuals from the window (boolean)
@ -40,7 +40,7 @@ function love.conf(t)
t.modules.keyboard = true -- Enable the keyboard module (boolean) t.modules.keyboard = true -- Enable the keyboard module (boolean)
t.modules.math = true -- Enable the math module (boolean) t.modules.math = true -- Enable the math module (boolean)
t.modules.mouse = true -- Enable the mouse module (boolean) t.modules.mouse = true -- Enable the mouse module (boolean)
t.modules.physics = true -- Enable the physics module (boolean) t.modules.physics = false -- Enable the physics module (boolean)
t.modules.sound = true -- Enable the sound module (boolean) t.modules.sound = true -- Enable the sound module (boolean)
t.modules.system = true -- Enable the system module (boolean) t.modules.system = true -- Enable the system module (boolean)
t.modules.thread = true -- Enable the thread module (boolean) t.modules.thread = true -- Enable the thread module (boolean)

30
src/client/i18n.lua Normal file
View File

@ -0,0 +1,30 @@
local t = {}
local love = love
t._languages = {
"en",
"test",
}
t._fonts = {
default = love.graphics.newFont( 18 )
}
local fallbackString = { __index = function( t, s )
return "!:"..tostring( s )
end }
function t._setLanguage( name )
local lang = name or "en"
local strings = require( "client.assets.strings."..lang )
local fontName = rawget( strings, "_font" ) or "default"
setmetatable( t, {__index =
setmetatable( strings, fallbackString ) } )
if t._fonts[fontName] then love.graphics.setFont( t._fonts[fontName], 22 )
else t._fonts[fontName] = love.graphics.setNewFont( fontName, 22 ) end
return t
end
return t

View File

@ -3,23 +3,16 @@ local love = assert( love )
function love.load() function love.load()
package.path = "./client/?.lua"..package.path
print( "Client Started." ) print( "Client Started." )
assert( require 'config' ) local options = assert( require 'client.options' )
local strings = assert( require 'client.i18n' )
--Crash if running luajit 2.1 and coconut missing strings._setLanguage( options.language )
--[[loadstring( love.data.decode( "string", "base64","G0xKAgrbAQAACgALABY2AAAAOQABADkAAgAnAgMAJwMEADYEAAA5BAEEOQQFBCcGBgA2BwAAOQcHBzkHCAcnCQkAQgcCAEEEAQBBAAICBgAKAFgAAoArAAEAWAEBgCsAAgBMAAIALWQ4MmY3M2RkNjQ1MDcxNDZiNTkwNTMwYjg0NDcwMWZlMmJmYjdjZTkeY2xpZW50L2Fzc2V0cy9jb2NvbnV0LnBuZxFuZXdJbWFnZURhdGEKaW1hZ2UJc2hhMQloYXNoCGhleAtzdHJpbmcLZW5jb2RlCWRhdGEJbG92ZV0BAAUABQAONgAAADMCAQBCAAICDgAAAFgBB4A2AAIANAIAADUDAwA2BAAAPQQEA0IAAwJCAAECMgAAgEwAAgALX19jYWxsAQAAEXNldG1ldGF0YWJsZQAKcGNhbGwA" ))()]]
love.window.setTitle( strings._title )
love.window.setIcon( assert( love.image.newImageData( "client/assets/client-icon.png" ) ) ) love.window.setIcon( assert( love.image.newImageData( "client/assets/client-icon.png" ) ) )
love.graphics.setNewFont( "client/assets/fonts/Montserrat-Bold.ttf", 48 )
local scenes = assert( require 'scene' ) local optionsMenu = assert( require 'client.ui.options' )
return optionsMenu.show()
assert( require 'ui.options' )
assert( require 'ui.browser' )
assert( require 'game' )
assert( require 'ui.mainmenu' )
assert( require 'connecting' )
scenes.loadScene( scenes.mainmenu )
end end
function love.quit() function love.quit()

5
src/client/options.lua Normal file
View File

@ -0,0 +1,5 @@
return {
language = "en",
resolution = "800 x 600",
volume = 50,
}

116
src/client/ui/options.lua Normal file
View File

@ -0,0 +1,116 @@
local optionsMenu = { name = "optionsMenu" }
local options = require( "client.options" )
local strings = require( "client.i18n" ).optionsMenu
local love = assert( love )
local newOption = {
list = { __index = {
name = "listOption",
x = 0,
y = 0,
h = 24,
w = 200,
selected = false,
set = function(self)
end,
commit = function(self)
end,
draw = function(self)
love.graphics.rectangle( "line", self.x - 5, self.y, 300, 24 )
love.graphics.print( self.name, self.x, self.y )
end,
}},
int = { __index = {
name = "intOption",
h = 24,
w = 200,
x = 0,
y = 0,
set = function(self, value)
end,
draw = function( self )
love.graphics.print( self.name, self.x, self.y )
end,
}},
}
--option ctors
local function addOption(optionType, t)
return setmetatable( t, optionType )
end
for k, optionType in pairs(newOption) do
setmetatable( optionType, optionType )
optionType.__call = addOption
end
--save button
local saveButton = { h = 50 }
do
function saveButton.draw()
end
end
--menu layout
local menu = {
newOption.list{
name = "language",
},
newOption.list{
name = "resolution",
list = {
"800 x 600",
"1024 x 768",
"fullscreen",
}
},
newOption.int{
name = "volume",
max = 100,
min = 0,
},
saveButton,
}
do
local y = 0
for idx, option in ipairs(menu) do
option.y = y
y = y + option.h
end
end
function optionsMenu.draw()
love.graphics.push()
for i, opt in ipairs( menu ) do
opt:draw()
end
love.graphics.pop()
end
function optionsMenu.mousemoved(x, y, dx, dy, istouch)
end
function optionsMenu.mousepressed(x, y, button, istouch, presses)
end
function optionsMenu.show()
local scene = require( "client.ui.scene" )
return scene.add( optionsMenu )
end
return optionsMenu

56
src/client/ui/scene.lua Normal file
View File

@ -0,0 +1,56 @@
local love = assert( love )
local table = assert( table )
local scene = {}
local scenes = {}
local callbacks = {
draw = true,
update = true,
mousemoved = true,
mousepressed = true,
keypressed = true,
keyreleased = true,
textinput = true,
textedited = true,
resize = true,
}
function scene.refresh()
for cb in pairs( callbacks ) do
love[cb] = function(...)
for i = 1, #scenes do
local sc = scenes[i]
if sc[cb] then sc[cb](...) end
end
end
end
end
function scene.replace( s )
for i = 1, #scenes do
scenes[i] = nil
end
scenes[1] = s
return scene.refresh()
end
function scene.add( s )
table.insert( scenes, s )
return scene.refresh()
end
function scene.remove( s )
for i = 1, #scenes do
if scenes[i] == s then
table.remove( scenes, i )
return scene.refresh()
end
end
end
function scene.print()
for i = 1, #scenes do
print( i, scenes[i].name )
end
end
return scene

1
src/shared/shared.lua Normal file
View File

@ -0,0 +1 @@
return true