{"author_link":"\/users\/peeweek","author_name":"peeweek","author_uid":"peeweek","comments":[],"epoch":1601934916,"event":"LD47","format":"md","ldjam_node_id":227233,"likes":1,"metadata":{"p_key":"149506","p_author":"peeweek","p_authorkey":"1003560","p_urlkey":"365987","p_title":"Devlog : Postmortem of my LD47 compo","p_cat":"LDJam ","p_event":"LD47","p_time":"1601934916","p_likes":"1","p_comments":"0","p_status":"WAYBACK","us_key":"1003560","us_name":"peeweek","us_username":"peeweek","event_start":"1601596800","event_key":"76","event_name":"Ludum Dare 47"},"node":{"_collation":{"body_sanitizer":"TextUtils::SanitizeHTML via existing importer","event":"LD47","removed_author":false},"_superparent":212256,"_trust":1,"author":3560,"body":"Hello Folks,\n\nI wanted to debrief a little about [my entry of the compo](https:\/\/ldjam.com\/events\/ludum-dare\/47\/looping-stuck) as I did not participate since LD31. Things have changed a lot in my life since then and also the way I approach my time management (life, kids, heh... week-end duties)\n\nI will try not to spoil too much of the story, but I invite you to give it 5 minutes if you want to read further of this postmortem... or at least take a look at the gameplay recording below:\n\nhttps:\/\/youtu.be\/gYH9g_MqS8w\n\nThis being said, I had mostly my weekend free so I ended up with a clear sky to develop and think things out... last time, I had fewer experience in game engines and what it takes to make game when 1) you are not a full stack programmer and 2) your expectations have shifted.\n\n** My LD31 Previous Entry **\n\nMy entry for LD31 was a procedural death labyrinth with many caveats, among the worst was its ridiculous collision management due to my choice of vanilla XNA (without proper collision system). This time I chose a more comfy game engine solution, which was Unity (made by the company I work for), with the help of [Gameplay Ingredients](https:\/\/github.com\/peeweek\/net.peeweek.gameplay-ingredients), an open-source C# set of tools that I am maintaining and that focus on sparing coding time for most common tasks. The goal was to prevent the shipwreck of my previous attempt to happen... and focus on what matters to me : the actual game experience. So, no matter what, I'd use these tools as a basis to focus on gameplay.\n\n** The initial Idea **\n\nThe theme came for me quite obviously: \"A Short Psychological Horror loop where one has is balanced in a toxic affective dependency relationship\", because I read a lot about that matters and the way that toxic relationships ruin people's lives and create clunky kids that grow up hurt. By exaggerating such behaviors in a toxic loop of relationships between two people, and using the daily life at home as a battleground, I wanted to emphasize on the distance between people, and the power of words.\n\nThe game was seen as a point and click game where you move your player in a top-down, isometric view and interact with objects of daily life to give meaning and make the story progress.\n\nFor the Story, I first envisioned to perform a loop of actions in a house where the player would be dragged into guilt of being overwhelmed by chores, things to fix, and try to figure out various ways out. By building a strategy in order to fight the toxicity and finally exit the loop.\n\nOf course it was probably too much for a week-end....\n\n** Being Pragmatic and Know your pace **\n\nThe main issue with my work at game jams is mostly optimism: I often find a good idea and try to build on it, to the point it requires to lose a bit of fat. Then comes the \"I can do that in time\" phase. I think that pragmatically speaking I could be doing most of what I plan if I did not spend time to play and replay over and over until I am *absolutely satisfied* on how the game feels and what I just implemented is OK to be left as is without retake for the submission.\n\nBasically this, ... eats up almost 30% of my time... where I do not do anything else than playing over and over, fixing small stuff, then testing again... until I figure out I am nitpicking.\n\nThis is my worst problem when it comes to evaluate pace and time left. So I tried to keep it in mind and reduce this polishing time when I was going into circles... At least It helped me re-scope the project on Sunday Morning, so I could ship a minimal viable project that conveys the general idea.\n\n** Programming the base Gameplay **\n\nWhat's cool with Unity is you have a lot of engine features that work out-of-the-box pretty well (if you don't twist them too much), and even if there's no blueprint, C# is somehow a pretty accessible language, especially for the UnityEngine API. However, there are many things that lack and that I was redoing for all my unity projects in the past.. for instance loading scenes, using triggers, performing delays, etc. So after all this time, the Gameplay Ingredients package has become my swiss army knife as it's reliable in order to structure a game, and I can improve on it pretty easily.\n\nThere's a singleton API, all the cameras, game saves, globals, scene management, input, etc. are already handled in a reliable manner. There is also a Event > Logic > Action system that's not node-based but that does the job. \n\nAnd of course every of these scripts is working in an open way so it's easy to make your game-specific ones. The actual gameplay code for my entry was around 12 C# classes, half of them were patching generic missing features of Gameplay Ingredients, I had One Player Controller, A Dialogue System made of a singleton and actions in order to sequence text, and an interaction system for objects.\n\nIt was mostly the only code I had to write, so I could focus on nitpicking game feel like making progressive text appear, animate bubbles, have better cursor. Manage text skipping, etc. As the game would rely mostly on text, It felt important that the experience was clean in order to keep the player engaged in the reading of this text.\n\nI also added a \"TapTapTapTap\" sound loop that I was inspired from Final Fantasy Tactics, which I remind as a really good text-reading experience.\n\n** Player and Interactions **\n\nRegarding the player controller, I was pretty frustrated as I am not really able to do proper modelling. As a solution I thought about figurative abstraction and oversimplification : from [Ken Perlin's experiment Polly](https:\/\/mrl.nyu.edu\/~perlin\/experiments\/polly\/). Simplification of a character is not a bad thing and It actually saved me as I chose to animate a Sphere... and a Capsule. 2 Animations (Idle & Walk) in a character animator did the trick.\n\nRegarding the Bright White Head, I came with this idea after putting a point light over the head of the character to add a fill light around the character, so It could navigate in dark areas. The light was not bright at first but it was so close to the sphere that it was rendering a really bright specular dot. I found it interesting and I put the whole head as emmissive white so it embraces this fake light as credible.\n\nI also added a recorded Tap Tap Tap loop made using a pen on my mouse pad to simulate the steps SFX.\n\n\n** Choice of art style and Tools **\n\nI work as a VFX Artist so I am not too much into modelling, 3d DCCs and texturing, nor animation. Regarding Art, My first idea was to make a Black & White game, as in photography, it is easier to compose good images when the color is out of the equation... It could also give a good emphasis on the depressing\/oppressive mood while working in a Black Key ambience, mostly in shadows, with really bright blinding shades of white that are not soothing but more aggressive.\n\nThe first Idea was to use flat shading, model shapes with Probuilder and [use a low-rez CRT postprocess](https:\/\/github.com\/peeweek\/net.peeweek.retroizer) to reduce the emptiness of the flat surfaces... After a first prototype I was pretty satisfied, until I implemented Gameplay. Short Story : the way the CRT was implemented prevented me to use raycasts and click objects in the scene... pretty rough for a narrative point & click game.\n\nSo I ended up giving up on that solution and thought about using voxel art instead. I had played around the week before with [MagicaVoxel](https:\/\/ephtracy.github.io\/) with its last release and I found it really enjoyable. Basically satisfying because you are not supposed to spend a lot of time to achieve something good.\n\nMost of the models took me at least 1 minute to achieve in magica voxel, there are around 20~30 of them that are being reused through the level. Other primitives such as boxes were used for other purposes. Also, I wasted too much time trying to make a proper car. So I ended up making one in [AssetForge](https:\/\/assetforge.io\/), took me 1 minute.\n\n** Filling the world with interactive stuff **\n\nThe most interesting thing was to fill the world with interactive stuff, and use level scripting to make it interactive, and trigger dialogs. I made many prefabs from the static environment and scripted the interactions so they could be done only once per loop.\n\nA LOOP_ID was also created in order to make variations in some of the dialogues, and was incremented every loop to be tested by the level script. But was not exploited to the maximum, I think all the loops could have been slightly different, but slightly enough to give this cringe impression of deja-vu.\n\nI also used some tricks with Global Variable facts in order to let some interactions stay after first use but end up with the character being regretful.\n\nThe wrap up of a game play loop came up very late (Sunday Afternoon), and after evaluating the game play I thought It would not require much more in its state to be consistent. So I swallowed my frustration of not putting everything in it and got over it.\n\n** Words on Audio **\n\nI am not a musician and making music is a bit daunting, so I instead relied on sound design with basically no editing, most of the sounds were recorded from my house, using a good digital sound recorder (TASCAM DR40X), It was pretty fun doing the recording and integrating it in the game.\n\n** Final Wrap-Up **\n\n- Pretty satisfied of the project, My software choices enabled me focusing on what was important\n- Stuck a little into technical issues (Retroizer Shader), but was able to let it go.\n- Had a good \"less is more\" character idea.\n- Could focus more on story and making the world interactive, but was good enough (I think) for the compo.\n- Loved doing Sound Design by Recording things around my house\n- Would probably enjoy spending more time into making a Post-LD game\n","comments":0,"created":"2020-10-05T20:42:30Z","files":[],"files-timestamp":0,"id":227233,"love":1,"love-timestamp":"2020-10-05T21:56:53Z","meta":[],"modified":"2020-10-05T21:56:53Z","name":"Devlog : Postmortem of my LD47 compo","node-timestamp":"2020-10-05T21:55:16Z","parent":223101,"parents":[1,5,9,212256,223101],"path":"\/events\/ludum-dare\/47\/looping-stuck\/devlog-postmortem-of-my-ld47-compo","published":"2020-10-05T21:55:16Z","scope":"public","slug":"devlog-postmortem-of-my-ld47-compo","subsubtype":"","subtype":"","type":"post","version":684535},"node_metadata":{"n_key":"227233","n_urlkey":"365987","n_parent":"223101","n_path":"\/events\/ludum-dare\/47\/looping-stuck\/devlog-postmortem-of-my-ld47-compo","n_slug":"devlog-postmortem-of-my-ld47-com","n_type":"post","n_subtype":"","n_subsubtype":"","n_author":"3560","n_created":"1601930550","n_modified":"1601935013","n_version":"684535","n_status":"WAYBACK"},"source_url":"https:\/\/ldjam.com\/events\/ludum-dare\/47\/looping-stuck\/devlog-postmortem-of-my-ld47-compo","text":"Hello Folks,\n\nI wanted to debrief a little about [my entry of the compo](https:\/\/ldjam.com\/events\/ludum-dare\/47\/looping-stuck) as I did not participate since LD31. Things have changed a lot in my life since then and also the way I approach my time management (life, kids, heh... week-end duties)\n\nI will try not to spoil too much of the story, but I invite you to give it 5 minutes if you want to read further of this postmortem... or at least take a look at the gameplay recording below:\n\nhttps:\/\/youtu.be\/gYH9g_MqS8w\n\nThis being said, I had mostly my weekend free so I ended up with a clear sky to develop and think things out... last time, I had fewer experience in game engines and what it takes to make game when 1) you are not a full stack programmer and 2) your expectations have shifted.\n\n** My LD31 Previous Entry **\n\nMy entry for LD31 was a procedural death labyrinth with many caveats, among the worst was its ridiculous collision management due to my choice of vanilla XNA (without proper collision system). This time I chose a more comfy game engine solution, which was Unity (made by the company I work for), with the help of [Gameplay Ingredients](https:\/\/github.com\/peeweek\/net.peeweek.gameplay-ingredients), an open-source C# set of tools that I am maintaining and that focus on sparing coding time for most common tasks. The goal was to prevent the shipwreck of my previous attempt to happen... and focus on what matters to me : the actual game experience. So, no matter what, I'd use these tools as a basis to focus on gameplay.\n\n** The initial Idea **\n\nThe theme came for me quite obviously: \"A Short Psychological Horror loop where one has is balanced in a toxic affective dependency relationship\", because I read a lot about that matters and the way that toxic relationships ruin people's lives and create clunky kids that grow up hurt. By exaggerating such behaviors in a toxic loop of relationships between two people, and using the daily life at home as a battleground, I wanted to emphasize on the distance between people, and the power of words.\n\nThe game was seen as a point and click game where you move your player in a top-down, isometric view and interact with objects of daily life to give meaning and make the story progress.\n\nFor the Story, I first envisioned to perform a loop of actions in a house where the player would be dragged into guilt of being overwhelmed by chores, things to fix, and try to figure out various ways out. By building a strategy in order to fight the toxicity and finally exit the loop.\n\nOf course it was probably too much for a week-end....\n\n** Being Pragmatic and Know your pace **\n\nThe main issue with my work at game jams is mostly optimism: I often find a good idea and try to build on it, to the point it requires to lose a bit of fat. Then comes the \"I can do that in time\" phase. I think that pragmatically speaking I could be doing most of what I plan if I did not spend time to play and replay over and over until I am *absolutely satisfied* on how the game feels and what I just implemented is OK to be left as is without retake for the submission.\n\nBasically this, ... eats up almost 30% of my time... where I do not do anything else than playing over and over, fixing small stuff, then testing again... until I figure out I am nitpicking.\n\nThis is my worst problem when it comes to evaluate pace and time left. So I tried to keep it in mind and reduce this polishing time when I was going into circles... At least It helped me re-scope the project on Sunday Morning, so I could ship a minimal viable project that conveys the general idea.\n\n** Programming the base Gameplay **\n\nWhat's cool with Unity is you have a lot of engine features that work out-of-the-box pretty well (if you don't twist them too much), and even if there's no blueprint, C# is somehow a pretty accessible language, especially for the UnityEngine API. However, there are many things that lack and that I was redoing for all my unity projects in the past.. for instance loading scenes, using triggers, performing delays, etc. So after all this time, the Gameplay Ingredients package has become my swiss army knife as it's reliable in order to structure a game, and I can improve on it pretty easily.\n\nThere's a singleton API, all the cameras, game saves, globals, scene management, input, etc. are already handled in a reliable manner. There is also a Event > Logic > Action system that's not node-based but that does the job. \n\nAnd of course every of these scripts is working in an open way so it's easy to make your game-specific ones. The actual gameplay code for my entry was around 12 C# classes, half of them were patching generic missing features of Gameplay Ingredients, I had One Player Controller, A Dialogue System made of a singleton and actions in order to sequence text, and an interaction system for objects.\n\nIt was mostly the only code I had to write, so I could focus on nitpicking game feel like making progressive text appear, animate bubbles, have better cursor. Manage text skipping, etc. As the game would rely mostly on text, It felt important that the experience was clean in order to keep the player engaged in the reading of this text.\n\nI also added a \"TapTapTapTap\" sound loop that I was inspired from Final Fantasy Tactics, which I remind as a really good text-reading experience.\n\n** Player and Interactions **\n\nRegarding the player controller, I was pretty frustrated as I am not really able to do proper modelling. As a solution I thought about figurative abstraction and oversimplification : from [Ken Perlin's experiment Polly](https:\/\/mrl.nyu.edu\/~perlin\/experiments\/polly\/). Simplification of a character is not a bad thing and It actually saved me as I chose to animate a Sphere... and a Capsule. 2 Animations (Idle & Walk) in a character animator did the trick.\n\nRegarding the Bright White Head, I came with this idea after putting a point light over the head of the character to add a fill light around the character, so It could navigate in dark areas. The light was not bright at first but it was so close to the sphere that it was rendering a really bright specular dot. I found it interesting and I put the whole head as emmissive white so it embraces this fake light as credible.\n\nI also added a recorded Tap Tap Tap loop made using a pen on my mouse pad to simulate the steps SFX.\n\n\n** Choice of art style and Tools **\n\nI work as a VFX Artist so I am not too much into modelling, 3d DCCs and texturing, nor animation. Regarding Art, My first idea was to make a Black & White game, as in photography, it is easier to compose good images when the color is out of the equation... It could also give a good emphasis on the depressing\/oppressive mood while working in a Black Key ambience, mostly in shadows, with really bright blinding shades of white that are not soothing but more aggressive.\n\nThe first Idea was to use flat shading, model shapes with Probuilder and [use a low-rez CRT postprocess](https:\/\/github.com\/peeweek\/net.peeweek.retroizer) to reduce the emptiness of the flat surfaces... After a first prototype I was pretty satisfied, until I implemented Gameplay. Short Story : the way the CRT was implemented prevented me to use raycasts and click objects in the scene... pretty rough for a narrative point & click game.\n\nSo I ended up giving up on that solution and thought about using voxel art instead. I had played around the week before with [MagicaVoxel](https:\/\/ephtracy.github.io\/) with its last release and I found it really enjoyable. Basically satisfying because you are not supposed to spend a lot of time to achieve something good.\n\nMost of the models took me at least 1 minute to achieve in magica voxel, there are around 20~30 of them that are being reused through the level. Other primitives such as boxes were used for other purposes. Also, I wasted too much time trying to make a proper car. So I ended up making one in [AssetForge](https:\/\/assetforge.io\/), took me 1 minute.\n\n** Filling the world with interactive stuff **\n\nThe most interesting thing was to fill the world with interactive stuff, and use level scripting to make it interactive, and trigger dialogs. I made many prefabs from the static environment and scripted the interactions so they could be done only once per loop.\n\nA LOOP_ID was also created in order to make variations in some of the dialogues, and was incremented every loop to be tested by the level script. But was not exploited to the maximum, I think all the loops could have been slightly different, but slightly enough to give this cringe impression of deja-vu.\n\nI also used some tricks with Global Variable facts in order to let some interactions stay after first use but end up with the character being regretful.\n\nThe wrap up of a game play loop came up very late (Sunday Afternoon), and after evaluating the game play I thought It would not require much more in its state to be consistent. So I swallowed my frustration of not putting everything in it and got over it.\n\n** Words on Audio **\n\nI am not a musician and making music is a bit daunting, so I instead relied on sound design with basically no editing, most of the sounds were recorded from my house, using a good digital sound recorder (TASCAM DR40X), It was pretty fun doing the recording and integrating it in the game.\n\n** Final Wrap-Up **\n\n- Pretty satisfied of the project, My software choices enabled me focusing on what was important\n- Stuck a little into technical issues (Retroizer Shader), but was able to let it go.\n- Had a good \"less is more\" character idea.\n- Could focus more on story and making the world interactive, but was good enough (I think) for the compo.\n- Loved doing Sound Design by Recording things around my house\n- Would probably enjoy spending more time into making a Post-LD game\n","title":"Devlog : Postmortem of my LD47 compo","wayback_source":[]}