Jump to content

Home

Handmaiden for a female PC


The Lone Badger

Recommended Posts

Originally posted by *Atris*

You know you released a version with the scripts in .ncs format could you do that for the new scripts plz:D

 

Already done, check the link in the post at the bottom of page 3 of this thread. That RAR archive should (hopefully) contain everything I've modified. :)

Link to comment
Share on other sites

  • Replies 244
  • Created
  • Last Reply
Originally posted by stoffe -mkb-

Already done, check the link in the post at the bottom of page 3 of this thread. That RAR archive should (hopefully) contain everything I've modified. :)

I'm curious stoffe -mkb- how do you manage to make sense of the compiled scripts?

I know you can decompile them with nwnnsscomp but that still gives a bunch of numbers and crap. How do you manage to get some sense of that? I have some compiled scripts that I would really like to decipher but just dont know how.

 

Care to share you "secret" :D

Link to comment
Share on other sites

Originally posted by envida

I'm curious stoffe -mkb- how do you manage to make sense of the compiled scripts?

I know you can decompile them with nwnnsscomp but that still gives a bunch of numbers and crap. How do you manage to get some sense of that? I have some compiled scripts that I would really like to decipher but just dont know how.

 

Care to share you "secret" :D

 

I do it by hand since there seems to be no easier way.

 

I decompile the script to bytecode, then I read through and try to interpret the byte code, re-creating the source code by hand from that.

 

When my re-created script results in a bytecode (when compiled and de-compiled) that exactly matches the bytecode of the original script when run through a text compare utility, then you essentially have the source of the original script.

 

The layout of the code may not be identical (names of variables etc) and any code comments are of course not there, but the script does exactly the same thing as the original since it results in the same compiled code.

 

No greater secret than that I'm afraid. :)

 

EDIT: There's some documentation of the byte code format on http://www.torlack.com that's helpful when trying to make sense of it.

Link to comment
Share on other sites

Originally posted by envida

I'm curious stoffe -mkb- how do you manage to make sense of the compiled scripts?

I know you can decompile them with nwnnsscomp but that still gives a bunch of numbers and crap. How do you manage to get some sense of that? I have some compiled scripts that I would really like to decipher but just dont know how.

 

Care to share you "secret" :D

 

actually it doesn't take much more than a c++ compiler and some time to figurer out what information is missing because you can view the hex code and it also gives information on what the code was and since c++ uses ASCII code all you need to do is be good at decipering ASCII values in HEX

 

I know this because i tend to mess around with all the files that get created when compiling a program

Link to comment
Share on other sites

Originally posted by envida

Even more impressive when you do this manually :) I'm not sure I'm up for that task :D

 

It's not that difficult once you get the hang of it, mostly takes a lot of time and patience (and occasionally a bit of informed guessing and trial & error). :)

 

If there's a particular script you need source code for I could take a look at it and see if I can make sense of it.

Link to comment
Share on other sites

Hey, before I continue I just wanted to thank everyone who has contributed to this work. Every now and then I have an urge to make a mod or even a total conversion (I program for a living - insurance software, but if it would let me keep paying the mortgage I'd move to games programming in a short split second), but I don't think I'd have the time, so I rely on guys and gals like you lot :)

 

I just (21 Mar 2005, 13:10ish GMT) downloaded the .rar and I was wondering if it has all the above modifications included?

 

I only ask because the files in the source folder don't seem to include all the text above (at least some of the stuff on page 4).

Link to comment
Share on other sites

I believe stoffe has included everything he has done otherwise you'll have to recompile a few scripts, and since he has the file up already I've got time enough to work on my own part of the mod (that one that one be included appart from the dialog options :p )

Link to comment
Share on other sites

Originally posted by ace_at_work

(snip)

I just (21 Mar 2005, 13:10ish GMT) downloaded the .rar and I was wondering if it has all the above modifications included?

 

I only ask because the files in the source folder don't seem to include all the text above (at least some of the stuff on page 4).

 

I believe it should contain all the files I've modified, I update it as I find new things that needs to be changed.

 

However, since I'm not the most organized person ever born its entirely possible that I've forgotten to include something. What did you find that seems to be missing?

Link to comment
Share on other sites

Those are entries for dialog files, you won't find them in script sources. My work includes files for personal use, a lot of modifications in dialogs, new characters and miscellaneous stuff, I'm just planning on making this mod compatible with some of the others and add a few dialog options to make it work better altogether.

Link to comment
Share on other sites

Is it possible to override the heard speech?

 

I was thinking that a sophisticated voice editor could change the bits where HM says "he" to "she" etc. (when referring to the exile) fairly seemlessly. They always seem to be able to do that sort of stuff on TV :)

 

