Presentation is loading. Please wait.

Presentation is loading. Please wait.

Scripting IMGD 4000 Some material from Mat Buckland. Programming Game AI by Example, Wordware, ISBN-13: 978- 1556220784, 2005. Chapter 6Programming Game.

Similar presentations


Presentation on theme: "Scripting IMGD 4000 Some material from Mat Buckland. Programming Game AI by Example, Wordware, ISBN-13: 978- 1556220784, 2005. Chapter 6Programming Game."— Presentation transcript:

1 Scripting IMGD 4000 Some material from Mat Buckland. Programming Game AI by Example, Wordware, ISBN-13: 978- 1556220784, 2005. Chapter 6Programming Game AI by Example

2 Scripting Two senses of the word in games* – “scripted behavior” Having NPCs follow pre-set actions rather than choosing them dynamically – “scripting language” Using a interpreted language to make the game easier to modify The two are related: – A scripting language is good for writing scripted behaviors (among other things) 2 * also “shell scripts”, which are not today’s topic

3 Outline Scripted behavior(next) Scripted language Lua Blueprints

4 4 Scripted Behavior One way of building NPC behaviors Other way is simulation-based behavior – e.g., goal/behavior trees – genetic algorithms – machine learning – etc.

5 Scripted vs. Simulation-Based Behavior Example of scripted behavior (in combat game) – Fixed trigger regions When player/enemy enters predefined area Send pre-specified waiting units to attack – Doesn’t truly simulate scouting and preparedness – Easily found “exploit” e.g., Mass outnumbering force just outside trigger area Attack all at once 5

6 Scripted vs. Simulation-Based Behavior Non-scripted (“simulation-based”) version? – Send out patrols – Use reconnaissance information to influence unit allocation – Adapt to player’s behavior (e.g., massing of forces) – Can even vary patrol depth depending on stage of game 6

7 Advantages of Scripted Behavior Much faster to execute – Apply simple rule versus run complex simulation Easier to write, understand and modify – Than sophisticated simulation 7

8 Disadvantages of Scripted Behavior Limits player creativity – Players try things that “should” work (based on their own real-world intuitions) – Disappointed when they don’t Allows degenerate strategies – Players learn limits of scripts – and exploit them Games need many scripts – Predicting their interactions can be difficult  Complex debugging problem 8

9 Stage Direction Scripts Controlling camera movement and “bit players” Create guard at castle drawbridge Lock camera on guard Move guard toward player and so on Better application of scripted behavior – Doesn’t limit player creativity as much – Improves visual experience 9 Matinee for cinematic in-game sequences

10 Outline Scripted behavior(done) Scripted language(next) Lua Blueprints

11 11 Scripting Languages You can probably name a bunch of them… Two flavors: 1.Custom languages tied to specific games/engines – UnrealScript, Blueprints, QuakeC, HaloScript, Linden Script (LSL),... 2.General purpose languages – Tcl, Python, Perl, Javascript, Ruby, Lua,... – “Modern” trend, especially with Lua Often used to write scripted behaviors

12 12 Custom Scripting Languages Custom scripting language tied to specific game, which is just idiosyncratically “different” (e.g., QuakeC) doesn’t have much to recommend it However, game-specific scripting language that is truly natural for non-programmers can be very effective: if enemy health < 500 && enemy distance < our big range move... fire... else... return (GalaxyHack) UE4 Blueprints

13 13 Custom Languages and Tools “Designer UI” from Halo 3 (Microsoft, 2007)

14 14 General Purpose Scripting Languages What makes a general purpose scripting language different from any other programming language? Interpreted (byte code, virtual machine) – Technically, property of implementation (not language per se) – Faster development cycle – Safely executable in “sandbox” – Recently JIT native compilation also Simpler syntax/semantics – Untyped – Garbage-collected – Built-in associative data struct ures “Plays well” with other languages – e.g., LiveConnect (Java/Javascript with Web browser),.NET (Microsoft framework for interoperability), Lua stack (integrates with many languages)

