GGC2020 – Day 11

GModStore Gamemode Competition 2020!

 

Day 11 Progress

Lots of progress with the weapon systems today!

First of all I moved the weapon code out into separate classes and changed from the hard-coded base sprite to a modular system, so now each new weapon can define its spritesheet & UVs, along with its weapon stats (damage, spread, sounds, etc)

To demo this I created 5 new weapons!

Pistol, Shotgun, Machine Gun, Laser, & Rocket Launcher

GGC2020 – Day 9

GModStore Gamemode Competition 2020!

 

Day 9 Progress

A lot of today’s work went into refactoring the animation prototype from yesterday out into modular data files with separate scenes & animations, removing the repeated code and making new animations super easy to add!

Then I worked on getting the basics of the system maps working, so now the player’s ship starts in a basic test system with a sun and a single planet, and flying close to the planet triggers the landing sequence! Cool!

I still need to hook this up with other player ships, and implement proper collision checking between them all, then also get the hyperlane network in so players can navigate between different systems!

GGC2020 – Day 7

GModStore Gamemode Competition 2020!

 

Day 7 Progress

Took a much needed break for a few days and I’ve been struggling to get back into the swing of things, so I decided to do something fun and prototype some landing animations for players touching down on planets. Inspired by Freelancer!

Next steps.. I still need to refactor a tonne of stuff now that I have a better grasp of the full gamemode concept, but that’s boring.

So I might prototype some more tomorrow! Thinking about having planetside areas control like in Freelancer, with a fixed point camera and mouse input.

I’m trying to do a lot of workarounds/fake interactions/areas like this in order to allow a massive possible play space, not just confined to the Source engine map maximum bounds

GGC2020 – Day 6

GModStore Gamemode Competition 2020!

 

Day 6 Progress

Lots of minor tests/tweaks, in particular messing with the 2D ship system/overview map – this still doesn’t line up 1:1 with the ships real positions, and the collisions are slightly off.

Also worked on adding doors to the interior of ships, which can be opened currently by using them directly, though the plan is to have these have way more interesting interactions later on – maybe controlling them remotely like FTL, or locking/unlocking them as in Void Bastards to control the enemy.

I’m also considering having some sort of basic cabin pressure/hull breach mechanics to make things more interesting here.

GGC2020 – Day 3

GModStore Gamemode Competition 2020!

 

Day 3 Progress

Today the big focus was starting the ship piloting/overview map (currently just in the top right of the player’s screen at all times)

Different ships can be travelling around on this map and collide with each other! Though there’s no captain’s chair yet so WASD moves the FPS character and the space ship 🙂

Tomorrow I plan to combine these disparate systems a bit more with basic ramming/boarding of other ships!

GGC2020 – Day 2

GModStore Gamemode Competition 2020!

 

Day 2 Progress

I focused a lot on the player movement interactions today to get the heavy feel I wanted, with view punches when you walk & chunky sound effects. This included getting some weapon first person view models in to test the style, though it looks a bit weird currently with the 3d enemies (default HL2 Combine Soldiers)

I expanded the ship editor system to support different sized parts, rather than just the 1×1 basics from yesterday, and made it spawn a physical ship with some placeholder enemies inside

As you can see in the video below I was also testing some lighting solutions a little, as I want to be able to power ships on/off via subsystems and have lots of interactions!

Tomorrow I’m probably going to start looking into the piloting/navigating of ships!

GGC2020 – Day 1

GModStore Gamemode Competition 2020!

[I competed back in 2018 with Heavy Gullets!]

The themes were announced last night; Space, Start With Nothing, or Procedural Generation

 

Ideas

 

Space

I’m currently leaning towards the space theme, taking inspiration from games like Void Bastards and Heat Signature.

Dungeon-crawly ships to loot and plunder!

 

Day 1 Progress

To that end I wanted to get started with the actual ships as soon as possible, so today mostly focused on making this Ship Editor! A top down layout/floorplan editor with modular pieces from Spacebuild

Currently only supports 1×1 size tiles but works with save/load support & collision!

 

I also experimented a little with some 2D billboarding inspired by Void Bastards

I’m planning to post my progress at the end of each day, so we’ll see how long that sticks!

Stellaris In VR-is

Now available via Github for anyone who wants to take a look at the inner workings

 

How it works

A beautiful bodge

Manipulating the view

Resetting the view to the center of the galactic map uses a series of AutoHotkey commands to zoom out, drag the mouse to orient as top down perspective, and then open the console and use the “goto 0 0” command to center the map.

Opening panels is always handled via hotkeys, which means VR-is doesn’t actually have knowledge of which panels are open/closed, only estimations based on an expected blank start state and the history of hotkeys it itself has pressed.

 

Different panels

