360

Damage shader, 360 noscope

attackspeed

attack speed online

attackspeedbug

attack speed works just as intended

boomboom

delicious

fucklighting

dynamic lighting all done, a few bugs to kink out.

invincible3

working on some shaders, this one being some sort of invincibility

particlerework

Particle system optimized vastly

test1

 

It in action

I haven’t posted in a while, so I’ll just dump a large amount of stuff I’ve done. (WARNING: SHITTY GIF QUALITY)

6m19d2013yp1

Texture loading and optimization complete

6m28d2013yp2

Normal mapping online

bunny

Animations/AI/Bunnies

chaseScene

More AI stuff, vision boxes and detection

leverMechanics

levers/switches for traps and doors

forceShield

Working on spells and projectiles

ratPlosion

Projectiles, spells, murder

 
2m25d2013y
Loading system introduced for generating levels beforehand.
2m26d2013y
Dungeon tile set, level-loading from file, and dungeon creation online.
2m26d2013yp2
Yep, can still break barrels.
 

Here’s a little explanation on the dungeon level generation:

First, for simplicity I had the level generated based off of an image loaded at boot. Here is an example of what that image might look like:


a5a872bc124528f996cdc146b2010c5e
 the map: each pixel representing a tile

Next, I set up a sprite sheet representing all of the possible positions of wall pieces to create the dungeon.  With these and the knowledge of adjacent wall pieces, we can create a dungeon with connected wall pieces throughout.

Deciding which tile to use can be simplified to what surrounds it. Here is a figure I’ll be referencing:


positions
 

Say the 1, 2, and 4 tile are present. We would then select from our sprite sheet the wall piece that represents a bottom right corner. If 5 is present, we’d have to choose an entirely different block.

I’ll use a notation for defining its position using a set of necessary boolean values (booleans not affecting the output tile omitted). For example, the bottom right corner piece requires position 1, 2, and 4 to be true (I already said that), but it also requires that 5 and 7 be false (otherwise they’d be different pieces). However, the value of 3, 6 and 8 make no difference in this case. Therefore, we can abbreviate this tile piece to: (1, 2, 4, !5, !7).

tilepiece

(1, 2, 4, !5, !7) tile

How do you know whether a tile position is require not (!tile) or not relevant (not included in notation or check)? Well, using the 8-bit system that I’ve been describing you’d have to consider that each tile has numerous exit points.

5975b5c0ecebe6c5cfb8659d3a3703de

possible exit points (the point to which the graphic extends)

These are all of the possible positions of which the tile’s graphic can end. Positions 2, 4, 5, and 7 fill the adjacent wall’s graphic out to the shortest exit point. If two of the cardinal positions are true and adjacent ((2, 4), or (2, 5), for example),  and the in between corner position is occupied (1 and 3 respectively), then that corner’s exit point is pushed to the wall (corner point). Here are some pictures showing that action taking place.

03026d903c11de8fcb357c81e370f79d

positions 2 and 4 are occupied, so the exit pointof the graphic is close to the corner, but because the corner piece is not occupied, it it not filled to the corner like the other corners.

77655f66047e0d270e39d6953bc84d83

Pic 1: (tiles not to size), Pic 2: adding an 8 tile, Pic 3:  with appropriate fill

69424130c8bca8b287e900297085ae1e

The thought process of removing a corner piece

This means that sometimes the corner pieces are relevant to the selection of the tile (both nearby cardinal tiles are occupied), and other times the existence of corner tiles makes no difference. This is how we’d decide whether a tile is !tile or just non existent in the notation.

Now that I have each tile’s value, all I have to do is determine the current tile’s value and find the matching tile (from the sprite sheet). Finding the current tile’s value requires checking the existence of an identical tile type in each of the (1 through 8) tile positions.  For example, if a tile at position 1 exists, set 1 to true else to false (!1). Afterward, find tile of identical criteria and place tile. There should only be one tile with each criteria if done properly.

tiling
 All of the tile positions (pre rotation)

ieTiles

The finished product

Do remember, using a large number of boolean values would be silly despite what was described prior. You should try implementing a bit field containing all of the positions’ values, explained in further detail here:  Adventures in Bitmasking

2m10d2013y2

Is this right? I can’t tell.

2m11d2013yp3
Some order is made. Detection of closest face online.
2m11d2013yp4
Distinction between visible faces somewhat established.
2m16d2013y
Cutting of faces (for blocking blocks) online.
2m18d2013y
The loop through all of the wall points has been created.
2m18d2013yp2
Getting closer.

 

If I know anything about this lighting, it’s that I’m pretty close to finishing this portion. And by portion I mean the “light detection” or where the light beams should go. Afterward, I’ll have to tackle the lighting effects (how the lighting affects the environment) and I’ll probably put up a write up on my light detection method. Back to woik.

1m3d2012

Oh god, how does box2d work?

1m8m2012y

box2d/sfml data synced up

1m16d2013y

Joints online

1m27d2013y

The beginning of the user interface. Inventory created with synced information to in-game items.

1m29d2013y

What have I done
farmersAssemble 
Can’t blame them with the economy nowadays.

1m29d2013yp3

Inventory gets a graphical upgrade. Equipping/unequipping online.
2m7d2013y
 Bobby Heinrich joins the party. UI messages online.
newcharacters
New characters added.

2m6d2013y

Inventory gets an upgrade. Mahogany online.
doodooodoooo
  In an attempt to appeal to larger audiences, Blue has been introduced. As suggested by Patrick.

2m10d2013y

Lighting has begun.

 

5bd2b5dcf8036fb602a8e4d614809db6

Arrow physics and collision detection online.

8af06fd2f34b428898fd750f0feec36c

“Breetles” on treads and basic AI online.

da9bfbc0e2f78f8a9947de97d94ec214 (1)

Small environment created, I drew some stuff.

9c722572cee55c13482da7a08237f00a

Zaljin decides to give me some art to work with.  Animations and health bars introduced. Arrows are replaced by glowsticks.

12m10d2012y

More art, collisions upgrades.

12m14d2012y

Oh god, that rock. 

 

Written in Java using the LWJGL and SlickAndCode.

Zaljin’s work:  zaljin.com.