From 2fb6c2f4af9d7124bb58e29e8b5cd65aee7b5e7e Mon Sep 17 00:00:00 2001 From: Nathan Lovato Date: Thu, 9 May 2019 10:12:26 +0900 Subject: [PATCH] Add more prototypes to work on --- GAME_CONCEPT.org | 53 +++++++++++++++++- .../level-design-loops-illustration.png | Bin 0 -> 4851 bytes 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 img/prototypes/level-design-loops-illustration.png diff --git a/GAME_CONCEPT.org b/GAME_CONCEPT.org index 00aa813..e2cbe6a 100644 --- a/GAME_CONCEPT.org +++ b/GAME_CONCEPT.org @@ -1,7 +1,10 @@ #+TITLE: Game Concept #+DESCRIPTION: Concept document for the 2d platform/adventure game demo we're creating as a base for the Kickstarter 2019 2d game creation course. +#+COLUMNS: %5TODO %25ITEM %1PRIORITY %8Effort(Effort){:} %TAGS +#+PROPERTY: Effort_ALL 0:30 1:00 1:30 2:00 3:00 4:00 6:00 8:00 #+AUTHOR: Nathan Lovato + /The concept is still a living document so that we have a base for design discussions. At this stage, we can still change the core mechanic, if you have something that's as versatile and that can fit the teaching goals for the project. See the [[*Possible other uses][first note]] below/ * Gameplay @@ -125,6 +128,9 @@ The twin stick setup also works. To me, it feels more technical, and less accessible. But it works. ** TODO Unlocking behaviors and code structure + :PROPERTIES: + :EFFORT: 4:00 + :END: Figure out a good pattern/code structure to unlock and manage new moves on the playable character: e.g. wall-jump, new powers for the hook... @@ -134,22 +140,67 @@ 2. Can we find a pattern and code style that's both modular, i.e. uses aggregation, and that stays accessible to the students? 3. Which code pattern would work best for Godot? +** TODO Test RigidBody2D instead of KinematicBody2D for the hook-based movement + :PROPERTIES: + :EFFORT: 3:00 + :END: + + We have two options to handle the character's motion: controlling the physics ourselves with ~KinematicBody2D~, or relying on the Bullet physics engine with ~RigidBody2D~. + + I expect that using Bullet will reduce our control on the character's motion, and that would lead to a different game feel and gameplay down the line: we could have the character hit objects, etc. + + It's worth trying only to see if we can't make a game that feels as good or to avoid some code-related challenges. + + You can use the existing hook mechanism almost as-is for this test, as it gives you a direction to hook to. The only element that has to change is the character. + +*** Questions + + - What are the advantages of RigidBody2D in practice? + - What are its drawbacks and limitations? + - Is the code easier to write? + ** TODO Improving movement + :PROPERTIES: + :EFFORT: 4:00 + :END: The base movement is in place, but it does have some quirks. It's still easy to bump into a corner and to miss landing on a platform. Some issues: - 1. Hooking to a node from up close barely pulls the character, making it not reach the hooking point. + 1. Hooking doesn't reliably pull you to the hooking point + - Hooking to a node from up close barely pulls the character, making it not reach the hooking point. + - Hooking downwards accelerates your fall and often makes you miss your target. + - Hooking horizontally while falling doesn't slow down your descent, so it has almost no effect on your motion. + 2. The air state has a higher horizontal speed limit than when walking on the ground, so the character accelerates horizontally upon jumping. - The speed cap should be dynamic, depending on whether the player used the hook or not. - It's the hook that should provide a maximum speed boost? + 3. If the player misses getting on a platform by a small shot, we could have the character climb on it using the ledge. - The intention behind the design being to offer a fluid experience with motion, it's not fun to miss a platform by a few pixels, and the character being agile, it could make sense for it to climb ledges automatically. - The goal isn't to remove challenge or to babysit the player, but to have serious challenge in other parts of the level design/gameplay, and not break the flow of the motion for a small imprecision. - See Dead Cells for an example +** TODO Design level loops + :PROPERTIES: + :EFFORT: 6:00 + :END: + + We have some core movement and controls in place. We now need to work on level design loops that we can combine to create complete rooms. E.g. having a ledge, a pit, and a distant platform down the character that's only accessible using the hook: the loop involves falling and using the hook mid-air going down. + + [[./img/prototypes/level-design-loops-illustration.png]] + + These loops should push the possibilities offered by the hook and explore ways to combine them. It's also an opportunity to figure out its limitations and ways to improve the movement. + + You can add new mechanics or obstacles as part of this, like moving platforms, but be sure to focus on level design and to try to reuse each element as much as possible. + + Use a new node branch for each chunk, and separate collision bodies so we can save the best ones as reusable scenes. + ** TODO Predicting player motion + :PROPERTIES: + :EFFORT: 3:00 + :END: It's hard to track how a hook will pull the character. It'd be nice to have tools to visually debug the characters projected arcs of motion, to get a sense for what the hook will do. diff --git a/img/prototypes/level-design-loops-illustration.png b/img/prototypes/level-design-loops-illustration.png new file mode 100644 index 0000000000000000000000000000000000000000..31bf8c9a6bfb0fe678d7a1f57a55eb1cf4724575 GIT binary patch literal 4851 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 DZ$v@@ literal 0 HcmV?d00001