Published on itch.io

on Thursday I published Lucid Heist

It’s quite a journey. I am really happy i now know that I can do it - I can make something end to end. It was cathartic to share it with the world and everyone has been incredibly kind and supportive of this adventure.

I am very fortunate to have the opportunity to make something that kinda resolves some of my internal feelings for the last year or so where i was stuck in a creative rut. this project really shifted my perspective on where my interest are and how i can continue growing as a creative.

Now on to planning for the next project!

Check list

Things left to do:

  • hint for the level’s goal

  • swap out logo

  • fix the enter the door

  • dress up main menu

  • spawn 3 other levels

  • finish the success state

  • game trailer

  • itch.io page

Hints for goals

I was looking at references for making a more dreamscape environment for the main menu and I started working on some rough draft.

After dinner I also started to poke at how might I be able to show what the player’s goals is. I wanted to make it more environmental, so I first tried to do a hint in the location.

Environment UI hint

Environment UI hint

more sparkles to indicate the art is special

more sparkles to indicate the art is special

A weekend of fiddling

Make sure the state blend the bottom part of the plane needs to be long enough so the content in the middle doesn’t pop in when the character moves in

There is this issue of the nav mesh where in the main level suddenly it’s lifted in a weird manner from the HDA instances. TBH i feel like making things with code or any interactive systems, i feel everything is always breaking. Is it just me or everything is always on fire?

107a97ca5bd4a571edcebec54a66fc32.jpg

At the end it was because i added the shadow plane when i was trying to add the dot grid in the main menu. Once i removed that it no longer has collision with the pawns or the art piece.

I moved on to making the sequence for the success state and also marcos helped me to create some distortion on my voice narrative to company the video file.

I hooked up the music to the state of the player and added an additional function to remove music when the player esit out of the state.

I tried the idea I had of adding the alarm clock so we can play the news from and have that inside the main menu but i think it’s too much work and i am not quite sure aesthetically it makes sense. I wanna still eventually work on something where i can add the ambient light from a monitor onto the world i think it’s a really neat effect.

I started to think about how to introduce the art that needs to be stolen and the goal to the users. not quite sure what is the best approach - a short widget to show the goals, a permanent HUD or a tooltip like elements that pop up at relevant times.

Main Menu gold plating

A broad list of things I still need to complete to bring this “pseudo” game to close

  • success state

  • spawn a few different levels to feed into the

  • change folder name from movie to movies

I am considering to switch out from the full screen of the news broadcast to playing it in a retro device with lighting to affect it (from this lighting tutorial).

I wanted to get this idea for the main menu out of my head. that is the player can practically walk “infinitely” and will always circle back into the many prop stage, where they have to pick the art work they are going to steal. I first had to hook up a couple of thing and I also got my player location driven shader to work (thank you youtube tutorial)!

fixed camera

fixed camera

following camera

following camera

At the end to make this look right I had to change the particle positions and also the extend of the collider to make it more seamless

Im happy about the progress we made. I also made a new logo for the game, i am considering to call it “lucid heist” so that I can make caps out of that phrase haha.

To do:

  • how to dress the main menu lobby

  • export audio for the news opening and hook those up.

  • success state story

Have to pause to make progress

I tried a couple more different strategy e.g. adding additional variables but still no luck in figuring out why the move to is continuously called under the guard to pick up art branch. I decided to stop working on it and switched over to making the art that is dropped after a certain set of time it will reset back into it’s original location. Not the best but at least we made some changes.

replaceArt.gif

I might return to this when I have a clearer mind, but right now I feel like i’ve been stuck on it for 4 days without making any progress and I kinda need to cut loss.

newNews.gif

I then went back to slot in the new news opening which I decided to merge the two clips together since it’s not clear how I can chain them. A few issues popped up with the media player which I would take care of them tomorrow!

To Do Tomorrow

  • figure out the sound file for the media

  • add and set up the success state video states

Eternal struggle with the AI

Haven’t updated this in a while and yes I am still working on things! Naively since i was successful in refactoring the AI code so now we can have multiple guard experiences. I thought it would be good to figure out how to move the guard towards the art if the player drops it. So that they can pick it up and move it back to the original spot.

I am not quite sure why but it seems like the behaviour tree branch for “needToReturnArt” keeps retriggering. also the move to task is not executing correctly. I have several suspicions.

  • i tried switching out the move to task with move to directly task and it seems like the guards are able to move more appropriately

  • Maybe it’s the order to which i store the values of the blackboard variables. where when the flow gets to the move to, the droppedartlocation variable is still invalid

I’m getting to he point where I am considering to redo the entire logic again to see if i run into the same problem.