If she doesn't actually say the relevant pronouns anywhere to nick it from, I know she says "The Exile" almost the moment you talk to her.

 

How is the lip synching done? Is it based on the text version of what is said or is it done separately (which could be a pain)?

Link to comment
Share on other sites

Originally posted by ace_at_work

I couldn't find any of the lines like this one:

 

(GFF Editor instruction)

in the source code files.

Of course I may have just missed it.

 

Kenneth, which part of this stuff is yours?

 

As he said, they are instructions on what field to change in the dialog file with the GFF Editor.

 

I've updated the instructions file in the archive with that information too now. This thread is starting to get pretty long so it can be a bit hard to find it in the posts here (and I think there's a couple of minor dialog changes I haven't posted here about that were present in the RAR archive).

 

The archive only contains the stuff I've modified to make it a bit easier to find it all in once place. Modifications made by others are not included there.

 

Still doing my full playthrough to test things. So far things appear to work as intended, but I've only had the time to finish Dantooine and Nar Shadaa in my so far. Hopefully it will stay that way on the bug front.

 

Regarding sounds: I guess it's possible to do, though you'll probably need to be pretty good at modifying sounds for it not to sound annoyingly obvious that its been edited. And concidering the sheer amount of dialog you'd need to go through I think it's more work than it's worth.

 

If I can survive the standard game calling my female Revan "he/him" more than half the time, I can survive the Handmaiden and Atris calling my female Exile "he/him" a few times too. Especially since a FemExile already is called "he" a number of times in the game, even by your own party members. :)

Link to comment
Share on other sites

Originally posted by stoffe -mkb-

It's not that difficult once you get the hang of it, mostly takes a lot of time and patience (and occasionally a bit of informed guessing and trial & error). :)

 

If there's a particular script you need source code for I could take a look at it and see if I can make sense of it.

I would appreciate it if you could take the time to have a look these.

 

The two files are:

a_hand_fight.ncs

k_inc_handfight.ncs

 

These are the files for the handfights with the Handmaiden onboard Ebon Hawk. They are located under module 003ebo. I can send them to you if want.

 

Im using them for my recruit mod here http://www.lucasforums.com/showthre...threadid=145992

 

Im doing some fights there between the pc and aayla similar to the Handmaiden, so these files would be really helpful to me

 

I will of course give you credit for what you do :)

 

PS. I sent you pm but I dont think you are reading you pm's :D

Link to comment
Share on other sites

Hiya, stoffe...

 

could you perhaps decompile k_262_enter.ncs from 262TEL module (Secret Telos Academy)?

 

There is I think an error in this script. Byte code also displays a few UnknownCommand/Action lines. Anyways, the bug occurs when you train Handmaiden as jedi and get teleported to Telos to view a cinematic with Atris. Sometimes (and this seems to happen at random) you don't get the cinematic but instead simply appear in Academy with nothing happening.

Link to comment
Share on other sites

Originally posted by Xcom

Hiya, stoffe...

 

could you perhaps decompile k_262_enter.ncs from 262TEL module (Secret Telos Academy)?

 

