Daily Log Of 2020 7DRL Progress
The Intended Scope
The plan was to do a clever 2D roguelike spiritual clone of classic 1980s arcade game Xybots. Since I generally know the structure of that game, it would stop me from stretching my goals out too far. I would use the Oryx Labs' Tiny Galaxy tileset which supports facing. Do the thing where WAXD moves and QE rotates perspective. To further limit the scope, just a single finite roguelike map per level. A streamlined interface would just use the number keys to select attacks: tap once to show what they'll do, tap again to execute. Every time you defeat the enemies, instead of having the player path to an exit, just move on to the next level. In Xybots tradition, the level transition will feature a purchase screen where the players can cash in their credits for more attacks (many of which will be consumable) then give the player another map.
Planned Time Frame
I started off on a fairly poor foot: I had asked work for the weekend off, but because I misunderstood the countdown timer on the 2020 7DRL page, I had thought that it would be best to take the weekend of February 28th-March 1st off. Had I known then what I know now, I would have asked for March 1st, 6th, and 7th off, which would have given me 7 days well within the intended deadline.
On top of that, I had company coming over February 27th and 28th, and that was going to really discharge my introvert batteries at a bad time. Knowing this, the plan was to take my 7DRL period as going from from February 26th through March 4th under the rationale that I was going to lose a day of progress to the disruption. It seemed like a fair compromise at the time but, since I had misunderstood the 7DRL time frame, it turned out to be completely unnecessary.
Wednesday, February 26th
As it happens, this day was not much of a cheat. I spent the entire day just decoupling my code from my existing project to import into the new one. This mostly manifest in a complete revamp of my existing roguelike turn based loop, which was a bit wonky and needed further revision. 12 solid pomodoros of effort but, since I had not even started a new project yet, I would say that this day was not even part of the 7DRL project. It'll be a straight up 7-day project after all... but I was looking forward to a major disruption.
Thursday, February 27th
Decoupling my code from my existing project was done enough that I started a brand new Unity project. I opted to go ahead and start up a new Github repository at 11am, and the next few hours were spent just situating my code and seeing up some basic scenes in Unity. By about 3:45pm, I had an initial test map up, and was able to see some spoils of my importing preexisting code.
Soon afterward, I opted to create a four scene structure of the overall game: Setup -> Map Generation -> Roguelike -> Level Transition Store. By 7:18pm, I had pruned some of my earlier code from before that decision, and had a complete scene transition mechanic coded and working. Another solid 12 pomodoros behind me, but feeling too tired to concentrate well on further additions, I called it a night.
Friday, February 28th
Though anticipating the disruption to arrive that evening, I managed to get to work fairly quickly. I tidied my design notes (moving them to SimpleNote) and revised my long-term outlook of how the game should appear. At the start of the day, I decided that the four scenes would look something like this:
- Scene 1: The player starts the game and is greeted by an attractive Setup screen which tells them basic instructions and lets them choose a character.
- Scene 2: They are then taken to the initial map generation screen, complete with non-interactive narrative and loading bar, before being asked to push a button to be dropped into the action.
- Scene 3: Feeling that just dropping the player on the map to start killing things lacked elegance I decided that, every time the player character enters a new room, they have something to say about it that sets the mood. This prompted me to realize that the rooms would need to convey themes, and I decided to go for a Grid-Based-Approach to the map generation.
- Scene 4: I had a vague idea that purchasing would occur here, looking somewhat like the Xybots level transition, but ultimately decided it was premature to worry about.
Most of the day was spent just getting basic movement in. The Xybots-like twisting mechanic required a bit of work because I wanted to have different movement costs in depending on how the actor was walking. It was not enough to simply move an actor to an unoccupied tile, I needed to take into consideration their facing relative to that tile and multiply their movement speed accordingly. This ended up taking fully four dedicated hours to get the necessary actions coded, but it seemed to be working! The player could now direct their actor around the map.
However, the basic initialized map had so little detail that I could not tell the actor had even moved without looking at the actor’s coordinates! So it was clear that the map generation scene was where I would need to focus on development next. I opted for a simple grid-based room generation method and had it about halfway up by the end of the day.
A new air purifier arrived in the mail. I was tired of re-catching this cold, and hoped that would help.
Saturday, February 29th
Company's here, and my introvert batteries were discharging accordingly, but I still managed to put in a fair amount of effort. I thought coming up with a grid-based map generation scheme would be so simple that I could do it right off the cuff, but it turned out to be anything but!
I had coded too many support functions without adequate testing and I was not able to find the data I needed in the debugging and log functions to figure out what was happening. I spent a solid 7 pomodoros working on it, everything was going wrong! Between that and the socializing, I went to bed that night feeling thoroughly defeated and demoralized.
Sunday, March 1st
I didn't sleep well, and so my linger cold symptoms had resurged, and I was feeling generally cruddy. I had anticipated that I would take one day off because of the disruption this weekend. Company had left, the social disruption turned out to be nowhere near as bad as I feared it would be, but I had plenty of anxiety-inflicted disruption to make up for it.
I decided my nerves could use a rest after my map generation code basically blew up in my face the previous day, so I decided to take the rest of Sunday off for that purpose. I mostly played modded Skyrim VR. Not exactly in the spirit of a 7DRL? Perhaps. But I had rationalized that maybe a day off would be the best possible thing I could do to keep this project going.
Monday, March 2nd
I slept better, but it seems stopping development completely on Sunday was a bad idea, as I had lost all my inertia. Yesterday's funk lasted throughout most of this day as well. Towards the end, I finally managed to start working on my project again. It was little more than 25 minutes before bedtime, but it helped get the ball rolling.
Work called and asked if I was willing to come in and sub that day, but I had to turn them down because I wasn't feeling well and I had this 7DRL vacation planned besides. Still rather beat up from those cold symptoms' resurgence, I turned in at 6:30pm.
Tuesday, March 3rd
Things were finally looking up again. It took me another 8-12 pomodoros worth of effort, but I managed to finally get that room-by-room map generator working as I planned to. Better yet, I had decoupled in such a way that I can import it into my own roguelike libraries when I'm done. I only have one day left to work on this project, and that persistent cold bug discouraged me from pulling any all-nighters. Still, I thought I might just be able to pull it off because I primarily just had map content, enemies, enemy AI, and combat resolution actions to add.
Wednesday, March 4th
This being my final day to work on the project, I was not optimistic I would be able to get it together enough to be considered a feature-complete roguelike.
By about 4:30pm, I was finally adding transitions between map cells, and they looked quite nice, but I couldn't help but think myself a bit of a hack that this is the first time I implemented Bresenham's line algorithm. Plus, the C# example up on Roguebasin was unfathomable to me.
A few hours later, I had managed to add my first enemies and some rudimentary AI to push the action, but I wasn't feeling well again, and decided to just throw in the towel. I submitted the final result around 9pm.
I had the following day off as well before I would have to return to the day job, but 7 days is 7 days (even if I did botch a couple of them). Plus, considering I seem to be doing an iffy job of fighting this cold, I should probably just take this last day off to recover.
Overall
To read the above, you'd think that this year's 7DRL was a pretty miserable time for me. Awkward timing and a persistent cold bug undermined what could have otherwise been a fun coding adventure. However, I ended up learning and coding a number of useful things that I probably would not have if I just kept tinkering away on my usual dream projects.
For example:
- Lots of great programming practice. I don't normally use delegates and interfaces in my C# coding, and all the decoupling work required I get a bit of practice doing that.
- Whyborgs necessitated the creation of many useful support functions, including Bresenham's Line Algorithms, many Vector2 integer functions used for getting the points needed to create grid-based procedural maps, and the map generation code itself. While a lot of these support functions went horribly wrong at first, they have (for the most part) been troubleshot now, and will likely be integrated back into my roguelike library code framework.
- A heaping helping of humble pie was served up and devoured, mostly in how poor I am at coding. I not only was chagrined to learn of a number of basic functions I never got around to adding or using before, but I also I gained an awful lot of respect for just how invasive Murphy's Law can be as pertains to my coding endeavors.
So overall the 7DRL was worth doing, even if conditions could have been better. I should consider joining game jams more often, as I learned more this week than I have in the months leading up to it.
Files
Get WhyBorgs
WhyBorgs
An incomplete project I made for the 2020 7DRL
Status | Prototype |
Author | geldonyetich |
Genre | Role Playing |
Tags | Procedural Generation, Roguelike, Turn-based |
More posts
- March 28th, 2020: Pathing WorksMar 28, 2020
- March 24th, 2020: Fixed The Slow PerformanceMar 24, 2020
Leave a comment
Log in with itch.io to leave a comment.