15 15 General Purpose Scripting Languages But when all is said and done, it looks pretty much like “code” to me.... e.g., Lua function factorial(n) if n == 0 then return 1 end return n * factorial(n - 1) end So it must be about something else...

16 Now go back... To the world of C++ engines.... 16

17 17 Scripting Languages in Games So it must be about something else... Namely, the game development process For technical staff – Data-driven design (scripts viewed more as “data,” not part of codebase) – Script changes do not require game recompilation For non-technical staff – Allows parallel development by designers – Allows end-user extension

18 A Divide-and-Conquer Strategy Implement part of game in C++ – The time-critical inner loops – Code you don’t change very often – Requires complete (often very long) rebuild for each change and part in scripting language – Don’t have to rebuild C++ part when change scripts – Code you want to evolve quickly (e.g., NPC behaviors) – Code you want to share (with designers, players) – Code that is not time-critical (can migrate to C++ later) 18

19 General Purpose Scripting Languages But to make this work, you need to successfully address a number of issues Where to put boundaries (APIs) between scripted and “hard-coded” parts of game Performance Flexible and powerful debugging tools – even more necessary than with some conventional (e.g., typed) languages Is it really easy enough to use for designers!? 19

20 A Note About Performance Scripting languages with game engine can often take performance hit – e.g., UE4 blueprints take performance hit about 10x over C++! [Billy Bramer 2014, Epic Staff and UE4 developer] [Billy Bramer 2014, Epic Staff and UE4 developer] But this performance hit is often not an issue – Remember, working code more important than high performance code! – Performance only matters if it impacts playabililty/quality There is big difference between "slower than C++" and "too slow to be used"

21 Guidelines for Scripting vs. C++ (1 of 2) For engines that support both (e.g., UE4), generally – Content creators and game designers use script – Engineers use C++, but sometimes script depending upon feature For performance, vast majority of game programming cases, scripting fine – Level of comfort (or interest learning) can help decide Do “heavy lifting” in C++ – A few nodes call back into C++ functionality no problem Just like don’t put performance heavy code inside Object tick/update function, don’t put performance heavy code in script – e.g., computing A* for large map each tick With engine, parts of game that are performance critical in C++, so don’t worry about script performance – e.g., game loop and collision detection already C++ Scripting often good for triggered events – e.g., triggered when event happens, like taking damage

22 Guidelines for Scripting vs. C++ (2 of 2) Engineers intentionally expose custom C++ methods and variables for content creators (e.g., artists and designers) to use to a)Speed up content creators workflow, without them dealing with nitty-gritty details b)Protect content creators against intricacies of feature that might be error-prone or confusing (e.g., content creator doesn’t care about math involved with placing building on unlevel terrain) c)Expose properties so content creator can just adjust and view d)Provide method for operation content creator repeats often, thus doing operation “behind the scenes” (Excerpted from blog posts from Billy Bramer, Epic Staff and UE4 developer)

23 Outline Scripted behavior(done) Scripted language(done) Lua(next) Blueprints

24 Most Popular Game Scripting Language? Lua Has come to dominate other choices – Powerful and fast – Lightweight and simple – Portable and free See http://www.lua.org/http://www.lua.org/ 24

