Game Development

by Maxim Zavadskiy

My developer's blog of Game Programming Project 1  course at pkamk.fi.

Tags: desing, development, game, pkamk, programming, project, Unity

First Level - preparation for Viope Game Contest

Posted by Maxim Zavadskiy on 21 January 2013, 1:51 AM

Today I was working on the First Level, apart from Tutorial. I guess Tutorial won't show the whole idea. Didn't spent much time on that - about 8h, as always I do stuff in the last day:). So the level was not of a big quality, here is the video, sorry for the voice, it was in the night :) :

http://www.youtube.com/watch?v=xPuzyLAxxkY

Links about the project

Posted by Maxim Zavadskiy on 17 November 2012, 11:05 PM

Last entry for the course - Self Evaluation

Posted by Maxim Zavadskiy on 10 June 2012, 8:45 PM

So its time to make the last entry. Let's start with the time I spent in the whole course.

Time spent: 97h 


It's quite a big amount I think. But the course is a 5cr one so the time that I am supposed to spend is 150h which is 1,5 time more! But since I started studying in Finland from that autumn the actual time spent on any course at my school is often much less that it's  weight in credits, especially if this is related to programming. 

In this course, however, situation is different - there's no strict plan of amount of work I have to do. My duty was just to schedule myself so that I can get good enough workload of 150h. I did much less.

Those 97h were really worth spending - I learned a lot of stuff about game programming by doing a real project (almost real:) ). And now I have a nice item in my portfolio which will really help me if I am going to work in game industry. I learned team work and people behaviour. Now I will be ready that not everyone will go to the end. And I hope that in the future I will better feel who. I don't blame Hieu  - I think I was kind of leader of the team of two and partly it were my mistakes that did the situation.

Now I know Unity much more than before this course. I see some of it's weaknesses, strong parts. And what I am going to do is to learn another game engine next time - I think Unity is not the best one. I think it's good to try Unreal engine, advised by my friend.

I tried to apply my favorite Object Oriented Analysis to game situation. And I think it was quite successful  - but situation is different a little from Software Development anyway.

Now I am quite sure I will try myself in game industry by working as Game Developer. I believe now that I would like to work on Gameplay, AI, Game Engine,  and even probably try myself as Level Designer - I like when the job is a creative one.

I certainly like ideas and design rather that implementating them but maybe I should try myself in tweaking part of the job when it comes to polishing the level..

I would like to say a thank you very much to Anssi Gröhn for a great course I enjoyed. Also some suggestion for improvements may be about supporting material  - for example, I was looking myself for design patterns for the game, e.g. FSM. I would be greate of course if we would do instead a prototypes of projects for some real companies but I know it's difficult to arrange.

About self-evaluation: I don't think I did the course as 5.. Rather 3 or 4.. I didn't plan my time well and this resulted in much less time spent on the project than planned. Also sometimes I must admit I were lazy and that's another reason I didn't do well. I ended up with just an alpha release but here I can say it's partly due to our team break - the project was planned to be done by 2 people, so I did about half of what was planned. 

So I think the appropriate grade is 3.

Production phase (alpha release)

Posted by Maxim Zavadskiy on 24 May 2012, 10:17 PM

24.05

I started the alpha with making a flowchart of the whole game process starting from the very execution of the game.

Let' start from the very beginning! I created absolutely emptry project. Now probably I have to put some assets from that Lerpz project. But before! I need to check copyrights!

Not sure if I could use that Lerpz character so I went to the Internet to check some free. Wow! It's so difficult to find anything there! I found some robot characters but it seems there were no animations included! Ok, seems I have to use that Lerpz for now..

26.06

Where is Hieu??? I cannot reach him and according to the shedule we have to finish the alpha tomorrow!!! Again I am doing everything alone!

Ok, no panic, I think I should download that lerpz tutorial and use it as a base for the alpha. That will be more easy).

So here's how it looked at the beginning:

