Wing Commander Toolbox

I decided to rename the project. When I started working on this, I intended to only focus on an API library, hence the name WCLibrary. I no longer think the name is fitting, so I am going with Wing Commander Toolbox (WCToolbox), a set of tools to work on Wing Commander; seems a bit more appropriate, especially if I continue to add or expand functionality. It is also a play on the name WC Workshop which seems fitting as it served as inspiration for this project.

In any case, here is what’s new for this update:
  • Support for INSTALL data files (reading and writing).
  • Support for FNT data files (reading and writing).
See the first post for the file attachment.


Here is the output for the relevant characters in each font.

fonts.png


The following screenshot is a very quick test to see if it was possible to include extended characters. In the test, the diacritical marks are not very obvious since the font does not provide a lot of space for them, but it works.

diacritical-marks.png
 
Data File Format: CAMP

The WCToolbox supports all CAMP.* named files (CAMP.000, 001, 002). These files principally control the flow of the game, the branching of winning and losing series.

A sample of the output of the WC1 XML Converter:

Code:
<CampFile>
  <StellarBackgroundBlock>
    <StellarBackground ImageIndex="2" Rotation="0,0,0" />
    <StellarBackground ImageIndex="3" Rotation="150,30,0" />
    <StellarBackground ImageIndex="-1" Rotation="0,0,0" />
    <StellarBackground ImageIndex="-1" Rotation="0,0,0" />
...
  <SeriesBranchBlock>
    <SeriesBranch WingmanPilotIndex="0" CutsceneIndex="-1" MissionsActive="2" SuccessScore="10" SuccessSeriesIndex="2" SuccessShipIndex="2" FailureSeriesIndex="3" FailureShipIndex="0">
      <MissionScoring MilitaryDecorationIndex="0" MilitaryDecorationScore="2000" NavigationPointScoring="2 1 2 1 0 0 0 0 0 0 0 0 0 0 0 0" />
      <MissionScoring MilitaryDecorationIndex="0" MilitaryDecorationScore="50" NavigationPointScoring="1 1 6 1 0 0 0 0 0 0 0 0 0 0 0 0" />
      <MissionScoring MilitaryDecorationIndex="0" MilitaryDecorationScore="0" NavigationPointScoring="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0" />
      <MissionScoring MilitaryDecorationIndex="0" MilitaryDecorationScore="0" NavigationPointScoring="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0" />
    </SeriesBranch>
...
  <BarSeatingArrangementBlock>
    <BarSeatingArrangement LeftSeatPilotIndex="5" RightSeatPilotIndex="4" />
    <BarSeatingArrangement LeftSeatPilotIndex="0" RightSeatPilotIndex="1" />
    <BarSeatingArrangement LeftSeatPilotIndex="0" RightSeatPilotIndex="0" />
    <BarSeatingArrangement LeftSeatPilotIndex="0" RightSeatPilotIndex="0" />
...
A sample of the output of the WC1 Extractor:

Code:
CAMP File
=========

Stellar Background Block
------------------------

Sortie  1: Image:  2; XYZ Rotation:   0,  0,  0
Sortie  2: Image:  3; XYZ Rotation: 150, 30,  0
Sortie  3: Image: -1; XYZ Rotation:   0,  0,  0
Sortie  4: Image: -1; XYZ Rotation:   0,  0,  0

...

Series Branch Block
-------------------

Series  1: Wingman: 0; Cutscene: -1; Success Score: 10; Success Series:  2; Success Ship:  2; Failure Series:  3; Failure Ship:  0
    Mission 0: Decoration: 0; Decoration Score: 2000; Navigation Point Scoring: 2,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0
    Mission 1: Decoration: 0; Decoration Score:   50; Navigation Point Scoring: 1,1,6,1,0,0,0,0,0,0,0,0,0,0,0,0
    Mission 2: Decoration: 0; Decoration Score:    0; Navigation Point Scoring: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    Mission 3: Decoration: 0; Decoration Score:    0; Navigation Point Scoring: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

...

Bar Seating Arrangement Block
-----------------------------

Sortie  1: Left Seat:  5; Right Seat:  4
Sortie  2: Left Seat:  0; Right Seat:  1
Sortie  3: Left Seat:  0; Right Seat:  0
Sortie  4: Left Seat:  0; Right Seat:  0

...
 
Data File Format: BRIEFING

The WCToolbox supports all BRIEFING.* named files (BRIEFING.000, 001, 002). These files contain all the dialog, for briefings and debriefings, as well as all the individual bar conversations.

A sample of the output of the WC1 XML Converter:

Code:
<BriefingFile>
  <FuneralConversationBlock>
    <Conversation>
      <DialogSetting BackgroundIndex="6" ForegroundIndex="20" TextColorIndex="0" Delay="140" />
      <Dialog Commands="" FacialExpressions="RA15,81,01,A15,81,01,A10,81,02," LipSyncText="farwaldipstikp5yulbemisd">Farewell, $C. You'll be missed.</Dialog>
      <DialogSetting BackgroundIndex="6" ForegroundIndex="-2" TextColorIndex="0" Delay="140" />
    </Conversation>
    <Conversation>
      <DialogSetting BackgroundIndex="5" ForegroundIndex="17" TextColorIndex="0" Delay="120" />
      <Dialog Commands="" FacialExpressions="" LipSyncText=""> </Dialog>
      <DialogSetting BackgroundIndex="5" ForegroundIndex="17" TextColorIndex="0" Delay="260" />
      <Dialog Commands="" FacialExpressions="" LipSyncText="">We are gathered here to pay tribute to one of our own, $R $N.</Dialog>
      <DialogSetting BackgroundIndex="5" ForegroundIndex="20" TextColorIndex="0" Delay="95" />
      <Dialog Commands="" FacialExpressions="RA45,81,01,A35,81,01,A50,81,02," LipSyncText="atasalwasadtuluslusapilat">It is always sad to lose a pilot...</Dialog>
      <DialogSetting BackgroundIndex="-2" ForegroundIndex="-1" TextColorIndex="-1" Delay="80" />
      <Dialog Commands="" FacialExpressions="RA45,81,01,A35,81,01,A50,81,02," LipSyncText="butatasaspasaledafacaltwanheasasyangasdipstik">... but it is especially difficult when he is as young as $C.</Dialog>
      <DialogSetting BackgroundIndex="-2" ForegroundIndex="-1" TextColorIndex="-1" Delay="80" />
      <Dialog Commands="" FacialExpressions="RA45,81,01,A35,81,01,A50,81,02," LipSyncText="hedidwatowtevenacanstupruvhamself">He died without even a chance to prove himself.</Dialog>
      <DialogSetting BackgroundIndex="-2" ForegroundIndex="-2" TextColorIndex="-1" Delay="80" />
    </Conversation>
