Advanced T-Robots 3
version 3.03
(ATR3 v3.03)


Copyright (C) 2002, Richard Bartelt, 9bartelt@nw.fmph.uniba.sk
All Rights Reserved

AT-Robots 3 Homepage

AT-Robots 2 Homepage


CONTENTS:

1. Special Note
2. Introduction
3. Credits & Trademarks
4. Requirements
5. The Basics
6. Programming Robots
6.1. Robot Architecture
6.2. The Robot Computer
6.3. Common Syntax Rules
6.4. Comments
6.5. Directives
6.6. The Program
6.6.1. Program Syntax
6.6.2. Instructions
6.6.3. Interrupts
6.6.4. I/O Ports
7. Robot Design
7.1. Hulls
7.2. Materials
7.3. Engines
7.4. Turrets
7.5. Weapons
7.6. Scanners
7.7. Extensions
8. Troubleshooting
9. License & Disclaimer
10. Final Word


1. SPECIAL NOTE:

The idea of this game is not mine.
The creator of the original AT-Robots was, is and will forever remain Ed T. Toton III & NecroBones Enterprises.
The original program is ATR2, available at www.necrobones.com/atrobots.
This version, ATR3, brings a lot of fundamental changes to nearly every aspect of the original ATR2, including total reprogramming of all data structures and implementation of an object oriented architecture.
But since the idea is not mine, know this:

This product includes software developed by Ed T. Toton III & NecroBones Enterprises.

Contents


2. INTRODUCTION:

Hi! Welcome to AT-Robots version 3. If you used ATR2 before, you know what this is all about, altough there are some great changes made to the original, in fact, it's completely overwritten.
You write programs in an x86-assembly-like language to control robots fighting in a simulated arena, and you also equip them with various devices including many kinds of engines, weapons etc.

Contents


3. CREDITS & TRADEMARKS:

Original Concept - Bones (Ed T. Toton III)
New Concept, Design, Programming - Mio (Richard Bartelt)

AT-Robots 3 (c) 2002 Richard Bartelt
AT-Robots 2 (c) 1997 Ed T. Toton III
AT-Robots (c) 1992 Ed T. Toton III
T-Robots (c) 1991 Ed T. Toton III
P-Robots (c) 1988 David Malmberg
C-Robots (c) 1985 Tom Poindexter

Thanx also to RobotWars(R) for a lot of inspiration and motivation.

Contents


4. REQUIREMENTS:

You need a PC with a Win32 operating system, about 1MB of HD space (in fact, it's less...). Well, if you have Win32, you certainly have Notepad or some other text editor to write the robots, but make sure the editor is capable of saving files in ASCII (CR,LF or #13#10) format (I think it's DOS Text Format). The best way to write robots, however, is the integrated editor, which was created by moi, just in case.

Files of the program:
ATR3.exe - the program
ATR3.hlp - program help file
ATR3.cnt - program help contents - I like to refer to cnt files as "cunt files" :)))
ATR3.htm - this file, that is documentation
Updates.txt - text file about all the updates in new versions of the program
config.ats - ATR3 configuration file - see program help for more information
*.at3 - source robot files
*.atc - compiled robot files (something like locked robots in ATR2)
trobots.ico - icon file 1, originally supplied with ATR2, slightly modified
trobots1.ico - icon file 2, used for the registered file types (see ATR3 help file)

Contents


5. THE BASICS:

Here are some commonly used short forms and terms:
ATR - Advanced T-Robots
ID - identification number
devices - external components which you fit onto your robot
unit - is equal to one pixel on the screen
aunit - the angle unit used by the game, 0-255 in particular (as in ATR2)
gcycle - game cycle, a unit of time in which the game is measured
SC - size class
HP - hit points
RP - resilience points
W - weight, in weight points
ACC - acceleration, usually in percent/gcycle
TRN - turn rate, usually in aunits/gcycle
MSPD - max speed, usually in units/gcycle
THR - throttle, usually in percent
SPn - scan property n
SVn - scan value n

Here is the exact meaning of aunits:
     160  192  224 
        \  |  /
         \ | /
    128----+----0
         / | \
        /  |  \
      96  64  32

Some other important notes:

Contents


6. PROGRAMMING ROBOTS:

Robots are written quite similarly as in ATR2, but there are a few changes.
The robot file with extension .at3 consists of two main parts - the directives and the program.
You can't write directives inside the program part and vice versa.

Contents


6.1. ROBOT ARCHITECTURE:

Robots have a rather complex architecture, but basically they consist of the following components: Except for the computer, you choose each of these components from a set of available ones, limited only by maximum weight.

Contents


6.2. THE ROBOT COMPUTER:

The Robot Computer consists of a CPU, Registers, 3 types of memory, an interrupt controller and an I/O device controller.

The CPU is like the usual CPU of a regular PC, it does all the counting and processing. The CPU works only on signed 16-bit integers. It operates at a speed of 5 cycles per gcycle.

