-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathMission_TIE95.txt
950 lines (855 loc) · 27.3 KB
/
Mission_TIE95.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
TIE Mission File
Author: Michael Gaisser (mjgaisser@gmail.com)
Site: https://github.com/MikeG621
Updated: 2025.01.18
=====
This is going to be a very lengthy definition of the TIE95 mission file. Due
to the size of the files we'll be dealing with, my structure display will vary
slightly, by adding offsets before values. It's not a big deal with resource
files, but I doubt you'll want to count a few kilobytes to find a value :P
The file itself is made of up multiple sections, equatable to a single resource
in a LFD with multiple subheaders. For the purpose of these file descriptions,
each section will will begin at '0', such that to find an offset in a later
section, you simply add the total length of the sections before it to get
there. This is what I use in my personal notes, so this is what I am forcing
upon you. I win. I'll try to keep the mission design comments to a minimum,
but I promise nothing.
=====
TIE95 Mission Overview
The mission files found in the, *gasp*, \MISSION directory have the .TIE file
extension and no required naming convention, just that the matching BATTLE LFD
has the filename spelled correctly to be able to play it. The LEC naming
convention for the files is simple; B #BATTLE_NUMBER# M #MISSION_NUMBER#
#PLAYER_CRAFT# (F is TIE, B is Bomber, etc) #CREATOR# (M or W, last initial of
the mission designer). By no means do you have to follow this, I just put that
out there if you need to find a specific mission, or are just curious.
There are already a few editors out there for TIE missions, most notably TFW
(TIE Fighter Workshop). Anyone with a lot of spare time and a hex editor can
map out these values, and whadya know, I was bored :P
The .INV files are related to in-flight colors and are generated based on color
settings. The mission files starting with H are the Historical Missions found
in the Combat Chamber.
=====
TIE95 Mission Structure
The following values are used through this and all of my file definitions
unless otherwise specified:
NAME LENGTH DESC
---- ------ ----
BOOL 1 0=false, 1=true
BYTE 1 unsigned 8-bit
SBYTE 1 signed 8-bit, [-128, +127]
CHAR 1 ASCII character
SHORT 2 signed Int16
DWORD 4 signed Int32
STR(*) * null-terminated string, * is an integer length
NOTE: Any byte locations that are between defined values and are not explicitly
defined are deemed as Reserved(0), and have only been found to have zero
values. All unknowns have been discovered and named accordingly per the LEC
format spec, their previous TFW/YOGEME Unknown designation is listed next to
it. Some values are known to be editor only or have no effect in-game, others
may or may not be "active". Inactive values are named in paranethesis.
Rest assured you have everything here to piece together a mission file from
scratch, but please note offsets if creating read/write procedures.
--
FileHeader
FlightGroup[NumFGs]
Message[NumMessages]
GlobalGoal[3]
Briefing
PreMissionQuestions[10]
PostMissionQuestions[10]
BYTE Reserved(0xFF)
--
struct FileHeader (size 0x1CA)
{
0x000 SHORT PlatformID (-1) (See special notes)
0x002 SHORT NumFGs
0x004 SHORT NumMessages
0x006 SHORT NumGlobalGoals (3)
0x008 BYTE TimeLimitMin
0x009 BYTE TimeLimitSec
0x00A BYTE BriefingOfficers
0x00B BYTE RandomSeed
0x00C BYTE (Unused, Rescue)
0x00D BOOL (Editor use, AllWaypointsShown)
0x00E BYTE[8] (Unused, Vars)
0x016 BYTE[2] (Unused, WinBonus)
0x018 CHAR[6][64] EndOfMissionMessages
0x198 BYTE (Unused, FailedEomMessageDelay)
0x199 BYTE (Unused)
0x19A CHAR[4][12] IffNames3-6
}
struct FlightGroup (size 0x124)
{
0x000 CHAR[12] Name
0x00C CHAR[12] Pilot
0x018 CHAR[12] Cargo
0x024 CHAR[12] SpecialCargo
0x030 BYTE SpecialCargoCraft
0x031 BOOL RandomSpecialCargoCraft
0x032 BYTE CraftType (enum)
0x033 BYTE NumberOfCraft
0x034 BYTE Status (enum)
0x035 BYTE Warhead (enum)
0x036 BYTE Beam (enum)
0x037 BYTE Iff
0x038 BYTE GroupAI (enum)
0x039 BYTE Markings (enum)
0x03A BOOL ObeyPlayerOrders
0x03B BYTE (Unused) Unknown1 in TFW
0x03C BYTE Formation (enum)
0x03D BYTE FormSpacing (enum) Unknown2
0x03E BYTE GlobalGroup Unknown3
0x03F BYTE (Unused) (LeaderSpacing or Unknown4)
0x040 BYTE NumberOfWaves
0x041 BYTE (Unused, WavesDelay) Unknown5
0x042 BYTE PlayerCraft
0x043 BYTE Yaw Unknown6
0x044 BYTE Pitch Unknown7
0x045 BYTE Roll Unknown8
0x046 BOOL PermaDeathEnabled Unknown9
0x047 BYTE PermaDeathID Unknown10
0x048 BYTE (Unused) Unknown11
0x049 BYTE ArrivalDifficulty (enum)
0x04A Trigger Arrival1
0x04E Trigger Arrival2
0x052 BOOL Arrival1OrArrival2
0x053 BYTE (Unused) Unknown12
0x054 BYTE ArrivalDelayMinutes
0x055 BYTE ArrivalDelaySeconds
0x056 Trigger Departure
0x05A BYTE DepartureClockMinutes Unknown13
0x05B BYTE DepartureClockSeconds Unknown14
0x05C BYTE AbortCondition (enum)
0x05D BYTE (Unused) Unknown15
0x05E SHORT (Editor use, CurrentMothership) (was Unknown16-17)
0x060 BYTE ArrivalMothership
0x061 BOOL ArriveViaMothership
0x062 BYTE DepartureMothership
0x063 BOOL DepartViaMothership
0x064 BYTE AltMothership
0x065 BOOL AltMothershipUsed
0x066 BYTE CaptureDepartureMothership
0x067 BOOL CaptureDepartViaMothership
0x068 Order[3] Orders
0x09E GoalFG[4] Goals
0x0A6 SBYTE BonusGoalPoints
0x0A7 BYTE (Unused)
0x0A8 Waypt[4] Waypoints
0x120 BOOL (Editor use, WaypointShown) (was Unknown19)
0x121 BYTE (Unused)
0x122 BYTE (Editor use, BriefingLinked) (was Unknown20)
0x123 BOOL (Editor use, BriefingShown) (was Unknown21)
}
struct Trigger (size 0x4)
{
0x0 BYTE Condition (enum)
0x1 BYTE VariableType (enum)
0x2 BYTE Variable
0x3 BYTE TriggerAmount (enum)
}
struct Order (size 0x12)
{
0x00 BYTE Order (enum)
0x01 BYTE Throttle
0x02 BYTE[4] Variables (includes Unknown18)
0x06 BYTE Target3Type (enum VariableType)
0x07 BYTE Target4Type (enum VariableType)
0x08 BYTE Target3
0x09 BYTE Target4
0x0A BOOL Target3OrTarget4
0x0B BYTE (Unused)
0x0C BYTE Target1Type (enum VariableType)
0x0D BYTE Target1
0x0E BYTE Target2Type (enum VariableType)
0x0F BYTE Target2
0x10 BOOL Target1OrTarget2
0x11 BYTE (Unused)
}
struct GoalFG (size 0x2)
{
0x0 BYTE Condition (enum)
0x1 BYTE GoalAmount (enum)
}
struct Waypt (size 0x1E)
{
0x00 SHORT[4] StartPoints
0x08 SHORT[8] Waypoints
0x18 SHORT Rendezvous
0x1A SHORT Hyperspace
0x1C SHORT Briefing
}
struct Message (size 0x5A)
{
0x00 STR(64) Message
0x40 Trigger[2] Triggers
0x48 STR(16) (Editor use, Note)
0x58 BYTE Delay5Seconds
0x59 BOOL Trigger1OrTrigger2
}
struct GlobalGoal (size 0x1C)
{
0x00 Trigger[2] Triggers
0x08 STR(16) (Editor use, Note)
0x18 BYTE (Editor use, Version)
0x19 BOOL Trigger1OrTrigger2
0x1A BYTE (Unused, Delay)
0x1B BYTE (Unused)
}
struct Briefing
{
0x000 SHORT RunningTime
0x002 SHORT (Memory use, CurrentTime)
0x004 SHORT (Memory use, CurrentEvent)
0x006 SHORT (Unused, EventsLength)
0x008 SHORT (Unused, Tile)
0x00A Event[] Events
0x32A BrfStr[32] Tags
BrfStr[32] Strings
}
struct Event
{
0x0 SHORT Time
0x2 SHORT EventType (enum)
0x4 SHORT[] Variables
}
struct BrfStr
{
0x0 SHORT Length
0x2 CHAR[Length] Text
}
struct PreMissionQuestions
{
0x0 SHORT Length
0x2 CHAR[] Question
BYTE Reserved (0xA)
CHAR[] Answer
}
struct PostMissionQuestions
{
0x0 SHORT Length
0x2 BYTE QuestionCondition
0x3 BYTE QuestionType
0x4 CHAR[] Question
BYTE Reserved (0xA)
CHAR[] Answer
}
=====
TIE95 Mission Detail
Hopefully I named the variables descriptive enough for you that you can figure
out what they mean, but I'm going to delve into each section anyway. Section 5
and on will require a bit of explaining anyway. Supplementary definitions and
lists follow after the detail.
-- FileHeader --
PlatformID is a marker used to identify the mission file as belonging to
TIE95. Other platforms have different values in this place.
**NOTE** There is a legacy format where this value is not present. In-game,
this is handled as if the value is not < 0, then NumFGs is actually at 0x00.
There are other places in the format where this also has an effect, they'll be
marked with [LEGACY] notations.
The Num values are simply that, the number of FG/Message/Global sections that
are contained in the file, much like any other Length value in a resource file.
Global Goals can technically be something other than 3, and it will attempt to
read whatever quantity is there, but there's memory for 4, and the game will
always attempt to process 3. So it's better to treat it as Reserved(3).
BriefingOfficers is a value 01-03, and determines which officers will be
present in the room before you launch into a mission.
01 Both officers
02 Flight Officer
03 Secret Order
(No other values used, but evaluate to Both Officers)
RandomSeed is an initial value, for the most part it isn't important since the
game will update that regularly based on time anyway. The next slew of values
don't appear to have any function, even though they're part of the spec.
The next six strings are the messages you see after the given goals are
completed or failed. The array is really [3,2], two messages each for
PrimaryComplete, SecondaryComplete and PrimaryFailed in that order. The Delay
doesn't appear to be used in TIE.
Following that, we have the name of the extra IFFs. IFF1 and IFF2 are
hard-coded as Rebel and Imperial, respectively. If the IFF is hostile, then the
first character is '1' (0x31, not 01). IFF5 (Red) is always hostile, '1' not
necessary.
-- FlightGroup --
The first string is obvious. The second string, Pilot, isn't actually used. It
is a bookkeeping note for the editor. There's a few bookkeeping values in TIE,
but later platforms have a lot more. Working down, the next one worth
mentioning is the Special craft. If Random is selected, then the craft number
before it is ignored. Continuing to ObeyPlayerOrders. For TIE95, this is a
simple boolean value, but in later platforms this is renamed to simply "Radio"
and takes on additional functionality.
Formation is obvious, but I'll explain the next couple. FormationSpacing
defaults to 02 "Tight", which is a decent spacing for fighters and other small
craft. You may want to increase that for larger ships. Formation has no effect
on mines. They use the Status field instead. Possible values are:
0: Floor (X-Y plane)
1: Side (Y-Z plane)
2: Front (X-Z plane)
3: All overlap a single point. They'll destroy each other with friendly-fire.
Anything beyond repeats this sequence. There is no way to change the spacing.
GlobalGroup is a great way of grouping multiple FG primarily for order and
trigger use. Instead of listing out each flightgroup or craft type in an order
you can lump everything to a GG and use a single target. Also works with Goals.
NumberOfWaves is zero-indexed, so the number stored is actually the number of
additional waves after the inital starting group. PlayerCraft is one-indexed
with no player being a value of zero. You can only have one PlayerCraft
active in a mission at any given time, otherwise both craft will be
unresponsive. TFW will only let you set one, but there are ways around this and
interesting tricks you can do with more than one.
Yaw, Pitch and Roll values only work for Space Objects (mines, buoys, etc). The
following description differs from previous editors, so bear with me.
LucasArts, in their infinite wisdom, had the flight engine automatically add a
-90° (nose down) Pitch angle to Objects. In XWA, this holds for all craft. We
don't have to worry about this with normal craft since the waypoints control
direction. TFW treats these values as Unknowns, I don't think TIE Edit can even
edit them. The values stored are angle(°)/360*256, so 90° is 0x40 (d64). Yaw is
evaluated first, then Pitch, then Roll.
The next couple values provide some intesting mechanics, but are hardly ever
used. The Permadeath mechanic is for multi-mission campaigns, and provide an
extra layer of realism. Sometimes, there are ways to destroy named craft in a
mission that you weren't really intended to; be it from luck, bad mission
design, or you're just that good. Then in the next mission that craft has been
glued back together like nothing happened. Permadeath prevents that. When
enabled, the number of ships destroyed with that ID is saved in the pilot file,
and is subtracted from available craft in future missions. For capital ships
it generally means they're just not present. For fighter groups, if you
destroy 4 of 6 in the first missions, only 2 will spawn in the next. Keep in
mind, triggers/goals that rely on them in later missions will treat them as if
they never spawned, so plan accordingly.
Now we're in the Arr/Dep section starting with Difficuly. In sentence form,
Triggers are "if Amount of VariableType Variable are Condition, then true". The
Arrival and Departure triggers are just that. The Alternate trigger is there
for if the originals can't be satisfied (mothership isn't in play). There's
also a special departure for after a craft as been captured. *Or* values
determine if one or both of the Triggers must fire to be true. The ArrivalDelay
works as expected, with the countdown starting after the Trigger has been
fired. The DepartureDelay works differently, though. That timer works from the
mission timer seen in your cockpit display. The flight group will leave when
the timer reaches the Delay value, or when the Trigger is fired, whichever
comes first. The AbortCondition applies only to individual craft, not the
entire flight group. When *ViaMothership is false, craft use hyperspace.
Orders, they're what make the world go 'round. Pick the Order from the list
and go from there. The Throttle value is simply expressed as
%Throttle = (value * 10). The Variables are controlled by the Order itself, as
different orders take different amounts for different reasons. Target and
TargetType are the same as Trigger.Variable and VariableType. Although there's
four Variables, in TIE no orders are known to use more than two.
Goals are for that specific flight group. The array is comprised of Primary,
Secondary, Fail, and Bonus, in that order. For BonusGoalPoints, the
stored value is expressed as (Points / 50), so 01 is 50pts, 02 is 100pts, etc.
Because the value is an SBYTE, this yields a point range of [-6400, +6350].
By the Force use these goals instead of Global Goals when possible. The Failed
goal does not function in TIE, and is ignored.
Waypoints are pretty simple, the array is X, Y, Z and Enabled in that order.
The values are expressed as (Coordinate * 160), such that a value of 0x50 is
0.50km, 0xA0 is 1.00km, etc. The Enable value just tells the application if it
needs to pay attention to it or not and is boolean, although it does occupy a
SHORT. If more than one StartPoint is enabled, the application will pick one to
use.
-- Backdrops --
Backdrops (stars, planets, etc) are special types of flight groups that use
some of the values differently.
The primary value here is Status, which becomes the Backdrop value. This
determines the graphic used. The majority of other values in the flight group
are ignored.
-- Message --
Another simple section; there is the message string, the triggers, a delay, and
the *Or* value. The EditorNote serves no purpose within the game itself, and is
merely there for bookkeeping use in the editor. The Delay value is evaluated to
(seconds / 5), such that 01 is 5s, 03 is 15s, etc.
The message string actually holds a second purpose, that is defining the color
of the message itself. The default message color is red, if the message starts
with '1' it is green, '2' is blue and '3' is purple. The number will not appear
when displayed in-game.
-- GlobalGoal --
When FG goals just won't cut it, that's what these are for. The array is
Primary, Secondary and Bonus. There's a bookkeeping note, a Delay between when
the triggers are completed and when it registers as complete, and a Version
value which I believe is unused.
-- Briefing --
Okay, we finally get to the briefing. The command listing itself I'll leave
for the list definition, that'll also have the variable listing as well. The
first value is the duration of the briefing itself in ticks. TIE uses 0xC
ticks per second.
Each Event is marked by the briefing time (in ticks) and the EventType,
followed by 0-4 additional variables. These variables are to be omitted if
they are not used for a given command. The last four active bytes in the Event
array is always 0F 27 22 00, which is the EndBriefing command at time 9999, and
usually isn't the last four bytes in the section (that would be a rather busy
briefing). The Event struct itself is something used here and in my code to
make it easier to parse, but in-game the array is simply a single short[0x190].
The next couple values don't matter in-game, as they'll be reset anyway in
memory. The CurrentTime value is what TIE uses to keep track of when it is so
it knows whether or not to keep processing events. The original LEC editor
would save it so work could resume right where they left off.
The CurrentEvent value (formerly StartLength) is also immediately reset in
memory, but traditionally is the number of SHORTs, Variables included, that
occur at Time=0, effectively the offset to the first event that needs to fire
when playback starts. The original belief for this value was a side effect of
the LEC editors processing events at T=0, thus assigning the next event offset.
EventsLength is the total number of SHORTs occupied in the Events array up to
and including the EndBriefing command. Though set by the original editors, it
appears to be completely ignored by the game. Tile is named per the XWA spec,
but also has no use.
The Tag and String arrays are not fixed sizes. They have a minimum length of
64 bytes, which is the case of every length being zero. If a Length is zero,
then the CHAR[] is naturally omitted. That's the real highlight right there.
Technical note: The briefing caption strings allow certain character codes.
0x00 for a newline, 0x02 to begin highlighting, 0x01 to end highlighting. A
single 0x00 will act as a newline, but two in a row [0x00 0x00] will be
considered a null terminator. The maximum space in game memory for a caption
string is 160 (0xA0) bytes and that must include the double [0x00 0x00] null
terminator. Excess length strings, or an improperly terminated string that
runs into another string may cause the game to crash.
Tag lengths are limited to a maximum of 40 (0x28), attempting to use more than
that will crash the game.
[LEGACY] Tag lengths are fixed 0x28, String lengths are fixed 0xA0.
-- PreMissionQuestion --
Similar to Tags and Strings, this has a dynamic size. Similarly, if Length is
zero, the following values are omitted. In reality, the Question and Answer are
part of the same string. If the Length is nonzero, then 0x0A is appended to the
Question. This is the line break that the application is searching for to
seperate the substrings, not the usual 00. The first five questions belong to
the Flight Officer, and the second five belong to the Secret Order Officer.
The array has a minimum byte length of 0x14.
Technical note: There are some character control codes, and also a length
limit. See technical notes in PostMissionQuestion.
[LEGACY] Section does not exist.
-- PostMissionQuestion --
This is pretty much the same as PreMission, only with the added
QuestionCondition and QuestionType values. QuestionType can be 00-02.
00 None
01 Primary Goals
02 Secondary Goals
QuestionCondition has three known values, and I would guess more that are
undiscovered.
00 None
04 Successful
05 Failed
Again, the Length can be zero and thus ignoring the values following it, with a
minimum length of 0x14. 0x0A is still appended to Question to be used as the
seperator.
The 0xFF after the questions is the typical EOF flag, though it doesn't appear
to be truly necessary. I use it, can't hurt. That said, after the last Post
question TIE doesn't really care anymore and it closes the file.
Technical note: The total length of "data" for a mission question should not
exceed 1024 (0x400) bytes. Extending above this limit greatly increases
chances of crashing the game when loading the briefing or debriefing. This
data includes the strings of both question and answer (and separator between
them), plus space for a null terminator when loaded into game memory (the
terminator is not present in the file itself). For PostMissionQuestion data,
the Condition and Type bytes both contribute toward this limit. It is unknown
if the two-byte Length field also contributes, but in testing it doesn't
seem to be.
Answer text allows the use of character control codes 0x02 to begin
highlighting, 0x01 to end highlighting, or 0x0A for newline.
[LEGACY] Section does not exist.
----
There you have it, the TIE95 Mission file format. Enjoy :P
=====
List Definitions
CraftType
NOTE: If used as a VariableType for a trigger or order, the list is zero-based
beginning with X-wing instead of None.
00 None
01 X-wing
02 Y-wing
03 A-wing
04 B-wing
05 TIE Fighter
06 TIE Interceptor
07 TIE Bomber
08 TIE Advanced
09 TIE Defender
0A Unused
0B Unused
0C Missile Boat
0D T-wing
0E Z-95 Headhunter
0F R-41 Starchaser
10 Assault Gunboat
11 Shuttle
12 Escort Shuttle
13 System Patrol Craft
14 Scout Craft
15 Stormtrooper Transport
16 Assault Transport
17 Escort Transport
18 Tug
19 Combat Utility Vehicle
1A Container A
1B Container B
1C Container C
1D Container D
1E Heavy Lifter
1F Unused
20 Bulk Freighter
21 Cargo Ferry
22 Modular Conveyor
23 Container Transport
24 Unused
25 Murrian Transport
26 Corellian Transport
27 Unused
28 Corellian Corvette
29 Modified Corvette
2A Nebulon-B Frigate
2B Modified Frigate
2C C-3 Passenger Liner
2D Carrack Cruiser
2E Strike Cruiser
2F Escort Carrier
30 Dreadnaught
31 Mon Calamari Cruiser
32 Light Mon Calamari Cruiser
33 Interdictor Cruiser
34 Victory-class Star Destroyer
35 Imperator-class Star Destroyer
36 Unused
37 Container E
38 Container F
39 Container G
3A Container H
3B Container I
3C Platform A
3D Platform B
3E Platform C
3F Platform D
40 Platform E
41 Platform F
42 Asteroid R&D Station
43 Asteroid Laser Battery
44 Asteroid Warhead Battery
45 X/7 Factory
46 Satellite 1
47 Satellite 2
48 Unused
49 Unused
4A Unused
4B Mine A
4C Mine B
4D Mine C
4E Unused
4F Unused
50 Probe A
51 Probe B
52 Unused
53 Nav Buoy A
54 Nav Buoy B
55 Asteroid Field
56 Asteroid Field
57 Planet
Status
00 None
01 2X Warheads
02 1/2 Warheads
03 No Shields
04 1/2 Shields
05 No Turrets
06 No Hyperdrive
07 Shields 0%, charging
08 Shields added or 200%
09 Hyperdrive added
Warhead
00 None
01 Space Bomb
02 Heavy Rocket
03 Concussion Missile
04 Torpedo
05 Advanced Concussion Missile
06 Advanced Torpedo
07 Mag Pulse Torpedo
Beam
00 None
01 Tractor Beam
02 Jamming Beam
GroupAI
00 Novice (None)
01 Officer
02 Veteran
03 Ace
04 Top Ace
05 Jedi (Invincible)
Markings
00 Red (TIE - None)
01 Gold (TIE - Red)
02 Blue (TIE - Gold)
03 Green (TIE - Blue)
Formation
00 Vic
01 Finger Four
02 Line Astern
03 Line Abreast
04 Echelon Right
05 Echelon Left
06 Double Astern
07 Diamond
08 Stack
09 High X
0A Vic Abreast
0B High Vic
0C Reverse High Vic
FormSpacing
00 Too Tight
01 Very Tight
02 Tight
03 Comfy
04 Close
05 Moderate
06 Standard
07 Safe
08 Loose
09 Very Loose
0A Distant
ArrivalDifficulty
00 All
01 Easy
02 Medium
03 Hard
04 Medium, Hard
05 Easy, Medium
Condition
00 Always (true)
01 Created
02 Destroyed
03 Attacked
04 Captured
05 Inspected
06 Boarded
07 Docked
08 Disabled
09 Survived (exist)
0A None (false)
0B Unknown (---)
0C Completed mission
0D Completed Primary Goals
0E Failed Primary Goals
0F Completed Secondary Goals
10 Failed Secondary Goals
11 Completed Bonus Goals
12 Failed Bonus Goals
13 Dropped off
14 Reinforced
15 0% Shields
16 50% Hull
17 Out of Warheads
18 Cannon system disabled
VariableType
00 None
01 Flight Group
02 CraftType (enum)
03 CraftCategory (enum)
04 ObjectCategory (enum)
05 IFF
06 Order (enum)
07 CraftWhen (enum)
08 Global Group
09 Adjusted AI skill level (enum)
0A Status (enum)
0B All Craft
CraftCategory
00 Starfighters
01 Transports
02 Freighters/Containers
03 Starships
04 Utility Craft
05 Platforms/Facilities
06 Mines
ObjectCategory
00 Craft
01 Weapons
02 Space Objects
Amount
00 100%
01 75%
02 50%
03 25%
04 At least one
05 All but one
06 Special craft
07 All non-special craft
08 All non-player craft
09 Player's craft
0A 100% of first wave
0B 75% of first wave
0C 50% of first wave
0D 25% of first wave
0E At least one of first wave
0F All but one of first wave
GoalAmount
00 100%
01 50%
02 At least one
03 All but one
04 Special craft
AbortCondition
00 None
01 0% Shields (or shield system disabled)
02 Cannons system disabled*
03 Out of warheads (or warhead system disabled)
04 50% Hull
05 Attacked
* Technical note: Approximately 75% systems, fighters and transports only.
This triggers when the cannon subsystem is disabled by ions or not installed.
Ships that do not have forward cannons don't possess a cannon subsystem,
therefore starships will abort instantly if given this trigger.
Order
00 Hold Station
01 Go Home
02 Circle
Var1 Number of Loops
03 Circle and Evade
Var1 Number of Loops
04 Rendezvous
Var1 Number of Dockings
05 Disabled
Var1 Meaningless? [does not appear to be Number of Dockings]
06 Await Boarding
Var1 Number of Dockings
07 Attack
Var1 Component?
08 Attack Escorts
09 Protect
0A Escort
Var1 Position [27 options, 3x3x3 positions from rear top right]
Var2 Default to Player [Player is always considered a potential target]
0B Disable
0C Board and Give Cargo
Var1 Docking Time (seconds x 5)
Var2 Number of Dockings
0D Board and Take Cargo
Var1 Docking Time (seconds x 5)
Var2 Number of Dockings
0E Board and Exchange Cargo
Var1 Docking Time (seconds x 5)
Var2 Number of Dockings
0F Board and Capture Cargo
Var1 Docking Time (seconds x 5)
Var2 Number of Dockings
10 Board with no Effect
Var1 Docking Time (seconds x 5)
Var2 Number of Dockings
11 Pick up
Var1 Docking Time (seconds x 5)
Var2 Number of Dockings
12 Drop off
Var1 Deploy time? (seconds x 5)
Var2 Flight Group
13 Wait
Var1 Wait time (seconds x 5)
14 SS Wait
Var1 Wait time (seconds x 5)
15 SS Patrol Loop
Var1 Number of Loops
16 SS Await Return
17 SS Launch
18 SS Protect
19 SS Wait and Protect
1A SS Patrol and Attack
1B SS Patrol and Disable
1C SS Hold Steady
Var1 Wait time (seconds x 5)
1D SS Go Home
1E SS Wait
Var1 Wait time (seconds x 5)
1F SS Board
Var1 Docking Time (seconds x 5)
Var2 Number of Dockings
20 Board to Repair
Var1 Docking Time (seconds x 5)
Var2 Number of Dockings
CraftWhen
00 Captured
01 Inspected
02 Finish being boarded
03 Finished docking
04 Disabled
05 Attacked
06 Any hull damage
07 Special craft
08 Non-special craft
09 Player's craft
0A Non-player's craft
EventType
01 Skip Marker
03 Page Break
04 Title Text
Var1 String#
05 Caption Text
Var1 String#
06 Move Map
Var1 X
Var2 Y
07 Zoom Map
Var1 X
Var2 Y
08 Clear FG Tags
09 FG Tag 1
Var1 Flight Group
0A FG Tag 2
Var1 Flight Group
0B FG Tag 3
Var1 Flight Group
0C FG Tag 4
Var1 Flight Group
0D FG Tag 5
Var1 Flight Group
0E FG Tag 6
Var1 Flight Group
0F FG Tag 7
Var1 Flight Group
10 FG Tag 8
Var1 Flight Group
11 Clear Text Tags
12 Text Tag 1
Var1 Tag#
Var2 X
Var3 Y
Var4 TextTagColor (enum)
13 Text Tag 2
Var1 Tag#
Var2 X
Var3 Y
Var4 TextTagColor (enum)
14 Text Tag 3
Var1 Tag#
Var2 X
Var3 Y
Var4 TextTagColor (enum)
15 Text Tag 4
Var1 Tag#
Var2 X
Var3 Y
Var4 TextTagColor (enum)
16 Text Tag 5
Var1 Tag#
Var2 X
Var3 Y
Var4 TextTagColor (enum)
17 Text Tag 6
Var1 Tag#
Var2 X
Var3 Y
Var4 TextTagColor (enum)
18 Text Tag 7
Var1 Tag#
Var2 X
Var3 Y
Var4 TextTagColor (enum)
19 Text Tag 8
Var1 Tag#
Var2 X
Var3 Y
Var4 TextTagColor (enum)
22 End Briefing
TextTagColor
00 Green
01 Red
02 Purple
03 Blue
04 Red
05 Light Red
06 Gray
07 White
=====
This documentation is distributed under the GNU Free Documentation License
version 1.3 or later