...
A sample of the output of the WC1 Extractor:

Code:
BRIEFING File
=============

Funeral Conversation Block
--------------------------

CONVERSATION  1

Setting  0: Background:  6; Foreground: 20; TextColor:  0; Delay: 140
Setting  1: Background:  6; Foreground: -2; TextColor:  0; Delay: 140

Dialog  0:  | Farewell, $C. You'll be missed. | farwaldipstikp5yulbemisd | RA15,81,01,A15,81,01,A10,81,02,

CONVERSATION  2

Setting  0: Background:  5; Foreground: 17; TextColor:  0; Delay: 120
Setting  1: Background:  5; Foreground: 17; TextColor:  0; Delay: 260
Setting  2: Background:  5; Foreground: 20; TextColor:  0; Delay:  95
Setting  3: Background: -2; Foreground: -1; TextColor: -1; Delay:  80
Setting  4: Background: -2; Foreground: -1; TextColor: -1; Delay:  80
Setting  5: Background: -2; Foreground: -2; TextColor: -1; Delay:  80

Dialog  0:  |  |  |
Dialog  1:  | We are gathered here to pay tribute to one of our own, $R $N. |  |
Dialog  2:  | It is always sad to lose a pilot... | atasalwasadtuluslusapilat | RA45,81,01,A35,81,01,A50,81,02,
Dialog  3:  | ... but it is especially difficult when he is as young as $C. | butatasaspasaledafacaltwanheasasyangasdipstik | RA45,81,01,A35,81,01,A50,81,02,
Dialog  4:  | He died without even a chance to prove himself. | hedidwatowtevenacanstupruvhamself | RA45,81,01,A35,81,01,A50,81,02,

...
 
Data File Format: MODULE

The WCToolbox supports all MODULE.* named files (MODULE.000, 001, 002). These files contain the mission data, which principally includes the navigation points, including map data, and the location, tactics and other characteristics of friendly and enemy ships.

A sample of the output of the WC1 XML Converter:

Code:
<ModuleFile>
...
  <MissionNavigationPointBlock>
    <MissionNavigationPoint>
      <NavigationPoint Name="Tiger's Claw" Format="1" Point="0,0,0" Radius="15000" ShipClasses="8 2" Ships="0 3 4 -1 -1 -1 -1 -1 -1 -1">
        <Trigger Action="-1" NavigationPointIndex="0" />
        <Trigger Action="-1" NavigationPointIndex="0" />
        <Trigger Action="-1" NavigationPointIndex="0" />
        <Trigger Action="-1" NavigationPointIndex="0" />
      </NavigationPoint>
      <NavigationPoint Name="Nav 1" Format="1" Point="30000,-5000,15000" Radius="15000" ShipClasses="10 -1" Ships="5 6 7 -1 -1 -1 -1 -1 -1 -1">
        <Trigger Action="-1" NavigationPointIndex="0" />
        <Trigger Action="-1" NavigationPointIndex="0" />
        <Trigger Action="-1" NavigationPointIndex="0" />
        <Trigger Action="-1" NavigationPointIndex="0" />
      </NavigationPoint>
      <NavigationPoint Name="Nav 2" Format="1" Point="45000,10000,-20000" Radius="20000" ShipClasses="22 -1" Ships="11 -1 -1 -1 -1 -1 -1 -1 -1 -1">
        <Trigger Action="-1" NavigationPointIndex="0" />
        <Trigger Action="-1" NavigationPointIndex="0" />
        <Trigger Action="-1" NavigationPointIndex="0" />
        <Trigger Action="-1" NavigationPointIndex="0" />
      </NavigationPoint>
      <NavigationPoint Name="Nav 3" Format="1" Point="5000,5000,-45000" Radius="20000" ShipClasses="22 9" Ships="10 8 9 -1 -1 -1 -1 -1 -1 -1">
        <Trigger Action="-1" NavigationPointIndex="0" />
        <Trigger Action="-1" NavigationPointIndex="0" />
        <Trigger Action="-1" NavigationPointIndex="0" />
        <Trigger Action="-1" NavigationPointIndex="0" />
      </NavigationPoint>
...
  <MissionMapPointBlock>
    <MissionMapPoint>
      <MapPoint Format="0" TargetIndex="1">Proceed to Nav Point 1</MapPoint>
      <MapPoint Format="0" TargetIndex="2">Proceed to Nav Point 2</MapPoint>
      <MapPoint Format="0" TargetIndex="3">Proceed to Nav Point 3</MapPoint>
      <MapPoint Format="1" TargetIndex="0">Return to Tiger's Claw</MapPoint>
