From 63922790e0b7354a95b4e99712c0e4418ab2b23c Mon Sep 17 00:00:00 2001 From: Kazhnuz Date: Sat, 3 Apr 2021 00:04:22 +0200 Subject: [PATCH] feat: add teleportation between maps --- .../datas/gamedata/maps/area/test/grotto.lua | 15 +++ .../datas/gamedata/maps/sti/plain/plain1.lua | 92 +++++++++++++ .../datas/gamedata/maps/sti/plain/plain1.png | Bin 16855 -> 28433 bytes .../datas/gamedata/maps/sti/plain/plain1.tsx | 21 +++ .../datas/gamedata/maps/sti/plain/test.lua | 126 +++++++++++++++++- .../datas/gamedata/maps/sti/plain/test.tmx | 19 ++- sonic-radiance.love/game/events/arguments.lua | 3 +- .../game/events/event/init.lua | 3 +- .../game/events/event/teleport.lua | 19 +++ .../scenes/overworld/actors/init.lua | 2 + .../scenes/overworld/actors/teleport.lua | 16 +++ .../scenes/overworld/world.lua | 9 ++ 12 files changed, 314 insertions(+), 11 deletions(-) create mode 100644 sonic-radiance.love/datas/gamedata/maps/area/test/grotto.lua create mode 100644 sonic-radiance.love/game/events/event/teleport.lua create mode 100644 sonic-radiance.love/scenes/overworld/actors/teleport.lua diff --git a/sonic-radiance.love/datas/gamedata/maps/area/test/grotto.lua b/sonic-radiance.love/datas/gamedata/maps/area/test/grotto.lua new file mode 100644 index 0000000..f2f8b6d --- /dev/null +++ b/sonic-radiance.love/datas/gamedata/maps/area/test/grotto.lua @@ -0,0 +1,15 @@ +return { + areaName = "testmap2", + canSave = true, + color = {0.3, 0.3, 0.3}, + maps = { + { + name = "Not Hidden Grotto", + music = "testmap", + folder = "test", + map = "map", + x = 0, + y = 0, + } + } +} \ No newline at end of file diff --git a/sonic-radiance.love/datas/gamedata/maps/sti/plain/plain1.lua b/sonic-radiance.love/datas/gamedata/maps/sti/plain/plain1.lua index 75eaaa8..f2242b4 100644 --- a/sonic-radiance.love/datas/gamedata/maps/sti/plain/plain1.lua +++ b/sonic-radiance.love/datas/gamedata/maps/sti/plain/plain1.lua @@ -302,6 +302,98 @@ return { { id = 102, type = "solid" + }, + { + id = 108, + type = "solid" + }, + { + id = 109, + type = "solid" + }, + { + id = 110, + type = "solid" + }, + { + id = 116, + type = "solid" + }, + { + id = 117, + type = "solid" + }, + { + id = 118, + type = "solid" + }, + { + id = 124, + type = "solid" + }, + { + id = 125, + type = "solid" + }, + { + id = 126, + type = "solid" + }, + { + id = 129, + type = "solid" + }, + { + id = 130, + type = "solid" + }, + { + id = 132, + type = "solid" + }, + { + id = 133, + type = "solid" + }, + { + id = 134, + type = "solid" + }, + { + id = 140, + type = "solid" + }, + { + id = 141, + type = "solid" + }, + { + id = 142, + type = "solid" + }, + { + id = 148, + type = "solid" + }, + { + id = 149, + type = "solid" + }, + { + id = 150, + type = "solid" + }, + { + id = 156, + type = "solid" + }, + { + id = 157, + type = "solid" + }, + { + id = 158, + type = "solid" } } } diff --git a/sonic-radiance.love/datas/gamedata/maps/sti/plain/plain1.png b/sonic-radiance.love/datas/gamedata/maps/sti/plain/plain1.png index 55ad23a9298bf0e44866b9ecc1055d75b6dae8db..495abe26bdc03a3c2929ec51adbbfb35ae1ae1ac 100644 GIT binary patch literal 28433 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 literal 16855 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 diff --git a/sonic-radiance.love/datas/gamedata/maps/sti/plain/plain1.tsx b/sonic-radiance.love/datas/gamedata/maps/sti/plain/plain1.tsx index 736f5f5..bb05e32 100644 --- a/sonic-radiance.love/datas/gamedata/maps/sti/plain/plain1.tsx +++ b/sonic-radiance.love/datas/gamedata/maps/sti/plain/plain1.tsx @@ -71,6 +71,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/sonic-radiance.love/datas/gamedata/maps/sti/plain/test.lua b/sonic-radiance.love/datas/gamedata/maps/sti/plain/test.lua index b311a6b..4225f40 100644 --- a/sonic-radiance.love/datas/gamedata/maps/sti/plain/test.lua +++ b/sonic-radiance.love/datas/gamedata/maps/sti/plain/test.lua @@ -8,8 +8,8 @@ return { height = 40, tilewidth = 16, tileheight = 16, - nextlayerid = 10, - nextobjectid = 25, + nextlayerid = 11, + nextobjectid = 26, properties = {}, tilesets = { { @@ -316,6 +316,42 @@ return { id = 102, type = "solid" }, + { + id = 108, + type = "solid" + }, + { + id = 109, + type = "solid" + }, + { + id = 110, + type = "solid" + }, + { + id = 116, + type = "solid" + }, + { + id = 117, + type = "solid" + }, + { + id = 118, + type = "solid" + }, + { + id = 124, + type = "solid" + }, + { + id = 125, + type = "solid" + }, + { + id = 126, + type = "solid" + }, { id = 129, type = "solid" @@ -323,6 +359,54 @@ return { { id = 130, type = "solid" + }, + { + id = 132, + type = "solid" + }, + { + id = 133, + type = "solid" + }, + { + id = 134, + type = "solid" + }, + { + id = 140, + type = "solid" + }, + { + id = 141, + type = "solid" + }, + { + id = 142, + type = "solid" + }, + { + id = 148, + type = "solid" + }, + { + id = 149, + type = "solid" + }, + { + id = 150, + type = "solid" + }, + { + id = 156, + type = "solid" + }, + { + id = 157, + type = "solid" + }, + { + id = 158, + type = "solid" } } } @@ -404,9 +488,9 @@ return { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 58, 58, 58, 58, 58, 58, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 66, 66, 66, 66, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 0, 0, 0, 0, 0, 0, 0, 57, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 0, 0, 0, 0, 0, 0, 0, 65, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 0, 0, 0, 0, 0, 0, 0, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 109, 110, 111, 50, 50, 50, 50, 50, 50, 50, + 0, 0, 0, 0, 0, 0, 0, 57, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 117, 118, 119, 58, 58, 58, 58, 58, 58, 58, + 0, 0, 0, 0, 0, 0, 0, 65, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 125, 126, 127, 66, 66, 66, 66, 66, 66, 66, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, 131, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -442,6 +526,38 @@ return { 39, 0, 0, 0, 0, 39, 0, 0, 0, 0, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39 } }, + { + type = "objectgroup", + draworder = "topdown", + id = 10, + name = "teleporter", + visible = true, + opacity = 1, + offsetx = 0, + offsety = 0, + properties = {}, + objects = { + { + id = 25, + name = "", + type = "", + shape = "rectangle", + x = 336, + y = 96, + width = 16, + height = 16, + rotation = 0, + visible = true, + properties = { + ["area"] = "test.grotto", + ["isSolid"] = true, + ["needButton"] = true, + ["x"] = 12, + ["y"] = 12 + } + } + } + }, { type = "objectgroup", draworder = "topdown", diff --git a/sonic-radiance.love/datas/gamedata/maps/sti/plain/test.tmx b/sonic-radiance.love/datas/gamedata/maps/sti/plain/test.tmx index f5decfd..c9a5ef6 100644 --- a/sonic-radiance.love/datas/gamedata/maps/sti/plain/test.tmx +++ b/sonic-radiance.love/datas/gamedata/maps/sti/plain/test.tmx @@ -1,5 +1,5 @@ - + @@ -54,9 +54,9 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 58,58,58,58,58,58,58,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 66,66,66,66,66,66,66,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,49,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50, -0,0,0,0,0,0,0,57,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58, -0,0,0,0,0,0,0,65,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66, +0,0,0,0,0,0,0,49,50,50,50,50,50,50,50,50,50,50,50,50,109,110,111,50,50,50,50,50,50,50, +0,0,0,0,0,0,0,57,58,58,58,58,58,58,58,58,58,58,58,58,117,118,119,58,58,58,58,58,58,58, +0,0,0,0,0,0,0,65,66,66,66,66,66,66,66,66,66,66,66,66,125,126,127,66,66,66,66,66,66,66, 39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,129,130,131,132, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -92,6 +92,17 @@ 39,0,0,0,0,39,0,0,0,0,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39 + + + + + + + + + + + diff --git a/sonic-radiance.love/game/events/arguments.lua b/sonic-radiance.love/game/events/arguments.lua index f5c7601..ae9f3ab 100644 --- a/sonic-radiance.love/game/events/arguments.lua +++ b/sonic-radiance.love/game/events/arguments.lua @@ -5,7 +5,8 @@ return { ["optionBox"] = {"message", "title", "avatar", "option1", "option2", "option3", "flag"}, ["playSFX"] = {"sfx"}, ["getRings"] = {"number"}, - ["getItems"] = {"type", "item", "number"} + ["getItems"] = {"type", "item", "number"}, + ["teleport"] = {"area", "x", "y"} --[name] = {args...}, } diff --git a/sonic-radiance.love/game/events/event/init.lua b/sonic-radiance.love/game/events/event/init.lua index e6b948a..2c10671 100644 --- a/sonic-radiance.love/game/events/event/init.lua +++ b/sonic-radiance.love/game/events/event/init.lua @@ -5,5 +5,6 @@ return { ["optionBox"] = require("game.events.event.dialogbox"), ["playSFX"] = require("game.events.event.playSFX"), ["getRings"] = require("game.events.event.getRings"), - ["getItems"] = require("game.events.event.getItems") + ["getItems"] = require("game.events.event.getItems"), + ["teleport"] = require("game.events.event.teleport") } \ No newline at end of file diff --git a/sonic-radiance.love/game/events/event/teleport.lua b/sonic-radiance.love/game/events/event/teleport.lua new file mode 100644 index 0000000..bca3bb4 --- /dev/null +++ b/sonic-radiance.love/game/events/event/teleport.lua @@ -0,0 +1,19 @@ +local StepParent = require "game.events.event.parent" +local SimpleMessageStep = StepParent:extend() +local defTransitions = require "core.modules.transitions" + +function SimpleMessageStep:new(controller, args) + SimpleMessageStep.super.new(self, controller, args) +end + +function SimpleMessageStep:start() + core.screen:startTransition(defTransitions.default, defTransitions.default, + function() self.events.scene.world:teleport(self.arguments.area, self.arguments.x, self.arguments.y) end, + 0, 0) +end + +function SimpleMessageStep:update(dt) + self:finish() +end + +return SimpleMessageStep; diff --git a/sonic-radiance.love/scenes/overworld/actors/init.lua b/sonic-radiance.love/scenes/overworld/actors/init.lua index 723206d..35ea3d6 100644 --- a/sonic-radiance.love/scenes/overworld/actors/init.lua +++ b/sonic-radiance.love/scenes/overworld/actors/init.lua @@ -8,6 +8,7 @@ Obj.Ring = require(cwd .. "ring") Obj.ItemBox = require(cwd .. "itembox") Obj.RingBox = require(cwd .. "ringbox") Obj.Encounter = require(cwd .. "encounter") +Obj.Teleporter = require(cwd .. "teleport") Obj.index = {} Obj.index["player"] = Obj.Player @@ -16,6 +17,7 @@ Obj.index["ring"] = Obj.Ring Obj.index["itembox"] = Obj.ItemBox Obj.index["ringbox"] = Obj.RingBox Obj.index["encounter"] = Obj.Encounter +Obj.index["teleporter"] = Obj.Teleporter Obj.collisions = {} Obj.collisions["wall"] = require(cwd .. "wall") diff --git a/sonic-radiance.love/scenes/overworld/actors/teleport.lua b/sonic-radiance.love/scenes/overworld/actors/teleport.lua new file mode 100644 index 0000000..390e9cf --- /dev/null +++ b/sonic-radiance.love/scenes/overworld/actors/teleport.lua @@ -0,0 +1,16 @@ +local cwd = (...):gsub('%.teleport$', '') .. "." +local Gizmo = require(cwd .. "gizmo") +local Teleporter = Gizmo:extend() + +function Teleporter:new(world, x, y, w, h) + Teleporter.super.new(self, world, x, y, w, h, nil) +end + +function Teleporter:applyProperties() + Teleporter.super.applyProperties(self) + self.event = { + {"teleport", "", self.properties.area, self.properties.x, self.properties.y}, + } +end + +return Teleporter \ No newline at end of file diff --git a/sonic-radiance.love/scenes/overworld/world.lua b/sonic-radiance.love/scenes/overworld/world.lua index bec1dc4..ed51a40 100644 --- a/sonic-radiance.love/scenes/overworld/world.lua +++ b/sonic-radiance.love/scenes/overworld/world.lua @@ -21,6 +21,15 @@ function RPGWorld:savePosition() game.position.area = self.area end +function RPGWorld:teleport(area, x, y) + if (area == self.area) then + self.players[1].actor.x = x * 16 + self.players[1].actor.y = y * 16 + else + scenes.overworld(area, x, y) + end +end + function RPGWorld:restoreActions() self.encounter:destroy() local currentMap = self.map:getMapAtPoint(self.players[1].actor.x, self.players[1].actor.y)