WOW AMAZING! Hiue just called me back and told that he is not going to work on the project ANYMORE!!! Hey, I didn't expect that!! He could at least warn me about that earlier so I woudn't spent extra time thinking how to do that together. Well, thats something really weird, I believe if you begin doing something, especially in a team, you MUST go to the end! For me this is the betrayal! I really hope I wouldnt be in such a situation in next projects and working life. But maybe this is a good experience and now I know more about relationships in teams and people.

Hieu said he is not that motivated anymore and actually it's not the thing he expected. I am wondering what on the earth he was expecting?) Anyway I think I don't have a right to force him and no such wish so I will continue alone. Sure I won't do the game as we planned but I will do my best. Maybe my friend Peter who is interesting in game development can help me sometimes..

All right back to work. I started with hierarchy of game objects according to technical specifications. Ok it's done partly. Now I need to turn the lights off and change the skybox to stars.

In order to make a skybox I need to create material from star textures. I tried to use that texture from functional specifications but it doesn't look nicely. I think I have to experiment with shaders.. But what is shader actually? It's just a small procedure that renders the texture as I understood. So Diffuse detail seems to be the best:

I hate that bug in Unity that if I adjust smth during test play of game it doesn't save it after I return back!!

I added the torch for the Character and some highlights to see the droid itself, this is how it looks like:

All right now it seems I have to document what I did.Oh, it's not that interesting stuff as development itself but it seems I understand how it is important especially if you work in a team (of 1:))))).

Ups! Seems in that project I downloaded all the scripts are in Javascript!! I hope that won't be a problem with communication between them.

Then I got rid of character selection.

27.05

All right today is the deadline of alpha according to the shedule:) I won't implement everything planned by today I am sure. Maybe again I will have to extend it.

I started with.... a torch by writing TorchBehaviour script and Torch class. Let's use Doxygen for commenting! I also need to document it in technical specs.

OK Torch is working, now let's add some batteries to increase it. This time it should be smth nice not just a sphere.

I found a greate site http://opengameart.org with lots of free game assets and there's smth similar to a battery!

So I put that flash-like object and made a prefub from it and it took quite a lot af time. Then I should think about object design. Battery is a pickup... Or maybe it doesn't worth it to think so much? Ok, just let me have a look in google whether there're nice solutions about that... No, nothing complicated, just sending onBattery that's all.

I added player member to LevelManager class. LevelManager is a singleton for each level and to make it so I found nice solution at http://www.unifycommunity.com/wiki/index.php?title=Singleton

I did all the functionality needed to collect the chrage and increase power of light but I got one bug that ther CharacterBehaviour is null. I will fix that tmr.

30.05

Hm strange, somehow GetComponent<CharacterBehaviour>().onBatteryPickup(charge) causes a null reference exception.But CharacterBehaviour is attached to the MainCharacter game object! Aaah! I got it - GetComponent returns only scripts attached to the current objects it's not a global function or something!

31.05

OK now it's working ok, and I also created a kind of battery with physics properties so it's not just hangind in the air.

I have quite an interesting situation. MainCharacter game object has CharacterBehaviour script attached which provides basic infromation about the character and it's behaviour, as well as torch getters. It in turns uses TorchBehaviour script to get information about torch and TorchBehaviour uses Torch concept object to store the logical state of the torch. Such a recursion:) Not sure if this is too elegant:) CharacterBehaviour doesn't have Character concept object behind it! I think I should do the same as in Torch case.

I created Character class and now in GameGUI I will access only concept objects not behaviour ones.

Now I display lives of the character:

Wow this GUI system is so unconvenient for me that it take alot of time to do smth there. Layout system in imperative style is just funny!

I spent a lot of time to display basic states:

06.06

Tomorrow is the deadline for the whole project and I even didn't do yet the plan for alpha!

In previous couple of days I started doing enemies feature of the game. The current situation is tweaking damage proportion to the speed of the crate that is falling of it. Because I don't want the robot to die just from a touch with a crate.

I use relativeVelocity and impactForce to determine damage but it seems sometimes it gets too high when the character just pushes the box on the enemy. So I added a separate check for crate's absolute velocity and it seems now every trash is filtered.