Also I finished the opening sequence for the news announcement, and i think i should get started on the success state. I am still not sure if i should have this maximised on the screen or have it embedded in an object.

Also I was playing with other ideas with name: “lucid heist” clearly at first I didn’t know how to spell heist, so i spelt it with an a (which i still do).

lucidHeistLogo_1.png

TOnight I tried some other options like cone check decorator and creating my own cone check service. I can see that there are some things I can do to prevent the duplication of states and maybe I should do that first to clean up the AI states based on enum value so things aren’t as crazy.

To do

  • try to refactor the states of the guard to clearer branches of : patrol, search, chase, battle and restore art

  • try to remove the variables and restart how to pipe in the data needed to drive the art pick up information.

The problem here is even if I fix the move to issue, I still in my head can’t figure out how might I be able to detach the art from the guard’s hand since there is no way for me to pass that information through to the behaviour task.

If this rabbit hole really doesn’t work i will just reset the art piece location to the original location when dropped.



Refactoring to support multiple AI guards

Yesterday and today I spent a bulk of time refactoring my guard AI behaviour tree and variables across multiple BP

A few things I adjusted:

  • “can see player” had instance sync true in blackboard variables, that is a forgotten toggle of me trying to figure things out from before, which meant that all AI guards can see the player even when they are not visible

  • I refactored the way we get access to the states from the player BP from three event dispatcher that I bind to the guard BP and call when it is the right time. It worked out pretty well.

  • To use the event dispatcher I still have to think about whether I want the variables and states to be passed on to be acknowledged by all guard AI or just the one currently in battle with the player

  • Some issue of not kicking off the searching status, and i realised it was because i change the status to searching at the start of the sequence which aborted it, i corrected it by removing it.

doubleguardChase.gif

So now what we should have is that the player should be able to trigger battle individually for all guards and if she wins all of the guards will fall back and chase/search for her. I added the amount of spacebar the player have to smash where it scales based on the number of guards are pulling from her.

I also rotated the player to face the art when it goes to pick up.

Tomorrow to-do:

  • should I introduce a new state where if the player drops the art, the guard will go over pick it up and place it back into the original position (oh man, that is ambigious)

  • try doing the looping map idea for the main menu, so there is an infinite world the player walks through instead of a locked box. i wanna use the curved shader, but maybe it won’t be necessary

  • debug why we need two pickups to access the player’s map

  • debug why the player triggers into the battle state while the guard is still just walking around.


WFC fixes & Slippery Patches For all

This morning, I had to fix some of the WFC generation where the spawn points for both the guards and NPC are operating in a odd way depending on the layout. I know part of the reason is because I adjust the grid resolution of the WFC model.

I also hooked up the slippery trap so that it applies to all characters in the scene and only disable the input of the player if it casts successfully to the BP. also did some touch up the collision and physics setting of the prize art, because it keeps moving out of place.

I was watching the next part of the AI tutorial series on hearing perception and function libraries. I was thinking about ways that I should consider when I am going to refactor my code this weekend.

Tomorrow to do:

  • Star the refactor: considering shifting the trigger battle into the guard BP instead of the player BP so each of them can handle how to interact with the player in battle mode

Houdini Placement of Traps

I spent about 1.5 hr today getting back into houdini to add the traps that I would like to spawn on the map. It took a while because I had a few mysteries that I needed to figure out in order to get the layout I wanted - spawn the traps in the rooms that isn’t in the same room as the player or art spawn point.

Untitled.png

One of the problem I had was something I didn’t quite resolved - how to find the point that is furthest distance from the player. From my point VOP calculation, the first point is usually correct then the rest is not quite. I didn’t quite understood the problem until I stared at the geometry spreadsheet for long enough did I recognise that the distance being calculated is based on the distance from the 0,0,0. After poking for longer I realised I needed to insert the point number to the import point attribute to make sure for every point we are doing the calculation it’s always measuring from the one spawn point.

Tomorrow To-do:

  • check if we can make all pawn class also be subjected to those traps

  • maybe set up a general trap spawn bp so if i am ambitious enough to decide to add other traps we can use those to mix in

Added Slippery Sign Trap

I half solved the issue of the fast whipping rotation issue from last night. I tried a bunch of different solutions like Rinterpto and Do once node but nothing quite fixed it aside from playing with the random value range. It took a little while to set it up, but i think it’s quite fun to run into . Right now it only affects the player but I think I might want to have that mechanics universally operate on all the pawns. I need to assess if that affects the AI behaviour tree

I made the sign in blender and made the material to slot in after I feel the mechanics is getting better. it was fun to look at google image result on caution slippery sign and try to do my own version.

Tomorrow’s To-do

  • Add the slippery sign BP into the houdini procedural logic

  • Check how feasible it is to have all pawn BP to be subjected to that sign (a little concerned about how this may affect the pulling system when the player and guard interacts)