All the registers are 16-bit signed integers. The robot has 6 registers named AX, BX, CX, DX, EX, FX. It also has a special register called Flags, which holds the results of compare and test operations. Flags is also a 16-bit value, but only the lower 3 bits are used for now.
BitFlag
0equal
1less
2greater

Main Memory is the memory you can use for your data. Its size is 1024 signed 16-bit integers.
Variables defined via the #VAR directive are stored at addresses 128-255. The rest of the space is the heap - you can use it as you wish.
You address this memory by addresses 0 to 1023.

Program Memory is the memory where the program is stored. Generally you shouldn't mess around with the values stored here.
It can be adressed by addresses 1024 to 4095.

Stack Memory is a LIFO stack. You can't address this memory directly, you can only push values into and pop values off the stack top. The stack is also used by subroutines for storing return addresses. For more details, see 6.6.2.

For Interrupts and I/O Ports, see 6.6.3. and 6.6.4.

Contents


6.3. COMMON SYNTAX RULES:

A basic rule, and one that will probably produce the most errors is that
NO COMMAS ARE USED OR ALLOWED ANYWHERE IN THE ROBOT CODE.
Please remember this.

The compiler doesn't care about uppercase, you can write any way you want.
The number of spaces between any words or numbers is also optional. TABs can also be used instead of spaces.
You can also leave any number of empty lines between the lines of code.

Numbers can be written in decimal or hexadecimal. The syntax of hexadecimal numbers is $hex_number, where hex_number consists of 0 - 9 and A - F.

In the syntax description, "{param}" means that "param" is optional.

Contents


6.4. COMMENTS:

Comments can be placed anywhere inside the at3 file.
The syntax of comments is

//comment

Anything that comes after "//" on the current line is ignored by the compiler.

Contents


6.5. DIRECTIVES:

You start writing your robot with the directive part. The syntax of directives is

#directive_name {param1 param2}

Here is a list of directives:

#NAME name
This defines the name of the robot. The name can be any string, it shouldn't be very long though, in order to be able to display it in the game.
If you want to have spaces inside the name of your robot, use the "_" character instead. The compiler will turn them into spaces. Do not write spaces inside the name!

#COLOR color
This defines the color of your robot - hull and turret. The color parameter can be a decimal number or hexadecimal, written like $BBGGRR, where BB, GG, RR are the intensities (0-255) of blue, green and red respectively. I recommend the hex notation, it is more comprehensive.

#TCOLOR color
The parameter of this directive is the same as in the #COLOR directive.
This directive allows to assign an individual color to the robot's turret.
Note that if you use the #COLOR directive after #TCOLOR, #TCOLOR will have no effect.

#VAR varname
This directive is used to create variables. The created variable is a 16-bit signed integer. It can be referred to in the program like "<varname>". For more details, see 6.6.2.
If you define more variables with the same name, you can only access the first declared one via the name.
Variables are stored in Main Memory, at addresses 128 - 255.
Note that you cannot have more than 128 variables with names, but you can use more memory.

#EQUIP
param_name param_val1 {param_val2}
#EQUIP

This is probably the most important directive of ATR3. This construction is used to equip your robot with all the devices it will be able to use in combat.
In the directive section of a robot, this construction can appear only ONE TIME, if it appears more times, the robot will not compile. Also note that the equip section must end with a #EQUIP directive as well.
Here are all the parameters you can define, for a more detailed description of the devices, see 7..

#BEGIN
Marks the end of the directive section and the beginning of the program section. The program section end is not noted - the program ends at the end of the robot file.

Contents


6.6. THE PROGRAM:

The robot program consists of lines. Each line holds an instruction and its parameters, that means it's 3x16 bits. The Program Memory of the robot can hold 1024 lines, if a program exceeds this limit, it will not compile.
Some lines can have names, these are called labels. You can also write inline mashine code, but since the opcodes remain undocumented until further notice, this feature is useful only for creating large tables (e.g. target prediction).
6.6.1. PROGRAM SYNTAX:
A line of code looks like this:

{@label_name} instruction {op1} {op2}

or alternatively for inline code

{@label_name} *n1 n2 n3

Important! Lines with labels must contain some instruction, or else the robot will not compile.
Also note that after label_name, no ":" or any other delimiter is used, except for one or more spaces!
Do not forget the basic rule - NO COMMAS!
In the inline version, n1, n2 and n3 are 16-bit signed integer numbers.

6.6.2. INSTRUCTIONS:
The instruction set of the robot CPU consists of 48 instructions. Here is a table of all of them:

Instrop1op2TimeDescription
NOP--1Does nothing
MOVrmrmn1Copies op2 into op1
XCHGrmrm2Exchanges op1 and op2
ADDrmrmn1Adds op2 to op1, result in op1
SUBrmrmn1Subtracts op2 from op1, result in op1
MULrmrmn10Multiplies op1 by op2, result in op1
DIVrmrmn10Divides op1 by op2, result in op1, if op2=0 then op1=0
INCrm-1Increments op1 by 1
DECrm-1Decrements op1 by 1
NEGrm-1Does op1:=-op1
SHLrmrmn1Bit shift op1 op2-times to the left, result in op1
SHRrmrmn1Bit shift op1 op2-times to the right, result in op1
ROLrmrmn1Bit rotate op1 op2-times to the left, result in op1
RORrmrmn1Bit rotate op1 op2-times to the right, result in op1
SALrmrmn1Same as SHL
SARrmrmn1Same as SHR, except preserves bit 15
NOTrm-1Bitwise NOT of op1
ANDrmrmn1Bitwise AND of op1 and op2, result in op1
ORrmrmn1Bitwise OR of op1 and op2, result in op1
XORrmrmn1Bitwise XOR of op1 and op2, result in op1
TESTrmrmn1Bitwise AND op1 and op2, don't store result, just set equal flag if result is 0, zero out other flags
CMPrmrmn1Compare op1 and op2, set all flags
JMPl-0Jump to label op1
JEl-0Jump to label op1 if equal flag is 1
JNEl-0Jump to label op1 if equal flag is 0
JLl-0Jump to label op1 if less flag is 1
JLEl-0Jump to label op1 if less or equal flag is 1
JGl-0Jump to label op1 if greater flag is 1
JGEl-0Jump to label op1 if greater or equal flag is 1
LOOPl-1If CX is non-0 then jump to label op1 else proceed to next line
PUSHrmn-1Push op1 on top of the stack
POPrm-1Pop out top of the stack and store it in op1
INrmnrmn3Take value from port op1 and strore it in op2
OUTrmnrmn3Send value in op2 to port op1
CALLl-1Push next line number on top of stack and jump to label op1
RET--1Pop top value off of the stack and jump to line with that number
INTrmn-1Call interrupt number op1
CLE--0Clear equal flag
STE--0Set equal flag
CLG--0Clear greater flag
STG--0Set greater flag
CLL--0Clear less flag
STL--0Set less flag
DLYrmn-op1Equal to op1 NOPs
SAXF--1Store flags register in AX
LAXF--1Set flags register to value in AX
LEXlv-7Set EX to address of op1
MSGrmn-0Send op1 as a message to the outer world

Operand descriptions:

Note: If you use more labels with the same name, everytime you jump to such a label, the program jumps to the first label of that name appearing in the source.

The Time number is in robot CPU cycles, not gcycles. 1 gcycle has 5 robot CPU cycles.

Some instructions take 0 cycles to execute. They however don't produce an infinite cycle, because if 20 such instructions are executed, the robot moves on to the next gcycle. This is an ingenious idea by Ed T. Toton III, used also in ATR2.

Another important note: if you use CALL, and then mess with the stack, be sure to get it back into the state just after the CALL instruction before you use RET, or teeeeeeeeerrrrrrrible things can happen :-))

Also note that if a robot encounters an error while executing its program, it will not move away from the line the error was encountered in, and it will execute that line over and over again, trying to get it right.

Also note that the program must include some kind of infinite loop in order to function correctly. Otherwise the program will come to line 1024 and stop there.

The MSG instruction can be used for debugging. It outputs any kind of operand to the outer world, that means that number appears on the robot combat simulator during a match.

6.6.3. INTERRUPTS:
The INT instruction calls an interrupt by a number. Interrupts are routines which are wired into the robot or some of its devices. Upon each INT the appropriate routine is executed. Most interrupts do nothing. This mechanism is mainly planned for future developments of ATR3. So far, there are only three interrupts directly implemented.
Each device has two reserved interrupt numbers. These are called Int1 and Int2. For details of these interrupts and what they do, see section 7.
So here they are:

IntNameDescription
0Self DestructThe robot immediately explodes
1ResetThe robot clears its stack and registers and starts executing program from start
2Reset MemoryThe robot clears and zeroes out its RAM
10Engine Int1-
11Engine Int2-
20Hull Int1-
21Hull Int2-
30Turret Int1-
31Turret Int2-
40Weapon Int1-
41Weapon Int2-
50Scanner Int1-
51Scanner Int2-
90Extension Int1-
91Extension Int2-

Very few of the device specific interrupts are implemented yet.

6.6.4. I/O PORTS:
The Robot Computer communicates and uses the various devices of the robot via ports.
Each port has a unique number. Ports are divided into input (I) and output (O) ports. Some ports can be both input and output at the same time (I/O).
The instructions to access ports are IN (gets a value from a port) and OUT (writes a value to a port).
Each device has in addition to their common ports, two reserved ports, called Prop1 and Prop2. In most cases, these ports have no meaning, but in some cases they are implemented. For their description, see section 7.
Here's a description of all the available ports. ("value" refers to op2 in OUT, see 6.6.2.)