...
  <MissionShipPointBlock>
    <MissionShipPoint>
      <ShipPoint ClassIndex="8" Allegiance="0" LeadShipIndex="-1" OrdersIndex="-1" Location="0,0,0" Orientation="180,0,0" Speed="0" Size="0" PilotCharacteristicsIndex="3" FormationIndex="-1" FormationPositionNumber="0" PrimaryTargetShipIndex="0" SecondaryTargetShipIndex="-1" Unknown1="0" Unknown2="0" Unknown3="3" Unknown4="0" Unknown5="0" Unknown6="0" />
      <ShipPoint ClassIndex="0" Allegiance="0" LeadShipIndex="-1" OrdersIndex="0" Location="0,0,-1500" Orientation="180,0,0" Speed="20" Size="0" PilotCharacteristicsIndex="13" FormationIndex="0" FormationPositionNumber="0" PrimaryTargetShipIndex="0" SecondaryTargetShipIndex="-1" Unknown1="0" Unknown2="0" Unknown3="4" Unknown4="0" Unknown5="0" Unknown6="0" />
      <ShipPoint ClassIndex="0" Allegiance="0" LeadShipIndex="1" OrdersIndex="4" Location="0,0,0" Orientation="180,0,0" Speed="20" Size="0" PilotCharacteristicsIndex="5" FormationIndex="0" FormationPositionNumber="2" PrimaryTargetShipIndex="1" SecondaryTargetShipIndex="1" Unknown1="0" Unknown2="0" Unknown3="3" Unknown4="0" Unknown5="0" Unknown6="0" />
      <ShipPoint ClassIndex="2" Allegiance="0" LeadShipIndex="0" OrdersIndex="3" Location="0,2500,0" Orientation="180,0,0" Speed="10" Size="0" PilotCharacteristicsIndex="2" FormationIndex="1" FormationPositionNumber="0" PrimaryTargetShipIndex="0" SecondaryTargetShipIndex="-1" Unknown1="0" Unknown2="0" Unknown3="3" Unknown4="0" Unknown5="0" Unknown6="0" />
      <ShipPoint ClassIndex="2" Allegiance="0" LeadShipIndex="3" OrdersIndex="4" Location="0,0,0" Orientation="180,0,0" Speed="10" Size="0" PilotCharacteristicsIndex="2" FormationIndex="1" FormationPositionNumber="1" PrimaryTargetShipIndex="3" SecondaryTargetShipIndex="3" Unknown1="0" Unknown2="0" Unknown3="3" Unknown4="0" Unknown5="0" Unknown6="0" />
      <ShipPoint ClassIndex="10" Allegiance="1" LeadShipIndex="-1" OrdersIndex="0" Location="-5000,1000,5000" Orientation="100,0,0" Speed="20" Size="0" PilotCharacteristicsIndex="1" FormationIndex="2" FormationPositionNumber="0" PrimaryTargetShipIndex="3" SecondaryTargetShipIndex="-1" Unknown1="0" Unknown2="0" Unknown3="2" Unknown4="0" Unknown5="0" Unknown6="0" />
      <ShipPoint ClassIndex="10" Allegiance="1" LeadShipIndex="5" OrdersIndex="4" Location="0,0,0" Orientation="100,0,0" Speed="20" Size="0" PilotCharacteristicsIndex="0" FormationIndex="2" FormationPositionNumber="1" PrimaryTargetShipIndex="5" SecondaryTargetShipIndex="5" Unknown1="0" Unknown2="0" Unknown3="1" Unknown4="0" Unknown5="0" Unknown6="0" />
      <ShipPoint ClassIndex="10" Allegiance="1" LeadShipIndex="5" OrdersIndex="4" Location="0,0,0" Orientation="100,0,0" Speed="20" Size="0" PilotCharacteristicsIndex="0" FormationIndex="2" FormationPositionNumber="2" PrimaryTargetShipIndex="5" SecondaryTargetShipIndex="5" Unknown1="0" Unknown2="0" Unknown3="1" Unknown4="0" Unknown5="0" Unknown6="0" />
      <ShipPoint ClassIndex="9" Allegiance="1" LeadShipIndex="-1" OrdersIndex="0" Location="5000,2000,5000" Orientation="80,0,0" Speed="17" Size="0" PilotCharacteristicsIndex="1" FormationIndex="4" FormationPositionNumber="0" PrimaryTargetShipIndex="0" SecondaryTargetShipIndex="-1" Unknown1="0" Unknown2="0" Unknown3="2" Unknown4="0" Unknown5="0" Unknown6="0" />
      <ShipPoint ClassIndex="9" Allegiance="1" LeadShipIndex="8" OrdersIndex="4" Location="0,0,0" Orientation="80,0,0" Speed="17" Size="0" PilotCharacteristicsIndex="0" FormationIndex="4" FormationPositionNumber="1" PrimaryTargetShipIndex="8" SecondaryTargetShipIndex="8" Unknown1="0" Unknown2="0" Unknown3="1" Unknown4="0" Unknown5="0" Unknown6="0" />
      <ShipPoint ClassIndex="22" Allegiance="2" LeadShipIndex="-1" OrdersIndex="-1" Location="-7000,-3000,10000" Orientation="0,0,0" Speed="136" Size="19" PilotCharacteristicsIndex="0" FormationIndex="-1" FormationPositionNumber="0" PrimaryTargetShipIndex="0" SecondaryTargetShipIndex="-1" Unknown1="0" Unknown2="0" Unknown3="1" Unknown4="0" Unknown5="0" Unknown6="0" />
      <ShipPoint ClassIndex="22" Allegiance="2" LeadShipIndex="-1" OrdersIndex="-1" Location="0,-3000,5000" Orientation="0,0,0" Speed="76" Size="29" PilotCharacteristicsIndex="0" FormationIndex="-1" FormationPositionNumber="0" PrimaryTargetShipIndex="0" SecondaryTargetShipIndex="-1" Unknown1="0" Unknown2="0" Unknown3="1" Unknown4="0" Unknown5="0" Unknown6="0" />
