Sunday, July 6, 2014

Choice

A thing I have made http://www.quiet.net.nz/Games/Play/Choice
I wanted to do a step by step idea and see how I would translate that into a 2d game and what things take time and more planning than usual. It was about 2 nights work, lots of time spent on "art" and realising that planning out the game flow is really important instead of bolting extra bits on.

6 random endings, turn the key or don't. You might not die.

Saturday, June 21, 2014

Building Unreal Engine HTML5

Update: 4.7 has HTML5 publishing all built in now apparently (I've not tested) so the below is old, just nab a new sub from Epic :)

Almost all the information needed is contained in this link https://answers.unrealengine.com/questions/18136/html5-build-firefox-cant-find-the-file-myprojectht.html

It's spread around a bit, but here is the list I ended up with:
Unpack the 4.2 source, required 1/2 and optional files and regenerate the project.
While this is happening, install emscripten (I used the self installing version which set my environment up perfectly) and grab XAMPP install and the Nightly Firefox 64bit build.

Once the source is ready, open it and find HTML5Platform.Automation.cs (Programs/Automation) and change the string in line 36 to read "/c python {0} {1} --preload . --pre-run --js-output={1}.js" as per Ehamloptirans instructions in the main link.

If you don't you may get Windows asking "how do I open a .py file?". Python is installed with emscripten but isn't called correctly (the log will show this when you try and build later if you don't fix it).

Build the development version of UE4.2. This took around 40 minutes on my pc, didn't bother the RAM much but did like the 8 cores a lot.

Now build UnrealFrontend. This is the tool that is actually used to build your HTML5 setup.

Open your project once, cook the content, save it. Go into your projects folders in explorer, into the Config folder and open up DefaultEngine.ini. Here is where you can set your GameDefaultMap, but in order to fix an HTML5 running issue, add this (or just the line if [Plugins] exists.)
[Plugins]
-EnabledPlugins="ExampleDeviceProfileSelector"

I had to search the source code to find that other engine.ini samples remove this specifically. HTML5 version was throwing an error when I attempted to run due to this.

Find Ben Donatelli's comments in that thread, he steps you through the Frontend profile setup.
This takes ~17mins first time for my project and creates these files at the end. Leave the log open or save it. If you don't have these 6, open the log and ctrl+f for file_packager.py. If it looks like it logged a "wrong params, here's proper usage", then clean the Frontend project in Visual Studio, check you made the proper string changes, and then rebuild Frontend):
Tanky.data
Tanky.data.js
Tanky.html
UE4Game.bc
UE4Game.js
UE4Game.js.mem
(these 3 UE4Game files don't appear to be rebuilt rerunning the build process so later builds are faster)

Minor cleanup, open the html file in notepad or such, find the first script reference and add var tstart = Date.now();

Now open the data.js file. You're looking for the references to your .data file. They probably have a file/folder path structure in front that causes an error, you can strip that out so it just reads something like
var PACKAGE_NAME = 'Tanky.data';
datafile_Tanky.data
etc

You can try it out (and it'll crash and load really slowly) here http://www.quiet.net.nz/content/html5/tanky.html

Thursday, June 19, 2014

Tanky demo

http://quiet.net.nz/Home/Tanky
If you get "MSVCP120dll is missing", you'll need the redist pack from here (as found at
https://answers.unrealengine.com/questions/14088/msvcp120dll-is-missing-from-your-computer.html )

Slowly working on the style and the UI.
Find and kill the transport and the enemy base.
Weapons do different damage, you can't fly too high or your engines cut out.
Whether you win or lose, the game will reset after 10 seconds.

I've tried to keep to a colour scheme and a style of older games, so the UE4 settings are set to low or medium at best to achieve that, and left handed keybinds are also in thanks to my friend dm, full rebinding is later.

It's only spawning a single transport at the moment, but that is configurable for "missions". While the landscape hills are random, the spawn points are currently fixed. There is also a repair trigger that will be added once I do proper spawn placing.

Next up, some multiplayer I think.

Wednesday, June 4, 2014

Tanky

Been plugging away at this for some time, alternating between rank and file Warhammer Empire painting.

I'm solidly impressed with Unreal Engine 4. I've made a game framework with zero code only using their Blueprints system.
Here's the earliest generally working version:


Followed by the new models, projectiles:

Finally I added in an enemy base responsible for coordinating and spawning AI (complete with shields and hitpoints and effects), a spawn for enemy resupply and escorts...

Damage, enemy win conditions, level reloading and now I'm on to UI stuff, starting with a pause menu and now the inventory screen.

Still a fair bit to go but it's shaping up nicely. Once I get more inventory/damage types I'll go and start testing multiplayer (the core player ships already work nicely in MP).

I've learnt a fair bit about the landscape tools but I'm not 100% sure how I'll handle the terrain.

Thursday, April 24, 2014

Hovering tank

I made a thing. A hovering tank thing in Unreal Engine 4.02.
Based on the UFO blueprint input sample and combined with a sphere trace check with variable thrust power to try and balance out the bouncing (it's still not there).



Sunday, April 13, 2014

Old code test - Polgonising a scalar field

http://www.quiet.net.nz/Games/Play/Polygonise
Voxel deformable blah blah. It'll make your browser unresponsive for a moment as it grinds out some triangles. Click to drill a hole through the ball!

Based like most implementations on http://paulbourke.net/geometry/polygonise/

Wednesday, April 9, 2014

Polar Express preview

Decided to just throw some of the sandboxed work up on my site. Part of a story based game I've been kicking around for some time.
Bugs wise, yes, I know about the ejecting from the ship and that the URL has orbit and not express in it ;)
There's also terrible lighting in the first corridor in space, it's fine in the windows version, so some research to do.

http://www.quiet.net.nz/Games/Play/PolarOrbit

Tried making this in Unreal Engine 4 but gosh I'm bad at level design (as you will see I'm also bad at programmer art and such). UE4 is a fantastic tool though, good work Epic.

Tuesday, March 25, 2014

Networking and player owned object spawning

I keep having to drop back to basics with networking. I always try some bastardised version of authoritative and client server from grabbing snippets here and there, then confusing who owns what and how the clients behave.

Right, to put it down step by step for myself later; simple server creation via Network.InitializeServer and spawning of the server players prefab under OnServerInitialized. When a player connects, I notice it in OnPlayerConnected but do not spawn the players prefab here (my previous shots made this player owned by the server, which caused me confusion wrangling the items later on. I did have it working, but it was muddled in my head and seemed overly complicated for what I wanted)

Instead, spawn the player in OnConnectedToServer so that there is a clear separation of client/server making the scripting classes easier to read and use.

Now, I use a base class for all other items that need to exist or move relative to the origin based camera. All it does is toggle the render flags on the objects attached and stores a "relative to origin" vector3. When a player spawns, say, a radar satellite, it needs to be grabbed by the other players application and rendered in the right place.

And wa'hey


Wednesday, March 19, 2014

Multiplayer enabled custom coordinate system with local area rendering.

Well, that's a long winded title. I also need to get all of these scripts sorted out and hosted somewhere for people to look at.

Custom coordinates (previous post) worked well and the localised renderer toggling worked well in conjuction with the other players.

My usual issue was the networking setup and re-learning all the things I forgot about RPC communications.
Ensuring that the NetworkView items are added and set for no state synchronisation or observed items set me back as usual. The "ownership" of items and initialisation of the known "world" objects (in this case, stand-ins for solar system objects) caused me trouble until I realised I should send those objects down to the network player via RPC instead of configuring it on server connection as that only updated the servers version.

My idea is that the local player needs a copy of these items coordinates in order to do the rendering in relation to themselves and being able to manipulate them without contention on the server.

I worry that the amount of traffic needed for a living place could be prohibitive so one of my next steps will be handing around a seed and doing some very late update synchronising.

For a starfield, there are some simple tweaks available using (in this case) multiple legacy particle generators. I'll follow up on this later as it doesn't work with repeatable results (I need to seed it). But it is rather pretty.

Wednesday, March 12, 2014

Double based custom coordinate system.

There's an ever nagging voice in my head that says "make a solar system and fly around in it".
To that end, I've produced a test scene.

First things first, multiple cameras. In order to get close and far viewing without z-buffer fighting, two cameras are bound together. The first should have its clipping set to near 0.01 and far 1,000. Ensure that this has a low depth priority (using a default scene camera, this should be -1). The second camera, with a near 1,000 and far 1,000,000 (or whatever you fancy) and a priority higher than the first (say, -2). 

Depth priority means that the higher value is rendered first, then the lower values rendered over the top. It's important to set the first (lower priority) cameras clear flag to Depth only otherwise it draws over the far away items.

For a custom coordinate system, I crafted a small Vector3d setup using doubles. So far I've only needed to implement the constructor, magnitude, distance and the subtraction operator. The main idea here is to put an awareness bubble around the player (who stays at the origin in world space).

Moving the player object simply adjusts the Vector3d that belongs to it. Once the distance between the other objects and the player falls inside the awareness bubble I trigger the rendering of the non-player item and position it at the edge of the bubble. Its "local" position for drawing is then in relation to the movement values the player changes.

Throwing in some real planetary scales and distances brings the odd trouble, but probably require some shenanigans around faking scale ranges. This is a nice core double based system that should allow for some driving about.

Monday, March 10, 2014

Configuring an Azure shared site with domains4less

I've fumbled my way around configuring my domain (http://quiet.net.nz to host apps I create) and azure shared site with the domains4less control panel templates and the howto from http://www.windowsazure.com/en-us/documentation/articles/web-sites-custom-domain-name/

On of my gotchas is the default template with its * and @, my confusion around the MX and TXT records I configured (prefixed with @) in my previous post about domains.live.com setup.

I added a CNAME for www to my azurewebsites.net address, awaited the replication and then added the awverify settings. But the wildcards of both @ and * and the restrictions on @ in CNAME led me to killing the A for * and setting the * in the CNAME.

If you get what I mean.
CNAMEs
* -> mysite.azurewebsites.net
awverify -> awverify.mysite.azurewebsites.net
www -> mysite.azurewebsites.net

A
Deleted the entry for * -> domains4less destination IP.
Changed the entry for @ -> azure IP from the Manage Domains configuration.

Wednesday, March 5, 2014

Mordheim Bodyguard

A wip shot. Lucky to grab this guy off trademe not long after games workshop pulled the item days before I went to order it. His purpose is unit filler for my Empire army, but gosh, if I don't want more of these older ogre sculpts for a Maneater unit for my Ogre Kingdoms lot.




Thursday, February 27, 2014

Top down 2d and map making

An interesting time wrangling my enemy NPCs this evening. They target, chase and face the player. The issue I was having was the rotation only worked in 90 degree increments.
After adjusting a few different values and methods I couldn't get it just right, endlessly bodging the angles. How hard is it to make a sprite rotate to face another sprite? Success finally came through this line:

tranform.rotation = Quaternion.FromToRotation(transform.up, target.position - transform.position) * transform.rotation;
(from: http://answers.unity3d.com/questions/590504/sprite-face-second-sprite-only-on-z-axis.html )

The differing situations appear to be in the choice I've made for top down.

I've used some of the functions from CoherentNoise (available on the Unity asset store for free) combined with modified scripts from my spherical world engines and generated a few terrain textures with normal maps that export to disk, a few seed values should create what I need and then I can test them out for placement of items. Scaling them should give a decent sized "world" to visit and run about on.

 

Tuesday, February 25, 2014

What lightbox?

I really need to build a lightbox, this light is good for painting but not for pictures.

I need to wash and paint up some freehand stuff on the banners, then base them but huzzah, another unit.
These gentlemen will be joined by a Grandmaster of the Black Bear (an earlier picture who also needs basing) as a fun great weapon unit.



Sunday, February 23, 2014

Setting up free email hosting with Microsoft

After far too long I've finally nabbed a domain for myself. Using the standard forwarding of email and an iframe redirect with cloaking seemed... a bit off. A quick search led me to Google apps who now charge for hosting an email domain, and to Microsoft who don't using mail.live (outlook.com) as the base.

Head over to https://domains.live.com and sign in, you'll get to the Domain settings mail setup.

The instructions are fairly straight forward, the only issue I had was configuring my dns settings via my provider. The advanced control panel on domains4less.co.nz had an odd layout that I had to get my head around.

Logging in, select domain templates from the menu and add a new template.

There is a selection of A records and MX records added by default, but following the instructions from MS I removed all the MX and set a single record prefixed with @, 10 priority and the address of the server (blah.hotmail.com in this case).

I then added the TXT record as they advised using the same prefix @ as the MX.

domains4less updates once every 30 minutes so I waited till the next tick and hit refresh on live.com. Nothing.

Waiting another 15 minutes for the settings to roll out properly and success! I was then able to configure the email account I wanted and logged into the familiar looking site of that account.

Now to continue setting up with an azure site.

Saturday, February 22, 2014

Knights of the Black Bear WIP

Continued progress, riders are 90% done (it's always 90% though even when I think I'm done) and work on the horses has begun.



Friday, February 21, 2014

Australian Azure in 2014?

With the beta of Titanfall over it, friends that played it seemed to not notice the forcing of traffic to the USA. Being located in NZ, we generally end up accepting a latency ~150ms. Australias announced Azure block seems to be happening, but probably won't go online till the end of 2014 (most mentions say "live 12-18 months from announcement" which was March 2013)

This does concern a few consultants I work with in regards to Microsoft's push for O365, VoIP all cloud all the time. Being a gamer means we know, almost automatically adjusting to our 150ms hop, and accept that things can be a little mistimed between the game and the locally hosted voice comms. But as a Lync user stuck in the cloud I've seen a fair whack of consternation coming out. Why that latency in the office?

Back to games. I've played a little with some of the services, standup time and latency bothered me a fair bit, especially since the Unity app I was made relied upon that data. It's a good choice though, as far as free options. Unity worked rather nicely with the Azure addon from BitRave.

The app: a Warhammer Badlands campaign was prepped among the gentlemen. I thought "I should make something for it".
Get Unity to render a hex map of individual items, throw a mapped background against them like a spritemap, then load players and their armies.
Each player can then take ownership of a tile and it adds a semi-transparent material to it denoting colour of owner.

This data is stored to Azure on save, and loaded when needed. Worked like a charm once I figured out the gotchas of configuring the SQL tables via visual studio vs hosted database management console vs tables management console and their interaction through webservices and the json responses.

Lesson learnt: Follow the setup using the samples! It'll save you having to delete and recreate parts in the management of Azure to find the right bit.

Thursday, February 20, 2014

Being creative

I post sporadically and it's rather annoying to come back here and go "oh yeah, I was going to write some words frequently".

So, more frequent updates time. Usually about Warhammer and code and such.

Unitys built in 2d setup has been about for a while, I finally got a look into it for a top down game. Have idea, make terrible programmer art, make idea work. I then spent far too long making better (but still programmer art) sprites for it. Tentatively called SG-R, a top down 10 mission/story based explore shooter.

Of which I do not have any screens of. Oh well.

Having completed my Ogre army I started missing sitting down and painting, so I fell back on my first army ever and picked up some Empire chaps.
Pictures after the jump