• entries
17
30
• views
17677

A Mind That Is All Over The Place

## Working on symmetry math issues

I am struggling with symmetry math, because I noticed that something was broken (axis symmetry did not work any more, and fixing that broke something else ... or rather revealed that something never actually worked).

The details can be found in a thread:
https://www.gamedev.net/topic/656527-how-do-i-simplify-the-symmetry-math/

I make slow but steady progress on that battlefield.

Since the last screenshot I also changed the height between layers from tile size to 3/4 * the tile size.
The maps are more radable that way, I think, because parts of some covered tiles are exposed.

## Isometric View

I render more than just the central map piece now ... and it is now an isometric view.

There are still quite a few problems with it:

I do not wait with rendering until all the images have been loaded: I update the map each time one of the 9 images is loaded.
That means it will render the map several times with errors. Not exactly a bug, that is more like an unimplemented feature, right ?

I wanted to render without a grid, but the way I do the seams now does not allow that. I draw edges that lead to stripes in the resulting composed image. I would have to know something about the neighbor landscapes (or have access to the full map) in order to deal with that problem.

Pretty happy with the progress ... next on the list:

• Actually create items in a scene graph and use it to offer a controllable camera
• MOBA areas placed in a pseudo random way to get playable maps with bases, jungle spawns, special item spawns, lanes with arenas, sneak paths etc.)

Then I might add the menu game state with GUI entities ...

## Lamest progress ever ... working on the foundation

Made some changes in the 2D Map creator. I modified the implementation that I had into something that can be used as a superclass.
https://github.com/AndyThiel/raidaces/commit/ac5a18a04c93c0a42371b3da153f3c1433f46a30#diff-018fbfb70ceebe1c7ba76bb10f797e7d

Now game specific implementations can use the foundation and add/modify logic.
Especially the methodCreatorMap2D.prototype.forEachPixelToUpdate
comes in handy now. Iterating over one half of the array depending on the mirroring mode ... being able to reuse that with functions like this one is sweet:
CreatorMap2D.prototype.heightCellularAutomationAction = function(streamSource, map, indexX, indexY, mirrorIndexX, mirrorIndexY, neighborTopLeft, neighborTopCenter, neighborTopRight, neighborLeft, neighborRight, neighborBottomLeft, neighborBottomCenter, neighborBottomRight) { var newValueAmount = -1; var newValue = -1; var currentValueAmount; var currentValue; for (currentValue = 0; currentValue < 5; currentValue++) { currentValueAmount = 0; if (currentValue == map.mapArray[indexY][indexX]) { currentValueAmount++; } if (currentValue == neighborTopLeft) { currentValueAmount++; } if (currentValue == neighborTopCenter) { currentValueAmount++; } if (currentValue == neighborTopRight) { currentValueAmount++; } if (currentValue == neighborLeft) { currentValueAmount++; } if (currentValue == neighborRight) { currentValueAmount++; } if (currentValue == neighborBottomLeft) { currentValueAmount++; } if (currentValue == neighborBottomCenter) { currentValueAmount++; } if (currentValue == neighborBottomRight) { currentValueAmount++; } if (newValueAmount < currentValueAmount) { newValueAmount = currentValueAmount; newValue = currentValue; } else if (newValueAmount == currentValueAmount) { if (streamSource.consumeBoolean()) { newValue = currentValue; } } } map.mapArray[indexY][indexX] = newValue; map.mapArray[mirrorIndexY][mirrorIndexX] = newValue; // if ((map.mapArray.length / 2) == indexY) { // log("New height chosen: " + newValue); // }};
I was struggling with yet another bug. The maps were very biased. 0 was used almost exclusively, only at the edges other values had a decent probability. Counting the value of the current tile as well (not just the neighbors) brought the first improvement, dealing with the equal amount of tiles compared with the current maximum count in a pseudo-random way fixed the problem completely. That happens in the following code, taken from the function above: } else if (newValueAmount == currentValueAmount) { if (streamSource.consumeBoolean()) { newValue = currentValue; } }
I will write a different algorithm (which creates different levels without steep cliffs) soon and update the rendering.