25 152 Lua-scripted Games [Wikipedia] (March 23, 2015) 25 A Allods Online List of American Girl video games Angry Birds (video game) Aquaria (video game) B Baldur's Gate The Battle for Wesnoth Bet On Soldier: Blood Sport Blitzkrieg (video game series) Blitzkrieg (video game) Brave: The Search for Spirit Dancer Broken Age Brütal Legend Bubble Ball Buzz! BZFlag C Chaotic Rage Civilization V Company of Heroes Cortex Command Crackdown Crowns of Power Crysis D Dark Role Play Dark Souls DarkSpace Dead Hungry Diner Demigod (video game) Digital Combat Simulator Diner Dash Don't Starve Driver: San Francisco Dungeon Crawl Stone Soup Dungeons (video game) E Elysian Shadows Empire: Total War Enigma (video game) Escape from Monkey Island Etherlords Eufloria Evil Islands: Curse of the Lost Soul EXperience112 F Fable II The Fairly OddParents: Shadow Showdown Far Cry (video game) FlatOut (video game) FlatOut 2 Foldit Fortress Forever Freeciv Freelancer (video game) G Garry's Mod Grim Fandango The Guild 2 H Tom Clancy's H.A.W.X Headhunter Redemption Hearts of Iron III Heroes of Might and Magic V Homeworld 2 Hyperspace Delivery Boy! I Impossible Creatures The Incredibles: When Danger Calls K King's Bounty: The Legend L L.A. Noire Legend of Grimrock Lego Universe Linley's Dungeon Crawl Lock On: Modern Air Combat M Mafia II Magic: The Gathering – Duels of the Planeswalkers MDK2 Mercenaries: Playground of Destruction Metaplace Monopoly Tycoon Multi Theft Auto MUSHclient N Napoleon: Total War Natural Selection 2 O Operation Flashpoint: Dragon Rising Orbiter (simulator) P Painkiller (video game) PlayStation Home Prison Architect Project Zomboid Psychonauts Puzzle Quest: Challenge of the Warlords R Rail Simulator RailWorks Rappelz Regnum Online Requiem: Memento Mori Richard Burns Rally Rift (video game) RigidChips Roblox Rolando 2: Quest for the Golden Orchid Room for PlayStation Portable ROSE Online Runes of Magic Ryzom S S.T.A.L.K.E.R.: Call of Pripyat S.T.A.L.K.E.R.: Clear Sky S.T.A.L.K.E.R.: Shadow of Chernobyl Saints Row 2 Saints Row IV Saints Row: The Third Serious Sam 3: BFE Shank (video game) Shank 2 Silent Storm SimCity 4 The Sims 2: Nightlife Singles: Flirt Up Your Life Skyland SSR Sonic Unleashed Spacebase DF-9 SpellForce: The Order of Dawn SplitApple Spring Engine Star Wars: Battlefront Star Wars: Battlefront II Star Wars: Empire at War Star Wars: Empire at War: Forces of Corruption Star Wolves StepMania Stolen (video game) Stratagus Strike Suit Zero Supreme Commander (video game) Supreme Commander: Forged Alliance T T-80 Darts Tales of Maj'Eyal Tales of Pirates Tap Tap Revenge There (virtual world) Toribash Trouble in Terrorist Town U ÜberSoldier UFO: Afterlight UFO: Alien Invasion UltraStar Universe at War: Earth Assault V Vegas Tycoon Vendetta Online W Warhammer 40,000: Dawn of War Warhammer 40,000: Dawn of War II Widelands WildStar (video game) The Witcher (video game) World of Warcraft Worms 4: Mayhem X X-Moto Y You Are Empty

26 Lua Language Data Types Nil – singleton default value, nil Number – internally double (no int’s!) String – array of 8-bit characters Boolean – true, false – Note: every non-boolean except nil coerced to true!, e.g., “”, 0 are true Function – unnamed objects – Can be stored, passed as arguments, returned as results Table – key/value mapping (any mix of types) – Used heavily when manipulating data UserData – opaque wrapper for other languages Thread – multi-threaded programming (reentrant code) 26

27 Lua Variables and Assignment Untyped: any variable can hold any type of value at any time A = 3; A = “hello”; Multiple values – In assignment statements A, B, C = 1, 2, 3; – Multiple return values from functions A, B, C = foo(); 27