I would like the robot lie on the gruond when it's dead but it seems this will be difficult... Fantastic! It's not that difficult and I got nice dead body). I just took a ragdoll of that robot from FPS tutorial and replace it with robot when it's dead.

I added apart from lives health also. Now when the character is tourching the moving enemy robot the health reduces with some speed! I will add some nice effect of touching, like flashes.

I have added also a game over window with a restart button when the character loses all lives:

I added health disppay for the character and health pickups that shines when the torch light them up.

Today is the deadline... I think I don't have so I should make smth finished today. So priority one is to make a complete tutorial level. I will do some kind of tutorials messages - they were designed as thoughtbox but for simplicity they will be just transparent windows. Also I should use FSM for tutorial progress. I have some kind of ideas for that but I will also have a look at polished versions of it on the web.. There's a http://en.wikipedia.org/wiki/State_pattern on wiki but I think it's not that appropriate for the situation.. or maybe I don't understand it just good enough..  For this simple case I will use enums of states and LevelFSM class that handles them. So there won't be any state classes. Also each gameobject that is related to level progress will have it's type as enum member. On activating, it will call OnMissionObject from LevelManager.

Now  - time for the story, I will do some tutorial messages which will tell the beginning of the plot.

Ha:) I have put a skybox background for tutorial messages - I don't have time for a better one:

This was such a sprint. I was so busy with the game last hours that I didn't put any notes here. Now the tutorial is somehow complete. I make the player to study basics by picking up a battery, health, killing an enemy. At the end it meets the spaceship and the level is completed! 

To do that I have inherited TutorialLevelManager from LevelManager to implement level specific states.

