From 6f480cfef1e41321e088d9eb4236a82009c1d816 Mon Sep 17 00:00:00 2001 From: Kazhnuz Date: Sat, 28 Dec 2019 11:33:25 +0100 Subject: [PATCH] improvement: new character handling functions --- .../datas/gamedata/characters/baseteam.lua | 1 + .../datas/gamedata/characters/default.lua | 57 +++++++ .../datas/gamedata/characters/init.lua | 9 ++ .../gamedata/characters/sonic/actions.lua | 30 ++++ .../gamedata/characters/sonic/assets.lua | 4 + .../datas/gamedata/characters/sonic/init.lua | 10 ++ .../gamedata/characters/sonic/skills.lua | 3 + .../datas/gamedata/characters/sonic/stats.lua | 13 ++ .../gamedata/characters/sonic/voices/move.wav | Bin 0 -> 27692 bytes .../characters/sonic/voices/turnstart.wav | Bin 0 -> 25388 bytes sonic-bluestreak.love/game/characters.lua | 149 ++++++++++++++++++ sonic-bluestreak.love/game/ennemies.lua | 15 ++ sonic-bluestreak.love/game/init.lua | 17 +- .../game/modules/utils/init.lua | 36 +++++ .../subgame/sonic-boost/actors/character.lua | 2 +- 15 files changed, 339 insertions(+), 7 deletions(-) create mode 100644 sonic-bluestreak.love/datas/gamedata/characters/baseteam.lua create mode 100644 sonic-bluestreak.love/datas/gamedata/characters/default.lua create mode 100644 sonic-bluestreak.love/datas/gamedata/characters/init.lua create mode 100644 sonic-bluestreak.love/datas/gamedata/characters/sonic/actions.lua create mode 100644 sonic-bluestreak.love/datas/gamedata/characters/sonic/assets.lua create mode 100644 sonic-bluestreak.love/datas/gamedata/characters/sonic/init.lua create mode 100644 sonic-bluestreak.love/datas/gamedata/characters/sonic/skills.lua create mode 100644 sonic-bluestreak.love/datas/gamedata/characters/sonic/stats.lua create mode 100644 sonic-bluestreak.love/datas/gamedata/characters/sonic/voices/move.wav create mode 100644 sonic-bluestreak.love/datas/gamedata/characters/sonic/voices/turnstart.wav create mode 100644 sonic-bluestreak.love/game/characters.lua create mode 100644 sonic-bluestreak.love/game/ennemies.lua create mode 100644 sonic-bluestreak.love/game/modules/utils/init.lua diff --git a/sonic-bluestreak.love/datas/gamedata/characters/baseteam.lua b/sonic-bluestreak.love/datas/gamedata/characters/baseteam.lua new file mode 100644 index 0000000..765b627 --- /dev/null +++ b/sonic-bluestreak.love/datas/gamedata/characters/baseteam.lua @@ -0,0 +1 @@ +return {"sonic"} diff --git a/sonic-bluestreak.love/datas/gamedata/characters/default.lua b/sonic-bluestreak.love/datas/gamedata/characters/default.lua new file mode 100644 index 0000000..244037c --- /dev/null +++ b/sonic-bluestreak.love/datas/gamedata/characters/default.lua @@ -0,0 +1,57 @@ +return { + name = "Default", + name_full = "Default the Character", + class = "Speedster", + startlevel = 1, + isUnlockedAtStart = true, + + base_stats = { + hpmax = 200, -- + ppmax = 50, -- + + attack = 50, -- + power = 50, -- + defense = 50, -- + technic = 50, -- + mind = 50, -- + speed = 50, -- + + turns = 3, -- number of attacks by turn (unused) + move = 2, -- how far the character can get in one turn + }, + + color = {1, 1, 1}, + + skill_list = { + --{attack_name, level}, + }, + + flags = { + canGoSuper = true, + }, + + assets = { + charset = {"", 1}, + lifeicon = 1, + spriteset = "sonic", + }, + + inventory = { + haveShoes = true, + haveMechs = false, + haveGlove = true, + haveHammer= false, + accessories_number = 3, + chao_number = 1, + }, + + boost_stats = { + spd = 5, + jmp = 3, + jumpaction = "doublejump", + jumpaction_power = 2, + action = "spinattack", + action_power = 1, + canBreakCraft = false, + } +} diff --git a/sonic-bluestreak.love/datas/gamedata/characters/init.lua b/sonic-bluestreak.love/datas/gamedata/characters/init.lua new file mode 100644 index 0000000..6fe4ebc --- /dev/null +++ b/sonic-bluestreak.love/datas/gamedata/characters/init.lua @@ -0,0 +1,9 @@ +return { + "sonic", + "tails", + "knuckles", + "amy", + "cream", + "shadow", + "rouge", +} diff --git a/sonic-bluestreak.love/datas/gamedata/characters/sonic/actions.lua b/sonic-bluestreak.love/datas/gamedata/characters/sonic/actions.lua new file mode 100644 index 0000000..961afed --- /dev/null +++ b/sonic-bluestreak.love/datas/gamedata/characters/sonic/actions.lua @@ -0,0 +1,30 @@ +local actions = {} + +actions.aerial = {} +actions.special = {} + +function actions.aerial.start(n, actor) + +end + +function actions.aerial.update(dt, actor) + +end + +function actions.aerial.onGround(actor) + +end + +function actions.special.start(n, actor) + +end + +function actions.special.update(dt, actor) + +end + +function actions.special.onGround(actor) + +end + +return actions diff --git a/sonic-bluestreak.love/datas/gamedata/characters/sonic/assets.lua b/sonic-bluestreak.love/datas/gamedata/characters/sonic/assets.lua new file mode 100644 index 0000000..9f12102 --- /dev/null +++ b/sonic-bluestreak.love/datas/gamedata/characters/sonic/assets.lua @@ -0,0 +1,4 @@ +return { + lifeicon = 1, + spriteset = "sonic", +} diff --git a/sonic-bluestreak.love/datas/gamedata/characters/sonic/init.lua b/sonic-bluestreak.love/datas/gamedata/characters/sonic/init.lua new file mode 100644 index 0000000..d9584ed --- /dev/null +++ b/sonic-bluestreak.love/datas/gamedata/characters/sonic/init.lua @@ -0,0 +1,10 @@ +return { + name = "Sonic", + fullname = "Sonic the Hedgehog", + + class = "speed", + alignement = "hero", + team = "heroes", + + description = "Lorem Ipsum...", +} diff --git a/sonic-bluestreak.love/datas/gamedata/characters/sonic/skills.lua b/sonic-bluestreak.love/datas/gamedata/characters/sonic/skills.lua new file mode 100644 index 0000000..636ef13 --- /dev/null +++ b/sonic-bluestreak.love/datas/gamedata/characters/sonic/skills.lua @@ -0,0 +1,3 @@ +return { +--{skill_flag}, +} diff --git a/sonic-bluestreak.love/datas/gamedata/characters/sonic/stats.lua b/sonic-bluestreak.love/datas/gamedata/characters/sonic/stats.lua new file mode 100644 index 0000000..349703b --- /dev/null +++ b/sonic-bluestreak.love/datas/gamedata/characters/sonic/stats.lua @@ -0,0 +1,13 @@ +return { + startlevel = 1, + hpmax = 50, -- Les points de vie du personnages + spd = 5, + jmp = 3, + atk = 5, + jumpaction_power = 2, + action_power = 1, + action_cost = 30, + + canGoSuper = true, + canBreakCraft = false +} diff --git a/sonic-bluestreak.love/datas/gamedata/characters/sonic/voices/move.wav b/sonic-bluestreak.love/datas/gamedata/characters/sonic/voices/move.wav new file mode 100644 index 0000000000000000000000000000000000000000..c0bb10b0da121b264c4bae2989de98c25c95341e GIT binary patch literal 27692 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 z%0A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 literal 0 HcmV?d00001 diff --git a/sonic-bluestreak.love/game/characters.lua b/sonic-bluestreak.love/game/characters.lua new file mode 100644 index 0000000..b082ee1 --- /dev/null +++ b/sonic-bluestreak.love/game/characters.lua @@ -0,0 +1,149 @@ +-- game/characters :: The character handler. This object handle all the character +-- and is able to get and set datas about them. + +--[[ + Copyright © 2019 Kazhnuz + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + the Software, and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +]] + +local CharacterManager = Object:extend() + +function CharacterManager:new(controller) + self.controller = controller + self.namelist = require "datas.gamedata.characters" + self.list = {} + self.team = require "datas.gamedata.characters.baseteam" + self.active = 1 + self:init() +end + +function CharacterManager:init() + for k, v in pairs(self.namelist) do + local dir = "datas/gamedata/characters/" .. v .. "/init.lua" + local fileinfo = love.filesystem.getInfo(dir) + if fileinfo ~= nil then + self:initCharacter(v) + end + end +end + +function CharacterManager:getCharacterData(charname) + -- va eprmettre de récupérer les données d'un personnage + local charfolder = "datas.gamedata.characters." .. charname + local character = require(charfolder) + character.stats = require(charfolder .. ".stats") + character.assets = require(charfolder .. ".assets") + character.skills = require(charfolder .. ".skills") + character.actions = require(charfolder .. ".actions") + + return character +end + +function CharacterManager:initCharacter(id) + local character = self:getCharacterData(id) + + local startlevel = character.stats.startlevel + character.stats.level = startlevel + character.stats.exp = self:getExpValue(startlevel) + character.stats.exp_next = self:getExpValue(startlevel + 1) + + character.stats.hp = character.stats.hpmax + character.stats.pp = 100 + character.stats.status = 0 + + self.list[id] = character +end + +function CharacterManager:getExpValue(level) + return math.floor( ( 4 * ( level ^ 3 ) ) / 5 ) +end + +function CharacterManager:setLevel(id, newlevel) + self.list[id].stats.level = newlevel + local stats = self.list[id].stats + local exp, exp_next, exp_current + exp = self:getExpValue(stats.level) + exp_next = self:getExpValue(stats.level + 1) + exp_current = self.list[id].stats.exp + + self.list[id].stats.exp = math.max(math.min(exp_current, exp_next - 1), exp) + self.list[id].stats.exp_next = exp_next +end + +function CharacterManager:levelUp(id) + self:setLevel(id, self.list[id].stats.level + 1) +end + +function CharacterManager:getStatValue(level, base) + return math.floor( (((base * 2) * level)/100) ) + 5 +end + +function CharacterManager:getHPValue(level, base) + return math.floor( (((base * 2.7) * level)/100) ) + 15 + level +end + +function CharacterManager:getData() + local data = {} + data.list = self.list + data.team = self.team + return data +end + +function CharacterManager:setData(data) + local data = data + self.list = data.list + self.team = data.team +end + +function CharacterManager:heal(id) + self.list[id].stats.hp = self.list[id].stats.hpmax + self.list[id].stats.pp = 100 + self.list[id].stats.status = 0 +end + +function CharacterManager:addToTeam(id) + self:heal(id) + table.insert(self.team, id) +end + +function CharacterManager:removeToTeam(teamid) + self.team[teamid] = "" +end + +function CharacterManager:getActiveCharacter() + return self.team[self.active] +end + +-- DEBUG FUNCTIONS + +function CharacterManager:printCharacter(id) + local character = self.list[id] + local stats = character.stats + print(id .. ". " .. character.fullname) + print("Lvl " .. character.stats.level .. " (" .. stats.exp .. "/" .. stats.exp_next .. " exp)") +end + +function CharacterManager:printTeam() + for i,v in ipairs(self.team) do + self:printCharacter(v) + print("-----") + end +end + +return CharacterManager diff --git a/sonic-bluestreak.love/game/ennemies.lua b/sonic-bluestreak.love/game/ennemies.lua new file mode 100644 index 0000000..60336f1 --- /dev/null +++ b/sonic-bluestreak.love/game/ennemies.lua @@ -0,0 +1,15 @@ +local EnnemyManager = Object:extend() + +function EnnemyManager:new(controller) + self.controller = controller +end + +function EnnemyManager:getEnnemyData(ennemy) + local data = require("datas.gamedata.ennemies." .. ennemy) + data.skills = require("datas.gamedata.ennemies." .. ennemy .. ".skills") + data.stats = require("datas.gamedata.ennemies." .. ennemy .. ".stats") + + return data +end + +return EnnemyManager diff --git a/sonic-bluestreak.love/game/init.lua b/sonic-bluestreak.love/game/init.lua index 4aedd9c..ad712ff 100644 --- a/sonic-bluestreak.love/game/init.lua +++ b/sonic-bluestreak.love/game/init.lua @@ -23,28 +23,33 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ]] -local Game = Object:extend() +local Game = Object:extend() +local Characters = require "game.characters" +local Ennemies = require "game.ennemies" -local SonicBoost = require "game.subgame.sonic-boost" +local binser = require "core.modules.gamesystem.libs.binser" -local binser = require "libs.binser" +Game.utils = require "game.modules.utils" +Game.gui = require "game.modules.gui" function Game:new() self.slot = -1 self.gametime = 0 - self.subgame = {} - self.subgame.sonicboost = SonicBoost(self) + self.characters = Characters(self) + self.ennemies = Ennemies(self) end function Game:setData(data) local data = data - self.gametime = data.gametime + self.gametime = data.gametime + self.characters:setData(data.characters) end function Game:getData() local data = {} data.gametime = self.gametime + data.characters = self.characters:getData() return data end diff --git a/sonic-bluestreak.love/game/modules/utils/init.lua b/sonic-bluestreak.love/game/modules/utils/init.lua new file mode 100644 index 0000000..2c47be2 --- /dev/null +++ b/sonic-bluestreak.love/game/modules/utils/init.lua @@ -0,0 +1,36 @@ +local gameutils = {} + +function gameutils.getMapPath(maptype, mapname) + local dir = gameutils.getMapDirectory(maptype, mapname) + local path = "" + if maptype == "sti" then + path = dir .. "map.lua" + else + path = "datas.gamedata.maps." .. maptype .. "." .. mapname + end + core.debug:print("game/utils", "path is " .. path) + return path +end + +function gameutils.getMapDirectory(maptype, mapname) + if not gameutils.validateMapType(maptype) then + error("Map type " .. maptype .. " doesn't exist.") + end + + return "datas/gamedata/maps/" .. maptype .. "/" .. mapname .. "/" +end + +function gameutils.validateMapType(maptype) + local types = {"battle", "sti", "test", "shoot"} + local validated = false + + for i, type in ipairs(types) do + if (type == maptype) then + validated = true + end + end + + return validated +end + +return gameutils diff --git a/sonic-bluestreak.love/scenes/subgame/sonic-boost/actors/character.lua b/sonic-bluestreak.love/scenes/subgame/sonic-boost/actors/character.lua index 7b78afa..ebe06e2 100644 --- a/sonic-bluestreak.love/scenes/subgame/sonic-boost/actors/character.lua +++ b/sonic-bluestreak.love/scenes/subgame/sonic-boost/actors/character.lua @@ -82,7 +82,7 @@ function Character:new(charcontroller, rail, character, id) end function Character:characterInit(char) - self.data = game.subgame.sonicboost:getCharacterData(char) + self.data = game.characters:getCharacterData(char) self.lifeicon = self.data.assets.lifeicon end