28 “Promiscuous” Syntax and Semantics Optional semi-colons and parens A = 10; B = 20; A = 10 B = 20 A = foo(); A = foo Ignores too few or too many values A, B, C, D = 1, 2, 3 A, B, C = 1, 2, 3, 4 Uptake? Flexible and forgiving, but can lead to a debugging nightmare! Moral: Only use for small procedures 28

29 Lua Operators arithmetic: + - * / ^ relational: = == ~= logical: and or not concatenation:..... with usual precedence 29

30 Lua Tables Heterogeneous associative mappings Used a lot Standard array-ish syntax – Except any object (not just int) can be “index” (key) mytable[17] = “hello”; mytable[“chuck”] = false; – Curly-bracket constructor mytable = { 17 = “hello”, “chuck” = false }; – Default integer index constructor (starts at 1!) test_table = { 12, “goodbye”, true }; test_table = { 1 = 12, 2 = “goodbye”, 3 = true }; 30

31 Lua Control Structures Standard if-then-else, while, repeat and for – with break in looping constructs Special for-in iterator for tables data = { a=1, b=2, c=3 }; for k,v in data do print(v+” “+k) end; produces, e.g., a 1 c 3 b 2 (order undefined) 31

32 Lua Functions Standard parameter and return value syntax function (a, b) return a+b end Inherently unnamed, but can assign to variables foo = function (a, b) return a+b; end foo(3, 5)  8 32

33 Other Lua Features... Object-oriented style (alternative dot/colon syntax) Local variables (default global) Libraries (sorting, matching, etc.) Namespace management (using tables) Multi-threading (thread type) Bytecode, virtual machine Some features primarily used for language extension See http://www.lua.org/manual/5.3http://www.lua.org/manual/5.3 33

34 Outline Scripted behavior(done) Scripted language(done) Lua(done) Blueprints(next)

35 So what’s all this got to do with UE4? Game engine core of UE4 is coded in C++... UE4 provides blueprints “scripting languages” – Also some Macros that can act like scripts So this is the divide-and-conquer paradigm we discussed! 35

36 Scripting and Unreal Engine UE1 and UE2 Designed for First Person Shooters (FPS) UnrealScript game scripting language UE3 Kismet visual scripting added More modular game classes But still very FPS centric UE4 UnrealScript replaced with Blueprints Game genre agnostic Lots of sample projects! 36

37 UnrealScript vs. C++ vs. Blueprints UnrealScript was: An object-oriented scripting language Similar in syntax to C, C++, Java, but also somewhat different Compiled to virtual machine byte code Added features, such as States, Timers, Delegates Blueprints are: Visual scripting designed to be artist and designer friendly Using same virtual machine as UnrealScript Almost as powerful as UnrealScript, in some ways better Extensible by users with features C++ has: Always been part of UE game programming Tight bi-directional integrations with virtual machine Been extended with added macros in UE4 to replace UnrealScript for coders C++ Blueprints VM 37

38 What are Blueprints? Blueprints are scripting language built on top of C++ – Behind scenes, calling existing C++ methods – Used to automate existing functionality already coded in C++ Blueprint class (often shortened to blueprint) – Created inside Unreal Editor visually (e.g., contrast to typing code in VS) – Define new class or Actor can be placed into maps as instances that behave like any other type of Actor. Thus, scripting that can be extended by game programmer

39 UE4 Blueprint Example Player presses “dash” and if character can jump, launch character based on character’s current velocity with an upward (z) velocity.

40 Created in Blueprint Editor

41 Blueprint Types (1 of 2) Two types of blueprints – level and class Level blueprint – one per level – Reference and manipulate Actors within level – Control cinematics (using Matinee Actors) – Manage level-related resources (e.g., checkpoints) – Interact with blueprint classes in level (e.g., reading/setting variables, triggering events) Blueprint class (next slide)

