Note: LucasForums Archive Project
The content here was reconstructed by scraping the Wayback Machine in an effort to restore some of what was lost when LF went down. The LucasForums Archive Project claims no ownership over the content or assets that were archived on archive.org.

This project is meant for research purposes only.

Problem with adding planets to galaxy-map

Page: 1 of 1
 Vegard Aune
08-30-2006, 10:28 AM
#1
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, 3:40 PM
#2
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, 4:57 PM
#3
i di the same tutorial but i can select the galaxy map but i cant go into the selection screen.
 Pavlos
08-30-2006, 6:10 PM
#4
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, 1:29 AM
#5
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, 6:03 AM
#6
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
#7
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
#8
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
#9
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, 1:04 PM
#10
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, 3:31 PM
#11
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.
Page: 1 of 1