...
A sample of the output of the WC1 Extractor:

Code:
MODULE File
===========

...

Mission Navigation Point Block
------------------------------

Sortie  5
---------
Point  0: Name: Tiger's Claw          ; Format: 1; XYZ:       0,      0,      0; Radius: 15000; Triggers: [-1, 0|-1, 0|-1, 0|-1, 0]; Preload: 8,2    ; Ships: 0,3,4,-1,-1,-1,-1,-1,-1,-1
Point  1: Name: Nav 1                 ; Format: 1; XYZ:   30000,  -5000,  15000; Radius: 15000; Triggers: [-1, 0|-1, 0|-1, 0|-1, 0]; Preload: 10,-1  ; Ships: 5,6,7,-1,-1,-1,-1,-1,-1,-1
Point  2: Name: Nav 2                 ; Format: 1; XYZ:   45000,  10000, -20000; Radius: 20000; Triggers: [-1, 0|-1, 0|-1, 0|-1, 0]; Preload: 22,-1  ; Ships: 11,-1,-1,-1,-1,-1,-1,-1,-1,-1
Point  3: Name: Nav 3                 ; Format: 1; XYZ:    5000,   5000, -45000; Radius: 20000; Triggers: [-1, 0|-1, 0|-1, 0|-1, 0]; Preload: 22,9   ; Ships: 10,8,9,-1,-1,-1,-1,-1,-1,-1

...

Mission Map Point Block
-----------------------

Sortie  5
---------
Point  0: Format:  0; Target:  1; Text: Proceed to Nav Point 1
Point  1: Format:  0; Target:  2; Text: Proceed to Nav Point 2
Point  2: Format:  0; Target:  3; Text: Proceed to Nav Point 3
Point  3: Format:  1; Target:  0; Text: Return to Tiger's Claw

...

Mission Ship Point Block
------------------------

Sortie  5
---------
Ship  0: Class:  8; Allegiance: 0; Leader: -1; ?: 0; Orders: -1; ?: 0; XYZ:      0,     0,     0; XYZ Rotation:  180,   0,   0; Position: 0; Speed:   0; Size:  0; ?: 3; AI:  3; ?: 0; ?: 0; ?: 0; Target: -1; Formation: -1; Target:  0; 
Ship  1: Class:  0; Allegiance: 0; Leader: -1; ?: 0; Orders:  0; ?: 0; XYZ:      0,     0, -1500; XYZ Rotation:  180,   0,   0; Position: 0; Speed:  20; Size:  0; ?: 4; AI: 13; ?: 0; ?: 0; ?: 0; Target: -1; Formation:  0; Target:  0; 
Ship  2: Class:  0; Allegiance: 0; Leader:  1; ?: 0; Orders:  4; ?: 0; XYZ:      0,     0,     0; XYZ Rotation:  180,   0,   0; Position: 2; Speed:  20; Size:  0; ?: 3; AI:  5; ?: 0; ?: 0; ?: 0; Target:  1; Formation:  0; Target:  1; 
Ship  3: Class:  2; Allegiance: 0; Leader:  0; ?: 0; Orders:  3; ?: 0; XYZ:      0,  2500,     0; XYZ Rotation:  180,   0,   0; Position: 0; Speed:  10; Size:  0; ?: 3; AI:  2; ?: 0; ?: 0; ?: 0; Target: -1; Formation:  1; Target:  0; 
Ship  4: Class:  2; Allegiance: 0; Leader:  3; ?: 0; Orders:  4; ?: 0; XYZ:      0,     0,     0; XYZ Rotation:  180,   0,   0; Position: 1; Speed:  10; Size:  0; ?: 3; AI:  2; ?: 0; ?: 0; ?: 0; Target:  3; Formation:  1; Target:  3; 
Ship  5: Class: 10; Allegiance: 1; Leader: -1; ?: 0; Orders:  0; ?: 0; XYZ:  -5000,  1000,  5000; XYZ Rotation:  100,   0,   0; Position: 0; Speed:  20; Size:  0; ?: 2; AI:  1; ?: 0; ?: 0; ?: 0; Target: -1; Formation:  2; Target:  3; 
Ship  6: Class: 10; Allegiance: 1; Leader:  5; ?: 0; Orders:  4; ?: 0; XYZ:      0,     0,     0; XYZ Rotation:  100,   0,   0; Position: 1; Speed:  20; Size:  0; ?: 1; AI:  0; ?: 0; ?: 0; ?: 0; Target:  5; Formation:  2; Target:  5; 
Ship  7: Class: 10; Allegiance: 1; Leader:  5; ?: 0; Orders:  4; ?: 0; XYZ:      0,     0,     0; XYZ Rotation:  100,   0,   0; Position: 2; Speed:  20; Size:  0; ?: 1; AI:  0; ?: 0; ?: 0; ?: 0; Target:  5; Formation:  2; Target:  5; 
Ship  8: Class:  9; Allegiance: 1; Leader: -1; ?: 0; Orders:  0; ?: 0; XYZ:   5000,  2000,  5000; XYZ Rotation:   80,   0,   0; Position: 0; Speed:  17; Size:  0; ?: 2; AI:  1; ?: 0; ?: 0; ?: 0; Target: -1; Formation:  4; Target:  0; 
Ship  9: Class:  9; Allegiance: 1; Leader:  8; ?: 0; Orders:  4; ?: 0; XYZ:      0,     0,     0; XYZ Rotation:   80,   0,   0; Position: 1; Speed:  17; Size:  0; ?: 1; AI:  0; ?: 0; ?: 0; ?: 0; Target:  8; Formation:  4; Target:  8; 
Ship 10: Class: 22; Allegiance: 2; Leader: -1; ?: 0; Orders: -1; ?: 0; XYZ:  -7000, -3000, 10000; XYZ Rotation:    0,   0,   0; Position: 0; Speed: 136; Size: 19; ?: 1; AI:  0; ?: 0; ?: 0; ?: 0; Target: -1; Formation: -1; Target:  0; 
Ship 11: Class: 22; Allegiance: 2; Leader: -1; ?: 0; Orders: -1; ?: 0; XYZ:      0, -3000,  5000; XYZ Rotation:    0,   0,   0; Position: 0; Speed:  76; Size: 29; ?: 1; AI:  0; ?: 0; ?: 0; ?: 0; Target: -1; Formation: -1; Target:  0; 

