Using the modifications suggested by stoffe-mkb- in this tutorial, I keep getting compiling errors at the start of the last string to be modified. Whenever I try to compile scripts using this version of k_inc_hawk, I get this problem.
It makes it impossible to leave the ship upon arrival, there is no change in skybox, and the holographic world doesn't appear...
??? :indif:
Using the modifications suggested by stoffe-mkb- in this tutorial, I keep getting compiling errors at the start of the last string to be modified. Whenever I try to compile scripts using this version of k_inc_hawk, I get this problem.
What compilation error are you getting? Hard to tell what could be wrong without knowing that. :)
Make sure all ( end with a ) and all { have a corresponding }, and that all statements end with a semicolon.
Using the modifications suggested by stoffe-mkb- in this tutorial, I keep getting compiling errors at the start of the last string to be modified. Whenever I try to compile scripts using this version of k_inc_hawk, I get this problem.
It makes it impossible to leave the ship upon arrival, there is no change in skybox, and the holographic world doesn't appear...
??? :indif:
I don't know whether a working version's source will help you. But I'll post it here, just in case.
k_inc_hawk from M4-78RP (I had it to hand):
// k_inc_hawk
/*
Pavlos:
The custom include file for functions relating to the Ebon Hawk.
The script "k_sup_galaxymap" was very cluttered. I wasn't in the
mood to trek through the script, so one day I decided to put all
of those functions stuffed up at the top into the include file
that Obsidian had seemingly forgotten about.
*/
// Created By: Obsidian Entertainment
// Editing By: Pavlos
//VARIABLES ======================================
int VASH_ON_KORRIBAN = 0;
int VASH_WHERE_ARE_YOU = 1; //The player has found the datapad
int VASH_THERE_YOU_ARE = 2; //The player has found and decrypted the datapad
int CHOSE_T3M4 = 8; //The player has chosen T3-M4 to enter 802DRO
int CHOSE_GOTO = 3; //The player has chosen HK-47 to enter 802DRO
int CHOSE_HK47 = 5; //The player has chosen GO-TO to enter 802DRO
int TASK_COMPLETE = -1; //The droid party member has successfully completed his task
//VARIABLES ======================================
//DECLARATIONS ===================================
//A wrapper to check if the creature in question is a droid
//int HAW_GetIsDroid(object oNPC);
//Returns a value for the current world that the Ebon Hawk is on
int GetCurrentPlanet();
//The function for the Red Eclipse attack on the EH. This causes all the thugs to become neutral
void StopCombat();
//Another function specifically for the Red Eclipse attack. This destroys all the thugs.
void ClearEnemies();
//Simple function: Destroys Visas in both modes: attacker and lying on bed.
void DestroyVisas();
//Does the custom spawn in of the NPC in question (See k_oei_hench_inc)
void DoSpecialReset(object oNPC, string sModuleName);
//Does the custom spawn in for the Remote (See k_oei_hench_inc)
void DoSpecialPuppetReset(object oNPC, string sModuleName);
//A batch effect version of "DoSpecialReset()" spawns ALL NPCs that are available back to their spots
//Useful for cleaning up after cutscenes.
void ResetEbonHawk();
//Essentially clears all actions and animations. Stops T3 from "walking" around.
void TurnOffCutsceneMode(object oNPC);
//Removes all NPCs from the Ebon Hawk. DO NOT USE UNLESS YOU UNDERSTAND THE IMPLICATIONS
void ClearEbonHawk();
//Sets the background animation for the Ebon Hawk cockpit
void SetBackground();
//Sets the correct floating hologram in the centre of the Ebon Hawk
void SetHologramWorld();
//MOVED FROM K_SUP_GALAXYMAP
//Sets up the Ebon Hawk for the Nar Shaddaa introduction scene
void DoFirst301();
//Sets up the Ebon Hawk for the Korriban introduction scene
void DoFirst701();
//Tells the game to start cutscenes and plays the movies
void DoPlanetChange();
//Sets the party selection GUI up so that only droid party members may be
//selected. I do not believe this is going to be used anymore.
void HAW_SetDroidsOnly();
//Sets the Global Number "800_NPC_SELECT" to the correct value
void HAW_SetWhichDroid();
//Switches the player character to the droid in question
void HAW_SwitchToDroid();
//Switches the player character back to the player created one
void HAW_SwitchToPlayer();
//Sets up the Ebon Hawk discussion scene for the start
void HAW_DoFirst801();
//DECLARATIONS ===================================
#include "k_inc_glob_party"
#include "k_oei_hench_inc"
//FUNCTIONS ======================================
//:://////////////////////////////////////////////
//::int GetCurrentPlanet()
//:://////////////////////////////////////////////
/*
Returns a planet constant based on the background
shown in the Hawk's cockpit. I wonder why they
didn't make use of the already existing
K_CURRENT_PLANET Global Numeric.
*/
//:://////////////////////////////////////////////
//::Created By: Obsidian Entertainment
//:://////////////////////////////////////////////
int GetCurrentPlanet()
{
int nRoomAnimation = GetGlobalNumber("003EBO_BACKGROUND");
switch(nRoomAnimation)
{
case 0://106PER
{
return PLANET_EBON_HAWK;
}break;
case 1://201TEL
{
return 10; //Pavlos: Citadel Station doesn't have a constant defined in nwscript
}break;
case 2://262TEL
{
return PLANET_TELOS;
}break;
case 3://301NAR
{
return PLANET_NAR_SHADDAA;
}break;
case 4://401DXN
{
return PLANET_DXUN;
}break;
case 5://601DAN
{
return PLANET_DANTOOINE;
}break;
case 6://701KOR
{
return PLANET_KORRIBAN;
}break;
case 7://801DRO
{
return PLANET_M4_78;
}break;
case 8://space
{
return PLANET_EBON_HAWK;
}break;
case 9://901MAL
{
return PLANET_MALACHOR_V;
}break;
case 10://Hyperspace
{
return PLANET_EBON_HAWK;
}break;
default://error
{
return PLANET_EBON_HAWK;
}
}
return PLANET_EBON_HAWK;
}
//:://////////////////////////////////////////////
//::void StopCombat()
//:://////////////////////////////////////////////
/*
Specific to the Red Eclipse attack on the
Ebon Hawk. This causes all the thugs and the
Captain to surrender to the player and tells them
to stop fighting.
I may go back and add functionality for a second
attack on the Hawk if we happen to plan one in.
*/
//:://////////////////////////////////////////////
//::Created By: Obsidian Entertainment
//:://////////////////////////////////////////////
void StopCombat()
{
object oPC = GetFirstPC();
CancelCombat(oPC);
int i;
object oEnemy;
for(i = 0;i < 20;i++)
{
oEnemy = GetObjectByTag("REThug4", i);
if(GetIsObjectValid(oEnemy))
{
ChangeToStandardFaction( oEnemy,STANDARD_FACTION_NEUTRAL );
CancelCombat(oEnemy);
}
oEnemy = GetObjectByTag("REThug5", i);
if(GetIsObjectValid(oEnemy))
{
ChangeToStandardFaction( oEnemy,STANDARD_FACTION_NEUTRAL );
CancelCombat(oEnemy);
}
}
//take care of the captain
oEnemy = GetObjectByTag("RECapt");
if(GetIsObjectValid(oEnemy))
{
ChangeToStandardFaction( oEnemy,STANDARD_FACTION_NEUTRAL );
CancelCombat(oEnemy);
}
}
//:://////////////////////////////////////////////
//::void ClearEnemies()
//:://////////////////////////////////////////////
/*
Another function entirely specific to the Red
Eclipse attack on the Hawk. This causes all
the thugs and the captain to be destroyed...
I think an evil laugh is required there.
I may go back and add functionality for a second
attack on the Hawk if we happen to plan one in.
*/
//:://////////////////////////////////////////////
//::Created By: Obsidian Entertainment
//:://////////////////////////////////////////////
void ClearEnemies()
{
int i;
object oEnemy;
for(i = 0;i < 20;i++)
{
oEnemy = GetObjectByTag("REThug4", i);
if(GetIsObjectValid(oEnemy))
DestroyObject(oEnemy);
oEnemy = GetObjectByTag("REThug5", i);
if(GetIsObjectValid(oEnemy))
DestroyObject(oEnemy);
}
//take care of the captain
oEnemy = GetObjectByTag("RECapt");
if(GetIsObjectValid(oEnemy))
DestroyObject(oEnemy);
}
//:://////////////////////////////////////////////
//::void DestroyVisas()
//:://////////////////////////////////////////////
/*
This function is quite simple. Seeing as how
she has two *.utc files before joining you this
function tagets both of them and if one is valid
destroys it. This clears everything up perfectly.
VisasBed = The version of Visas lying on the
bed in the medical section of the
Ebon Hawk.
VisasCut = The hostile version of Visas whom you
walk in on while she is meditating.
*/
//:://////////////////////////////////////////////
//::Created By: Obsidian Entertainment
//:://////////////////////////////////////////////
void DestroyVisas()
{
object oVisasTemp2 = GetObjectByTag("VisasBed");
if(GetIsObjectValid(oVisasTemp2))
{
DestroyObject(oVisasTemp2, 0.0, TRUE);
}
object oVisasTemp = GetObjectByTag("VisasCut");
if (GetIsObjectValid(oVisasTemp))
{
DestroyObject(oVisasTemp, 0.0, TRUE);
}
}
//:://////////////////////////////////////////////
//::void DoSpecialReset(object oNPC, string sModuleName)
//:://////////////////////////////////////////////
/*
A nice little function which causes the object oNPC
to reset to their original place on the Ebon Hawk.
This uses the DoNPCSpawnIn() for the NPC in
question. Useful for cleaning up after cutscenes.
*/
//:://////////////////////////////////////////////
//::Created By: Obsidian Entertainment
//:://////////////////////////////////////////////
void DoSpecialReset(object oNPC, string sModuleName)
{
if(GetNPCConstant(GetTag(oNPC)) == NPC_ATTON)
{
AurPostString("Resetting Atton 1",15,19,10.0);
DoAttonSpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_BAO_DUR)
{
DoBaoDurSpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_CANDEROUS)
{
DoMandSpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_DISCIPLE)
{
DoDiscipleSpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_G0T0)
{
DoG0T0SpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_HANDMAIDEN)
{
DoHandmaidenSpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_HANHARR)
{
DoHanharrSpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_HK_47)
{
DoHK47SpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_KREIA)
{
DoKreiaSpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_MIRA)
{
DoMiraSpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_T3_M4)
{
DoT3M4SpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_VISAS)
{
DoVisasMarrSpawnIn(oNPC, sModuleName);
}
else
{
AurPostString("ERROR: Invalid PartyMember",15,15,10.0);
}
}
//:://////////////////////////////////////////////
//::DoSpecialPuppetReset(object oNPC, string sModuleName)
//:://////////////////////////////////////////////
/*
Similar to the above. Just resets the Remote
to his(?) default position in the Hawk.
*/
//:://////////////////////////////////////////////
//::Created By: Obsidian Entertainment
//:://////////////////////////////////////////////
void DoSpecialPuppetReset(object oNPC, string sModuleName)
{
if(GetPuppetConstant(GetTag(oNPC)) == PUP_SENSORBALL)
{
DoRemoteSpawnIn(oNPC, sModuleName);
}
}
//:://////////////////////////////////////////////
//::void ResetEbonHawk()
//:://////////////////////////////////////////////
/*
A nice little function which causes all avaiable
NPCs (And Remote) to reset to their original
place on the Ebon Hawk. This uses the
DoNPCSpawnIn() for the NPC in question. VERY
useful for cleaning up after cutscenes.
*/
//:://////////////////////////////////////////////
//::Created By: Obsidian Entertainment
//:://////////////////////////////////////////////
void ResetEbonHawk()
{
AurPostString("k_inc_hawk: Resetting Ebon Hawk", 15, 18, 10.0);
int i;
string sTag;
object oNPC;
for(i = 0; i < 12; i++)
{
sTag = GetNPCTag( i );
oNPC = GetObjectByTag(sTag);
if(GetIsObjectValid(oNPC))
{
object oWP = GetObjectByTag("WP_gspawn_" + sTag);
if(GetIsObjectValid(oWP))
{
AssignCommand(oNPC, ClearAllActions());
AssignCommand(oNPC, ActionJumpToLocation(GetLocation(oWP)));
DelayCommand(0.2, DoSpecialReset(oNPC, "003EBO"));
}
else
{
AurPostString("RESET EBONHAWK: invalid waypoint!", 15,15,10.0);
}
}
}
object oRemote = GetObjectByTag("remote");
if(GetIsObjectValid(oRemote))
{
object oWP = GetObjectByTag("WP_gspawn_" + sTag);
if(GetIsObjectValid(oWP))
{
AssignCommand(oNPC, ClearAllActions());
AssignCommand(oNPC, ActionJumpToLocation(GetLocation(oWP)));
DelayCommand(0.2, DoSpecialPuppetReset(oNPC, "003EBO"));
}
else
{
AurPostString("RESET EBONHAWK: invalid waypoint!", 15,15,10.0);
}
}
//AWD-OEI 10/29/2004
DestroyVisas();
}
//:://////////////////////////////////////////////
//::void TurnOffCutsceneMode(object oNPC)
//:://////////////////////////////////////////////
/*
Essentially clears all actions and stops
object oNPC from walking their waypoints.
Undoubtedly this was made when they realised
T3-M4 would continue to zoom around the Hawk
when he wasn't supposed to.
*/
//:://////////////////////////////////////////////
//::Created By: Obsidian Entertainment
//:://////////////////////////////////////////////
void TurnOffCutsceneMode(object oNPC)
{
AssignCommand(oNPC, ClearAllActions());
//waypoints on
//AssignCommand(oPartyMember, GN_SetSpawnInCondition(SW_FLAG_WAYPOINT_DEACTIVATE, FALSE));
//AssignCommand(oPartyMember, GN_WalkWayPoints());
//waypoints off
AssignCommand(oNPC, GN_SetSpawnInCondition(SW_FLAG_WAYPOINT_DEACTIVATE, TRUE));
AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_PAUSE, 1.0, -1.0));//clear animations
}
//:://////////////////////////////////////////////
//::void ClearEbonHawk()
//:://////////////////////////////////////////////
/*
Destroys all party members and the remote.
DO NOT USE UNLESS YOU UNDERSTAND THE IMPLICATIONS
*/
//:://////////////////////////////////////////////
//::Created By: Obsidian Entertainment
//:://////////////////////////////////////////////
void ClearEbonHawk()
{
AurPostString("k_inc_hawk: ClearEbonHawk", 15, 21, 10.0);
int i;
int bOnXbox = GetIsXBox();
string sTag;
object oNPC;
for(i = 0; i < 12; i++)
{
sTag = GetNPCTag( i );
oNPC = GetObjectByTag(sTag);
if(GetIsObjectValid(oNPC))
{
//SaveNPCByObject(i , oNPC);
DestroyObject(oNPC, 0.0, bOnXbox); //Pavlos: Have a fade effect while on the Xbox?! What on earth is the point in that check?!
}
}
object oRemote = GetObjectByTag("remote");
if(GetIsObjectValid(oRemote))
{
//SavePUPByObject(PUP_SENSORBALL, oRemote);
DestroyObject(oRemote, 0.0, bOnXbox);
}
}
//:://////////////////////////////////////////////
//::void SetBackground()
//:://////////////////////////////////////////////
/*
Sets the Room animation for the "003EBOq" model
to the correct value through a global number.
0 = Peragus
1 = Telos (Citadel Station)
2 = Telos (Atris' Ice Palace)
3 = Nar Shaddaa
4 = Dxun
5 = Dantooine
6 = Korriban
7 = M4-78
8 = Space
9 = Malachor
10 = Hyperspace <-- Pavlos' favourite
USES NUMERIC "003EBO_BACKGROUND"
*/
//:://////////////////////////////////////////////
//::Created By: Obsidian Entertainment
//:://////////////////////////////////////////////
void SetBackground()
{
string sRoom = "003EBOq";
int nRoomAnimation = GetGlobalNumber("003EBO_BACKGROUND");
switch(nRoomAnimation)
{
case 0://106PER
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP01;
}break;
case 1://201TEL
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP02;
}break;
case 2://262TEL
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP03;
}break;
case 3://301NAR
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP04;
}break;
case 4://401DXN
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP05;
}break;
case 5://601DAN
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP06;
}break;
case 6://701KOR
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP07;
}break;
case 7://801DRO
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP08;
}break;
case 8://space
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP09;
}break;
case 9://901MAL
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP10;
}break;
case 10://Hyperspace
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP11;
}break;
default://error
{
AurPostString("EBO ERROR: No background sepcified!",15,15,10.0);
}
}
PlayRoomAnimation(sRoom, nRoomAnimation);
}
//:://////////////////////////////////////////////
//::void SetHologramWorld()
//:://////////////////////////////////////////////
/*
Sets the correct holographic world to be
shown in the Ebon Hawk's main hold.
0 = Peragus
1 = Telos
2 = Telos
3 = Nar Shaddaa
4 = Dxun
5 = Dantooine
6 = Korriban
7 = M4-78 (THIS NEEDS TO BE MADE, GUYS!)
8 = Nothing
9 = Nothing
10 = Nothing
USES NUMERIC "003EBO_BACKGROUND"
*/
//:://////////////////////////////////////////////
//::Created By: Obsidian Entertainment
//:://////////////////////////////////////////////
void SetHologramWorld()
{
string sResRef;
int nCurrentWorld = GetGlobalNumber("003EBO_BACKGROUND");
switch(nCurrentWorld)
{
case 0://106PER
{
sResRef = "holo_per";
}break;
case 1://201TEL
{
sResRef = "holo_tel";
}break;
case 2://262TEL
{
sResRef = "holo_tel";
}break;
case 3://301NAR
{
sResRef = "holo_nar";
}break;
case 4://401DXN
{
sResRef = "holo_dxn";
}break;
case 5://601DAN
{
sResRef = "holo_dan";
}break;
case 6://701KOR
{
sResRef = "holo_kor";
}break;
case 7://801DRO
{
sResRef = "holo_dro"; //Pavlos: Added in this new line to reference the M4-78
}break;
case 8://space
{
sResRef = "";
}break;
case 9://901MAL
{
sResRef = "holo_mal";
}break;
case 10://Hyperspace
{
sResRef = "";
}break;
default://error
{
AurPostString("EBO ERROR: No background sepcified!",15,15,10.0);
}
}
object oHoloWorld = GetObjectByTag("hologram");
if(GetIsObjectValid(oHoloWorld))
DestroyObject(oHoloWorld);
if(sResRef != "")
{
object oNewHoloWorld = CreateObject(OBJECT_TYPE_PLACEABLE, sResRef, GetLocation(GetObjectByTag("WP_hologram")));
if(GetIsObjectValid(oNewHoloWorld))
{
//AssignCommand ( oNewHoloWorld, ActionPlayAnimation(ANIMATION_PLACEABLE_ANIMLOOP01, 1.0, -1.0));
DelayCommand( 1.0, AssignCommand ( oNewHoloWorld, ActionPlayAnimation(ANIMATION_PLACEABLE_ANIMLOOP01) ) );
}
}
}
//:://////////////////////////////////////////////
//::void DoFirst301()
//:://////////////////////////////////////////////
/*
Sets up the Ebon Hawk for the Nar Shaddaa intro.
The dialogue is triggered via tr_301_first.
For some reason both Obsidian and BioWare used
triggers to set up this sort of thing... weird
*/
//:://////////////////////////////////////////////
//::Created By: Obsidian Entertainment
//:://////////////////////////////////////////////
void DoFirst301()
{
NoClicksFor(1.0);
SetGlobalFadeOut();
object oPlayer = GetFirstPC();
object oAtton = GetObjectByTag("atton");
object oMand = GetObjectByTag("mand");
object oKreia = GetObjectByTag("kreia");
object oT3M4 = GetObjectByTag("t3m4");
object oDisc = GetObjectByTag("disciple");
object oMaid = GetObjectByTag("handmaiden");
TurnOffCutsceneMode(oAtton);
TurnOffCutsceneMode(oMand);
TurnOffCutsceneMode(oKreia);
TurnOffCutsceneMode(oT3M4);
TurnOffCutsceneMode(oDisc);
TurnOffCutsceneMode(oMaid);
AssignCommand(oMand, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_mand"))));
AssignCommand(oKreia, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_kreia"))));
AssignCommand(oT3M4, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_t3m4"))));
AssignCommand(oDisc, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_disc"))));
AssignCommand(oMaid, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_maid"))));
SignalEvent(GetArea(oPlayer), EventUserDefined(1));
AssignCommand(oPlayer, ClearAllActions());
AssignCommand(oPlayer, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_player"))));
}
//:://////////////////////////////////////////////
//::void DoFirst701()
//:://////////////////////////////////////////////
/*
Sets up the Ebon Hawk for the Korriban intro.
The dialogue is triggered via tr_301_first.
For some reason both Obsidian and BioWare used
triggers to set up this sort of thing... weird
*/
//:://////////////////////////////////////////////
//::Created By: Obsidian Entertainment
//:://////////////////////////////////////////////
void DoFirst701()
{
NoClicksFor(1.0);
SetGlobalFadeOut();
object oPlayer = GetFirstPC();
object oAtton = GetObjectByTag("mand"); //Pavlos: I don't understand the dev's scripts sometimes... *Frowns*
object oVisas = GetObjectByTag("visasmarr");
object oKreia = GetObjectByTag("kreia");
TurnOffCutsceneMode(oAtton);
TurnOffCutsceneMode(oKreia);
TurnOffCutsceneMode(oVisas);
AssignCommand(oVisas, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_mand"))));
AssignCommand(oKreia, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_kreia"))));
SignalEvent(GetArea(oPlayer), EventUserDefined(1));
AssignCommand(oPlayer, ClearAllActions());
AssignCommand(oPlayer, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_player"))));
}
//:://////////////////////////////////////////////
//::void DoPlanetChange()
//:://////////////////////////////////////////////
/*
Plays the movie queue for the planet you are
travelling to. This is not defined here, however.
It also tells the game whether or not to
launch introduction cutscenes.
*/
//:://////////////////////////////////////////////
//::Created By: Obsidian Entertainment
//:://////////////////////////////////////////////
void DoPlanetChange()
{
if(GetGlobalNumber("401DXN_STARTED") == 1)
{
SetGlobalNumber("401DXN_STARTED", 2);
PlayMovieQueue();
StartNewModule("003EBO", "WP_PC_WALK_MAP");
}
if (GetGlobalNumber("801DRO_STARTED") == 1)//Pavlos: The background isn't set to anything but hyperspace.
{ //We have to use another global for this!
PlayMovieQueue(); //Pavlos: With the changes made to the movie queue script we can safely add this in.
SetGlobalNumber("801DRO_STARTED", 2);
StartNewModule("003EBO", "WP_PC_WALK_MAP");//Pavlos: The scruffiest way you can imagine doing it but it stops compatability issues.
} //Also prevents icky trigger geometry : /
else if(GetModuleName() == "001EBO")
{
// if we are in tutorial, the galaxy map has different functionality
SetGlobalNumber ( "001EBO_Movie_End", 1);
PlayMovie("permov02");//play tutorial
AssignCommand( GetObjectByTag("Galaxymap"),ActionStartConversation(GetFirstPC(),"outro") );
}
else if( (GetGlobalNumber("003EBO_BACKGROUND") == 3) && !GetGlobalBoolean("301_FIRST_ENTER") && (GetGlobalNumber("301_INTRO_SCENE") == 0) )
{// first time to nar shadda
SetGlobalNumber("003EBO_RETURN_DEST",3);
SetGlobalNumber("301_INTRO_SCENE", 1);
DoFirst301();
}
else if( (GetGlobalNumber("003EBO_BACKGROUND") == 6) && !GetGlobalBoolean("701_FIRST_ENTER") && (GetGlobalNumber("701_INTRO_SCENE") == 0) )
{//first time to koriban
SetGlobalNumber("003EBO_RETURN_DEST",6);
SetGlobalBoolean("701_FIRST_SCENE", TRUE);
SetGlobalNumber("701_INTRO_SCENE", 1);
DoFirst701();
//old module load way below:
//PlayMovieQueue();
//StartNewModule("003EBO", "WP_from_outside");
}
//AWD-OEI 10-23-2004
else if((GetGlobalNumber("003EBO_BACKGROUND") == 1) && (!GetGlobalBoolean("201_FIRST_ENTER")))//201 first time
{//first time to Telos, go ahead and jump to 201
PlayMovieQueue();
StartNewModule("201TEL", "WP_from_ebonhawk");
}
// 262TEL cutscene triggers (JAB-OEI 10/22/04)
else if( (GetGlobalNumber("000_Jedi_Found") >= 1) && (GetGlobalNumber("000_Jedi_Found") < 4) && (GetGlobalNumber("000_Atriscs1") == 0) && (GetGlobalBoolean("000_PLAYER_GENDER")))
{//only if player is male
PlayMovieQueue();
SetGlobalNumber("000_Atriscs1",2);
StartNewModule("262TEL");
}
else if( (GetGlobalNumber("000_Jedi_Found") >= 2) && (GetGlobalNumber("000_Jedi_Found") < 4) && (GetGlobalNumber("000_Siscut1") == 0) && (GetGlobalBoolean("000_PLAYER_GENDER")))
{//only if player is male
PlayMovieQueue();
SetGlobalNumber("000_Siscut1",2);
StartNewModule("262TEL");
}
else
{
SignalEvent(GetArea(GetFirstPC()), EventUserDefined(1));
PlayMovieQueue();
}
}
//:://////////////////////////////////////////////
//::HAW_SetDroidsOnly()
//:://////////////////////////////////////////////
/*
FUNCTION WILL NOT BE USED
The original plan for the introduction was to
select your droid from the party selection screen.
This quickly fell through when I remembered that
there is no way of telling the party selection
GUI to only allow you to select one party member.
*/
//:://////////////////////////////////////////////
//::Created By: Pavlos
//:://////////////////////////////////////////////
void HAW_SetDroidsOnly() {
int i;
for(i = NPC_ATTON; i <= NPC_DISCIPLE; i++) {
if(GetNPCSelectability(i) != -1) {
object oNPC = GetPartyMemberByIndex(i);
if (!HAW_GetIsDroid(oNPC)) {
SetNPCSelectability(i, 0);
}
}
}
}
//:://////////////////////////////////////////////
//::HAW_SetWhichDroid
//:://////////////////////////////////////////////
/*
Sets the Numeric "800_NPC_SELECT" to
the index of the droid selected. This is so
that we can use the global to set the player
character
*/
//:://////////////////////////////////////////////
//::Created By: Pavlos
//:://////////////////////////////////////////////
void HAW_SetWhichDroid() {
int nParam = GetScriptParameter(1);
switch (nParam) {
case 1: SetGlobalNumber("800_NPC_SELECT", CHOSE_T3M4); break;
case 2: SetGlobalNumber("800_NPC_SELECT", CHOSE_GOTO); break;
case 3: SetGlobalNumber("800_NPC_SELECT", CHOSE_HK47); break;
case 4: SetGlobalNumber("800_NPC_SELECT", TASK_COMPLETE); break;
}
}
//:://////////////////////////////////////////////
//::void HAW_SwitchToDroid
//:://////////////////////////////////////////////
/*
Switches the player character to the droid
you set in HAW_SetWhichDroid using the global
"800_NPC_SELECT"
*/
//:://////////////////////////////////////////////
//::Created By: Pavlos
//:://////////////////////////////////////////////
void HAW_SwitchToDroid() {
SwitchPlayerCharacter(GetGlobalNumber("800_NPC_SELECT"));
}
//:://////////////////////////////////////////////
//::HAW_SwitchToPlayer
//:://////////////////////////////////////////////
/*
Switches the player character to index "-1"
this means it goes back to the player created
character.
*/
//:://////////////////////////////////////////////
//::Created By: Pavlos
//:://////////////////////////////////////////////
void HAW_SwitchToPlayer() {
SwitchPlayerCharacter(TASK_COMPLETE);
}
//:://////////////////////////////////////////////
//::void HAW_DoFirst801()
//:://////////////////////////////////////////////
/*
Sets up the Ebon Hawk for the M4-78 intro.
To avoid icky trigger geometry and possible
compatability problems with other mods I did
things the old fashioned way and edited some
scripts rather than edit the 003ebo.git file.
*/
//:://////////////////////////////////////////////
//::Created By: Pavlos
//:://////////////////////////////////////////////
void HAW_DoFirst801() {
NoClicksFor(1.0);
SetGlobalNumber("801DRO_STARTED" , 3);
SetGlobalFadeOut();
object oPlayer = GetFirstPC();
object oAtton = GetObjectByTag("Atton");
object oKreia = GetObjectByTag("Kreia");
TurnOffCutsceneMode(oAtton);
TurnOffCutsceneMode(oKreia);
AssignCommand(oKreia, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_kreia_cut_6"))));
AssignCommand(oAtton, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_PC_WALK_MAP", 0))));
SignalEvent(GetArea(oPlayer), EventUserDefined(1));
AssignCommand(oPlayer, ClearAllActions());
AssignCommand(oPlayer, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_atton_cut_4"))));
DelayCommand(0.2, AssignCommand(oAtton, ActionStartConversation(oPlayer, "ebo_partychat", 0, 0, 1, "", "", "", "", "", "", 0, (-1), (-1), 1)));
}
//FUNCTIONS ======================================
And k_sup_galaxymap:
// k_sup_galaxymap.nss
/*
Universal Script that fires when
the galaxy map is used.
*/
// Created By: Obsidian Entertainment
// Edited By: Pavlos
#include "k_inc_hawk"
void main()
{
int nSelected = GetSelectedPlanet();
int nPrevPlanet = GetCurrentPlanet();
if(nSelected == -1)
return;
// queue up leaving movie
switch(GetGlobalNumber("003EBO_BACKGROUND"))
{
case 0://106PER
{
// I don't think we have a movie to play here
}break;
case 1://201TEL
{
QueueMovie("TelMov02");
QueueMovie("HypMov01");
}break;
case 2://262TEL
{
QueueMovie("TelMov14");
QueueMovie("HypMov01");
}break;
case 3://301NAR
{
QueueMovie("NarMov02");
QueueMovie("HypMov01");
}break;
case 4://401DXN
{
QueueMovie("OndMov04");
QueueMovie("HypMov01");
}break;
case 5://601DAN
{
QueueMovie("DanMov02");
QueueMovie("HypMov01");
}break;
case 6://701KOR
{
QueueMovie("KorMov02");
QueueMovie("HypMov01");
}break;
case 7://801DRO
{
//Pavlos: Changed reference here to "DroMov01" - we have no
//idea what the other films where to be so we introduced our own naming scheme
QueueMovie("DroMov01");
QueueMovie("HypMov01");
}break;
case 8://space
{
QueueMovie("HypMov01");
}break;
case 9://901MAL
{
}break;
case 10://Hyperspace
{
}break;
}
int nPlanet = nSelected;
/*
Do other stuff like play movies, do stuff to Ebon Hawk
we need two movies - the planet that we are leaving, and then the dest planet
after we get those two string, we can then play the two movies in sequence
we are setting two variables on the ebon hawk. One is for the background, and the
other is for the exit module.
*/
switch(nPlanet)
{
case PLANET_PERAGUS:
{
AurPostString("ERROR: We should not be able to travel back to peragus.",0,10,5.0);
}break;
case 10://citadel station
{
SetGlobalNumber("003EBO_RETURN_DEST",1);
SetGlobalNumber("003EBO_BACKGROUND",1);
// need to check where we are landing
QueueMovie("TelMov01");
}break;
case PLANET_TELOS://polar region
{
SetGlobalNumber("003EBO_RETURN_DEST",2);
SetGlobalNumber("003EBO_BACKGROUND",2);
// need to check where we are landing
QueueMovie("TelMov15");
}break;
case PLANET_NAR_SHADDAA:
{
SetGlobalNumber("003EBO_RETURN_DEST",3);
SetGlobalNumber("003EBO_BACKGROUND",3);
if(GetGlobalBoolean("301_FIRST_ENTER"))//only que this movie if we have been here before
QueueMovie("NarMov01");
}break;
case PLANET_DXUN:
{
SetGlobalNumber("003EBO_RETURN_DEST",4);
SetGlobalNumber("003EBO_BACKGROUND",4);
QueueMovie("OndMov03");
}break;
case PLANET_ONDERON:
{
SetGlobalNumber("003EBO_RETURN_DEST",4);
SetGlobalNumber("003EBO_BACKGROUND",4);
//first time going to onderon?
if( (GetGlobalNumber("401DXN_Visited") == 0) && (GetGlobalNumber("401DXN_STARTED") == 0) )
{
SetGlobalNumber("401DXN_STARTED", 1);
SetGlobalNumber("003EBO_RETURN_DEST",8);
SetGlobalNumber("003EBO_BACKGROUND",8);//set space background
QueueMovie("OndScn01");
}
else
AurPostString("ERROR!!! GALAXY MAP!",5,15,10.0);
}break;
case PLANET_DANTOOINE:
{
SetGlobalNumber("003EBO_RETURN_DEST",5);
SetGlobalNumber("003EBO_BACKGROUND",5);
QueueMovie("DanMov01");
}break;
case PLANET_KORRIBAN:
{
SetGlobalNumber("003EBO_RETURN_DEST",6);
SetGlobalNumber("003EBO_BACKGROUND",6);
QueueMovie("KorMov01");
}break;
case PLANET_M4_78:
{
SetGlobalNumber("003EBO_RETURN_DEST", 7);
SetGlobalNumber("003EBO_BACKGROUND", 7);
if ((GetGlobalNumber("801DRO_STARTED") == 0))
{
SetGlobalNumber("801DRO_STARTED", 1);
SetGlobalNumber("003EBO_BACKGROUND", 10); //Pavlos: We're travelling through hyperspace! Wooo!
QueueMovie("DroScn01", 1); //Pavlos:
}
else
{
QueueMovie("DroMov02", 1);
}
}break;
case PLANET_MALACHOR_V:
{
SetGlobalNumber("003EBO_RETURN_DEST",9);
SetGlobalNumber("003EBO_BACKGROUND",9);
QueueMovie("MalMov07");
}break;
}
//fade out
SetBackground();
ExecuteScript("a_holoworld", GetFirstPC());
DoPlanetChange();
}
@stoffe: I don't remember the exact problem, but I think it occurs at SetHologramWorld() . Will check back later with more info. I did check quite thoroughly for brackets and {} being all paired :)
@Pavlos: Thanks for showing me the script :) Your edits are good...You may have given me an idea...I'll check whether it works ASAP [- didn't work :( ]
The error is on line 370, and it reads 'Syntax error at "(" '. Line 370 is
int GetCurrentPlanet()
although I tried an unedited version and got the same result...
The error is on line 370, and it reads 'Syntax error at "(" '. Line 370 is
int GetCurrentPlanet()
although I tried an unedited version and got the same result...
Have you checked the line above that line? Often the error is on the line above the one being reported.
However if you can't compile even with an unaltered k_inc_hawk straight from the game data the problem lies either in your script using the include file, or you are trying to compile it with nwscript.nss from the wrong game. That include file compiles without any problems on my end at least.
Okay...I tried re-doing this with a new nwscript, and got the same error. I get no errors for the individual scripts though, just for k_inc_hawk.nss ...
Here is the version I'm using:
//:: k_inc_hawk.nss
/*
Desc
*/
//:: Created By:
//:: Copyright (c) 2002 Bioware Corp.
#include "k_inc_glob_party"
#include "k_oei_hench_inc"
void StopCombat()
{
object oPC = GetFirstPC();
CancelCombat(oPC);
int i;
object oEnemy;
for(i = 0;i < 20;i++)
{
oEnemy = GetObjectByTag("REThug4", i);
if(GetIsObjectValid(oEnemy))
{
ChangeToStandardFaction( oEnemy,STANDARD_FACTION_NEUTRAL );
CancelCombat(oEnemy);
}
oEnemy = GetObjectByTag("REThug5", i);
if(GetIsObjectValid(oEnemy))
{
ChangeToStandardFaction( oEnemy,STANDARD_FACTION_NEUTRAL );
CancelCombat(oEnemy);
}
}
//take care of the captain
oEnemy = GetObjectByTag("RECapt");
if(GetIsObjectValid(oEnemy))
{
ChangeToStandardFaction( oEnemy,STANDARD_FACTION_NEUTRAL );
CancelCombat(oEnemy);
}
}
void ClearEnemies()
{
int i;
object oEnemy;
for(i = 0;i < 20;i++)
{
oEnemy = GetObjectByTag("REThug4", i);
if(GetIsObjectValid(oEnemy))
DestroyObject(oEnemy);
oEnemy = GetObjectByTag("REThug5", i);
if(GetIsObjectValid(oEnemy))
DestroyObject(oEnemy);
}
//take care of the captain
oEnemy = GetObjectByTag("RECapt");
if(GetIsObjectValid(oEnemy))
DestroyObject(oEnemy);
}
void DestroyVisas()
{
object oVisasTemp2 = GetObjectByTag("VisasBed");
if(GetIsObjectValid(oVisasTemp2))
{
DestroyObject(oVisasTemp2, 0.0, TRUE);
}
object oVisasTemp = GetObjectByTag("VisasCut");
if (GetIsObjectValid(oVisasTemp))
{
DestroyObject(oVisasTemp, 0.0, TRUE);
}
}
void DoSpecialReset(object oNPC, string sModuleName)
{
if(GetNPCConstant(GetTag(oNPC)) == NPC_ATTON)
{
AurPostString("Resetting Atton 1",15,19,10.0);
DoAttonSpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_BAO_DUR)
{
DoBaoDurSpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_CANDEROUS)
{
DoMandSpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_DISCIPLE)
{
DoDiscipleSpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_G0T0)
{
DoG0T0SpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_HANDMAIDEN)
{
DoHandmaidenSpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_HANHARR)
{
DoHanharrSpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_HK_47)
{
DoHK47SpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_KREIA)
{
DoKreiaSpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_MIRA)
{
DoMiraSpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_T3_M4)
{
DoT3M4SpawnIn(oNPC, sModuleName);
}
else if(GetNPCConstant(GetTag(oNPC)) == NPC_VISAS)
{
DoVisasMarrSpawnIn(oNPC, sModuleName);
}
else
{
AurPostString("ERROR: Invalid PartyMember",15,15,10.0);
}
}
void DoSpecialPuppetReset(object oNPC, string sModuleName)
{
if(GetPuppetConstant(GetTag(oNPC)) == PUP_SENSORBALL)
{
DoRemoteSpawnIn(oNPC, sModuleName);
}
}
void ResetEbonHawk()
{
AurPostString("k_inc_hawk: Resetting Ebon Hawk", 15, 18, 10.0);
int i;
string sTag;
object oNPC;
for(i = 0; i < 12; i++)
{
sTag = GetNPCTag( i );
oNPC = GetObjectByTag(sTag);
if(GetIsObjectValid(oNPC))
{
object oWP = GetObjectByTag("WP_gspawn_" + sTag);
if(GetIsObjectValid(oWP))
{
AssignCommand(oNPC, ClearAllActions());
AssignCommand(oNPC, ActionJumpToLocation(GetLocation(oWP)));
DelayCommand(0.2, DoSpecialReset(oNPC, "003EBO"));
}
else
{
AurPostString("RESET EBONHAWK: invalid waypoint!", 15,15,10.0);
}
}
}
object oRemote = GetObjectByTag("remote");
if(GetIsObjectValid(oRemote))
{
object oWP = GetObjectByTag("WP_gspawn_" + sTag);
if(GetIsObjectValid(oWP))
{
AssignCommand(oNPC, ClearAllActions());
AssignCommand(oNPC, ActionJumpToLocation(GetLocation(oWP)));
DelayCommand(0.2, DoSpecialPuppetReset(oNPC, "003EBO"));
}
else
{
AurPostString("RESET EBONHAWK: invalid waypoint!", 15,15,10.0);
}
}
//AWD-OEI 10/29/2004
DestroyVisas();
}
void TurnOffCutsceneMode(object oNPC)
{
AssignCommand(oNPC, ClearAllActions());
//waypoints on
//AssignCommand(oPartyMember, GN_SetSpawnInCondition(SW_FLAG_WAYPOINT_DEACTIVATE, FALSE));
//AssignCommand(oPartyMember, GN_WalkWayPoints());
//waypoints off
AssignCommand(oNPC, GN_SetSpawnInCondition(SW_FLAG_WAYPOINT_DEACTIVATE, TRUE));
AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_PAUSE, 1.0, -1.0));//clear animations
}
void ClearEbonHawk()
{
AurPostString("k_inc_hawk: ClearEbonHawk", 15, 21, 10.0);
int i;
int bOnXbox = GetIsXBox();
string sTag;
object oNPC;
for(i = 0; i < 12; i++)
{
sTag = GetNPCTag( i );
oNPC = GetObjectByTag(sTag);
if(GetIsObjectValid(oNPC))
{
//SaveNPCByObject(i , oNPC);
DestroyObject(oNPC, 0.0, bOnXbox);
}
}
object oRemote = GetObjectByTag("remote");
if(GetIsObjectValid(oRemote))
{
//SavePUPByObject(PUP_SENSORBALL, oRemote);
DestroyObject(oRemote, 0.0, bOnXbox);
}
}
void SetBackground()
{
//string sRoom = GetScriptStringParameter();
string sRoom = "003EBOq";
int nRoomAnimation = GetGlobalNumber("003EBO_BACKGROUND");
switch(nRoomAnimation)
{
case 0://106PER
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP01;
}break;
case 1://201TEL
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP02;
}break;
case 2://262TEL
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP03;
}break;
case 3://301NAR
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP04;
}break;
case 4://401DXN
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP05;
}break;
case 5://601DAN
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP06;
}break;
case 6://701KOR
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP07;
}break;
case 7://801DRO
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP08;
}break;
case 8://space
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP09;
}break;
case 9://901MAL
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP10;
}break;
case 10://Hyperspace
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP11;
}break;
case 11://RhenVar
{
nRoomAnimation = ANIMATION_ROOM_SCRIPTLOOP03;
}break;
default://error
{
AurPostString("EBO ERROR: No background sepcified!",15,15,10.0);
}
}
PlayRoomAnimation(sRoom, nRoomAnimation);
}
void SetHologramWorld()
{
string sResRef;
int nCurrentWorld = GetGlobalNumber("003EBO_BACKGROUND");
switch(nCurrentWorld)
{
case 0://106PER
{
sResRef = "holo_per";
}break;
case 1://201TEL
{
sResRef = "holo_tel";
}break;
case 2://262TEL
{
sResRef = "holo_tel";
}break;
case 3://301NAR
{
sResRef = "holo_nar";
}break;
case 4://401DXN
{
sResRef = "holo_dxn";
}break;
case 5://601DAN
{
sResRef = "holo_dan";
}break;
case 6://701KOR
{
sResRef = "holo_kor";
}break;
case 7://801DRO
{
sResRef = "";
}break;
case 8://space
{
sResRef = "";
}break;
case 9://901MAL
{
sResRef = "holo_mal";
}break;
case 10://Hyperspace
{
sResRef = "";
}break;
case 11://RhenVar
{
sResRef = "holo_mal";
}break;
default://error
{
AurPostString("EBO ERROR: No background sepcified!",15,15,10.0);
}
}
object oHoloWorld = GetObjectByTag("hologram");
if(GetIsObjectValid(oHoloWorld))
DestroyObject(oHoloWorld);
if(sResRef != "")
{
object oNewHoloWorld = CreateObject(OBJECT_TYPE_PLACEABLE, sResRef, GetLocation(GetObjectByTag("WP_hologram")));
if(GetIsObjectValid(oNewHoloWorld))
{
//AssignCommand ( oNewHoloWorld, ActionPlayAnimation(ANIMATION_PLACEABLE_ANIMLOOP01, 1.0, -1.0));
DelayCommand( 1.0, AssignCommand ( oNewHoloWorld, ActionPlayAnimation(ANIMATION_PLACEABLE_ANIMLOOP01) ) );
}
}
}
// GetCurrentPlanet
// returns a planet constant based on background
// will return -1 if not on a planet
void GetCurrentPlanet()
{
int nRoomAnimation = GetGlobalNumber("003EBO_BACKGROUND");
switch(nRoomAnimation)
{
case 0://106PER
{
//return PLANET_PERAGUS;
return PLANET_EBON_HAWK;
}break;
case 1://201TEL
{
return 10; // citadel station
}break;
case 2://262TEL
{
return PLANET_TELOS;
}break;
case 3://301NAR
{
return PLANET_NAR_SHADDAA;
}break;
case 4://401DXN
{
return PLANET_DXUN;
}break;
case 5://601DAN
{
return PLANET_DANTOOINE;
}break;
case 6://701KOR
{
return PLANET_KORRIBAN;
}break;
case 7://801DRO
{
return PLANET_M4_78;
}break;
case 8://space
{
return PLANET_EBON_HAWK;
}break;
case 9://901MAL
{
return PLANET_MALACHOR_V;
}break;
case 10://Hyperspace
{
return PLANET_EBON_HAWK;
}break;
case 12://RhenVar
{
return PLANET_LIVE_02;
}break;
default://error
{
return PLANET_EBON_HAWK;
}
}
return PLANET_EBON_HAWK;
}
Okay...I tried re-doing this with a new nwscript, and got the same error. I get no errors for the individual scripts though, just for k_inc_hawk.nss ...
Here is the version I'm using:
Change...
void GetCurrentPlanet()
...to...
int GetCurrentPlanet()
...and it will probably work better to compile. :)
Well...I tried it, but no luck. I get the same error again :(
I searched the other scripts, too, but they all use GetCurrentPlanet like this:
int nPrevPlanet = GetCurrentPlanet();
Edit: Oops, the Edit and Reply links are too close together. Sorry about that. ~M
Well...I tried it, but no luck. I get the same error again :(
I searched the other scripts, too, but they all use GetCurrentPlanet like this:
int nPrevPlanet = GetCurrentPlanet();
Well, I used the very include file you posted above, and after changing the return type a script using it compiled without any problems. Thus your problem either likely lies within the script from which you use the include file (post it and I'll have a look) or your compiler is improperly configured somehow.
It's four scripts, in fact:
a_galaxymap.nss:
// ST: a_galaxymap.nss (003EBO_s.rim)
#include "k_inc_hawk"
void main() {
if (GetGlobalNumber("003EBO_Atton_Talk") <= 4) {
object oPC = GetFirstPC();
AssignCommand(oPC, ClearAllActions());
AssignCommand(OBJECT_SELF, ActionStartConversation(oPC, "galaxy", FALSE, CONVERSATION_TYPE_CINEMATIC, TRUE));
return;
}
else if (GetGlobalNumber("003EBO_RETURN_DEST") == 4) {
if (GetGlobalNumber("502OND_End_First") == 0) {
object oPC = GetFirstPC();
AssignCommand(oPC, ClearAllActions());
AssignCommand(OBJECT_SELF, ActionStartConversation(oPC, "galaxy2", FALSE, CONVERSATION_TYPE_CINEMATIC, TRUE));
return;
}
}
else if (GetGlobalNumber("003_IN_COMBAT") == 1) {
object oPC = GetFirstPC();
AssignCommand(oPC, ClearAllActions());
AssignCommand(OBJECT_SELF, ActionStartConversation(oPC, "galaxy", FALSE, CONVERSATION_TYPE_CINEMATIC, TRUE));
return;
}
int nWorld = 0;
for (nWorld = PLANET_DANTOOINE; nWorld < PLANET_LIVE_01; ++nWorld) {
SetPlanetAvailable(nWorld, FALSE);
SetPlanetSelectable(nWorld, FALSE);
}
if (GetGlobalNumber("900MAL_Open") == 1) {
for (nWorld = PLANET_DANTOOINE; nWorld < PLANET_LIVE_01; nWorld++) {
int nPlanet = nWorld;
SetPlanetAvailable(nPlanet, TRUE);
if (nWorld == PLANET_MALACHOR_V)
SetPlanetSelectable(nPlanet, TRUE);
}
}
else if (GetGlobalNumber("262TEL_Escape_Telos") == 1) {
for (nWorld = PLANET_DANTOOINE; nWorld < PLANET_LIVE_01; nWorld++) {
int nPlanet = nWorld;
if (nWorld != PLANET_MALACHOR_V) {
SetPlanetAvailable(nPlanet, TRUE);
if (nWorld != PLANET_PERAGUS)
SetPlanetSelectable(nPlanet, TRUE);
}
}
if (GetGlobalNumber("401DXN_Visited") == 0) {
SetPlanetAvailable(PLANET_DXUN, FALSE);
SetPlanetSelectable(PLANET_DXUN, FALSE);
}
else {
SetPlanetSelectable(PLANET_ONDERON, FALSE);
}
}
else {
SetPlanetAvailable(PLANET_HARBINGER, TRUE);
SetPlanetSelectable(PLANET_HARBINGER, TRUE);
SetPlanetAvailable(PLANET_PERAGUS, TRUE);
SetPlanetSelectable(PLANET_PERAGUS, FALSE);
}
{
SetPlanetAvailable(PLANET_TELOS, FALSE);
SetPlanetSelectable(PLANET_TELOS, FALSE);
SetPlanetAvailable(PLANET_M4_78, FALSE);
SetPlanetSelectable(PLANET_M4_78, FALSE);
SetPlanetAvailable(PLANET_EBON_HAWK, FALSE);
SetPlanetSelectable(PLANET_EBON_HAWK, FALSE);
}
int nPlanet = GetCurrentPlanet();
// ST: In Space or Hyperspace
if ((GetGlobalNumber("003EBO_BACKGROUND") == 8) || (GetGlobalNumber("003EBO_BACKGROUND") == 10))
{
nPlanet = PLANET_EBON_HAWK;
SetPlanetAvailable(PLANET_EBON_HAWK, TRUE);
}
SetPlanetAvailable(PLANET_LIVE_02, TRUE);
SetPlanetSelectable(PLANET_LIVE_02, TRUE);
SetPlanetSelectable(nPlanet, FALSE);
ShowGalaxyMap(nPlanet);
}
check_party_gui.nss:
// ST: check_party_gui.nss (003EBO_s.rim)
#include "k_inc_hawk"
void ExitEbonHawk() {
int nDest = GetGlobalNumber("003EBO_RETURN_DEST");
string sDest;
switch (nDest) {
case 0: sDest = "106PER"; break;
case 1: sDest = "201TEL"; break;
case 2: sDest = "262TEL"; break;
case 3: sDest = "301NAR"; break;
case 4: sDest = "401DXN"; break;
case 5: sDest = "601DAN"; break;
case 6: sDest = "701KOR"; break;
case 7: sDest = "801DRO"; break;
case 8: sDest = "IN_TRANSIT"; break;
case 9: sDest = "901MAL"; break;
case 10: sDest = "IN_TRANSIT"; break;
case 11: sDest = "921RVR"; break;
default: sDest = "ERROR";
}
if (sDest == "ERROR")
AurPostString("EBO ERROR: No module sepcified!", 5, 15, 10.0);
else if (sDest == "IN_TRANSIT")
AurPostString("Flying through space, wooooooooo!", 5, 15, 10.0);
else
StartNewModule(sDest, "WP_from_ebonhawk");
}
void main() {
SetGlobalFadeIn();
int nParam = GetRunScriptVar();
if (!nParam) {
object oPC = GetFirstPC();
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_from_outside"))));
}
else {
SetGlobalBoolean("003_PARTY_SPAWN", FALSE);
ExitEbonHawk();
}
}
k_sup_galaxymap.nss:
//:: k_sup_galaxymap
/*
Universal Script that fires when
the galaxy map is used.
*/
#include "k_inc_hawk"
//turns off all of the core worlds and live planets.
void CUSTOM_TurnOffPlanets();
int CUSTOM_PlanetIDTo2DA(int nPlanetID);
int CUSTOM_2DAToPlanetID(int nPlanet2DA);
void DoFirst301()
{
NoClicksFor(1.0);
SetGlobalFadeOut();
object oPlayer = GetFirstPC();
object oAtton = GetObjectByTag("atton");
object oMand = GetObjectByTag("mand");
object oKreia = GetObjectByTag("kreia");
object oT3M4 = GetObjectByTag("t3m4");
object oDisc = GetObjectByTag("disciple");
object oMaid = GetObjectByTag("handmaiden");
TurnOffCutsceneMode(oAtton);
TurnOffCutsceneMode(oMand);
TurnOffCutsceneMode(oKreia);
TurnOffCutsceneMode(oT3M4);
TurnOffCutsceneMode(oDisc);
TurnOffCutsceneMode(oMaid);
//AssignCommand(oAtton, ClearAllActions());
//AssignCommand(oMand, ClearAllActions());
//AssignCommand(oKreia, ClearAllActions());
//AssignCommand(oT3M4, ClearAllActions());
//AssignCommand(oDisc, ClearAllActions());
//AssignCommand(oMaid, ClearAllActions());
//AssignCommand(oAtton, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_atton"))));
AssignCommand(oMand, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_mand"))));
AssignCommand(oKreia, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_kreia"))));
AssignCommand(oT3M4, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_t3m4"))));
AssignCommand(oDisc, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_disc"))));
AssignCommand(oMaid, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_maid"))));
SignalEvent(GetArea(oPlayer), EventUserDefined(1));
AssignCommand(oPlayer, ClearAllActions());
AssignCommand(oPlayer, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_player"))));
}
void DoFirst701()
{
NoClicksFor(1.0);
SetGlobalFadeOut();
object oPlayer = GetFirstPC();
object oAtton = GetObjectByTag("mand");
object oVisas = GetObjectByTag("visasmarr");
object oKreia = GetObjectByTag("kreia");
TurnOffCutsceneMode(oAtton);
TurnOffCutsceneMode(oKreia);
TurnOffCutsceneMode(oVisas);
//AssignCommand(oAtton, ClearAllActions());
//AssignCommand(oKreia, ClearAllActions());
//AssignCommand(oVisas, ClearAllActions());
//AssignCommand(oAtton, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_atton"))));
AssignCommand(oVisas, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_mand"))));
AssignCommand(oKreia, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_kreia"))));
SignalEvent(GetArea(oPlayer), EventUserDefined(1));
AssignCommand(oPlayer, ClearAllActions());
AssignCommand(oPlayer, ActionJumpToLocation(GetLocation(GetObjectByTag("WP_301_player"))));
}
void DoPlanetChange()
{
if(GetGlobalNumber("401DXN_STARTED") == 1)
{
SetGlobalNumber("401DXN_STARTED", 2);
PlayMovieQueue();
StartNewModule("003EBO", "WP_PC_WALK_MAP");
}
else if(GetModuleName() == "001EBO")
{
// if we are in tutorial, the galaxy map has different functionality
SetGlobalNumber ( "001EBO_Movie_End", 1);
PlayMovie("permov02");//play tutorial
AssignCommand( GetObjectByTag("Galaxymap"),ActionStartConversation(GetFirstPC(),"outro") );
}
else if( (GetGlobalNumber("003EBO_BACKGROUND") == 3) && !GetGlobalBoolean("301_FIRST_ENTER") && (GetGlobalNumber("301_INTRO_SCENE") == 0) )
{// first time to nar shadda
SetGlobalNumber("003EBO_RETURN_DEST",3);
SetGlobalNumber("301_INTRO_SCENE", 1);
DoFirst301();
}
else if( (GetGlobalNumber("003EBO_BACKGROUND") == 6) && !GetGlobalBoolean("701_FIRST_ENTER") && (GetGlobalNumber("701_INTRO_SCENE") == 0) )
{//first time to koriban
SetGlobalNumber("003EBO_RETURN_DEST",6);
SetGlobalBoolean("701_FIRST_SCENE", TRUE);
SetGlobalNumber("701_INTRO_SCENE", 1);
DoFirst701();
//old module load way below:
//PlayMovieQueue();
//StartNewModule("003EBO", "WP_from_outside");
}
//AWD-OEI 10-23-2004
else if((GetGlobalNumber("003EBO_BACKGROUND") == 1) && (!GetGlobalBoolean("201_FIRST_ENTER")))//201 first time
{//first time to Telos, go ahead and jump to 201
PlayMovieQueue();
StartNewModule("201TEL", "WP_from_ebonhawk");
}
// 262TEL cutscene triggers (JAB-OEI 10/22/04)
else if( (GetGlobalNumber("000_Jedi_Found") >= 1) && (GetGlobalNumber("000_Jedi_Found") < 4) && (GetGlobalNumber("000_Atriscs1") == 0) && (GetGlobalBoolean("000_PLAYER_GENDER")))
{//only if player is male
PlayMovieQueue();
SetGlobalNumber("000_Atriscs1",2);
StartNewModule("262TEL");
}
else if( (GetGlobalNumber("000_Jedi_Found") >= 2) && (GetGlobalNumber("000_Jedi_Found") < 4) && (GetGlobalNumber("000_Siscut1") == 0) && (GetGlobalBoolean("000_PLAYER_GENDER")))
{//only if player is male
PlayMovieQueue();
SetGlobalNumber("000_Siscut1",2);
StartNewModule("262TEL");
}
else
{
SignalEvent(GetArea(GetFirstPC()), EventUserDefined(1));
PlayMovieQueue();
}
}
void main()
{
int nSelected = GetSelectedPlanet();
int nPrevPlanet = GetCurrentPlanet();
if(nSelected == -1)
return;
// queue up leaving movie
switch(GetGlobalNumber("003EBO_BACKGROUND"))
{
case 0://106PER
{
// I don't think we have a movie to play here
}break;
case 1://201TEL
{
QueueMovie("TelMov02");
QueueMovie("HypMov01");
}break;
case 2://262TEL
{
QueueMovie("TelMov14");
QueueMovie("HypMov01");
}break;
case 3://301NAR
{
QueueMovie("NarMov02");
QueueMovie("HypMov01");
}break;
case 4://401DXN
{
QueueMovie("OndMov04");
QueueMovie("HypMov01");
}break;
case 5://601DAN
{
QueueMovie("DanMov02");
QueueMovie("HypMov01");
}break;
case 6://701KOR
{
QueueMovie("KorMov02");
QueueMovie("HypMov01");
}break;
case 7://801DRO
{
QueueMovie("DroMov04");
QueueMovie("HypMov01");
}break;
case 8://space
{
QueueMovie("HypMov01");
}break;
case 9://901MAL
{
}break;
case 10://Hyperspace
{
}break;
case 12: // RhenVar
{
QueueMovie("HypMov01");
}break;
}
int nPlanet = nSelected;
// Do other stuff like play movies, do stuff to Ebon Hawk
// we need two movies - the planet that we are leaving, and then the dest planet
// after we get those two string, we can then play the two movies in sequence
// we are setting two variables on the ebon hawk. One is for the background, and the
// other is for the exit module.
switch(nPlanet)
{
case PLANET_PERAGUS:
{
AurPostString("ERROR: We should not be able to travel back to peragus.",0,10,5.0);
}break;
case 10://citadel station
{
SetGlobalNumber("003EBO_RETURN_DEST",1);
SetGlobalNumber("003EBO_BACKGROUND",1);
// need to check where we are landing
QueueMovie("TelMov01");
}break;
case PLANET_TELOS://polar region
{
SetGlobalNumber("003EBO_RETURN_DEST",2);
SetGlobalNumber("003EBO_BACKGROUND",2);
// need to check where we are landing
QueueMovie("TelMov15");
}break;
case PLANET_NAR_SHADDAA:
{
SetGlobalNumber("003EBO_RETURN_DEST",3);
SetGlobalNumber("003EBO_BACKGROUND",3);
if(GetGlobalBoolean("301_FIRST_ENTER"))//only que this movie if we have been here before
QueueMovie("NarMov01");
}break;
case PLANET_DXUN:
{
SetGlobalNumber("003EBO_RETURN_DEST",4);
SetGlobalNumber("003EBO_BACKGROUND",4);
QueueMovie("OndMov03");
}break;
case PLANET_ONDERON:
{
SetGlobalNumber("003EBO_RETURN_DEST",4);
SetGlobalNumber("003EBO_BACKGROUND",4);
//first time going to onderon?
if( (GetGlobalNumber("401DXN_Visited") == 0) && (GetGlobalNumber("401DXN_STARTED") == 0) )
{
SetGlobalNumber("401DXN_STARTED", 1);
SetGlobalNumber("003EBO_RETURN_DEST",8);
SetGlobalNumber("003EBO_BACKGROUND",8);//set space background
QueueMovie("OndScn01");
}
else
AurPostString("ERROR!!! GALAXY MAP!",5,15,10.0);
}break;
case PLANET_DANTOOINE:
{
SetGlobalNumber("003EBO_RETURN_DEST",5);
SetGlobalNumber("003EBO_BACKGROUND",5);
QueueMovie("DanMov01");
}break;
case PLANET_KORRIBAN:
{
SetGlobalNumber("003EBO_RETURN_DEST",6);
SetGlobalNumber("003EBO_BACKGROUND",6);
QueueMovie("KorMov01");
}break;
case PLANET_M4_78:
{
SetGlobalNumber("003EBO_RETURN_DEST",7);
SetGlobalNumber("003EBO_BACKGROUND",7);
QueueMovie("DroMov02");
}break;
case PLANET_MALACHOR_V:
{
SetGlobalNumber("003EBO_RETURN_DEST",9);
SetGlobalNumber("003EBO_BACKGROUND",9);
QueueMovie("MalMov07");
}break;
case PLANET_LIVE_02:
{
SetGlobalNumber("003EBO_RETURN_DEST",12);
SetGlobalNumber("003EBO_BACKGROUND",12);
}break;
}
//fade out
SetBackground();
ExecuteScript("a_holoworld", GetFirstPC());
DoPlanetChange();
}
//turns off all of the core worlds and live planets.
void CUSTOM_TurnOffPlanets()
{
SetPlanetSelectable(PLANET_TELOS, FALSE);
SetPlanetSelectable(PLANET_NAR_SHADDAA, FALSE);
SetPlanetSelectable(PLANET_DXUN, FALSE);
SetPlanetSelectable(PLANET_ONDERON, FALSE);
SetPlanetSelectable(PLANET_DANTOOINE, FALSE);
SetPlanetSelectable(PLANET_KORRIBAN, FALSE);
SetPlanetSelectable(PLANET_MALACHOR_V, FALSE);
if(GetIsLiveContentAvailable(LIVE_CONTENT_PKG1))
{
SetPlanetSelectable(PLANET_M4_78, FALSE);
}
if(GetIsLiveContentAvailable(LIVE_CONTENT_PKG2))
{
SetPlanetSelectable(PLANET_LIVE_01, FALSE);
}
if(GetIsLiveContentAvailable(LIVE_CONTENT_PKG3))
{
SetPlanetSelectable(PLANET_LIVE_02, FALSE);
}
if(GetIsLiveContentAvailable(LIVE_CONTENT_PKG4))
{
SetPlanetSelectable(PLANET_LIVE_03, FALSE);
}
if(GetIsLiveContentAvailable(LIVE_CONTENT_PKG5))
{
SetPlanetSelectable(PLANET_LIVE_04, FALSE);
}
if(GetIsLiveContentAvailable(LIVE_CONTENT_PKG6))
{
SetPlanetSelectable(PLANET_LIVE_05, FALSE);
}
}
and tr_leave_ehawk.nss:
// ST: tr_leave_ehawk.nss (003EBO_s.rim)
#include "k_inc_hawk"
void ExitToDxunOnderon();
void ExitToKorriban();
void DoEbo004ExitHawk();
void main() {
object oEnter = GetEnteringObject();
// ST: Merged tr_leave_ehawk from 003EBO and 004EBO so they both
// work if put in Override.
if (GetTag(GetArea(oEnter)) == "004EBO") {
DoEbo004ExitHawk();
return;
}
SetNPCSelectability(NPC_KREIA, TRUE);
SetNPCSelectability(NPC_ATTON, TRUE);
if (oEnter == GetFirstPC()) {
// ST: In combat
if (GetGlobalNumber("003_IN_COMBAT") == 1) {
BarkString(OBJECT_INVALID, 135165);
return;
}
// ST: In space
else if (GetGlobalNumber("003EBO_RETURN_DEST") == 8) {
BarkString(OBJECT_INVALID, 129942);
return;
}
// ST: Landed on Dxun
else if (GetGlobalNumber("003EBO_RETURN_DEST") == 4) {
SetGlobalFadeOut();
SetFadeUntilScript();
AurPostString("Leaving the hawk", 15, 22, 10.0);
DelayCommand(1.0, ExitToDxunOnderon());
}
// ST: Landed on Korriban
else if (GetGlobalNumber("003EBO_RETURN_DEST") == 6) {
SetGlobalFadeOut();
SetFadeUntilScript();
AurPostString("Leaving the hawk", 15, 22, 10.0);
DelayCommand(1.0, ExitToKorriban());
}
else {
SetGlobalFadeOut();
SetFadeUntilScript();
ShowPartySelectionGUI("check_party_gui", -1, -1, TRUE);
}
}
}
void ExitToDxunOnderon () {
if (GetGlobalBoolean("401_FIRST_ENTER") && (GetGlobalNumber("502OND_End_First") > 0)) {
AurPostString("Atton is selectable", 5, 19, 10.0);
SetNPCSelectability(NPC_ATTON, TRUE);
}
else {
SetNPCSelectability(NPC_ATTON, FALSE);
AurPostString("Atton is NOT selectable", 5, 19, 10.0);
}
AurPostString("Showing party selection", 5, 20, 10.0);
ShowPartySelectionGUI("check_party_gui");
}
void ExitToKorriban() {
SetNPCSelectability(NPC_KREIA, FALSE);
AurPostString("Kreia is NOT selectable", 5, 19, 10.0);
AurPostString("Showing party selection", 5, 20, 10.0);
ShowPartySelectionGUI("check_party_gui");
}
void DoEbo004ExitHawk() {
if (GetEnteringObject() == GetFirstPC()) {
int nDest = GetGlobalNumber("003EBO_RETURN_DEST");
string sDest;
switch (nDest) {
case 0: sDest = "106PER"; break;
case 1: sDest = "201TEL"; break;
case 2: sDest = "262TEL"; break;
case 3: sDest = "301NAR"; break;
case 4: sDest = "401DXN"; break;
case 5: sDest = "601DAN"; break;
case 6: sDest = "701KOR"; break;
case 7: sDest = "801DRO"; break;
case 8: sDest = "ERROR"; break;
case 9: sDest = "901MAL"; break;
case 10: sDest = "ERROR"; break;
case 12: sDest = "921RVR"; break;
default: sDest = "ERROR";
}
if (sDest == "ERROR")
AurPostString("EBO ERROR: No module sepcified!", 5, 15, 10.0);
else
StartNewModule(sDest, "WP_from_ebonhawk");
}
}
It's four scripts, in fact:
a_galaxymap.nss:
check_party_gui.nss:
k_sup_galaxymap.nss:
and tr_leave_ehawk.nss:
All four scripts compiled without any problems using the include file you posted earlier (with the correction to it I posted about above). Thus the problem seems to lie with your script compiler setup somehow. Have you put the include file in the correct place so the compiler finds it when you try to compile the scripts? Are you using the compiler in TSL-mode (if you use Fred Tetras version of nwnnsscomp)?
It's in TSL mode, k_inc_hawk is in the same folder as the source files...I'm confused. I've even tried different versions of KT to no effect...
It's in TSL mode, k_inc_hawk is in the same folder as the source files...I'm confused. I've even tried different versions of KT to no effect...
Hmm, perhaps Kotortool does not use your modified include file and instead pulls it from the BIF data? I don't use KotorTool to compile scripts so I'm not sure how it works.
Try putting some text that isn't valid script code at the very top of your k_inc_hawk and try to recompile one of your scripts. If the compiler does not report your deliberate error then it uses the wrong include file.
(Gah, not again. :( The Reply and Edit links really are too close to each other...)
You were right, it was reading a copy from the folder in which the galaxy map folder stuff was...
Thank you very much :)