PDA

View Full Version : Problem with adding planets to galaxy-map


Vegard Aune
08-30-2006, 10:28 AM
I have tried to make a minor mod that would add M4-78 and Malachor to the KotOR 2 galaxy map. I saw tha tutourial and downloaded the script and all that, but there is one problem: The map is gone! I mean, I can still select it and travel to planets, but the interface is completely black, so I can't tell where I'm going. Does anyone know how to fix this?

Pavlos
08-30-2006, 03:40 PM
Ok, so the easiest thing to do now is for you to post your script, so we can see where you are going wrong. Do you want M4-78 and Malachor V to always be on the galaxy map, or do you want them to appear after Telos?

Darth Dragoon
08-30-2006, 04:57 PM
i di the same tutorial but i can select the galaxy map but i cant go into the selection screen.

Pavlos
08-30-2006, 06:10 PM
I don't see why the galaxy map GUI would appear to be black. I haven't read stoffe's new tutorial, I figured the business out on my own (Which is surprising considering we are talking about the master of mistakes here...) so I didn't see any need. The only thing I can think of is that you have a corrupted galaxymap_p.gui in your override.

As to not appearing at all. You should have a call at the bottom of your a_galaxymap script for:

ShowGalaxyMap(nPlanet);

Edit: Oh, and make sure your galaxy map placeable triggers a_galaxymap :) - that could be the reason why it isn't showing.

Vegard Aune
08-31-2006, 01:29 AM
I don't see why the galaxy map GUI would appear to be black. I haven't read stoffe's new tutorial, I figured the business out on my own (Which is surprising considering we are talking about the master of mistakes here...) so I didn't see any need. The only thing I can think of is that you have a corrupted galaxymap_p.gui in your override.

As to not appearing at all. You should have a call at the bottom of your a_galaxymap script for:

ShowGalaxyMap(nPlanet);

Edit: Oh, and make sure your galaxy map placeable triggers a_galaxymap :) - that could be the reason why it isn't showing.
Actually, I only did a small change to the galaxy map script. All the other stuff was not necessary, as M4-78 and Malachor already had locations on the map, you just couldn't reach them. So the .gui explaination can't be the reason. Oh, and I wanted them (At least M4-78) to be available all the time.

goldberry
08-31-2006, 06:03 AM
Can you just post the decompiled script so that we can pinpoint the problem? Just post the scripts that you have edited.

DarthStoney
08-31-2006, 10:17 AM
if you use the original a_galaxymap script decompiled you have these lines at the bottom
SetPlanetAvailable(9, 0);
SetPlanetSelectable(9, 0);
SetPlanetAvailable(4, 0);
SetPlanetSelectable(4, 0);
SetPlanetAvailable(2, 0);
SetPlanetSelectable(2, 0);
planet 4 is m4-78 just change the 0's to 1's makes it selectable right after peragus or delete the lines makes them selectable after telos. planet 9 should be malachor v.

Pavlos
08-31-2006, 11:24 AM
if you use the original a_galaxymap script decompiled you have these lines at the bottom
SetPlanetAvailable(9, 0);
SetPlanetSelectable(9, 0);
SetPlanetAvailable(4, 0);
SetPlanetSelectable(4, 0);
SetPlanetAvailable(2, 0);
SetPlanetSelectable(2, 0);
planet 4 is m4-78 just change the 0's to 1's makes it selectable right after peragus or delete the lines makes them selectable after telos. planet 9 should be malachor v.

Malachor is actually planet number 5. The constants listed in NWScript are in alphabetical and not chronological order. Telos is 9.

Vegard Aune
08-31-2006, 12:41 PM
Actually, it turned out that the problem WAS a corrupted .gui-file. I had extracted it while trying to follow the tutourial, it was corrupted, and I didn't remove it afterwards. But there is another problem: Although I've set all the planets to true in the script, Malachor doesn't show up on the map. What should I do to fix that?

