20 hours ago

The story of Daswaget. Episode 1: Prototype

(or the story of my game engine and diploma project)

The screenshot shows my diploma project running on the emulator


Last fall, I started making my own engine (DSWG Engine) for graphic applications and 2D games. Everything was fine until winter came. It was my last year of study and in February I had to defend my diploma project. We were given several topics for the diploma thesis. Among them were "Game Development", "Mobile Application Development", "Website Development" and several others. I wanted to develop a game, but after thinking about it, I chose to develop a mobile application, because it would allow me to better understand working with graphics. And it was a raster image editor (a program for drawing). And of course, I used my engine to develop it. My engine is cross-platform, I decided to start developing the application on Windows, and then transfer it to Android.

November, late fall. At the start, the development was going well, but over time I discovered problems with my engine. When I already had several thousand lines of code, adding something new to the application was torture. Adding a regular button to the screen was ALWAYS accompanied by errors - the button could be completely invisible, could not respond to clicks, could not call a function (and many other errors).

The end of January. Two weeks left before the diploma defense, and my program was not ready due to engine problems. The situation was worsened by the transfer of my application to Android - half of the program stopped working, the other half did not work correctly. I spent the first week fixing the errors, and the second on finalizing the functionality.

Before the diploma defense, I was very nervous, but still I demonstrated my application well. Yes, I defended my diploma using an application developed on my own engine.

Afterwards, I took into account all the errors of my engine and decided to rewrite it from scratch, ridding it of all the shortcomings found, leaving only successful solutions. This is how the history of the development of a new engine begins...

Continued in the next post ;)



0 comments

Loading...

Next up

I improved my old tank control code. It used to be 400+ lines, but now it's only 66. Only 66, Carl!

This is very cool, but while I was rewriting my code, many bugs appeared, for example, when I clicked on WASD, I controlled all the tanks at once (GIF)

First AI tests

At the moment, bots are like zombies - they follow the player and can avoid obstacles in their path, but they don’t always succeed

They are very stupid, but I will try to make them smart

Now the tank turret rotates realistically - at different speeds, depending on the movement of the tank. I tried to do this before, but it turned out very poorly and strange things happened

(Tank turning speed increased by ~4 times)

I added a new type of tank to the game - self-propelled artillery. It does not have a turret and the rotation angle of the barrel is limited. It deals more damage per shot, but has low speed.

I also improved some parts of the game (see article)

#MinecraftMemory The last 5 seconds of my life

I've been making AI for my game for over a month. It was a long and difficult process, I even lost several kilograms. The result is on the GIF. In my opinion it turned out very well, although not perfect

I decided to do a tank race to test the AI. Participants: 4 bots and me (gray tank)

So I made a smart aiming of the tank turret at a moving target. This required a long mathematical formula, but it did not affect the optimization (I used 1500 tanks on one screen and there were no lags!)

Rotation of two different types of tanks.

Next, I should improve their aiming, since at the moment tanks cannot hit a moving targets. Well, I think it won't be difficult to make smarter aiming. I hope

I am developing my own game engine. Currently, I am adding a graphical user interface. Later, I plan to create games and applications using this engine. The screenshot shows two buttons and a text input field with their colliders (red rectangles)