This is a simple macro style script I made to create Joystick style controls, such as the ones seen in Jason Osipa’s book “Stop Staring”.
For all you people not fimiler with scripts, copy/paste the code below into your script editor and run it.
Then just put a name for the control in your box and it will make a controller smiler to:

Thanks 
'joyCnt JoyStick Creator
'Version 1
'Chris Bate www.chrisbate.com
set myRoot = ActiveProject.ActiveScene.Root
'Creates PPG
***'------------------------------------
***AddProp "Custom_parameter_list",myRoot, , "tmpJoyCnt", tmpJoyCnt
***SIAddCustomParameter "tmpJoyCnt", "controlName", siString, , 0, 1, , 4, 0, 1, "Control Name"
***InspectObj tmpJoyCnt, "", "Joystick Control Maker", siModal
***'====================================
'Setup Variables
***'------------------------------------
***joyName = getvalue ( tmpJoyCnt & ".controlName")
***joyCnt = "joyCnt_" & joyName
***'====================================
***
'Create Border, Handle and Text
***'------------------------------------
***GetPrim "Square"
***SetValue "square.Name", joyCnt
***SetValue joyCnt & ".square.length", 2
***
***GetPrim "Circle"
***SetValue "circle.Name", joyCnt & "Handle"
***SetValue joyCnt & "Handle.circle.radius", 0.2
***
***CreatePrim "Text", "NurbsCurve"
***SetValue "text.Name", joyCnt & "Text"
***SetValue joyCnt & "Text.text.text", "_RTF_{\rtf1\ansi\deff0{\fonttbl{\f0\froman\fprq7\fcharset0 Arial;}}" & vbCrLf & "\viewkind4\uc1\pard\qc\lang2057\f0\fs20 " & joyName & "\par" & vbCrLf & "}" & vbCrLf & ""
***SetValue joyCnt & "Text.crvlist.TextToCurveList.fitsize", 0.2
***'====================================
***
'Sets Parents, Selectability and Positions
***'------------------------------------
***ParentObj joyCnt, joyCnt & "Handle"
***SelectObj joyCnt & "Handle"
***AddProp "Transform Setup"
***SetValue joyCnt & "Handle.transformsetup.tool", 4
***SetValue joyCnt & "Handle.transformsetup.zaxis", False
***
***ParentObj joyCnt, joyCnt & "Text"
***SelectObj joyCnt & "Text"
***Translate , 0, -1.25, 0, siRelative, siLocal, siObj, siXYZ, , , , , , , , , , 0
***SetNeutralPose , siSRT, False
***SetValue joyCnt & "Text.visibility.selectability", False
***'====================================
***
'Sets limits on handles movement
***'------------------------------------
***SetValue joyCnt & "Handle.kine.local.posxminactive", True
***SetValue joyCnt & "Handle.kine.local.posxminlimit", -1
***SetValue joyCnt & "Handle.kine.local.posyminactive", True
***SetValue joyCnt & "Handle.kine.local.posyminlimit", -1
***SetValue joyCnt & "Handle.kine.local.poszminactive", True
***SetValue joyCnt & "Handle.kine.local.poszminlimit", 0
***SetValue joyCnt & "Handle.kine.local.posxmaxactive", True
***SetValue joyCnt & "Handle.kine.local.posxmaxlimit", 1
***SetValue joyCnt & "Handle.kine.local.posymaxactive", True
***SetValue joyCnt & "Handle.kine.local.posymaxlimit", 1
***SetValue joyCnt & "Handle.kine.local.poszmaxactive", True
***SetValue joyCnt & "Handle.kine.local.poszmaxlimit", 0
***'====================================
***
'Sets Colours
***'------------------------------------
***MakeLocal joyCnt & ".display", siNodePropagation
***SetValue joyCnt & ".display.wirecol", 367
***
***MakeLocal joyCnt & "Handle.display", siNodePropagation
***SetValue joyCnt & "Handle.display.wirecol", 15
***'====================================
'Finishing Script
***'------------------------------------
***DeleteObj "tmpJoyCnt"
***SelectObj joyCnt
***'====================================