DarthStoney
08-31-2006, 01:04 PM
I got a little ahead of myself earlier as I had never tried to get to malachor.But if you use the original a_galaxy map file just modify this section.
SetPlanetAvailable(9, 0);
SetPlanetSelectable(9, 0);
SetPlanetAvailable(4, 0);
SetPlanetSelectable(4, 0);
SetPlanetAvailable(2, 0);
SetPlanetSelectable(2, 0);
to this
SetPlanetAvailable(9, 0);
SetPlanetSelectable(9, 0);
SetPlanetAvailable(4, 1);
SetPlanetSelectable(4, 1);
SetPlanetAvailable(5, 1);
SetPlanetSelectable(5, 1);
SetPlanetAvailable(2, 0);
SetPlanetSelectable(2, 0);
malachor is planet 5 note:if you exit the ebonhawk at malachor there is no way to re-enter.

Pavlos
08-31-2006, 03:31 PM
Edit: DSTONEY642000's way is fine as a hack to allow constant access, by the way. I didn't mean to seem as though I was correcting you, DSTONEY642000, because your method is fine. Just to clear that up...

Here is what your a_galaxymap.nss original should look like. I have commented it for ease of use. Ignore the little novel at the top... I have a habit of telling the life history of my scripts in the headers.

// a_galaxymap.nss
/*
Kindly decompiled/recreated by stoffe -mkb-,
found thanks to the handy search function on LucasForums
Runs when the galaxy map placeable is selected.
Sets which planets are visitable and which are not.
*/
// Created By: Obsidian Entertainment
// Decompiled By: stoffe
// Commented By: Pavlos

#include "k_inc_hawk"

void main() {

// We are supposed to check how Kreia is before setting a course for Telos
if (GetGlobalNumber("003EBO_Atton_Talk") <= 4) {
object oPC = GetFirstPC();
AssignCommand(oPC, ClearAllActions());
AssignCommand(OBJECT_SELF, ActionStartConversation(oPC, "galaxy", FALSE, CONVERSATION_TYPE_CINEMATIC, TRUE));
return;
}

// We're stuck on Dxun, oh no!
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;
}
}

// The Ebon Hawk has been boarded!
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;
}

// Set all the worlds to off
int nWorld = 0;
for (nWorld = PLANET_DANTOOINE; nWorld < PLANET_LIVE_01; ++nWorld) {
SetPlanetAvailable(nWorld, FALSE);
SetPlanetSelectable(nWorld, FALSE);
}

// Malachor is open on the galaxy map - you have defeated Nihilus
// I believe you are immediately transfered to 901MAL, after Nihilus
// That is why you never receive this option in the game
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);
}
}

// Standard, after-Telos galaxy map
else if (GetGlobalNumber("262TEL_Escape_Telos") == 1) {
for (nWorld = PLANET_DANTOOINE; nWorld < PLANET_LIVE_01; nWorld++) {
int nPlanet = nWorld;


// If nWorld is not equal to 5 then set it to available.
if (nWorld != PLANET_MALACHOR_V) {
SetPlanetAvailable(nPlanet, TRUE);

// If nWorld is not equal to 8 then allow the player to select it
if (nWorld != PLANET_PERAGUS)
SetPlanetSelectable(nPlanet, TRUE);
}
}

// We don't know of Dxun yet... we cannot select it
if (GetGlobalNumber("401DXN_Visited") == 0) {
SetPlanetAvailable(PLANET_DXUN, FALSE);
SetPlanetSelectable(PLANET_DXUN, FALSE);
}

// Civil War strikes at Onderon's heart - we cannot go back
else {
SetPlanetSelectable(PLANET_ONDERON, FALSE);
}
}

// For some strange reason... the Harbinger constant is
// used for Citadel Station.
// Which is... confusing.
// Used for the flight from Peragus to Telos
else {
SetPlanetAvailable(PLANET_HARBINGER, TRUE);
SetPlanetSelectable(PLANET_HARBINGER, TRUE);
SetPlanetAvailable(PLANET_PERAGUS, TRUE);
SetPlanetSelectable(PLANET_PERAGUS, FALSE);
}

// We cannot go to the polar region again.
SetPlanetAvailable(PLANET_TELOS, FALSE);
SetPlanetSelectable(PLANET_TELOS, FALSE);

// M4-78 was cut - much simpler just to add this in than edit the rest of the script
SetPlanetAvailable(PLANET_M4_78, FALSE);
SetPlanetSelectable(PLANET_M4_78, FALSE);

// Standard, no Ebon Hawk on map
SetPlanetAvailable(PLANET_EBON_HAWK, FALSE);
SetPlanetSelectable(PLANET_EBON_HAWK, FALSE);

