 			'subtotal', subTotal
 			'speedAndRangeFactor', speedAndRangeFactor
 			'forceBonus', forceBonus
-			
+
 		Math.max(1, Math.round(speedAndRangeFactor * subTotal + forceBonus))
-		
+	
+	calculateTMM = ->
+		tmmString = for speed, i in movement.values
+			if speed <= 2 * (if movement.units is 'hexes' then 1 else 2)
+				tmmValue = 0
+			else if speed <= 4 * (if movement.units is 'hexes' then 1 else 2)
+				tmmValue = 1
+			else if speed <= 6 * (if movement.units is 'hexes' then 1 else 2)
+				tmmValue = 2
+			else if speed <= 9 * (if movement.units is 'hexes' then 1 else 2)
+				tmmValue = 3
+			else if speed <= 17 * (if movement.units is 'hexes' then 1 else 2)
+				tmmValue = 4
+			else if speed > 17 * (if movement.units is 'hexes' then 1 else 2)
+				tmmValue = 5
+			if movement['j']
+				tmmValue += 1
+			tmmValue + if movement.modes[i] then movement.modes[i] else ''
+		tmmString.join('/')
 
 	parseMovement = ->
 		movement = {}

			mode: (moves[i].match(/[a-z]$/i)?[0] || '').toLowerCase()
		} for move, i in moves
		movement.values = (move.value for move in moves)
		(movement[move.mode] = move.value) for move in moves
		movement.base = movement.values[0]
		movement.units = if ~mv.value.indexOf '"' then 'inches' else 'hexes'




	# TODO: calculate possible roles
	# TODO: allow manual override, no PV calculations

