Portfolio – stecman.co.nz https://stecman.co.nz Software developer, Wellington Tue, 19 Feb 2013 10:36:33 +0000 en-US hourly 1 https://wordpress.org/?v=5.6 Speech NZ Website https://stecman.co.nz/portfolio/2012/speech-nz-website Thu, 25 Oct 2012 02:41:00 +0000 /?post_type=stec_portfolio&p=727 Having worked with a static HTML website for a considerable length of time, Speech New Zealand needed a new website that they could manage easily and keep looking good with minimal effort. I designed and coded this WordPress site, and also helped Speech New Zealand find a suitable hosting solution. Check out the live Speech […]

The post Speech NZ Website appeared first on stecman.co.nz.

]]>
Having worked with a static HTML website for a considerable length of time, Speech New Zealand needed a new website that they could manage easily and keep looking good with minimal effort. I designed and coded this WordPress site, and also helped Speech New Zealand find a suitable hosting solution.

Check out the live Speech NZ site.

Images



The post Speech NZ Website appeared first on stecman.co.nz.

]]>
Zombie Splat https://stecman.co.nz/portfolio/2012/zombie-splat Thu, 20 Sep 2012 02:34:17 +0000 /?post_type=stec_portfolio&p=538 Zombie apocalypse has arrived. Your job is to defend the car against the hordes of bloodthirsty zombies! Smash & crush them with multi finger taps, blow them up with grenades, keep them out with laser fences, slow them down with Slow Motion Fog… Doesn’t matter how you do it, just protect that car at all […]

The post Zombie Splat appeared first on stecman.co.nz.

]]>

Available on the App Store

Zombie apocalypse has arrived.

Your job is to defend the car against the hordes of bloodthirsty zombies!

Smash & crush them with multi finger taps, blow them up with grenades, keep them out with laser fences, slow them down with Slow Motion Fog… Doesn’t matter how you do it, just protect that car at all costs!

About

Zombie Splat is a 2D, top down, arcade style game for iOS. I was the only developer on this project and a had a great deal of fun making zombies explode everywhere:

This friendly looking fella resides in my notes for the game.

Testing performance with far more zombies than the release version allowed.

The post Zombie Splat appeared first on stecman.co.nz.

]]>
Alien Run https://stecman.co.nz/portfolio/2012/alien-run Thu, 02 Feb 2012 02:37:43 +0000 /?post_type=stec_portfolio&p=561 The survival of three little cute colorful aliens is in your hands. They need your help to escape earth and get back home. Delightfully simple, hours of fun. Collect stars, avoid asteroids, leave earths orbit and escape to the darkest depths of outer space. About Alien Run is a 2D, accelerometer controlled collect-all-the-things-and-don’t-die style game […]

The post Alien Run appeared first on stecman.co.nz.

]]>
Alien Run game - title screen Alien run gameplay

Available on the App Store

The survival of three little cute colorful aliens is in your hands. They need your help to escape earth and get back home. Delightfully simple, hours of fun. Collect stars, avoid asteroids, leave earths orbit and escape to the darkest depths of outer space.

About

Alien Run is a 2D, accelerometer controlled collect-all-the-things-and-don’t-die style game for iOS devices.

Development

This was my introduction to Objective-C and my first major project using compiled languages. Working for Zappty Games, I started with the code for the partially completed game and finished it – adding new features, graphics, and game-play while getting my head around developing for iOS. The experience, though challenging at first, was very rewarding:

Alien Run ios game development

The post Alien Run appeared first on stecman.co.nz.

]]>
Robo-gun and the soldiers https://stecman.co.nz/portfolio/2011/robo-gun-and-the-soldiers Tue, 01 Nov 2011 11:36:30 +0000 /?post_type=stec_portfolio&p=627 In this project you will design a non-biological based character that will navigate and react to an environment. You should focus primarily on the behavior of this “character”, but also find a distinctive and economical visual representation. You should find a visual representation that is a compelling but minimal showcase for the behavior you create. […]

The post Robo-gun and the soldiers appeared first on stecman.co.nz.

]]>

