According to the documentation:
Applies an impulse to the game object.
This will apply the specified impulse to the game object at the specified point. If point != position, applyImpulse will also change the object’s angular momentum. Otherwise, only linear momentum will change.
[TABLE=“class: docutils field-list”]
[TR=“class: field-odd field”]
[TH=“class: field-name, bgcolor: #EEDDEE, align: left”]Parameters:[/TH]
point (the point to apply the impulse to (in world coordinates)) – the point to apply the impulse to (in world coordinates)
Firstly, there are two parameters with only one listed.
Secondly, the point you apply the impulse to is in local co-ordinates.
Proof for for the second point:
Apply this script to a cube:
import bge cont = bge.logic.getCurrentController() own = cont.owner own.applyImpulse([0,0,0] , [0,0,0.2])
According to the documentation, the impulse is being applied at the world centre. So if the cube is at [0,0,0] it will just go straight up. And if the cube is not at the world centre, it will spin.
But in practice, this script will never make the cube spin. It will only ever apply force straight up. Thus the position of the force is local rather than global.
On another tack:
It would be great to be able to apply a force at a desired location rather than an impulse. I’m busy trying to simulate basic aerodynamics and it is a pain having to divide everything by the number of frames per second.