cmorgan Posted March 22, 2010 Share Posted March 22, 2010 Scraps of ideas from researching (read that as distracting berelinde from her appointed tasks by poking at her and asking silly questions. Hey, i think I can get a job at Fox research, now...) Edwin/Edwina tranformation. Adding a banter to Edwin's post-transformation banter file, /* Fun with Edwin as a Woman */ Probably will never play, but heck - why not. This is long form built out of Edwin's BEDWINWO.DLG file, acient long-form EXTERN. This could be rebuilt more efficiently as a CHAIN, or just tidied up, but the code part that is most fun about it is the use of SAY #sringnumber I saw used in JCompton's D'Arnise alia Romance, where preexisting game string references can be swapped in: APPEND ~BEDWINWO~ IF ~InParty("C-ARAN") See("C-ARAN") !StateCheck("C-ARAN",CD_STATE_NOTVALID) Global("c-arEdwinW","LOCALS",0)~ THEN BEGIN c-edwiniswoman SAY #8556 /* ~(My condition draws fools like flies to honey). Silence, you idiot! You've a death wish that is larger than your swollen head.~ [EDWINW39] */ IF ~~ THEN DO ~SetGlobal("c-arEdwinW","LOCALS",1)~ EXTERN ~C-ARANB~ woman1 END END APPEND ~C-ARANB~ IF ~~ woman1 SAY ~[ARAN] Hey, now, I weren't saying naught, now, eh? I was just...~ IF ~~ THEN EXTERN ~BEDWINWO~ woman2 END END APPEND ~BEDWINWO~ IF ~~ woman2 SAY ~[EDWIN] Your eyes were practically shouting vile depravity at my feminine form.~ IF ~~ THEN EXTERN ~C-ARANB~ woman3 END END APPEND ~C-ARANB~ IF ~~ woman3 SAY ~[ARAN] Grumbar's Formidable Fists, laddie... err.. m'Lady, I weren't doin' no such thing. It were just that you haven't got used to th' right manner o' walkin in that there body, eh?~ IF ~~ THEN EXTERN ~BEDWINWO~ woman4 END END APPEND ~BEDWINWO~ IF ~~ woman4 SAY #7276 /* ~And exactly WHAT is wrong with my 'manner?'~ [EDWINW49] */ IF ~~ THEN EXTERN ~C-ARANB~ woman5 END END APPEND ~C-ARANB~ IF ~~ woman5 SAY ~[ARAN] Well, for one thing, if you keep slammin' down your heels when you walk like that, you are goin' to jounce those feminine attributes right out o' that there robe.~ IF ~~ THEN EXTERN ~BEDWINWO~ woman6 END END APPEND ~BEDWINWO~ IF ~~ woman6 SAY #7066 /* ~(I will kill ALL of them. Slowly. With...with HOT...pokey things and...and coals and...and prods. Yessssss, prods. Many, many prods.)~ */ IF ~~ THEN EXIT END END So, dv doesn't change, still = "edwin", but the banter file and script in play does. Next step; figure out what consititues a good check for "Edwina" being in play rather than "edwin", so that a banter or talk fits the feminine form. Gender() I think is not the way to go, as my bet is that if they don't change the DV, they must be shell-scripting somehow, so time to look through the decompiled .bcs for clues... Link to comment
cmorgan Posted March 22, 2010 Author Share Posted March 22, 2010 Nope, I was wrong - he does get a full swap, not juts of soundset, but of everything but the DV. In In EDWIN.BAF IF Gender(Myself,FEMALE) Global("TurnedFemale","LOCALS",0) THEN RESPONSE #100 SetPlayerSound(Myself,61302,MORALE) // I'll not die like this! Not like this! SetPlayerSound(Myself,61303,HAPPY) // This is all well and good but could we get back to fixing my little problem now? SetPlayerSound(Myself,61304,UNHAPPY_ANNOYED) // You are doing nothing for my morale, you know. Wasteful behavior and leaving me like this. SetPlayerSound(Myself,61305,UNHAPPY_SERIOUS) // Yes, yes, you are all a bunch of goodie two-shoes, and yet I am left like this! SetPlayerSound(Myself,61306,UNHAPPY_BREAKING_POINT) // I can see I am going to get no help from the likes of you. I shall find my own *cure*. SetPlayerSound(Myself,61307,LEADER) // Do not patronize me, I am in no shape to lead. SetPlayerSound(Myself,61308,TIRED) // I tire of walking, I tire of talking, and I tire of the laughable body. I wish to rest now. SetPlayerSound(Myself,61309,BORED) // Every moment idle is another moment I brood in this dispicable form. Let's get moving! SetPlayerSound(Myself,61310,BATTLE_CRY1) // Your worthless lives end here! SetPlayerSound(Myself,61311,BATTLE_CRY2) // A death for every second I am in this form! SetPlayerSound(Myself,61312,BATTLE_CRY3) // I feel your stares! Die! Die!! SetPlayerSound(Myself,61313,DAMAGE) // SetPlayerSound(Myself,61314,DYING) // SetPlayerSound(Myself,61315,HURT) // If I must wear this form the least you could do is keep it in good health! SetPlayerSound(Myself,61316,AREA_FOREST) // This place is less constricting than the city, though I no more wish the company of nature than people. SetPlayerSound(Myself,61317,AREA_CITY) // I feel the stares of each and every person here. They mock me with their eyes. SetPlayerSound(Myself,61318,AREA_DUNGEON) // Another dank hole with which to improve my mood. Joy. SetPlayerSound(Myself,61319,AREA_DAY) // I would see as few days in this form as possible. SetPlayerSound(Myself,61321,AREA_NIGHT) // I would rather spend my nights dreaming of being normal again. SetPlayerSound(Myself,61322,SELECT_COMMON1) // Leave me be. SetPlayerSound(Myself,61323,SELECT_COMMON2) // What is it now?! SetPlayerSound(Myself,61324,SELECT_COMMON3) // I will tolerate only so much. SetPlayerSound(Myself,-1,SELECT_COMMON4) // No such index SetPlayerSound(Myself,-1,SELECT_COMMON5) // No such index SetPlayerSound(Myself,-1,SELECT_COMMON6) // No such index SetPlayerSound(Myself,61325,SELECT_ACTION1) // If I must. SetPlayerSound(Myself,61326,SELECT_ACTION2) // Oh, labor will help. SetPlayerSound(Myself,61327,SELECT_ACTION3) // A waste of my talents. SetPlayerSound(Myself,61328,SELECT_ACTION4) // Stop looking at me. SetPlayerSound(Myself,61329,SELECT_ACTION5) // Very well. SetPlayerSound(Myself,61330,SELECT_ACTION6) // If I must live like this your life shall be as much a hell as mine. SetPlayerSound(Myself,-1,SELECT_ACTION7) // No such index SetPlayerSound(Myself,-1,SELECT_RARE1) // No such index SetPlayerSound(Myself,-1,SELECT_RARE2) // No such index SetPlayerSound(Myself,61331,CRITICAL_HIT) // Even hand to hand I am dangerous. SetPlayerSound(Myself,61332,CRITICAL_MISS) // My talents are wasted on physical blows! SetPlayerSound(Myself,61333,TARGET_IMMUNE) // My spells would serve better, this weapon is useless. SetPlayerSound(Myself,61334,INVENTORY_FULL) // I'll be no packhorse! Pick up your garbage where I dropped it! SetPlayerSound(Myself,61335,PICKED_POCKET) // I have succeeded, but I despise being reduced to this. SetPlayerSound(Myself,61336,EXISTANCE1) // I am hidden, though I still see this ridiculous form myself. SetPlayerSound(Myself,61337,EXISTANCE2) // Do the outrages never end? My spell has failed! SetPlayerSound(Myself,61338,EXISTANCE3) // I have set your trap, but my wrath prefers direct combat. SetGlobal("TurnedFemale","LOCALS",1) END IF Gender(Myself,MALE) Global("TurnedFemale","LOCALS",1) THEN RESPONSE #100 SetPlayerSound(Myself,3966,MORALE) // I'll not die to incompetence! SetPlayerSound(Myself,3968,HAPPY) // I had not thought this group capable of pleasing me, but I am impressed. SetPlayerSound(Myself,3969,UNHAPPY_ANNOYED) // Could my opinion of this group drop ANY lower? Evidently so. SetPlayerSound(Myself,3970,UNHAPPY_SERIOUS) // I warn you, I cannot abide this charity. It is not to my tastes at all. SetPlayerSound(Myself,3971,UNHAPPY_BREAKING_POINT) // No, I do not feel this is working out.You waste opportunity after opportunity. I will stand no more. SetPlayerSound(Myself,3972,LEADER) // It is about time you monkeys realized who should be leader. SetPlayerSound(Myself,3973,TIRED) // I require rest. I demand we stop. SetPlayerSound(Myself,3974,BORED) // Inactive outward, inactive inward. Why do I suffer these fools? SetPlayerSound(Myself,3967,BATTLE_CRY1) // Your worthless lives end here! SetPlayerSound(Myself,30694,BATTLE_CRY2) // Cry for your lives, they are over! SetPlayerSound(Myself,30706,BATTLE_CRY3) // You can do nothing but die! SetPlayerSound(Myself,5350,DAMAGE) // SetPlayerSound(Myself,5351,DYING) // SetPlayerSound(Myself,3975,HURT) // I could use some help here, fools. SetPlayerSound(Myself,5345,AREA_FOREST) // I find the 'great outdoors' chaotic and dirty It needs a shaping will to slap the beasts into proper order. SetPlayerSound(Myself,5346,AREA_CITY) // The city changes, but the fools within are always the same. SetPlayerSound(Myself,5347,AREA_DUNGEON) // Could we not have hired some poor fools to do this for us? This is no place for a man of my stature. SetPlayerSound(Myself,5348,AREA_DAY) // Another day and more aimless stumbling about. SetPlayerSound(Myself,5349,AREA_NIGHT) // Intelligent peoples do not wander about looking for trouble in the evening hours. SetPlayerSound(Myself,3976,SELECT_COMMON1) // Yes? SetPlayerSound(Myself,3977,SELECT_COMMON2) // What is it now! SetPlayerSound(Myself,3978,SELECT_COMMON3) // Go bother someone else. SetPlayerSound(Myself,30709,SELECT_COMMON4) // I'm busy. SetPlayerSound(Myself,30710,SELECT_COMMON5) // Have you nothing else to do but bother me? SetPlayerSound(Myself,30711,SELECT_COMMON6) // Yes master, what should I fetch now? SetPlayerSound(Myself,30712,SELECT_ACTION1) // Oh all right! SetPlayerSound(Myself,30713,SELECT_ACTION2) // Yes, yes, I see. SetPlayerSound(Myself,30714,SELECT_ACTION3) // One day...one day... SetPlayerSound(Myself,30716,SELECT_ACTION4) // Very well. SetPlayerSound(Myself,30717,SELECT_ACTION5) // Edwin do this, Edwin do that. Somebody get this jerk a banana. SetPlayerSound(Myself,30718,SELECT_ACTION6) // Fear me! SetPlayerSound(Myself,30719,SELECT_ACTION7) // Bah, useless weapon! SetPlayerSound(Myself,30716,SELECT_RARE1) // Very well. SetPlayerSound(Myself,30717,SELECT_RARE2) // Edwin do this, Edwin do that. Somebody get this jerk a banana. SetPlayerSound(Myself,30718,CRITICAL_HIT) // Fear me! SetPlayerSound(Myself,30719,CRITICAL_MISS) // Bah, useless weapon! SetPlayerSound(Myself,30720,TARGET_IMMUNE) // This weapon is worthless. SetPlayerSound(Myself,30721,INVENTORY_FULL) // I will carry no more. Find your trinket upon the ground. SetPlayerSound(Myself,30722,PICKED_POCKET) // The fool saw nothing. Such simple larceny. SetPlayerSound(Myself,30723,EXISTANCE1) // I am concealed, though I see no need. SetPlayerSound(Myself,30724,EXISTANCE2) // My spell disrupted? Argh!! SetPlayerSound(Myself,30725,EXISTANCE3) // I prefer to attack more directly, but a trap will do for now. SetGlobal("TurnedFemale","LOCALS",0) END Which means BioWare figured a good check was to look for a combination of Global("TurnedFemale","LOCALS",{0,1}) as a toggle, combined with a gender check. Pity it is a LOCALS, so that one can't be freferenced, but it makes it easy for us - we can look at Edwin with a Gender("edwin",FEMALE) and everything can be based on that. confirmation, In EDWINJ.D IF WEIGHT #7 ~Gender(Myself,FEMALE) Global("AfterChange","LOCALS",1)~ THEN BEGIN 15 // from: SAY ~This is bad.~ [EDWINW01] /* #6921 */ IF ~~ THEN DO ~SetGlobal("AfterChange","LOCALS",2) SetGlobalTimer("DegardanSpawn","GLOBAL",86400) SetPlayerSound(Myself,61302,1) SetPlayerSound(Myself,61303,2) SetPlayerSound(Myself,61304,3) SetPlayerSound(Myself,61305,4) SetPlayerSound(Myself,61306,5) SetPlayerSound(Myself,61307,6) SetPlayerSound(Myself,61308,7) SetPlayerSound(Myself,61309,8) SetPlayerSound(Myself,61310,9) SetPlayerSound(Myself,61311,10) SetPlayerSound(Myself,61312,11) SetPlayerSound(Myself,61313,18) SetPlayerSound(Myself,61314,19) SetPlayerSound(Myself,61315,20) SetPlayerSound(Myself,61316,21) SetPlayerSound(Myself,61317,22) SetPlayerSound(Myself,61318,23) SetPlayerSound(Myself,61319,24) SetPlayerSound(Myself,61321,25) SetPlayerSound(Myself,61322,26) SetPlayerSound(Myself,61323,27) SetPlayerSound(Myself,61324,28) SetPlayerSound(Myself,-1,29) SetPlayerSound(Myself,-1,30) SetPlayerSound(Myself,-1,31) SetPlayerSound(Myself,61325,32) SetPlayerSound(Myself,61326,33) SetPlayerSound(Myself,61327,34) SetPlayerSound(Myself,61328,35) SetPlayerSound(Myself,61329,36) SetPlayerSound(Myself,61330,37) SetPlayerSound(Myself,-1,38) SetPlayerSound(Myself,-1,63) SetPlayerSound(Myself,-1,64) SetPlayerSound(Myself,61331,65) SetPlayerSound(Myself,61332,66) SetPlayerSound(Myself,61333,67) SetPlayerSound(Myself,61334,68) SetPlayerSound(Myself,61335,69) SetPlayerSound(Myself,61336,70) SetPlayerSound(Myself,61337,71) SetPlayerSound(Myself,61338,72)~ EXIT END This is when using LOCALS gets tougher to manage - cross-cre/bcs/dlg stuff is much easier when you have a GLOBAL to play with. Link to comment
berelinde Posted March 22, 2010 Share Posted March 22, 2010 You *can* do a check for Edwin's local variables, you just need to set a global in Edwin's script. Jastey and I do it so we can tell which lovetalk Anomen is on. You would put this in Edwin's script(s) IF Global("TurnedFemale","LOCALS",1) Global("c-EdwinFemale","GLOBAL",0) THEN RESPONSE #100 SetGlobal("c-EdwinFemale","GLOBAL",1) END IF Global("c-EdwinFemale","GLOBAL",1) Global("TurnedFemale","LOCALS",0) THEN RESPONSE #100 SetGlobal("c-EdwinFemale","GLOBAL",2) END After that, you've got a convenient toggle for checking Edwin's gender. Link to comment
cmorgan Posted March 22, 2010 Author Share Posted March 22, 2010 Ah, I remember, now - cool This is the same idea as setting an I_C_T with a global to see if an event has happened, though if I remember correctly you found out that the referencing script needs a "I was not in the party when it happened" backup in .bcs, closing something - If this were something that was going to be referenced a good deal, I would definitely do that. Since this is a once-in-a-game-and-under-some-pretty-tight-conditions, I had better keep the simplest script loadout possible, and forget about trying to foil the Player who decides to put a Girdle of Gender Bending on Edwin while he is a female... heh! so Gender("edwin",FEMALE) plus the regular InParty/InMyArea/CD_S_NV should be enough for the CHAIN reference in the P&T Ideas thread, and any other place I want to sprinkle these. BEDWINWO is going to get called via Interact() from Edwin, so an Interact("c-aran") should get this one riolling, though it needs a timer to make sure parties with Aerie and Aran along with Edwin don't get a sack-up. On the string reference as SAY, here is the lowdown - The string reference idea, as found in D'Arnise: Searching for a simpler way of tying back into existing dialog, I came across this construction in JCompton's D'Arnise Romance: EXTEND_BOTTOM BAERIE 201 IF ~InParty("Nalia") InMyArea("Nalia") !StateCheck("Nalia",CD_STATE_NOTVALID) Global("PGNaliaRomanceActive","GLOBAL",1)~ THEN EXTERN NALIAJ aer3 END CHAIN NALIAJ aer3 ~Now, really, Aerie, that is quite enough. These ploys for sympathy are wholly unbecoming and entirely unnecessary. I don't think you realize just how demeaning this sort of thing is, or how embarrassing it is for the rest of us!~ == BAERIE ~Ploys for sympathy? How can you say such a thing? I'm not the one who... who picked him up in a seedy bar, while crying for help! And who never misses an opportunity to remind him of everything she lost in her palace!~ == NALIAJ ~I was *not* crying! And that is hardly the same thing! Many lives were at stake then! You, Aerie... this is simple manipulation, and it's an insult to <CHARNAME>, asking him to give your life some meaning lest you throw it away.~ == NALIAJ ~If you can't use your abilities to help <CHARNAME> and help others because you can't see past the scars on... of your past, then that's your own concern.~ == BAERIE ~I don't have to listen to this! I don't! You're just as bad as anybody, Nalia, and it's arguments like this that make this awful earthbound life so terrible!~ == BAERIE ~I can't live like this anymore! I can't!~ END ++ #56288 /* ~Life down here isn't so wretched, Aerie.~ */ EXTERN BAERIE 202 ++ #56289 /* ~Well, you're going to have to accept it, Aerie. You're going to have to find the strength to face up to it.~ */ EXTERN BAERIE 203 ++ #56290 /* ~Don't say that...we'll find some way to restore your wings, I promise!~ */ EXTERN BAERIE 206 ++ #56291 /* ~If you continue to act so weak and maudlin, then I agree...you'll never survive.~ */ DO ~SetGlobal("AerieRomanceActive","GLOBAL",3)~ EXTERN BAERIE 210 The really interesting part is this leveraging of existing static game resources: END ++ #56288 /* ~Life down here isn't so wretched, Aerie.~ */ EXTERN BAERIE 202 ++ #56289 /* ~Well, you're going to have to accept it, Aerie. You're going to have to find the strength to face up to it.~ */ EXTERN BAERIE 203 ++ #56290 /* ~Don't say that...we'll find some way to restore your wings, I promise!~ */ EXTERN BAERIE 206 ++ #56291 /* ~If you continue to act so weak and maudlin, then I agree...you'll never survive.~ */ DO ~SetGlobal("AerieRomanceActive","GLOBAL",3)~ EXTERN BAERIE 210 where instead of using replication of the string or COPY_TRANS, the original string is called. This works on BGII (SoA or ToB) because the foundation for BGT and other mods uses a dialog.tlk that remains (relatively) untouched. Link to comment
Recommended Posts
Archived
This topic is now archived and is closed to further replies.