There is I think an error in this script. Byte code also displays a few UnknownCommand/Action lines. Anyways, the bug occurs when you train Handmaiden as jedi and get teleported to Telos to view a cinematic with Atris. Sometimes (and this seems to happen at random) you don't get the cinematic but instead simply appear in Academy with nothing happening.

 

I had a look at the script and came up with this. The only thing I can spot at a quick glance that could cause trouble is if you train the Handmaiden after you've found all 4 Jedi Masters, since the script just seems to terminate if that is the case (with the assumption that 2 = cutscene pending). "000_atriscs3" is the "Betrayal" cutscene.

 

But that's just at a quick glance since I don't know where the variables the script checks are set.

 

Anyway, here's the code, perhaps you can spot something I don't:

 

// ST: k_262_enter.nss (k_262_enter.ncs in 262TEL_s.rim)

#include "k_inc_glob_party"

void main() {
object oEnter = GetEnteringObject();

if (GetFirstPC() == oEnter) {
	SetAreaUnescapable(TRUE);
	SetDisableTransit(TRUE);

	DestroyObject(GetObjectByTag("AtrisWindCut"));
	DestroyObject(GetObjectByTag("AtrisCut"));
	DestroyObject(GetObjectByTag("Sister1Cut"));
	DestroyObject(GetObjectByTag("Sister2Cut"));
	DestroyObject(GetObjectByTag("Sister1Wind"));
	DestroyObject(GetObjectByTag("Sister2Wind"));

	if (GetLoadFromSaveGame())
		return;

	if (GetGlobalNumber("000_Jedi_Found") == 4) {
		if ((GetGlobalNumber("000_siscut1") == 2) 
			|| (GetGlobalNumber("000_atriscs1") == 2)
			|| (GetGlobalNumber("000_atriscs3") == 2))
		{
			return;
		}

		if (!GetLocalBoolean(OBJECT_SELF, 50)) {
			SetLocalBoolean(OBJECT_SELF, 50, TRUE);

			DestroyObject(GetObjectByTag("Sister1", 1));
			DestroyObject(GetObjectByTag("Sister2", 1));
			DestroyObject(GetObjectByTag("Sister1"));
			DestroyObject(GetObjectByTag("Sister2"));
			DestroyObject(GetObjectByTag("Sister3"));
			DestroyObject(GetObjectByTag("Sister4"));
			DestroyObject(GetObjectByTag("Sister5"));
			DestroyObject(GetObjectByTag("SisterDojo"));
			DestroyObject(GetObjectByTag("SisterFight", 2));
			DestroyObject(GetObjectByTag("SisterFight", 1));
			DestroyObject(GetObjectByTag("SisterFight", 0));

			DelayCommand(2.0, ClearPlayerParty());				
			DelayCommand(2.0, DestroyObject(GetObjectByTag("Handmaiden")));

			SetLocked(GetObjectByTag("MedChamber"), FALSE);
			AssignCommand(GetObjectByTag("MedChamber"), ActionOpenDoor(GetObjectByTag("MedChamber")));

			object oAtris = GetObjectByTag("Atris");

			AssignCommand(oAtris, ActionJumpToObject(GetObjectByTag("wp_PC_Atris_End")));

			object oKreia = CreateObject(OBJECT_TYPE_CREATURE, "p_kreia002", GetLocation(GetWaypointByTag("wp_kreia_end")));

			SetLockOrientationInDialog(oAtris, TRUE);
			SetLockOrientationInDialog(oKreia, TRUE);

			AssignCommand(oKreia, ClearAllActions());
			AssignCommand(oKreia, ActionStartConversation(GetFirstPC()));
		}
	}		
	else if (GetGlobalNumber("000_siscut1") == 2) {
		DestroyObject(GetObjectByTag("Sister1"));
		DestroyObject(GetObjectByTag("Sister2"));		
		DestroyObject(GetObjectByTag("Sister3"));
		DestroyObject(GetObjectByTag("Sister4"));
		DestroyObject(GetObjectByTag("Sister5"));
		DestroyObject(GetObjectByTag("SisterDojo"));	
		DestroyObject(GetObjectByTag("Handmaiden"));

		SetGlobalNumber("000_siscut1", 1);
		SetGlobalFadeOut();
		SetFadeUntilScript();

		object oSis1 = CreateObject(OBJECT_TYPE_CREATURE, "sister1cut", GetLocation(GetObjectByTag("wp_sister1bay_1")));
		object oSis2 = CreateObject(OBJECT_TYPE_CREATURE, "sister2cut", GetLocation(GetObjectByTag("wp_sister2bay_1")));

		AssignCommand(oSis1, ClearAllActions());
		AssignCommand(oSis1, ActionStartConversation(oSis2, "siscut1"));
	}
	else if (GetGlobalNumber("000_atriscs1") == 2) {
		SetGlobalNumber("000_atriscs1", 1);

		DestroyObject(GetObjectByTag("Sister1"));
		DestroyObject(GetObjectByTag("Sister2"));		
		DestroyObject(GetObjectByTag("Sister3"));
		DestroyObject(GetObjectByTag("Sister4"));
		DestroyObject(GetObjectByTag("Sister5"));
		DestroyObject(GetObjectByTag("SisterDojo"));	
		DestroyObject(GetObjectByTag("Handmaiden"));

		SetGlobalFadeOut();
		SetFadeUntilScript();	

		object oSis1  = CreateObject(OBJECT_TYPE_CREATURE, "sister1cut", GetLocation(GetObjectByTag("wp_sister1council_1")));
		object oSis2  = CreateObject(OBJECT_TYPE_CREATURE, "sister2cut", GetLocation(GetObjectByTag("wp_sister2council_1")));
		object oAtris = CreateObject(OBJECT_TYPE_CREATURE, "atriscut", GetLocation(GetObjectByTag("wp_atriscouncil_1")));

		AssignCommand(oSis1, ClearAllActions());
		AssignCommand(oSis1, ActionStartConversation(oAtris, "atriscs1"));
	}
	else if (GetGlobalNumber("000_atriscs3") == 2) {
		SetGlobalNumber("000_atriscs3", 1);

		DestroyObject(GetObjectByTag("Sister1"));
		DestroyObject(GetObjectByTag("Sister2"));		
		DestroyObject(GetObjectByTag("Sister3"));
		DestroyObject(GetObjectByTag("Sister4"));
		DestroyObject(GetObjectByTag("Sister5"));
		DestroyObject(GetObjectByTag("SisterDojo"));
		DestroyObject(GetObjectByTag("Handmaiden"));

		SetGlobalFadeOut();
		SetFadeUntilScript();

		object oAtris = CreateObject(OBJECT_TYPE_CREATURE, "atriscut", GetLocation(GetObjectByTag("wp_atriscouncil_2")));
		object oSis1  = CreateObject(OBJECT_TYPE_CREATURE, "sister1cut", GetLocation(GetObjectByTag("wp_sister1council_3")));
		object oSis2  = CreateObject(OBJECT_TYPE_CREATURE, "sister2cut", GetLocation(GetObjectByTag("wp_sister2council_3")));

		AssignCommand(oSis1, ClearAllActions());
		AssignCommand(oSis1, ActionStartConversation(oAtris, "atriscs3"));
	}
}
}

