2022-12-15

Last modified: Apr 12, 2023
Word count: 250

gamejam

> DONE Trolley controls api

fetch controls as a datastructure

> DONE pause navi/trolley controls viewer

> DONE HUD

>> DONE player health

>> DONE player controls

> DONE HUD notifications

> DONE player knockback and death

>> DONE impl via state machine

>> DONE animations

>> DONE pull pins

> TODO doors and spawners

respawn player (maintain health)

respawn enemies

i.e. move to spawn points

>> DONE create 'hub' world for walking in and out of library

>> DONE add doors!

>> TODO move player and gloombas to spawners

consider spawning through Ghosts autoload

>> TODO should we have a camera spawner? a HUD spawner?

feels like this goal is getting all the level-building tools in place

i.e. what's annoying to deal with/refactor

i think we really just want the player to spawn/grab the camera but what does the camera do when they're dead? maybe it's the player grabbing the camera?

OR this work belongs to the level/world script - how to coordinate the things

> TODO player burst and attack - freezes gloomba, gloomba takes hit

temporary weakness, can jump/touch can hit with rod?

> TODO Glowmba/Gloomba

>> DONE sprite

>> DONE floaty movement

>> TODO death state, drops light

>> DONE player damage on touch

>> TODO dialogue via notifications

on attack, on damage, on death

>>> TODO pull relevant kink helpers out of glowmba impl

>> TODO don't fall over edges?

> TODO more fade-in/out ghost platformy-ness

> TODO proper player controls

i.e. 'ghost_jump', 'ghost_run_left', 'ghost_run_right', 'ghost_burst_light'

> TODO title screen

> TODO remove 'main-menu' from pause screen (or redirect to ghosts main-menu)

> TODO add 'restart' to pause screen

> TODO credits

> TODO music

> TODO sound

ermagherd godot or returns a boolean, not one of the vals

gets me every time

nope:

var time_to_kill = ttl or 3

you have to:

var time_to_kill = ttl
if not time_to_kill:
    time_to_kill = 3

kink godot ink integration todo

pull this interface into kink

func _ready():
        Kink.register(self)

        call_deferred("add_child", ink_player)

        # TODO do this in register, with more warnings/validations
        ink_player.connect("ready", self, "kink_player_ready")
        ink_player.connect("loaded", self, "kink_loaded")
        ink_player.connect("continued", self, "kink_continued")
        ink_player.connect("prompt_choices", self, "kink_prompt_choices")
        ink_player.connect("ended", self, "kink_ended")


func kink_player_ready():
        ink_player.create_story()


func kink_loaded(_success):
        # print("Glowmba kink loaded, with success: ", success)
        # print("My ink story: ", ink_player._story)

        ink_player.continue_story()


func kink_continued(_text, _tags):
        # print("[KINK]: continued ", text, " tags: ", tags)

        var msg = Kink.current_message(self)

        if msg:
                # TODO we probably want a smarter version of this
                # e.g. handling sentences vs newlines
                for m in msg.split("\n"):
                        if m: # skip empty lines
                                kink_label.set_text(m)
                                Ghosts.create_notification(m)
                                yield(get_tree().create_timer(2), "timeout")

        # print("[KINK]: current text:")
        # print(ink_player.get_current_text())

        # TODO call in Kink?
        ink_player.continue_story()


func kink_prompt_choices(choices):
        print("[KINK]: choices", choices)


func kink_ended():
        pass
        # print("[KINK]: ended")