To achieve the effect of having multiple panels open at once, those that aren’t currently open in Stellaris have their view paused (e.g. opening the technology panel will capture and freeze the view of planetary administration so it can be referenced but no updates will be visible!)

Currently panels are updated if the player touches them with their controller

Going forward this should be expanded into a full ScreenManager class which controls each individual panel and chooses which is being updated when (perhaps based on which one is the closest the the player’s view, and so probably what they are interested in)

 

Ship/Planet selection

These are simply handled by using the hotkeys 1-9, hardcoded in Unity for mockup purposes to be the planet on 1 and the fleet on 2

 

Sending input to Stellaris

AutoHotkey moves the mouse cursor based on relative position of VRTK controllers over each panel

 

Loading Systems/Hyperlanes

The Stellaris save format can be converted to JSON via this tool, which allows VR-is to display an overlay of the map ontop of the main screen (seen in the video as pink hyperlanes)

 

Requested features

Player at the center of a holographic galactic map

Possible and pretty easy based on current features, placing the player in the center of the galactic map loaded from the save.json would allow them to interact with this holographic/resizable/rotatable map while the code transforms this input back into 2d screen space to click the mouse for fleet movement

 

Ship art based on the selected leader background

Possible I guess, just a lot of art work

 

Communication on main screen

Not sure how to detect when communication arrives, but otherwise easy to place in a panel in the scene somewhere

 

Home planet visible from windows

Possible but it would be a static view, due to only being able to have one camera!

 

Multiplayer, commanding the same empire

Possible by streaming Stellaris capture to all connected players, and sending back and input via AutoHotkey, however in this bodge solution they would quickly be overwriting/messing up each others commands as they all try to input at once

Maybe it would have to work like an old timeshare? Haha

 

Galactic community

I imagine this as putting on an AR headset overlay which would display the community voting chamber, and being able to see the actual empires in the balconies of the side they are voting for!

Unfortunately I don’t see how this could be possible currently other than trying to do image recognition on the empire flags, or just hardcoding it

 

Project navigation

Supports SteamVR currently but others would be easy to add due to VRTK

Assets/StreamingAssets contains all the AutoHotkey scripts:

  • panic.ahk – Useful in case you lock yourself in Stellaris through panel interactions (Ctrl+F1 will exit play mode in Unity)
  • resetview.ahk – Run when the player hits the “Reset View” button in VR, tries to recenter the view as top down and showing the whole galaxy

 

Required

Stellaris

Tom’s Hotkeys (Stellaris Mod – adds ability to open Tech panel on T)

OBS (May have to scale down output resolution due to resource intensity of Stellaris and OBS and Unity)

OBS-VirtualCam (Target “OBS-Camera”, no buffered frames)

AutoHotkey

Unity 2019.3.4f1

Stellaris Save to JSON

 

Related:

Portfolio Page

Painting Prototype

Today’s prototype!

I was inspired by playing the beautiful Eastshade (an open world painting game) but was disappointed to find no painting minigame, so of course I just had to mock one up myself.

It was originally implemented with the plan of simply using the mouse cursor to paint but then I remembered this plugin which allows the Leap Motion Controller to be used in Garry’s Mod, and again – just had to try it.

 

How it works is actually really simple!

The player performs a short calibration at the start; by positioning their hand (yes, hand – the brush is just a prop :]) to define 3 corners of the game window.  Then their hand can be tracked relative to these to allow painting, with distance from the screen being converted to brush size.

So when the player decides on a perspective to paint a raw, normal screenshot is immediately taken and stored locally.  From there it’s just drawing to various render textures in order to ‘reveal’ the part of the image under the brush & applying the selected ‘paint’.  I’m using what I learned from the Magic: Anomolies to apply shaders & post-processes to the ‘paint’ to achieve different effects – these different styles are linked to the numpad as a sort of mock artist palette!  These render textures caused a lot of issues with them not handling transparency as expected & their lack of documentation – but the end result is so worth it!

 

I had forgotten just how much fun the Leap is!

We used it for our Tragic Magic jam game and the added physicality is always just a blast!


Magic: Anomalies

PART OF MY EXPERIMENTATION WITH IDEAS FOR INTERESTING MAGIC SYSTEMS

Took a break from working on the magic crafting system/UI to quickly prototype this idea my friend DrMelon suggested; Anomalies inspired by S.T.A.L.K.E.R.!

They are procedurally generated; each with a custom visual shader effect and physical buff/debuff effect (a poison debuff in the above video). The closer a player is to the center of the anomaly, the faster the effect is applied to the player and the more intense the visual effects become.

Magic: Crafting UI Implementation

PART OF MY EXPERIMENTATION WITH IDEAS FOR INTERESTING MAGIC SYSTEMS

Aha! It works!

(Left: regen buff applied by spell | Middle: Spell Crafting UI | Right: Debug output of spell reasoning)

