After 13 weeks, trimester 1 is now officially over. Over this course of time, I worked on two separate projects, the first consisting of work on my pxl2D engine with android support along with a small table tennis game for Windows and Android, whereas the second half of the trimester was working on a NES game in 6502 assembly. In this post I’ll be talking about what went right, what went wrong, ect.

What went right

Coming into this trimester, I had pretty much only began development on pxl2D so instead of working on games, I planned to focus on the engine. I managed to work more on the overall engine, including events, input, joystick, sprite class, improved batch rendering, a proper window implementation and basic android support. Of course, just because I worked on all of these areas, doesn’t mean they are completely functional. I still managed to develop an extremely simple game nonetheless in less than a day with the engine that ran on windows and android, so I was pretty happy with that. Looking back though, either I didn’t commit often enough, or I just didn’t take advantage of the time I had to work on everything faster.

As I said in the introduction, in the second half of the trimester I worked on a NES game called Super Ball Boy in 6502 assembly. Before starting the project, I experimented with x86 assembly using the NASM assembler. I started out with a swap function then slowly moved to slightly more complicated functions. Although short lasting, it opened my eyes more to how a CPU works. I still don’t know how exactly a CPU works in hardware, but I have a much, much better idea now. Working with registers, branching, bitwise operations, ect have really helped me understand this. In the future, I’d really like to learn more exactly about how CPUs work hardware-wise, but that’s something I would have to self-learn since it’s not something the college I go to offers. Which is disappointing, because there are other topics I’d love to learn to, such as OS development. In the end though, it’s my own fault for not exactly knowing what I wanted to do (which is just pretty much computer science in general).

Anyway, enough about that, I think I’ll talk more in depth about what went right with the NES game. I think the end product turned out pretty much how I would have liked, preferably with more levels, however that’s something I didn’t manage to finish. I think what’s most valuable to me is learning how the NES works technically. It’s so interesting and expansive, I could probably talk about it all for an hour or so non-stop. The fact that it’s 8-bit hardware allowed me to understand it all a lot easier. I now know how to properly use and, or, xor, not gates much more effectively now as well as logical bit shifts and rolls. Not only that, but things like jump tables as well where there’s limited memory and relative addressing goes past the -127 – 127 range helped me understand how switches work. Obviously you don’t have the 127 range limit today, and even if you use if statements where you compare the same value multiple times, the compiler would probably still optimise it out, but it’s interesting nonetheless. I also learnt about interrupts and how they function, as well as specifically how the stack works and calling conventions. In my game, because there are only 3 registers, I used RAM instead to store return values. I really liked the fact of having multiple return values and being able to control it myself. I also handled inputs the same way, and only pushed on the stack if a specific CALL_NESTED macro was called which wouldn’t overwrite input values when a function is nested in another.

So yeah, doing all that was incredibly beneficial in my opinion and it really makes me want to learn more about how things work to gain more knowledge about the internals of computers.

As for working on pxl2D, I’m still glad I spent half the trimester to work on it and I plan to continue work on it in the future since it’s fun and I think it will be good in my code portfolio as well.

What went wrong

Honestly, not a lot went wrong this trimester. I gained a lot of new knowledge and did a decent amount of work. Well, sort of, that’s probably one thing that didn’t go so well. I really don’t remember much about the amount of work I did for the engine, but I probably could’ve worked a lot harder. As for the NES game, I know I started off well and pretty excited, but soon after I had a presentation due for another class which I hate with a passion. It’s pretty hard to explain how much I hate it, so let’s just say I really, really hate it. Anyway, because of this, I was really just too stressed to work on anything and just procrastinated instead. To make matters worse, one of my team members got sick on the day it was to be presented, so that was another week of stress. Then, things clashed the week after when everything was prepared, so it was another few days til it finally got presented. In total, it was probably over 2 weeks I was procrastinating, so during those 2 weeks, nothing really happened on the project. So that’s something that definitely did not go well. Because of this, I binged less than a week of development before the game was being presented. I got the majority done during that time, but it probably wasn’t particularly healthy.

I planned to implement slime enemies as well as bat enemies for the NES game, but I only managed to add limited slimes. Bats were supposed to fly towards you or fly around randomly and the player could jump on their head to make them fall, or if the bat touched the player on the side, the player would respawn. The same would apply for the slime, but instead, I wasn’t able to add collision with enemies at all. I did manage to add the slime AI with it jumping around randomly and detecting if where it would jump is safe (is a solid block and is not a spring). I eventually wanted to change the enemy design and make it that slimes could be bounced on while jumping, to allow the player to jump higher to solve various platforms. However, the slimes would also transform into various slime forms, such as an angry, spiky slime that would make the player respawn on collision, or a missle form that would shoot accelerated homing missles at the player (which could be dodged since the angle would only be updated every x frames). Unfortunately, I didn’t manage to get any of those ideas implemented.

I also intended to feature a lot of variety of levels, but because of lack of ROM space and not having enough time to learn how to do a bank switch, I only managed to get 3 very short levels in. I even added 4 screen VRAM scrolling where the player could explore a 4 screen level, however because of not having bank switches, I was unable to include this in the final demo. I also wanted to have tiles such as teleporters that once collided with, teleports the player to another teleporter of the same colour on the map, however I didn’t have enough time to add them.

There were also other gameplay mechanics I intended to add from the start, such as ball upgrades. Upgrades such as a solid ball that didn’t bounce as high, a glass ball that would break when fallen from a high height or a small bouncy ball that bounces much higher than usual were all things I would’ve liked to add, but again, didn’t have the time for.

Practically all these issues were caused because of my failure to properly work on the game consistently throughout the second half of the trimester, which was mainly because of the stress involved from the other class. I probably could’ve improved on this by not letting the horrible presentation overtake me, but that might be easier said then done considering how horrible the presentation was.

My priorities weren’t that great either. For the game, I spent 6 hours during the last few days of development on palette recalculation, which pretty much changed the colour of a tile, and that’s it. That’s definitely one thing I could’ve improved on.

Conclusion

There were two major issues with the projects done this trimester. Time management and priorities, as explained above. These were also the same problems encountered last trimester as well. However, I still learnt a lot this trimester and I think I still managed to get a good amount of work out. All in all, I think everything worked out pretty well.

KPI reflection which could be improved

Effective communication skills – I didn’t collaborate much this trimester, so I can’t say this improved at all since it was last marked. However, I have been getting better at managing my git commits as well as todo-lists for features and bugs, if that counts for anything.

Time management abilities – This is definitely one that needs to be worked on and has only probably gotten worse this trimester. This could be improved by creating a work schedule for things that needs to be worked on, breaks, ect which I’m very seriously considering. I even thought of using/writing a program that lets me manage this schedule and possibly block out specific programs when work should be done.

Acting as a team player – Like I said above, I don’t think this has really changed much over this trimester. In fact, it’s probably gotten worse also since I did most of my projects by myself this trimester. Therefore, to improve this I must join in more on team projects.