int nPlanet = GetCurrentPlanet();

// If we are in hyperspace, or in space then the Ebon Hawk is on the map.
if ((GetGlobalNumber("003EBO_BACKGROUND") == 8) || (GetGlobalNumber("003EBO_BACKGROUND") == 10)) {
nPlanet = PLANET_EBON_HAWK;
SetPlanetAvailable(PLANET_EBON_HAWK, TRUE);
}

SetPlanetSelectable(nPlanet, FALSE);
ShowGalaxyMap(nPlanet);
}

To make M4-78 selectable after Telos - delete, or comment out:


SetPlanetAvailable(PLANET_M4_78, FALSE);
SetPlanetSelectable(PLANET_M4_78, FALSE);

As for Malachor: You want to remove, or comment out, the check to see if the planet is Malachor V.


if (nWorld != PLANET_MALACHOR_V) {
SetPlanetAvailable(nPlanet, TRUE);

This should allow you to visit it after Telos - as you did with M4-78.

So your script should look something like this:

#include "k_inc_hawk"

void main() {

// We are supposed to check how Kreia is before setting a course for Telos
if (GetGlobalNumber("003EBO_Atton_Talk") <= 4) {
object oPC = GetFirstPC();
AssignCommand(oPC, ClearAllActions());
AssignCommand(OBJECT_SELF, ActionStartConversation(oPC, "galaxy", FALSE, CONVERSATION_TYPE_CINEMATIC, TRUE));
return;
}

// We're stuck on Dxun, oh no!
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;
}
}

// The Ebon Hawk has been boarded!
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;
}

// Set all the worlds to off
int nWorld = 0;
for (nWorld = PLANET_DANTOOINE; nWorld < PLANET_LIVE_01; ++nWorld) {
SetPlanetAvailable(nWorld, FALSE);
SetPlanetSelectable(nWorld, FALSE);
}

// Malachor is open on the galaxy map - you have defeated Nihilus
// I believe you are immediately transfered to 901MAL, after Nihilus
// That is why you never receive this option in the game
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);
}
}

// Standard, after-Telos galaxy map
else if (GetGlobalNumber("262TEL_Escape_Telos") == 1) {
for (nWorld = PLANET_DANTOOINE; nWorld < PLANET_LIVE_01; nWorld++) {
int nPlanet = nWorld;

// If nWorld is not equal to 8 then allow the player to select it
if (nWorld != PLANET_PERAGUS)
SetPlanetSelectable(nPlanet, TRUE);
}

// We don't know of Dxun yet... we cannot select it
if (GetGlobalNumber("401DXN_Visited") == 0) {
SetPlanetAvailable(PLANET_DXUN, FALSE);
SetPlanetSelectable(PLANET_DXUN, FALSE);
}

// Civil War strikes at Onderon's heart - we cannot go back
else {
SetPlanetSelectable(PLANET_ONDERON, FALSE);
}
}

// For some strange reason... the Harbinger constant is
// used for Citadel Station.
// Which is... confusing.
// Used for the flight from Peragus to Telos
else {
SetPlanetAvailable(PLANET_HARBINGER, TRUE);
SetPlanetSelectable(PLANET_HARBINGER, TRUE);
SetPlanetAvailable(PLANET_PERAGUS, TRUE);
SetPlanetSelectable(PLANET_PERAGUS, FALSE);
}

// We cannot go to the polar region again.
SetPlanetAvailable(PLANET_TELOS, FALSE);
SetPlanetSelectable(PLANET_TELOS, FALSE);

// Standard, no Ebon Hawk on map
SetPlanetAvailable(PLANET_EBON_HAWK, FALSE);
SetPlanetSelectable(PLANET_EBON_HAWK, FALSE);

int nPlanet = GetCurrentPlanet();

// If we are in hyperspace, or in space then the Ebon Hawk is on the map.
if ((GetGlobalNumber("003EBO_BACKGROUND") == 8) || (GetGlobalNumber("003EBO_BACKGROUND") == 10)) {
nPlanet = PLANET_EBON_HAWK;
SetPlanetAvailable(PLANET_EBON_HAWK, TRUE);
}

SetPlanetSelectable(nPlanet, FALSE);
ShowGalaxyMap(nPlanet);
}

Compile it, and both worlds should be available for use after Telos - like any other world.