Link to comment
Share on other sites

Thanks for your time, stoffe.

 

I think you are probably right about 000_Jedi_Found var check causing this.

 

In handmaidens main dialog, after you train her, a script a_262handcs is called (R45). It's located in 003Ebo

 

From what I can tell it does this

 

void main()
{
if ( GetGlobalNumber("000_atriscs3") == 0)
{
	SetGlobalNumber("000_atriscs3",2);
	StartNewModule("262Tel");
}
}

 

I didn't find the dialog checking for Jedi_Found variable anythere and it IS quite possible to train her after finding all of them. Bad glitch this is.

Link to comment
Share on other sites

Originally posted by Tupac Amaru

I think there is a scene with the Handmaiden in the Jedi enclave that has a gender check. The scripts are 'a_handspawn' and 'a_hand_move' in 650DAN.

 

Oops, almost forgot about this. Here are those scripts.

 

// ST: a_handspawn.nss (a_handspawn.ncs in 650DAN_s.rim)

#include "k_inc_utility"

void main() {
SetGlobalNumber("650DAN_006EBO_Trans", 1);

object oMaidWP = GetObjectByTag("WP_HAND_0");
object oSis1WP = GetObjectByTag("WP_SISTER1_0");
object oSis2WP = GetObjectByTag("WP_SISTER2_0");

CreateObject(OBJECT_TYPE_CREATURE, "p_handmaiden", GetLocation(oMaidWP));

// ST: Replaced gender check with if the Handmaiden is in the party:
if (!IsAvailableCreature(NPC_HANDMAIDEN)) {
	CreateObject(OBJECT_TYPE_CREATURE, "p_sister", GetLocation(oSis1WP));
	CreateObject(OBJECT_TYPE_CREATURE, "p_sister2", GetLocation(oSis2WP));
}

if (IsAvailableCreature(NPC_HANDMAIDEN)) {
	SetNPCSelectability(NPC_HANDMAIDEN, FALSE);	
}
}

 

