# Finished & Post Mortem

1061 views

Please check out my project page to play Shapes Tower Defense
You can play it on GameDev!

A Huge thank you to all those who've helped me out with this game.  There were quite a number of us encouraging each-other along and I thought, and think, that that is just fantastic.

POST MORTEM

On the outset I was hoping to spend a lot of time on the game play.  But I wasn't able to devote as much time to game play as I would have liked.  In the future I think at least 50% of development time, if not more, should be spent play testing and tweaking.  But Over-all I'm quite satisfied with my implementation of the ideas I set out with in my first blog regarding this project.  Came together quite nicely.  I think all of my years of experience with THREE.js helped me fast track many of the steps that maybe new-comers to the API would have to learn the hard way.

What went Right:
Using my own 3D program helped out tremendously, I don't think I could have created all the unique shapes ( over 30 ) if not for that.  I think there is value in creating your own 2D and 3D suits.  though they would be much much simpler, you can create them to suit you needs.

Expected development time and debugging was quite accurate, I'm surprised.

I enjoyed making this game a lot, and I think the part I enjoyed the most was looking up Johnson Solids and making them.

What went Wrong:
Like lawnjelly said, gimp is a nightmare.  I'm a bit more familiar with it now but what I've learned about that beast is that it's probably incredibly easy for those who know what hot keys their pressing, but for me, a Microsoft paint wiz, it was terrible.

I didn't devote as much time to game play as I was expecting to.  And game play is a whole different animal.  I'm so used to technical problem solving that switching over your mind set to deal with something as ambiguous and subjective as game play was a challenge, especially since I only gave myself 5 days to do it.  But thankfully lawnjelly was a big help and he pointed out a lot of design flaws that I had over-looked.  I think I got most of them that he mentioned.

My code, It's bad.
I documented things as best I could and tried to label things but once the complexity of this project grew I could no longer keep things tidy or orderly.  Sure I named variables 'vectorOne' instead of 'v' but the code lacks coherent structure.  By the end I was confused as to where I had put things.  Clearly much work to be done in this area.

All and all I enjoyed the experience a lot, and I became closer with some members.  Win / Win

Have a great weekend.
Awoken

I cannot seem to get the wave to start on the web-version. Is there a hotkey to start the wave? Or am I missing something?

Also, your download doesn't have a file extension at the end.

##### Link to comment

hmm, not sure why the file doesn't have an extension.  I uploaded a .zip

As for a hotkey, press 's', sorry about that.

##### Link to comment

Thanks I'll try it shortly after I'm done my entry. Almost done my "basic" game haha .

##### Link to comment
2 minutes ago, Rutin said:

Thanks I'll try it shortly after I'm done my entry. Almost done my "basic" game haha .

If I remember correctly, you had mentioned you lived on Baker Island?!?

##### Link to comment
1 minute ago, Awoken said:

If I remember correctly, you had mentioned you lived on Baker Island?!?

No, Alberta. Next to you.

##### Link to comment
2 minutes ago, Rutin said:

No, Alberta. Next to you.﻿﻿

But if you lived on Baker Island  it'd only be 4:53pm

##### Link to comment
3 minutes ago, Awoken said:

But if you lived on Baker Island  it'd only be 4:53pm

Thankfully the time limit is based on UTC -12, once that time is at end day it's over. So that is 6 am July 8th 2018 for me.  But I'll be done tonight.

##### Link to comment

@Rutin I updated the project file now.  It says 'TD.zip' instead of Shapes Tower Defense.  As well I made a menu and begin stage button.

##### Link to comment
10 minutes ago, Awoken said:

@Rutin I updated the project file now.  It says 'TD.zip' instead of Shapes Tower Defense.  As well I made a menu and begin stage button.

Awesome! Cannot wait to play

##### Link to comment

I just played it and beat it, so it is a possible game to beat.

##### Link to comment

I just managed to beat it:

Wasn't quite prepared for the air attacks at the end!

##### Link to comment

Finally I found your project page : - D ....  Played it till wave 10 man... what's cool about your entry is it an HTML5 Game... LOOK MOM NO NEED TO DOWNLOAD TO PLAY IT ^_^y

##### Link to comment

Beat it! I had some issues with the targeting upgrades not applying but was able to win! I put the AA in the back which caused me to burn some crystals.  Great game!!!

##### Link to comment
On 7/10/2018 at 11:15 PM, Rutin said:

Great game!!!

Thank you, I enjoyed the game too, but of course I made it so I am liable to be biased.  I still have ideas for it and if it seems enough people play it over the next few months I may revisit it too.

I officially consider myself a Game Developer.

##### Link to comment
On 7/10/2018 at 11:15 PM, Rutin said:

targeting upgrades not applying

I was going to ask which upgrades these were specifically.  I never clarified in the game but if you selected 'user select' then those towers will target what ever shape the user clicks on.  they should all work, unless you found a bug I've got to fish out.

##### Link to comment

