Java 4K: Starkiller
03/02/13
When I was developing Here be Dragn, I kept being drawn to the Java Gaming forum when I googled issues.
I've been checking it for a while and I discovered the 4k Java competition tucked away. I'm very new to the concept, as shown by the fact I started trying to acheive that class limit uncompressed.
I havent tried the compression tools on it yet, though I think it should sneak just under 4k.
I'm quite proud of the sneaky things I've done to make it work:
-
The objects are points in 3d space, they get translated to the camera then rotated using a AffineTransform class, and projected to a plane.
-
The graphics2d scales the affinetransform and draws a Polygon shape on that. It isnt a scaled polygon, it just appears so when its rendered.
-
The hit detection translates the screen coordinates of the target (200,200) into the local space of the polygons to see if we've hit one. This only happens when shooting.
Ludum Dare (LD25):
03/02/13
I joined the Ludum Dare contest about 12 hours in. Given the theme of "You are the villain", I decided to create a game about playing a dragon eating people.
The original idea was playing Smaug from the hobbit trying to get his jewel back in a map shooter, but it just ended up being a bit of a centipede clone in the end.
As I had not got any sounds or many resources, I submitted in the Game Jam, and ended up spending a few odd days here and there smoothing wrinkles out.
I was quite happy in that I overcame the GC issue (I learnt how to reuse objects).
I stopped developing when i got bored with playing the game and would have liked to have got animation working, though the resouce creation process was going to be a lot of work..
Strangely, for all the work I put in afterwards, the game is very similar to the LD version.
This is probably a project effect whereby the majority of the project takes a small amount of time, and the last 10% takes absolutely ages. Theres a software engineering name for that, though I've forgotten it.
The archers and swordsmen here were redone from the LD version and I added things such as dragon dies and swordsmen attack.
Link (.jar)
Game design course and Gamemaker executables:
30/07/11
I did a course with the Open University on games design. This was useful in showing some game design concepts, and most particularly,
it isnt a game without fun or a purpose!
All these games were developed with Gamemaker, which has a couple of issues (I dont like people downloading exe's, and I ended up doing most of the game logic with timers and drag and drop icons instead of sweet Java code), but is pretty good for
rapid prototyping of ideas.
Mission 2 had you doing airdrops in a disaster zone. The game logic was the same, except the helicopter had a crate emitter instead of a ladder. As with the other mission, if you didn't collect enough money, you ran out of fuel and crashed.
Link (.exe)
Mission 1 had you airlifting people out of a flooded village. The characters would move up the ladder object if they were over it, and vanish and give points when they reached the helicopter.
Link (.exe)
The final project was to create a game for a charity to use to show the work they do and engage people long enough to hopefully donate.
Link (.exe)
I decided to create a game like Harrier attack, though it ended up looking coincidentally like choplifter.
Third step: Write a game design document. I was so engrossed in the idea I went one step further and implemented it.
Link (.exe)
I really loved the scampering movement but was a little confused about how to create levels.
Second step: Make a maze exploring game.
Link (.exe)
I had to hack around a hamsterdance gif for the characters.. It is quite clear that I was lost with creating tilesets!
First step: Customise the point click game "Catch the clown".
Link (.exe)
The blue clown eats the green ones and lowers your score, but you can nudge the blue clowns out of the way and farm the green ones.
Site created and updated with games and projects:
12/07/11
Before gamemaker I was experimenting mostly using Java. I generally use Java2D for the 2d games, and the open source lwjgl wrapper JMonkey Engine for the 3d ones.
Click
here for playable version on a webpage!
The biggest problem with this game was probably the garbage collection that pauses the game every now and again.
I used gfxr for all the sound effects (there was another 50 not included in game), and used Adobe Illustrator to make the resources.
I wrote a story arc for this game using storyboards.
I decided to participate in the latest Ludum Dare 48 hour game contest "It's dangerous to go alone, take this!", and although I had something playable by the end, it was too difficult and it took a week to make it work as a .jar.
This is a prototype with the hitboxes of the objects on.
A post on Notch's blog suggested that a low-fi minecraft would be cool. I created a basic point and click program which added and removed blocks on a screen.
I had an idea to add spells and make the game a sidescrolling Roguelike, but I discovered Terraria already did this!
The green dot was going to be an object which fell until it hit a present block.
To create a larger environment, I decided that an array would not work for my program, so I experimented with Quadtrees to grow dynamically and lessen the quantity of data, especially as most would be missing, or blocky anyway.
This graphics editor splits the quad at that point, and then recurses 4 levels through the tree to that block size.
A better image editor could vary the depth.
I updated a Car Physics demo in JMonkey to look prettier, use a free model and have a better racing feel.
Movie.
The mountain terrain is attached to the skybox and follows the player.
Movie.
The walls are there to keep the player on the track with a light touch, but the car tends to go flying quite often.
Movie.
I added some particles to the tyres when ultra-speed was active, but it makes the car too fast!
Movie.
To make my levels, I made a track editor. The track follows the white line, and the actual track points extend perpendicular to this without intersection issues.
This picture demonstrates the Catmull-Rom interpolation.
This picture demonstrates the Catmull-Rom interpolation.
This picture demonstrates the Catmull-Rom interpolation.
This shows a better attempt at building SVG functionality with GL Shaders.
The pixel shading means that fading textures with transparency and shape clips would be easy to do.
I thought it would make for especially flawless and vivid textures, with intricate level of detail.
Especially for bumpmaps and specularity.
After managing triangles, rectanges, circles and ellipses, I tried to create Bezier curves by distorting a shallow semi-circle with affine transformations. This was imperfect.
The red dotted line shows where the blue ellipse should be.
I adapted two tests so I could both run around on the terrain without physics and shoot red floating balls.
They respawn behind the player and keep going.
I decided to make a game in a week and went for a completely ambitious design which incorporated elements from tests of the physics and graphics system from JMonkey.
The movement is tank movement, and the staff fires where pointed. The model was a retextured and armed version of
Psionic's 'armless zombie model.
There is a video
here.
I got intrigued on how to make a lightning effect based on a question in the forum. I ended up creating points in space and moving them randomly between one source and the other, and a program found a path through these points and displayed the result, with a brighter line for segments closer to the center of the axis.
Second foray into the 3D Java JMonkey API. Got lost making the clouds pretty. The effect is created by a semi-transparent terrain painted in white at different heights. This is merged with a bloom shader which makes it brighter depending on where the sun is.
First foray into the 3D Java JMonkey API. Got lost making white billboards shift slightly in position so they appeared to be twinkling stars.
Trying to use the Catmull Rom Spline to recreate 3d terrain from a contour. Didn't work out as I wanted it to.
I had a go at CVG for meshes but it was difficult. I had the idea to subdivide triangles on the edge of another object, and remove the internal triangles, and then polish the result, but the bounds.contains method did not work.
Trying to get the overlapped area of two chords on a circle in a program.