I’ve now tested these basic example components with some friends online and can really see the system’s potential coming to life!

However I need to think some more about the layout of the UI if I want to be able to support some more complexity… One idea would be to stick with the foundations of the current design, but make it work recursively to allow as many components as the player wants. I made a quick mockup of this (shown below) but I worry this will also fast become cluttered and unreadable.

(Notice that EYE_TRACE has two possible subcomponents so these split the space and become half size. These pos offsets would all execute one after the other.)

Magic: Crafting UI

PART OF MY EXPERIMENTATION WITH IDEAS FOR INTERESTING MAGIC SYSTEMS

I made some quick mockups of a few different ideas I have for the way the crafting UI should look/how players interact with it.

Attempt 1, Spaghetti:

In my first attempt my thoughts were focused on the pure freedom I want to incorporate, which led to this really open but potentially really confusing/cluttered design.  While I like the idea of bigger spells having a convoluted/spaghetti feel to them, this isn’t inline with my desire for the player to be able to read/adapt their spells at a glance during fast-paced gameplay.

Attempt 2, Ordered Recipe Grid:

This more grid-based design solves these issues well I feel! Now it’s really obvious what components a spell can support, and it makes swapping things in/out as simple as dragging&dropping. Can’t wait to implement it and get a real feel for the possibilities of this system!

Magic: Crafting

Part of my experimentation with ideas for interesting magic systems

Something I always want out of magic systems is true spell crafting, whether its premeditated and UI based like in The Elder Scrolls, or done on-the-fly as in Magicka. In this experiment I’m trying to find a happy middle ground between the two; one that supports the depth and possibilities of a more complex system while still allowing players to adapt as they play & avoid spending too much time ‘stuck’ in the UI.

Here’s an example of how this spell is expressed in code:

local comp = {
    Name = "HEAL",
    Type = "SPELL",
    Cost = 100,
    Invoke = function( self, ply )
        print( "Try invoke HEAL" )
        local trigger = self.SubComponents["Trigger"].Value
        local invoke = function()
            local ent = MM_InvokeComponent( ply, self.SubComponents["Patient"].Value )
            ent:AddBuff( 4 )
            MM_Net_Invoke( ent, self.Name .. " " .. ent:Nick() .. " because " .. trigger )
        end
        MM_InvokeComponent( ply, trigger, { invoke } )
    end,
    SubComponents = {
        -- Ent to heal
        ["Patient"] =
        {
            Type = "TARGET",
            RequiredType = "Entity",
            Value = "TARGET_SELF",
        },
        -- Trigger
        ["Trigger"] =
        {
            Type = "TRIGGER",
            RequiredType = "Number",
            Value = "TRIGGER_HURT",
            -- Value = { "TRIGGER_TIME", 0 },
        },
    },
}
MM_AddComponent( comp )

Each SubComponent here will eventually be switchable in-game using a node based UI.

One idea for the possible gameplay is that players start with no knowledge but can find these components littered around the map; each one opening up new possibilities for spell combos.

Magic: Drawing from the world

Part of my experimentation with ideas for interesting magic systems

In this system mana, the resource consumed when casting spells, must be drawn from a physical location in the world.  Each player has a variable reach around themselves within which they can draw in mana.

(Player’s view. The dashed circle represents their reach. Notice that the inside is dark as mana has been drained from this area)

The idea here was to create a tactical element to gathering mana, which should force players to move around more as they deplete all sources in their area.

 

To achieve this in Garry’s Mod I used a 2d array representing positions on the map (no verticality). Whenever the array is altered, each client is notified to update their mana render texture (a top down view of the map with black squares where mana has been consumed). This texture is then used to project light onto the map from above, leading to the effect pictured.

(An aerial view of the map. Black areas are void of mana, having been consumed by a player)

Heavy Gullets: Portals

The goal of the portal gateway from the main lobby was to create an awesome first impression of the game, as this is players’ entry to each level it is the first thing they will see (and then continue to see often).

(The portal effect seen when travelling between levels. Sequence lasts around a second)

By curving the direction of the particles over time I was able to create the simple but convincing effect of the tunnel bending around in various directions before reaching the destination and spitting the player out.

(The effect seen before entering a portal; A hole is cut in the wall with stenciled rendering)

The portal has a gravitational pull on any nearby players, which was then extended to affect the plantlife (notice the tuft of grass to the left of the portal) – again with the goal of making the world seem more real through interactions and feedback.

 

And here’s a view of the full interaction:

Heavy Gullets: Plantlife

One of my core focuses while creating Heavy Gullets was polish & good game feel. I wanted to make the world feel really alive by adding reactions to the player in every aspect of it. This began with particle effects, however the aspect I’m most proud of is the plant interaction. If a player or bullet moves through a plant then it rustles and bends away from the collider (all clientside). This is a really simple effect accomplished by lerping the plant’s angle in the direction of the collider’s velocity, with some added squash and stretch to the scaling, but has a has a huge impact on the feel of the game!

