{"author_link":"\/users\/aditya-kumar","author_name":"Aditya Kumar","author_uid":"aditya-kumar","comments":[],"epoch":1587681215,"event":"LD46","format":"md","ldjam_node_id":207518,"likes":7,"metadata":{"p_key":"144610","p_author":"Aditya Kumar","p_authorkey":"1121412","p_urlkey":"361023","p_title":"The Dragon\u2019s Curse \u2013 LD46 Postmortem","p_cat":"LDJam ","p_event":"LD46","p_time":"1587681215","p_likes":"7","p_comments":"0","p_status":"WAYBACK","us_key":"1121412","us_name":"Aditya Kumar","us_username":"aditya-kumar","event_start":"1587081600","event_key":"77","event_name":"Ludum Dare 46"},"node":{"_collation":{"body_sanitizer":"TextUtils::SanitizeHTML via existing importer","event":"LD46","removed_author":false},"_superparent":176557,"_trust":3,"author":121412,"body":"Hi everyone!\n\nFirst of all, we want to thank you all the warm responses and great feedback we have received for our game. We can\u2019t help but smile reading each and every one of your comments and it really means the world to us. We have also had a blast playing all of your games as well, everyone has been so creative with this theme and it\u2019s awesome to see such a large and passionate community!\n\nJust in case any of you are curious, we wrote up a summary of our development process and some of the lessons we learned along the way. There were a lot, so this is going to be a pretty long post, feel free to skip to the sections you care about!\n\n\n**Before we dive in, if you haven\u2019t played The Dragon\u2019s Curse, you can check it out [here](https:\/\/ldjam.com\/events\/ludum-dare\/46\/the-dragons-curse)!**\n\n\n# Who we are:\nWe are a team of university students from the United States and Canada who like making and playing games! Our team is composed of:\n\nAditya: Programmer\n\nPatrick (Abyss): Programmer, Copyeditor\n\nJames: Artist\n\nSchuyler (Horus): Writer\n\nSome of our inspirations for The Dragon\u2019s Curse came from FTL and Renowned Explorers.\n\n# Looking back\n\n## Code:\nOn the code side, we decided to try the Heaps engine out this time around. We already had decent Haxe experience and Heaps seemed to be a Haxe engine that was widely used in industry. The engine was quite minimal (especially compared to Haxeflixel, which we\u2019ve used in the past). I hear the 3d side is more extensive, but the 2d side pretty much just had functionality for drawing, playing audio, collisions, and resource management. In the case of our simple game, though, this was more than enough and we had a fun time setting up the skeleton of the game. We were even able to set up the level transition logic to persist data in precisely the way we wanted to (not that this would have been particularly difficult in any other engine). One thing we never got around to was setting up proper asset loading, so the game lags and presents a couple unpleasant purple screens at the start. We love trying out new engines so we\u2019ll continue exploring, but our experience with Heaps was pretty positive.\n\n**Lesson Learned: \u201cSome assembly required\u201d is not always a bad thing - but be sure to finish assembling your tools before using them**\n\nTo spare too many of the gory technical details, the game had two main components. A randomly generated map, and dialogue.\n\nThe randomly generated map was created by placing points using Poisson disk sampling and drawing roads along the Delaunay triangulation of the resulting point cloud. While this  naive method of \u201cplace points uniformly and connect all neighboring points\u201d  did generate random planar graphs, they were neither interesting, nor was the method reliable. The graphs often looked similar, and the generation was sensitive to changes in parameters\n\n**Lesson learned: When random sampling, first constrain your sample space, then come up with a sampling algorithm. Doing it the other way around leads to mediocre results**\n\nFor the dialogue, we wanted to maintain a separation between content and code. This was  both for our own sanity and so Schuyler could write stories without having to dig into the codebase. We decided to consume stories written in a JSON format. We also encoded the consequences of each event in the same document. This allowed us to rapidly iterate on the story in parallel with development. On the flip side, a lot of coding effort was invested in making this system generic enough to allow schuyler to write compelling stories whereas a lot of it could have been inlined if the content was hard coded in. As features got added, we realized we had basically embedded a small DSL in JSON, and that perhaps our time would have been better served bringing in a scripting language like [hscript](https:\/\/github.com\/HaxeFoundation\/hscript).\n\n**Lesson Learned (but we all kinda already knew this): Flexibility and ease of use comes at the cost of up front NRE (non-recurring engineering) expense. Balance them carefully**\n\nUI was also a challenge because the map generation parameters were tuned to fill the entire screen. Attempts to scale the map down lead to unpredictable behavior, sometimes the map would only span half of the screen. Eventually though after some fine tuning, we were able to shift the map enough to make space for a UI displaying the player\u2019s resources, relics, and curse progression in a comfortable manner.\n\n**Lesson Learned: When building modules from the bottom up, carefully analyze dependencies beforehand to make sure you don\u2019t create conflicts for yourself down the road**\n\n\n## Art:\nWorking on the art was a challenge, as I\u2019m not particularly well-versed in drawing\/rendering backgrounds - however, people seemed to enjoy them! I\u2019m glad I managed to keep the style somewhat consistent, as that can be difficult for hand-drawn resources. I still wish I found a way to streamline drawing BGs more - that time could\u2019ve gone to more BGs, character arts, or improving the map - but I guess that will come with practice.\n\n**Lesson Learned: Practice drawing BGs**\n\n## Writing:\nCreative process\nWorking with JSON format\nWriting the scenarios for the story was really fun! I\u2019m not a writer by nature, which didn\u2019t make it that hard to switch to the JSON format my team set up for me. It was really interesting to work inside of the JSON, it felt like designing a choose your own adventure novel on the computer, but wiring up all the dialogue and dialogue options to go to the right spot on very little sleep didn\u2019t go terribly well. Since I\u2019m not really a writer, I spent almost a day reading scenarios from  FTL, and RE:IS to figure out how to start writing my own. It ended up being really fun so the biggest thing I want to want to keep doing is writing scenarios for the game. It\u2019s hard not to create the backstories for the companions and I really hope I get to expand upon them concretely. I think in the future the thing I need to work on the most is to keep myself consistent from beginning to end, or have enough time to be able to edit myself, so I don\u2019t have to pull one of the programmers away from programming while I pass out and run out of time.\n\n**Lesson Learned: Sleep well and try to keep consistencies. Also writing is kinda fun.**\n\n\nWe also put a lot of thought into editing the writing, beyond simply correcting for spelling. This project made me realize how much consistent language matters, as players can get confused who is talking or whether something is spoken or internal. To make these differences clear, I made sure spoken dialogue is in quotes with the speaker made apparent, internalized thoughts in parenthesis, and any game related resource changes in brackets. Some other changes include splitting up longer passages into separate boxes to keep the player engaged as well as making adjustments to character-specific language, such as Geiger\u2019s mannerisms. Time ran a bit short though, and I was only able to edit about half of the scenarios, so you may notice some inconsistencies in the game. We will work on proofing the rest of the scenarios as we continue polishing the game!\n\n**Lesson Learned: Make thoughts, dialogue, and action easily distinguishable for text-based games**\n\n\n\nThank you again for all your support, and we hope you gained something from reading our postmortem! If you have any questions, don\u2019t be a stranger! Feel free to reach out to us here or in the comment section of our game!\n\n\n","comments":3,"comments-timestamp":"2020-04-24T03:25:19Z","created":"2020-04-23T22:26:38Z","files":[],"files-timestamp":0,"id":207518,"love":7,"love-timestamp":"2020-04-25T03:03:54Z","meta":[],"modified":"2020-04-25T03:03:54Z","name":"The Dragon\u2019s Curse \u2013 LD46 Postmortem","node-timestamp":"2020-04-23T22:39:54Z","parent":202160,"parents":[1,5,9,176557,202160],"path":"\/events\/ludum-dare\/46\/the-dragons-curse\/the-dragons-curse-ld46-postmortem","published":"2020-04-23T22:33:35Z","scope":"public","slug":"the-dragons-curse-ld46-postmortem","subsubtype":"","subtype":"","type":"post","version":628401},"node_metadata":{"n_key":"207518","n_urlkey":"361023","n_parent":"202160","n_path":"\/events\/ludum-dare\/46\/the-dragons-curse\/the-dragons-curse-ld46-postmortem","n_slug":"the-dragons-curse-ld46-postmorte","n_type":"post","n_subtype":"","n_subsubtype":"","n_author":"121412","n_created":"1587680798","n_modified":"1587783834","n_version":"628401","n_status":"WAYBACK"},"source_url":"https:\/\/ldjam.com\/events\/ludum-dare\/46\/the-dragons-curse\/the-dragons-curse-ld46-postmortem","text":"Hi everyone!\n\nFirst of all, we want to thank you all the warm responses and great feedback we have received for our game. We can\u2019t help but smile reading each and every one of your comments and it really means the world to us. We have also had a blast playing all of your games as well, everyone has been so creative with this theme and it\u2019s awesome to see such a large and passionate community!\n\nJust in case any of you are curious, we wrote up a summary of our development process and some of the lessons we learned along the way. There were a lot, so this is going to be a pretty long post, feel free to skip to the sections you care about!\n\n\n**Before we dive in, if you haven\u2019t played The Dragon\u2019s Curse, you can check it out [here](https:\/\/ldjam.com\/events\/ludum-dare\/46\/the-dragons-curse)!**\n\n\n# Who we are:\nWe are a team of university students from the United States and Canada who like making and playing games! Our team is composed of:\n\nAditya: Programmer\n\nPatrick (Abyss): Programmer, Copyeditor\n\nJames: Artist\n\nSchuyler (Horus): Writer\n\nSome of our inspirations for The Dragon\u2019s Curse came from FTL and Renowned Explorers.\n\n# Looking back\n\n## Code:\nOn the code side, we decided to try the Heaps engine out this time around. We already had decent Haxe experience and Heaps seemed to be a Haxe engine that was widely used in industry. The engine was quite minimal (especially compared to Haxeflixel, which we\u2019ve used in the past). I hear the 3d side is more extensive, but the 2d side pretty much just had functionality for drawing, playing audio, collisions, and resource management. In the case of our simple game, though, this was more than enough and we had a fun time setting up the skeleton of the game. We were even able to set up the level transition logic to persist data in precisely the way we wanted to (not that this would have been particularly difficult in any other engine). One thing we never got around to was setting up proper asset loading, so the game lags and presents a couple unpleasant purple screens at the start. We love trying out new engines so we\u2019ll continue exploring, but our experience with Heaps was pretty positive.\n\n**Lesson Learned: \u201cSome assembly required\u201d is not always a bad thing - but be sure to finish assembling your tools before using them**\n\nTo spare too many of the gory technical details, the game had two main components. A randomly generated map, and dialogue.\n\nThe randomly generated map was created by placing points using Poisson disk sampling and drawing roads along the Delaunay triangulation of the resulting point cloud. While this  naive method of \u201cplace points uniformly and connect all neighboring points\u201d  did generate random planar graphs, they were neither interesting, nor was the method reliable. The graphs often looked similar, and the generation was sensitive to changes in parameters\n\n**Lesson learned: When random sampling, first constrain your sample space, then come up with a sampling algorithm. Doing it the other way around leads to mediocre results**\n\nFor the dialogue, we wanted to maintain a separation between content and code. This was  both for our own sanity and so Schuyler could write stories without having to dig into the codebase. We decided to consume stories written in a JSON format. We also encoded the consequences of each event in the same document. This allowed us to rapidly iterate on the story in parallel with development. On the flip side, a lot of coding effort was invested in making this system generic enough to allow schuyler to write compelling stories whereas a lot of it could have been inlined if the content was hard coded in. As features got added, we realized we had basically embedded a small DSL in JSON, and that perhaps our time would have been better served bringing in a scripting language like [hscript](https:\/\/github.com\/HaxeFoundation\/hscript).\n\n**Lesson Learned (but we all kinda already knew this): Flexibility and ease of use comes at the cost of up front NRE (non-recurring engineering) expense. Balance them carefully**\n\nUI was also a challenge because the map generation parameters were tuned to fill the entire screen. Attempts to scale the map down lead to unpredictable behavior, sometimes the map would only span half of the screen. Eventually though after some fine tuning, we were able to shift the map enough to make space for a UI displaying the player\u2019s resources, relics, and curse progression in a comfortable manner.\n\n**Lesson Learned: When building modules from the bottom up, carefully analyze dependencies beforehand to make sure you don\u2019t create conflicts for yourself down the road**\n\n\n## Art:\nWorking on the art was a challenge, as I\u2019m not particularly well-versed in drawing\/rendering backgrounds - however, people seemed to enjoy them! I\u2019m glad I managed to keep the style somewhat consistent, as that can be difficult for hand-drawn resources. I still wish I found a way to streamline drawing BGs more - that time could\u2019ve gone to more BGs, character arts, or improving the map - but I guess that will come with practice.\n\n**Lesson Learned: Practice drawing BGs**\n\n## Writing:\nCreative process\nWorking with JSON format\nWriting the scenarios for the story was really fun! I\u2019m not a writer by nature, which didn\u2019t make it that hard to switch to the JSON format my team set up for me. It was really interesting to work inside of the JSON, it felt like designing a choose your own adventure novel on the computer, but wiring up all the dialogue and dialogue options to go to the right spot on very little sleep didn\u2019t go terribly well. Since I\u2019m not really a writer, I spent almost a day reading scenarios from  FTL, and RE:IS to figure out how to start writing my own. It ended up being really fun so the biggest thing I want to want to keep doing is writing scenarios for the game. It\u2019s hard not to create the backstories for the companions and I really hope I get to expand upon them concretely. I think in the future the thing I need to work on the most is to keep myself consistent from beginning to end, or have enough time to be able to edit myself, so I don\u2019t have to pull one of the programmers away from programming while I pass out and run out of time.\n\n**Lesson Learned: Sleep well and try to keep consistencies. Also writing is kinda fun.**\n\n\nWe also put a lot of thought into editing the writing, beyond simply correcting for spelling. This project made me realize how much consistent language matters, as players can get confused who is talking or whether something is spoken or internal. To make these differences clear, I made sure spoken dialogue is in quotes with the speaker made apparent, internalized thoughts in parenthesis, and any game related resource changes in brackets. Some other changes include splitting up longer passages into separate boxes to keep the player engaged as well as making adjustments to character-specific language, such as Geiger\u2019s mannerisms. Time ran a bit short though, and I was only able to edit about half of the scenarios, so you may notice some inconsistencies in the game. We will work on proofing the rest of the scenarios as we continue polishing the game!\n\n**Lesson Learned: Make thoughts, dialogue, and action easily distinguishable for text-based games**\n\n\n\nThank you again for all your support, and we hope you gained something from reading our postmortem! If you have any questions, don\u2019t be a stranger! Feel free to reach out to us here or in the comment section of our game!\n\n\n","title":"The Dragon\u2019s Curse \u2013 LD46 Postmortem","wayback_source":[]}