...
 
Data File Format: COMM

The WCToolbox supports all COMM*.DAT named files (COMMUNIC.DAT, COMMSM2.DAT). These are the in-flight speech of pilots.

A sample of the output of the WC1 XML Converter:

Code:
<CommFile>
  <PilotCommunication>
    <Message>My honor is to obey.</Message>
    <Message>I humbly ask your apologies, but I cannot.</Message>
    <Message>Excuse me commander, I have noticed enemy ships.</Message>
    <Message>Ready to engage, commander.</Message>
    <Message>I regretfully ask for assistance.</Message>
    <Message>I have managed to kill one, Dommo!</Message>
    <Message>Your skill is obvious, I bow to your talents.</Message>
    <Message>It has been an honor! My ancestors await me...</Message>
    <Message>We must leave, commander. There will be other times.</Message>
    <Message>I will report your bravery.  Good luck, $C.</Message>
    <Message>I respectfully request that you attack the enemy.</Message>
  </PilotCommunication>
  <PilotCommunication>
    <Message>You got it boss.</Message>
    <Message>No can do...</Message>
    <Message>$C!  I've got enemy ships on screen!</Message>
    <Message>Let's take out those bogeys...</Message>
    <Message>$C, I'm in trouble!  Lend me a hand!</Message>
    <Message>Yeee hooo!  Got 'im!</Message>
    <Message>Way to go $C; nice shootin'</Message>
    <Message>I'm hit!  I'm breaking up!  The cockpit's cra...</Message>
    <Message>Commander, they're too tough for us!  Take us home!</Message>
    <Message>You gave 'em a run for their money, friend...</Message>
    <Message>Watch it bucko!</Message>
  </PilotCommunication>
...
A sample of the output of the WC1 Extractor:

Code:
COMM File
=========

Pilot  0: 
    Message  0: My honor is to obey.
    Message  1: I humbly ask your apologies, but I cannot.
    Message  2: Excuse me commander, I have noticed enemy ships.
    Message  3: Ready to engage, commander.
    Message  4: I regretfully ask for assistance.
    Message  5: I have managed to kill one, Dommo!
    Message  6: Your skill is obvious, I bow to your talents.
    Message  7: It has been an honor! My ancestors await me...
    Message  8: We must leave, commander. There will be other times.
    Message  9: I will report your bravery.  Good luck, $C.
    Message 10: I respectfully request that you attack the enemy.

Pilot  1: 
    Message  0: You got it boss.
    Message  1: No can do...
    Message  2: $C!  I've got enemy ships on screen!
    Message  3: Let's take out those bogeys...
    Message  4: $C, I'm in trouble!  Lend me a hand!
    Message  5: Yeee hooo!  Got 'im!
    Message  6: Way to go $C; nice shootin'
    Message  7: I'm hit!  I'm breaking up!  The cockpit's cra...
    Message  8: Commander, they're too tough for us!  Take us home!
    Message  9: You gave 'em a run for their money, friend...
    Message 10: Watch it bucko!

...
 
Data File Format: PAL

The WCToolbox supports the GAME.PAL file. This is the game color palette.

A sample of the output of the WC1 XML Converter:

Code:
<PalGameFile>
  <ColorMapChunk>
    <Color R="0" G="0" B="0" />
    <Color R="19" G="19" B="19" />
    <Color R="35" G="35" B="35" />
    <Color R="55" G="55" B="55" />
    <Color R="71" G="71" B="71" />
...
A sample of the output of the WC1 Extractor:

Code:
PAL, GAME File
==============

Colors: 256