The current state is pretty lame. It can be seen at ...

http://procgames.com/raidaces2/

...though.

Did some optical changes (different heights are suggested) and the maps are now symmetrical (sometimes point, sometimes axis).

http://procgames.com/raidaces/

The StackExchange question helped and my ego is on the verge of being crushed. Basically I let all the timers (25) start at the same time.
That is something that even my little Java concurrency experience should have told me can not be right.
For some reason I thought I could just set the time I want the CPU to be idle with setTimeout.
After I multiplied that time with the image index (0 to 24) it completes faster and it is more responsive, even if it is still a little bumpy.

I need to get better at thinking about what to change and play with when I struggle with this kind of problem.
Stupid brain ...

## Introduced GameState Change, new Problem ...

Created a repository at Github, guess that means I'll stick with the working title for a while.
https://github.com/AndyThiel/raidaces

I decided to commit a lot more in this case and try to really finish and polish it. So far the project was only supposed to be a playground for WebGL experimentation.

There is now a Java project which will at some point offer server side functionality. So far the project can not be built, though ... I just wanted to have a rough structure in place.
It will take some time until I figure out how to bring the technologies together (Ivy, Spring ... probably Jenkins and connections to a database for file storage - maybe CouchDB).

Currently I am working on the client side, though and that probably will not change for quite some time.
The latest big change was trying to move the map / image creation into a gamestate object in order to handle the process asynchronously.
Unfortunately I do not know enough about the lifecycle of those processes and have yet to really think the mechanism through.

What I have right now works mostly in Chrome and sometimes in Firefox (again!) ... but I am not even sure if it works correctly at all.
The loading information is shown, the mouse pointer does not say "busy", but the text can not be selected, so I guess something is still blocking.
Pretty often Firefox blocks everything for almost the entire loading process ...

http://procgames.com/raidaces/

Maybe looking into Closures can help with figuring out what I am doing and what I should be doing.

EDIT:
I asked the question on StackExchange:
http://programmers.stackexchange.com/questions/237863/how-can-i-fix-blocking-javascript-processes

A feeling tells me that the process is called asynchronously but still blocks everything, because the CPU works on the new process exclusively.
Maybe I have to use several setTimeout calls in order to free CPU resources (so that the tab / browser is never blocked)!?

## Found the drawImage problem ...

Found the bug I wrote about in the last post: drawImage worked in Chrome, but Firefox showed a white image.
http://www.procgames.com/raidaces

I was completely on the wrong track when I noticed that it sometimes works in Firefox when I call the update function after waiting 5 seconds.

What surprised me was that every time it worked it rendered images with only brown tiles, so I abandoned that track (well, also because waiting 20seconds did not improve the odds at all).
Because I am really ... and I mean REALLY bad at google searches I suspected color profiles (hey, they were mentioned in a canvas related stackexchange discussion ... along with green pixels ... can that be a coincidence?).

When I ruled those out I suspected caching ... that it somehow managed to render the all brown tiles images because one of them was cached at some point.
I confirmed that caches did play a role by using the reproducible way to generate maps. After a refresh, drawImage always worked and sometimes it even showed an old version of an image (not from the current map).

Of course it turned out to be the obvious thing. I need to wait for the load event of the image before I draw it to the canvas.
It is not that this thought had not crossed my mind right away when the error occurred ... for some reason I thought that was not relevant ... probably because I expected images to be transferred from canvas to img elements immediately - and in this case synchronously.

In hindsight it makes sense that the normal rules apply. After all, the image data is read using a dataURL.

## Scope Problem ... maybe?

Hi all,

after abandoning the simple game, I may have started something HUGE ... as in: a little too big as the next step, considering that it is just another "getting familiar with XYZ" project.

Eventually I want to create level, normal and depth maps through pcg methods and use WebGL & shaders for interesting 2D lighting effects.
It is not that there is no progress. I think what I have so far has potential ... but there are quite a few battles that need to be fought.