Fixed some visual bugs

I changing the running setting from holding down shift to just adjust the speed to run. Now I am considering to add in a jump for my character but i’m not sure if it’s worth it, personally i love jumping in games, it makes me feel so liberating.

I also tried to fix a couple of geometry visual issues. I fixed the blacked out tile and I also tried to adjust the lightmaps of the corner tiles that seem to display a seam from other tiles. Unfortunately I tried to look at a couple of solution on the internet and it just doesn’t seem to work even when I adjust the lightmass setting exactly as they described. At the end, I added a slight emission to the tile material that seams to even out the texture a bit.

Untitled.png

I have been wanting to do a small mechanic of a slipper floor where when the player walk into it, she will rotate uncontrollably and swing off into a different direction. I think it got most of the part working but I’m not quite sure why the rotation is operating in a chaotic manner

slipperyPatch_rotationBug.gif

Tomorrow’s To Do

  • Figure out the rotation issue of the slippery patch

  • prepare the asset for that slippery patch

Double AI bug, possible refractoring in the horizon

There is truly no better feeling than being able to do something you didn’t think you were capable of doing.

I was procrastinating on how might i be able to include the patrol point system into my WFC HDA. I wanted to set the patrol points procedural where the guards will march along 3 of the closest points. I realised i needed to sort all the patrol point BP in the level by distance from the actor and create a new array that stores only three of the patrol points. I found this answer and I can’t be more thankful of the author! I had to do some adjustment to it so it fits with my AI system. I pulled out the option of being able to set if I want the patrol path to be looped continuously or ping ponged, just to simplify the process.

It works well but I realised when there is more than one AI in the scene, the system does not know how to deal with being inside of the battle mode for both the guard engaged and the one watching. I feel like i am on the path to do a big refactor in the battle logic so it can support that scenario. Since I didn’t start this project with source control, I think i am just going to duplicate it and see if I can fix the problem.

I also adjusted the WFC texture from a series of small rooms to having a bigger rooms, so there are more roomy spaces which i might need to fill in with art or benches to there is a way to break up the spaces.

