Fio:FileFormat

From Fio

TeamX is going ahead of whole world! Wasteland Ghost a few time ago has updated the documentation of PRO format. But TeamX is very silent organisation and the big problem is translation to english. - quote from nma

A link will be there for each type of file if it's referenced from TeamX's/NMA's site. Else it's figured out here in Fio.

File Format

Contents

AI.txt

master.dat\\data\\AI.txt [1]

Here the format of a file master.dat \\\\ data \\ai.txt, behaviour setting parameters for all types 

NPC in fighting situations is described. Easier speaking, here it is set iskustvennyj 

intelligence (AI) NPC in fight.

1. A format of a file

The file consists of descriptions of "fighting" parameters for PC and all classes NPC existing 

in game. Descriptions are separated from each other by empty line. Each description consists of 

the name of a class (is unique) also characteristics. Below the list of characteristics under 

their alphabetic name is resulted. The designation string means, that on this place there should 

be a line, N - numerical value, mixed - either a line, or value.

[A name of the Class]

    This parameter should be specified to the first. For example, [Enclave Patrol], [Fighting 

Mantis] or [Arroyo Villager]. The class of the player refers to Player AI. At the description of 

"The" NPC, i.e. members of the command in game (party NPC), for each of them following classes 

should be specified:

    [PARTY NAME AGGRESSIVE]
    [PARTY NAME BERSERK]
    [PARTY NAME COWARD]
    [PARTY NAME CUSTOM]
    [PARTY NAME DEFENSIVE]

    Here NAME is a name of a member of a command, for example: DOC, LENNY, GORIS, etc. 

aggression=N

    Probability of aggressive behaviour NPC in a corresponding situation in fight. It is 

measured in percentage. Admissible values: 0 - 100.

area_attack_mode=string

    Mode of shooting by turns. Existing values:

    no_pref
    always
    sometimes
    be_sure
    be_careful
    be_absolutely_sure

attack_end=N
attack_start=N

    Fighting shouts at attack. In the beginning of attack, casual image the number between two 

specified values gets out. Then from a file master.dat \\\\ text \\english \\game \\combatai.msg the 

message with corresponding number gets out and shows. The order of numbering of messages 

precisely is not certain, there are general rules (see the description for a file combatai.msg).

attack_who=string

    Both it is heard, and it is written. The instruction on the one whom NPC should attack first 

of all. Existing values:

    whomever_attacking_me
    strongest
    weakest
    whomever
    closest

best_weapon=string

    Type of preference of the weapon at attack. This parameter exists not at all NPC. Available 

values:

    no_pref
    never (Deathclaw)
    random
    unarmed
    ranged_over_melee
    melee_over_ranged
    unarmed_over_thrown (Spore Plant)

    By the way, the return value thrown_over_unarmed for some reason at anybody is not specified 

to the last, and is not clear, whether there is such preference in general;)))

body_type=string

    Defines the block of casual messages which kritter cries out in reply to hits in it. Blocks 

of messages are in AIBDYMSG.TXT. Existing values (the dark blue inclined font specifies examples 

from game):

    None
    Primitive
    Wimpy Person (Whimpy, Coward...)
    Punk (SF)
    Berserk Person (Kamakazi...)
    Tough Person (Bounty Hunter, Caravan Driver...)
    Boxer
    Normal Person
    Robot
    Junkie (Crazy Addict)
    Elron (Habologisty)
    Ghoul
    Kaga
    Raider (Khan)
    Raider (Non-Khan)
    Gangster      (Mobsters)
    Shi
    Super Mutant (Master Army)
    Goris
    Miron
    Marcus
    Lenny
    Cassidy
    Robo Brain (Hum/Cyb)
    Sulik

called_freq=N

    Sets probability of event which is calculated as 1/N. I.e. event will occur 1 time from N. 

To zero it can not be equaled. The sense of parameter is unknown. 

chance=N

    Probability of occurrence of any message. It is measured in percentage. Admissible values: 0 

- 100.

cchem_primary_desire=N

    Preferences at the use of drugs. PIDy subjects, or-1 if there is no preference. If it is 

necessary to specify some kinds of drugs they are listed through a comma. (napr. 284,81,103)

chem_use=string

    Use NPC of narcotics in fight. Existing values:

    clean
    sometimes
    stims_when_hurt_little
    stims_when_hurt_lots
    anytime
    always

color=N

    The value used for fonts of fighting messages. For all classes value remains constant - 58. 


disposition=mixed

    Defines behaviour NPC during fight. Existing values:

    -1
    none
    coward
    defensive
    aggressive
    berserk

distance=string

    Distance between NPC and its opponent, tactics of conducting fight. Existing values:

    random (it is specified only for Mobsters and Tough Khan)
    charge
    on_your_own
    stay
    stay_close
    snipe

font=N

    The value used for fonts of fighting messages. Existing value in the US-version of game - 

101. In other versions there are also values 102, 103, 104.

general_type=string

    Defines the block of casual messages which kritter periodically cries out during fight (

attacks, deviations, a miss). Blocks of messages are in AIGENMSG.TXT. Existing values:

	Badger
	Berserk Person
	Bounty Hunter
	Boxer
	Cassidy
	Chip
	Crazed Robot
	Cyberdog
	Dragon (The)
	Elron Guards
	Gangster
	Ghoul
	Goris
	Guard (Normal)
	Guard (Tough)
	Junkie
	Kaga (1)
	Lenny
	Lo Pan
	Marcus
	Myron
	None
	Normal Person
	OZ-7
	OZ-9
	Primitive
	Raider
	Raider Captain
	Raider Mercs
	Rat God
	Robot
	Ryan
	Shi Guards
	Sulik
	Super Mutant (Master Army)
	The Brain
	Tough Person
	Wimpy Person 

hit_eyes_end=N
hit_eyes_start=N

hit_groin_end=N
hit_groin_start=N

hit_head_end=N
hit_head_start=N

hit_left_arm_end=N
hit_left_arm_start=N

hit_left_leg_end=N
hit_left_leg_start=N

hit_right_arm_end=N
hit_right_arm_start=N

hit_right_leg_end=N
hit_right_leg_start=N

hit_torso_end=N
hit_torso_start=N 

Shouts NPC at wound in eyes, a groin, a head, the left hand, the left leg, the right hand, the 

right leg and a trunk accordingly. In more detail - see the description of a variable 

attack_end.

hurt_too_much=string

    The name of a variable speaks for itself. If this variable is present, it specifies a 

condition at which execution NPC starts to escape. Conditions perechisljutsja through a comma.

    crippled
    blind
    crippled_arms

max_dist=N

    The maximal distance from the purpose at which NPS remains in a fighting mode. It is 

measured in geksah.


min_hp=N

    The minimal value of lives at which NPS starts to escape.

min_to_hit=N

    to_hit Is a parameter of game system. The extra charge to_hit = 10 means, that to a maximum 

level of damages is added 10. I.e. if at the weapon of damage 1-3 after such extra charge will 

be 1-13. How it operates here - it is not known. 

miss_end=N
miss_start=N

    Shouts NPC at a miss. In more detail - see the description of a variable attack_end.

outline_color=N

    The value used for fonts of fighting messages. For all classes NPC it is equal 55.

packet_num=N

    Number AI - a package. Never change it! If in a new package of intelligence you will specify 

packet_num, which already exists, by pressing button AI in mappere (in properties krittera), 

mapper takes off for Windows. At creation of new packages of intelligence, watch that value 

packet_num was consecutive. In total in AI.txt there are 187 values packet_num. From 0 up to 186 

vkljuchitel

run_away_mode=string

    Conditions of runaway NPC from a battlefield. Existing values:
	none
	coward
	finger_hurts
	bleeding
	not_feeling_good
	tourniquet
	never

run_end=N
run_start=N

    Shouts NPC at runaway from a battlefield. In more detail - see the description of a variable 

attack_end.

secondary_freq=N

    Similarly called_freq. Sets probability of event which is calculated as 1/N. I.e. event will 

occur 1 time from N. To zero it can not be equaled. The sense of parameter is unknown.

2. Authors

The author of the initial version - Serge, the leader unDAT division.
It is added binyan.

Last updating: 26.06.2006 

AIBDYMSG.txt AIGENMSG.txt

  • \\master.dat\\data\\aibdymsg.txt
  • \\master.dat\\data\\aigenmsg.txt

As stated in AI.txt, the slot body_type will index into aibdymsg.txt to get msg index when npc get hit; and aigenmsg.txt will index the general movement msg.

AI.txt, aibdymsg.txt and aigenmsg.txt are all in a .ini-like format. It's easy to convert the file into lua table and do some comparison between used type in ai.txt and those defined type in aibdymsg.txt and aigenmsg.txt. Here comes the result(red ones are those types defined but not used in ai.txt):

  • body types used in ai.txt

1 Berserk Person 2 Boxer 3 Cassidy 4 Elron 5 Gangster 6 Ghoul 7 Goris 8 Junkie 9 Kaga 10 Lenny 11 Marcus 12 Myron 13 None 14 Normal Person 15 Primitive 16 Punk (SF) 17 Raider (Khan) 18 Raider (Non-Khan) 19 Robo Brain (Hum/Cyb) 20 Robot 21 Shi 22 Sulik 23 Super Mutant (Master Army) 24 Tough Person 25 Wimpy Person

  • body type defined in aibdymsg.txt

1 Berserk Person 2 Boxer 3 Cassidy 4 Elron 5 Gangster 6 Ghoul 7 Goris 8 Junkie 9 Kaga 10 Lenny 11 Marcus 12 Myron 13 None 14 Normal Person 15 Primitive 16 Punk (SF) 17 Raider (Khan) 18 Raider (Non-Khan) 19 Robo Brain (Chimp/Ab) 20 Robo Brain (Hum/Cyb) 21 Robot 22 Shi 23 Sulik 24 Super Mutant (Master Army) 25 Tough Person 26 Wimpy Person

  • general type used in ai.txt

1 Badger 2 Berserk Person 3 Bounty Hunter 4 Boxer 5 Cassidy 6 Chip 7 Crazed Robot 8 Cyberdog 9 Dragon (The) 10 Elron Guards 11 Gangster 12 Ghoul 13 Goris 14 Guard (Normal) 15 Guard (Tough) 16 Junkie 17 Kaga (1) 18 Lenny 19 Lo Pan 20 Marcus 21 Myron 22 None 23 Normal Person 24 OZ-7 25 OZ-9 26 Primitive 27 Raider 28 Raider Captain 29 Raider Mercs 30 Rat God 31 Robo Brain (Hum/Cyb) 32 Robot 33 Ryan 34 Shi Guards 35 Sulik 36 Super Mutant (Master Army) 37 The Brain 38 Tough Person 39 Wimpy Person

  • general type defined in aigenmsg.txt

1 Badger 2 Berserk Person 3 Bounty Hunter 4 Boxer 5 Cassidy 6 Chip 7 Crazed Robot 8 Cyberdog 9 Dragon (The) 10 Elron Guards 11 Gangster 12 Ghoul 13 Goris 14 Guard (Normal) 15 Guard (Tough) 16 Junkie 17 Kaga (1) 18 Kaga (2) 19 Kaga (3) 20 Kaga (4) 21 Kaga (5) 22 Khan (Normal) 23 Khan (Tough) 24 Lenny 25 Lo Pan 26 Marcus 27 Myron 28 None 29 Normal Person 30 OZ-7 31 OZ-9 32 Primitive 33 Raider 34 Raider Captain 35 Raider Mercs 36 Rat God 37 Robo Brain (Chimp/Ab) 38 Robo Brain (Hum/Cyb) 39 Robot 40 Ryan 41 Shi Guards 42 Soldier 43 Sulik 44 Super Mutant (Master Army) 45 The Brain 46 Tough Person 47 Wimpy Person


.pro file

Some notes on part of .pro file format

Item

teamX's official .pro format has give a description of container which seems inaccurate:

3.3 Container (Контейнер)
Смещение 	Размер 	Описание
0х0039 	4 	Max Size (объем контейнера)
0х003d 	4 	Open Flags (флаги контейнера):
                0x00000001 - Cannot Pick Up (нельзя поднять)
                0x00000008 - Magic Hands Grnd (анимация <юзания>)

using a lua script to parsing all .pro files of items(master.dat/proto/items), we found that following items' open flags are 8:

1       00000042
2       00000060
3       00000061
4       00000062
5       00000063
6       00000064
7       00000065
8       00000066
9       00000067
10      00000068
11      00000069
12      00000070

and other containers' open flags can be 0 or 1. And IMHO, the meaning of Open Flags for container might be:

  • 0 critter stand to open the container
  • 1 critter crouch to open the container
  • 8 N/A

[i'd tried to figure out the meaning of 8 for open flags from denbus1.map and newr1.map, but bad luck.]

Misc

8. Misc
------------
0x14 Flags
0x00000008 - Flat
0x00000010 - NoBlock (To not block object)
0x00000800 - MultiHex
0x00008000 - TransNone (Opaque)
0x00010000 - TransWall
0x00020000 - TransGlass (Glass)
0x00040000 - TransSteam (Pairs)
0x00080000 - TransEnergy (Energy)
0x00004000 - TransRed
0x80000000 - ShootThru (Through object it is possible to shoot)
0x20000000 - LightThru (Through object passes light)
0x00000020 - Illumination (it is connected with fields Light distance and Light intensity)
The note: flags TransNone, TransWall, TransGlass, TransSteam and TransEnergy are mutually exclusive.

These flag might be useful for path finding(to determine if a cell is blocked) and combat(ShootThru). For example, proto pid 0x020003B3 is a tree in arroyo and the flag is 0x80008000 which means it Trans Wall and can be ShootThru.

For scroll blocker (proto id 0x0500000C) the flag is 0xA0000018 - the scroll blocker can be ShootThru and LightThru. And it doesn't block (NoBlock/Flag) critter to walk thru it.

combatai.msg

  • master.dat\\TEXT\\CHT\\game\\combatai.msg

The index got from aibdymsg.txt and aigenmsg.txt is the end of each message's spectrum:

[Berserk Person]
attack_end=59
missed_end=72
move_end=39
packet_num=4
run_end=19
start_block=2300

while the begining of each type of message is arranged in a fixed rhythm:

  • for aibdymsg.txt, {0, 10, 20, 30, 60, 70, 80, 90,}
  • for aigenmsg.txt, {0, 20, 40, 60,}

with the beginning and end of messages, we can index into combatai.msg to get the correct msg.


.map

Note on the .map file.

portals

0x0058 	4 	Некие "флаги открытия" (в движке: cur_open_flags).
                Certain " flags of opening" 

It is the flag of opening:

  • 0 for closed
  • 1 for opened

in fallout there's few opened doors - you can find one in newr1.map(desperado club) and another in ncrent.map(the bar just near the entry).


mapscript:arcaves.map

i'd done some research on map script using arroyo caves map(arcaves.map) several points:

  • map script pid, high byte - script type(also mentioned in teamX's site)
    • 3 for scenery
    • 4 for critter
    • 1 for spacial
  • map script pid, low byte - kind of grouping info of all three elevations. it might be used as kind of offset to locate the script info packed in .map file.
  • spacial script(type 1, for example, ATSrTrp0.ssl) doesn't present with game objects in the map - it might hidden in the unknown map script fields.
statistic from arcaves.map

map script  pos    script
 pid                id
---------  ------  ----
0x3000000, 0x2B64, 0x19
0x3000001, 0x37F2, 0x22
0x3000002, 0x5412, 0xFFFFFFFF
0x3000003, 0x34D8, 0x2ED
0x3000004, 0x3B18, 0x1FF
0x3000005, 0x4DD8, 0x2ED
0x3000006, 0x4EA4, 0x2F6
0x4000002, 0x4E5B, 0x13
0x4000003, 0x6531, 0x0B
0x4000004, 0x5031, 0x0B
0x4000005, 0x35A0, 0x2EC
0x4000007, 0x62DD, 0x0B
0x4000008, 0x54E1, 0x0B
0x4000009, 0x5258, 0x0B
0x400000A, 0x330F, 0x0B
0x400000B, 0x518C, 0x0B
0x400000C, 0x3DF4, 0x0B
0x400000D, 0x4E62, 0x0B
0x400000E, 0x4114, 0x0B
0x400000F, 0x53E5, 0x0b
0x4000010, 0x5191, 0x0b
0x4000011, 0x3D46, 0x0B
0x4000012, 0x3E0A, 0x0B
0x4000013, 0x491E, 0x0b
0x4000014, 0x4C3E, 0x0B
0x4000015, 0x4E92, 0x0b
0x4000016, 0x51BD, 0x12
0x4000017, 0x4DA4, 0x13
0x4000018, 0x528A, 0x12

spatial script

Red post on spatial script here

A normal script is always associated with a map, a critter, an object or a scenery item or a 
"spatial script".

What's special about spatial scripts is that you don't need to put a "map element" on them to use 
them, and they're triggered once you eneter the spatial script's defined radius (though note 
temaperacl's point about it not necessarely being the player himself). This event is triggered in 
the spatial_p_proc entry point.

In the game spatial scripts are usually defined to do two things:

- Descriptions when you enter an area (other then the map itself, that would be in the map 
script...)
- "Hidden" traps you can't disarm, such as the Navarro mines.
- The goo in the toxic caves.

Load any of those maps and you'll see them, along with their scripts if you press I.

Unknown Fields of Inventory

0x0024 + (offset) 4 unsigned Unknown Flags.

Collection of flags about this object.

   * If (flag & 0x2000000) == 1 then this weapon is wielded
   * If (flag & 0x4000000) == 1 then this armor is worn

script defined in .pro

Most script_id slot in .pro file is 0xFFFFFFFF, but for some .pro file it is a valid entry. Here's some result generated from those .pro files using a snippet of lua script.

item

pid  pro file  sid  script detail from master.dat/script/scripts.lst
---  --------  ---  ------------------------------------------------------------------------------
196, 00000196, 640, BSEmtr.int      ; Vault 15 Emitter                              # local_vars=4
213, 00000213, 652, niPriGrv.int    ; New Reno Pritchard's Grave                    # local_vars=5
215, 00000215, 744, FCBadPea.int    ; San Francisco Bad Peasants                    # local_vars=10
216, 00000216, 745, ARTemple.int    ; Arroyo Temple map script                      # local_vars=0
217, 00000217, 743, FCMercha.int    ; San Francisco Merchants                       # local_vars=8
222, 00000222, 863, SSFlxDor.int    ; Door script for Felix's door                  # local_vars=8
230, 00000230, 860, GeckTunl.int    ; Map Script for Gecko Tunnels                  # local_vars=0
231, 00000231, 533, OCMatt.int      ; Matt prisonner in Vault13                     # local_vars=12
238, 00000238, 954, SIpaint.int     ; Painting in NCR marks Vault13 on the map      # local_vars=0
328, 00000328, 411, niDceGrl.int    ; New Reno Casino Girl with Dice Game           # local_vars=9
331, 00000331, 1095, ECDogMet.int    ; Dog Meat Special encounter                    # local_vars=13
344, 00000344, 68, diStill.int     ; Still that Maggie has in the Den              # local_vars=0
345, 00000345, 68, diStill.int     ; Still that Maggie has in the Den              # local_vars=0
346, 00000346, 68, diStill.int     ; Still that Maggie has in the Den              # local_vars=0
347, 00000347, 68, diStill.int     ; Still that Maggie has in the Den              # local_vars=0
374, 00000374, 68, diStill.int     ; Still that Maggie has in the Den              # local_vars=0
375, 00000375, 68, diStill.int     ; Still that Maggie has in the Den              # local_vars=0
376, 00000376, 68, diStill.int     ; Still that Maggie has in the Den              # local_vars=0
431, 00000431, 736, ncWriDog.int    ; New Reno Wright Dog                           # local_vars=2
444, 00000444, 1096, niCatPw5.int    ; New Reno Cat's Paw magazine 5                 # local_vars=0
458, 00000458, 360, NewRBa.int      ; New Reno Map Bishop Basement                  # local_vars=0
459, 00000459, 361, EIOutDsk.int    ; Military Base Holodisk (Outside)              # local_vars=0
460, 00000460, 362, EILv1Dsk.int    ; Military Base Holodisk (Level 1)              # local_vars=0
461, 00000461, 363, EILv2Dsk.int    ; Military Base Holodisk (Level 2)              # local_vars=0
462, 00000462, 364, EILv3Dsk.int    ; Military Base Holodisk (Level 3)              # local_vars=0
463, 00000463, 150, WCRepBot.int    ; Sierra Base, Repair Robot (generic)           # local_vars=14
464, 00000464, 152, WIMedDsk.int    ; Sierra Base, Medical Log 1 Holodisk           # local_vars=0
465, 00000465, 151, WIEvcDsk.int    ; Sierra Base, Evacution Holodisk               # local_vars=0
466, 00000466, 164, WSTerm4C.int    ; BioStorage Computer, Level 4 -- Sierra Base   # local_vars=9
471, 00000471, 1171, SCPeaon.int     ; NCR Peaons                                    # local_vars=10
477, 00000477, 1090, ncCheat.int     ; New Reno Cheat Character                      # local_vars=0
478, 00000478, 1091, WIGNNDsk.int    ; Sierra Base GNN Transscript                   # local_vars=3
483, 00000483, 1110, FSEmpEmt.int    ; Emporor Computer's Force Field                # local_vars=6
487, 00000487, 1093, FIElrDsk.int    ; Elronologist Holodisk                         # local_vars=3
493, 00000493, 1092, WIMisDsk.int    ; Sierra Base Mission Statement Disk            # local_vars=3
499, 00000499, 1146, Cave7.int       ; Fake Vault 13 map                             # local_vars=0
516, 00000516, 1203, SIVDor.int      ; Vortis Slave Door                             # local_vars=9
523, 00000523, 1267, ecspammr.int    ; Spammer in Unwashed                           # local_vars=10

scenery

pid  pro file      sid  script detail from master.dat/script/scripts.lst
---  --------      ---  ------------------------------------------------------------------------------
465, 00000466.pro, 377, ziSlots.int     ; Generic Slot Machine                          # local_vars=6
466, 00000467.pro, 377, ziSlots.int     ; Generic Slot Machine                          # local_vars=6
1012, 00001013.pro, 69, ziGenGrv.int    ; Generic grave script                          # local_vars=5
1013, 00001014.pro, 69, ziGenGrv.int    ; Generic grave script                          # local_vars=5
1014, 00001015.pro, 69, ziGenGrv.int    ; Generic grave script                          # local_vars=5
1015, 00001016.pro, 69, ziGenGrv.int    ; Generic grave script                          # local_vars=5
1016, 00001017.pro, 69, ziGenGrv.int    ; Generic grave script                          # local_vars=5
1155, 00001156.pro, 529, ziClosed.int    ; Generic "Out of Business" signs               # local_vars=3
1156, 00001157.pro, 529, ziClosed.int    ; Generic "Out of Business" signs               # local_vars=3
1192, 00001193.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2
1228, 00001229.pro, 986, ZSWsign.int     ; Generic Wanted Sign                           # local_vars=0
1237, 00001238.pro, 69, ziGenGrv.int    ; Generic grave script                          # local_vars=5
1238, 00001239.pro, 69, ziGenGrv.int    ; Generic grave script                          # local_vars=5
1239, 00001240.pro, 69, ziGenGrv.int    ; Generic grave script                          # local_vars=5
1240, 00001241.pro, 69, ziGenGrv.int    ; Generic grave script                          # local_vars=5
1241, 00001242.pro, 69, ziGenGrv.int    ; Generic grave script                          # local_vars=5
1242, 00001243.pro, 69, ziGenGrv.int    ; Generic grave script                          # local_vars=5
1267, 00001268.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2
1268, 00001269.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2
1269, 00001270.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2
1270, 00001271.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2
1271, 00001272.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2
1272, 00001273.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2
1273, 00001274.pro, 207, miDclRks.int    ; Modoc Rocks in front of the death claw cage   # local_vars=1
1365, 00001366.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2
1366, 00001367.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2
1478, 00001479.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2
1486, 00001487.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2
1548, 00001549.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2
1549, 00001550.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2
1658, 00001659.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2
1746, 00001747.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2
1747, 00001748.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2
1779, 00001780.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2
1851, 00001852.pro, 512, Animfrvr.int    ; Animate forever                               # local_vars=2

critter

pid  pro file  sid  script detail from master.dat/script/scripts.lst
---  --------  ---  ------------------------------------------------------------------------------
5,   00000005, 20,  ZClScorp.int    ; Generic lesser scorpion                       # local_vars=5
6,   00000006, 20,  ZClScorp.int    ; Generic lesser scorpion                       # local_vars=5
11, 00000011, 19, ZClRat.int      ; Generic lesser rat                            # local_vars=5
12, 00000012, 21, ZClManti.int    ; Generic lesser mantis                         # local_vars=5
13, 00000013, 11, AHElder.int     ; Elder of Arroyo                               # local_vars=10
14, 00000014, 12, AHHakun.int     ; Hakunin, Shaman of Arroyo                     # local_vars=10
15, 00000015, 10, ACMynoc.int     ; Mynoc, Bridge Guard of Arroyo                 # local_vars=10
16, 00000016, 18, ACSporPl.int    ; Spore plants in Arroyo                        # local_vars=5
216, 00000216, 21, ZClManti.int    ; Generic lesser mantis                         # local_vars=5
355, 00000355, 20, ZClScorp.int    ; Generic lesser scorpion                       # local_vars=5
356, 00000356, 20, ZClScorp.int    ; Generic lesser scorpion                       # local_vars=5
357, 00000357, 20, ZClScorp.int    ; Generic lesser scorpion                       # local_vars=5
382, 00000382, 19, ZClRat.int      ; Generic lesser rat                            # local_vars=5
383, 00000383, 19, ZClRat.int      ; Generic lesser rat                            # local_vars=5

City, Map and Elevation's Name

Fallout2 did quite messy to get an elevation's name. Here's how it works:

1. each city has a city id defined in city.txt(\\master.dat\\data\\city.txt)

2. each city have several entrances defined as 'entrance_#'

3. an entrance contains serveral parts(comma seperated):
   starting state, xpos, ypos, map index, elevation, tile_num, orientation
   e.g. "entrance_0=On,350,275,Arroyo Bridge,-1,-1,3"

4. the map index field is really a lookup name to index into maps.txt(\\master.dat\\data\\maps.txt)
   here each slot defines: map id, sound effects, .map name, lookup name, savable, can rest, etc.
   so using the lookup name we got from city.txt, we can match to find map id in map.txt

5. with city id and map id, we can find proper name in map.msg(master.dat\\TEXT\\CHT\\game\\map.msg)
   in map.msg, id above 1500 is city name.
   and each map id can map to a slot where the 0~3 elevation's name located.

6. done.
Personal tools