Magic: Tracing Runes

PART OF MY EXPERIMENTATION WITH IDEAS FOR INTERESTING MAGIC SYSTEMS

Inspired by classics such as Arx Fatalis and Black & White, I wanted to create a magic system involving drawing.

(Tracing a simple rune, linked to making the player fly forward. In this case the rune’s design is (East:1,North:1,East:1)

The rune detection simplifies any drawn shape in to a list of 2D vectors – each rounded to one of 8 compass directions. These are then checked against all defined rune shapes and accepted within certain thresholds. Runes themselves are defined with an ordered list of compass directions and their corresponding distances (Direction:Distance).

 

Future Note: I went on to use this system in my virtual reality magic prototype VR! Photies

Rainbow Jam 2016 – Day 2

Second day of #RainbowJam16! Pathing & AI

rainbowjam7_crop

Added some rudimentary pathing to the dungeon generation today to allow npcs to navigate & move towards target locations.

The room prefabs now contain interconnected AI pathing nodes which have their door connectors linked to other rooms: making the complete web of paths (I couldn’t use Unity’s navmesh system because of the dynamically generated dungeons).

The actual path finding would need more work to be efficient but I wanted to get something up and running as soon as possible for the jam.

Still don’t know what the game is.

Rainbow Jam 2016 – Day 1

Today marks the start of #RainbowJam16!

rainbowjam4

Using Unity 5 to create… something. Not sure what the game will be yet, but I wanted to have a go at some nice procedural dungeon generation.

I’m quite happy with what I have so far, it uses room prefabs with connection points to string together the rooms with grid based collision detection.

Currently needs some tweaking ensure it always generates with a minimum number of rooms but I’ve made good progress today.

Dare to be Digital: Post Mortem

Team Dziethew had a fantastic weekend showcasing our experimental game ‘The Gods Are Wanting’

(My team mate Dziek talking about our experiences)

Though our original plans to add large amounts of content to the game each night fell through (we spent our nights drinking networking instead), the public reaction to the game was still amazing to see.  People seemed to enjoy the pure fun and weird world of the game, which seemed to make up for the complete lack of polish (we only finished our first build two hours after the event opened).

 

We were so busy running the stall it wasn’t until the final day that I got the chance to quickly run around and play things.  I had a lot of fun with all the stuff I managed to play, but my favourites were definitely:

Gravity Pong by Amy Parent, a great twist to a classic game.

• Super Block Party by Sofa Squadron, really fun party game with plenty of polish.

Hedra by Kirsty Keatch, a lovely one touch infinite scroller.

KUBOT by Marios Michalakos, sweet minimalist puzzler for iOS.

• The Extraordinary Life and Times of Nigel Farage, Gentleman by Half Lamp Productions, fantastic satire piece with SIX unique minigames – so much effort & polish.

 

On the final night, as is traditional at the end of Dare, there was a Ceilidh held with good music, dancing, & a free bar.  A great end to a great event!

 

Thanks Dare!

Dare to be Digital: Indie Fest

It’s the first day of Dare today and 2 hours into the event we finally have a working game, come play!

So after prototyping various different games with Dziek we changed our idea again a few days ago, and spent the last night creating this game.

A four player build-your-own-monster-and-fight-them game focused on adding special limbs to your god to give them power.

Dead by Daylight

We’ve been playing a lot of Dead by Daylight recently, which inspired me to try my own version in Garry’s Mod.  Here you can see (maybe you can’t, it’s dark and scary) the generator repair system and skill checking.

dbg1

Planetary Annihilation Modding 8 – Networked Play

Currently working on networking the standalone application element of the mod

pamod11

(Art belongs to UberEnt & Planetary Annihilation)

Using the Lidgren C# UDP networking library, which has been really easy to work with so far.

Currently players can connect to games and take turns performing actions, which are validated by the server & then sent to all connected clients.

pamod12

(The turn notification UI is just placeholder at the moment)

Planetary Annihilation Modding 6 – Galaxy Generation

With my Honours project done, I am happy to finally get back to this.  Working on some procedural galaxy generation.

pamod7

(Art belongs to UberEnt & Planetary Annihilation)

This should allow for some more interesting layouts, as before I was just hard-coding the systems and the routes between them.

 

The generation works by;

• Randomly positioning a number of systems within a bounding box, while collision testing to ensure there is no overlay between themselves

• Connecting all systems within a short range of each other

• Grouping together all the systems which are linked

• Finding the shortest paths to link these isolated groups of systems together

 

It seems to work well enough for my purposes at the moment, but I could make it more interesting by adding some more random paths later on.

The systems also have a procedural name which just combines two strings from arrays of names and suffixes.