...and...

 

// ST: a_hand_move.nss (a_hand_move.ncs in 650DAN_s.rim)

#include "k_inc_utility"

void main() {
int nParam = GetScriptParameter(1);

object oMaid = GetObjectByTag("Handmaiden");
object oSis1 = GetObjectByTag("Sister1");
object oSis2 = GetObjectByTag("Sister2");

if (nParam == 1) {
	DelayCommand(0.5, AssignCommand(oMaid, ActionForceMoveToObject(GetObjectByTag("WP_HAND_1"), TRUE)));	

	// ST: Replaced gender check with check if Handmaiden is in the party...
	if (!IsAvailableCreature(NPC_HANDMAIDEN)) {
		DelayCommand(0.5, AssignCommand(oSis1, ActionForceMoveToObject(GetObjectByTag("WP_SISTER1_1"), TRUE)));
		DelayCommand(0.5, AssignCommand(oSis2, ActionForceMoveToObject(GetObjectByTag("WP_SISTER2_1"), TRUE)));
	}
}
}

 

Hopefully all places of importance concerning the Handmaiden have been found now. So barring any nasty bugs showing up during the last 25% of the game (I'm on my 4th planet during the playthough now, no bugs in sight so far), that would pretty much conclude this work. :)

Link to comment
Share on other sites

Originally posted by stoffe -mkb-

Hopefully all places of importance concerning the Handmaiden have been found now. So barring any nasty bugs showing up during the last 25% of the game (I'm on my 4th planet during the playthough now, no bugs in sight so far), that would pretty much conclude this work. :)

 

Hey stoffe -mkb-

Just wanted to say thanks again.

I just finished my very first playthrough of TSL and with your Handmaiden mod installed and it was wicked.

As it was my first playthrough ever, can't say for sure if there are lingering bugs with respect to Handmaiden, but everything "seemed" to make sense.

Thanks again (yet again).

Link to comment
Share on other sites

Originally posted by vustare

Hey stoffe -mkb-

Just wanted to say thanks again.

I just finished my very first playthrough of TSL and with your Handmaiden mod installed and it was wicked.

As it was my first playthrough ever, can't say for sure if there are lingering bugs with respect to Handmaiden, but everything "seemed" to make sense.

Thanks again (yet again).

 

That's good to know. I just finished my playthrough and couldn't spot any problems either. So I suppose that makes this project pretty much finished if no one else discovers any problems. :)

Link to comment
Share on other sites

TSL Handmaiden Female PC

 

could some one PLEASE send me a PM or email with the RAR or mod file for this mod.

 

ive been trying everything to get this to work and looks like the RAR was shown on this thread but i cant find it or its gone.

 

help, contact me

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.


×
×
  • Create New...