DevLog’s telegram channel: https://t.me/GameDevLog
The 30 days Daily Dev Log result:
- spent 85 hours
- 54 small tasks are done
- It took 34 days. 4 days was missed. There were 30 productive days
- new android demo-build: df-05.07.2018.apk
- The DevLog here was updated 30 times.
- Telegram channel was updated 30 times.
- Telegram channel got 1 member (me).
- I like the result. I am going to repeat scenario after some rest and reflection.
04 July, 2018 – Day 30 – Final
I worked on the chest feature where the chest can appear from the wall. I created new chest as ScriptableObject with required balance values. And I replaced the old chest sprite to dynamic sprites depends of chest type on the floor.
03 July, 2018 – Day 29
This day I continued work on the ‘treasures in the walls’ feature. The ‘Gold from the walls’ sub-feature was implemented successfully before. I had to implement the ‘chest from the walls’ sub-feature. The dungeon generator can put chest into some walls now. And it is possible to get access to this chest by destroy wall. Also there was implemented the chest drop animation. This feature is not implemented fully yet. I will continue tomorrow.
02 July, 2018 – Day 28
Today I implemented funny feature when gold can be found in the dungeon walls. I updated the dungeon generator so it puts some gold to the each floor. And I implemented gold drop from walls after hammer wall-wave. I had many issues which I had to solve like how to select empty cell where next coins will be dropped, what to do when no any empty cells. Coins got funny jump animation but this was easy as I reuse my Jump2DTween which gave me good animation without any adjustments.
01 July, 2018 – Day 27
I started work on the new feature: treasures in the walls. The dungeon generator on each floor will hide some gold and chest into the walls. When wall is destroyed using hammer and destroyed wall contains gold or chest than the treasure will be dropped. I started from implementing ‘investigation wave’ which runs after hammer hit the wall. More high-level hammer starts more long wave. I spent some time to make the wave animation. I tried several different approaches and stopped on following one. Also, I created the four new hammers with all required balance settings.
30 June, 2018 – Day 26
Three bugs were fixed today:
- When I loaded stored state of cards for the hand it didn’t display correctly. I fixed it.
- In the dungeon view, after monster was defeated or new floor started, logic gave one additional card what was the error. I fixed it.
- The dungeon generator sometimes gave variants with not achievable items. For example on below image, the chest can’t be took as path is blocked by the ladder. I fixed it.
29 June, 2018 – Day 25
Three small tasks were done today.
- Monster max life points parameter was moved from Prefab objects to ScriptableObjects. So, I finished monster database refactoring. Most of monster settings were moved to ScriptableObjects.
- bug-fix: when player start game from battle and lose the battle there was bug as some dungeon data was not initialized properly.
- I updated eyes monster sprite for dungeon so it better fit battle monster sprite.
28 June, 2018 – Day 24
I have done new type of cards: ‘Draw cards’. The cards draw from deck to hand 2, 3, 4, 5 or more cards in one turn. I created four new cards and cards effects as ScriptableObject. I created visuals for the cards and added the draw mechanics. And I put four new cards into two existed chests with some drop rates.
27 June, 2018 – Day 23
Today I finished all card layouts update. I put all numbers to the left bottom corner and added effect images behind numbers.
26 June, 2018 – Day 22
This day I worked on the Slime monster final balance. The monster had to have protection from damage but I didn’t have such mechanics in the game yet. I implemented protection and tuned all monster parameters.
25 June, 2018 – Day 21
Two task today:
The “Furr” monster finalization. I set all monster’s balance values (life points, damage, secret areas, take damage regions, hints e.t.c). I am going to finalize several monsters in the current sprint and this settings will be passed to the first public demo.
- Sound effects adjustments. I don’t have good sounds library. I bought numbers of sound packs and I use effects from them. But I alway must add some changes to this effects: balance volumes and cut sounds lengths. Audacity usually helps me with such tasks.
24 June, 2018 – Day 20
I started new sprint. It has many new interested tasks which I am going to do next several weeks. This tasks should make game more interesting. I began from the new chest and from the related to chests logic. At first, I removed gold dropping from chests. I decided that this is excess mechanics for chests as player can get gold by another ways. I created new one chest as ScriptableObject and put to it the draft dropping balance. Player can get such type of chests when he fully investigated any monster. This is not possible to “farm” such chests as different monsters amount is limited so such chests have good dropping rates for hight level cards.
I implemented all supported logic. I added the chest dropping after monster investigation, I updated DungeonLootView so it works with any type of chests and it shows cards dropping effect. I purchased asset with chest images in the Unity Assets Store and replaced “from internet” graphics to new one which I can use in my project.
23 June, 2018 – Day 19
This day was the planning day. I planned new iteration. I use the approach where I have the list of current tasks and the backlog. When I get any new task I don’t start working on it immediately, I put a task to the backlog. When the list of current tasks is finished I start new iteration. I go through the backlog and think about each task and put some of them to the next iteration. Some tasks are obsolete at those moment, some tasks are not actual and they must be updated. I have four reasons why task can be added to the backlog:
- Fun: task must add any new fun to the game. Any new features or mechanics.
- UX: task must improve user experience. Generally this is user interface changes or new user interfaces.
- Bug-fixes: I read that it is very important to hold zero-bug state in your pet project for long motivation. So I put all bugs which I have in the backlog to the next iteration automatically.
- Technical improvements: this is not related to new features or improvement. This is about how things in the project are done. If something is important to do by another way, or I want to try new approach, or I want to refactor something, I put this here.
22 June, 2018 – Day 18
Today I decided to play with shaders. I like article from Minios Art where he shows how to add noise effect to 3D model. What was surprised me is how he uses world coordinates to make noise “flow” under 3D model during model moving and rotation.
I decided to use this approach for dungeon walls. I downloaded Unity shaders archive, copied sprite shader and added number of modifications for it. It was not so simple for me as I don’t have enough experiences in shaders writing. There was problem how to pass world coordinates for fragment shader. Article uses world coordinates in surface shader and Unity provides this coordinates automatically. But this didn’t work for fragment shader. I had to google and try many times.
Another part of work was to create appropriate noise texture. I found TextureGenerator-Online and bought FastNoise asset. They helped me to create number of different noise textures. I tried them as second sprite texture which blends with main sprite using world coordinates. I had many plays with blending rule, I tweaked different parameters and got following in final:
I don’t have good graphics in my game as I use graphics from free or purchased assets. This graphics was not specially designed for the game. But I have nice visual shader effect now and I am very satisfied with the result.
19 June, 2018 – Day 17
It was time to create and polish camera behaviour. I started from camera following logic. I created draft version which I am going to improve after gameplay testing. But now I have following:
18 June, 2018 – Day 16
There was bigger task than I did before in this month. The task is monster damage effect. This is universal default effect for all monsters. It is possible to add separated effects for each monsters but this is not important now. The damage effect consists of five parts:
- monster simple jump out effect towards player with random jump direction.
- monster claws effect with position offset based on jump out effect from previous point.
- Sound effect which you can’t hear from gif.
- Screen blood fade out effect.
- And damage value panel popup and fadeout at the below screen.
Probably, if I decomposed this task to five small tasks I didn’t fail at two previous days. But I didn’t do this. It was my mistake. Anyway I am still here and I am going to finish this marathon.
15 June, 2018 – Day 15
“Tiny backlog” helped me today again. All cards with damage effect (swords and stones) got number in left bottom corner with damage value. I thought how highlight that this number is damage number and decided to use icon under that number. I selected left bottom corner instead center bottom place to solve issue when cards cover each other and number is not visible. I am going to extend this approach to all cards later.
14 June, 2018 – Day 14
Today I have done one small task. I implemented hold detection on any card in battle, dungeon and lobby (deck edit) scenes. Card hold detection raises card information view with card name, image and description. And I added simple view appear and disappear effects.
13 June, 2018 – Day 13
The game had number of issues with cards hand. Cards moving was instantly without any animation. When hand had many cards they were placed outside of screen border. I reworked all this today and implemented any screen width support. Now cards overlay each other when they overflow hand size. Any hand changes are followed by special animation. All became work as I was seeing when started work on this task.
I got new issues after that, of course. For example, numbers on the cards are covered by another cards when cards amount is to big. But these issues are for future.
12 June, 2018 – Day 12
Today I implemented healing skill for monsters. The skill allows any monster heal himself. I needed new monster for that. I added new monster to ScriptableObject-Database and set all related properties. This monster got healing skill for testing. And probably he will get this skill in the final monster build. Implemented healing skill applies it’s effect to monster health, shows visual animations and play sound effect. The skill works in one time with damage skill as I didn’t implemented yet more complex monsters AI when monsters use their skills based on some rules. Monsters AI will be improved later when monsters will get more skills.
11 June, 2018 – Day 11
There was not be possible to exit from dungeon while all cards in the deck and hand had not been played. Only after that two additional cards was drawn to the hand: Pass Turn and Exit. Today I added possibility to draw this two cards from menu. I could make when player clicks “Exit” in the menu then current dungeon breaks and player navigates to the Main Menu. But I like mechanics when player breaks dungeon using cards.
10 June, 2018 – Day 10
This day I worked on DeckEditView. This view is complex. It allows to add or remove cards from two possible decks and stores cards in cards storage. The view functional is not final yet, so I didn’t try to make it’s final design I just worked on user experience and tried to make deck editing more easy and intuitive.
Left image is what I had before and right image is what I have now. Still bad but a bit better.
9 June, 2018 – Day 9
Two days ago I have implemented healing cards mechanics. The cards work good but I didn’t make good visual effect for them. I started with healing effect references on youtube to understand what I want. I checked bought before particle effects plugins. I didn’t found anything useful except cross image from the Particle Textures plugin. So, I had to implement particles effect by myself and I got following:
Also, I added to project TextMesh Pro plugin as I needed good outline for popup text. Now task where I must change all Unity Text components to TextMesh Pro components waits me in the backlog.
On above gif you can find that I added healing value text popup effect and life points bar changes it’s filling smoothly now.
8 June, 2018 – Day 8
Small progress today. Whole day I prepared production build for my main customer. Many bug-fixes. I finished after midnight. But I must produce daily progress in my pet-project. So, “Tiny backlog” helped me again. I took “Balance Validation: Cards” task and added several scripts which check cards upgrade prices and upgrade chains between cards with the same effects.
No any gifs today.
7 June, 2018 – Day 7
Today I started work on healing cards. Five cards with heal bottles images were created before. Five instances of HealEffect as ScriptableObject which can apply own effect to any Health object were assigned to Five heal cards. HealAbility catchs card played event and if this card is healing card it applies card HealEffect on player Health. I am going to apply the same HealEffect to monster Health later but HealEffect will assign to some monster ability as monsters don’t have any cards.
Next time I am going to implement player heal animation using particle system as I don’t like current one with +5 popping up.
6 June, 2018 – Day 6
I had a little free time today. So, I opened special prepared before node in the project’s mind map with name “Tiny backlog”, selected and done several tasks from there:
- Hammer card visual effect upgrade: add camera shake.
- SFX: Card draw from deck to hand.
- Update navigations between views: DungeonLootView always redirects to DeckEditView.
No any gifs today.
5 June, 2018 – Day 5
Today I worked on single task – drift UI effect. This effect is from “loops” effects scope. I can assign this effect to any object and it will run infinitely by circle. I experimented with rectangular and circle drift areas. And it is possible to use both areas now. The effect will add a bit life to some objects on screens. I am going to put this effect to my tween-peaks library on github after polishing.
I assigned drift effect to chest and two dropped cards and got following:
4 June, 2018 – Day 4
I planned two tasks for today. And I have done these tasks.
Fist is balance validation script. When I work on game mechanics by myself I usually add special scripts which automatically check all game data on some rules. This scripts are similar to unit tests but they don’t check code working. They check game data. For instance, each monster can have from 1 to 3 tips. So, I can add simple check that tips array size is inside [1, 3] borders. Also, I can check that each tip message has not empty string and this tip message is not too long. I can check that each tip unlock percentage value fits increasing order and finishes on 100%. Each such rule coding takes several minutes of work but will help to find any inconsistent data when new entities will be created and when any changes in balance will be done.
Other task is canceling card play. It was not possible to cancel selected card in the hand when card has input with several phases. Some cards play immediately when a player selected them from the hand (like heal or run away). Another cards need additional action. I added possibility to cancel such cards selection.
3 June, 2018 – Day 3
Today I have done two tasks from my backlog. First one was refactoring of stone cards object throwing effect to data driven model. Now I can add any new card with similar throwing effect without any new code and compiling. Second task is about dungeon field drag restriction, where player can’t drag field too far from screen device border.
2 June, 2018 – Day 2
I have done several tasks today. All of them are related to Investigation Popup where player can see monster investigation progress and monster tips. If investigation points are not enough monster tips are decorated by questions. Questions change to tip’s text (tip is unlocked) after good investigation progress. Most of time I spent to unlocking animation creation and animation polishing.
1 June, 2018 – Day 1
My daily task for first day was sword cards visual and audio effects. I searched reference videos on youtube and tried to reproduce one of them. I am not a graphic designer. I don’t try to make visual effects perfect. I just want that all required functional will be in the game and can be easy replaced to better one.
I use “everything is ScriptableObject” concept everywhere. All cards got VisualEffectData property. SwordSwish is a child data and it contains number of parameters.
Four data instances with different number of swishes were created and assigned to sword cards. I can at any time change sound effect and any another parameters without any code changing and compiling.
So, I got swish effect with random angle and monster kick-shake effect for each swish. It looks following now:
30 May, 2018
From 1st of June I decided to start writing game development log. Daily dev log. I was “to busy” last months and didn’t make any progress in my pet project. This frustrate me and I want to try this daily progress achievement method. I am going to make at least one task every day for one month. If I will not have free time I will select tiny task. If I will have some time I will select more complex one. And I will do at least one task every day. Also, I am going to write simple post about done work every day here.
This is screen of dungeon from my game:
Today my daily tasks were:
- Think about idea to make DevLog and make rough plan.
- Crate this page on the site.
- Handle new sounds from SAMPLER: Yesterday I got link from one gamedev telegram channel to free sounds set: PMSFXSAMPLER. I downloaded it today and listened more than 100 sound effects. I selected which of them can be useful in my game (several loops and about 10 sound effects).