Color   0: RGB:   0,  0,  0 (#000000)
Color   1: RGB:  19, 19, 19 (#131313)
Color   2: RGB:  35, 35, 35 (#232323)
Color   3: RGB:  55, 55, 55 (#373737)
Color   4: RGB:  71, 71, 71 (#474747)

...
GAME.PAL-linear.png
 
Data File Format: VGA (TGA, EGA)

The WCToolbox supports all *.VGA type files (ARROW.VGA, BRIEFING.VGA, etc); there is also reading support for all *.TGA and *.EGA type files. These files contain all purpose images.

A sample of the output of the WC1 XML Converter:

Code:
<VgaFile>
  <ImageBlock>
    <Image Origin="0,127" file="BRIEFING.VGA-ImageBlock000-Image000.gif" />
    <Image Origin="0,127" file="BRIEFING.VGA-ImageBlock000-Image001.gif" />
    <Image Origin="0,127" file="BRIEFING.VGA-ImageBlock000-Image002.gif" />
    <Image Origin="40,0" file="BRIEFING.VGA-ImageBlock000-Image003.gif" />
    <Image Origin="0,127" file="BRIEFING.VGA-ImageBlock000-Image004.gif" />
    <Image Origin="0,127" file="BRIEFING.VGA-ImageBlock000-Image005.gif" />
  </ImageBlock>
  <ImageBlock>
    <Image Origin="7,9" file="BRIEFING.VGA-ImageBlock001-Image000.gif" />
    <Image Origin="8,9" file="BRIEFING.VGA-ImageBlock001-Image001.gif" />
    <Image Origin="8,9" file="BRIEFING.VGA-ImageBlock001-Image002.gif" />
    <Image Origin="8,9" file="BRIEFING.VGA-ImageBlock001-Image003.gif" />
...
BRIEFING.VGA-ImageBlock000-Image000.gif
BRIEFING.VGA-ImageBlock000-Image001.gif


A sample of the output of the WC1 Extractor:

Code:
VGA File
========

Image Block   0
---------------

Image   0: Size: 319,128; Origin:   0,127
Image   1: Size: 320,128; Origin:   0,127
Image   2: Size:  97,128; Origin:   0,127
Image   3: Size:  81, 26; Origin:  40,  0
Image   4: Size: 320,128; Origin:   0,127
Image   5: Size: 320,128; Origin:   0,127


Image Block   1
---------------

Image   0: Size:  15, 19; Origin:   7,  9
Image   1: Size:  17, 19; Origin:   8,  9
Image   2: Size:  18, 19; Origin:   8,  9
Image   3: Size:  19, 19; Origin:   8,  9

...
 
Data File Format: SHIP

The WCToolbox supports all SHIP.* named files (SHIP.V04-V21). These files contain images of the external view of capital ships.

A sample of the output of the WC1 XML Converter:

Code:
<VgaFile>
  <ImageBlock>
    <Image Origin="59,52" file="SHIP.V04-ImageBlock000-Image000.gif" />
  </ImageBlock>
  <ImageBlock>
    <Image Origin="57,45" file="SHIP.V04-ImageBlock001-Image000.gif" />
...
SHIP.V04-ImageBlock000-Image000.gif
SHIP.V04-ImageBlock001-Image000.gif


A sample of the output of the WC1 Extractor:

Code:
SHIP File
=========

Image Block   0
---------------

Image   0: Size: 122,104; Origin:  59, 52

Image Block   1
---------------

Image   0: Size: 118, 95; Origin:  57, 45

...
 
Data File Format: SHIPTYPE

The WCToolbox supports all SHIPTYPE.* named files (SHIPTYPE.V00-V29). These files contain images of the external view of fighter ships and the engine exhaust position.

A sample of the output of the WC1 XML Converter:

Code:
<ShipTypeFile>
  <ShipExternalViewImageBlock>
    <Image Origin="33,39" file="SHIPTYPE.V14-ShipExternalViewImageBlock-Image000.gif" />
    <Image Origin="44,21" file="SHIPTYPE.V14-ShipExternalViewImageBlock-Image001.gif" />
    <Image Origin="40,24" file="SHIPTYPE.V14-ShipExternalViewImageBlock-Image002.gif" />
...
  <VduOutlineImageBlock>
    <Image Origin="14,20" file="SHIPTYPE.V14-VduOutlineImageBlock-Image000.gif" />
    <Image Origin="14,20" file="SHIPTYPE.V14-VduOutlineImageBlock-Image001.gif" />
    <Image Origin="27,18" file="SHIPTYPE.V14-VduOutlineImageBlock-Image002.gif" />
  </VduOutlineImageBlock>
  <EnginePositionBlock>
    <EnginePosition>
      <EngineExhaust ImageIndex="0" Position="23,-12" Scale="184" Rotation="0" Order="-1" />
      <EngineExhaust ImageIndex="0" Position="24,13" Scale="184" Rotation="0" Order="-1" />
    </EnginePosition>
    <EnginePosition>
      <EngineExhaust ImageIndex="1" Position="14,15" Scale="184" Rotation="90" Order="2" />
      <EngineExhaust ImageIndex="1" Position="-15,15" Scale="184" Rotation="90" Order="2" />
    </EnginePosition>
    <EnginePosition>
      <EngineExhaust ImageIndex="1" Position="-5,19" Scale="184" Rotation="60" Order="2" />
      <EngineExhaust ImageIndex="1" Position="22,11" Scale="184" Rotation="60" Order="2" />
...
SHIPTYPE.V14-ShipExternalViewImageBlock-Image000.gif
SHIPTYPE.V14-ShipExternalViewImageBlock-Image001.gif


A sample of the output of the WC1 Extractor:

Code:
SHIPTYPE File
=============

Ship External View Image Block
------------------------------

Image   0: Size:  64, 75; Origin:  33, 39
Image   1: Size:  86, 49; Origin:  44, 21
Image   2: Size:  82, 54; Origin:  40, 24

...

VDU Outline Image Block
-----------------------

Image   0: Size:  30, 41; Origin:  14, 20
Image   1: Size:  30, 41; Origin:  14, 20
Image   2: Size:  53, 37; Origin:  27, 18

Engine Position Block
---------------------

Image  0: [Exhaust 0: Image: 0; XY Position:  23,-12; Scale: 184; Rotation:   0; Order: -1]; [Exhaust 1: Image: 0; XY Position:  24, 13; Scale: 184; Rotation:   0; Order: -1];
Image  1: [Exhaust 0: Image: 1; XY Position:  14, 15; Scale: 184; Rotation:  90; Order:  2]; [Exhaust 1: Image: 1; XY Position: -15, 15; Scale: 184; Rotation:  90; Order:  2];
Image  2: [Exhaust 0: Image: 1; XY Position:  -5, 19; Scale: 184; Rotation:  60; Order:  2]; [Exhaust 1: Image: 1; XY Position:  22, 11; Scale: 184; Rotation:  60; Order:  2];

...
 
Data File Format: PCSHIP

The WCToolbox supports all PCSHIP.* named files (PCSHIP.V00-V05). These files principally contain images of the internal view (cockpit) of the player character ship, including all the cockpit component.

A sample of the output of the WC1 XML Converter:

Code:
<PCShipFile>
  <ForwardCockpitViewImageBlock>
    <Image Origin="0,199" file="PCSHIP.V00-ForwardCockpitViewImageBlock-Image000.gif" />
  </ForwardCockpitViewImageBlock>
  <RightCockpitViewImageBlock>
    <Image Origin="0,199" file="PCSHIP.V00-RightCockpitViewImageBlock-Image000.gif" />
...
PCSHIP.V00-ForwardCockpitViewImageBlock-Image000.gif
PCSHIP.V00-RightCockpitViewImageBlock-Image000.gif


A sample of the output of the WC1 Extractor:

Code:
PCSHIP File
===========

Forward Cockpit View Image Block
--------------------------------

Image   0: Size: 320,200; Origin:   0,199

Right Cockpit View Image Block
------------------------------

Image   0: Size: 320,200; Origin:   0,199
...
 
Data File Format: MID

The WCToolbox supports all *.MID type files (MUSIC.MID). These are the game MIDI music files.

A sample of the output of the WC1 XML Converter:

Code:
<MidFile>
  <MusicBlock>
    <Music file="MUSIC.MID-MusicBlock000-Music.mid" />
  </MusicBlock>
  <MusicBlock>
    <Music file="MUSIC.MID-MusicBlock001-Music.mid" />
...
A sample of the output of the WC1 Extractor:

Code:
MID File
========

Music Block   0
---------------

Music: Tracks: 10

Music Block   1
---------------

Music: Tracks: 10

...
 
Data File Format: WLD

The WCToolbox supports all *.WLD type files (SAVEGAME.WLD, CRUSADE.WLD). These are the save games, which includes pilot status and game state.

A sample of the output of the WC1 XML Converter:

Code:
<WldFile>
  <SaveGame Name="S1M0">
    <Pilots>
      <Pilot CallSign="SPIRIT" LastName="TANAKA" MilitaryRankIndex="1" Sorties="11" Kills="14" Unknown1="3" Unknown2="1" />
      <Pilot CallSign="HUNTER" LastName="ST.JOHN" MilitaryRankIndex="2" Sorties="25" Kills="32" Unknown1="4" Unknown2="4" />
      <Pilot CallSign="BOSSMAN" LastName="CHEN" MilitaryRankIndex="3" Sorties="35" Kills="37" Unknown1="1" Unknown2="2" />
      <Pilot CallSign="ICEMAN" LastName="CASEY" MilitaryRankIndex="3" Sorties="28" Kills="43" Unknown1="0" Unknown2="1" />
      <Pilot CallSign="ANGEL" LastName="DEVEREAUX" MilitaryRankIndex="2" Sorties="22" Kills="20" Unknown1="0" Unknown2="1" />
      <Pilot CallSign="PALADIN" LastName="TAGGART" MilitaryRankIndex="3" Sorties="42" Kills="34" Unknown1="2" Unknown2="2" />
      <Pilot CallSign="MANIAC" LastName="MARSHALL" MilitaryRankIndex="0" Sorties="5" Kills="6" Unknown1="4" Unknown2="1" />
      <Pilot CallSign="KNIGHT" LastName="KHUMALO" MilitaryRankIndex="2" Sorties="18" Kills="23" Unknown1="3" Unknown2="3" />
      <Pilot CallSign="MAVERICK" LastName="BLAIR" MilitaryRankIndex="0" Sorties="0" Kills="0" Unknown1="0" Unknown2="0" />
    </Pilots>
    <GameState ShipIndex="0" MedalCount="0 0 0 0 0" Ribbons="1 1 0 0 0 0 0 0 0 0 0 0" SeriesIndex="1" MissionIndex="0" SeriesCount="0" SeriesPath="0 0 0 0 0 0 0 0" WingmanStatus="0 0 0 0 0 0 0 0" KilrathiStatus="1 1 1 1" Dateline="2654-110T06:00" EjectionCount="0" PromotionScore="0" MedalScore="0" SeriesScore="0" Unknown="0" />
    <MissionStatePoint>
      <StatePoint Format="-1" TargetIndex="0" Point="0,0,0" Unknown1="0" Unknown2="0" Unknown3="0" Unknown4="0" Unknown5="0" Unknown6="0" />
      <StatePoint Format="0" TargetIndex="0" Point="0,0,0" Unknown1="0" Unknown2="0" Unknown3="0" Unknown4="0" Unknown5="0" Unknown6="0" />
      <StatePoint Format="0" TargetIndex="0" Point="0,0,0" Unknown1="0" Unknown2="0" Unknown3="0" Unknown4="0" Unknown5="0" Unknown6="0" />
...
A sample of the output of the WC1 Extractor:

Code:
WLD File
========

Save 0
------

Name: S1M0            ; Enabled: True

PILOTS

# Last Name     Call Sign     Rank Sorties Kills Unknown1 Unknown2

0 TANAKA        SPIRIT           1      11    14        3        1
1 ST.JOHN       HUNTER           2      25    32        4        4
2 CHEN          BOSSMAN          3      35    37        1        2
3 CASEY         ICEMAN           3      28    43        0        1
4 DEVEREAUX     ANGEL            2      22    20        0        1
5 TAGGART       PALADIN          3      42    34        2        2
6 MARSHALL      MANIAC           0       5     6        4        1
7 KHUMALO       KNIGHT           2      18    23        3        3
8 BLAIR         MAVERICK         0       0     0        0        0

GAME STATE

Ship index: 0

Medals: Bronze:  0; Silver:  0; Gold:  0; Golden Sun:  0; Terran Valor:  0
Ribbons: [1,1,0,0,0,0,0,0,0,0,0,0]

Series count: 0; Series path: [0,0,0,0,0,0,0,0]

Sortie: S1M0

Wingman status: W0: 0, W1: 0, W2: 0, W3: 0, W4: 0, W5: 0, W6: 0, W7: 0,
Kilrathi status: K0: 1, K1: 1, K2: 1, K3: 1,

Dateline: 2654-110T06:00

Ejection count: 0; Promotion score: 0; Medal score: System.Int32[]; Series score: 0; ?: 0

MISSION STATE POINTS

Point  0: ?:    0; ?:    0; ?: 0; Format: -1; TargetIndex:  0; ?: 0; ?:      0; ?:      0; XYZ:       0,      0,      0
Point  1: ?:    0; ?:    0; ?: 0; Format:  0; TargetIndex:  0; ?: 0; ?:      0; ?:      0; XYZ:       0,      0,      0
Point  2: ?:    0; ?:    0; ?: 0; Format:  0; TargetIndex:  0; ?: 0; ?:      0; ?:      0; XYZ:       0,      0,      0

...
 
Data File Format: INSTALL

The WCToolbox supports the INSTALL.DAT file. This is an index off all installed game files.

A sample of the output of the WC1 XML Converter:

Code:
<InstallFile>
  <FileEntry Name="DISK.001" Disk="1" Format="7" Identifier="-1" />
  <FileEntry Name="WC.EXE" Disk="1" Format="7" Identifier="0" />
  <FileEntry Name="INSTALL.DAT" Disk="1" Format="7" Identifier="-1" />
  <FileEntry Name="GAME.PAL" Disk="1" Format="7" Identifier="-1" />
  <FileEntry Name="ARROW.VGA" Disk="1" Format="2" Identifier="15" />
...
A sample of the output of the WC1 Extractor:

Code:
INSTALL File
============

Files: 70

File   0: Name: DISK.001    ; Disk: 1, Format: 7; Identifier:  -1
File   1: Name: WC.EXE      ; Disk: 1, Format: 7; Identifier:   0
File   2: Name: INSTALL.DAT ; Disk: 1, Format: 7; Identifier:  -1
File   3: Name: GAME.PAL    ; Disk: 1, Format: 7; Identifier:  -1
File   4: Name: ARROW.VGA   ; Disk: 1, Format: 2; Identifier:  15

...
 
Data File Format: FNT

The WCToolbox supports all *.FNT type files (FONTS.FNT). These are the game fonts used for the dialog and speech text, and cockpit displays.

A sample of the output of the WC1 XML Converter:

Code:
<FntFile>
  <FontBlock>
    <Font BackgroundPaletteIndex="0" ForegroundPaletteIndex="15">
      <Glyph />
      <Glyph file="FONTS.FNT-FontBlock000-Font-Glyph001.gif" />
...
      <Glyph file="FONTS.FNT-FontBlock000-Font-Glyph065.gif" />
      <Glyph file="FONTS.FNT-FontBlock000-Font-Glyph066.gif" />
      <Glyph file="FONTS.FNT-FontBlock000-Font-Glyph067.gif" />
      <Glyph file="FONTS.FNT-FontBlock000-Font-Glyph068.gif" />
      <Glyph file="FONTS.FNT-FontBlock000-Font-Glyph069.gif" />
...
FONTS.FNT-FontBlock000-Font-Glyph065.gif
FONTS.FNT-FontBlock000-Font-Glyph066.gif
FONTS.FNT-FontBlock000-Font-Glyph067.gif
FONTS.FNT-FontBlock000-Font-Glyph068.gif
FONTS.FNT-FontBlock000-Font-Glyph069.gif


A sample of the output of the WC1 Extractor:

Code:
FNT File
========

Font Block   0
--------------

Height: 11; Glyphs: 256

Glyph   0: Char:  ; Width:  0
Glyph   1: Char:  ; Width:  1

...

Glyph  65: Char: A; Width:  9
Glyph  66: Char: B; Width:  9
Glyph  67: Char: C; Width:  9
Glyph  68: Char: D; Width:  9
Glyph  69: Char: E; Width:  8

...
FONTS.FNT-Block000.png
 
Data File Format: INTRO

The WCToolbox supports all INTRO*.DAT named files (INTRO.DAT, INTRO1.DAT). These are the copy protection questions and answers.

A sample of the output of the WC1 XML Converter:

Code:
<IntroFile>
  <CopyProtectionBlock>
    <CopyProtection Question="SECRET 2 PAGE 1: HOW MANY PRIESTESSES ARE IN THE SIVAR CULT?" Answer="9500" />
    <CopyProtection Question="SCIMITAR BLUEPRINTS: WHAT IS THE MAX RANGE OF THE MASS DRIVER CANNON?" Answer="3000" />
    <CopyProtection Question="RAPTOR BLUEPRINTS: WHAT IS THE ESK RATING FOR THE PILUM FF MISSILE?" Answer="9500" />
    <CopyProtection Question="RAPIER BLUEPRINTS: WHAT IS THE VELOCITY OF THE DART DF MISSILE?" Answer="900" />
...
A sample of the output of the WC1 Extractor:

Code:
INTRO File
==========

Copy Protection Block
---------------------

Questions: 10

Question: SECRET 2 PAGE 1: HOW MANY PRIESTESSES ARE IN THE SIVAR CULT?
Answer:  9500

Question: SCIMITAR BLUEPRINTS: WHAT IS THE MAX RANGE OF THE MASS DRIVER CANNON?
Answer:  3000

Question: RAPTOR BLUEPRINTS: WHAT IS THE ESK RATING FOR THE PILUM FF MISSILE?
Answer:  9500

Question: RAPIER BLUEPRINTS: WHAT IS THE VELOCITY OF THE DART DF MISSILE?
Answer:   900

...
 
@UnnamedCharacter Do you think you could ever add a wrapper around this so we don't have to run it in the command line and maybe add some buttons to save to PNG or extract and compile? Thanks!

Keep up the great work! :D
 
Top