94

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

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 ...


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 ...


15

Unity is using Mono behind the scenes. Every time you make a change to your C#/UnityScript scripts it recompiles the code almost instantly. If you look in the data directory of a standalone unity player, you can see it has compiled all the scripts into Assembly-CSharp.dll, or similar. So yes, the C# is being compiled.


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

Do python games use Lua? Generally? No. Is it a resonable thing or I should just stick to pure python? Define "reasonable"? Python has been used in many game development scenarios. While Lua may be well known among some game mod circles (like WoW GUIs, Garry's Mod, and so forth), Python was the language of choice for Civilization IV modding. So it's ...


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

1) Would one embed the script itself in the entity object before persisting to it to the disk? Is this okay? You'll get cleaner diffs in your version control and encourage reusable scripts by providing the actual script out-of-line and having the entity merely store, say, a filename and script parameters. Storing the script in the entity itself is viable ...


6

Where I come from, we see the upgrade problem as subsumed by the persistence problem. In this case, that means: Most games need saved games; you will want some way to save the entire state of the game and resume it later. Get that implemented now, and define your hot-reload as follows: Save game to a temporary buffer. Discard all game state and loaded ...


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

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

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've been writing a few blog posts about this recently. Specifically for entities data files, and the just published post for taking those data files and turning them into entities. Essentially, you write your own parser for a custom script language. The parser reads components into "blueprint" form for your factory. Each entity will have a set of component ...


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

Unity allows you to get individual key down events via the Input.GetKey function, and the appropriate key enum. Additionally, it supports axis information via the Input.GetAxis function. http://docs.unity3d.com/Documentation/ScriptReference/Input.GetKey.html http://docs.unity3d.com/Documentation/ScriptReference/Input.GetAxis.html http://docs.unity3d.com/...


4

Technique you are searching for might be Inverse Kinematics. In short the input is the desired global pose of single joint (hand of your woman slapping 1.6m guy) which is the end effector. You solve for the local poses of other joints in your animation that will bring the end effector to desired location. It's explained in detail in Jason's Weber article ...


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