98

Scripting is a programming abstraction in which you (conceptually) have a program (the script) running inside another program (the host). In most cases, the language in which you write the script is different from the language in which the host is written, but any program-inside-a-program abstraction could be considered scripting. Conceptually, the common ...


42

Scripts written in scripting / embedded / interpreted languages such as "Lua", "Lisp" or "AngelScript" (more here) can be updated during the game [*] and then are interpreted (= executed) on the fly. You can bind elements from those scripts to your native compiled coding (C++, etc.) so that the scripts can then execute logic from your application. E. g. a ...


41

No. At least, probably not. This is a very frequent case of reinventing the wheel is game development, a mistake that is still quite popular. If you're asking this question, you're very likely to be influenced by what others do, so just look at what Epic Games just did with the Unreal Engine: UE3 had a custom, weird, non-optimized, hard-to-debug ...


12

Have you looked into entity component systems and event messaging strategies? Status effects should be components of some sort which can apply their persistent effects in an OnCreate() method, expire their effects in OnRemoved() and subscribe to game event messages to apply effects which occur as a reaction to something happening. If the effect is ...


12

Embedded language is the proper technical term. In practice, languages which are used inside other applications (such as games) are often referred to as scripting or even interpreted languages, although they should not necessarily be interpreted or used for automating routine tasks. Googling "scripting languages for games" would probably yield more useful ...


11

RobStone is on the right track, but I wanted to elaborate since this is exactly what I did when I wrote Dungeon Ho!, a Roguelike that had a very complex effects system for weapons and spells. Each card should have a set of effects attached to it, defined in such a way that it can indicate what the effect is, what it targets, how, and for how long. For ...


11

You are looking for a way to change the code into some actions. This is precisely what interpreters are doing. Take a look at Python. You run it, and bam! You land in REPL(Read Eval Print Loop). You define a function "hello" which prints "Hello, world". And there you have it! Notice that you didn't compile anything; interpreter did some magic to create ...


9

Have you made your own scripting language and why did you chose to roll your own instead of using an existing one? I have, although I borrowed the syntax from other languages. All in all it was a great learning experience and in my case not that hard because the language was simple. I did it mainly because I wanted to use a regular C-style syntax for my ...


8

