scripting ian p. warfield cse 497 - topics on ai and computer game programming october 25, 2004
DESCRIPTION
Advantages of Scripting Game designers can write a lot of code for comparatively little effort The scripting language can be designed specifically for the game under development, minimizing programming overhead Scripts can be changed more easily than codeTRANSCRIPT
Scripting
Ian P. WarfieldCSE 497 - Topics on AI and
Computer Game Programming
October 25, 2004
Definition of Scripting “Scripting is the technique of specifying
a game’s data or logic outside of the game’s source language.” – AI Game Programming Wisdom 2
“A script is a program that automates a sequence of tasks… Early script languages were often called batch languages or job control languages. – http://www.wordIQ.com/
Advantages of Scripting Game designers can write a lot of
code for comparatively little effort The scripting language can be
designed specifically for the game under development, minimizing programming overhead
Scripts can be changed more easily than code
Advantages of Scripting The more “moddable” your game is, the
more people will buy it and the longer it will be marketable
If your game is popular enough, you can license your game engine to other developers This business practice was spurred by the
popularity of DOOM and Quake Later games, such as Quake 3, Unreal, and DOOM
3 were designed specifically with this in mind
Disadvantages of Scripting Nonprogrammers are required to
program Creating a custom scripting
language is an extra step in the game development
The new language requires technical support and tools for debugging
Levels of Scripting Level 0: Everything hard-coded in the
source language Level 1: Stats and locations specified in files Level 2: Scripted non-interactive cutscene
sequences Level 3: Lightweight logic specified by tools
or scripts, as in a trigger system Level 4: Heavy logic in scripts that rely on
core functions in the game engine Level 5: Everything coded in scripts
Level 0: Hard-coded AI
Level 0: Hard-coded AI Quickest to code, especially for small
development teams or small projects Scales very poorly; difficult to debug
complex programs Best suited for simple projects Used in the earliest games such as
Pong, Space Invaders, and Pac-Man
Level 1: Data Specified in Files
Level 1: Data Specified in Files The player’s character, his enemies, the
surrounding objects, and the goals all remain the same – only the arrangement is different
Scales extremely well in terms of game size but poorly in terms of game extensibility
Suitable for repetitive games with multiple levels
Used in early games such as Super Mario, Lode Runner, and Chip’s Challenge
Level 2: Scripted Cutscenes
Level 2: Scripted Cutscenes Scripted cutscenes were actually
quite rare until recently Game designers traditionally prefer to
pre-render cutscenes Game engines did not have the power
to render cutscene-quality graphics on-the-fly
So this is a little out-of-order
Level 2: Scripted Cutscenes Now that game engines can render high
quality graphics, scripted cutscenes are preferred
Cost and file size are both dramatically improved
Scripting also allows for adaptive cutscenes depending on story developments
Used in games such as Half-Life and Star Trek Voyager: Elite Force
Level 3: Trigger System
Level 3: Trigger System Functions are coded in C/C++ and
linked by scripts Scripts consist of “events” which
trigger actions or possibly other events
Offers best balance of flexibility, ease of use, power, speed, and extensibility
Used in Freespace 2
Level 4: Heavy Script Logic
Level 4: Heavy Script Logic Only the core functions are coded in
C/C++; most of the logic is in the script Handle interesting events and
character AI, but let the game handle physics, etc.
Offers large degree of flexibility while still providing a solid code foundation
Used in Unreal and Half-Life
Level 5: Everything in Scripts
Level 5: Everything in Scripts The bare minimum of functions are
coded in C/C++; everything else is scripted
Scripts resemble full-fledged programming languages
Offers maximum degree of flexibility but carries most of the same risks as conventional programming
Used in Jax and Daxter
Level 5: Everything in Scripts Nearly all the run-time code written in GOAL
(similar to LISP) Code could be modified on-the-fly
No need to recompile the engine Debugging took much less time
There were setbacks, however Compiler took a long time to develop Developers had to create their own debugging
and support utilities Programming in GOAL required adjustment from
C/C++
Achieving a Balance Most games are designed for
scripting at Level 3 or Level 4 Flexibility of scripting combined
with power of C/C++ Libraries, tools, profilers,
debuggers are still available
Achieving a Balance Level 3 and Level 4 can be thought
of as “declarative” and “imperative” models, respectively
Declarative – program in terms of “what” needs to be accomplished
Imperative – program in terms of “how” to accomplish it
Declarative Model No implicit state, no assignments Expression evaluation instead of
instruction sequencing Recursion instead of loops Tends toward “functional”
programming paradigm, used in LISP
Declarative Model Sample code:
( when( is-destroyed “NTD Repulse” )( send-message “Well done” )
)
Imperative Model States defined in variables Variable modification through
explicit assignment Loops and iterative sequences of
statements
Imperative Model Sample code:
ship *ship_ctr;for (ship_ctr = GET_FIRST(ship_list); ship_ctr != GET_LAST(ship_list); ship_ctr =
GET_NEXT(ship_ctr)){
if (strcmp(ship_ctr->name, “NTD Repulse”) == 0){if (ship_ctr->flags & SF_DESTROYED){message_queue_add(“Well done”);break;}}
}
A Level 3 Demonstration FRED – the FReespace EDitor Visit the Freespace 2 community
forums at http://www.3dap.com/hlp/
Summary Core C/C++ functions do the hard work and
the script provides the creative element Scripting provides the flexibility and
moddability your game needs to be successful The write-time advantage far outweighs the
run-time and development-time disadvantage Choose an appropriate level of scripting that
balances flexibility and user-friendliness with the power of your underlying game engine
Sources Combs, Nathan, and Jean-Louis Ardoint. Declarative versus Imperative
Paradigms in Games AI. http://www.roaringshrimp.com/. Definition of Script (computer programming). http://www.wordIQ.com/. Game Engine. http://www.wikipedia.com/. Niestadt, Jan. Implementing a Scripting Engine. http://www.flipcode.com/. Patel, Amit. Amit’s Game Programming Information. http://www-cs
-students.stanford.edu/~amitp/. Rabin, Steve, et al. AI Game Programming Wisdom 2. Hingham: Charles
River Media, Inc., 2004. Scripting. http://www.wikipedia.com/. Simpson, Jake. Game Engine Anatomy 101. http://www.extremetech.com/. Sweeny, Tim. UnrealScript Language Reference. http://unreal.epicgames
.com/. White, Stephen. Postmortem: Naughty Dog's Jak and Daxter: the Precursor
Legacy. http://www.gamasutra.com/.