2.53 python scripts

Hello, I recently made a game that used python scripts in the old blender. Upon opening it in the new blender I did have to make a few changes here and there but nothing major. But then I realized it no longer was doing the python. My mouse movement script no longer worked. Any ideas on how to fix this on my end or is this a temp bug in the beta blender?

without your script or a blend it is difficult to tell.

I just made a short test with 2.53 and it is fine.


import GameLogic
cont= GameLogic.getCurrentController()
sens = cont.sensors[0]
print (sens.position)

I’m sorry well here is a mouse script that for some reason no longer works.

######################################################
#
#   MouseLook.py        Blender 2.49
#
#   Tutorial for using MouseLook.py can be found at
#
#    www.tutorialsforblender3d.com
#
#   Released under the Creative Commons Attribution 3.0 Unported License.    
#
#   If you use this code, please include this information header.
#
######################################################

# define main program
def main():
    
    # set default values
    Sensitivity =  0.0005
    Invert = 1
    Capped = False
    
    # import Rasterizer
    import Rasterizer
    
    # get controller
    controller = GameLogic.getCurrentController()
    
    # get the object this script is attached to
    obj = controller.owner
    
    # get the size of the game screen
    gameScreen = gameWindow(Rasterizer)
    
    # get mouse movement
    move = mouseMove(gameScreen, controller, obj)
    
    # change mouse sensitivity?
    sensitivity =  mouseSen(Sensitivity, obj)
    
    # invert mouse pitch?
    invert = mousePitch(Invert, obj)
    
    # upDown mouse capped?
    capped = mouseCap(Capped, move, invert, obj)
    
    # use mouse look
    useMouseLook(controller, capped, move, invert, sensitivity)
        
    # Center mouse in game window
    centerCursor(controller, gameScreen, Rasterizer)
    
#####################################################

# define game window
def gameWindow(Rasterizer):
    
    # get width and height of game window
    width = Rasterizer.getWindowWidth()
    height = Rasterizer.getWindowHeight()
    
    return (width, height)

#######################################################

# define mouse movement function
def mouseMove(gameScreen, controller, obj):

    # Get sensor named MouseLook
    mouse = controller.sensors["MouseLook"]

    # extract width and height from gameScreen
    width = gameScreen[0]
    height = gameScreen[1]

    # distance moved from screen center
    x = width/2 - mouse.position[0]
    y = height/2 - mouse.position[1]
    
    # initialize mouse so it doesn't jerk first time
    if obj.has_key('mouseInit') == False:
        obj['mouseInit'] = True
        x = 0
        y = 0
    
    #########    stops drifting on mac osx
       
    # if sensor is deactivated don't move
    if not mouse.positive:
        x = 0
        y = 0
    
    #########  -- mac fix contributed by Pelle Johnsen
                    
    # return mouse movement
    return (x, y)


######################################################

# define Mouse Sensitivity
def mouseSen(sensitivity, obj):
    
    # check so see if property named Adjust was added
    if obj.has_key('Adjust') == True:
        
        # Don't want Negative values
        if obj['Adjust'] < 0.0:
            obj['Adjust'] = 0.0
        
        # adjust the sensitivity
        sensitivity = obj['Adjust'] * sensitivity

    # return sensitivity
    return sensitivity

#########################################################

# define Invert mouse pitch
def mousePitch(invert, obj):
    
    # check to see if property named Invert was added    
    if obj.has_key('Invert') == True:
            
        # pitch to be inverted?
        if obj['Invert'] == True:
            invert = -1
        else:
            invert = 1
            
    # return mouse pitch
    return invert

#####################################################

# define Cap vertical mouselook
def mouseCap(capped, move, invert, obj):
    
    # check to see if property named Cap was added
    if obj.has_key('Cap') == True:            
    
        # import mathutils
        import Mathutils
        
        # limit cap to 0 - 180 degrees
        if obj['Cap'] > 180:
            obj['Cap'] = 180
        if obj['Cap'] < 0:
            obj['Cap'] = 0
        
        # get the orientation of the camera to world axis
        camOrient = obj.orientation
        
        # get camera Z axis vector
        camZ = [camOrient[0][2], camOrient[1][2], camOrient[2][2]]
        
        # create camera z axis vector 
        vec1 = Mathutils.Vector(camZ)
        
        # get camera parent
        camParent = obj.parent
        
        # get parent orientation to world axis
        parentOrient = camParent.orientation
        
        # get parent z axis vector
        parentZ = [parentOrient[0][2], parentOrient[1][2], parentOrient[2][2]]
        
        # create parent z axis vector
        vec2 = Mathutils.Vector(parentZ)
        
        # find angle between two
        angle = Mathutils.AngleBetweenVecs(vec1, vec2)
            
        # get amount to limit mouselook
        capAngle = obj['Cap']
                
        # get mouse up down movement
        moveY = move[1] * invert
            
        # check capped angle against against camera z-axis and mouse y movement
        if (angle > (90 + capAngle/2) and moveY > 0)   or (angle < (90 - capAngle/2) and moveY < 0)  == True:
            
            # no movement
            capped = True
    
    # return capped
    return capped