In this project you will design a non-biological based character that will navigate and react to an environment. You should focus primarily on the behavior of this “character”, but also find a distinctive and economical visual representation. You should find a visual representation that is a compelling but minimal showcase for the behavior you create.

Robo-gun is intent on destroying the incoming plastic soldiers (which oddly resemble slime covered zombies) and does so with deadly precision. A python script generated and key-framed all behavior in this scene. Under the hood are some driven keys, expressions, and rigid-body simulations to simplify the aiming and animations. There’s a bit of jumpiness when the invaders are shot, since I didn’t work out how to cache rigid-body simulations/set the initial simulation frame for each soldier.

The source can be downloaded here under a Creative Commons Zero licence, and there’s a detailed write-up on this project with more images here (PDF, 1.25MB).

Development

I really enjoyed this project and had a good bit of fun. While it wasn’t required, I do wish I had spent more time on the aesthetic and render quality. The models weren’t great (though they were functional), and the render quality really suffered because of time constraints (I had to significantly lower the render settings).

What was left out

I began working on two things that ended up getting left out because of time and bugs: particle muzzle flash and cartridge ejection from the gun. I almost had cartridge ejection nailed, but it unexpectedly caused a massive bug that I couldn’t trace and blocked the generation script from running at all unless I deleted duplicates of the cartridge reference (maybe a duplicate name issue). The cartridge ejection used rigid bodies like the soldier deaths, and it looked pretty darn awesome during generation the one and only time I managed to get it to run. You can see the cartridge reference model hiding inside the gun x-ray view below.

I started experimenting with particles for muzzle flash, but ran out of time as it caused Maya to crash frequently. I didn’t get any screenshots of this, but it was pretty basic – just a directional particle emitter in the end of the barrel which would have its generation rate hooked into the custom attribute that controlled the slide and hammer action.

Images

Concept sketch

The post Robo-gun and the soldiers appeared first on stecman.co.nz.

]]>
Man Up Coffee promo https://stecman.co.nz/portfolio/2011/man-up-coffee-promo Fri, 28 Oct 2011 03:02:58 +0000 /?post_type=stec_portfolio&p=427 Stephen Utting is the Man Up Man: He doesn’t just move with maximum acceleration, obtaining maximum speed and altitude; he does it with facial hair. This was quickly thrown together as a comic intro to the presentation Stephen Utting and I did for the “Man Up” android application in MDDN352 (Ubiquitous Computing) at Victoria University […]

The post Man Up Coffee promo appeared first on stecman.co.nz.

]]>

Stephen Utting is the Man Up Man: He doesn’t just move with maximum acceleration, obtaining maximum speed and altitude; he does it with facial hair.

This was quickly thrown together as a comic intro to the presentation Stephen Utting and I did for the “Man Up” android application in MDDN352 (Ubiquitous Computing) at Victoria University in 2011.

Camera and editing: Stephen Holdaway
Man Man: Stephen Utting
Camera: Canon EOS 550D @ 720p 50fps, Canon EF 50mm f/1.8.
Music: “Dream Within A Dream” by Hans Zimmer (Inception OST)

The post Man Up Coffee promo appeared first on stecman.co.nz.

]]>
They are watching. https://stecman.co.nz/portfolio/2011/they-are-watching Mon, 10 Oct 2011 08:25:37 +0000 /?post_type=stec_portfolio&p=591 Toggle the flash application Instructions: You need a webcam or other video device plugged in. If you don’t, you’ll just see black. Toggle the application on. It’s reasonably CPU intensive even when idle, hence it’s off by default. Allow flash to use your camera Select the right camera (if required) under the flash settings menu […]

The post They are watching. appeared first on stecman.co.nz.

]]>

Instructions:

  1. You need a webcam or other video device plugged in. If you don’t, you’ll just see black.
  2. Toggle the application on. It’s reasonably CPU intensive even when idle, hence it’s off by default.
  3. Allow flash to use your camera
  4. Select the right camera (if required) under the flash settings menu
  5. Use the controls below to play with it. You’ll probably want to press D to change display modes, since the default mode isn’t much fun. Also, move out of frame, then click to get comparison frame without you in it; the effect is better this way.

Controls:

Left click - take a new comparison frame (used for computing difference)
D - Cycle display modes
C - Cycle resolution (640x360, 960x544, 1280x720)
F - Toggle fullscreen (non-embeded version)
G - Toggle grain
H - Toggle reflect horizontally

Behind the scenes

Following closely on the heels of the text-to-speech rap I created in the previous project for this course, this interactive display was my own take on our group’s ‘life as a role-playing computer game’ manifesto. A large part of our manifesto suggested measuring everything that every person does in order to have game-like stats and leveling up in real life. Naturally this would require an obscene amount of surveillance; They are watching was a response to this.

I ended up with a few days around classes to develop an application from my design concept. I knew roughly how the code would work, since I had already completed two projects using a similar method – image difference combined with blob tracking. The primary issue was that I needed a cross-platform solution for capturing video from a webcam. I first tried Processing since I had used in my first year at uni, however that required QuickTime and a few other nasty hacks just to get a video stream. Next I tried Java, but again I couldn’t find a solution with no dependencies and/or a guarantee to work. Finally, after a a night of trying odds and ends in a variety of different languages, I settled on Flash and ActionScript 3; it just worked with webcams, and as a bonus I found an existing blob tracking algorithm written in AS3.

The next slight hurdle was that I had never worked with Flash or ActionScript before. Ever. Not to worry! I figured out the syntax on the go and had a working application by the end of the night. Not the most efficient application, but it worked.

Notes

Since this was made for controlled deployment with my own webcam, three resolutions are hard-coded (at 30fps): 640×360, 960×544 and 1280×720. I have no idea what will happen if a device doesn’t support one of these resolutions, but I imagine the application won’t work.

If you have trouble with the embedded version above, you can download a windows binary of this application (5MB).

You can download the source files under the Creative Commons Zero licence.

Images

Rotating panes of fake information tracking on each passer by. This was quickly restricted by time constraints and the rudimentary blob detection algorithm I used.

Presentation display mode.

Running on a TV in the design school atrium

The post They are watching. appeared first on stecman.co.nz.

]]>
Internet https://stecman.co.nz/portfolio/2011/internet Sat, 01 Oct 2011 14:39:59 +0000 /?post_type=stec_portfolio&p=293 MDDN311 Project 2: Genesis For this project you will create a form using generative techniques in Maya with Python scripts. Results Development images My initial idea was to have one cable coming out of a sphere of cables with jacks pointing out, evenly distributed across the surface: At some point, I changed direction and decided […]

The post Internet appeared first on stecman.co.nz.

]]>

MDDN311 Project 2: Genesis

For this project you will create a form using generative techniques in Maya with Python scripts.

Results

Development images

My initial idea was to have one cable coming out of a sphere of cables with jacks pointing out, evenly distributed across the surface:

At some point, I changed direction and decided to render wireless/radio waves with the network cables I was already generating:

Finally, I removed one end of the cable and used my existing code to generate smaller cables coming from the end of each main cable:

The python script

The following Python script was written for Autodesk Maya 2011 to generate scenes like the ones at the top of this page. It requires the file JACK_FINAL.ma which contains the RJ45 plug model and materials that the script instances.

# "Internet" v5 by Stephen Holdaway
# Source models required: (RJ45 Jack w/ locator - JACK_FINAL.ma)

import maya.cmds as cmds
import math
import random

cableObject = "JACK_FINAL:cable_"
sourceObject = "JACK_FINAL:RJ45_Locator"
recursed = False
id = 0

def vAdd(l1,l2):
    o = []    
    for i in range(3):
        o.append(l1[i] + l2[i])
    return o

def vSub(l1,l2):
    o = []
    for i in range(3):
        o.append(l1[i] - l2[i])
    return o

def vDiv(l1,v = 0.0):
    o = []
    for i in range(3): 
        o.append(l1[i] / float(v))
    return o
    
def vMult(l1,v):
    o = []    
    for i in range(3):
        o.append(l1[i] * v)
    return o

def vGen(mult=1, XZ = False):
    o = []
    for i in range(3):
        o.append((random.random()-0.5)*mult)
    if(XZ):
        o[1] = 0;
    return o


def drawCable(start, end, objects, radius, child):
    # Draw Cable: create a curve with noise between two points and extrude a mesh using it
    # 
    # start          -    start co-ords as [x,y,z]
    # end            -    co-ords as [x,y,z]
    # objects        -    list of object names as [start_object,end_object,cable_object]
    # radius         -    radius of area of work in
    # child          -    boolean: is this cable a child of another
    
    cv = cmds.curve( p=(start), d=3)
    if(child):
        points = random.randint(4,radius)
        amp = (random.random()*2)
    else:
        points = random.randint(4,radius*2)
        amp = (random.random()*3)+1
    vec = vDiv(vSub(start,end),points)
    prevCV = start
    
    for i in range(points-1):
        p = vSub(start,vMult(vec,i+1))
        p[1] += amp*math.sin(math.radians(i*(90*random.random())));
        
        if(i==1):
            rx = math.atan2(p[2] - start[2], p[1] - start[1]) * (180/math.pi)
            cmds.setAttr(objects[0]+".rotateX", rx);
        
        prevCV = p;
        cmds.curve(cv, a=True, p=(p))
    
    cmds.curve(cv, a=True, p=(end))
    
    cmds.polyExtrudeEdge(objects[2]+".e[0:11]",kft=True, d=(points*10), inc=cv, sma=180, lrz=3600, ch=False)
    cmds.select(cv,r=True)
    cmds.delete()    
    
    global recursed
    if(recursed == False):
        recursed = True;
        colours = ["JACK_FINAL:mia_material4SG1","JACK_FINAL:mia_material3SG1","JACK_FINAL:mia_material6SG1","JACK_FINAL:mia_material3SG1","JACK_FINAL:mia_material7SG1","JACK_FINAL:mia_material3SG1"]
        for i in range(8):
            rt = generateCables(1, radius, s = end)
            cmds.select(rt)
            cmds.sets(rt,fe=colours[random.randint(0,5)])
    
    return objects[2]
    

def generateCables(count, radius, s = 0, shift = 0):
    # Generate two points within a radius
    # 
    # count          -    number of sets (wires) to generate
    # radius         -    radius of area of work in
    # s              -    start co-ords as [x,y,z]: when provided only one point is generated (relative to the given point)
    
    for i in range(count):
        points = [[],[]]
        objects = ['','','']
        child = False
        
        for ii in range(2):
            if(ii == 0 and s == 0):
                cmds.select(sourceObject)                
                objects[ii] = cmds.instance()[0]
                z = -radius + random.randint(round(-radius/4),round(radius/4))
            else:
                objects[ii] = cmds.spaceLocator()[0]
                if(s == 0):
                    z = -random.randint(round(-radius/4),round(radius/4))
                else:
                    z = (random.random() * radius)+1
                r = 0            
            
            o = objects[ii]
            if(ii == 0):
                global id
                cmds.select(cableObject)
                cableStub = cmds.duplicate(n="Cable_"+str(id)+"_"+str(shift))[0]; id+=1;
                objects[2] = cableStub
                if(s != 0 ):
                    cmds.scale(0.3,0.3,0.3,r=True)
                cmds.parent(cableStub,o)
                r = 180
            
            x = shift/2.0
            y = random.randint(round(-radius/2),round(radius/2))
            
            if(ii==0 and s != 0):
                 x = s[0]
                 y = s[1]
                 z = s[2]
             
            if(ii==1 and s != 0):
                 x = s[0] + (random.random()-0.5)*2
                 z = s[2] + z
                 child = True
            
            points[ii] = [x,y,z]
            
            cmds.setAttr(o+".translateX", x)
            cmds.setAttr(o+".translateY", y)
            cmds.setAttr(o+".translateZ", z)
            cmds.setAttr(o+".rotateY", r)       
        
        return drawCable(points[0], points[1], objects, radius, child)

for i in range(3):
    recursed = False
    generateCables(1,8,0,i);

The post Internet appeared first on stecman.co.nz.

]]>
Android Experiments https://stecman.co.nz/portfolio/2011/3-android-experiments-mddn352-2011 Mon, 05 Sep 2011 08:02:10 +0000 /?post_type=stec_portfolio&p=449 Project number two for MDDN352 “Ubiquitous Computing” at Victoria University in 2011 was all about experimenting with mobile apps. The project, titled “Interaction Experiments” asked for three or more experiments that explored the various input options available on mobile devices (mic, touch-screen, accelerometer, gyroscope, 3D orientation/compass/magnetic field, light sensor, GPS, etc) Keyboards and mice are […]

The post Android Experiments appeared first on stecman.co.nz.

]]>
Project number two for MDDN352 “Ubiquitous Computing” at Victoria University in 2011 was all about experimenting with mobile apps. The project, titled “Interaction Experiments” asked for three or more experiments that explored the various input options available on mobile devices (mic, touch-screen, accelerometer, gyroscope, 3D orientation/compass/magnetic field, light sensor, GPS, etc)

Keyboards and mice are being joined by a new wave of HCI input options. Touch screens and accelerometers introduce a rich field of interactive options to be explored. How do we begin to use these new, largely “invisible”, interfaces?

For this project, you will explore the multiple new inputs available to a new generation of smart phones and tablet computers by building interactive Flash Builder experiments. Conduct research into the existing interaction paradigms, and determine which tools are available to you. Try to imagine alternative methods of navigating content, generating user feedback loops, and eliciting delight in small interactions.

I opted to skip Flash Builder and used Java with the Android SDK to make my apps. I was putting myself in the deep end again as I had no experience with the Android SDK or Java, but where’s the fun if there’s no challenge, right?

Wander:

Uses orientation and location sensors. The application generates a random position at a user specified distance from the device’s known location, then a ‘needle’ and distance meter help the user find the location. The general idea is to encourage exploration and go to places the user wouldn’t otherwise. I intend to finish this application (add score, completion detection, a “close as I can get” button), polish it and put it on the Android Marketplace at some point.

Handgun:

Uses gyroscope sensor to turn your regular phone into a gun-phone! Complete with ammo count, reloading, and a range of gun sounds.

Sword:

Uses gyroscope sensor to turn your phone into a brutal weapon.

The post Android Experiments appeared first on stecman.co.nz.

]]>
Headsplosion https://stecman.co.nz/portfolio/2011/headsplosion Fri, 26 Aug 2011 00:39:00 +0000 /?post_type=stec_portfolio&p=514 Project 1 for a video special effects course (MDDN311) at Victoria University in 2011. I had initially wanted to do this non-violence spiel with an extremely violent/gory explosion, however I changed my idea to something less predictable (and more friendly to work on) shortly after starting. I’m not too happy with the neck (needs more […]

The post Headsplosion appeared first on stecman.co.nz.

]]>

Project 1 for a video special effects course (MDDN311) at Victoria University in 2011. I had initially wanted to do this non-violence spiel with an extremely violent/gory explosion, however I changed my idea to something less predictable (and more friendly to work on) shortly after starting.

I’m not too happy with the neck (needs more detail and some movement), but it was a fun experiment. I used Adobe After Effects to add the feathers.

The post Headsplosion appeared first on stecman.co.nz.

]]>
This is Dave https://stecman.co.nz/portfolio/2011/this-is-dave Tue, 16 Aug 2011 09:32:03 +0000 http://site.stecman.ath.cx/?post_type=stec_portfolio&p=84 An 8-bit style video and rap to present a manifesto for a society based on principles and attributes found in video games. This was a group project for CCDN331 at Victoria University. Credits Voice is text to speech generated with AT&T’s text to speech engine demo Base song is “Goof” by Binärpilot. Rap lyrics by […]

The post This is Dave appeared first on stecman.co.nz.

]]>

An 8-bit style video and rap to present a manifesto for a society based on principles and attributes found in video games. This was a group project for CCDN331 at Victoria University.

Dave

Credits

  • Voice is text to speech generated with AT&T’s text to speech engine demo
  • Base song is “Goof” by Binärpilot.
  • Rap lyrics by Stephen Holdaway and Robert McLeod.
  • Audio editing (building text-to-speech over song) – Stephen Holdaway.
  • Graphics by Alex Klarichch, Jushang Chen, Robert McLeod, and Zac Rutten.

The post This is Dave appeared first on stecman.co.nz.

]]>