• A map with 256 x 256 tiles is created randomly (so far the array stores values 0 and 1 only)
• Cellular automation is used to get a smooth result
• A landscape creator serves as a cursor into the map and it translates the map into renderable chunks
• 25 x 3 images are rendered (map areas around the players position), so far only the level map is drawn in a very basic way, normal and depth map stay white.
• So far the contexts are still 2D canvas contexts. A part of the landscape at the center is copied to the main canvas.

http://procgames.com/raidaces/

For some reason Firefox does not do the last part: transfer the image to the main canvas.
It does work for me in Chrome. Not sure if that is a bug in my code ... there is no error message shown by Firebug.

At least I know now that my Java approach with stream sources works in JavaScript as well:

For reproducible content:[code=js:0]var MIN_SEQUENCE_LENGTH = 40;var MAX_SEED_VALUE = 123321;//// StreamSourceFixed//function StreamSourceFixed(seed1, seed2) { this.currentNumber1 = seed1; this.currentNumber2 = seed2; this.bufferSequence = "";}StreamSourceFixed.prototype = Object.create(AbstractStreamSource.prototype);StreamSourceFixed.prototype.constructor = StreamSourceFixed;//// Methods//StreamSourceFixed.prototype.consumeChar = function() { return String.fromCharCode(this.consumeByte());}StreamSourceFixed.prototype.consumeByte = function() { this.updateBufferSequence(); var number = parseInt(this.bufferSequence.substring(0,3)) % 256; this.bufferSequence = this.bufferSequence.substring(3); return number;}StreamSourceFixed.prototype.consumeShort = function() { this.updateBufferSequence(); var number = parseInt(this.bufferSequence.substring(0,5)) % 32768; this.bufferSequence = this.bufferSequence.substring(5); return number;}StreamSourceFixed.prototype.consumeInt = function() { this.updateBufferSequence(); var number = parseInt(this.bufferSequence.substring(0,10)) % 2147483648; this.bufferSequence = this.bufferSequence.substring(10); return number;}StreamSourceFixed.prototype.consumeLong = function() { this.updateBufferSequence(); var number = parseInt(this.bufferSequence.substring(0,16)) % 9007199254740993; this.bufferSequence = this.bufferSequence.substring(16); return number;}StreamSourceFixed.prototype.consumeDouble = function() { throw "error_double_not_supported";}StreamSourceFixed.prototype.consumeBoolean = function() { this.updateBufferSequence(); var number = parseInt(this.bufferSequence.substring(0, 1)) % 2; this.bufferSequence = this.bufferSequence.substring(1); return 1 == number;}StreamSourceFixed.prototype.updateBufferSequence = function() { while (MIN_SEQUENCE_LENGTH > this.bufferSequence.length) { this.bufferSequence += this.currentNumber1; this.bufferSequence += this.currentNumber2; var sum = (this.currentNumber1 + this.currentNumber2); while (MAX_SEED_VALUE < sum) { sum -= MAX_SEED_VALUE; } this.currentNumber1 = this.currentNumber2; this.currentNumber2 = sum; }}
... and the random one:[code=js:0]//// StreamSourceRandom//function StreamSourceRandom() { StreamSourceFixed.apply(this, [ Math.floor((Math.random()*MAX_SEED_VALUE)+1), Math.floor((Math.random()*MAX_SEED_VALUE)+1) ]);}StreamSourceRandom.prototype = Object.create(StreamSourceFixed.prototype);StreamSourceRandom.prototype.constructor = StreamSourceRandom;

## I'll call it a game ...

Here it is: http://www.procgames.com/demos4/notprocatall.html (might have seen that coming if you saw the last journal entry...)

Well, it is anything but finished ... only in the sense that I will not work on it any longer ... and it is buggy as hell.
I implemented the recursive trickling of merged tiles the ugly way ... and I did add

• the removal of full rows (as a way to deal with low numbers under higher ones)
• score counter
• and a game over screen (which has a hard time showing up but it usually does eventually).

I would feel bad, because giving up is not a habit I should get into, but I think I can make a strong case for investing energy elsewhere:

