Lua in a Game

Bozzy

Active member
Joined
Aug 31, 2007
Messages
27
Programming Experience
Beginner
Hi,

I have a made a game, using my own engine, in VB.NET. I would like to use Lua as the scripting language for the game.

However, I want this to be a full-blown scripting setup, instead of just storing variables in tables, in the base class etc, and also so that I don't just get functions to return values.

How would I go about doing this?

I need help with both LUAInterface (which I am using) and the actual LUA (not the language, just the ideas)

Can anybody help me with this?
BTW I have the following setup:
  • Getting strings
  • Getting numbers
  • Getting table values
  • Getting functions from a file and returning simple values


Cheers,
Bozzy
 
Here is some code from a ScriptingSystem Library I use to have full interaction between my 3D game engine and LUA.

VB.NET:
Imports System 
Imports System.Collections.Generic 
Imports System.Linq 
Imports System.Text 
Imports LuaInterface 
Imports Python.Runtime 
Imports Phoenix_Engine 

Namespace ScriptingSystem 
    Public Class LUAScriptEngine 
        Public luaparser As New Lua() 
        Public sengine As New Phoenix_Engine.Graphics.Render_Engine() 
        Public smath As New Phoenix_Engine.Math.MathHelper() 
        
        Public Sub RegisterEngineFunction(ByVal [function] As String) 
            Try 
                luaparser.RegisterFunction([function], sengine, sengine.[GetType]().GetMethod([function])) 
            Catch e As System.Reflection.AmbiguousMatchException 
                Console.WriteLine(e.Message) 
            End Try 
            
        End Sub 
        
        Public Sub RegisterFunctionMath(ByVal [function] As String) 
            luaparser.RegisterFunction([function], smath, smath.[GetType]().GetMethod([function])) 
        End Sub 
        
        Public Sub ParseEntityLUAAsCode(ByVal entity As Integer) 
            Dim luacode As String = Phoenix_Engine.Graphics.Render_Engine.EntityProperty(entity, "lua", "") 
            If luacode <> "" Then 
                luaparser.DoString(luacode) 
            End If 
        End Sub 
        
        Public Sub ParseEntityLUAAsFile(ByVal entity As Integer) 
            Dim luafile As String = Phoenix_Engine.Graphics.Render_Engine.EntityProperty(entity, "lua", "") 
            If luafile <> "" Then 
                luaparser.DoFile(luafile) 
            End If 
        End Sub 
        
        Public Sub RunScript(ByVal filepath As String) 
            luaparser.DoFile(filepath) 
        End Sub 
        
        Public Sub RunChunk(ByVal chunk As String) 
            luaparser.DoString(chunk) 
        End Sub 
        
        Public Function GetTable(ByVal path As String) As Object 
            Return luaparser.GetTable(path) 
        End Function 
        
        Public Function GetFunction(ByVal path As String) As Object 
            Return luaparser.GetFunction(path) 
        End Function 
        
        Public Function GetString(ByVal path As String) As Object 
            Return luaparser.GetString(path) 
        End Function 
        
        Public Function GetNumber(ByVal path As String) As Object 
            Return luaparser.GetNumber(path) 
        End Function 
        
        Public Sub NewTable(ByVal path As String) 
            luaparser.NewTable(path) 
        End Sub 
        
        Public Sub LoadRenderEngineFunctions() 
            #Region "Render_Engine Class Encapsulation ------- LUA" 
            RegisterEngineFunction("AddBodyForce") 
            RegisterEngineFunction("AddBodyTorque") 
            RegisterEngineFunction("AddTireTorque") 
            RegisterEngineFunction("AFilter") 
            RegisterEngineFunction("AlignToVector") 
            RegisterEngineFunction("AmbientLight") 
            RegisterEngineFunction("Animate") 
            RegisterEngineFunction("AppLog") 
            RegisterEngineFunction("AppLogMode") 
            RegisterEngineFunction("AppSpeed") 
            RegisterEngineFunction("AppTerminate") 
            RegisterEngineFunction("AppTime") 
            RegisterEngineFunction("BodyOmegaX") 
            RegisterEngineFunction("BodyOmegaY") 
            RegisterEngineFunction("BodyOmegaZ") 
            RegisterEngineFunction("BodyVelocityX") 
            RegisterEngineFunction("BodyVelocityY") 
            RegisterEngineFunction("BodyVelocityZ") 
            RegisterEngineFunction("CameraClsColor") 
            RegisterEngineFunction("CameraClsMode") 
            RegisterEngineFunction("CameraFogColor") 
            RegisterEngineFunction("CameraFogMode") 
            RegisterEngineFunction("CameraFogRange") 
            RegisterEngineFunction("CameraPick") 
            RegisterEngineFunction("CameraProject") 
            RegisterEngineFunction("CameraProjMode") 
            RegisterEngineFunction("CameraRange") 
            RegisterEngineFunction("CameraUnproject") 
            RegisterEngineFunction("CameraViewport") 
            RegisterEngineFunction("CameraZoom") 
            RegisterEngineFunction("ChannelPlaying") 
            RegisterEngineFunction("ClearWorld") 
            RegisterEngineFunction("Cls") 
            RegisterEngineFunction("CollisionX") 
            RegisterEngineFunction("CollisionY") 
            RegisterEngineFunction("CollisionZ") 
            RegisterEngineFunction("CountCollisions") 
            RegisterEngineFunction("CreateBallJoint") 
            RegisterEngineFunction("CreateBoxBody") 
            RegisterEngineFunction("CreateCamera") 
            RegisterEngineFunction("CreateConeBody") 
            RegisterEngineFunction("CreateCorkscrewJoint") 
            RegisterEngineFunction("CreateCorona") 
            RegisterEngineFunction("CreateCylinderBody") 
            RegisterEngineFunction("CreateDecal") 
            RegisterEngineFunction("CreateEmitter") 
            RegisterEngineFunction("CreateFixedJoint") 
            RegisterEngineFunction("CreateHingeJoint") 
            RegisterEngineFunction("CreateLight") 
            RegisterEngineFunction("CreateListener") 
            RegisterEngineFunction("CreatePivot") 
            RegisterEngineFunction("CreatePivotBody") 
            RegisterEngineFunction("CreatePlayer") 
            RegisterEngineFunction("CreateShadow") 
            RegisterEngineFunction("CreateSliderJoint") 
            RegisterEngineFunction("CreateSphereBody") 
            RegisterEngineFunction("CreateSprite") 
            RegisterEngineFunction("CreateTire") 
            RegisterEngineFunction("CreateUniversalJoint") 
            RegisterEngineFunction("CreateUpVectorJoint") 
            RegisterEngineFunction("CreateVehicle") 
            RegisterEngineFunction("CreateWorld") 
            RegisterEngineFunction("CueSound") 
            RegisterEngineFunction("CurrentWorld") 
            RegisterEngineFunction("Delay") 
            RegisterEngineFunction("DrawImage") 
            RegisterEngineFunction("DrawLine") 
            RegisterEngineFunction("DrawRect") 
            RegisterEngineFunction("DrawText") 
            RegisterEngineFunction("EAXEffect") 
            RegisterEngineFunction("EAXSupported") 
            RegisterEngineFunction("EmitSound") 
            RegisterEngineFunction("EnableEAX") 
            RegisterEngineFunction("EntityAutoFade") 
            RegisterEngineFunction("EntityColor") 
            RegisterEngineFunction("EntityDistance") 
            RegisterEngineFunction("EntityHidden") 
            RegisterEngineFunction("EntityMaterial") 
            RegisterEngineFunction("EntityParent") 
            RegisterEngineFunction("EntityPick") 
            RegisterEngineFunction("EntityPitch") 
            RegisterEngineFunction("EntityProperty") 
            RegisterEngineFunction("EntityRoll") 
            RegisterEngineFunction("EntityVisible") 
            RegisterEngineFunction("EntityX") 
            RegisterEngineFunction("EntityY") 
            RegisterEngineFunction("EntityYaw") 
            RegisterEngineFunction("EntityZ") 
            RegisterEngineFunction("FindChild") 
            RegisterEngineFunction("Flip") 
            RegisterEngineFunction("ForEachEntityDo") 
            RegisterEngineFunction("FreeEntity") 
            RegisterEngineFunction("FreeJoint") 
            RegisterEngineFunction("FreeMaterial") 
            RegisterEngineFunction("FreeTexture") 
            RegisterEngineFunction("FreeWorld") 
            RegisterEngineFunction("GCMemAlloced") 
            RegisterEngineFunction("GetCollision") 
            RegisterEngineFunction("GetParent") 
            RegisterEngineFunction("Graphics") 
            RegisterEngineFunction("GraphicsHeight") 
            RegisterEngineFunction("GraphicsWidth") 
            RegisterEngineFunction("HideEntity") 
            RegisterEngineFunction("HideMouse") 
            RegisterEngineFunction("IgniteModel") 
            RegisterEngineFunction("JointStiffness") 
            RegisterEngineFunction("KeyDown") 
            RegisterEngineFunction("KeyHit") 
            RegisterEngineFunction("LightConeAngles") 
            RegisterEngineFunction("LightRange") 
            RegisterEngineFunction("LinePick") 
            RegisterEngineFunction("LoadActor") 
            RegisterEngineFunction("LoadBody") 
            RegisterEngineFunction("LoadMaterial") 
            RegisterEngineFunction("LoadModel") 
            RegisterEngineFunction("LoadSound") 
            RegisterEngineFunction("LoadTexture") 
            RegisterEngineFunction("LoadWorld") 
            RegisterEngineFunction("MaterialName") 
            RegisterEngineFunction("MaxAFilter") 
            RegisterEngineFunction("ModelDetail") 
            RegisterEngineFunction("MouseDown") 
            RegisterEngineFunction("MouseHit") 
            RegisterEngineFunction("MouseX") 
            RegisterEngineFunction("MouseY") 
            RegisterEngineFunction("MoveEntity") 
            RegisterEngineFunction("MoveMouse") 
            RegisterEngineFunction("PaintEntity") 
            RegisterEngineFunction("PauseApp") 
            RegisterEngineFunction("PauseChannel") 
            RegisterEngineFunction("PickedEntity") 
            RegisterEngineFunction("PickedNX") 
            RegisterEngineFunction("PickedNY") 
            RegisterEngineFunction("PickedNZ") 
            RegisterEngineFunction("PickedX") 
            RegisterEngineFunction("PickedY") 
            RegisterEngineFunction("PickedZ") 
            RegisterEngineFunction("PlayerAirborne") 
            RegisterEngineFunction("PlaySound") 
            RegisterEngineFunction("Plot") 
            RegisterEngineFunction("PointEntity") 
            RegisterEngineFunction("PointVisible") 
            RegisterEngineFunction("PositionEntity") 
            RegisterEngineFunction("ProjectedX") 
            RegisterEngineFunction("ProjectedY") 
            RegisterEngineFunction("ProjectedZ") 
            RegisterEngineFunction("RegisterAbstractPath") 
            RegisterEngineFunction("RenderWorld") 
            RegisterEngineFunction("ResumeApp") 
            RegisterEngineFunction("ResumeChannel") 
            RegisterEngineFunction("RotateEntity") 
            RegisterEngineFunction("RotateSprite") 
            RegisterEngineFunction("ScaleSprite") 
            RegisterEngineFunction("SetBlend") 
            RegisterEngineFunction("SetBodyCenterOfMass") 
            RegisterEngineFunction("SetBodyGravity") 
            RegisterEngineFunction("SetBodyMass") 
            RegisterEngineFunction("SetBodyVelocity") 
            RegisterEngineFunction("SetChannelRate") 
            RegisterEngineFunction("SetChannelVolume") 
            RegisterEngineFunction("SetColor") 
            RegisterEngineFunction("SetEmitterAcceleration") 
            RegisterEngineFunction("SetEmitterArea") 
            RegisterEngineFunction("SetEmitterRotation") 
            RegisterEngineFunction("SetEmitterSize") 
            RegisterEngineFunction("SetEmitterSpeed") 
            RegisterEngineFunction("SetEntityProperty") 
            RegisterEngineFunction("SetTireAngle") 
            RegisterEngineFunction("SetWorld") 
            RegisterEngineFunction("ShowEntity") 
            RegisterEngineFunction("ShowMouse") 
            RegisterEngineFunction("SkinModel") 
            RegisterEngineFunction("StopChannel") 
            RegisterEngineFunction("SweptCollision") 
            RegisterEngineFunction("TextureHeight") 
            RegisterEngineFunction("TextureName") 
            RegisterEngineFunction("TextureWidth") 
            RegisterEngineFunction("TFilter") 
            RegisterEngineFunction("TFormedW") 
            RegisterEngineFunction("TFormedX") 
            RegisterEngineFunction("TFormedY") 
            RegisterEngineFunction("TFormedZ") 
            RegisterEngineFunction("TFormNormal") 
            RegisterEngineFunction("TFormPlane") 
            RegisterEngineFunction("TFormPoint") 
            RegisterEngineFunction("TFormVector") 
            RegisterEngineFunction("TranslateEntity") 
            RegisterEngineFunction("TurnEntity") 
            RegisterEngineFunction("UpdatePlayer") 
            RegisterEngineFunction("UpdateWorld") 
            RegisterEngineFunction("UPS") 
            #End Region 
        End Sub 
        
        Public Sub LoadMathHelperFunctions() 
            #Region "MathHelper Class Encapsulation ------- LUA" 
            
            RegisterFunctionMath("Clamp") 
            RegisterFunctionMath("Curve") 
            RegisterFunctionMath("Midpoint") 
            RegisterFunctionMath("Mod") 
            RegisterFunctionMath("DifferenceMod") 
            RegisterFunctionMath("CurveAngle") 
            RegisterFunctionMath("Slerp") 
            
            #End Region 
        End Sub 
    End Class 
    
    'PYTHON ENGINE 
    'THE PYTHON ENGINE IS SIMPLY A PYTHON FILE THAT DEMONSTRATES HOW TO CALL Engine.dll IN PYTHON 
End Namespace

There is a reference to Python.NET, but it isn't used.
 
Back
Top