The issue happens with Cannons which I can re-produce 100% of the time. When I click on the bottom left upgrade (weakest), then click on another upgrade it locks and wont work. I have to keep trying back and forth to toggle it - at times it wont even allow a click and just highlight the text. See the GIF below:

##### Link to comment

Posted (edited)

k I'm on it, thanks for the heads up.

[ edit: bug is fixed.  What was happening is that when you clicked on 'strongest' it was selecting the tower beneath and assigning that targeting priority to it. ]

[ edit: When I fixed that last bug I introduced a new bug.  But alas the game works as it should now.  Sorry for the bugged release.  Should be good to go now. ]

Edited by Awoken

## Create an account or sign in to comment

You need to be a member in order to leave a comment

## Create an account

Sign up for a new account in our community. It's easy!

Register a new account

• ### Similar Content

• Hello, i want to share my project with others just for not being the only person who knows about it
I think i'm not completely beginner, so i decided to try some game. I'm still learning game mechanism so probably this project is for testing purposes.
I started as a website developer so i am coding in javascipt. Of course i will learn new real programming languages like C++ or java but probably in near future. For now js is enough for me
This is my first video from the game just to show features i've made. It was recorded some time ago, so there's more small features now, just need to record new video
Please let me know what you think about it(don't look at rpg maker textures, it's for testing purposes, ofc in official release i will made my own txt) and what features would you like to see in the future.
P.s: sorry for my bad english, i'm still learning(and for no HD in video )