1.) I am not turning this into a habit. I work as a programmer and I have to search for bugs and work on the same code for weeks or month. The resilience is there, working on this project would only be a nuisance.
2.) I have reached the goals:

• I know how to use the cavas now
• I have done something with JavaScript ... I even used some OO, even if the code is pretty bad
• What I have gives a nice enough impression of what a combination of the game mechanics feels like

3.) If this idea can be turned into a real game it would take a lot of time and effort to find out how ... a lot more than just working on the game a few more days.
4.) It is not something that people are interested in. Hopefully nobody will study the code. People also apparently don't want to see a tutorial about basic games (https://www.gamedev.net/topic/654740-what-are-you-interested-in/?mode=show)
5.) It has nothing to do with procedural content generation ... which is what is currently occupying my mind. My heart is not in the project ...

So what is next?:
probably some more HTML5 / JavaScript experiments, this time with WebGL and without letting the code rot as much.
[quote]

You reached level 7 with 3787216 points.[/quote]

## Trickier than I thought

Combining the logic of Tetris and 2048 is trickier than I thought.

Not even figuring out what I want the program to do ...
the logic gets more and more complex and the special cases are a nuisance.

What I have so far is tiles that can penetrate tiles with the same number, tiles that merge when a block collides while same-number-tiles are on top of each other ...

http://www.procgames.com/demos/notprocatall.html

... and the beginning of freshly merged tiles staying active.

http://www.procgames.com/demos2/notprocatall.html

The biggest problem is the approach I picked:
the current block is modified and contains only the merged tiles, while the other tiles (collided ones and numbers that are not stacked) are put into the game field and stay stationary.

The remaining block keeps moving as long as it does not collide, but that is still too strict.
The tiles should trickle down independently until all of them have collided.