Now I will let my brother play the game:) If I will pass such test then I will do a screencast of the alpha version of the game (actually it must be a gold release for the course bu for me it's alpha). And then I will submit all the stuff. I was so busy with game making that I haven't upgraded technical and functional specifications:( I will do that if I will have time.

Funny! I compiled the game to an exe to be tested by my brother. But it doesn't work there!! I expected it working about the same as in editor but it freezes when I press OK on the level tutorial messages. When I disable those messages - it works fine. So the problem might be about pausing the game or GUI.

No, the problem is in TimeScale, or pausing. When I disabled pause on tutorial message - it works. I have to investigate that...

Finally I found the problem here:

IEnumerator Wait(float waitTime)
{
yield return new WaitForSeconds(waitTime);
Time.timeScale=0.0f;
}

I used this code to wait little bit before pause because I pause the game in the very beginning and if I don'y delay it, it doesn't pause actually. Now I have to get rid of that code.

No that didn't help, the problem is about timescale indeed.

I end up with disabling/enabling character control instead of manupulation with time.

Executables can be downloaded in Attachments section.

10.06

I recorded a screencast of the alpha's demo: http://www.youtube.com/watch?v=tHWR6kWRihc.

Now the only things I have to do is to update technical and functional specs. And then, of course make my self-evaluation.

Uh, it's a boring stuff... I think I will leave Functional Specifications as planned, so features that I didn't implement in this course but I should will be left there. Because I am going to continue working on the game after the course ends.

Now everything is done and I can end this blog entry.

Time spent - 37,5 hours

Project files with source can be found at https://docs.google.com/open?id=0Bzz99TnQsO0TSXRHWDBaZG1fUkE.

Binaries can be found in attachments.


Attached files Attachments 8

alpha_1.png (546.7KB) - Download

alpha_2.png (308.8KB) - Download

alpha_3.png (286.8KB) - Download

alpha_4.png (269.9KB) - Download

alpha_5.png (306.3KB) - Download

alpha_6.png (276.5KB) - Download

alpha_7.png (397.1KB) - Download

Windows.zip (24.2MB) - Download

3rd - Pre-production phase

Posted by Maxim Zavadskiy on 09 April 2012, 1:18 PM

09.04

13:00

As I said on the previous entry during that meeting we started the 3rd stage - Pre-producation phase. The main thing is to create a prototype that will reflect our idea and to fill functional and technical specifications on the way. We faced the next problem: we have to separate the development of the prototype so each can do his work independently and in the end we could merge it somehow to get a prototype. In the end we agreed that I do  light+light control+picking batteries. And Hieu does puzzles, level itself, enemies + teleports and doors. If someone will finish earlier we will assign him new tasks. When we will do those things we will decide on the rest of things to do.

13:18

15.04

21:11

Ok, after a great delay I got some time to start actually doing the prototype... I copied the last version of Lerpz game I did in the Game Programming Basics 2 course.

I turned off all the lights in the scene but still I cannot get the whole screen almost black, so the torch will have some effect. AHa! it's ambient light in the render settings of the project. I set it to black.. Strange why it's not a setting of the camera .

I added a torch to the character's head. Looks cool but still need a better one:

22:07

22:43

Maybe point light will be better:

Then I put a spot light again and adjusted it in a good way:

23:25

18.04

19:05

Ok I will continue. There was a problem with a torch that when the character turns to the left it's not working normally. I solve it by adding a symmetrical torch!

After some time I managed to write a script that decreases the range of light with time flow!

I managed to increase the range of light when the character collides with a battery! But then somehow it stopped working(( Oh, I changed smth...

20:35

21:58

Nice,now the Droid can collect batteries and increase the charge of the torch!!

22:15

19.04

12:35

I addede several batteries and tested the stuff - works good. Now I need to add a charge indicator...

12:45

16:38

17:15

23:40

Unity is not convenient for programmes at all! Just for such a simple task as displaying the battery charge indicator - like progress bar  I spent quite a lot of time. It doens't have such widgets so I did it myself. And there's no simple way to draw it, I should use textures!!

24:00

21.04

16:00

Discussed with Hieu some scriptings aspects of Unity (he is a novice there). Also we agreed that I will continue futher with Menu and Enemies for the game. My teammate still didn't do his part but we don't have time to wait.

18:00

22.04

11:52

13:20

15:05

I added a simple menu for the game where I have New Game and Exit options. It looked easy but only then I realized that in Unity there's not wasy way to create such a standart thing as main menu!! Weird! I need to create a separated scene and put there some GUI things. Would be nice of course if anythings like MainMenu class would be present.

15:50

21:47

I added a level time and now everything looks like:

Now I have level menu! But I need to stop the game when it's shown. Also when I quit and go to main menu and then start an new game it somehow resumes!!

I fixed that with manupulating with Time. Strange there's no straight way to pause the game in Unity!

22:30

14:00

I need to get familiar with technical specifications document and to fill it on the way.

14:35

25.04

8:55

I called to Hieu. He reported me the bad news that he will be not able to do much things for those 2 weeks until the end of May. We decided to contact Ansii about that issue probably we could try to get any grade this year abd then upgrade it next grade if the course will be taught next year. Hieu is not happy that due to the lack of free-time I do most of things now and he does nothing. I suggested that after the mid of May he simply will do more that me so we'll catch up in time. Let's see... Anyway I am determined to get any working version of the game by the beginning of June so I will work by tha time.

9:16

19:05

Enemies... I need to add some stupid ones for a prototype. I think I will take some things from FPS tutorial in Unity (http://unity3d.com/support/resources/tutorials/fpstutorial ).

19:24

19:44

27.04

22:13

That enemy part can be one of the difficultest. I took that robot from the tutorial but it seems its missing some animation or other stuff.

Woohoo. At last I managed the enemy to make it patrol between 2 given points! That's great. Next I will add death trigger.

Great now the Droid dies when it touches the enemy.

I speed up things! Just after some 15 min the Droid can kill enemies with boxes that it drops on them.

Maybe I need to build up a level a bit....

1:10

28.04

16:40

I added some Robots which can be killed with boxes and also 3 lives for Droid after which the main menu will be loaded. So I did my part of prototype at last!! It's somehow playable game and even with a few features the main idea can be seen. Hueu said that sadly he will be busy until mid of May so I will go for his part of prototype.

17:45

21:18

So lights off puzzle! I found some open source implementation of the game on github.

Cool I like when the code is so portable. Good design! I just copied a couple of classes from the source which implement pure game loginc and after 30 min I get the game working! To be honest the game is difficult, so I used some strategies to do that http://gaming.stackexchange.com/questions/11123/strategy-for-solving-lights-out-puzzle. But now I have a problem. I need to have some kind of door that destroys when the puzzle is solved. So I need a separated child trigger object which will catch when the Droid enters it. And it doens't work! It only works if I put a trigger component directly to the door! Maybe I don't understand smth....

It's done! The door is removed when I solve the puzzle. Here's how it looks:

 

23:20

04.05

15:55

I need to finish the prototype - to add teleports and to build up a level so the idea will be shown. I have checked moodle page of the course - seems like noone went futher that us:) It's release phase officially but I haven't seen any signs that someone did even alpha release of prototype! 

OK it's working! Appearance is terrible but I don't care at this point about it.

16:40

19:25

Unity is so unstable!! I forgot so save the scene before playing the game and then it hangs up!! So I was forced to crash the whole Unity and of course nothing was saved!

20:50

21:20

I made a screencast of the prototype and published it here: http://www.youtube.com/watch?v=cr614xbuXlk . Enjoy!

22:40

19.05

About a week or two ago we had a meeting and discussed what we will do futher on the game. We spent about 3h on that. I and Hieu didn't have time for the project last two weeks because of exams and deadlines but now we can dedicated  much more time for it since we don't have any classes now. So as we have to finish the game project as soon as possible and the deadline is arriving soon we have to really hurry up.

We have to make 4 releases but we thing maybe it's better to make just two or three. So we made a list of all features to be implemented in the game and separated it for alpha and beta releases. Testing could be done on the way and maybe we will test the whole game in the end as a 3rd release.

There's needed a shedule document on the game. So I will make a rough one.

20.05

We just had a meeting where we touched alpha version. We will make initial technical specifications document and submit it with others in the submissions slot.

Hieu still doesn't know that many things about Unity so I am continuing writing it after the meeting. At that time Hieu could learn tutorials.

So we started from description of GameObject's used in the game.

21.05

It's little bit confusing that everything in Unity is a GameObject. I would think so about an object that handles statistics in the level, let's say an instance of Level. Yes, this is a challenging question about what kind of concepts should manage general things about the level, such as time of playing, statistics, output GUI about everything on the screen, determining level progress and etc.

But I will look at some tutorials and find out some ideas.

All right I came to Desing patterns in Unity. And I am advised to use FSM as a base. Let's see why it's good. Well, this is one way only. For example event driven solution looks more attractive for me. But actually events and states can be even used together.

23.05

Oh, forgot to save the previous day's post!! Currently I am thinking about technical specifications before ding the alpha actually. And this makes me think about architecture of the game.

I have made such consepts:

  • LevelManager - controls the current level and has some level states. Methods can be Pause(), Resume(), Quit(), getLevelTime(), getRespawnPoint()
  • GameGUI - handles HUD mainly by polling other gameObjects states. Will handle ingame menu as well.
  • GameManager - represents the game as whole, handles configuration, progress, etc. 

A challange is that each level has it's own set of states apart from paused, playing. So Level class should be specific for each level or I have to separate level differencies in other concept.

Just realized that if I would have a flowchart of the whole game process this will really help he with architecture things because I know use cases of the game.

Had some difficulties with deciding wether I should separate ingame menu in a separate concept or to put it in GameGUI. Decided the latter one because when calling menu, GameGUI may hide HUD.

Actually I was wonderting why in Unity there's no such kind of classes. I think that for each game in Unity developers have to create their own bicycle in this case..

I have difficulties with separating game logic from engine dependent code. For example I could put a state of level in a separate class that will contain pure logic. But probably I shouldn't do that since it's a game engine that hanldes all areas of the game development.

I put those thoughts in technical specifications filling Game Object Data section. Then I packed it with shedule doc and functional specs and submitted it in Pre-Production Phase slot. At last:)

Maybe this is a part of alpha entry but let it be here. So I will start a new entry to continue the story!

But before let me calculate the time! Now I am using Toggl tracking system to track my time and I don't need anymore manual hell with calculation it.

Time spent: 33h


Attached files Attachments 5

light1.png (176.9KB) - Download

Point_light.png (310KB) - Download

Spot_light.png (305.8KB) - Download

22.04_result.png (312.5KB) - Download

Puzzle.png (230.2KB) - Download

Feedback

anonymous profile picture
Anssi Gröhn

Good work! short and down-to-point demo of your main elements in the game - you have managed to demonstrate well what the  basic idea in the game actually is. You have also written deescription how the proejct has progressed, and expressed what problems you have had, what needed to be done and how you eventually solved them.

If you intend to show the demo to someone else, let's say a potential financier, you also should make a prototype build of your game, so it can be run without actually having Unity editor installed.

Please also mark consumed hours so they can be seen without calcualting from given time markings.

All in all, I have to say this is quite nice summary for the pre-production phase. You will have pretty tight schedule ahead of you, especially if your partner only joins project later this month. Good luck, nevertheless!

anonymous profile picture
Rachit Kumar
Packers and Movers Bangalore in Charges #
http://www.movers5th.in/packers-and-movers-bangalore/
Packers and Movers Hyderabad in Charges #
http://www.movers5th.in/packers-and-movers-hyderabad/
Packers and Movers Gurgaon in Charges #
http://www.movers5th.in/packers-and-movers-gurgaon/
anonymous profile picture
Rachit Kumar
Packers and Movers Pune in Charges #
http://www.movers5th.in/packers-and-movers-pune/
Packers and Movers Mumbai in Charges #
http://www.movers5th.in/packers-and-movers-mumbai/
Packers and Movers Delhi in Charges #
http://www.movers5th.in/packers-and-movers-delhi/
anonymous profile picture
Rachit Kumar
Packers and Movers Noida in Charges @
http://www.movers5th.in/packers-and-movers-noida/
Packers and Movers Chennai in Charges @
http://www.movers5th.in/packers-and-movers-chennai/
Packers and Movers Navi Mumbai in Charges @
http://www.movers5th.in/packers-and-movers-navimumbai/
Packers and Movers Thane in Charges @
http://www.movers5th.in/packers-and-movers-thane/
Packers and Movers in Ghaziabad Charges @
http://www.movers5th.in/packers-and-movers-ghaziabad/
Packers and Movers in Faridabad Charges @
http://www.movers5th.in/packers-and-movers-faridabad/
anonymous profile picture
Kumar
Packers and Movers Hyderabad Charges @
http://www.moveby5th.in/packers-and-movers-hyderabad.html
Packers and Movers Pune Charges @
http://www.moveby5th.in/packers-and-movers-pune.html
Packers and Movers Bangalore Charges @ 
http://www.moveby5th.in/packers-and-movers-bangalore.html
Packers and Movers Delhi Charges @ 
http://www.moveby5th.in/packers-and-movers-delhi.html
Packers and Movers Gurgaon Charges @
http://www.moveby5th.in/packers-and-movers-gurgaon.html
Packers and Movers Mumbai Charges @ 
http://www.moveby5th.in/packers-and-movers-mumbai.html
anonymous profile picture
EvaTus
<a href="https://amoxicillinwithoutprescription.com/">ampicillin amoxicillin</a>
anonymous profile picture
JaneTus
<a href="http://viagrawithoutprescription.com/">buy viagra no prescription</a>
anonymous profile picture
car insurance online
<a href="http://autoinsurance.us.com/">auto insurance</a>
anonymous profile picture
IvyTus
<a href="https://trazodone50mg.com/">trazodone</a> <a href="https://buyalbuterolwithoutprescription.com/">albuterol without a prescription</a> <a href="https://ventolingeneric.com/">ventolin hfa inhaler</a> <a href="https://prednisolone40.com/">prednisolone sodium</a> <a href="https://seroquel50.com/">seroquel xr 50mg</a>
anonymous profile picture
LisaTus
<a href="https://ventolingeneric.com/">ventolin</a>
Page created 20 March 2012, 12:16 PM / Page modified 12 February 2013, 9:52 PM
You can see this page because it is public.