• Hello.
I'm trying to implement normal mapping. I've been following this: http://ogldev.atspace.co.uk/www/tutorial26/tutorial26.html
The problem is that my tangent vectors appear rather obviously wrong. But only one of them, never both. Here's my code for calculating the tangents:
this.makeTriangle = function(a, b, c) { var edge1 = VectorSub(b.pos, a.pos); var edge2 = VectorSub(c.pos, a.pos); var deltaU1 = b.texCoords[0] - a.texCoords[0]; var deltaV1 = b.texCoords[1] - a.texCoords[1]; var deltaU2 = c.texCoords[0] - a.texCoords[0]; var deltaV2 = c.texCoords[1] - a.texCoords[1]; var f = 1.0 / (deltaU1 * deltaV2 - deltaU2 * deltaV1); var vvec = VectorNormal([ f * (deltaV2 * edge1[0] - deltaV1 * edge2[0]), f * (deltaV2 * edge1[1] - deltaV1 * edge2[1]), f * (deltaV2 * edge1[2] - deltaV1 * edge2[2]), 0.0 ]); var uvec = VectorNormal([ f * (-deltaU2 * edge1[0] - deltaU1 * edge2[0]), f * (-deltaU2 * edge1[1] - deltaU1 * edge2[1]), f * (-deltaU2 * edge1[2] - deltaU1 * edge2[2]), 0.0 ]); if (VectorDot(VectorCross(a.normal, uvec), vvec) < 0.0) { uvec = VectorScale(uvec, -1.0); }; /* console.log("Normal: "); console.log(a.normal); console.log("UVec: "); console.log(uvec); console.log("VVec: "); console.log(vvec); */ this.emitVertex(a, uvec, vvec); this.emitVertex(b, uvec, vvec); this.emitVertex(c, uvec, vvec); }; My vertex shader:
precision mediump float; uniform mat4 matProj; uniform mat4 matView; uniform mat4 matModel; in vec4 attrVertex; in vec2 attrTexCoords; in vec3 attrNormal; in vec3 attrUVec; in vec3 attrVVec; out vec2 fTexCoords; out vec4 fNormalCamera; out vec4 fWorldPos; out vec4 fWorldNormal; out vec4 fWorldUVec; out vec4 fWorldVVec; void main() { fTexCoords = attrTexCoords; fNormalCamera = matView * matModel * vec4(attrNormal, 0.0); vec3 uvec = attrUVec; vec3 vvec = attrVVec; fWorldPos = matModel * attrVertex; fWorldNormal = matModel * vec4(attrNormal, 0.0); fWorldUVec = matModel * vec4(uvec, 0.0); fWorldVVec = matModel * vec4(vvec, 0.0); gl_Position = matProj * matView * matModel * attrVertex; } And finally the fragment shader:
precision mediump float; uniform sampler2D texImage; uniform sampler2D texNormal; uniform float sunFactor; uniform mat4 matView; in vec2 fTexCoords; in vec4 fNormalCamera; in vec4 fWorldPos; in vec4 fWorldNormal; in vec4 fWorldUVec; in vec4 fWorldVVec; out vec4 outColor; vec4 calcPointLight(in vec4 normal, in vec4 source, in vec4 color, in float intensity) { vec4 lightVec = source - fWorldPos; float sqdist = dot(lightVec, lightVec); vec4 lightDir = normalize(lightVec); return color * dot(normal, lightDir) * (1.0 / sqdist) * intensity; } vec4 calcLights(vec4 pNormal) { vec4 result = vec4(0.0, 0.0, 0.0, 0.0); ${CALC_LIGHTS} return result; } void main() { vec4 surfNormal = vec4(cross(vec3(fWorldUVec), vec3(fWorldVVec)), 0.0); vec2 bumpCoords = fTexCoords; vec4 bumpNormal = texture(texNormal, bumpCoords); bumpNormal = (2.0 * bumpNormal - vec4(1.0, 1.0, 1.0, 0.0)) * vec4(1.0, 1.0, 1.0, 1.0); bumpNormal.w = 0.0; mat4 bumpMat = mat4(fWorldUVec, fWorldVVec, fWorldNormal, vec4(0.0, 0.0, 0.0, 1.0)); vec4 realNormal = normalize(bumpMat * bumpNormal); vec4 realCameraNormal = matView * realNormal; float intensitySun = clamp(dot(normalize(realCameraNormal.xyz), normalize(vec3(0.0, 0.0, 1.0))), 0.0, 1.0) * sunFactor; float intensity = clamp(intensitySun + 0.2, 0.0, 1.0); outColor = texture(texImage, fTexCoords) * (vec4(intensity, intensity, intensity, 1.0) + calcLights(realNormal)); //outColor = texture(texNormal, fTexCoords); //outColor = 0.5 * (fWorldUVec + vec4(1.0, 1.0, 1.0, 0.0)); //outColor = vec4(fTexCoords, 1.0, 1.0); outColor.w = 1.0; } Here is the result of rendering an object, showing its normal render, the uvec, vvec, and texture coordinates (each commented out in the fragment shader code): Normal map itself: The uvec, as far as I can tell, should not be all over the place like it is; either this, or some other mistake, causes the normal vectors to be all wrong, so you can see on the normal render that for example there is a random dent on the left side which should not be there. As far as I can tell, my code follows the math from that tutorial. I use right-handed corodinates. So what could be wrong? • By Gafami Dear community, I would like inform you that "War IOM" v2 have been re-work graphics and added more feature to serve user experience. Here is my banner screenshot: You can access to the website and play it directly on your phone (Chrome mobile, Safari iPhone, iPad) or your Laptop Link to play: https://www.iomgame.com/wariom/ ++++ Game description: The rule to win the game is very simple: buy the soldiers, defeat the enemy army and then destroys the flag. Try to use fireball to wipe out the enemy. The game had the shop to buy new soldier, upgrade soldier and choose the team out. Game data be stored on both user's device and server so never lost data again. ++++ Here is the look and feel of War IOM icon on your Home-screen phone Rumor: You can get double gem receive if you beat the mini boss at level 3. Also win level 3 will give you a lot of Gem, use it to buy new solider and upgrade your army! My facebook page: https://www.facebook.com/Iomgame-245553622715070/ /******** Change log update 08/26 ********/ -- Add new game play for level 6. -- Improve camera. -- Improve game performance. /******** Change log update 08/31 ********/ -- Improve sound load time. No painful for waiting sound loading any more! Regards, Gafami • I've created a HTML5 2D canvas game and I'm now ready to take the step and convert it to a native Android (and iOS) app. The game works perfectly fine in any desktop or mobile browser. Animations are fast and smooth. After some research, I decided Cordova was the way to go to create native apps for Android and iOS. My first priority is Android, simply because I have an Android phone myself and I don't have a Mac (which apparently is required to build iOS apps). I have looked at Cocoon.io and although that might be an even better option than Cordova (since it's actually build on top of Cordova), the thing that made me run from it is the fact that it costs$500 just to remove the "build with Cocoon" splash screen...
After installing all prerequisites (cordova, Android Studio, nodes.js) building my first APK was easy.
When I ran my game in the Android emulator, the game was abysmally slow... Testing it on my device yielded the same slow results. After searching the internet, I figured it was because on some devices, an old and slow WebView is used by native apps to display HTML5 content. Still strange since my phone uses Android 7.0.0 and the emulator uses Android 8.0.0...
I quickly found FastCanvas, a PhoneGap/Cordova plugin that adds a very fast canvas "compatible" rendering surface. But it was last updated in 2013 and after trying to get it to work for almost 16 hours straight, I came to the conclusion there's no way to get this to work with the current version of Cordova.
I then found CrossWalk-WebView. This too was pretty old and a pain to get it to work with the current version of Cordova. And when I did get it to work, I quickly found out it created a few new problems making my game unplayable (noticeably a strange lag when touching the screen. Not the famous 300ms input lag, but after touching the screen, the entire game would freeze for 200ms-300ms). So I had to give up on Crosswalk as well.
So now I am at a loss. Can anyone offer me suggestions on how to speed up canvas rendering in Cordova? It's pretty darn frustrating that my HTML5 game is finished and I'm ready for publication, only to find out that's not as easy everyone says it is...
(BTW, I've posted the same question on a few other forums to reach as many game developers as possible.)

• i have a problem i can make work the verificay if user existe our not
i using nodejs ,express,mysql
i put my link to project in github the code its to big
https://github.com/Kammikazy/project
find the soluction to my problem

×