Project: Sherlock – Dev Log 2 (Sprint 7)

August 25, 2018 at 10:48 am (Game Development, Games, Java, Processing, Programming, Video games) (, , , )


I’ve just posted a pair of videos showing off the new progress from Sprint 7 of the game I’m building in my spare time (progress is slow because I don’t actually have much spare time). Here are the two videos:

 

Some of the notable improvements are as follows:

  • A new anomaly object. This is shown off in the second video; it’s a ripple shader effect that warps whatever is behind it. It’ll be used for some sort of portal later on, or even just some sort of disruption. Not sure yet. I think it looks cool though.
  • Pathfinding added to the path manager. Now you can click on any node and the character will walk the whole path (instead of you having to click on the next adjacent node.
  • New character art added in. Still lots of improvements, but this is a big step.
  • New confirmation window. Asks a yes or no question and performs actions based on what the user selects.
  • New UI revamp. Cleaned up the awful placeholder UI with a nicer looking placeholder UI.
  • Hovering over a location will now highlight it, so it’s more obvious that it’s interactive.
  • Many minor improvements and tweaks to the engine code.

 

 

 

Advertisements

Permalink Leave a Comment

Project: Sherlock – Dev Log 1

August 18, 2018 at 4:22 pm (Game Development, Games, Graphics, Java, JavaScript, Processing, Programming, Video games) (, , , , )


This is the first dev log for a project I’ve been working on in my spare time for the past little while. What is it: it’s a game. Kind of a cross between Resident Evil (without the combat) and the overworld map from Super Mario 3. It’s built using the game engine I wrote myself several years ago. Here’s a small list of some engine details:

Game Engine Details:

  • 2D-in-3D sprite-based engine. Characters are 2D billboard sprites, while levels are 3D tiles and blocks
  • Physics engine (JBox2D)
  • Scripting engine (JavaScript)
  • Handles and organizes game and render code (Rendering uses Processing, which uses OpenGL and GLSL)
  • Level editor for building the scenes

 

So what have I done so far? Well, I’ve just finished my 6th iteration/milestone, so I’m going to take some time to work on the design and levels of the game before I implement more features (I have a big/growing list of features to work on though). Here is a brief video demo of the flow of the game at this point in time:

Here is a non-exhaustive list of the interesting stuff and features implemented for this project so far:

  • Set up a new game/app that uses my existing engine. Re-used most of my game art, etc. so I could get it together faster
  • Basic mechanics implemented:
    • Rails movement: Click on nodes to walk to that location
    • Actions: Some locations have specific actions the player can take, such as opening a door, taking an item, or searching that location.
    • Condition system: Some locations or actions have conditions (aka you need an item or to have done something). It uses a Mongo-like expression evaluation system.
  • Title screen and level select screen. Basic stuff, but had to be written
  • New game art:
    • New Character art and animation sequences. Still in progress, but right now it at least looks like a dude walking around the levels
    • New isometric pixel art for random objects in the levels. This is so the levels feel more like a world instead of an empty room
  • Task queuing system. Requirement for this type of game. You give the engine some work to do and it’ll do it in order (stuff like “move here, then play sfx, then do something else”)
  • Session auto-save system. Loads your game session when you boot up a level and manages everything you’ve done in the game (inventory, completed tasks, etc)
  • Various minor engine tweaks: Camera zoom, thicker walls, etc
  • Added a handful of levels and added a bunch of objects like wall art, desks, dressers, etc.

 

 

 

Permalink Leave a Comment

Video: Second demo for my game

April 3, 2015 at 3:38 pm (Game Development, Games, Processing, Programming, Video games) (, , , , )


I’ve finally gotten around to making a video recording of my new game demo! Part of my problem was finding a suitable video capture software suite. I ended up using Open Broadcaster Software, and it turned out fine; I WAS using KRUT, but it had issues with the audio capture.

Anyway, while recording it I ended up finding out that half of my rooms didn’t make it into the demo! I had an issue where a locked door led straight to the boss level. That kind of sucked. Here’s the video though:

Permalink 1 Comment

Project: DarkWolf2D (2D Dungeon Crawler)

January 10, 2015 at 4:30 pm (Game Development, Games, Graphics, Java, Processing, Programming, Rant, Uncategorized, Video games) (, , , , , , , , )


Over the holidays, I had some time to upgrade the core code for my game engine. I’ve upgraded the version of Processing that I use as well, which means I can use shaders for rendering along with some of the nicer JSON loading features. While I have a “version 2” of my engine working though, I haven’t yet retro-fitted it into my Zombie Mansion yet. This is coming in the future, but for “proof” that my code works, I’ve been putting together a small game based on a design I had in a dream. It’s the “basic” version of the idea, which means no multiplayer and no nice graphics.

The idea is for a dungeon crawler action game that takes ideas from the MOBA genre. I know how it sounds, but it’s actually a very basic idea and it’s already half built. It’s a player-vs-environment game right now where the player begins at level 1 for each dungeon and has to level up as they progress to bosses. The theme for it is an alternate history WW2 where the characters are different classes such as “US Medic”, “Russian Sniper”, or “French Resistance Fighter”. Each class has a basic attack and a list of abilities they can level up and use. I’m keeping the XP system as simple as I can (although I’ve never built one before), and I’m not using any items for the game right now.

For rendering, it’s a 2D game with no character animations; just a static side-shot image. This should keep the dev cycle pretty low for now. I also have a feature backlog that I’m considering making public, but for now I’ll only do that if I have anyone comment that they actually care to look at it. It’s a list of all the features that I plan on implementing (some are basic things like “add audio to the game”, and it functions as my “todo” list. As I build in features, I mark them as “Complete” and they shuffle to the bottom of the list for storage.

Edit: Added a screenshot. It’s very basic and you can’t really see anything worthwhile. Just showing that I can at least render the player in a level. I’ll make a video later.

First screenshot of DarkWolf2D

First screenshot of DarkWolf2D

 

Permalink Leave a Comment

Ant + Processing = Grief

July 4, 2014 at 8:20 am (Computer Science, Game Development, Java, Processing, Programming) (, , , , , , , , )


This will be a humorous post coming right after the article about how great automation is. After I finished writing my Ant scripts for automating my Java project, I ran into a wall; Ant can’t update a Processing library while the Processing Development Environment is running. For some reason, Eclipse is able to deploy JAR files and have them overwrite the existing library while the PDE is running though!

So now I have to figure out a way to make this work, or else I have to ignore all of the automation I put in. I may still use Ant to back up my code projects to an external hard drive, but that’s about it right now.

And then there was sadness.

Permalink Leave a Comment

[Video] Navigation in Zombie Mansion

April 17, 2014 at 7:31 pm (Game Development, Games, Java, Processing, Programming, Video games) (, , , , , )


I’ve done up some more rooms and made another demo video! This one shows how navigation will work in the game. Right now the camera is still orthographic due to some control scheme issues, but I assure you, isometric/diagonal walls looks pretty sweet as well.

Permalink Leave a Comment

Quick and Accessible Inversion of Control

March 14, 2014 at 1:37 pm (Computer Science, Games, Graphics, Java, Processing, Programming, Rant, Teaching, Video games) (, , , , , )


So by now you’ve probably at least heard of the magical beast known as “Inversion of Control”. You may even understand what it is. If you’re in this boat, why aren’t you using it more often?? (if you are, you can read the rest of this article with your head held high).

There are tons of places on the interwebs where you can learn all about Inversion of Control (or IOC), so it doesn’t make sense to write up a detail explanation and then have people correct me on it. The short version of it is that it lets you defer your problems to someone else (future you for example). You allow the implementation to be abstracted in such a way that you can conveniently inject it in such a way that would make your college programming professor proud and/or confused.

For this example, I am going to use PicoContainer and Processing. PicoContainer is an IoC library for Java, although you could implement what it provides yourself through a variety of techniques I won’t tell you about here. The idea is just to show you a brief intro to what it can look like. In my example, I have a Graph object. It is the “M” of our MVC, and we want to separate the “V” from it. This means that the bit of code that draws the graph on the screen is going to be extracted. The kicker is that the way we abstract it will allow us to re-skin the graph in whatever way we want, whenever we want. We just inject a new view without changing the model layer and we’re good to go.

/**
  This is our interface for abstracting the View from the model
*/
public interface GraphView {
  public void draw(PGraphics g, Graph graph); 
}

/**
  This is our Model: The object we want to abstract the view from.
*/
public class Graph {
  private MutablePicoContainer graphConfig = null;

  public Graph() {
     graphConfig = new DefaultPicoContainer();
  }

  public MutablePicoContainer getGraphConfig() {
      return graphConfig; 
  }

  public void draw(PGraphics g) {
     // I'd recommend caching the view ahead of time to remove overhead
     GraphView graphView = (GraphView)graphConfig.getComponent(GraphView.class);
     graphView.draw(g, this);
  }
}

Now here is the part that makes it all work. I’ve written this in Processing code, but it is essentially simplified Java anyway. In this snippet of code (although it is a working program if you include the previous snippets), I instantiate our Graph object and then inject a View. In this example I’m just showing the power of IoC by including an anonymous implementation of a View object. In the “real world”, you would have written it as a standard Java object.

import org.picocontainer.*;

Graph graph = null;
void setup() {
  graph = new Graph();
  graph.getGraphConfig().addComponent(new GraphView(){
      public void draw(PGraphics g, Graph graph) {
        g.pushStyle();
        g.stroke(200);
        g.noFill();
        g.ellipse(25, 25, 10, 10);
        g.popStyle();
    }    
  });  
}
void draw() {
  background(0);
  graph.draw(g);
}

Now to summarize, we have accomplished our goal of abstracting the view of the graph from the data represented by the graph object itself. This means that we could completely re-skin the visual representation of our graph without touching any of our previously written code. If we wanted to draw the draw in 3D, we could just inject a new implementation. If we want it to be rendered using only ASCII characters, we got this. In the case that you still don’t see the value of this, consider a game you’re probably writing right now in your spare time:

You have a general “GameCharacter” class that both the PlayerCharacter and AiCharacter classes inherit from (Because you’re object-savy and generally good-looking). Both of these allow you to draw the characters differently. What happens when you decide to add new AiCharacters that act exactly the same, but look different? Well, you could throw in an IF statement and just check a state variable…. OR you could abstract the view, just like in our example! When you construct the AiCharacter objects, you inject a View object that will do all the drawing. As an object-oriented purist, you feel content, and as a game developer you feel pleased that you were able to trim off an “IF” statement from your render loop. You high five yourself.

Permalink Leave a Comment

Impending game demo (by request only)

January 7, 2014 at 1:33 pm (Computer Science, Games, Graphics, JavaScript, Processing, Programming, Video games) (, , , )


So I’m working on getting some levels ready for a demo finally. I need to re-skin the levels to not use *ahem* borrowed art assets before I can do that though. Eventually, I’ll probably post it or public access, but for now it will be released by request only.

Permalink Leave a Comment

Zombie Mansion: Updates and screenshots!

November 13, 2013 at 6:32 pm (Games, Processing, Programming, Video games) (, , , , , , , , )


Yay! Screenshots! I’ve finally had some motivation to post some stuff on my project that isn’t 6 months old. I got a little side tracked with events and stuff, so I’ve been busy and unmotivated. Anyway, I’ve solved the issue I was complaining about in my last post, or at least I have a workaround for it, so it looks nice again. Also, I’ve been using Artisy: Draft for piecing together level designs and other stuff. It makes it a bit easier when I go to make levels in my editor if I have a fancy map telling me where to put stuff.

Anyway, here are some animated GIFs of my “game” right now. Note that they don’t really look right due to the GIF making process I’m using. For example, the animations and movements look really glitchy (and the particle effects die out) because the framerate dies when I record a GIF with the library I’m using. Also, the levels depicted in the GIFs are not finished and polished, so the floors look awkward, etc.

Basic room spin

Basic room spin

Shooting a zombie

Shooting a zombie

Pushing furniture

Pushing furniture

Permalink 2 Comments

Scripted Particle Effects

April 25, 2013 at 2:24 pm (Games, Processing, Programming, Video games) (, , , , )


This will be a short post (with no screenshots for now), but I recently finished full support for my scripted particle effects engine. This means you can create/modify particle effects entirely using Java Script. I think I need to make a few more modifications so it is more optimal, but it seems to be working great and there doesn’t seem to be any noticeable performance hit from it.

Permalink Leave a Comment

Next page »