Before I Fade banner

Before I Fade

41 devlogs
92h 19m 10s

A 2D visual novel where you wake up as a ghost, exactly 1 month after you died. Find out what happened and who killed you before you fade away.

Demo Repository

Loading README...

vishalya18

Shipped this project!

Hours: 13.59
Cookies: đŸȘ 397
Multiplier: 29.22 cookies/hr

this is the 3rd ship for before i fade! i fixed quite a few bugs and tried to make the game more polished this time around based on previous feedback. some of these fixes include: making sure the character doesn’t go over the text box, decreasing sfx volume, making game instruction messages less explicit to provide freedom to the player, creating re readable diary pages, a few more bugs, and a bunch of typos! the game is a little more optimized compared to the last ship, so please expect a little loading time ><, but i really am proud of how far this game has come, and i really do hope you enjoy playing it! :DD

vishalya18

i spent a lot of time trying to set up re enterable scenes so it doesn’t feel awkward when you’re exploring the house and want to go back just for fun. I set up some bool flags in the global script and tried to start with just making the bathroom re enterable from the bedroom. but the way i have my scene trigger structured relies heavily on what room you were just in, so if i was to mess with the scene triggers, the counters for the reusable bedroom2 would not be set to the correct thing when used. this feature honestly requires just restructuring the whole game setup, in simpler terms, remaking the entire game scene triggers
. which is something that doesn’t really seem feasible. so ughh yeah, as much as i really tried to incorporate a re enterable scene, it just won’t work out for this game :(( maybe next time though! I also cleaned up a few more bug fixes, like disabling the desk after the bedroom puzzle. some of the playtesters left feedback saying that when typing their name the puzzle lock would show up and it was because they were pressing e and the desk was still set to interactable.
the hallway puzzle has also been improved too! now the puzzle pieces no longer get stuck if you put a wrong piece with a right piece on top with mouse_filter = Control.MOUSE_FILTER_IGNORE . we also added a tint to the puzzle piece so you can see better which piece you’re holding. some og the playtests also said the x or check felt way too long, like 4-5 seconds, even though it was only set to 2 seconds, so that was adjusted to just 1.5 seconds. I also changed the explore labels to
“continue exploring the house” instead of “go to the kitchen” so it doesn’t ruin the suspense of finding out what room you’re going to before you go there. lastly, i bumped up the speed from 295 -> 300. i know i said i wouldn’t, but why not lol.

Attachment
0
vishalya18

started working on the re readable diary entries per request of playtesters :3 !! I wanted to reuse my linked scenes so i can take advantage of bouncy animation for hover states of the arrows without having to create new ones. or so i thought
 at first i had 1 area 2d with 2 different collision shapes and was tracking states on which arrow should be visible and pressable based on what was currently on the screen. but since it was only checking which one was visible and not what the input was, because 1 area 2d was triggering the input event regardless on it was left or right, this method wasn’t gonna work out. then i tried to use 2 different area2ds linked in the same script. i’ve tried this method before, and it had worked in the past for some small things like hovering states and things, but i faced a LOT of issues this time around. each area2d had 3 sets of signals connected to the same script, but for some reason, the left arrow collision shape would always be null when trying to press left > right > left. i think it has to do with which area2d is the “home” for the script, but i forgot one i duplicated first and set the script to, so i was a little lost on that TT. so both those methods failed
 third times a charm! this time, instead of having a shared script just for the arrows. i just added the arrow control into an existing script, which controls the leave desk, so the arrows can easily appear once the dialogue is finished, and players can re read diary entries if they want or leave the desk and continue story progression. since the animation players also controlled the visibility state of my arrow sprite, and i was using hover to play the animation, and in multiple places to stop the animation, it was breaking in some areas. maybe later i’ll add them back if i have a little more time :33
i learned how to use set_deferred() to wait until a whole frame is done before triggering something else in the script

    right.set_deferred("disabled", true)
0
vishalya18

i added more polish to the game! i fixed the living room and attic text collisions so the ghost can’t walk over that and decreased the sfx volume from 20 db to 10 db. 10 db is still pretty loud, but maybe i can add a volume slider so the player can choose what volume to set the music and sfx to. one of the playtesters mentioned that it was kinda disappointing for them when they remembered the code from the kitchen fridge scene but the game just told them the code was unscrambling the letters a,f,d,e to unlock the safe. i made a quick fix for it now, which is just displaying the memory fridge cutscene after you lose a life. but since we have now hard mode and easy mode i feel like there should just be a hints system implemented to live up to the hard and easy modes. i think that would take a LOT of time and restructuring scenes, which is not what i’m looking to do right now, but maybe in the summer, when i have more time i can add more to the story itself and revamp the game!
i also fixed up a few grammatical issues and typos lol as well as increasing the ghost speed from 280 to 295. i don’t want to make the ghost over 300 speed or that will be too fast.
lastly, in the bathroom scene i reordered some of the visibility in the nodes. before when the phone was ringing, you could walk in front of it, so i changed the ordering to be above the ghost. i’m also thinking of adding phones next to the ear of the friend and the past char so it’s understandable that they’re actually on call, i’m not sure if just the phone shake did justice. lastly, i made the comb behind the ghost so it feels more like you’re stepping on it rather than it being in front of you while playing.

0
vishalya18

i figured out the issues from before, the collision shapes weren’t working because i was saving the scene and was already in the area where the new collision shapes were added TT, so i guess the game took it as the ghost not starting in the collision shape since it was already touching it. i added the new collision shapes to all the bedroom, bathroom, and hallway scenes, and then played it and realized the collision shape was blocking my area2d scene trigger collision shape cryign. so i just expanded the scene trigger collision shape over the static body collision shapes to fix this. and it’s better for the game too, as it cosmetically looks like it takes less time to load the next scene lol.
aghhh, was testing the bathroom scene again and my mirror is giving me more problems :(( it no longer registers if you double click to confirm your character if you choose girl > boy > girl or boy > girl > boy. the boy > boy and girl > girl are working fine but i can’t figure out for the life of me how to reset the state when switching the characters. i have tried bool flags, counters, and a lot of other methods and it just doesn’t workkkk :(( i fixed the visiblity though! before it was showing the girl ghost on the boy ghost when selected, but i really want to fix this issue. if i can’t figure it out, i might just add a “confirm your selection” button separately. i think the problem is that my input is registering twice per click rather than once, and i really have no idea to fix that.. if anyone has suggestions lmk :((
lastly, i also started setting up the kitchen collision shapes, a playtester mentioned to me the’d like to walk in front of the island too! i have no clue how to set up collision shapes on diff layers. right now, my ghost is behind the island sprite so it looks like the ghost can go behind it.

0
Neon

Tagged your project as well cooked!

đŸ”„ Neon marked your project as well cooked! As a prize for your nicely cooked project, look out for a bonus prize in the mail :)

vishalya18

i adjusted the collision shapes for the textbox from the start all the way to bathroom2. and while testing bathroom2, i saw the mirror scene didn’t have hover ability on the character ghost choices?!? the way my nodes were structured for that was 2 area2ds to supposedly control the hover and 2 texture button 2ds that control input for choosing the character connected back to the script on the area 2d đŸ˜”â€đŸ’« it was way to hard to debug, so i just removed the texture buttons completely since those were eating the inputs the area2d needed for the hover anyways! at first i was gonna make another @onready var sprite for my 2nd area 2d sprite to hover, but i just reconnected the 2nd area 2d signals into the one connected with the script, and that fixed it!! and then i got a little stuck.. my signals were connected for an input, but the ghosts stopped appearing on the screen. so i had to look at my other scripts and remembered i needed to specify where the input was coming from TT. so i added an if statement that checks if the input was from a mouse left click, and the ghosts started appearing again!! yippee! while i was playtesting this part, i thought it felt a little bland so i added some fade in animations to it. honestly, i’m really trying to make this game next level, so wherever special effects can be added, i will add them :33
i also started working on the text collisions for bedroom 2 scene, but something’s going wrong. it doesn’t register the ghost as a body in the collision shape and the ghost just walks through the collision shape off the screen TT i’m not doing anything different from before, but i might have to just redo all the collision shapes in the static bodies to see if that works, and if not
 maybe my partner will have a fix for this <3

0
vishalya18

found a few more annoying bugs to fixxx. when failing the kitchen puzzle for the first time the color rect behind the ingredients to show contrast to players that the ingredients on the screen were missing TT so i changed up where i’m displaying the visibility to enable those color rects again! also found some weird stuff with my hard mode fail state. i think when i was copy pasting my code from normal mode to create the hard state mode i forgot to delete the scene global var fail to determine if the failed cutscene should play. and by doing so, when failing the hard mode, the fail cutscene didn’t play in the menu scene :(( so i went through all my puzzle scripts and replaced the scene global variable fail tracker to Global.hardmodefail i should’ve been a little suspicious at first to why that variable wasn’t being used, but oh well, it’s fixed now :’))
i’m still running into a problem when my cutscene is being played from the menu, there’s a short frame where the screen is gray even though i have my color rect keyframes set to visible and full opacity when scene starts. wait nvm, i just had an idea to set the opacity to full at the very start of the ready with $AnimationPlayer2/ColorRect.modulate = Color(1.0, 1.0, 1.0) i don’t really know why this makes a difference since all i have below that is just setting global vars to false?? maybe it takes time to process those vars for a whole frame? but anyways that problem is fixed now!
i received a couple of feedback from play testers that the ghost sometimes wen over the color rects where the text was being displayed and that they would like to flip through the diary pages as well! i have a couple of major exams this week, so i hope i can get to these issues after! :33

0
vishalya18

added a couple of new features and quick bug fixes! the ghost character can now walk diagonally! :000, no more pressing only one key then switching to another key, you can press both keys at the same time to move in diagonal directions. there was a small bug in the phone control script in attic 2 for the second ending that kept failing and making the game break when playing in hard mode. turns out i forgot to set Global.hearts -=1 to subtract the global hearts count. but i was using each puzzle 3 hearts, which hard mode didn’t have access to, so it broke TT. we also added footsteps sound effects to the past characters when they walk to add more audio to the game and changed up our audio track! we added more ghostly songs to the music manager loop to add kinda a creepy vibe (?) to the game, since it is a murder mystery after all lol. lastly, i found a few more visibility issues to fix, like skip text label showing in the mirror scene during instructions. and i also got rid of the 2 sec unessecary long puase between finishing the dialogue and waiting for the hallway puzzle to start as well as removing the 2 second pause from reading the first diary entry to re enter the bathroom scene! lmk if you find any bugs, and i’ll fix them :33

0
vishalya18

Shipped this project!

Hours: 59.6
Cookies: đŸȘ 1783
Multiplier: 29.92 cookies/hr

this is the 2nd ship for before i fade! :3
i added a lot more features(40+) and fixed a TON of bugs(60+) and incorporated everyone’s feedback from the last ship! some of the big changes are: adding w/a/s/d controls to the character, puzzles life system with hard mode and easy mode, a BUNCH of transitions with .modulate(), .lerp(), .sin(), and camera effects, restructuring scene trigger layout of the house, adding navigation arrows, adding “e” to interact with objects, in game pause menu, and many many more!!
many of you last time pointed out that some of the click interactions were buggy, and that has all been fixed now after a long time of debugging :))
I really learnt a whole new side of godot as i tried implementing new features that i wasn’t familiar with before like audio buses, linked scenes, godot’s scene process modes, and how to add ogv video overlays!
if there was one thing i could go back and change when i first started was to NOT use canvas layers. something i’ve learned while working on this game is that canvas layers are easy to use but then a pain to deal with when trying ot incorporate something new or debug. i spent a lot of time restructuring some of my scenes due to this to make new features work!
i also worked on adding a lot more visual effects this time to make the game more interesting and appealing i think my favorite was figuring out how to use the sin() to modulate character opacity to make the ghostly xD
check out my devlogs for a more detailed summary of what i did each coding session and please please please do leave any feedback for the game so we can keep making it better :333

vishalya18

think i’m finally ready to ship!! i learnt how to set up and use godot audio buses to so i can mute my sound effects when the music was turned off! but doing this kinda broke my partner’s music manager script TT. so i had to find a workaround
 each audio stream player by default is set to the “master” soundbus, so i just connected the music into an audio stream player to the master bus and toggled it on and off in the toggle music func! var bus_idx = AudioServer.get_bus_index("Master") if bus_idx != -1:AudioServer.set_bus_mute(bus_idx, not music_on)
honestly, if the game was structured better, creating manual buses would have been super useful and easy to use. maybe in the future, when adding separate toggles for music and sfx instead of combined, i’ll try audio buses again!
i also added page turn sfx to the diary entries, just a tiny extra feature to make it interesting 3_neodog_cute
after that, i was in a constant battle of bug fixes and exporting the game. i’d export the game, upload on itch, play it, find a few bugs, fix in godot, re export and so on >< but i think i’ve fixed all the bugs (hopefully) if there’s any more, maybe my partner will catch them, but oh well!
turn your audio on to see the sfx being muted by the music off button in settings in attachment belowwww!

0
vishalya18

hey guyss, new update! hard mode is officially added >:) how does this work? now in the menu screen, you have an option, easy mode: 3 hearts per puzzle and losing all 3 will reset you to each room scene or hard mode: 3 hearts per ENTIRE GAME, and losing all 3 will reset you to the menu screen. I had to merge my previous animation player of just a fade in color rect with the fail reset puzzle anim player so that there isn’t a weird color glitch when playing from the start. the actual hard mode implementation was pretty easy but really tedious to add ot all the scenes TT i created 3 new global vars: var hardmode = true, var hearts = 3, and var hardmodefail=false the first one is to detect in the puzzles if hard mode was enabled from the menu in each puzzle. the second var is to subtract the hearts when getting something wrong or when the timer finishes in the puzzle. since losing all 3 hearts will go to the menu on hard mode, i added the fail puzzle cutscene to the menu and used the 3rd global var to detect if the player was coming from a hard mode failed puzzle. after that, later on in the menu script, i set the hard mode failed var to false so going to the menu won’t accidentally trigger it again. i also set it to false when going to the menu from in game setting menu and the end credits scene. so technically i didn’t have to disable it in the menu script itself lol.
i also got my brother to playtest the game so far and fixed up a few tiny bugs like making collision shapes bigger so the ghost isn’t walking on the text or changing the ordering of the talking character sprites. one big thing i noticed was that losing a heart in one scene doesn’t actually change the heart visibility on the other scenes TTT. i changed my if-if-if blocks to if-elif-else, and that correctly detected what global.heart count i was on!
i think my next goal is to find a way to mute the extra sfx that’s not in the global music manager^^

0
vishalya18

finally working on adding extra features to make this game cool after all those bug fixes :)) today i mainly focused on visual effects like animations and fade ins.
whenever you obtain a diary page from puzzles its just a static overlay. i wanted to make it more visually interesting so i added a small scale and rotate to it, to give it a floating ghostly effect ! and since i had already used the sin() func when creating a ghost modulation on the character, i used that for the rotation on the diary page too $Diarypage.rotation = sin(ghost_t * 1.5) * 0.08!! and since i took care of making all the diary page appearances a linked scene yesterday, i only had to do this once :3 i used the Vector2() for the scale amount since i’m dealing with x and y coordinates and want the scaling to be uniform.
after that, i was experimenting with cameras again. i really wanted to have more panning and zooming around when characters enter and leave scenes to make it dramatic, but my current scene structure really doesn’t allow for it :(( i’d have to change up a lot of the code if i wanted to incorporate camera effects in. oh well, maybe next game i’ll have better scene structuring :((
i added a fade into the page when you read the diary. so when it’s open, it has the previous page, and it looks like the new page is magically appearing on top!! i did this by adding an if statement in the process() to check if the diary node was visible and the fading var was set to true, and then used the lerp() to set a final and initial value and set the speed of the modulation with a delta multiplier! i added a helper function for diaryentry3 and diaryentry4 scenes because i had more than 1 diary entry sprite. I also made a blank page diary entry so it looks like the back of the previous page.
my partner and I shortlisted our “nice to add features” to see which ones were actually realistically doable to add into the game, and we’ve narrowed it down to 6! The game is almost done~

0
vishalya18

so i was trying to adjust the colors of my color rects for the diary, puzzle, and menupause overlays, but gave up after 3 scenes. i really see the importance of linked scenes now TT. so if i wanted to change the color and update it everywhere in the future, i wanted to fix this problem now to avoid dealing with it later lol. i went through each scene, deleted multiple nodes, and replaced it with canvas layer, menupause, and diary overlay nodes. i got to experiment with node layers a little bit too so my overlays would be above items in prev layers, like the ghost character. i was curious if doing this has any benefits, rather than just making the scene structure more organized, like faster runtime, or game optimization. but turns out linking each scene just instantiates it in each scene and is virtually the same as having multiple nodes and not a linked scene :’)
but i did get to learn about preload() and load(). preload() seems really useful, actually! to run items before the scene starts so they are available when the scene starts with no delay with assets that are used frequently.
i also cleaned up the rest of the files so there are no more script files in the scene folder lol. (my partner is really happy about this)
this is probably a big reach for this game, but i think it would bre pretty cool to get into file saving and loading so game progress isn’t temporary. i would be using config files for this but since my game is hosted on itch and not a downloadable (as of now) i’m not really sure how the file saving would work on browsers. i’ll look more into this saving thing at the very end, probably, when i’m done with game polish :D

0
vishalya18

omg major gameplay changes! previously, when walking across scenes to move through rooms, you would have to switch walking directions as our placement of doors was kinda wonky. we had a door on the left screen, and once you enter the door, you are placed on the left side of the screen again on the next scene. (see 2nd attachment to see what i mean^^). I moved the scene trigger collision shapes around so the flow through the rooms is simpler and easier to play :D
after simplifying the rooms flow, i play tested from the start and found a LOT of bugs, 20 to be exact. :’)))) most of them were ui visibility issued like hiding a label after an animation or hiding the hearts after a puzzle. so i quickly fixed all of those. some scenes were also missing the arrows to exit/enter rooms, like the first bathroom. also after moving all the scene trigger coll shapes, i forgot to move the arrows pointing to them as well TT so lots and lots of adjustment was needed to position the arrows around the rooms.
I also removed the interact with click for the bedroom puzzle (hoping that was the last one🙏). but pretty much just fixing lots of bugs based on visibility issues.

  • Fix arrow pos
  • Hide skip text bathroom b4 interact mirror
  • Arrow to exit 1st bathroom
  • Move door down bedrrom2
  • Bedroom2 leave desk hover
  • Disable click on bedroom puzzle desk
  • Move up hallway wall coll
  • Fix timer in hallway
  • Fully cover the the hallway with reset scene
  • Center huh what’s that note hallway
  • Flip MC in kitchen when talking to aunt
  • Hide ingredient panel until press start
  • Hide timer label and timer sprite kitchen
  • Make coll shape shorter on kitchen counter island
  • Add quotation mark end of omg why

  • Move aunt letter down (first line cut off)
  • Skip text on bedroom diary 3
  • Theme override timer color in attic
  • Text formatting after attic puzzle
  • Hover on ending choices

i hope now i can for real for real start implementing my extra features :’3

Attachment
0
vishalya18

worked on a few things~ some of the buttons in diary entry scenes weren’t hoverable. turns out, the didn’t have sprite textures loaded into the onready var cryign. then i had to manually reconnect signals to each script, i must have forgotten back when i first started working on this game lol.
and since all the bugs are fixed
 i’m starting to add extra features to make the games even more cooler. since the player is a ghost i wanted to add a fade in fade out effect on the player to give it a more ghostly feel. i never thought i would be using actual math in this game, but i used a sin func TT, which is used to oscillate values between -1, 1, making it perfect for the ghost modulations even though i’m not planning to use -1 for opacity lol. i used var alpha = 0.95 + sin(ghost_t * 2.0) * 0.07 in called in the process() to update every frame. i didn’t want it to be TOO dramatic so i set the base value to 0.95 opacity of the ghost and let it vary from +- 0.07 from 0.95 opacity over a 2 second interval! lmk if you think this looks cool or i just make it less variation in opacity ^^ i’m thinking of adding this sin() to other areas to make things slightly scale or grow without having to rely on anim players, just to give the game a little more life :3

0
vishalya18

more bug fixes doneee
I adjusted some of the static body 2d collision shapes in the living room to make it easier to walk and also so you don’t have multiple floating e’s at once. i also moved all the canvas modulate items in a canvas layer to just canvas modulate and used a for loop with .modulate property to change the colors!
i also figured out how to make the interact label less buggy! before i was using a await get_tree().create_timer(2.0).timeoutto manually show label then change it. but this led to problems when multiple items were being pressed fast and delay of labels visible due to creating a new timer each interaction. to solve this i created a physical timer node in the scene and set it to 2 sec and one shot (to only run once and not reset). then i connected my timer var with the node using reset_timer.timeout.connect(_on_reset_timeout). i also created a bool flag is_interacting = false to lock items when interacting for a one label show on same objects. at the very end of my on_object_clicked func, i reset the timer by reset_timer.start() if you hadn’t pressed every object so the label would update back to the instructions.
but im really happy with this feature and have implemented it all the explore scenes! :3
i think my next goals are to fix some puzzle music reset states and fix the credit scene formatting and hopefully that will fix all the bugs! doing that will basically clear all my todos and hopefully i can start adding features from my nice to add list to take this game next lvl!!

0
vishalya18

still working on fixing bugs! I worked on the kitchen scene first and also had to restructure the canvas modulate furniture out of the canvas layer. i’m trying to stop relying on canvas layers entirely because they’re such a pain to change. my e interact bubble was inside a node so it wasn’t showing up on top of the furniture in a canvas layer. so i had to move things out of the node into separate layers and doing so broke some of my animation player tracks
 TTT. whenever this happens i always just remake the animation from scratch, but today I figured out how to restore the animation 🙏🙏. since animation players create their anim tracks relative to the scene roots layers, just deleting one canvas layer can affect the root structure. you can edit each anim track’s path to the anim players name.property:bool flag to fix this! i really wish i had known this sooner. oh the hours it would have saved me

I was also editing the bedroom4 diary entry and fixed some ui visibility bugs <3 and corrected the anim tracks to play the right things.
I was playing through the 2nd ending, and i think it still needs to be longer
 idk what i should add though, but i dont want it to feel too rushed.

1

Comments

_d3f4ult._.cracka_
_d3f4ult._.cracka_ about 1 month ago

No way, I love it

vishalya18

worked on a LOT of bug fixes these past 3 hours. i wanted to fix all these before working on anything new or else i may forget about it and i want this game to have areally good experience for the users too! :D
starting off, in bathroom 3, i fixed the white tile puzzle reset state, before it was only visually changing the colors, now i reset the tile string state in the code itself. and i added the exit arrow after the scene was done, as well as changing the labels to use interact with rather than click, and fixing ui visibilities in some spots!
i had to restructure some of my other scenes to stop relying on the canvas modulate to change the color because it didn’t have a canvas layer to stop the modulations affecting the ghost. i did this by creating an array of the sprites and using a for loop to access each item to modulate it. previously, i was using .color to change the canvas color which affected each children. but since some of the children were tilemaps which only have a .modulate property, so i used that instead!!

for item in furniture:
    item.modulate = Color(0.0, 0.994, 0.816)
for item in doors:
    item.modulate= Color(0.094, 0.322, 0.278)

i changed the name input from a text in the bedroom puzzle to a tool tip because it was annoying to manually delete then type the name in. I also optimized some collision shapes in bedroomdiaryentry2plus to hit diary from the first click. i removed shape_idx == 0from the click input since it’s accessed from the e input. then, i changed multiple ifs to an if else and fixed shape_idx == 2 to shape_idx==1. idk why it was set at 3 coll shapes when there were only 2 TT.
lastly, i fixed some hallway bugs to hide some ui features in the end_dialogue()!

0
vishalya18

i went back and updated the explore part of the scenes to set label instructions for press with e on the floor level and click for desk level items.
i must have not checked the shake was working in bedroom 2 because i got a bunch of errors TT. apparently canvas modulate layers don’t have an offset property, which is what i was using to shake the scene nodes. only ui nodes have an offset property like control panels, labels, buttons, but gameplay nodes like node2d, sprite 2d, etc use position instead. i thought this was pretty interesting because i used the offset property for a sprite 2d to animate the arrow directions. turns out the offset in a sprite2d moves the texture itself not the actual node :0 so to fix my problem, i created an array of my items in the canvas modulate and used a for loop to access those items and apply the shake property on them with for item in furniture: item.offset = shake_offset
I didn’t want it to be too confusing to players because we don’t have any ui boxes for instructions. before, after you pressed an object, the “click on this” would just be lost. so i added a await get_tree().create_timer(2.0).timeout narration_label.text= 'Investigate the bedroom by pressing "E" to interact with objects.' so i can reset the label to show the instructions if they forgot what to do, because i’m using the same label and updating it with the object descriptions! i also added a label.text change when interacting with the desk area to let users know to click rather than press e. and while doing this i cut a really bad bug TT, the girl ghosts anim.play name was set to dairy instead of diary
 if you played girl ghost before and encountered this bug i’m so sorryyyyy :((( it’s all fixed now though <3
also found so many bugs from playtesting the whole game:(( i thought it was almost done, but i’ll keep making it better. turns out i never actually reset the color of the tiles in bathroom 3, i only visibly reset it but not in the code.

0
vishalya18

did a few things today: adding hearts system into bathroom 3 puzzle, adding furniture to camera shakes, and adding a bedroom zoom and pan transition.
i had to restructure some of my scenes when adding the camera to stop relying on canvas layers and self modulate each furniture item itself since camera2d doesn’t affect any canvas layer children :(( but now the furniture shakes too in the modulating scenes, so it really does look like a shake! I also added zoom and pan transition to the bedroom opening scene, but since my player was in a canvas layer, i found a work around by placing a non animated player sprite over the player and turning the visibility off when the animation was done and resetting the player position in case someone tried pressing the arrow keys during the cut scene lol.
I did learn something new today. whenever i create a new script it always has a extends node at the top of it and i had no clue what it was until today. extends in script basically means it inherits all the base functions. this could be really helpful in the future where i can call functions from the base node without having to send signals to connect them! i’m also getting really comfortable accessing godot in editor documentation, and i love reading more about each function or object xD

0
vishalya18

i’ve finally finished adding all the puzzle lives systems in the remaining scenes!

  • attic 2 puzzle hearts
  • bedroom 4 puzzle hearts
  • attic puzzle hearts
  • living room puzzle hearts
    I also got to clean up some of the scenes and found some bugs that hopefully none of you experienced in the past ship :(( but they’re fixed now! a lot of my text formatting was really off, so i adjusted those too.
    lastly, i added the hearts puzzle info to the menu scene! so players can know a little about what they’re getting into lol.
    tommorow i’m planning on fixing up the camera shake as it doesn’t target some of the canvas layers where other furniture is one and repositioning the ui “e” cue around so it looks better in each scene!
0
vishalya18

3 scenes now officially have a working lives system woohooo! there are only 4 more to go, living room, attic, attic2, bedroom4.
today i learnt something so so so so useful and i WISH i had found out about this before, how to make animation players when copy pasted from another scene local. whenever i copy pasted animation players in the past and tried to edit a track or rename something, it would delete the keyframed tracks and give me a “this is only read me” warning. and i had no clue about what read only property even was until i added the linked scene for the arrow a few days ago. so when i tried copy pasting the anim player today and got that warning, i tried to find how to make it local and i found out how to! pressing manage animations on the anim player and saving it as a local anim does this trick! :33 i’m so so happy, this would have saved me so many hours in the past just making text animations but now it’ll save me hours in the future. 🙏
i added a fade in and fade out audio func when the little reset cutscene happens to add dramatic effects using the tween() function with tween.tween_property(MusicManager.music_player, "volume_db", 0, 8.0)! <- this means the audio will take 8 seconds to come back to normal sound levels again.
lastly i went through some of the text animations and cleaned up the formatting a little, so it looks nicer when playing through, all centered.

0
vishalya18

been working on a life system for the puzzles, so it’s not a free loop of just a try until you get it right kinda puzzle. I added a global variable to track if the puzzle has failed. if the puzzle has been failed then it’ll change scenes back to bedroom 2 and start it over, but this time with 2 extra additions. i added a linked scene (yipeee) animation that says “i need to know the truth, one more time
” so that plays if the global var bedroom failed is set to true! and the linked scene has modulation animationsss. i’m really having fun adding animation effects, and will plan on adding to more things in the game so it looks more professional! I also added hearts and broken hearts for a visual cue to know how many tries you have left until the puzzle’s failed state shows.
additionally, i edited the actual puzzle scene itself so it’s structured better for users to play. now, the timer only starts after you’ve read the little dialogue and seen a closeup of the bed to see the colors better! also i added a hint for this first puzzle to make it easier for players^^ and adjusted the player position after the dialogues ot move to the bed, so you have to walk a little to enter the code lol.
after that, i made a dictionary in bedroom 2 with a list of messages to display after the cutscene finished and used a .pick_random() to display random messages in the text animation by setting the text label to the randomized message. I also learned that you could use single quotes to hold a string if you want the quotation marks to show in the text label!
lastly, i also edited the music to only speed up the music using lerp() in the last 10 seconds. previously the music started going faster as soon as the continue was pressed but not the puzzle music is normal at 0.75 and then only speeds up when under 11 seconds :33

0
vishalya18

super great news with this devlog!! on the last devlog i was improving the bathroom puzzle because some comments said some of the clicks/collisions were buggy. I know the major source of these issues was from trying to read the diary entries and the play button at the very start. they have finally been fixed!! so sorry for not figuring out what was wrong before :(((
since i was using a counter and checking which coll shape was pressed it took 2+ clicks to press the actual diary entry when in the desk. i changed my if , elif structure to multiple if statments to constantly check input to correctly drop the correct overlay. alsoo, since we are now using interact with “e” in some areas only the second coll shape pressed matters, so i just made the first if to pass :D
i hope those were the big buggy parts of the game >< but all has been fixed now so moving onto more featuresss!

0
vishalya18

i spent this past hour debugging why some of my bathroom 3 puzzle tiles worked taking in input or only taking in input in some specific areas :’) since this was one of the first puzzles made for the games, none of the ui nodes, like color rect were set to mouse filter ignore. so the color rect was taking in some of the input area of the collision shape. another thing was that there was an active texture2dbutton right behind my collision shape😭😭 so that took some input from the area 2d as well. i disabled that and also redid the green tile script to rely on a color variable rather than a counter. the counter ver was making me have to click the tile twice to set it from green to white. but since i have a script for white and green i just set it turn on off based on the current color. some of the feedback from the last ship was to to fix the buggy interact or clicks so i’m def gonna work on that :)) edit: omg i attached the wrong video TTT here’s my commit if you’d like to check that out!

0
vishalya18

from the new read all votes feature, i saw feedback that many people thought it was a little confusing to move around. so i added arrows!! in a linked scene this time lol. i was struggling at first because i made an animated arrow with keyframes of position, but i found out that it locks in the position across the scene itself and using an offset keyframe could move the arrow around based on relative position instead!! i thought using linked scenes would just mean it would update all the linked scene instances when added to each scene, but i had to make each child node editable to rotate the arrows and put them near different doors. so i’m not too sure how the linked scene effectiveness still stands
 i also learned how to use get_tree of the current scene if get_tree().current_scene.scene_file_path == "res://scenes/kitchen4.tscn": $ghostlayer/Node2D/arrow.play("arrow")
because some of my scenes have the same script so this was useful to add to show what arrow is at which door based on what scene is currently playing :) i have one more scene to implement this arrow when my partner is done adding in the interact with e in one last sceneee

0
vishalya18

been working on the pause menu featureee! and guess whatttt, it’s now incorporated in all the scenes! i had to manually add each element and copy the script components into each scene script and reconnect signals. Only halfway through did I think about adding them all in one scene and linking the 1 pause menu scene to all the other scenes
. but what’s done is done. if i have future implementations like that i’ll take the scene link path then :’))
one thing i did learn though, is why i had to disconnect and reconnect each signal for each scene. because signals are for individual scene instances, it doesn’t automatically copy scene signals when copying the nodes to new scenes :0 this was really annoying to implement but i do think a single scene link would have made this A LOT easier and simpler without having to reconnect each singal to its assigned script

i did a little file cleanup too. moved some of the scripts from assets and scene folders to the proper script folder :’))
ALSO added more controls!! i got some feedback from my past ship to add in w/a/s/d for movement, so the assets have been added in the controls section. they haven’t actually been implemented in the game itself yet, but soon! also we are slowly adding in interact with “e”, so you have to move across the room to explore, otherwise it’s kinda a cheat to stand in the room and press each object during exploring.
but i’m this game is almost done! there are 7 more big changes that still needs to be implemented, so stay tunedddd :D

0
vishalya18

new update!! I added a blink text color when the timer on the puzzle gets closer to zero, starting from around 10 seconds till puzzle end for each puzzle! apparently since my text is being updated in the process node, i can’t simply use the modulate and. Color properties to alter the color. So, to solve this problem, I used add_theme_color_override("font_color" to manually change the color from the process function. I also had to restructure some of the puzzle’s timeout funcs because there was an issue with the timer not starting in the helper func of the timeout func soooo i just move the timer.start() back into the timeout func :)
oh btw, to change the colors from red to black originally i was gonna just do time left % 2 and do if it’s 0, set it to black, and if not, red. but since i’m using time in milliseconds, i had to use int(Time.get_ticks_msec() / 300) % 3 to access the time left in milliseconds and then divide by 300 ms to get a 1 decimal time value! and i did modulo 3 because it looked better than modulo 2 lolzz

0
vishalya18

today i worked on something big :0 i started adding a pause menu!! this is my first time incorporating a pause menu so i learnt a lot too! usually, i avoid using control nodes but I used them today because i learnt that they are specifically for ui. I used a detect inut event to find it i press ui cancel(the escape key) to trigger the pause menu. and godot already has an inbuilt pause system with get_tree().paused = !get_tree().pausedwhich is sooooo useful.
I also learnt about different godot processing today. when i tried to implement the buttons to work when paused, they failed because godot sets them to inherit process mode automatically pauses all the nodes of the parent node when paused game. howeverrrr, you can change these to process mode: when paused!! so that those nodes only work when the game is paused, which is exactly what a menu in a pause screen needs!! :DD
last thing, previously i’ve been creating multiple area2d scripts for input events but there is a pressed() signal for area2d in node, signals inspector TT. which makes me feel kinda dumb for not knowing this earlier but i’ll be using that from now on rather than creating 100+ scripts. i’m also gonna add a 2nd page to controls, now that i have new ones like:space to skip, esc to view settings

0
vishalya18

added shake function to hallway and fixed up some ui display bugs with labels showing up before the modulate done. i also made a few different script versions of the camera shake because each scene is structured different like the player is in one canvas layer and sometimes some of the furniture is in another canvas layer so to account for all those difference some of the cameras use different scripts. the contents of the script are the same just the nodes it triggers changes! i realize after recording this video i need to add the new script to effect the hallway furniture ooops :( i’ll do that next time.
alsooo maybe it would be cool to have a sfx for the transition?

0
vishalya18

this past hour i worked on trying to make the past message from ghost more interesting! i wanted to add some kind of grain filter and learnt that i could use godots control videostream player but then found out it only support ogv formats TT. I coverted the video type and played around with the opacity and was going to figure out how to use shaders because the video is green screen bg. but since my ghost color scheme is already a blue greenish color, i just lowered the opacity and it seemed to work!
also i changed some of the asset that’s gender specific to be neutral so i can use it for both chars! and lastly i added animation player for my record screen bg to make it look like its blinking recording so it adds some depth in that scene. maybe ill try adding character walking back and forth later? but for now that’s enough. alsoooo, we finally have kinda scary music for all the puzzles :DD

0
vishalya18

i finally fixed up the attic 2 puzzle scene. kinda forgot about it after trying to implement a bunch of other features lol. turns out i had 2 timeout funcs in the maid script and the area 2d will my phone coll shapes. i also had to re enable shapes during reset states so the phone would actually work. i have no clue how i missed that before LOL. but i added that and fixed some visibility issues after puzzle ended!
my current puzzle structure is keep going until timeout, and reset, or if it’s wrong, reset. but it gets kinda confusing which one you’re on and if you have to restart, so i’m thinking incorporating some kind of life system? idk yet but hopefully something to make it more distinct!!

0
vishalya18

adding some special effects to the scenes using camera 2d!! i had no clue how to use the camera as my partner did all camera related stuff for past games so this was pretty new for me :3
i used randf() to get a shake vars between the inputted args(strenght and length) and applied the offset on both the normal scene and the canvas layer for the player. because for some reason canvas layer blocks all camera ui input so i made that workaround! planning on adding easing in the next test so it’s not as sharp (?)
I also updated the idle anim assets because they looked a little too wonky and slowed down the idle speed for the characters as well.
lastly, i fixed some grammar mistakes in the text animations xD

0
vishalya18

revamped the start game section and added a title screen!! added animation player for ghost flickering and fading away and candle animations :D and a overall fade transition into next scene where it fades in. I replaced the menu card used in all the puzzels so the home screen could take up more space and not feel as cramped (?) lastly, i added few boxes as well so the controls and sub text could be more visible against the current background

0
vishalya18

created the last puzzle for this game!! previously, ending 2 just had a cutscene of the phone opening and went straight into the police and ending. now i’ve implemented interactive phone screens to dial the cops and then record on the phone using area 2d coll shapes and connection signals :3
need to clean up a few visibility issues and this scene will be done!

0
vishalya18

Shipped this project!

Hours: 19.13
Cookies: đŸȘ 450
Multiplier: 23.54 cookies/hr

I built a 2d pixel game for a game jam! the hours logged here are after the initial submission and when i found out about flavortown for improving and adding more features! one of the hardest things i worked on was creating a dialogue manager system with my text animations. it took forever to try to find a suitable way to implement that, but i found that using seek() in animation players and awaiting input can give the same output!! please leave me any feedback so i can keep making the game even better!! :33

vishalya18

now that i now exactly where to add and implement the skip text code snippets, it’s easier to put it in other scenes :) hopefully i can do it faster because there are soooo many scenes still left to edit

0
vishalya18

i fixed the dialogue issues!! turns out nothing was printing despite my numerous print statements because i had godot output disabled 😭
added some helper functions so that once the dialogue ends, it exits that function instead of doing it all in one. also added visibility flags in next index of animation and during end animation because if i did set it to false in the animation player, the last paused segment would be blank.

0
vishalya18

fixing up the base text animation code!
added some bool flags to turn animation to false and pause it regardless of whether a user presses ui accept or it reached the end of a segment. this works in my scene with 2 animation dialogues, now i have to transfer it to the scenes with lots of dialogues đŸ« 

Attachment
0
vishalya18

added the rest of the continue buttons and implemented more tracks in the music manager, so it doesn’t just loop on the same one over and over and over again :)
lastly, started adding in a skip text using seek() function. i’m running into a few bugs, but I think this might be the best way to use a skip text without having to completely restructure my whole game!

Changelog

Attachment
0
vishalya18

Added a few continue buttons to avoid relying on a timer to move between screens. Spent a LOT of time debugging why my area2d’s weren’t working and figured out how to filter input in texture buttons as well as color rects.

Attachment
0