I thought using the existing block collision method was a smart thing to do, because I want the player to have control over the new pseudo-block.
That would be doable, but the problem is that within a round there should be several collision tests now (will the merged tile move in the next round, or is it not alive any more?) ... which really does not quite fit ...[code=js:0]GameStateDefault.prototype.update = function(gameContext) { this.isMovingBlocked = false; this.frameAge += this.getFrameDuration(); if (this.frameAge > this.getTurnDuration()) { this.frameAge = 0; this.handleNextTurnEvent(gameContext); this.copyFieldToCanvas(); this.copyBlockToCanvas(); gameContext.clearRect(0,0,640,500); gameContext.fillStyle = "#edc22e"; gameContext.font = "bold 20px Arial"; // this.gameplayField.draw(gameContext); // this.gameplayBlock.draw(gameContext); var indexX; var indexY; for (indexY = 0; indexY < this.fieldHeight; indexY++) { for (indexX = 0; indexX < this.fieldWidth; indexX++) { this.drawTileAndMerges(this.getXOffset(), 0, indexX, indexY, this.canvasArray[indexY][indexX], this.mergeArray[indexY][indexX], gameContext); } } this.previewBlock.drawAt(this.getXOffset() + (this.gameplayField.width * this.getTilesize()) + 10, 10, gameContext); } this.frameCount++;}
...[code=js:0]GameStateDefault.prototype.checkForCollisions = function(gameContext) { // var message = "this.gameplayBlock.isRigid: " + this.gameplayBlock.isRigid; // var aliveCount = 0; var blockPosX = this.gameplayBlock.posX; var newBlockPosY = this.gameplayBlock.posY + 1; var gameplayBlockArray = this.gameplayBlock.blockArray; var indexX; var indexY; for (indexY = 0; indexY < gameplayBlockArray.length; indexY++) { var fieldIndexY = this.gameplayBlock.posY + indexY; for (indexX = 0; indexX < gameplayBlockArray.length; indexX++) { var fieldIndexX = this.gameplayBlock.posX + indexX; if (TILETYPE_NONE != gameplayBlockArray[indexY][indexX]) { if (this.fieldHeight <= (newBlockPosY + indexY)) { //if (this.gameplayBlock.isRigid) { return 1; //} else { //this.gameplayField.gameArray[fieldIndexY][fieldIndexX] = gameplayBlockArray[indexY][indexX]; //gameplayBlockArray[indexY][indexX] = TILETYPE_NONE; //} } else { if (TILETYPE_NONE != this.gameplayField.gameArray[newBlockPosY + indexY][blockPosX + indexX]) { if (gameplayBlockArray[indexY][indexX] != this.gameplayField.gameArray[newBlockPosY + indexY][fieldIndexX]) { //if (this.gameplayBlock.isRigid) { return 1; //} else { //if (this.gameplayField.gameArray[fieldIndexY][fieldIndexX] == gameplayBlockArray[indexY][indexX]) { // gameplayBlockArray[indexY][indexX] *= 2; // this.gameplayField.gameArray[fieldIndexY][fieldIndexX] = TILETYPE_NONE; // aliveCount++; //} else { // gameplayBlockArray[indexY][indexX] = TILETYPE_NONE; // this.gameplayField.gameArray[fieldIndexY][fieldIndexX] = gameplayBlockArray[indexY][indexX]; //} //} //} else { //aliveCount++; } } } } } } // showMessage(message); //if ((false == this.gameplayBlock.isRigid) && (0 == aliveCount)) { //return 1; //} return 0;}
...[code=js:0]GameStateDefault.prototype.handleMerges = function(gameContext) { var mergeCount = 0; var gameplayBlockArray = this.gameplayBlock.blockArray; // var activeTilesBlockArray = this.activeTilesBlock.blockArray; // this.activeTilesBlock.posX = this.gameplayBlock.posX; // this.activeTilesBlock.posY = this.gameplayBlock.posY; var indexX; var indexY; for (indexY = 0; indexY < gameplayBlockArray.length; indexY++) { for (indexX = 0; indexX < gameplayBlockArray.length; indexX++) { if (gameplayBlockArray[indexY][indexX] != TILETYPE_NONE) { if (gameplayBlockArray[indexY][indexX] != this.gameplayField.gameArray[this.gameplayBlock.posY + indexY][this.gameplayBlock.posX + indexX]) { this.gameplayField.gameArray[this.gameplayBlock.posY + indexY][this.gameplayBlock.posX + indexX] = gameplayBlockArray[indexY][indexX]; gameplayBlockArray[indexY][indexX] = TILETYPE_NONE; } else { this.gameplayField.gameArray[this.gameplayBlock.posY + indexY][this.gameplayBlock.posX + indexX] = TILETYPE_NONE; gameplayBlockArray[indexY][indexX] = (2 * gameplayBlockArray[indexY][indexX]); this.gameplayBlock.isRigid = false; mergeCount++; } } } } return mergeCount;}
The weekend is approaching, though ... so I am confident that I will think of something ... soon enough

## Getting to know the Canvas

I am familiarizing myself with JS and HTML5, Canvas first ... not WebGL yet.

The first thing I am trying to do is programming what I had in mind when I heard that there is a combination between Tetris and 2048.
Not sure if the game mechanics will make a lick of sense, but I want to know what it feels like.

Working Title: NPAA (Not Proc At All)

I have not managed to keep the code clean, so I will have to refactor soon.
I also need to look at articles about object oriented programming in JS.
What I have so far are procedures, procedures, global constants and variables and ... procedures ... and already the if/else statements annoy me.

So far I can cycle through the different block types and their rotations (with the arrow keys).
The delayed response to the user action is a feature, not a bug btw.
In the actual gameplay the response will be immediate.

The next step will either be writing some ugly gameplay logic ... or researching and refactoring.

## Game Jam Focus

The last Journal Entry inspired a reply ... which inspired an Advert:
https://www.gamedev.net/classifieds/item/2992-game-jam-tools-team-effort/

My next steps will probably be in the web development / quick prototyping domain, no matter how we decide to follow up on the Game Jam Team effort idea. Some sandbox projects, feasibility studies and probably some tool development ... that does sounds like fun.

If at all possible I want the PCG rulebooks to play the role of an artist to some degree ... meaning I would like the content creation to be automated and an artist would just feed the rulebook some meta information (ideally).

What I can not shake is the desire to see where combining [color=rgb(40,40,40)][font=helvetica]

[/font][/color]

## Struggling ... what are the next steps

Hi all,

for some reason my brain does not work the way I want it to work right now.
Guess work plays a role, it feels like a thought deadlock :-/ ... so here is a braindump for personal clarity.
I don't even know if I have posted something similar recently.

Probably the conflicting goals are one problem:

• I want to finish something asap ... 100% and polish it ... don't even know why.
• I want to apply lean startup principles and become an indie developer ... but I guess I am too chicken to ever actually do that.
• I would like to write tutorials ... guess that is something I should forget about until there is actual demand. Right now I might have a hard time striking a nerve. Guess I should focus on writing Journal entries that are somewhat interesting instead ...
• There are several things that I would like to use for my projects that do not exist yet. I kinda want to develop those as libraries, but I know that takes some doing and I would spend years on those projects.
• I want to study stuff and apply what I learn. Using Voronoi Diagrams, Bezier curves, differnt kinds of algorithms etc in innovative ways sounds like fun ...
• I want to create cool, actual games.
• I want to create tools (a Content Studio that uses Procedural Content Generation).
• I want to develop for Desktop PCs and Android ... but also get into web development with HTML5 and Web GL / Web CL.
• I would like to team up with people, but again, I guess that is something that does not make sense right now.
• I want the convenience and clarity of Java ... but also the control over memory management for features like Blender style RNA file loading / memory management.

What I an not interested in (at all):

• Overly traditional game development without an innovation factor (I want PCG in there and something unique).
• Invest a lot of time in learning a complex framework and figuring out particularities of existing software.

Guess that means ...

... wellll ...

nah braindumping did not help. I still don't know if I want to go for Java, C++/SDL or Web GL first ...
bleh

## GWT Troubles

I really wanted a very plain GWT website online asap, but I guess it is not that easy because of the path I have chosen.
I can run the web application in DEV-Mode, but I can not use the GWT compiler to create a deployable client version.

It complains because it can not find a file from the GIN-Module ... so it seems as if the way Ivy currently handles the library management is fine for the Eclipse build process but not for the GWT compile process.

My ant-based compilation script is hopelessly work in progress. If I try to finish those things first I will never get anything online - because I die from boredom.
Why does everything have to be so complicated? Sigh ...

Guess I will either try to port what I have so far to Maven ... or ask a colleague for help and actually invest the time in setting up Eclipse, Ant and Ivy properly.

## Starting a new project ... series

I will try to squeeze some time into a project where I can bring several ideas together and just toy with them.
I registered the domain: http://www.procgames.com and I am working on a GWT based website.

The plan is writing a tutorial series while creating a framework for procedural content generation (and games that use it).
Maybe I will also write some tools that use it.

As always I have too many ideas and they all are too complex.
It does not help that my job takes up most of my time and energy.

What I do not want to write are step-by-step tutorials.
I want to summarize my thoughts in order to give beginners an idea of how programmers think.
I wrote pretty much the same thing some time ago ... just with a different kind of project in mind:
https://www.gamedev.net/blog/1692/entry-2256578-my-two-favorite-ideas/

I already have a rough GWT project structure in place. I just need a strategy for the server side.
Apache is running on port 80, it is a virtual server with Confixx where procgames.com is one of many domains.
I would love to run Jetty, but I don't know how to host the client via Confixx, deploy the server logic with Jetty and connect client and server through a REST API with AutoBean. I would consider using PHP to realize the relatively simple REST API - but I have too much respect of serializing as a JSON String that needs to be parsed by AutoBean on the client side.

There is also a frame for the procedural content generation library written in Java already.
I might apply the concept behind it to different languages.
The next step is coming up with a rough gameplan.

## Nobody Into Collaboration?

In a way some opinions in this thread (Reality TV Drama About Game Development?) inspired this blog post, even though I have been thinking about the topic for a while. What part of following a huge team working on a huge project can possibly be "boring"?
I know I am kinda guilty of that myself ... but it pains me more and more to see how much people are into competition, how they want to be smarter than everybody else and stick to their way of doing things.

After reading The Seven Habits of Highly Effective People my way of thinking about projects, standards and collaboration changed a lot.
Interdependence (with independence as an option to fall back on) is a step forward from independence - you only compromise if you are not going for proper win-win situations. Doing what is important is better than doing what is urgent because less and less urgent tasks will come up ... things like that. Standards don't have to lead to uniformity ... they can make diversity manageable if designed and used properly.
Still people love isolation and value their independence. Why? Probably because everybody still sucks at collaboration.
Shouldn't we get better at it?

The book Abundance really adds to my frustration with the way things are going now. It outlines how linear thinking is a problem in times with exponential technology ... but it totally makes a case for "competition over collaboration" which is really stupid if you ask me.

P2P efforts, Creative Commons, Web Standards, Open Source, Crowdsourcing all seem like nice steps in the right direction, but they are just pieces of the puzzle. Also, the mindset within those movements is still too much a product of the free market economy paradigm.

I think I might write a book (Damn The Isolation Age) about my vision of what a collaboration age could look like and why I think our current paradigms are not future proof at all.
I want a seamless software experience. I hate the small app trend ...

## My two favorite ideas

Hi again,

I think I will replace the current content of the site ConceptWorld.org with a more simple site and take a lean startup approach to see if it can go viral without much effort.
The idea is that I can concentrate on developing the platform while a developing community creates the appeal of the world ... not doing my work for me, but working on their own commercial projects.
I will write more about the philosophy in the "Thoughts And Convictions" category. As a first project I think an anthology or a serial (published as an ebook ... and if the demand justifies it as a print version using the service CreateSpace) might be a great, first project.
Would have loved to program the server side with Node.js ... but I can't set that up (the redirect to port 8888).

The 2nd idea is working on a multiplayer sports game with a web portal behind it. That would mean people could play tournaments and keep track of their accomplishments.
The players would be controlled in a way that is comparable with Starcraft II micro. I would probably start with a soccer implementation but keep it abstract and generic enough to allow for other implementations.
The plan is documenting the whole development process and releasing the documentation as tutorials ... and releasing the code as open source on github. The focus would not be on the pogramming languages or the game mechanics, but on the big picture knowledge and the required skills like project management, programming concepts, software architecture, build process options / continuous integration and things like that (mentioning several other ways to do the same thing and showing links to further information).
People should be able to follow along while programming a very different kind of game.

I have 4.5 years of programming experience as a Java programmer, but I want to get into C++ again and learn some new things while working on the project. I am hoping to get feedback when I am stuck or when tutorials are wrong or incomplete ... so that this turns into a living community project.
Currently the plan is using

• C++ and OpenGL for a game client
• GWT, with Gin (for IOC) for a web portal
• GWT, with Guice (for IOC) or Node.js for a game server
• SCRUM for project management (yes, I like using that approach even as a lone wolf)
• Maybe Jenkins for Continuous integration
• Ant for the web server and portal build process, maybe Maven for dependencies
• JUnit for web server and portal unit tests (maybe TDD - Test Driven Development)
• Not sure which technology for the build process of the game client (should be portable Win, Lin, Mac ... mobile only if there is a smart way to support a gamepad - it might not work without the precision of a mouse)
• GIT as the version control system
• Is is allowed to release articles on Gamedev.net and another website?

The goals:

• A 3D sports game (easy to learn, hard to master)
• A portal website that stores results and maybe profiles with achievements
• Maybe a coaching mode where players and teams can get better
• A simple, generic game client engine
• Tutorials that show the big picture of how you can think like a programmer
• Maybe a simple local game server that allows for a single player mode.

If possible there could be a NeHe like site that shows implementations of the same thing with different technologies and different approaches that solve the same problems.

I might host a game server and add a supporter subscription feature to try to make some money at some point ... or sell the tutorials as an ebook or as video tutorials.

## Some project ideas #001

Guess the title is supposed to be kind of funny ... I have way too many ideas and am probably going to dump a lot of them here over time.

I finally wrote some of my ideas down for a coursera.org course: Startup Engineering. This is the result:[quote]
1.) Project Management Social Network:

There are many networks and websites with project management like Kickstarter, Sourceforge and Google Project Hosting.
But one platform for them all would probably be a blockbuster startup.
The facebook of project management where you can
* browse categories
* recruit people
* expose it to the world
I am surprised that this has not been done properly yet.

Another thing that I am into, rapid skill acquisition, could be a part of that network, too. Think gamedev.net with all the articles.

2.) a) Meta Data Services:

The IT landscape will have to become more abstract and automated in the very near future (exponential thinking).
Everything is connected and the way development works currently won't work in the semi near future.
One thing that bothers me (has been bothering me for years as a Java Programmer) is how applications can't work together.
There are interesting things like PMML and other standards by the W3C but they don't take off.
There should be a pretty low level layer over the internet LAMP/WAMP setups that offer meta data services.
At some point computers will want to understand the world (Siri could be smarter, no?). We should create a model of the whole world that way.
Software should be written so that it can work with evolving models which it can retrieve directly from a UMLMS (UML management system) with UMLQL (UML query language).

b) Abstract Programming:
CASE (computer aided software engineering) software/services could use the Meta Data Services which that layer provides to generate code, build it and possibly deploy it.
At first people would design the software and how the builders turn the abstract software into compilable/deployable code.
At some point that can probably be automated that people won't have to program software anymore.