42 Blueprint Types (2 of 2) Blueprint class – interactive assets (e.g., doors, switches, destructible scenery) – Contain necessary scripts to respond to player interactions (collisions) – (e.g., make them animate, change materials, play sound effects) – Broadly, these are “game objects” Prefabs (scripts to pre-fabricate game world) Pawns (e.g., player characters) HUD (heads-up display, such as a status bar) As a sub-set, a “data-only” blueprint contains only node graphs and variables from parent. – Cannot add new attributes. – Allows tweaking of attributes

43 Blueprints Compared to C++ Blueprints Blueprint Asset UBlueprintGeneratedClass ParentClass Variable Graphs/Events Class Defaults Components List C++.h/.cpp files Uclass : [ClassName] Uproperty() Ufunction() native constructor

44 Examples of Blueprints 1.Create custom prefab with construction script (good for artists/designers) – Executes when Actor placed in editor (not gameplay) – Useful for custom props (e.g., light fixture that matches material to color, e.g., randomly scatter leaves) – May be time consuming to create initially, but may save time later 2.Create playable character – Manipulate camera behavior, setup input vents (e.g., mouse, keyboard), create Animation Blueprint – Character Blueprint has moving, jumping, swimming and falling built-in Only need to add input events 3.Create HUD – Contains event sequence and variables, but is assigned to GameMode asset (not level) – Read from other blueprints then display (e.g., read health and display health bar) – Add hit-boxes for buttons

45 Create 3 rd Person Game Using Just Blueprints https://wiki.unrealengine.com/Blueprint_3rd_Person_Game_Creation_Tutorial_Playlist See also, the Blueprint Essentials Tutorial Playlist: https://wiki.unrealengine.com/Blueprint_Essentials_Tutorial_Playlist

46 Bit Bucket

47 But Lua cannot stand alone... Why not? Accessing Lua from C++ Accessing C++ from Lua C Lua

48 Connecting Lua and C++ Lua virtual stack – bidirectional API/buffer between two environments – preserves garbage collection safety data wrappers – UserData – Lua wrapper for C data – luabind::object – C wrapper for Lua data 48 C Lua

49 Lua Virtual Stack both C and Lua env’ts can put items on and take items off stack push/pop or direct indexing positive or negative indices current top index (usually 0) 49 lua-settop 0 C Lua

50 Accessing Lua from C 50 C Lua

51 Accessing Lua Global Variables from C C tells Lua to push global value onto stack lua_getglobal(pLua, “foo”); C retrieves value from stack – using appropriate function for expected type string s = lua_tostring(pLua, 1); – or can check for type if ( lua_isnumber(pLua, 1) ) { int n = (int) lua_tonumber(pLua, 1) }... C clears value from stack lua_pop(pLua, 1); 51 C Lua

52 Accessing Lua Tables from C (w. LuaBind) C asks Lua for global values table luabind::object global_table = globals(pLua); C accesses global table using overloaded [ ] syntax luabind::object tab = global_table[“mytable”]; C accesses any table using overloaded [ ] syntax and casting int val = luabind::object_cast (tab[“key”]); tab[17] = “shazzam”; 52 C Lua

53 Calling Lua Functions from C (w. LuaBind) C asks Lua for global values table luabind::object global_table = globals(pLua); C accesses global table using overloaded [ ] syntax luabind::object func = global_table[“myfunc”]; C calls function using overloaded ( ) syntax int val = luabind::object_cast (func(2, “hello”)); 53 C Lua

54 Accessing C from Lua IMGD 4000 (B 12)54 C Lua

55 Calling C Function from Lua (w. LuaBind) C “exposes” function to Lua void MyFunc (int a, int b) {... } module(pLua) [ def(“MyFunc”, &MyFunc) ]; Lua calls function normally in scripts MyFunc(3, 4); 55 C Lua [ See more details and examples in Buckland, Ch 6.]


Download ppt "Scripting IMGD 4000 Some material from Mat Buckland. Programming Game AI by Example, Wordware, ISBN-13: 978- 1556220784, 2005. Chapter 6Programming Game."

Similar presentations


Ads by Google