Tomorrow’s To-Do

  • maybe take off the shift to run ability and just use speed from the character movement (playtest feedback on walk being too use and practically useless)

  • Fix some geometry bug (see below as well as some of the texture inconsistency in tile 166 and 91

Cut Scene

I took a break yesterday to watch some ghibli movie, and today i’m pretty excited to get back into making progress. I had several ideas on things I wanna do. I actually started drafting the cut scene using after effects. I wasn’t sure if I should back the text into the video or dynamically generate them at run time.

I took me a little bit time to figure out the correct asset to hook up because when I ran into the problem of widget brush drop down couldn’t pull up the media texture at it’s shown in this tutorial. So instead i had to make a UI material using that texture and reference it in the UMG.

Then i had the problem of it not showing up in the UMG which meant i had to open the source of the pre-cached video so it will run at runtime. It’s interesting because i realise that it’s important to allocate when the source is open (since i set the media player to be on autoplay). Once i fix that it’s all good. I scaffolded the subtitle so when the player is going through different galleries the appropriate string will show up.

I am pretty happy how it turned out, I will need to figure out how to the play again and quit buttons though.

To do tomorrow:

  • wrap up this cut scene and do the same for the success state

  • ripple shader for the opening of the main menu

News Anchor design

I first hooked up another screenshot that needs to be taken when the player first steal the art, which meant I needed to set the render target to a separate texture so it can distinguish between which texture is which capture.

I then designed a new character as the news anchor. And Im trying to decide if I wanna do the news broadcasting as a 2d render target within the engine or just use a video file that plays back in the widget.

I’m going to render out a bunch of frames tonight and see how it looks as a video.

Tomorrow To Do:

  • add the script/subtitle to the narration of the failed state

  • prepare the video and embed it into the UMG (tutorial)

ScreenCapture and Record piano sounds

Started the work around the success and fail state. I wanted to do a japanese style new broadcast to show when the character success or failed to steal the art. I need to loop through a few images:

  1. when the player steals

  2. when the player enters into the pulling state (may not exist)

  3. Mugshot (fail) or warrant (success)

screenCapture_pulling.gif

I hooked up a screencapture 2D component to the BP_agatha actor and switched off capture on movement so I can manually call for a screen capture when the player starts to pull. I am probably going to model an anchor woman reporting the incident.

Also as an additional bonus. I got changing the texture in the umg working, now it will start showing the pulling screen shot then switch to the mugshot!

Next steps

  • capture screenshot when the character first steals the art

  • create a character to be the anchor woman

  • subtitle for her speaking

Refactor game states

I spent most of the day trying to debug some of the combat. I find that often times the second time when I get caught by the guard it feels very difficult. I wasn’t quite sure of some of the nuisance but I went in a refactored a bunch of my nodes, there are still moments where I expect to win but didn’t. not quite sure how to refine that part.

I learnt to use the watch variable debug tool in my blueprint to track how the variables are changing. It seems like the timers are running properly, but some how I feel like they are running faster the second round of tug at war.

I added the game states for the music and how they have 3 states: (1) normal browsing through gallery, (2) stolen art and (3) caught and tug at war.

To do for tomorrow:

  1. set up 2d screen capture to capture the frame when the player gets to the door (sucess) or fall to ground (fail)

    • similar to japanese news show the anchor person will hold a sheet of cardboard to show the capture or escape scene + mugshots or warrant

    • go through this tutorial to see how to hook up the camera render

  2. character in bed in the main menu

  3. capture the notes from good jazz songs to record

dynamic music

Yesterday got started on the dynamic music logic. I looked up a bunch of youtube tutorials on how to do adaptive or generative soundtrack. There seems to be some really useful channels like Valkyrie Sound in particular. Most of them are about layering music.

Since I don’t have too much experience in composing music and so making sure the layers sound musically robust would be challenging. So i went for a more simplistic approach that is to record the notes and play them in a sequential order (on a scale that is pleasant right now I am using the jazz lydian scale C) at a fixed tempo.

When the game changes that the loop that plays the sound will adjust so the timing between the notes will change (at a random range). One of the interesting things I noticed about myself when I was putting the blueprint together I am developing a slightly better intuition on what things need to happen first or how to fire and update certain variable better. For example I was trying to figure out how to update the timing variable based on game states when the execution comes from begin play. I figured out I need to call the function of the update in the loop and it should “work”.

I worked on some draft of a mug shot if the player fails. this is a render from blender but I am tempted to have it inside of UE4 and use scene render texture. Oh I also added input instruction in the main menu of press spacebar to pick up and battle as well as hold down shift to run.

To do tomorrow:

  • procedural music: hook up the game state to change the tempo and the volume

  • exit door for the main menu to quit the game

  • I’m thinking maybe either a stack of photo or a tv broadcast announcement. to indicate the state

Main Menu, Music and Playtest

Hooked up the main menu teleport system using the game instance blueprint. I need to decide if I want to do the same isometric square tile for the collected at main menu or a corridor menu layout

Storyline

I’m tossing up between two story lines right now. the initial one I had was that the main character is a human artist that is determined to reclaim the human art that was stolen by aliens so she is sneaking into all the alien art galleries to find the lost human art.

I had another idea recently which is that the artist is visiting these “dream” galleries to find the muse/inspiration. so there will be moments where things aren’t quite making sense.

Music

After being inspired by this website of jazz key, Marcos (who is going to help me a bit on the audio side) and I brainstormed a little bit about how to make more dynamic sound and music in the game. We decide that we would generate a set of notes based on the Jazz whole tone scale. He first tested out using the garage band piano but it ended up to be too clean and sterile. So I played some notes on the piano and recorded it. He was wondering how to play those notes effectively then realised we can use the samplr touchbar app!

First Kleenax playtest

Got some feedback from Marcos about his first play through:

  • the direction mapping of the controller is not what he expected, right now when he press up the character is walking north west instead of north. I understand that misalignment, but to navigate through the room it is hard to have to constantly be pressing down two arrow keys to get the correct forward vector. I did however made the adjustment with the direction input set from player controller to the camera (useful link)

  • the character feels like he is sliding around when he walks. which is probably due to the mismatch in timing and speed adjustments with the blendspace. I tried lowering the walk animation to a lower speed and see if there is an improvement

  • he also mentioned the rotation of the character feels too slow. So i adjusted the rotation rate in the character movement component inside the BP from Z=260 to Z=360

  • He prefer if the pick up of the object to be also of the spacebar key. which i agree but when I was first setting up the battle logic, i was a little bit anxious to combine that with the pick up logic, because overloading the input would make it harder to debug. Now that the state of the game is more stable, I decided to combine the two and just check if the player recently won, is in pulling or is close to the art piece to be stolen

  • He wished that the space is a little bit more spacious like a proper gallery rather than a lot of corridor space. Maybe I can adjust the initial seed image for the WFC to see how that adjust the procedural environment

some fun physics glitch for the art piece that is dropped after picked up

some fun physics glitch for the art piece that is dropped after picked up

To-do for Tomorrow

  • record some piano notes for the procedural music

  • distortion shader for the mesh in the main menu.

  • adjust the WFC texture to see if I can populate more open rooms