PortTypeNameDescription
0IRandom GeneratorGenerates random numbers in the range of 0-32767
1I/OTransponderRobot ID, used by some tracking devices
8IThrottleCurrent throttle setting, from -100 to 100
9ICompassCurrent robot heading, from 0 to 255
10OSet ThrottleSet throttle to "value", "value" must be from -100 to 100, negative number means moving backwards
11OTurn RobotTurn "value" aunits to the right, "value" can be any number, negative number means turn left
12IDesired ThrottleThrottle robot is trying to achieve, from -100 to 100
13IDesired TurnNumber of aunits robot has to turn to achieve desired heading, any number
16I/OEngine Prop1-
17I/OEngine Prop2-
20I/OCollision CounterIncremented by one on each collision with other robot or wall, can be set to any number
21IHull StateNumber of Hit Points remaining to death (0 = robot is dead)
24I/OHull Prop1-
25I/OHull Prop2-
30I/OAim TurretGet/Set turret relative heading (0 = front, 128 = back etc.), from 0 to 255
31OTurn TurretCumulative turret turn (like port 11), any number
32IAbsolute TurretTurret absolute heading, from 0 to 255
33I/OTurret ShiftIf non-0, turret turns with robot, otherwise turret retains its heading
36I/OTurret Prop1-
37I/OTurret Prop2-
40OFire WeaponFire active weapon with argument "value"
41I/OActive WeaponGet/Set active weapon
42I/OWeapon ArgumentGet/Set weapon argument
43IWeapon Ready FlagIf non-0, weapon is ready to deal damage
44IWeapon ReloadAmount of reload time remaining, 0 = reloaded
45IWeapon AmmoAmount of ammo (or sometimes fuel) remaining
48I/OWeapon Prop1- (used for heat most of the time)
49I/OWeapon Prop2-
50IScanPerform a scan with active scanner, result is scan value 1
51I/OActive ScannerGet/Set active scanner
52I/OScan Value/Property 1Get SV1 / Set SP1
53I/OScan Value/Property 2Get SV2 / Set SP2
54I/OScan Value/Property 3Get SV3 / Set SP3
57I/OScanner Prop1-
58I/OScanner Prop2-
90I/OExtension Prop1-
91I/OExtension Prop2-

Weapon/scanner ports each operate on the active weapon/scanner, set by port 41/51.

The active weapon/scanner is NOT set via the slot number! The weapon/scanner which appeared inside the #EQUIP directive as the first is weapon/scanner number 0, the next one is number 1 etc., of course provided that they obey the restrictions in 6.5. about the TURRET/WEAPON/SCANNER parameter.

Besides weapon/scanner Prop1 and Prop2, some of the common weapon/scanner ports are also device specific, for details see 7.

Contents


7. ROBOT DESIGN:

Well, here comes the description of all the devices you can equip your robot with. Each instance of a device has a unique ID, that is the number you use in the #EQUIP directive to actually fit the device to your robot. Other parameters are also named the same as in the description of the #EQUIP directive, for easier understanding.

Contents


7.1. HULLS:

The Hull is the basic component of all robots. It determines the shape of the robot as well as its size class.
There are 20 different shapes available, with IDs 0 to 19. I won't list them, just find it out for yourselves :-))
SC can be 1, 2, 3 or 4, the greater the SC the bigger the robot. SC also determines the amount of weight a robot can carry, like this:

SCW
1100
2200
3300
4400

If you try to equip more than the given limit, the robot will not compile.

Hulls without materials weigh nothing.
No hull type has Prop1, Prop2, Int1 or Int2 implemented.

If you don't choose a hull, then only a small box will cruise the arena. Its SC is 1, and it also is impossible to assign a material to it.

Contents


7.2. MATERIALS:

After you have chosen a hull, you may choose a material of which this hull will consist. Here's a table of materials with their attributes:

IDNameDPRPW
0Magnesium1600133
1Asbest1800175
2Aluminium1200197
3Tin4000129
4Zinc35001611
5Lead80001014
6Brass46002216
7Titanium27004018
8Copper60002020
9Silver75001822
10Iron43003324
11Bronze55002726
12Nickel57002528
13Steel42003630
14Gold90001533
15Chrome32006035
16Ni-Steel50004639
17W-Steel52005343
18Platinum95003045
19Iridium100004350

DP means damage points, that is the amount of damage a robot consisting of the material can take.
RP means resilience points. In most cases, when damage is dealt to the robot, the amount is decremented by RP percent of the amount and only the remaining amount is received by the robot.
W is the weight of the material. To obtain the real weight, multiply it by SC (bigger robot = more material).

If you don't assign a material to your robot, it will have DP 1 and RP 0, so one little bump is enough to destroy it.

Contents


7.3. ENGINES:

The engine allows your robot to move around. Again, here's a table of the engines of the so called E-Series and their attributes:

IDNameMSPDACCTRNW
0ES1111118
1ES24424417
2ES26626628
3ES33533522
4ES35335320
5ES35535526
6ES42242213
7ES44444424
8ES46646632
9ES53353334
10ES53553538
11ES55355336
12ES62262230
13ES64464440
14ES77777748