Lua is a pretty well developed scripting engine that is flexible and easy to integrate to your games, and is already supported in many game engines, for instance: 2D Agen (Lua; Windows) Blitwizard (Lua; Windows, Linux, Mac) Corona (Lua; Windows, Mac; iOS/Android) EGSL (Pascal/Lua; Windows, Linux, Mac, Haiku) Grail Adventure Game Engine (C++/Lua; Windows, ...


7

It depends on what kind of modding the game allows. When the game in question already includes a sufficiently powerful script interpreter, one could write a transcompiler which takes a script written in Lua and transforms it into a program in the scripting language of the game so that it can be executed. Alternatively, one could even create a Lua ...


6

That shouldn't be too much of a problem with an interpreted language like LUA or Python. I know about a LUA binding that's ready and available in the Unity Asset Store. It seems there are other bindings available as well. Just search the Asset Store in the "Scripting/Integration" category. Here's one for python that I found.


6

In the simplest terms i can put it. There will be some kind of "trigger" volume in most cases. When the player steps into this volume it will trigger the "event". Volumes will be a cube, or a sphere, or some other 3D primitive. The script will either be a pre-animated cutscene, in which case an animation will be played, or the gameplay script will be some ...


6

The method I have used with good results is to give each class that needs Lua bindings a static class method with the following signature: static luabind::scope luaBindings(); The definition of this method looks like this: luabind::scope MyClass::luaBindings() { using namespace luabind; return class_<MyClass>("MyClass") .def(...


6

There are many ways to implementing scripting in game engines, or applications in general. Most conventional scripting languages are just like any other library. Just as libpng interprets a particular data format and provides APIs to read the results of processing that format, a scripting language library like Lua read in a particular format (Lua source ...


6

What you're describing is effectively running gameplay mechanics in a virtual machine, which can simplify the process of authoring them and insulate against bad behaviour. As it happens, a lot of games already do their gameplay like this under the hood! If you've ever heard developers talk about incorporating scripting languages like Lua, or node graph ...


5

I have seen this suggested but most poeple suggest lua but that does not seem to fit my type of programming. OK, let's try this from a different angle: what is it about Lua that you don't like? Is it something that is easily fixable, or is it something fundamental? For example, take the use of keywords such as then/do/end to denote code block rather than ...


5

Scripting languages like Lua can be used in several ways. As you said you can use Lua to call functions in the main program but you can also just have Lua functions called from the C++ side if you want. Generally you build up an interface to allow some flexibility with the scripting language of your choice so you can use the scripting language in a series of ...


5

Don't hard-code it, or it'll indeed end up very messy. You need to script the NPCs daily routines into some data file (XML or other). Something along the lines of: <npc name="george"> <schedule start="0:00" end="8:00"> <sleep at="home"/> </schedule> <schedule start="8:00" end="9:00"> <walk leave="home" ...


5

Method 1 - Unity UI Event System Thanks to Byte56 for pointing out that there's a new approach to messaging in Unity, which is much more similar to what the asker describes in Unreal. One quick heads-up: This approach is quite verbose compared to what I'm used to. If you just need a quick way to call a method on another object, without all the ...


5

It's the class name of the component you want to add. For example, if you created a MonoBehaviour script named GoToPosition and wanted to add it to a game object via script you would call: AddComponent("GoToPosition"); That being said, this isn't typically a method I use. I'd rather be explicit about it and use the alternate method of adding components: ...


5

There are multiple methods to deal with this. 1) You could create an enum with custom values that you could refer to: public enum Grenades { Standard = 5, Cluster = 10, } You can then refer to it by int value = Grenades.Standard 2) You could use a dictionary to store values: Dictionary<string, int> grenades= new Dictionary<string, int>(); ...


4

0) Move your constructor to a separate file, there's no rule that says your entire class has to be all in one physical .cpp file. 1) Put your binding code in a separate function in a different file, have the constructor call it? This would be the preferred method. 2) write your binding code in a separate file, inline, and #include it directly into your ...


4

LUA would work fine for programming an AI. Here is a basic article over making a FSM in LUA http://lua-users.org/wiki/FiniteStateMachine Here is a basic set of classes to make a desicion tree in LUA http://gamecode4.googlecode.com/svn/trunk/Assets/Scripts/DecisionTreeBrain.lua LUA overall is an extremely powerful language. Any scripting language would ...


4

You embed the scripting engine inside the game engine. I've never used this but you probably want boost::python


4

Do you really need to script things? If the project is just you, and you're not making a sprawling RPG you arent really going to gain much in the way of productivity by using a scripting language. But what about recycle time and ease of programming I hear people chime in with. Well. C++ has a slew of excellent tools and debuggers (visual studio), ...


4

Since no one mentioned this, I will add it here for those interested. There is a whole book on the subject called Game Scripting Mastery. This is a fantastic text that was written quite a while ago, but it remains completely relevant today. This book will not only show you how scripting languages fits into native code, it also teaches you how to implement ...


4

Assuming that the hash function used by StringToHash doesn't have serious bias, the chance of two hashes being alike is one in 4 billion. When you generate a lot of hashes, the chance of a collision gets larger than one would expect (see birthday problem), but when you have 100 different strings, the overall chance of a collision is still at about a million ...


4

You can retrieve the number of frames that have passed with Time.frameCount();, if that's what you're looking for. http://docs.unity3d.com/ScriptReference/Time-frameCount.html From there, writing to a file in C# is pretty trivial: http://forum.unity3d.com/threads/how-to-write-a-file.8864/


Only top voted, non community-wiki answers of a minimum length are eligible