###############################################

# define useMouseLook
def useMouseLook(controller, capped, move, invert, sensitivity):
                
    # get up/down movement
    if capped == True:
        upDown = 0
    else:
        upDown = move[1] * sensitivity * invert 
        
    # get left/right movement
    leftRight = move[0] * sensitivity * invert 
        
    # Get the actuators
    act_LeftRight = controller.actuators["LeftRight"]
    act_UpDown = controller.actuators["UpDown"]  
    
    # set the values
    act_LeftRight.dRot = [ 0.0, 0.0, leftRight]
    act_LeftRight.useLocalDRot = False  
    
    act_UpDown.dRot = [ upDown, 0.0, 0.0]
    act_UpDown.useLocalDRot = True
    
    # Use the actuators 
    controller.activate(act_LeftRight)
    controller.activate(act_UpDown) 
    
#############################################

# define center mouse cursor
def centerCursor(controller, gameScreen, Rasterizer):
    
    # extract width and height from gameScreen
    width = gameScreen[0]
    height = gameScreen[1]
    
    # Get sensor named MouseLook
    mouse = controller.sensors["MouseLook"]
    
    # get cursor position
    pos = mouse.position
        
    # if cursor needs to be centered
    if pos != [ width/2, height/2]:
        
        # Center mouse in game window
        Rasterizer.setMousePosition(width/2, height/2)
        
    # already centered.  Turn off actuators
    else:
        # Get the actuators
        act_LeftRight = controller.actuators["LeftRight"]
        act_UpDown = controller.actuators["UpDown"]  
        
        # turn off the actuators 
        controller.deactivate(act_LeftRight)
        controller.deactivate(act_UpDown) 

##############################################

# Run program
main()

Almost all of the python scripts will not work in 2.53, it is now using a new version of python and the old scripts no longer will work, they will have to be edited.

lovely that basically ruined my entire game :frowning: and I have no idea how to edit these so garrrr

Why do i keep seeing such long mouse look scripts? Why not jsut use this?

from GameLogic import *
from Rasterizer import *
from math import *
cont = getCurrentController()
own = cont.owner

# get Sensors--------------------
cam = cont.sensors["cam"].owner
mouse = cont.sensors["mouse"]

#define Function calls--------------
winH = getWindowHeight()/2
winW = getWindowWidth()/2

Xpos = mouse.position[0]
Ypos = mouse.position[1]

#define Variables--------------------
speed = .002
pitchSpeed = .5

x = 0
y = 0
z = 0

minPitch = -1.0
maxPitch = 1.5
pitchDiff = 0

#Mouse Program-------------------------
YDiff = Ypos - winH		
XDiff = Xpos - winW

if (Ypos > winH):
	if own["pitch"] > minPitch:
		pitchDiff = (float(YDiff) * pitchSpeed / winH)
	
elif (Ypos < winH):
	if own["pitch"] < maxPitch:
		pitchDiff = (float(YDiff) * pitchSpeed / winH)
		
		
if (Xpos < winW):
	x = float(XDiff) * -speed
	
elif (Xpos > winW):
	x = float(XDiff) * -speed


own["pitch"] -= pitchDiff
own["yaw"] += x



own.setOrientation([0,0,own["yaw"]])
cam.setOrientation([own["pitch"],0,0])
setMousePosition(winW,winH)

it doesn’t work in 2.5 but i’ll get to converting it soon enough :stuck_out_tongue: all that needs to be changed is the setOrientation part at the end, cause its gone and dun become depreciated :smiley:

Looking over the script posted by Matt_Goles I see two changes that need to be made:

The division operators used to calculate winH and winW need to be changed from ‘/’ to ‘//’. Python 3 now uses ‘/’ for floating point (or “real”) division as opposed to integer division. To get integer division, use the ‘//’ operator.

As Matt already noted, setOrientation() has been deprecated in 2.49 and removed in 2.5. Instead, the localOrientation property should be used. For example: own.localOrientation = [0,0,own[“yaw”]]

Thanks Moguri! didn’t know about the devision change!

still though this kinda stinks cause I got three scripts. One which will never be updated because the author won’t. One a mouse which appears as though it may.

There are 3 tasks if you want to convert a python script from 2.49 to 2.5:

Python 2 -> Python 3:
The official Python documentation contains a page that describes how to convert from Python 2 to Python 3. Just google for that.

Blender API 2.49 -> 2.5:
Carefully what the script in 2.49 to get rid of the deprecation warnings. They usually tell what to do to convert the code.

Changed implementation:
Sometimes the implementation changed and the things do not work as before. Look for the errors at the console window and try to correct them. If you can’t you can ask in this forum. This kind of errors should come up very often.

Unfortunatly all three points needs a bit of programming knowledge.

Thanks. Unfortunately for me all I know is flash, html, and vb lol

Python is very straightforward, you should be able to learn it in a couple days or so without problems.

I also had another thought. When I upgraded to the beta I didn’t get the latest python 3. I’m still on python 2.6 if I upgraded would that help or did blender already install that?