MSPD is the maximum speed a robot can achieve using the engine, in units/gcycle.
ACC is the acceleration, in percent/gcycle.
TRN is the turn rate, in aunits/gcycle.
W is the weight, for the real weight, multiply it by SC (bigger robot = heavier engine).

No engine of the E-Series has Prop1, Prop2, Int1 or Int2 implemented.

If you don't assign an engine to your robot, it won't be able to move (unless another robot collides with it :-)) ).

Contents


7.4. TURRETS:

Turrets are the most important devices of your robot. They carry all the weapons and scanners. They can turn around independent of the movement of the robot.
Each turret has a number of slots where scanners and weapons may be installed, on each slot only one weapon AND one scanner can be mounted. The slots have numbers corresponding to their direction relative to 0 in aunits. Here are the available turrets from the so called T-Series:

IDNameSlotsRadiusW
0TS1033
1TS20, 12836
2TS30, 64, 19239
3TS40, 64, 128, 192312
4TS50, 64, 96, 160, 192315

Slots are the numbers of slots available on the turret.
Radius is the base radius, in order to calculate the real turret radius, you have to add 2*(SC-1) to Radius.
W is the weight of the turret, the real weight is calculated by adding SC of the robot to W (bigger robot = heavier turret).

In the program you refer to the weapons and scanners on the turret not via their slots but rather via their numbers, which start from 0. Weapons/scanners are numbered by these numbers in the order of appearence inside the #EQUIP directive, provided that they obey the restrictions. During execution of the program, only one weapon and one scanner is the so called active weapon/scanner. All the weapon/scanner ports affect only the active weapon/scanner.

No turret of the T-Series has Prop1, Prop2, Int1 or Int2 implemented.

If you don't equip a turret, your robot will have no turret and will not be able to carry weapons and scanners.

Contents


7.5. WEAPONS:

In order to win battles, your robot will usually need some means of attack. And that's what weapons are all about.

Weapons can be divided into four categories.
Impact weapons use some sort of impact to damage an opponent. These can be e.g. hammers, pikes, saws, etc.
Shooter weapons shoot some projectiles, and those projectiles deal the damage. These are e.g. guns, cannons, lasers etc.
Single weapons attack only once, when you access port 40. These are hammers, guns etc.
Permanent weapons attack until you don't switch them off. For example saws, chainguns etc.

Weapons have quite a few common properties:

In the program you refer to the weapons on the turret not via their slots but rather via their numbers, which start from 0. Weapons are numbered by these numbers in the order of appearence inside the #EQUIP directive, provided that they obey the restrictions. During execution of the program, only one weapon is the so called active weapon. All the weapon ports affect only the active weapon.

The weight of the weapons is the same for all size classes.

The Size property featured below has the format x1/x2.
x1 is the base size, to get the real size multiply it by 1+(1/2)*(SC-1).
x2 is the attack bonus size, to get the attack size, add x1 (after the multiplication above) and x2.
Maybe you'll find it good to know the distance where the robot does the damage, although that still isn't the actual distance, that one is a little larger (it is exactly Real_Turret_Radius+x1*(1+(1/2)*(SC-1))+x2, see 7.4. what Real_Turret_Radius is).
For shooting weapons, size is the point where the projectile exits the barrel and enters the arena.

Well, here's the complete list with all the functions:

0: Pike
Just a regular pike. Access port 40 to attack, retracts automatically.
TypeImpact/Single
Weight10
Reload10
Damage150
Size10/+30

1: DPike
This works just as a regular pike, only it does twice the damage.
TypeImpact/Single
Weight25
Reload10
Damage2x150
Size10/+30

2: TPike
This works just as a regular pike, only it does three times the damage.
TypeImpact/Single
Weight35
Reload10
Damage3x150
Size10/+30

3: Hammer
This is a little hammer, access port 40 to hit (or not), retracts automatically.
TypeImpact/Single
Weight15
Reload16
Damage200
Size30/+0

4: BBat
The one and only baseball bat couldn't be missing here. Use it just like the hammer.
TypeImpact/Single
Weight30
Reload20
Damage400
Size26/+0

5: Scissors
Cut a big hole into your opponent. Access port 40 to cut, opens automatically.
TypeImpact/Single
Weight20
Reload20
Damage250
Size25/+0

6: Gun
This is the good old gun from ATR2, although it's slightly different.
TypeShooter/Single
Weight20
Reload0
Ammo
Meaningammo
Damage100
Explosion Radius5
Speed15
Amountunlimited
Weight / piece0
Arg
Meaningshooting angle correction
Value-3 to +3 aunits
Descriptionmodifier added to weapon
angle for next shot without
turning turret or robot
Prop1
Meaningheat
Increment / shot+20
Decrement / gcycle-1
Criticals
500+robot explosion
300+get damage
(heat-300)*5 / gcycle
no RP modifier
Size15/+0

7: Cannon
This is a big baby, does a lot of damage, but has limited ammo.
TypeShooter/Single
Weight30
Reload50
Ammo
Meaningammo
Damage500
Explosion Radius30
Speed10
Amountlimited
Weight / piece2
Size13/+0

8: Laser
This can be pretty destructive, but also to its owner...
TypeShooter/Single
Weight40
Reload5
Ammo
Meaningammo
Damage300
Explosion Radius20
Speed20
Amountunlimited
Weight / piece0
Arg
Meaningshooting angle correction
Value-5 to +5 aunits
Descriptionmodifier added to weapon
angle for next shot without
turning turret or robot
Prop1
Meaningheat
Increment / shot+30
Decrement / gcycle-2
Criticals
600+robot explosion
300+get damage
(heat-300)*10 / gcycle
no RP modifier
Size20/+0

9: Magic Wand
A funny little wand, with big destructive power! The ammo serves as a charge gauge. Via the arg property you define the intensity of the shot. Recharges itself. By each shot starts recharging from the beginning.
TypeShooter/Single
Weight35
Reload10 for recharging 1 ammo
Ammo
Meaningcurrent charge
Damage40*Arg
Explosion Radius24
Speed15
Maximum Charge10
Recharge+1 / 10 gcycles (see reload)
Weight / piece0
Arg
Meaningshot intensity
Valuebetween 0 and Ammo
Descriptiondetermines damage and ammo loss
see also Ammo
Size20/+0

10: DGun
A double gun with limited ammo and optional fire modes.
TypeShooter/Single
Weight25
Reload20 (double mode), 10 (single mode)
Ammo
Meaningammo
Damage150 / shot
Explosion Radius8
Speed12
Amountlimited
1 piece = 2 shots
Weight / piece1
Prop1
Meaningfire mode
Values0 = double mode
non-0 = single mode
Size15/+0

11: SGun
This gun shoots 4 shots at a time, with angle corrections -3, -1, 1, 3.
TypeShooter/Single
Weight27
Reload20
Ammo
Meaningammo
Damage150 / shot
Explosion Radius8
Speed12
Amountlimited
1 piece = 4 shots
Weight / piece1
Size15/+0

12: Pneumatic Rammer
A permanent weapon, access port 40 to start ramming and again to stop. Works with pressurized air. Ammo property is used as a pressure gauge. Stops automatically if pressure is 0, then it needs to repressurize. Once it stops it can start ramming again only on maximum pressure.
TypeImpact/Permanent
Weight16
Reload2 (ramming frequency)
Ammo
Meaningpressure
Maximum Pressure30
Increment / gcycle+1 (if not ramming)
Decrement / ram-1
Damage / ram20
Size13/+15

13: Drill
Drill holes into your opponents with this. When it operates, it warms up, and at a critical value it automatically stops working and has to cool down.
TypeImpact/Permanent
Weight20
Reload4 (turn rate)
Prop1
Meaningheat
Increment / turn+10
Decrement / gcycle-2 (if not drilling)
Criticals1000+ = doesn't work
Damage / turn40
Size14/+20

14: Circular Saw
This is a rotating circular saw. It gets hot just like the drill, and at a critical heat it stops working and has to cool down.
TypeImpact/Permanent
Weight24
Reload2 (turn rate)
Prop1
Meaningheat
Increment / turn+25
Decrement / gcycle-5 (if not sawing)
Criticals2000+ = doesn't work
Damage / turn50
Size20/+15

15: Chain Saw
This is a chainsaw, just like the ones lumberjacks use, but specialized on metal. It operates on gas (ammo property). If the gas is gone, it stops working for the rest of the match. Gas is enough for 2000 gcycles non-stop sawing.
TypeImpact/Permanent
Weight28
Reload2 (turn rate)
Ammo
Meaningfuel
Maximum Fuel1000
Decrement / turn-1
Criticals0 = doesn't work
Damage / turn60
Size10/+20

16: Lawn Cutter A nice weapon again, but also runs on gas (ammo property). If it runs out of gas, it acts just like the chainsaw. Gas is enough for 3000 gcycles non-stop cutting.
TypeImpact/Permanent
Weight32
Reload3 (turn rate)
Ammo
Meaningfuel
Maximum Fuel1000
Decrement / turn-1
Criticals0 = doesn't work
Damage / turn70
Size15/+12

17: Shock Rod
Why not take the shock rods from the bastards using them on animals and mount them onto your robot? This thing has a rechargable battery, which is recharged by an alternator only when you are moving at at least 10% throttle, either forwards or backwards.
TypeImpact/Permanent
Weight36
Reload5 (recharging 1 ammo, shock frequency)
Ammo
Meaningelectric charge
Maximum Charge1000
Recharge+1 / 5 gcycles (see reload) if not activated and THR<=-10 or THR>=10
Decrement / shock-10
Criticals<10 = doesn't work
Damage / shock40
Size30/+0

18: Chain Gun
This chain gun is pretty fast, doesn't need any ammo, but it can kill you easily by overheating, so watch it! Note that you'll be able to shoot faster with the regular gun, but this baby can fire 50 shots without damaging you.
TypeShooter/Permanent
Weight30
Reload2 (shooting frequency)
Ammo
Meaningammo
Damage100
Explosion Radius5
Speed15
Amountunlimited
Weight / piece0
Arg
Meaningshooting angle correction
Value-1 to +1 aunits
Descriptionmodifier added to weapon
angle for next shot without
turning turret or robot
Prop1
Meaningheat
Increment / shot+30
Decrement / gcycle-1 (if not shooting)
Criticals
3000+robot explosion
1500+get damage
(heat-1500) / gcycle
no RP modifier
Size20/+0

19: Kalasnikov
The world's most famous automatic gun on your robot! Needs ammo though. Ammo is provided in cases of 40 shots. Prop1 tracks the shots left in the current case. Takes a long time to exchange cases. If an ammo case is exhausted, it stops shooting and automatically reloads if any more ammo cases are left.
TypeShooter/Permanent
Weight35
Reload100 (exchange ammo case)
Ammo
Meaningammo cases left
Damage150 / shot
Explosion Radius8
Speed12
Amountlimited
1 piece = 40 shots
Weight / piece5
Prop1shots left in current ammo case
Size16/+0

20: Mine Layer
This allows you to lay mines on the battlefield. You can carry only a limited number of mines. You can vary the intensity of the laid mines - intensity classes 0-20. You can also extract and retract the mine layer arm to be able to lay the mine as you want.
TypeSpecial
Weight25
Reload10
Ammo
Meaningmines
Damage(Prop2+10)*30
Explosion RadiusProp2+10
Speed0 (mines are stationary)
Amountlimited
Weight / piece1
Prop1arm extension 0-20
Prop2mine level 0-20
Size20/+Prop2

Contents


7.6. SCANNERS:

Scanners are the eyes of your robot. You use them to track down enemy robots in order to effectively destroy them.
Currenly there are 3 types of scanners implemented: radars, locators and arc-scanners.
If you use port 50 to do a scan, this sets all the values the scanner returns, and then returns SV1 to you. Reading the SV ports doesn't do a scan, it only returns the values of the last scan.

In the program you refer to the scanners on the turret not via their slots but rather via their numbers, which start from 0. Scanners are numbered by these numbers in the order of appearence inside the #EQUIP directive, provided that they obey the restrictions. During execution of the program, only one scanner is the so called active scanner. All the scanner ports affect only the active scanner.

As in weapons, weight remains constant no matter what SC the robot has.

Radars:
Radars scan the whole arena and return information about the nearest or the furthest robot in the match.

Here's a table of the available radar scanners: (numbers behind "/" mean the value if no target was found)

IDNameSV1SV2SV3W
0D-Radardistance[units] / -1--25
1A-Radarangle[aunits] / -1--70
2DA-Radardistance[units] / -1angle[aunits] / -1-100
3DSH-Radardistance[units] / -1target speed[units/10 cycles] / 30000target heading[aunits] / -135
4ASH-Radarangle[aunits] / -1target speed[units/10 cycles] / 30000target heading[aunits] / -1120
5T-Radartransponder / owner transponder--10

D-Radar is an equivalent of the radar in ATR2, A-Radar is something like the sonar.

Locators:
Locators return information about the nearest or the furthest robot with a certain transponder setting. Use them to track down a concrete enemy robot and keep on its trail.

Here's a table of the available locators, with their return values: (numbers behind "/" mean the value if no target was found)

IDNameSV1SV2SV3W
6D-Locatordistance[units] / -1--20
7A-Locatorangle[aunits] / -1--70
8DA-Locatordistance[units] / -1angle[aunits] / -1-100
9DSH-Locatordistance[units] / -1target speed[units/10 cycles] / 30000target heading[aunits] / -130
10ASH-Locatorangle[aunits] / -1target speed[units/10 cycles] / 30000target heading[aunits] / -1120

Arc-Scanners:
Arc-scanners are the most commonly used ones. They provide the most efficient way of tracking other robots.
They can be divided into fixed-arc and variable-arc scanners. Variable-arc scanners are heavier than fixed-arc scanners.
Arc-scanners scan only inside a certain arc with some width and to some distance and return information about the nearest robot inside the arc.
They have the following common properties, which can be set inside the #EQUIP directive:

Distance class (DC) - determines how far the scanner can see.
DCVisibility[units]
1200
2400
3600

Precision class (PC) - some arc-scanners return a precision number, which is useful in finding the exact position of the target. 0 means right in front of the scanner, negative numbers mean that the target lies to the left and positive to the right.
PCPrecision value range
1-1 - +1
2-2 - +2
3-4 - +4

Maximum arc width (MW) - use this to determine the arc width (fixed-arc) or the maximum available arc width (variable-arc). The arc width is actually -MW - +MW, so it's double the defined MW. Therefore MW can be in the range of 0 and 64.

Here is a table of all the arc-scanners with their respective formulas to calculate weight:

IDNameArc-KindSV1SV2SV3W
11D-F-ArcFixeddistance[units] / -1--2+MW/4+5*(DC-1)
12P-F-ArcFixedprecision / 256--5+MW/4+2*(DC-1)+12*(PC-1)
13DP-F-ArcFixeddistance[units] / -1precision / 256-10+MW/4+7*(DC-1)+10*(PC-1)
14DSH-F-ArcFixeddistance[units] / -1target speed[units/10 cycles] / 30000target heading[aunits] / -15+MW/4+7*(DC-1)
15PSH-F-ArcFixeddistance[units] / -1target speed[units/10 cycles] / 30000target heading[aunits] / -18+MW/4+3*(DC-1)+14*(PC-1)
16D-V-ArcVariabledistance[units] / -1--12+MW/4+5*(DC-1)
17P-V-ArcVariableprecision / 256--15+MW/4+2*(DC-1)+12*(PC-1)
18DP-V-ArcVariabledistance[units] / -1precision / 256-20+MW/4+7*(DC-1)+10*(PC-1)
19DSH-V-ArcVariabledistance[units] / -1target speed[units/10 cycles] / 30000target heading[aunits] / -115+MW/4+7*(DC-1)
20PSH-V-ArcVariabledistance[units] / -1target speed[units/10 cycles] / 30000target heading[aunits] / -118+MW/4+3*(DC-1)+14*(PC-1)
21T-ArcFixedtransponder /owner transponder--5+MW/4+2*DC

Contents


7.7. EXTENSIONS:

Extensions are a totally optional improvement of your robot. This is the device which will evolve the most in the near future. I have a lot of ideas. Here's a description of the extensions available so far:

0: Wall Detector
This is a simple device, which tells you the distance and angle to the nearest wall.
Weight15
Prop1IN = perform scan and return distance[units] to nearest wall
Prop2IN = angle to nearest wall from the last scan, doesn't perform a scan itself

1: GPS
This little device is capable of memorizing one exact location and at any time returning your distance and angle to the memorized position. In the beginning, the location is (0,0).
Weight15
Prop1IN = return distance to saved location
Prop2IN = return angle to saved location
Int1save current robot position as the saved location

2: Communication System
This system allows robots to send each other 16-bit signed integers. If you used ATR2, it is similar to the Com System featured there.
The comm system has a message queue where it recieves messages. The queue is a regular FIFO queue, capable of keeping 255 values. If the queue is full, no more values are received until there's room again. Receiving a value removes that value off the queue.
The comm system operates at a frequency, which is a signed integer. Robots tuned to some frequency don't recieve messages sent on a frequency other than their own.
Weight10
Prop1IN = receive and remove message from the queue (if queue is empty, returns 0)
OUT = broadcast message to other robots with Comm Systems tuned to frequency Prop2
Prop2IN = returns current frequency
OUT = set frequency to another value
Int1empty the entire queue

3: Energy Bomb
This is the first offensive extension. It deals damage to all robots nearer than 150 units. The damage amount is 6*(150-distance) points, decremented by the corresponding RP bonus. After each use this device has to reload 2000 gcycles.
Weight40
Prop1IN = returns remaining reload time in gcycles
Int1activate (see description), works only if Prop1 = 0

Contents


8. TROUBLESHOOTING

Remember, the best way of learning to create robots (learning any programming language) is to look at some examples.

The best way of solving problems concerning the game is emailing me. But before you do that, here are some tips what to do if your robot will not compile:

  1. Check if you haven't put any commas into the robot code, if so, delete them.
  2. Check if there aren't any lines with just a label and no instruction, if so, remove them or put some instruction after the label name
  3. Check if you haven't put a ":" after some label name, if so, remove and just leave one or more spaces instead.
  4. Check the weight of your equipment. Remember to apply all the modifiers resulting from your SC. If the weight limit is exceeded, reequip.
If the robot compiles, but doesn't work as it should, try using the MSG instruction for debugging.

If you don't find out what the problem is, email me at 9bartelt@nw.fmph.uniba.sk.

Contents


9. LICENSE & DISCLAIMER:

Original AT-Robots, version 2 Copyright (c) 1999, Ed T. Toton III & NecroBones Enterprises, All Rights Reserved.

AT-Robots, version 3 Copyright (c) 2002, Richard Bartelt

This software is freeware, and may be freely redistributed provided that it retains all the original files.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Contents


10. FINAL WORD:

Well, have a lot of fun!

Richard Bartelt (Mio)
9bartelt@nw.fmph.uniba.sk

AT-Robots 3 Homepage - http://www.nw.fmph.uniba.sk/~9bartelt

Contents


History/Changelog

see updates.txt
© 2002 Richard Bartelt