Compare commits
8
Commits
3498275bf0
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5c592d5010 | ||
|
|
55c565845b | ||
|
|
4209ad2618 | ||
|
|
7b8e45b6be | ||
|
|
a0ea5d71c5 | ||
|
|
68d9bec872 | ||
|
|
a96b58adf2 | ||
|
|
1f9c0c527a |
No files matched your search
@@ -0,0 +1 @@
|
|||||||
|
.DS_Store
|
||||||
@@ -4,6 +4,8 @@ Strange motion. Idle toy inspired by Progress Quest.
|
|||||||
WARNING: Opens a console to LAN which can run *any* code as the user Love2D is
|
WARNING: Opens a console to LAN which can run *any* code as the user Love2D is
|
||||||
running as! There is no security on this.
|
running as! There is no security on this.
|
||||||
|
|
||||||
|
Tileset from [OpenGameArt.org](https://opengameart.org/content/dungeon-crawl-32x32-tiles).
|
||||||
|
|
||||||
## Brainstroming
|
## Brainstroming
|
||||||
Name the Race. Motto.
|
Name the Race. Motto.
|
||||||
Level Class (xp bar)
|
Level Class (xp bar)
|
||||||
|
|||||||
File renamed without changes.
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"cthulhu":{
|
||||||
|
"x":23,
|
||||||
|
"y":6
|
||||||
|
},
|
||||||
|
"grass":{
|
||||||
|
"x":56,
|
||||||
|
"y":15
|
||||||
|
},
|
||||||
|
"kobold_female_green":{
|
||||||
|
"x":50,
|
||||||
|
"y":31
|
||||||
|
},
|
||||||
|
"orc_male":{
|
||||||
|
"x":40,
|
||||||
|
"y":32
|
||||||
|
},
|
||||||
|
"stick":{
|
||||||
|
"x":64,
|
||||||
|
"y":46
|
||||||
|
},
|
||||||
|
"tent":{
|
||||||
|
"x":4,
|
||||||
|
"y":22
|
||||||
|
},
|
||||||
|
"todo":{
|
||||||
|
"x":64,
|
||||||
|
"y":1
|
||||||
|
},
|
||||||
|
"tree":{
|
||||||
|
"x":13,
|
||||||
|
"y":19
|
||||||
|
},
|
||||||
|
"machine":{
|
||||||
|
"x":56,
|
||||||
|
"y":16
|
||||||
|
},
|
||||||
|
"centaur_female_brown":{
|
||||||
|
"x":22,
|
||||||
|
"y":31
|
||||||
|
}
|
||||||
|
}
|
||||||
File renamed without changes.
@@ -51,6 +51,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Half Orc":{
|
"Half Orc":{
|
||||||
|
"icon":"orc_male",
|
||||||
"stats":["health"]
|
"stats":["health"]
|
||||||
},
|
},
|
||||||
"Hob-Nobbit":{
|
"Hob-Nobbit":{
|
||||||
@@ -60,6 +61,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Land Squid":{
|
"Land Squid":{
|
||||||
|
"icon":"cthulhu",
|
||||||
"stats":["health","strength"],
|
"stats":["health","strength"],
|
||||||
"tasks":[
|
"tasks":[
|
||||||
"Drinking plenty of water"
|
"Drinking plenty of water"
|
||||||
@@ -81,12 +83,14 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Talking Pony":{
|
"Talking Pony":{
|
||||||
|
"icon":"centaur_female_brown",
|
||||||
"stats":["intelligence","magic"],
|
"stats":["intelligence","magic"],
|
||||||
"tasks":[
|
"tasks":[
|
||||||
[4, "Singing their theme song"]
|
[4, "Singing their theme song"]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Trans-Kobold":{
|
"Trans-Kobold":{
|
||||||
|
"icon":"kobold_female_green",
|
||||||
"stats":["wisdom"],
|
"stats":["wisdom"],
|
||||||
"tasks":[
|
"tasks":[
|
||||||
[10, "#TransRights"]
|
[10, "#TransRights"]
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 1.4 MiB |
@@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"current_page":0,
|
"current_page":147,
|
||||||
"total_pages":500
|
"total_pages":449
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
local constants = require "data.constants"
|
local constants = require "data.constants"
|
||||||
local utility = require "lib.utility"
|
local utility = require "lib.utility"
|
||||||
|
|
||||||
local classes = utility.load_data("classes.json")
|
local classes = utility.load_data("./assets/classes.json")
|
||||||
|
|
||||||
return constants.fix_stats_tasks(classes)
|
return constants.fix_stats_tasks(classes)
|
||||||
@@ -3,6 +3,7 @@ local utility = require "lib.utility"
|
|||||||
local constants = {
|
local constants = {
|
||||||
progress_bar_height = 30,
|
progress_bar_height = 30,
|
||||||
reading_time_multiplier = 1 / 9,
|
reading_time_multiplier = 1 / 9,
|
||||||
|
tile_size = 32,
|
||||||
}
|
}
|
||||||
|
|
||||||
constants.fix_stats_tasks = function(data)
|
constants.fix_stats_tasks = function(data)
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
local constants = require "data.constants"
|
||||||
|
local utility = require "lib.utility"
|
||||||
|
|
||||||
|
local file = io.open("./assets/tileset.png", "rb")
|
||||||
|
local raw_data = file:read("*all")
|
||||||
|
file:close()
|
||||||
|
|
||||||
|
local file_data = love.filesystem.newFileData(raw_data, "./assets/tileset.png")
|
||||||
|
local love_image = love.graphics.newImage(file_data)
|
||||||
|
|
||||||
|
local tile_data = utility.load_data("./assets/images.json")
|
||||||
|
|
||||||
|
local images = {
|
||||||
|
love_image = love_image,
|
||||||
|
}
|
||||||
|
|
||||||
|
for name, data in pairs(tile_data) do
|
||||||
|
images[name] = love.graphics.newQuad( (data.x - 1) * constants.tile_size, (data.y - 1) * constants.tile_size, constants.tile_size, constants.tile_size, love_image )
|
||||||
|
end
|
||||||
|
|
||||||
|
return images
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
local constants = require "data.constants"
|
local constants = require "data.constants"
|
||||||
local utility = require "lib.utility"
|
local utility = require "lib.utility"
|
||||||
|
|
||||||
local races = utility.load_data("races.json")
|
local races = utility.load_data("./assets/races.json")
|
||||||
|
|
||||||
return constants.fix_stats_tasks(races)
|
return constants.fix_stats_tasks(races)
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
local classes = require "data.classes"
|
||||||
|
local constants = require "data.constants"
|
||||||
|
local images = require "data.images"
|
||||||
|
local races = require "data.races"
|
||||||
|
|
||||||
|
local characters = {}
|
||||||
|
|
||||||
|
local base_stat_roll = function()
|
||||||
|
return 3 + math.random(1, 6) + math.random(1, 6) + math.random(1, 6)
|
||||||
|
end
|
||||||
|
|
||||||
|
local naive_random_name = function(length)
|
||||||
|
local vowels = "aaeeeiioouuy"
|
||||||
|
local consonants = "bcdfghjklmnpqrstvwxyz"
|
||||||
|
local text = ""
|
||||||
|
for i = 1, length do
|
||||||
|
local c
|
||||||
|
if i % 2 == 0 then
|
||||||
|
c = math.random(1, #vowels)
|
||||||
|
text = text .. vowels:sub(c, c)
|
||||||
|
else
|
||||||
|
c = math.random(1, #consonants)
|
||||||
|
text = text .. consonants:sub(c, c)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return text
|
||||||
|
end
|
||||||
|
|
||||||
|
local progress_quest_random_name = function()
|
||||||
|
local parts = {
|
||||||
|
("br|cr|dr|fr|gr|j|kr|l|m|n|pr||||r|sh|tr|v|wh|x|y|z"):split("|"),
|
||||||
|
("a|a|e|e|i|i|o|o|u|u|ae|ie|oo|ou"):split("|"),
|
||||||
|
("b|ck|d|g|k|m|n|p|t|v|x|z"):split("|"),
|
||||||
|
}
|
||||||
|
local name = ""
|
||||||
|
for i = 0, 5 do
|
||||||
|
local part = parts[i % 3 + 1]
|
||||||
|
name = name .. part[math.random(1, #part)]
|
||||||
|
end
|
||||||
|
return name
|
||||||
|
end
|
||||||
|
|
||||||
|
local random_stat_up = function(character)
|
||||||
|
local core_stats = {
|
||||||
|
"charisma", "constitution", "dexterity", "intelligence", "strength", "wisdom",
|
||||||
|
}
|
||||||
|
local selected_stat = core_stats[math.random(1, #core_stats)]
|
||||||
|
character[selected_stat] = character[selected_stat] + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
characters.new = function(name)
|
||||||
|
name = name or progress_quest_random_name() -- name not affected by seed
|
||||||
|
|
||||||
|
local seed = math.random()
|
||||||
|
math.randomseed(seed)
|
||||||
|
|
||||||
|
local character = {
|
||||||
|
seed = seed,
|
||||||
|
name = name,
|
||||||
|
race = races[math.random(1, #races)],
|
||||||
|
class = classes[math.random(1, #classes)],
|
||||||
|
charisma = base_stat_roll(),
|
||||||
|
constitution = base_stat_roll(),
|
||||||
|
dexterity = base_stat_roll(),
|
||||||
|
intelligence = base_stat_roll(),
|
||||||
|
strength = base_stat_roll(),
|
||||||
|
wisdom = base_stat_roll(),
|
||||||
|
level = 1,
|
||||||
|
experience = 0,
|
||||||
|
}
|
||||||
|
character.health = math.random(1, 8) + math.floor(character.constitution / 6)
|
||||||
|
character.magic = math.random(1, 8) + math.floor(character.intelligence / 6)
|
||||||
|
|
||||||
|
for _, stat_name in ipairs(races[character.race].stats) do
|
||||||
|
character[stat_name] = character[stat_name] + math.random(1, 3)
|
||||||
|
end
|
||||||
|
for _, stat_name in ipairs(classes[character.class].stats) do
|
||||||
|
character[stat_name] = character[stat_name] + math.random(1, 3)
|
||||||
|
end
|
||||||
|
|
||||||
|
character.max_encumberance = character.strength + 10
|
||||||
|
character.inventory = {}
|
||||||
|
|
||||||
|
character.x = 1
|
||||||
|
character.y = 1
|
||||||
|
|
||||||
|
return setmetatable(character, { __index = characters, })
|
||||||
|
end
|
||||||
|
|
||||||
|
characters.level_up = function(character)
|
||||||
|
character.health = character.health + 1 + math.floor(character.constitution / 3) + math.random(1, 4)
|
||||||
|
character.magic = character.magic + 1 + math.floor(character.intelligence / 3) + math.random(1, 4)
|
||||||
|
|
||||||
|
random_stat_up(character)
|
||||||
|
random_stat_up(character)
|
||||||
|
|
||||||
|
character.max_encumberance = character.strength + 10
|
||||||
|
|
||||||
|
-- TODO this is where a spell could be added, and
|
||||||
|
end
|
||||||
|
|
||||||
|
characters.draw = function(self)
|
||||||
|
local icon = races[self.race].icon or "todo"
|
||||||
|
love.graphics.draw(images.love_image, images[icon], self.x * constants.tile_size, self.y * constants.tile_size)
|
||||||
|
end
|
||||||
|
|
||||||
|
return characters
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
local log = require "lib.log"
|
local log = require "lib.log"
|
||||||
local utility = require "lib.utility"
|
local utility = require "lib.utility"
|
||||||
|
|
||||||
local voices = utility.load_data("macos_say-en.json")
|
local voices = utility.load_data("./assets/macos_say-en.json")
|
||||||
|
|
||||||
local say_thread = love.thread.newThread([[
|
local say_thread = love.thread.newThread([[
|
||||||
local channel = love.thread.getChannel("say")
|
local channel = love.thread.getChannel("say")
|
||||||
|
|||||||
+15
-100
@@ -1,5 +1,6 @@
|
|||||||
local window_width, window_height = love.graphics.getDimensions()
|
local window_width, window_height = love.graphics.getDimensions()
|
||||||
|
|
||||||
|
local characters = require "lib.characters"
|
||||||
local log = require "lib.log"
|
local log = require "lib.log"
|
||||||
local lovebird = require "lib.lovebird"
|
local lovebird = require "lib.lovebird"
|
||||||
local macOS_say = require "lib.macOS_say"
|
local macOS_say = require "lib.macOS_say"
|
||||||
@@ -16,110 +17,20 @@ log{
|
|||||||
}
|
}
|
||||||
|
|
||||||
local constants = require "data.constants"
|
local constants = require "data.constants"
|
||||||
local classes = require "data.classes"
|
local images = require "data.images"
|
||||||
local races = require "data.races"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
local new_character = function(name)
|
-- TEMP
|
||||||
local base_stat_roll = function()
|
|
||||||
return 3 + math.random(1, 6) + math.random(1, 6) + math.random(1, 6)
|
|
||||||
end
|
|
||||||
|
|
||||||
local naive_random_name = function(length)
|
|
||||||
local vowels = "aaeeeiioouuy"
|
|
||||||
local consonants = "bcdfghjklmnpqrstvwxyz"
|
|
||||||
local text = ""
|
|
||||||
for i = 1, length do
|
|
||||||
local c
|
|
||||||
if i % 2 == 0 then
|
|
||||||
c = math.random(1, #vowels)
|
|
||||||
text = text .. vowels:sub(c, c)
|
|
||||||
else
|
|
||||||
c = math.random(1, #consonants)
|
|
||||||
text = text .. consonants:sub(c, c)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return text
|
|
||||||
end
|
|
||||||
|
|
||||||
local progress_quest_random_name = function()
|
|
||||||
local parts = {
|
|
||||||
("br|cr|dr|fr|gr|j|kr|l|m|n|pr||||r|sh|tr|v|wh|x|y|z"):split("|"),
|
|
||||||
("a|a|e|e|i|i|o|o|u|u|ae|ie|oo|ou"):split("|"),
|
|
||||||
("b|ck|d|g|k|m|n|p|t|v|x|z"):split("|"),
|
|
||||||
}
|
|
||||||
local name = ""
|
|
||||||
for i = 0, 5 do
|
|
||||||
local part = parts[i % 3 + 1]
|
|
||||||
name = name .. part[math.random(1, #part)]
|
|
||||||
end
|
|
||||||
return name
|
|
||||||
end
|
|
||||||
|
|
||||||
name = name or progress_quest_random_name() -- name not affected by seed
|
|
||||||
|
|
||||||
local seed = math.random()
|
|
||||||
math.randomseed(seed)
|
|
||||||
|
|
||||||
local character = {
|
|
||||||
seed = seed,
|
|
||||||
name = name,
|
|
||||||
race = races[math.random(1, #races)],
|
|
||||||
class = classes[math.random(1, #classes)],
|
|
||||||
charisma = base_stat_roll(),
|
|
||||||
constitution = base_stat_roll(),
|
|
||||||
dexterity = base_stat_roll(),
|
|
||||||
intelligence = base_stat_roll(),
|
|
||||||
strength = base_stat_roll(),
|
|
||||||
wisdom = base_stat_roll(),
|
|
||||||
level = 1,
|
|
||||||
experience = 0,
|
|
||||||
}
|
|
||||||
character.health = math.random(1, 8) + math.floor(character.constitution / 6)
|
|
||||||
character.magic = math.random(1, 8) + math.floor(character.intelligence / 6)
|
|
||||||
|
|
||||||
for _, stat_name in ipairs(races[character.race].stats) do
|
|
||||||
character[stat_name] = character[stat_name] + math.random(1, 3)
|
|
||||||
end
|
|
||||||
for _, stat_name in ipairs(classes[character.class].stats) do
|
|
||||||
character[stat_name] = character[stat_name] + math.random(1, 3)
|
|
||||||
end
|
|
||||||
|
|
||||||
character.max_encumberance = character.strength + 10
|
|
||||||
character.inventory = {}
|
|
||||||
|
|
||||||
return character
|
|
||||||
end
|
|
||||||
|
|
||||||
local level_up = function(character)
|
|
||||||
local random_stat_up = function(character)
|
|
||||||
local core_stats = {
|
|
||||||
"charisma", "constitution", "dexterity", "intelligence", "strength", "wisdom",
|
|
||||||
}
|
|
||||||
local selected_stat = core_stats[math.random(1, #core_stats)]
|
|
||||||
character[selected_stat] = character[selected_stat] + 1
|
|
||||||
end
|
|
||||||
|
|
||||||
character.health = character.health + 1 + math.floor(character.constitution / 3) + math.random(1, 4)
|
|
||||||
character.magic = character.magic + 1 + math.floor(character.intelligence / 3) + math.random(1, 4)
|
|
||||||
|
|
||||||
random_stat_up(character)
|
|
||||||
random_stat_up(character)
|
|
||||||
|
|
||||||
character.max_encumberance = character.strength + 10
|
|
||||||
|
|
||||||
-- TODO this is where a spell could be added, and
|
|
||||||
end
|
|
||||||
|
|
||||||
local test_new_character = function()
|
local test_new_character = function()
|
||||||
local character = new_character()
|
local character = characters.new()
|
||||||
local message = "My name is " .. character.name .. ", and I am a " .. character.class .. " " .. character.race .. "!"
|
local message = "My name is " .. character.name .. ", and I am a " .. character.class .. " " .. character.race .. "!"
|
||||||
macOS_say(message)
|
macOS_say(message)
|
||||||
|
return character
|
||||||
end
|
end
|
||||||
test_new_character()
|
local test_character = test_new_character()
|
||||||
|
|
||||||
-- test progress_bar
|
-- TEMP test progress_bar
|
||||||
local test_bar = progress_bar(0, window_height - constants.progress_bar_height * 2, window_width, constants.progress_bar_height)
|
local test_bar = progress_bar(0, window_height - constants.progress_bar_height * 2, window_width, constants.progress_bar_height)
|
||||||
local test_message = "This is a test text string of significant length. It exists to test printing over a progress bar."
|
local test_message = "This is a test text string of significant length. It exists to test printing over a progress bar."
|
||||||
test_bar:set_text(test_message)
|
test_bar:set_text(test_message)
|
||||||
@@ -128,6 +39,7 @@ local test_timer = timer.every(#test_message * constants.reading_time_multiplier
|
|||||||
-- macOS_say(test_message)
|
-- macOS_say(test_message)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
-- I started this too soon and it needs deletion or massive change
|
||||||
local task_queue
|
local task_queue
|
||||||
task_queue = {
|
task_queue = {
|
||||||
pending_tasks = {},
|
pending_tasks = {},
|
||||||
@@ -150,13 +62,16 @@ love.update = function(dt)
|
|||||||
lovebird.update()
|
lovebird.update()
|
||||||
timer.update(dt)
|
timer.update(dt)
|
||||||
|
|
||||||
test_bar:set_progress(test_timer.run_time / test_timer:get_interval())
|
test_bar:set_progress(test_timer.run_time / test_timer:get_interval()) -- TEMP
|
||||||
|
|
||||||
macOS_say:update()
|
macOS_say:update()
|
||||||
end
|
end
|
||||||
|
|
||||||
love.draw = function()
|
love.draw = function()
|
||||||
test_bar:draw()
|
love.graphics.draw(images.love_image, images.grass, 50, 50) -- TEMP
|
||||||
|
love.graphics.draw(images.love_image, images.centaur_female_brown, 50, 50) -- TEMP
|
||||||
|
test_character:draw() -- TEMP
|
||||||
|
-- test_bar:draw() -- TEMP
|
||||||
|
|
||||||
book_progress:draw()
|
book_progress:draw()
|
||||||
end
|
end
|
||||||
@@ -170,9 +85,9 @@ love.keypressed = function(key)
|
|||||||
update_book_progress(-1)
|
update_book_progress(-1)
|
||||||
elseif key == "right" then
|
elseif key == "right" then
|
||||||
update_book_progress(1)
|
update_book_progress(1)
|
||||||
elseif key == "v" then
|
elseif key == "v" then -- TEMP testing voices
|
||||||
macOS_say()
|
macOS_say()
|
||||||
elseif key == "c" then
|
elseif key == "c" then -- TEMP gen character and say introduction
|
||||||
test_new_character()
|
test_new_character()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
Reference in new issue
Block a user