-
Notifications
You must be signed in to change notification settings - Fork 258
Add Nora and the Impossible Homework StoryQuest #1301
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Merging from Endless Repository into Verso
Mini game one tilemap
Remove the style it inherits from button by setting an empty stylebox to the normal and pressed states. And add a white background with transparency to the focus and hover states, so when navigating with the keys the player can see that the option is focused to toggle it.
And provide helper methods to get and set fullscreen.
Add a video section in the settings, with a check button that switch the display to fullscreen when toggled, and switch to windowed when not toggled.
This is a workaround for an upstream bug: godotengine/godot#100626 Connect the label size changed signal to a handler, that calls reset_size() in the PanelContainer Also, change the minimum size of the PanelContainer to the current size, and shrink center both the MarginContainer and the Label nodes. The offsets in the diff have changed automatically because of this. Fixes endlessm#608
Add the Aseprite source file and the exported spritesheet animations as PNG. There are 3 animations: idle, move and attack. There are 5 color variations: blue, gray, green, orange and red. And there is another variation: the character holding a torch, and the character without a torch.
The previous sprite frames used in the Lore quest was from the Tiny Swords asset pack, character Goblin with a torch. And the template was created based on it. The storyvore character is a bit different: - Has different amount of frames: - Attack has 6 frames. Goblin has 3. - Idle has 11 frames. Goblin has 7.
Use the ones without torch for the guards that move super fast and have small detection area (scaled to 0.1). Use the ones with torch for the ones that move slower and have large detection area (scale 1). Use a variety of colors for the storyvores.
Make it consistent with other setters in the project, wait for the node ready and set it from the _ready method, assuming that the SpriteFrames variable is not null because it's defined as an @onready. For this, do not use inline setter.
Unfortunately, the sprite frames for Storyvore and the guard template have animations of different length: - Attack: 6 and 5 frames - Idle: 11 and 8 frames The only animation with the same length is the walking animation (6 frames). This is because the template was based on a placeholder, not in the final character. So, match the frame by frame animations in AnimationPlayer to the longer animations (the 2 from Storyvore). The template will have the last frame still for a few frames. Add each frame to the AnimationPlayer timeline. Changing the animation and adding 2 frames makes the animation play but not at a consistent 10 FPS. This fixes a bug where the idle animation wasn't playing, because it was done by calling play in the SpriteFrames node directly, and at the same time the AnimationPlayer was calling stop(), which made the character be still in frame zero of the idle animation. Also: Remove waiting for 0.4 seconds before playing the attack animation. Otherwise it looks odd that the player defeated animation happens before it.
The undo and reset are actions specific of the Sokoban puzzle.
Add an action to the Sokoban HUD to go directly to the next scene without completing the puzzle. This commit adds it inconditionally, but the next commit will add the logic to when the action is possible.
The rules engine can be configured to offer skip after the player spent a certain amount of seconds in the puzzle, defaulting to 2 minutes. Or after a number of retries, defaulting to 10 attempts. The Skip in the HUD becomes visible only when the player can skip the puzzle.
Each puzzle has a RuleEngine node and a SokobanHUD node. Connect the skip_enabled signal of each RuleEngine node to the display_skip() function of the SokobanHUD node.
To me A (bottom button, PlayStation X) feels more like the button for a "normal" action, where my finger rests by default, while skipping is more exceptional. I think Y (top button, PS triangle) feels better for this action in some hard-to-explain way.
Png tiles touchup
Sync from Endless Threadbare repository
I set up a clone with two remotes:
$ git remote -v
VERSO-UVM git@github.com:VERSO-UVM/threadbare.git (fetch)
VERSO-UVM git@github.com:VERSO-UVM/threadbare.git (push)
upstream git@github.com:endlessm/threadbare.git (fetch)
upstream git@github.com:endlessm/threadbare.git (push)
I looked at the files changed between the two:
$ git diff --stat upstream/main...VERSO-UVM/main
I semi-manually pruned the list to only include files that already
existed upstream.
Then I used `git merge-base` to find the common ancestor commit of
upstream/main and VERSO-UVM/main: this is where they branched from each
other, and used it as input to `git restore` to restore the files as of
that commit:
$ git restore --source=$(git merge-base upstream/main VERSO-UVM/main) \
.github/CODEOWNERS \
.github/workflows/export.yml \
.pre-commit-config.yaml \
assets/first_party/logo/threadbare-logo.png.license \
project.godot \
scenes/eternal_loom_sokoban/components/hud/sokoban_hud.tscn \
scenes/game_elements/characters/enemies/guard/components/guard.gd \
scenes/game_elements/props/fixed_size_label/fixed_size_label.tscn \
scenes/game_elements/props/sequence_puzzle_hint_sign/sequence_puzzle_hint_sign.tscn \
scenes/globals/settings/settings.gd \
scenes/menus/options/components/video_settings.tscn \
scenes/quests/lore_quests/quest_001/3_stealth_level/stealth_level.tscn \
scenes/ui_elements/components/theme.tres
Revert changes to upstream files
Moved assets into verso directory
|
Test build no longer available. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can delete this unused file I think.
wjt
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This was an easy PR to review - thank you for the care you and your colleagues have taken to organise this quest.
I played through the quest - great ideas, I love the adaptations of the main game artwork to suit your story.
I have a few bits of feedback but nothing too large:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this file is unused and could be deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Interesting adaptation of the filling game!
| @@ -0,0 +1,39 @@ | |||
| [gd_resource type="SpriteFrames" load_steps=6 format=3 uid="uid://cw0d60uuy2b8"] | |||
|
|
|||
| [ext_resource type="Texture2D" uid="uid://do4tec8oedbcx" path="res://scenes/quests/story_quests/template/2_template_combat/template_combat_components/template_target.png" id="1_s8lii"] | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This references the image in the template folder directly. I think you should either:
- Delete
verso_target.png(since it is unused); or - Update this to refer to
verso_target.png
| @@ -0,0 +1,18 @@ | |||
| [gd_resource type="SpriteFrames" load_steps=3 format=3 uid="uid://dqrslr3weg0lt"] | |||
|
|
|||
| [ext_resource type="Texture2D" uid="uid://cagyo41xspko" path="res://scenes/quests/story_quests/template/2_template_combat/template_combat_components/template_projectile.png" id="1_jg0bk"] | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here.
| [ext_resource type="Texture2D" uid="uid://cd2ivq0ll3lt0" path="res://scenes/quests/story_quests/template/2_template_combat/template_combat_components/template_throwing_enemy_attack.png" id="1_whccx"] | ||
| [ext_resource type="Texture2D" uid="uid://cb3lim37pj3by" path="res://scenes/quests/story_quests/template/2_template_combat/template_combat_components/template_throwing_enemy_defeated.png" id="2_b3jhe"] | ||
| [ext_resource type="Texture2D" uid="uid://dlyqia7fiovw1" path="res://scenes/quests/story_quests/template/2_template_combat/template_combat_components/template_throwing_enemy_idle.png" id="3_mub68"] | ||
| [ext_resource type="Texture2D" uid="uid://ddsr4nuoutyif" path="res://scenes/quests/story_quests/template/2_template_combat/template_combat_components/template_throwing_enemy_walk.png" id="4_yujlm"] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ditto
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ditto
| @@ -0,0 +1,37 @@ | |||
| @tool | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| @tool | |
| # SPDX-FileCopyrightText: The Threadbare Authors | |
| # SPDX-License-Identifier: MPL-2.0 | |
| @tool |
| @@ -0,0 +1,37 @@ | |||
| extends Node | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| extends Node | |
| # SPDX-FileCopyrightText: The Threadbare Authors | |
| # SPDX-License-Identifier: MPL-2.0 | |
| extends Node |
| "texture": SubResource("AtlasTexture_bsni3") | ||
| }], | ||
| "loop": true, | ||
| "name": &"attack_01", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the combat game, the repel action doesn't work. This is a bug in some backwards-compatibility code in the shared player scene - we changed the name of the animation corresponding to repelling a projectile. You can fix it by renaming this animation:
| "name": &"attack_01", | |
| "name": &"attack_02", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I filed #1305 about the bug in the player scene.
PR changes: renamed/moved assets, removed unused assets/files
Adding missing dependencies for PR
Deleting extra assets
Deleted last scene assets from global directory
wjt
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice work!
|
I've invited the 3 creators of this StoryQuest to a team in our GitHub organisation; joining it will give you the ability to push branches to this repo. I'll mark that team as co-maintainers of this quest so that you can merge your own PRs targeting this quest. No obligation to accept but we'd love to have you as continuing contributors to this quest or the wider game if you are interested! |
|
@aureliamarzipan, @felixwalberg, @tovedetered congratulations! |

Nora and the Nearly Impossible Homework follows a student through their struggles to perform at a high academic level. They deal with self-doubt, shame, and frustration. But, through determination and the support of a thoughtful friend, they are able to persevere and attain what they once thought wasn't possible. Each mini-game correlates with an emotion: first anger, then sadness, then happiness!
All art either created by @felixwalberg, or based on modifying existing artwork in the game.
Engineering:
Game Design:
Production and Management: