Killzone Shadow Fall DLC Multiplayer Maps

Bit late to the party on this one… On the 5th of March we(Guerrilla Cambridge) put out 2 new FREE! multi-player maps as DLC for Killzone Shadow Fall.

This was a great experience diving into developing for the PS4. I got heavily involved in optimisation, coming up with creative ways to improve frame rate and getting overly familiar with performance measuring tools. I also rigged up background props and provided a lot of technical support for both our animation and environment art teams. It was a lot of fun and I think everyone here is proud (or at least should be) of the result!

‘The Cruiser’

‘The Hangar’

If you’ve got a PS4 and are playing Shadow Fall give them a try!

If you don’t and you’re interested here’s some game play footage courtesy of:
youtube.com/user/brownsound5150

‘The Cruiser’

‘The Hangar’

iterateOverTime()

This simple Maya script came about after a colleague needed to run a few commands on each frame of an animation as a quick fix.

The original I scripted addressed a specific issue, but I thought it may be useful to have as a more generic function.

I’ve added the doThis() function below to provide a working example. Basically, add what you want to do to the doThis() function or supply your own or other existing function. It can also change increments, so for example; iterateOvetime(doThis,5) will execute doThis() on every 5th frame.


import pymel.core as pm

def iterateOverTime(function, step=1):
    """Executes given function for each frame on timeline"""
    min = pm.playbackOptions(query=True, minTime=True)
    max = pm.playbackOptions(query=True, maxTime=True)
    fail_list = []
    for i in range(min,max+1,step):
        pm.setCurrentTime(i)
        try:
            function()
        except:
            fail_list.append('Failed on frame: %s'%(i))
    for fail in fail_list:
        print fail
            
def doThis():
    print 'currentTime is %s'%(pm.getCurrentTime())
    
iterateOverTime(doThis)

Hotkey: Toggle Local Axes Together

Here’s another quick little hotkey. I wanted something to toggle the display of a joints local rotation axis… now I know there is a simple one liner that is already sitting in the hotkey editor, but, if your selection contains some objects with local rotation axis on and some with it off, it’s unlikely the desired effect is to switch the offs to on and the ons to off (are you following me?). So this may be overkill, but here it is:


'''Hotkey: Toggle Local Axes Together'''
import maya.cmds as cmds

axes_on, axes_off = [], []
selection = cmds.ls(selection=True)
for selected in selection:
    if cmds.toggle(selected, query=True, localAxis=True):
        axes_on.append(selected)
    else:
        axes_off.append(selected)

if not axes_on:
        cmds.toggle(localAxis=True, state=True)
elif not axes_off: 
        cmds.toggle(localAxis=True, state=False)
else: cmds.toggle(localAxis=True, state=False)  

Hotkey: Toggle Object/World Modes

A quick little hotkey for Maya. It simply toggles between the world and object modes of the move, rotate, and scale tools.

It came about after a request from a friend who was getting frustrated whilst working on a task which had him switching between modes a lot. Hopefully others may find it useful as well so feel free to grab the script below, paste into your hotkey editor and assign a key (make sure you have the language set to Python). And I’m sure this could be made more elegant, so if you have a different way of doing it I’d love to see!

'''Simple hotkey command to toggle between object and world modes for
Move, Rotate, and Scale contexts'''
import maya.cmds as cmds

# I want to toggle independently based on what context is being used,
# So the first thing I need to do is get the current context.
current_context = cmds.currentCtx()

# Then there is a different if/else statement depending on context.
if current_context == 'moveSuperContext':
    mode = cmds.manipMoveContext( 'Move', q=True, mode=True )
    if not mode:
        cmds.manipMoveContext( 'Move', e=True, mode=2 )
    else:
        cmds.manipMoveContext( 'Move', e=True, mode=0 )
        
if current_context == 'RotateSuperContext':  
    mode = cmds.manipRotateContext( 'Rotate', q=True, mode=True )
    if not mode:
        cmds.manipRotateContext( 'Rotate', e=True, mode=1 )
    else:
        cmds.manipRotateContext( 'Rotate', e=True, mode=0 )
     
if current_context == 'scaleSuperContext':
    mode = cmds.manipScaleContext( 'Scale', q=True, mode=True )
    if not mode:
        cmds.manipScaleContext( 'Scale', e=True, mode=2 )
    else:
        cmds.manipScaleContext( 'Scale', e=True, mode=0 )

As a quick side, for the same friend I’m also working on a little widget that can be used to save and recall custom axis orientation in a single click, when it’s ready to go I’ll post it up!