160 likes | 252 Views
AI and Game Programming. Unreal Tournament Project. Introduction. UT is a FPS The competition Domination mode Domination points Teams of 3 bots First team to 100 points wins. Getting Started. Installation: UT standalone server GameBots ActiveTcl TclViz JBuilder Foundation Javabots
E N D
AI and Game Programming Unreal Tournament Project
Introduction • UT is a FPS • The competition • Domination mode • Domination points • Teams of 3 bots • First team to 100 points wins
Getting Started • Installation: • UT standalone server • GameBots • ActiveTcl • TclViz • JBuilder Foundation • Javabots • JRE v1.5.0_05 • Misc.
Running an Experiment 3. Start Javabot 2. Start the vis. tool 1. Start the server
Creating a Bot • Copy your BotTemplate.java to the directory: C:/…/jbproject/javabot/src/edu/lu • Change the file name to <your bot>.java • Start JBuilder Foundation • Open the Javabot project (javabot.ipx) • Select the package edu.lu • If <your bot>.java does not appear, refresh the project • Edit the template • Rebuild the project
UT Basics • All units are absolute UT units – no bearing to real world units • Bot’s collision cylinder: 39 units tall with a radius of 17 units • Full rotation: 65535 • Radians: (UT_Rotation_Amt / 65535) * 2π • Locations and Orientations • x,y,z • pitch, yaw, roll • up and down, side to side, cartwheel
Server Messages • Format: • MSG_TYP {ATTRIB_TYP ATTRIB_VAL} {…} • Ex. DOM {Id 1} {Location 23,43,13} {Controller 1} • Attribute values returned as strings • 2 Types of Messages • Synchronous • Asynchronous
Server Messages cont. • Synchronous Messages: • Sent in batches at regular intervals • First message is type BEG, last is type END • Constitute one atomic game state • Ex. Visual updates, bot status reports • Asynchronous Messages: • Single messages, generated as events occur • Cannot arrive during sync. message block • Ex. Took damage, picked up a weapon
Client Commands • Use same format as server messages • Commands have persistent effects • Ex. Start shooting, keep shooting until a stop shooting command is sent
Programming • 2 Tasks, 2 Threads • Message handling • FSM • Message Handling – two functions • receivedSyncMessage() • receivedAsyncMessage() • FSM – one function • runner.run()
Programming cont. • Multithreaded: • One thread handles messages • One thread handles the FSM (runner) • May need to use semaphores (synchronized) to avoid race conditions and such protected Object stateLock = new Object(); someMethod() { … synchronized (stateLock) { // shared variable manipulation } }
Programming cont. • Handling messages: Message m; String type, value; type = m.getType(); switch(type) {…} value = m.getProperty(PROP_ID);
Programming cont. • Most commands can be sent with existing function calls (ie. runTo(x,y,z) • Manually sending commands: Properties props; props.setProperty(ATTRIB_TYP,ATTRIB_VAL); client.sendMessage(MSG_TYP, props);
Random helpful info. • edu.isi.gamebots.client.GamebotConstants, contains definitions of all the constants for MSG_TYP, and ATTRIB_TYP • Use log() to print to the Javabot text area • Note: change enableLog to false before submitting your final bot (or manually delete all your log() calls)
Server Adminstration • You can set server settings and monitor your server through a web browser. • After starting the server open a browser and connect to: 127.0.0.1:8888/Administer Username: Admin Password: Admin
Random helpful info. • Sync. message blocks contain DOM messages • Contain the coordinates of a domination pt. • Tells who controls the domination pt. • Use getPath(x,y,z) to get directions to a DOM pt. • IMPORTANT: must tell the javabot client about your bot! • Open edu.isi.gamebots.client.BotRunnerApp • Locate the knownBots data structure • Add the full name of your bot to the array