3.) Shared Intellectual Property World:

There is a lot of money to be made in the entertainment industry. Big franchises have a huge appeal because of that.
Many people want to jump on board with commercial products but they can't legally do that.
I would love to see a social network around an open effort that creates a world made up of shared intellectual property rights.

4.) Entertainment Studio:

See 2.) a) and take a look at procedural content generation. Virtual reality will play a really big role in the near future.
People want to enter epic worlds and the company that offers procedural content generation services will make a lot of money.
Those services can then be used to make movies, games, images and things like that.
With those services there could be a software that helps filmmakers with rapid prototyping for their movies.
As soon as there are databases with textures, animations, models and sounds
(hopefully captured by electronic pets and drones)
the quality will be good enough to create top notch movies in very little time.
I think it should already be possible to take little steps in that direction. Think MakeHuman and a better bridge to Blender.

That would be such a cool playground. Especially once cool things like multibody dynamics are added ...

5.) Fermi Scenario Social Network:

People don't play thoughts nearly often enough. Heard of TVP (The Venus Project)? They complain that they'd need data to take the next steps and start planning.
But according to Enrico Fermi we can estimate pretty much anything.
A social network that collects some data, lets users posts Fermi problems and lets others try to solve them might be fun.

6.) Sound From Scene Graphs

Getting the sounds for animated movies is pretty weird. This is a tough challenge, but solving that problem would be worth a lot.
There should be a ray-tracing equivalent for sound (wave tracing like that: http://blenderartists.org/forum/showthread.php?252708-E-A-R-Evaluation-of-Acoustics-using-Ray-tracin...)
that takes a scene graph and time as input and outputs sound. Something like that will be needed for VR products and would be great for the Entertainment Studio product.[/quote]

Usually I would try to pull off a lean startup with the Shared Intellectual Property World, but webserver administration is totally too much for me.
(Also see my proxying to node.js thread: Mod Rewrite - Node.js).

Another thing I would love to start is writing a series of programming tutorials that show the big picture knowledge (how all the topics are connected, what angles there are to approach the topics and what problems certain technologies and solutions solve).
Guess it would describe different approaches to realizing certain project ideas - especially in the web development and game programming department.

And a site: commonsfiles.com with shared intellectal property and files released under creative commons licenses would be great, too. For example with a subdomain http://ouya.commonsfiles.com that holds conceptart, bitmapfonts, spritesheets and 3D models of characters for the OUYA that anybody may use in their projects.

Eventually I would love to get access to the new media world in some way.