Skip to content

Conversation

@felixwalberg
Copy link
Contributor

This PR addresses some of the additions for learner contributions outlined in the Champy GDD.

  • AudioStreamPlayer nodes in each scene for learners to add background music
  • Renaming of nodes to match instructions for changing/inserting art pngs
  • Graying out obstacles in combat level to imply the need for learner contributions
  • Replacing audio file path for sequence puzzle rock object (there might be a better way to set this up)

@felixwalberg felixwalberg added this to the Vermont Cup StoryQuest milestone Jan 22, 2026
@felixwalberg felixwalberg requested review from a team as code owners January 22, 2026 20:55
@github-actions
Copy link

Play this branch at https://play.threadbare.game/branches/endlessm/champ-learner-assets.

(This launches the game from the start, not directly at the change(s) in this pull request.)

@felixwalberg
Copy link
Contributor Author

The latest commit adds sound effects to the rocks submerging. I decided to make each instance of the long rock nodes in the sequence puzzle scene unique, so now each one can be assigned a sound effect. Let me know if it would make more sense to remove the uniqueness, as this would enforce that the learner needs to set all 10 rocks to the same sound effect. (I have a default sound effect, the memory collection sound, which overrides the sound effects for all of them if the last one is left empty when they are not unique).

@Snowsd
Copy link
Contributor

Snowsd commented Jan 23, 2026

I am unable to cross the 4th set of rocks, as none of the rocks clicked enable passage. Is this intentional? I think that the whole storyquest should be able to be played through without altering code so that competitors who are replacing certain assets don't have to fix code in order to see their art or music in action.

@wjt
Copy link
Member

wjt commented Jan 23, 2026

I am unable to cross the 4th set of rocks, as none of the rocks clicked enable passage. Is this intentional?

There is a bug where I am sometimes knocked back incorrectly but the puzzle can be solved:

Screencast.From.2026-01-23.16-02-33.mp4

@felixwalberg
Copy link
Contributor Author

felixwalberg commented Jan 23, 2026

I am unable to cross the 4th set of rocks, as none of the rocks clicked enable passage. Is this intentional?

Screencast.From.2026-01-23.16-02-33.mp4

It seems like something is getting out of sync with the submerging and interacting. I wonder if it would also be beneficial to switch the Player.Mode to Player.Mode.DEFEATED when an incorrect rock is interacted with. Then you would not be able to sneak another attempt or move before getting reset.

I have been prioritizing the requests for learner input documentation, explicitly graying out/exporting variables to be changed, and working on mini game three, but I can try to troubleshoot this as well. This would also be a good time to add in some of the review suggestions you had made on the initial PR.

@wjt
Copy link
Member

wjt commented Jan 26, 2026

The level can be completed - there are bugs but no software is perfect. I think we should track such bugs separately.


[node name="Top" parent="OnTheGround/SequencePuzzle/Objects" instance=ExtResource("5_tf43i")]
position = Vector2(190, -194)
audio_stream = ExtResource("7_mtlrl")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This shouldn't be necessary because you've also changed it in the scene that this is instancing!

Comment on lines +106 to +108
[node name="Background Music" type="AudioStreamPlayer2D" parent="."]
stream = ExtResource("1_m7ukv")
autoplay = true
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have a specific node for background music. Please make these instances of scenes/game_elements/props/background_music/background_music.tscn. This node handles cross-fading between levels. It also makes sure that the music is in the correct channel so that it responds to the music volume control in settings.

collision_mask = 0
script = ExtResource("1_flhem")
sprite_frames = ExtResource("2_as5uj")
audio_stream = ExtResource("3_2vrsm")
Copy link
Member

@wjt wjt Jan 26, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you change it here as well, on the root node of champ_sequence_puzzle_object.tscn, then you won't need to re-set it in every scene that uses it.

Comment on lines +485 to +487
[editable path="OnTheGround/Objects/Object1"]
[editable path="OnTheGround/Objects/Object2"]
[editable path="OnTheGround/Objects/Object3"]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do you need editable children here? What properties are expected to be modified? Could they be exported from buoy.tscn instead? Or can they be edited in buoy.tscn for all instances?

(These are all just questions.)

@onready var area_2d: Area2D = $AnimatedSprite2D/Area2D

## Audio Stream Player for rock sound effects
@export var audio_player: AudioStreamPlayer2D
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you should add this to the champ_long_rock scene and assign it with $ as with the other nodes above.

audio_player = AudioStreamPlayer2D.new()
if not splash_sound:
print("Defauklt")
audio_player.stream = preload("res://assets/third_party/sounds/collectibles/MemoryCollectable.ogg")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should make this the default value of the splash_sound property, and then unconditionally set it on the audio_player node.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or alternatively default to no sound. AudioStreamPlayer2D.play() does the right thing if no stream is set (I think).

[node name="LongRocks" type="Node2D" parent="."]

[node name="ChampLongRock" parent="LongRocks" instance=ExtResource("3_bvcb0")]
unique_name_in_owner = true
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do these need unique names?

dialogue = ExtResource("19_27hsp")
sprite_frames = ExtResource("20_ey61o")

[node name="Sound Effects" type="AudioStreamPlayer2D" parent="."]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is this one for?

When you add new AudioStreamPlayer(2D) nodes please add them to the appropriate bus. In this case, SFX.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants