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.
[edit] File Format
Contents |
[edit] 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
[edit] 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
[edit] .pro file
Some notes on part of .pro file format
[edit] 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.]
[edit] 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.
[edit] 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.
[edit] .map
Note on the .map file.
[edit] 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).
[edit] 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
[edit] 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.
[edit] 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
[edit] 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.
[edit] 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
[edit] 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
[edit] 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
[edit] 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.