Jump to content

Search the Community

Showing results for tags 'scripting'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • General Discussion
    • G3 News and Announcements
    • Infinity Engine Modding News
    • General Mod Discussion
    • Fan Fiction
    • Noobermeet
  • Tools & Resources
    • DLTCEP
    • GemRB
    • The Gibberlings Three Debugging Suite for BG2
    • IESDP Updates and Info
    • Modding How-Tos and Tutorials
    • Modding Q&A
    • Multi-Install Tool
    • Widescreen Mod
  • Released Projects
    • Miscellaneous Released Mods
    • Ajantis
    • Alternatives
    • Amber
    • Angelo
    • Ascension
    • Auren Aseph
    • BG1 NPC Project
    • Baldur's Gate Mini Quests and Encounters
    • The Beaurin Legacy
    • BG2 Fixpack - General Discussion
    • Calin
    • The Calling
    • Cirerrek's AI Scripts
    • Coran's Friendship Mod
    • Crossmod Banter Pack
    • Divine Remix
    • Enhanced Edition Trilogy
    • Evandra
    • Full Plate & Packing Steel
    • Garrick's Infatuation
    • Gavin
    • The Gibberlings Three Anniversary Mod
    • Glam's NPC Pack
    • Icewind Dale Mod Roundup
    • Icewind Dale in Baldur's Gate II
    • Imoen 4 Ever
    • Item Randomiser
    • Item Revisions
    • IWD2 NPC Project
    • IWDification
    • Keeping Yoshimo
    • Kivan and Deheriana Companions for BG2
    • Level One NPCs
    • Mur'Neth
    • NPC Kitpack
    • NPC Strongholds
    • NPC Tweak for BG2
    • Oversight
    • Romantic Encounters (BG)
    • Romantic Encounters (BG2)
    • Sarah
    • Song and Silence
    • Spell Revisions
    • Sword and Fist
    • Sword Coast Stratagems
    • Tweaks Anthology Forum
    • Tyris Flare
    • Wheels of Prophecy
    • Yoshimo's Remorse
  • Unreleased Projects
    • Aklon
    • Balduran's Seatower
    • Baldur's Gate: Shadow Hand TC
    • Aran Whitehand
    • Delainy
    • IWD Tutu
    • Kit Revisions
    • Inactive Projects
  • NWN2 Modding
  • Mod Workrooms

Categories

  • NPCs
  • Quests and Others
  • Tweaks & Fixes
  • Items/Kits/Spells
  • Portrait Packs
  • Mini Mods
  • Tools
  • In Progress

Categories

  • Fixes
  • Items
  • Kits
  • NPCs
  • Quests
  • Spells
  • Tweaks
  • Other
  • Tools

Product Groups

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Discord


Website URL


Skype


AIM


MSN


ICQ


Yahoo


Jabber


Location


Interests


Mods Worked On

Found 17 results

  1. As you probably know, creatures currently executing an 'AttackReevaluate()' action won't switch target unless they're forced to move in order to attack their target. This is particularly relevant for ranged creatures (since unlike melee attackers they usually don't chase their target) => As a result, you need to execute a 'ClearActions(Myself)' command in order to stop 'AttackReevaluate()' and look for another valid target. The problem is that it doesn't seem to work in my case.... I'd like to summon @DavidW since he uses this technique quite often in SCS.... Sample script below: The problem is that the CRE in question keeps attacking always the same target, even if someone else is closer than the current target ('NearestEnemyOf(Myself)' is the most important target). It will switch target only after the timer "stayontarget" has expired... But SCS ranged creatures constantly switch targets (even if the timer has not expired yet). How do you manage to achieve that?
  2. Version v32

    285,660 downloads

    Sword Coast Stratagems (SCS) is a collection of more than 100 interconnected mini-mods for Baldur's Gate: Enhanced Edition, Baldur's Gate II: Enhanced Edition, Baldur's Gate: Throne of Bhaal, Baldur's Gate Trilogy, and Baldur's Gate 1TUTU. SCS is mostly a tactics and AI mod, intended to make the combats in the game more challenging and interesting. Overall, playing SCS shouldn't exactly feel like a whole new game - it should feel like the old game, but with your foes acting much more intelligently and realistically.SCS also includes a few ease-of-use features and tweaks. SCS now includes all the content from the previous "SCSII" mod. Learn more about the mod View the Readme Visit the Forum
  3. Version v2001-09-27

    1,907 downloads

    uScript or "Universal" Script is a Player AI script for BG2 SoA & ToB. It was created by Rich Martel. G3 is supplying it here, because we are unaware of any other place where it exists and some may find it useful. Please note that G3 will not be providing any support for this script or any of the other items contained in the package. Learn more about the mod View the Readme Visit the Forum
  4. Version v2

    1,253 downloads

    Like the eSeries for BG2, tSeries is a set of Player AI scripts for Planescape: Torment. The basis for these scripts comes from Gebhard Blucher's Planescape: Torment Player AI Scripts. cirerrek borrowed the scripts that he created and expanded upon them so that they are a bit more comprehensive in terms of spell usage and item usage. While the mod has been updated for the Enhanced Edition, it still uses the original PsT scripting and could be further optimized. Learn more about the mod View the Readme Visit the Forum
  5. Version v2

    988 downloads

    seqmem.bs is a little script written by cirerrek to enable a player to remember what they have stored in their minor spell sequencers, spell sequencers, and spell triggers, after a couple of days away from the game. Learn more about the mod View the Readme Visit the Forum
  6. Version v3

    789 downloads

    Cirerrek's Scriptable Spells fixes several SPCLxxx and SPINxxx spells that had their spell level incorrectly defined. The incorrect level definition would cause the game to crash when the spells were cast using the trigger HaveSpell(). The spells modified by this package are able to be scripted without causing the game to crash. Please note that Scriptable Spells is already included in the BG2 Fixpack and is not needed for the Enhanced Editions. Learn more about the mod View the Readme Visit the Forum
  7. Version v0.7 Beta

    1,042 downloads

    The iSeries is a set of very beta versions of Party AI scripts for Icewind Dale II. Learn more about the mod View the Readme Visit the Forum
  8. Version v3

    32,801 downloads

    gMinion is a series of scripts for BG2 that increase the ingame intelligence of the creatures that are summoned by Spells and Items, so that they behave more in line with the original intentions of both BioWare and more Purist D&D Roleplayers. Learn more about the mod View the Readme Visit the Forum
  9. Version v3

    5,565 downloads

    The eSeries is a collection of Party AI Scripts for Baldur's Gate II: Shadows of Amn and the expansion, Throne of Bhaal. Currently there are seven scripts included in the series: eArcher, eFighter, eMage, eMulti, ePriest, ePureF, and eThief. Learn more about the mod View the Readme Visit the Forum
  10. Set up here with inlined just for reporting here - the related .baf is an independent file. CODE ACTION_IF FILE_EXISTS_IN_GAME ~ar6111.are~ THEN BEGIN // ToB dialog file COMPILE ~aranw/dialog/c-arantobdialog.d~ // USING ~aranw/dialog/%s/setup.tra~ /* ToB Scripts */ COMPILE ~aranw/baf/c-aranx.baf~ COMPILE ~aranw/baf/c-arn25.baf~ // USING ~aranw/dialog/%s/setup.tra~ /* Epilogues : Script */ <<<<<ar6200_epilog_ext.baf /* Epilogue: PC Refused Godhood, Low Rep, regardless of friendship or romance status */ IF Global("StartEndBios","AR6200",1) InPartyAllowDead("c-aran") !Global("PlayerChoseEssence","GLOBAL",1) ReputationLT(Player1,10) Global("c-aranbio","GLOBAL",0) THEN RESPONSE #100 SetGlobal("c-aranbio","GLOBAL",1) TextScreen("C-ARANE0") SmallWait(1) Continue() END /* PC Refused Godhood, Friendship */ IF Global("StartEndBios","AR6200",1) InPartyAllowDead("c-aran") ReputationGT(Player1,9) !Global("PlayerChoseEssence","GLOBAL",1) !Global("c-aranrom","GLOBAL",2) Global("c-aranbio","GLOBAL",0) THEN RESPONSE #100 SetGlobal("c-aranbio","GLOBAL",1) TextScreen("C-ARANE2") SmallWait(1) Continue() END /* PC Refused Godhood, Romance */ IF Global("StartEndBios","AR6200",1) InPartyAllowDead("c-aran") ReputationGT(Player1,9) !Global("PlayerChoseEssence","GLOBAL",1) Global("c-aranrom","GLOBAL",2) Global("c-aranbio","GLOBAL",0) THEN RESPONSE #100 SetGlobal("c-aranbio","GLOBAL",1) TextScreen("C-ARANE3") SmallWait(1) Continue() END /* PC Became God, Friendship */ IF Global("StartEndBios","AR6200",1) InPartyAllowDead("c-aran") ReputationGT(Player1,9) Global("PlayerChoseEssence","GLOBAL",1) !Global("c-aranrom","GLOBAL",2) Global("c-aranbio","GLOBAL",0) THEN RESPONSE #100 SetGlobal("c-aranbio","GLOBAL",1) TextScreen("C-ARANE2") SmallWait(1) Continue() END /* PC Accepted Godhood, Romance, Good or Neutral */ IF Global("StartEndBios","AR6200",1) InPartyAllowDead("c-aran") Global("PlayerChoseEssence","GLOBAL",1) !GlobalGT("PPEvilChoices","GLOBAL",2) Global("c-aranrom","GLOBAL",2) Global("c-aranbio","GLOBAL",0) THEN RESPONSE #100 SetGlobal("c-aranbio","GLOBAL",1) TextScreen("C-ARANE4") SmallWait(1) Continue() END /* PC Accepted Godhood, Romance, Evil */ IF Global("StartEndBios","AR6200",1) InPartyAllowDead("c-aran") Global("PlayerChoseEssence","GLOBAL",1) GlobalGT("PPEvilChoices","GLOBAL",2) Global("c-aranrom","GLOBAL",2) Global("c-aranbio","GLOBAL",0) THEN RESPONSE #100 SetGlobal("c-aranbio","GLOBAL",1) TextScreen("C-ARANE5") SmallWait(1) Continue() END >>>>> EXTEND_TOP ~AR6200.bcs~ ~aranw/baf/ar6200_epilog_ext.baf~ /* Epilogue 1: Low Rep, regardless of friendship or romance status */ COPY ~aranw/media/blankepilogue.2da~ ~override/C-ARANE0.2da~ REPLACE_TEXTUALLY ~PORTRAIT~ ~C-ARANWL~ REPLACE 99999 ~The years of following in <CHARNAME>'s shadow took their toll on Aran, though not a single instance of him complaining is recorded. After a time, he withdrew from <PRO_HISHER> side, claiming injury, and set out for the wild coast of Maztican. Rejoining the Flaming Fist there gave him one last brush with glory - his name still graces the List of Brotherhood in the Flaming Fist training facilities there. Discovering new love with a Cleric of Sune Firehair, his sons and daughters grew up listening to bard's tales of the adventures of <CHARNAME> and <PRO_HISHER> followers, but their persistence in trying to get Aran to speak of those days went unanswered. Of <CHARNAME> <PRO_HIMHER>self, Aran refused to speak.~ /* PC Refused Godhood, Friendship */ COPY ~aranw/media/blankepilogue.2da~ ~override/C-ARANE1.2da~ REPLACE_TEXTUALLY ~PORTRAIT~ ~C-ARANWL~ REPLACE 99999 ~There are few places in history for followers and companions, and Aran was no exception. He traveled the breadth and depth of Toril in service to <CHARNAME>, often dispatched to assist other companions and causes dear to <CHARNAME>'s heart. Discovering new love with a Cleric of Sune Firehair, his sons and daughters grew up listening to bard's tales of the adventures of <CHARNAME> and <PRO_HISHER> followers. As Aran tells it, the greatest moment in Aran's life came when his eldest daughter took up the way of the sword and pledged herself to <CHARNAME>'s protection. The second best moment was when his new wife finally managed to teach him to speak with correct pronunciation (though she never did erase his swearing completely).~ /* PC Became God, Friendship */ COPY ~aranw/media/blankepilogue.2da~ ~override/C-ARANE2.2da~ REPLACE_TEXTUALLY ~PORTRAIT~ ~C-ARANWL~ REPLACE 99999 ~There are few places in history for followers and companions, and Aran was no exception. He traveled the breadth and depth of Toril in service to <CHARNAME>, often dispatched to assist other companions and causes dear to <CHARNAME>'s heart. Discovering new love with a Cleric of Sune Firehair, his sons and daughters grew up listening to bard's tales of the adventures of <CHARNAME> and <PRO_HISHER> followers. Though he never claimed worship of <CHARNAME>, his children relate that the new oaths and blasphemies used when they did something particularly right or particularly wrong seemed to indicate he was profoundly aware of <CHARNAME>'s godhood.~ /* PC Refused Godhood, Romance */ COPY ~aranw/media/blankepilogue.2da~ ~override/C-ARANE3.2da~ REPLACE_TEXTUALLY ~PORTRAIT~ ~C-ARANWL~ REPLACE 99999 ~Aran's depth of devotion to <CHARNAME> continued to grow, serving for the following years without question or complaint. Though the histories never indicate precisely the nature of their romance, there is no question of his loyalty. His final act of devotion came giving up his life in order to protect her. There are no reliable sources, but bard's tales say that his last words were "Blighted hells, <CHARNAME>... did we have to come Planewalkin' here?"~ /* PC Accepted Godhood, Romance, Good or Neutral */ COPY ~aranw/media/blankepilogue.2da~ ~override/C-ARANE4.2da~ REPLACE_TEXTUALLY ~PORTRAIT~ ~C-ARANWL~ REPLACE 99999 ~Aran's depth of devotion to <CHARNAME> continued to grow, serving as Her right hand on Faerun. His constant work furthering her causes helped develop a respectable following, and his willingness to travel anywhere in Her name led others to regard him as some sort of high priest... a notion that often was dispelled in a barrage of blasphemy and cursing. As the histories recount, his last days on this mortal plane were spent comfortably on Evermeet, attempting to arrange a joint project between the followers of <CHARNAME> and Hanali Celanil's Order of the Ruby Rose to commemorate what would have been <CHARNAME>'s eightieth mortal birth-day celebration.~ /* PC Accepted Godhood, Romance, Evil */ COPY ~aranw/media/blankepilogue.2da~ ~override/C-ARANE5.2da~ REPLACE_TEXTUALLY ~PORTRAIT~ ~C-ARANWL~ REPLACE 99999 ~Aran's depth of devotion to <CHARNAME> continued to grow, serving for the following years without question or complaint. His constant work furthering her causes eventually corrupted him completely, though later writings indicate growing fear and desolation as his mortality left him increasingly unable to serve <CHARNAME> in the manner she wished. It is a mark of their love that when a Paladin of Helm finally ended Aran's life, <CHARNAME> herself personally blasted the woman into nothingness, causing a minor skirmish in the wars of the gods.~ END /* of ToB installation */
  11. The BG2 and BGEE STATS.IDS contains these identifiers: Does anyone know what they're for? 156 SCRIPTINGSTATE1 157 SCRIPTINGSTATE2 158 SCRIPTINGSTATE3 159 SCRIPTINGSTATE4 160 SCRIPTINGSTATE5 161 SCRIPTINGSTATE6 162 SCRIPTINGSTATE7 163 SCRIPTINGSTATE8 164 SCRIPTINGSTATE9 165 SCRIPTINGSTATE10 I'm specifically looking for code that has to do with Protection from Evil, since there is nothing in STATE.IDS and only possible in STATS.IDS.
  12. in F:\TEST1\aranw\baf\c-arn25d.baf CODE /* NightTalk: Stars, Constancy Thereof */ IF Global("c-tobnightone","GLOBAL",0) OR(2) Global("c-arangoaded","GLOBAL",0) Global("c-arangoaded","GLOBAL",6) !Global("c-arannightvisit","GLOBAL",1) TimeofDay(NIGHT) AreaType(OUTDOOR) InParty(Myself) !StateCheck(Player1,CD_STATE_NOTVALID) !StateCheck(Myself,CD_STATE_NOTVALID) THEN RESPONSE #100 SetGlobal("c-tobnightone","GLOBAL",1) StartDialogueNoSet(Player1) END in F:\TEST1\aranw\dialog\c-arantobdialog.d CODE /* NightTalk: Stars, Constancy Thereof */ IF ~Global("c-tobnightone","GLOBAL",1)~ THEN BEGIN a4249 SAY ~[ARAN] Now that be a sight. Those stars seem to cover th' whole sky, or what we can see o' it.~ ++ ~[PC] I prefer to keep my eyes focused nearer to reality. The only good use for starlight is exposing your enemies when they are stupid enough to move across open terrain without cover.~ + a4250 ++ ~[PC] They do have a way of reminding us that some things never change. All we do, all we attain, all we suffer.... they just keep shining, completely untouched.~ + a4251 ++ ~[PC] They are very cold. Almost eyes, watching us, judging us, evaluating us.~ + a4251 ++ ~[PC] I think they are like small campfires, a host of ones like ours, warm in the night.~ + a4251 + ~Gender(Player1,MALE)~ + ~[PC] I think they seem like they are mocking me. Kind of like women, all shiny and sparkley, yet cold and distant.~ + a4251 + ~GlobalGT("c-aranrom","GLOBAL",0) GlobalLT("c-aranrom","GLOBAL",3) Gender(Player1,FEMALE) !HasItemEquiped("belt05",Player1)~ + ~[PC] They seem... romantic, somehow. Always there, no matter what.~ + a4251 + ~RandomNum(5,5)~ + ~[PC] They certainly have one thing going for them. They don't stand around gawking, wasting time, and blathering.~ + a3188 /* c-aranshutup55 */ + ~RandomNum(5,4)~ + ~[PC] They certainly have one thing going for them. They don't stand around gawking, wasting time, and blathering.~ + a3189 /* c-aranshutup56 */ + ~RandomNum(5,3)~ + ~[PC] They certainly have one thing going for them. They don't stand around gawking, wasting time, and blathering.~ + a3190 /* c-aranshutup57 */ + ~RandomNum(5,2)~ + ~[PC] They certainly have one thing going for them. They don't stand around gawking, wasting time, and blathering.~ + a3191 /* c-aranshutup58 */ + ~RandomNum(5,1)~ + ~[PC] They certainly have one thing going for them. They don't stand around gawking, wasting time, and blathering.~ + a3192 /* c-aranshutup59 */ END IF ~~ a4250 SAY ~[ARAN] Aye. Spoken like a true warrior. Although all killin' an' no imagination probably leaves things a mite bit dull, don't you think?~ ++ ~[PC] I don't know. There are so many fascinating and different ways to kill. Why, just think of all the possibilities acid has for creative application.~ + a4252 ++ ~[PC] True enough. I suppose a little time to see the sights is not a bad way to relax.~ + a4251 + ~OR(3) Global("c-aranrom","GLOBAL",0) Global("c-aranrom","GLOBAL",3) HasItemEquiped("belt05",Player1)~ + ~[PC] I have plenty of other thoughts to occupy my mind right now. Some of them are rather unpleasant, but so far we have come out on top. I will sleep as well as can be expected.~ + a4254 + ~GlobalGT("c-aranrom","GLOBAL",0) GlobalLT("c-aranrom","GLOBAL",3) Gender(Player1,FEMALE) !HasItemEquiped("belt05",Player1)~ + ~[PC] I have plenty of other thoughts to occupy my mind right now. Some of them are rather unpleasant, but so far we have come out on top. I will sleep as well as can be expected.~ + a4253 + ~GlobalGT("c-aranrom","GLOBAL",0) GlobalLT("c-aranrom","GLOBAL",3) Gender(Player1,FEMALE) !HasItemEquiped("belt05",Player1)~ + ~[PC] You might be right. Sometimes it is nice just to sit and think.~ + a4253 + ~RandomNum(5,5)~ + ~[PC] Given the choice between watching the stars, listening to you, and committing ritual suicide, I am pretty sure ritual suicide comes out a winner.~ + a3188 /* c-aranshutup55 */ + ~RandomNum(5,4)~ + ~[PC] Given the choice between watching the stars, listening to you, and committing ritual suicide, I am pretty sure ritual suicide comes out a winner.~ + a3189 /* c-aranshutup56 */ + ~RandomNum(5,3)~ + ~[PC] Given the choice between watching the stars, listening to you, and committing ritual suicide, I am pretty sure ritual suicide comes out a winner.~ + a3190 /* c-aranshutup57 */ + ~RandomNum(5,2)~ + ~[PC] Given the choice between watching the stars, listening to you, and committing ritual suicide, I am pretty sure ritual suicide comes out a winner.~ + a3191 /* c-aranshutup58 */ + ~RandomNum(5,1)~ + ~[PC] Given the choice between watching the stars, listening to you, and committing ritual suicide, I am pretty sure ritual suicide comes out a winner.~ + a3192 /* c-aranshutup59 */ END IF ~~ a4251 SAY ~[ARAN] They sure be beautiful. So powerful, shinin' down like that. An' so far out o' reach.~ IF ~OR(4) Global("c-aranrom","GLOBAL",0) Global("c-aranrom","GLOBAL",3) HasItemEquiped("belt05",Player1) Gender(Player1,MALE)~ THEN GOTO a4254 IF ~GlobalGT("c-aranrom","GLOBAL",0) GlobalLT("c-aranrom","GLOBAL",3) Gender(Player1,FEMALE) !HasItemEquiped("belt05",Player1)~ THEN GOTO a4253 END IF ~~ a4253 SAY ~[ARAN] You know, you look right fine lit by stars an' th' moon. I can guess why there be so many worshipers o' Selune.~ ++ ~[PC] I think I want to kiss you.~ + a3915 /* FEMALE_MOON_LEADS */ ++ ~[PC] (Impulsively clasp both hands around one of his, pulling it towards you.)~ + a3916 /* ARAN_MOON_LEADS */ ++ ~[PC] I... I am tired. Have a good night, Aran.~ + a4254 ++ ~[PC] I am not Selune. But you could worship me if you like.~ + a3918 /* ARAN_MOON_MIND */ ++ ~[PC] Hey, easy on the compliments. Friends, remember? You are starting to sound all romantic and weepy.~ + a3919 /* MOON_JUST_FRIENDS */ ++ ~[PC] Talking with you here is a nice rest from all of the day's cares. But then again, lots of things besides talking can happen beneath those little twinkling lights.~ + a3918 /* ARAN_MOON_MIND */ ++ ~[PC] You are so... stupid. And pushy. Go away and leave me in peace.~ + a3866 /* FIGHT_EXIT */ END IF ~~ a4252 SAY ~[ARAN] Talos' an' Teos' Twisted Temper... Thanks a bunch, eh? Now I'll be havin' nightmares all night.~ IF ~~ THEN GOTO a4254 END IF ~~ a4253 SAY ~[ARAN] You know, you look right fine lit by stars an' th' moon. I can guess why there be so many worshipers o' Selune.~ ++ ~[PC] I think I want to kiss you.~ + a3915 /* FEMALE_MOON_LEADS */ ++ ~[PC] (Impulsively clasp both hands around one of his, pulling it towards you.)~ + a3916 /* ARAN_MOON_LEADS */ ++ ~[PC] I... I am tired. Have a good night, Aran.~ + a4254 ++ ~[PC] I am not Selune. But you could worship me if you like.~ + a3918 /* ARAN_MOON_MIND */ ++ ~[PC] Hey, easy on the compliments. Friends, remember? You are starting to sound all romantic and weepy.~ + a3919 /* MOON_JUST_FRIENDS */ ++ ~[PC] Talking with you here is a nice rest from all of the day's cares. But then again, lots of things besides talking can happen beneath those little twinkling lights.~ + a3918 /* ARAN_MOON_MIND */ ++ ~[PC] You are so... stupid. And pushy. Go away and leave me in peace.~ + a3866 /* FIGHT_EXIT */ END IF ~~ a4254 SAY ~[ARAN] Well, I'm off. Got th' first watch anyhow. Have a dream or two for me.~ IF ~~ THEN EXIT END Anything in /* */ with existing numbers ties back into the negotiation between Aran and PC for doing stuff found in adult content.
  13. Discussion started from Aran Whitehand development - Synopsis: AreaCheck() does not cover mod added areas without specific addition AreaType() does not cover mod added areas without specific addition AreaType(CITY) was intended to cover city outdoor areas Looking for a way of getting all areas, vanilla and modded, to be able to be checked for being in a city and an inn, so that the appropriate movie can be triggered and content can be tailored and still make sense Suggestions so far: Worse: Research and create mass "MYAREA" script extensions for all such areas Better: Create and identify new AreaType()s and set them up as community resources [-cmorgan AreaType() checks fail. Keep that in mind. You will need a more robust check than AreaType(CITY) to determine where the party is sleeping and cue the appropriate cutscene. You may need to do an extensive OR() block area check for this. Just saying. I've got the code up elsewhere and can post it here if you need it.
  14. DisplayStringHead() or, classic commentary that sneaks past conversation In all of the i.e. engine games, there is a "shortcut" to side commentary - stuff that is either sotto voce or minor sidebar commentary not really worth a full interruption of the action for a full dialog treatment. This shortcut is displaying a short string, very short, over the head of the speaker, for example the *groan* and *gasp* comments in the healer's hut at the beginning of IWD2, or in its most direct usage, Lilacor's occassional comments (though that actually uses a related command, not DSH(), but you get the point. Now, at one time in i.e. moding history, everyone seemed to be in love with this usage, especially with items - a talking item, way cool! But, as things have gone on, this kind of thing in BG2 has been only used occasionally, and with some pretty specific intent. Let's look at it, though, because it could help out with some side comments and take a burden off of building a tone of little two-liner interchanges. As always, we can always turn it off via setting or unsetting a blocking variable, so players who hate this can drop the content, and folks who like it can add it in. When too Much Is Too Much Perhaps this might make it into banter territory - short and sweet. But does the party really needs to stop and hear all that? there is not much point to it, and it is scenery dialog. But this one really, really cannot be worth a single dialog box popping... or even Now, most modders don't add this stuff much - except for some cutscenes work, hardly ever. A little goes a long, long way, and frankly the game uses the same vehicle for "out-of-character pointers", so it can be distracting. Lilacor is a PITA I seldom enjoy for long, even though he is an interesting personality... or the first 5 playthroughs... So who has used this and how can we see what it is all about? BioWare™ BG2 Usage Surprisingly, according to a search of all decompiled .bcs shipped with BGII-SoA and updated to ToB, 1,398 times in .bcs. Wow. OK, there are alot of BG files included in that number, but still - a pretty darned high incidence of usage for something that is not particularly noticeable. Most of the usage is simple stuff, scenery stuff, but here are two quick samples: usage as stage direction or hint for the player This example is how the dividing troll, well, "divides". file BGII - SoA\bg2_bcs\TROLUO01.BAF IF HPLT(Myself,10) THEN RESPONSE #100 DisplayStringHead(Myself,49970) // To your horror the troll's corpse heaves, and with a violent splash two smaller trolls emerge from the body. SmallWait(1) CreateVisualEffectObject("ICCSWOUI",Myself) Wait(1) CreateCreatureObject("trollsm2",Myself,0,0,0) // Troll CreateCreatureObject("trollsm2",Myself,0,0,0) // Troll CreateVisualEffectObject("ICCSWOUI",Myself) DestroySelf() END usage as scenery dialog not worthy of a conversation Here, the Beastmaster in the Gladiator pits bemoans the loss of his companion, without pausing to interrupt the combat with a long banter and digressive diatribe about the fundamental unfairness of clobbering an animal with an automatic rifle instead of using nature's equipment and taking her on with just your own bare hands, followed by a small eulogy, while for some reason all combat ceases and people chat about waiting for the fight to restart: file BGII - SoA\bg2_bcs\BEAST.BAF IF See([PC]) Dead("Tabitha") !StateCheck(Myself,STATE_CHARMED) Global("cry","LOCALS",0) THEN RESPONSE #100 DisplayStringHead(Myself,2544) // My Tabitha...loyal to the end. Your death I shall avenge, on that I swear. Enemy() SetGlobal("cry","LOCALS",1) END and of course, the usage for our favorite talking sword, in baldur.bcs NOTE: [DON'T DO THIS EVAR EVAR EVVVVARRRRRR!!!! You had better know your crap thoroughly before you mess with the master script, or you risk really messing up the game for EVERYONE... way not cool... and it runs all the time, and a big baldur.bcs slows everything down, so even if you don't screw it up, you slow down everyone else whether your mod is active or not, or the player is using your content or not - you basically just added a permanent ankle weight to the whole game, so it had better be absolutely necesssary and bloody well worth it, too. Use multiple area scripts with checks for your content being active. Use your NPC script. Heck, use whatever you can figure, and if you can't figure it out, ask every modder you have ever heard of. Seriously. Even if you weight it correctly, and set an immediate blocking variable like InParty("myNPC"). Sorry, rant over. ] file BGII - SoA\bg2_bcs\BALDUR.BAF, the related "DisplayStringHeadOwner()", so that if an item is equipped it will DSH() on the actor... IF Delay(600) CombatCounter(0) OR(6) HasItemEquipedReal("sw2h14",Player1) // Lilarcor HasItemEquipedReal("sw2h14",Player2) // Lilarcor HasItemEquipedReal("sw2h14",Player3) // Lilarcor HasItemEquipedReal("sw2h14",Player4) // Lilarcor HasItemEquipedReal("sw2h14",Player5) // Lilarcor HasItemEquipedReal("sw2h14",Player6) // Lilarcor THEN RESPONSE #10 DisplayStringHeadOwner("sw2h14",20580) // I may be an intelligent sword, but I've had no formal edumication. RESPONSE #10 DisplayStringHeadOwner("sw2h14",20779) // Can we go kill something now, huh? RESPONSE #10 DisplayStringHeadOwner("sw2h14",20780) // How about now? No? RESPONSE #10 DisplayStringHeadOwner("sw2h14",20956) // Come on let's kill something NOW! RESPONSE #10 DisplayStringHeadOwner("sw2h14",24939) // mmmm.... now? RESPONSE #10 DisplayStringHeadOwner("sw2h14",25349) // What about now? RESPONSE #10 DisplayStringHeadOwner("sw2h14",31258) // Now? Please? Pretty please? RESPONSE #10 DisplayStringHeadOwner("sw2h14",31259) // I don't know what you were expecting, but as a sword I'm pretty one-dimensional in what I want. RESPONSE #10 DisplayStringHeadOwner("sw2h14",31260) // Can we go whack something now? RESPONSE #10 DisplayStringHeadOwner("sw2h14",31638) // Let's whack something eeeeevvvvillllll.... RESPONSE #10 DisplayStringHeadOwner("sw2h14",31639) // Why don't we go kill that over there? RESPONSE #10 DisplayStringHeadOwner("sw2h14",31640) // You know, I was a Moonblade once. RESPONSE #10 DisplayStringHeadOwner("sw2h14",31641) // You really need to clean me. I like to shine! RESPONSE #10 DisplayStringHeadOwner("sw2h14",31646) // Are we going to kill something now, maybe? Huh? RESPONSE #10 DisplayStringHeadOwner("sw2h14",31649) // You know, my last owner always said I was sharp and edgy. He was such an ass. RESPONSE #10 DisplayStringHeadOwner("sw2h14",31651) // I don't chop wood. I am not an axe. RESPONSE #10 DisplayStringHeadOwner("sw2h14",31652) // Now! Now! Kill something now!! Yeah! RESPONSE #10 DisplayStringHeadOwner("sw2h14",31654) // Booooo-ring! RESPONSE #10 DisplayStringHeadOwner("sw2h14",31655) // (sigh) RESPONSE #10 DisplayStringHeadOwner("sw2h14",31656) // (double sigh) RESPONSE #10 DisplayStringHeadOwner("sw2h14",6433) // Wanna go kill that over there? C'mon, let's kill somthin'! END IF Delay(125) !CombatCounter(0) OR(6) HasItemEquipedReal("sw2h14",Player1) // Lilarcor HasItemEquipedReal("sw2h14",Player2) // Lilarcor HasItemEquipedReal("sw2h14",Player3) // Lilarcor HasItemEquipedReal("sw2h14",Player4) // Lilarcor HasItemEquipedReal("sw2h14",Player5) // Lilarcor HasItemEquipedReal("sw2h14",Player6) // Lilarcor THEN RESPONSE #10 DisplayStringHeadOwner("sw2h14",839) // You deal, I'll cut! RESPONSE #10 DisplayStringHeadOwner("sw2h14",844) // Let's see what's inside this one! Yeah! RESPONSE #10 DisplayStringHeadOwner("sw2h14",849) // Come get some! Boo-yah! RESPONSE #10 DisplayStringHeadOwner("sw2h14",869) // Choke up, dolt, your grip is all wrong! RESPONSE #10 DisplayStringHeadOwner("sw2h14",2308) // Hands up, kiddies, who wants to die?! RESPONSE #10 DisplayStringHeadOwner("sw2h14",2389) // Mmmm... tastes like chicken! RESPONSE #10 DisplayStringHeadOwner("sw2h14",4393) // Sissy fighter! You grab, I'll scratch! RESPONSE #10 DisplayStringHeadOwner("sw2h14",31659) // Muwahahaha-ha-ha!! RESPONSE #10 DisplayStringHeadOwner("sw2h14",31660) // You can't be serious! RESPONSE #10 DisplayStringHeadOwner("sw2h14",7908) // Ooo, that'll leave a mark! RESPONSE #10 DisplayStringHeadOwner("sw2h14",8480) // Murder! Death!! KILL!!! RESPONSE #10 DisplayStringHeadOwner("sw2h14",9687) // Who's your daddy! RESPONSE #10 DisplayStringHeadOwner("sw2h14",9800) // We got a gusher! RESPONSE #10 DisplayStringHeadOwner("sw2h14",10725) // Are YOU talking to ME?!! RESPONSE #10 DisplayStringHeadOwner("sw2h14",11255) // Some of my finest work! RESPONSE #10 DisplayStringHeadOwner("sw2h14",12671) // I'm the best at what I do, and what I do ain't pretty! RESPONSE #10 DisplayStringHeadOwner("sw2h14",31662) // Yeah! Hit it! Hit it again! RESPONSE #10 DisplayStringHeadOwner("sw2h14",31663) // I am invincible! Invincible, I say! RESPONSE #10 DisplayStringHeadOwner("sw2h14",32426) // Wouldn't it be cool if you could dual-wield me? RESPONSE #10 DisplayStringHeadOwner("sw2h14",19304) // YOINK! Got yer nose! RESPONSE #10 DisplayStringHeadOwner("sw2h14",19441) // My brother is a +12 Hackmaster! RESPONSE #10 DisplayStringHeadOwner("sw2h14",19638) // I love the smell of daisies in the morning! RESPONSE #10 DisplayStringHeadOwner("sw2h14",20059) // Swing harder! Swing harder!! RESPONSE #10 DisplayStringHeadOwner("sw2h14",20396) // Bring 'em on! I ain't done! RESPONSE #10 DisplayStringHeadOwner("sw2h14",20457) // Oh yeah! RESPONSE #10 DisplayStringHeadOwner("sw2h14",31658) // Let's dance! RESPONSE #10 DisplayStringHeadOwner("sw2h14",34689) // Kill it! Kill it quick before they're all gone! RESPONSE #10 DisplayStringHeadOwner("sw2h14",36145) // Kill kill kill! Yeah! Cool!! RESPONSE #10 DisplayStringHeadOwner("sw2h14",41815) // ...and this one's for grandma, who said I'd never amount to anything more than a butterknife!! RESPONSE #10 DisplayStringHeadOwner("sw2h14",6434) // Hot butta! RESPONSE #10 DisplayStringHeadOwner("sw2h14",6435) // You feel lucky, punk? RESPONSE #10 DisplayStringHeadOwner("sw2h14",6441) // Oooh, I'm shaking! Haha! RESPONSE #10 DisplayStringHeadOwner("sw2h14",6442) // Oooh, throw a coin in that fountain! Hahaha! END Well, ok, what about mods? One of my favorite ones uses it in a way that I would not consider - I would rather some of Tashia's stuff was actually set up as dialog or banters, but some of them are pretty enjoyable as throw-away lines: I like her flirting, with some cool one-liner put-downs, using a random response and resetting the LOCALS value to zero for a new cycle - pretty darned cool, since they are one-liners, and don't need a bunch of responses: IF Global("DoFlirt","LOCALS",5) THEN RESPONSE #10 SetGlobal("DoFlirt","LOCALS",0) DisplayStringHead(Player1,@280) // Excusez-moi, je... sans vouloir vous offenser... mais vous êtes un de ces étrangers dont tout le monde parle, n'est-ce pas ? Un aventurier venu du nord ? RESPONSE #10 SetGlobal("DoFlirt","LOCALS",0) DisplayStringHead(Player1,@281) // Le parchemin de Helm dispara”t avec la destruction de l'avatar de Démogorgon. RESPONSE #10 SetGlobal("DoFlirt","LOCALS",0) DisplayStringHead(Myself,@282) // P-par pitié, ne me faites pas de mal ! Je... je suis venu vous voir parce que j'ai entendu parler de votre grand pouvoir, étranger. Vous... vous êtes bien un aventurier venu du nord, n'est-ce pas ? RESPONSE #10 SetGlobal("DoFlirt","LOCALS",0) DisplayStringHead(Player1,@283) // RESPONSE #10 SetGlobal("DoFlirt","LOCALS",0) DisplayStringHead(Player1,@284) // RESPONSE #10 SetGlobal("DoFlirt","LOCALS",0) DisplayStringHead(Player1,@285) // Mais oui, bien sûr. Tout le monde peut voir que vous êtes un homme extraordinaire, pardonnez-moi. RESPONSE #10 SetGlobal("DoFlirt","LOCALS",0) DisplayStringHead(Player1,@286) // Et toi, tu dois être celui dont parlait le garçon près du cimetière. RESPONSE #10 SetGlobal("DoFlirt","LOCALS",0) DisplayStringHead(Player1,@287) // On vous a parlé de moi ? Oui, c'est vrai que c'est une petite ville. Et à l'écart de tout, c'est-ce que j'ai pensé... suffisamment pour que personne ne me trouve ici. Quelle grossière erreur ! RESPONSE #10 SetGlobal("DoFlirt","LOCALS",0) DisplayStringHead(Player1,@288) // C'est une aubaine que quelqu'un d'aussi puissant que vous soit venu dans ce coin perdu. Je pensais qu'Amkethran serait suffisamment loin de tout pour que personne ne m'y trouve, mais je me trompais ! RESPONSE #10 SetGlobal("DoFlirt","LOCALS",0) DisplayStringHead(Player1,@289) // Je ne veux pas vous importuner, étranger, mais je cours un très grave danger ! J'ai besoin de votre aide ! J'implore de vous une faveur, messire, sinon ma fille et moi allons sûrement mourir ! END Where I disagree with the usage is when there are several lines passed back and forth. Not the ones that might be mini-banters, like this funny little jibing of Jaheira's snoring: IF InParty(Myself) PartyRested() AreaType(DUNGEON) See("Jaheira") InParty("Jaheira") !Global("SnoreJaheira","GLOBAL",1) THEN RESPONSE #100 SetGlobal("SnoreJaheira","GLOBAL",1) DisplayStringHead(Myself,@123) // No such index Wait(3) DisplayStringHead("Jaheira",@124) // No such index Wait(3) DisplayStringHead(Myself,@125) // No such index Wait(3) DisplayStringHead("Jaheira",@126) // No such index Wait(3) DisplayStringHead(Myself,@127) // No such index END but the ones where Player1 is scripted the response. I hate that. Even for one liners, if there is going to be a reply, unless Player1 has been brainsucked and dominated, there really is no reason I can think of to not give the player some choice. I like this sequence in-game, but then, I like Tashia and I like those responses. But I play certain types of characters. I would rather have choices to match more roleplaying options. One I would rewrite as a banter: IF Global("SleepComment","LOCALS",3) THEN RESPONSE #100 SetGlobal("SleepComment","LOCALS",0) SetGlobal("PillowTalk","LOCALS",1) StartCutSceneMode() MoveViewObject("Tashia",INSTANT) FaceObject(Player1) DisplayStringHead(Myself,@77) // No such index Wait(3) DisplayStringHead(Myself,@78) // No such index Wait(2) DisplayStringHead(Player1,@79) // No such index Wait(2) DisplayStringHead(Myself,@80) // No such index Wait(2) DisplayStringHead(Player1,@81) // No such index Wait(2) DisplayStringHead(Myself,@82) // No such index Wait(3) DisplayStringHead(Myself,@83) // No such index EndCutSceneMode() END The most common mod usage is for combat script, like this snippet of Amber that gives a potion to a fellow player if the conditions are right (Comments by Darios): // ********************************************************************** // * Segment Name: dai_AmberHealLIPotions.baf // ********************************************************************** //Pass a potion to the Love Interest - this may not always work due to IE limitations //This is triggered by a 2001call from DPLAYER3.BCS or from gs_2001Call.baf //Works for both PCS and non-PCS parties //If Amber has a potion..... problem is, this will make her pass all potions of type //This is an IE limitation: GiveItem always gives all items of the specified type //Superior healing IF ActionListEmpty() !CombatCounter(0) Heard(Player1,2001) Global("M#AmberRomanceActive","GLOBAL",2) Global("M#AmberMatch","GLOBAL",1) !StateCheck(Player1,STATE_OUT_OF_ACTION) !HasItem("potn08",Player1) !HasItem("potn52",Player1) !HasItem("potn55",Player1) HasItem("potn55",Myself) THEN RESPONSE #100 GiveItem("potn55",Player1) DisplayStringHead(Myself,@58) // Quickly, my love! Drink this! END All these can get the job done written into the .baf files. Just check which versionn of WeiDU you are using - up until recently, you *had* to add USING to your traification stuff with compiling .baf files, even if you used AUTO_TRA. I am not sure if it is necesary now, but I will have to wait a bit to test or get comments, so it is probably safest to use COMPILE ~mybaf.baf~ USING ~mybaf.tra~ DisplayStringHead(Myself,~They at least no is wuss around here.~) DisplayStringHead(Myself,%They at least no is wuss around here.%) DisplayStringHead(Myself,@247) /* or, if there already is a string reference to use, */ DisplayStringHead(Myself,46150) // quaffs a potion You can also call an entire conversation this way, back and forth. Take a look at these two cool blocks from Zrayen's "Beyond The Law". This one kicks the party hard (though safer action is to kick them out of the party and then set them as enemies) if the script sees the listed conditions: // If the PC attacks Brega or Bylanna or Prelate Radiant Heart IF OR(2) InParty("Kiyone") InParty("Kova") OR(8) Allegiance("habrega",ENEMY) Allegiance("bylanna",ENEMY) Allegiance("hprelate",ENEMY) Allegiance("Z#ARDEL",ENEMY) Allegiance("Z#Baev",ENEMY) Dead("hprelate") Dead("bylanna") Dead("habrega") THEN RESPONSE #100 DisplayStringHead("Kiyone", @804) DisplayStringHead("Kova", @805) ActionOverride("Kiyone", Enemy()) ActionOverride("Kova", Enemy()) END and this one does a randomly different statement when it is run: IF GlobalGT("GovtMeetGuards","GLOBAL",3) THEN RESPONSE #10 SetGlobal("GovtMeetGuards","GLOBAL",2) DisplayStringHead("Kiyone", @810) ReputationInc(-1) RESPONSE #10 SetGlobal("GovtMeetGuards","GLOBAL",2) DisplayStringHead("Kiyone", @811) ReputationInc(-1) RESPONSE #10 SetGlobal("GovtMeetGuards","GLOBAL",2) DisplayStringHead("Kiyone", @812) ReputationInc(-1) END Chloe uses it to inform the player that they have Transgressed Against The Will Of God (Or At Least The Modder) by trying to use Chloe's special item: // FIRE FIRE FIRE!! Hehehehe, FIRE, yeah FRY 'EM! // SW 1 IF !HasItemEquiped("CHLOSW1","Chloe") HasItemEquiped("CHLOSW1",Player1) THEN RESPONSE #100 DisplayStringHead(Player1,~Only a chosen of Akadia can wield this weapon. You have commited sacriledge~) CreateVisualEffectObject("SPSCHGI",Player1) CreateVisualEffectObject("SPHOLYWD",Player1) CreateVisualEffectObject("SPHOLYMT",Player1) CreateVisualEffectObject("SPGENHLA",Player1) CreateVisualEffectObject("SKYBOLT",Player1) CreateVisualEffectObject("SPFIREPI",Player1) CreateVisualEffectObject("SPFIRSDI",Player1) ActionOverride(Player1,ReallyForceSpell(Player1,WIZARD_FIREBALL)) Kill(Player1) END (Hey, put a half-crazy god-child in your party and take her stuff, and I guess you really get what you deserve, even if it is a game killing TKO... I reallyy hope you saved. You did save, didn't you...) Opportunities for Aran Well, there are some things that really don't need much. I have some odd things here and there for fun, like this one, which could be dropped from a single line called in dialog to a simple one liner DSH(): in .baf /* Shade Lord (Darios) */ IF Killed([0.UNDEAD.SHADOW.SHADOW.0.FEMALE]) // Shade Lord Global("c-silencearan","GLOBAL",0) Global("c-aranshadelord","LOCALS",0) OR(2) AreaCheck("AR1400") // Temple ruins AreaCheck("AR1404") // Temple ruins restored InParty(Myself) !StateCheck(Myself,CD_STATE_NOTVALID) !StateCheck(Player1,CD_STATE_NOTVALID) THEN RESPONSE #100 SetGlobal("c-aranshadelord","LOCALS",1) END in .d /* Shade Lord (Darious) */ IF ~Global("c-aranshadelord","LOCALS",1) Global("c-silencearan","GLOBAL",0)~ THEN BEGIN c-aranshade1 SAY ~[ARAN] Ah, light! Lathandar's Luminated Lamp, that's a right fine thing to see. I was beginnin' to think we'd never see naught but shadow, darkness, an' death.~ IF ~~ THEN DO ~SetGlobal("c-aranshadelord","LOCALS",2) SetGlobalTimer("c-aransmalltalk","GLOBAL",300)~ EXIT END becomes /* Shade Lord (Darios) */ IF Killed([0.UNDEAD.SHADOW.SHADOW.0.FEMALE]) // Shade Lord Global("c-silencearan","GLOBAL",0) Global("c-aranshadelord","LOCALS",0) OR(2) AreaCheck("AR1400") // Temple ruins AreaCheck("AR1404") // Temple ruins restored InParty(Myself) !StateCheck(Myself,CD_STATE_NOTVALID) !StateCheck(Player1,CD_STATE_NOTVALID) THEN RESPONSE #100 DisplayStringHead(Myself,~Ah, light! Lathandar's Luminated Lamp, that's a right fine thing to see. I was beginnin' to think we'd never see naught but shadow, darkness, an' death.~) SetGlobal("c-aranshadelord","LOCALS",1) SetGlobalTimer("c-aransmalltalk","GLOBAL",300) END Or what about exchanges that are too short for dialog? /* Korgan Doppleganger */ IF See([0.0.DOPPLEGANGER]) Global("c-silencearan","GLOBAL",0) Global("c-arandopple","LOCALS",0) InParty(Myself) !StateCheck(Myself,CD_STATE_NOTVALID) !StateCheck(Player1,CD_STATE_NOTVALID) InParty("korgan") !StateCheck("korgan",CD_STATE_NOTVALID) !StateCheck("korgan",CD_STATE_NOTVALID) THEN RESPONSE #100 DisplayStringHead("korgan",~That be one ugly bastard.~) Wait(2) DisplayStringHead(Myself,~Hey! He looks just like me!~) Wait(2) DisplayStringHead("korgan",~That's what I said.~) Wait(2) SetGlobal("c-aranarandopple","LOCALS",1) SetGlobalTimer("c-aransmalltalk","GLOBAL",300) END Or perhaps something for the ladies in service... /* ..And Your Beady Little Eyes on the Road Ahead (10 points for song reference) */ IF CombatCounter(0) Global("c-silencearan","GLOBAL",0) See("kpmaid01") Global("c-aranchanelle","LOCALS",0) InParty(Myself) !StateCheck(Myself,CD_STATE_NOTVALID) !StateCheck(Player1,CD_STATE_NOTVALID) THEN RESPONSE #100 DisplayStringHead(Myself,~Well, now, you are a pretty lass...~) Wait(2) DisplayStringHead("kpmaid01",~Watch those hands, sirrah.~) Wait(2) SetGlobal("c-aranchanelle","LOCALS",1) SetGlobalTimer("c-aransmalltalk","GLOBAL",300) END Or even a minor interlude with a friend... /* Childish Jokes Are Almost Always Funny */ IF Global("c-silencearan","GLOBAL",0) OR(2) GlobalGT("c-arananomen","LOCALS",0) // banter fired, needs G<>L check GlobalGT("c-anomenaran","LOCALS",0) // banter fired, needs G<>L check Global("c-arananomenf","LOCALS",0) InParty(Myself) !StateCheck(Myself,CD_STATE_NOTVALID) !StateCheck(Player1,CD_STATE_NOTVALID) InParty("anomen") !StateCheck("anomen",CD_STATE_NOTVALID) !StateCheck("anomen",CD_STATE_NOTVALID) THEN RESPONSE #100 DisplayStringHead(Myself,~*BUUURRPPPP*~) Wait(2) DisplayStringHead("anomen",~Control yourself, Whitehand. That is churlish behavior.~) Wait(2) DisplayStringHead(Myself,~Sir, Yes Sir. No more loud burpin', Sir.~) Wait(3) DisplayStringHead(Myself,~*fffbbbbbt*~) Wait(2) SetGlobal("c-arananomenc","LOCALS",1) SetGlobalTimer("c-aransmalltalk","GLOBAL",300) END This just might have some possibilities.
  15. Lots of tutorials out there, I think, on DreamTalks, hassles with Dream Timers, and all sorts of stuff, so this will probably be more of a "post the talks and be done with it". The easiest - a straightforward "on waking, outside, after Underdark". .bcs, .dlg, and PartyRested(). No need t=for the DreamScript, C-ARAJD, as that script only runs at rest - and since there is no before-rest | after-rest pairing, this one is a straightforward one. c-aran.baf addition: /* On waking banter, after Underdark : bcs */ IF InParty(Myself) Global("c-aranwakeup","LOCALS",0) Global("Chapter","GLOBAL",6) CombatCounter(0) !StateCheck(Myself,CD_STATE_NOTVALID) InMyArea(Player1) !StateCheck(Player1,CD_STATE_NOTVALID) PartyRested() // this one makes it immediately after rest !RealGlobalTimerNotExpired("c-aransmalltalk","GLOBAL") // not while smalltalk timer is still running, so we don't load up OR(2) AreaType(OUTDOOR) AreaType(FOREST) !AreaType(DUNGEON) THEN RESPONSE #100 SetGlobal("c-aranwakeup","LOCALS",1) RealSetGlobalTimer("c-aransmalltalk","GLOBAL",300) PlaySong(0) PlaySound("c-aranft") StartDialogNoSet(Player1) END c-aranj.d addition, two possibilities - waking up during day, or waking up during night /* On waking banter, after Underdark : dlg */ IF ~Global("c-aranwakeup","LOCALS",1) TimeOfDay(DAY)~ c_nice_to_see_day SAY ~[ARAN] Birds. Daylight. Sunrise. Blighted hells, it be nice to stretch out after a real sleep, an' see th' sky...~ IF ~~ THEN DO ~SetGlobal("c-aranwakeup","LOCALS",2)~ GOTO c_we_made_it END IF ~Global("c-aranwakeup","LOCALS",1) TimeOfDay(NIGHT)~ c_nice_to_see_night SAY ~[ARAN] Stars. Breezes. Selune Herself, shinin' down. Blighted hells, it be nice to stretch out after a real sleep, an' see th' sky...~ IF ~~ THEN DO ~SetGlobal("c-aranwakeup","LOCALS",2)~ GOTO c_we_made_it END IF ~~ c_we_made_it SAY ~[ARAN] for awhile there, I thought we might never get topside again. I did not relish th' thought o' endin' up stuck down in th' Underdark permanent-like.~ ++ ~[PC] Oh, it wasn't so bad. At least we knew almost everything we met was just waiting for a chance to kill us.~ + c_like_they_arent_now ++ ~[PC] The classic Whitehand juxtaposition - say something nice, but add a swear word or two strong enough to blister the ears of young children.~ + c_beautiful_words ++ ~[PC] Good, you are up. Get some food going, fast. I am starving!~ + c_and_not_fungus + ~Global("c-aranrom","GLOBAL",2) Global("c-aransex","GLOBAL",1)~ + ~[PC] Hey, I am not done with you yet. I still have some unattended romantic business to finish...~ + c_going_to_kill_me ++ ~[PC] Shhh. Not so loud. I am going back to sleep for awhile.~ + c_get_up END IF ~~ c_like_they_arent_now SAY ~[ARAN] We don't have to be in Underdark for that to be true, eh? If danger be th' spice o' life, then I think you be cayenne, paprikea, an' burnin' oil all rolled into one!~ IF ~~ THEN GOTO c_get_up END IF ~~ c_beautiful_words SAY ~[ARAN] Fervent feelin's fill foul phrases full, eh? I guess I should o' said "Mystra's Tears", or "Lathander's Smile", or some such.~ IF ~~ THEN GOTO c_get_up END IF ~~ c_and_not_fungus SAY ~[ARAN] Praise be to th' gods, we don't have to worry about no strange creatures showin' up in th' food, an' there be not a mushroom or fungus in sight. Real meal, an' open air.~ IF ~~ THEN GOTO c_get_up END IF ~~ c_going_to_kill_me SAY ~[ARAN] Good gods, woman. You are like to kill me. We can always stop for a mite later, but we'd best be movin' on.~ IF ~~ THEN GOTO c_get_up END IF ~~ c_get_up SAY ~[ARAN] Now, pop right out o' that there bedroll, <CHARNAME>... my cookin' muscles have been all cramped down underground. I can feel a first-class meal comin' on. An' I be in th' mood for a right fine <DAYNIGHT> o' travel an' adventure!~ IF ~~ THEN EXIT END Taking ideas for expansion, but sometimes short and sweet is all the scenery dialog you need. Reminders to self - Classic Modder Mixups to recheck in main files - Posible Mismatches: SCOPE. we set a timer on each fun talk and flirt that tries to space out potential scenery dialog/ fun talks so that you don't end up with several becoming evaluated true at the same time. Some places that tend to load up include the start of every major area, and every chapter, so there is a talk-fest and then not so much. But, is it consistent in its usage? we need to recheck RealSetGlobalTimer("c-aransmalltalk","GLOBAL",300) <-> !RealGlobalTimerNotExpired("c-aransmalltalk","GLOBAL") as a pairing, because if we use the game time timers on either side of this in other code, it will not do what we want it to do. Same with variables - edited above code just now because I set a LOCALS and closed a GLOBAL, which will not work quite as intended... Global("c-aranwakeup","LOCALS",0) <-> SetGlobal("c-aranwakeup","LOCALS",1)
  16. 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...
  17. I had an idea about color/background dialogue replies that took into account party spells cast, items, and such - throwaway one-line loops that give players a sense of "awareness" in Aran. It turns out that JCompton as already tread this road before - in his Infinity Modding Iron Chef im7 entry is a great example of a straightforward quest encounter, with resolution through party-supplied items. The code is pretty straightforward (and by that, I mean good, because simple = less likely to break) - IF ~~ gotitem SAY ~Yes! That will be perfect! Thank you!~ = ~Now... do I have everything I might need to face him?~ ++ ~This sounds expensive. Forget it.~ + busy + ~PartyHasItem("potn43") Global("FionaInsight","GLOBAL",0)~ + ~I have this Potion of Insight, might that serve as a source of inspiration?~ DO ~AddexperienceParty(3000) SetGlobal("FionaInsight","GLOBAL",1) TakePartyItemNum("POTN43",1) ~ + gotitem + ~CheckStatGT(Player1,14,WIS) Global("FionaInsight","GLOBAL",0)~ + ~You say your spell brought you to me? Perhaps hearing the tale of my own triumphs over adversity will inspire you.~ DO ~AddexperienceParty(3500) SetGlobal("FionaInsight","GLOBAL",1)~ + inspirestory + ~PartyHasItem("belt06") Global("FionaStrength","GLOBAL",0)~ + ~I have a belt which grants the strength of a hill giant, will that do?~ DO ~AddexperienceParty(3000) TakePartyItemNum("belt06",1) SetGlobal("FionaStrength","GLOBAL",1)~ + gotitem + ~PartyHasItem("belt07") Global("FionaStrength","GLOBAL",0)~ + ~I have a belt which grants the strength of a stone giant, will that do?~ DO ~AddexperienceParty(3000) TakePartyItemNum("belt07",1) SetGlobal("FionaStrength","GLOBAL",1)~ + gotitem + ~PartyHasItem("belt08") Global("FionaStrength","GLOBAL",0)~ + ~I have a belt which grants the strength of a frost giant, will that do?~ DO ~AddexperienceParty(3000) TakePartyItemNum("belt08",1) SetGlobal("FionaStrength","GLOBAL",1)~ + gotitem + ~PartyHasItem("belt11") Global("FionaStrength","GLOBAL",0)~ + ~I have a belt which grants the strength of a fire giant, will that do?~ DO ~AddexperienceParty(3000) TakePartyItemNum("belt11",1) SetGlobal("FionaStrength","GLOBAL",1)~ + gotitem + ~InParty("Minsc") !Dead("Minsc") Global("FionaStrength","GLOBAL",0)~ + ~A source of strength? Hmmm. I have an idea so crazy it just might work. Minsc, would you let Fiona hold Boo for a moment?~ DO ~SetGlobal("FionaStrength","GLOBAL",1) AddexperienceParty(3500)~ EXTERN MINSCJ holdboo + ~PartyHasItem("SW1H51") Global("FionaPower","GLOBAL",0)~ + ~You may have Celestial Fury. It is a blade of unprecedented power.~ DO ~AddexperienceParty(3000) TakePartyItemNum("sw1h51",1) SetGlobal("FionaPower","GLOBAL",1)~ + gotitem + ~PartyHasItem("staf11") Global("FionaPower","GLOBAL",0)~ + ~Though we fought hard to obtain it, take the Staff of the Magi. Surely, it is powerful enough for your needs.~ DO ~AddexperienceParty(3000) TakePartyItemNum("staf11",1) SetGlobal("FionaPower","GLOBAL",1)~ + gotitem + ~PartyHasItem("hamm09") Global("FionaPower","GLOBAL",0)~ + ~Crom Faeyr is a hammer of enormous power. May it serve you well.~ DO ~AddexperienceParty(3000) TakePartyItemNum("hamm09",1) SetGlobal("FionaPower","GLOBAL",1)~ + gotitem + ~CheckStatGT(Player1,14,CHR) Global("FionaPower","GLOBAL",0)~ + ~You say you need a source of great power? I don't think so. All the power you need is already in your own heart and spirit, which must be formidable indeed for you to have endured years of torture without giving up hope.~ DO ~SetGlobal("FionaPower","GLOBAL",1) AddexperienceParty(3500)~ + powerstory ++ ~Let me come back later, I may have what you need then.~ DO ~AddJournalEntry(@99,QUEST)~ + comeback IF ~Global("FionaInsight","GLOBAL",1) Global("FionaStrength","GLOBAL",1) Global("FionaPower","GLOBAL",1)~ + haveitall END So, in this case, JCompton has decided that as part of the quest/encounter, the player can swap out specific items for experience as a payment for resolving Fiona's quest. For materials other than quests, or reactions to the party having items that might be worthy of comment by a party (either for good or ill), the standard or "traditional" way of doing this is using the script (.bcs) to trigger. Some mods, like Saerileth, take this to extremes by adding things like this to baldur.bcs, therefore loading down scripts when the player has a big bag of holding - the master script continually checks the party, and all of the containers with the party, for the item: IF PartyHasItem("AnObjectionableEvilItem") // no global set, so that it checks every script cycle THEN RESPONSE #100 SetGlobal("PartyHasEvilItemIWantToDestroyOrWillLeaveImmediately","GLOBAL",1) StartDialogNoSet(Player1) END SIDE NOTE: DavidW has suggested a cool idea using LOCALS and timers to run these checks on a longer cycling, reducing script lag. It works well, as it still checks regularly - just not every single script cycle. In the dialog, there is a matching state that complains about the object to the PC, and sets reactions accordingly. For example, Chloe's script detects misuse of her swords, and smites the player. Other modders have chosen less restrictive paths. Amber, for example, refuses to use certain items, but it runs in her script, and does not mess with what others in the party are using or what is in the bag of holding. I think we can safely add some nice scenery stuff for all players using the "traditional" approach, for a few (less than 5) of the big, big items. Heck, we might even use this in his .bcs as a way of tailoring weaponry or equipment to match his class when the player first spawns him, if we want: in dialog, or in .bcs, it runs about the same: .baf entry for "upgrading" a weapon IF Global("c-weaponcheck","GLOBAL",0) HasItem("weapon1","c-aran") CheckStatGT(Player1,11,LEVEL) THEN RESPONSE #50 TakeItemReplace("weapon2","weapon1","c-aran") SetGlobal("c-weaponcheck","GLOBAL",1) THEN RESPONSE #50 TakeItemReplace("weapon3","weapon1","c-aran") SetGlobal("c-weaponcheck","GLOBAL",1) END In this example, we leverage both the use of CheckStatGT() | HasItem(), and the random RESPONSE block, so that sometimes Aran shows up with Weapon 2, sometimes Weapon 3 (Check Beyond The Law and other mods by Z and you will see good examples of this kind of .bcs block leverage). But dialogue between people does not always work with such constraint that you immediately walk up to a friend and say "Yo. Big ugly evil thing in your hands. Drop it, or I am outta here." (Well, perhaps that is an overstatement, and perhaps you do. But I am unaccustomed to the blunt, direct, rude conversation depicted in that kind of scenario - it is more likely to be "Cmorgan! Great to see you!" <3 minutes of trivia smalltalk> "You know, I think you are a good friend, and I just have to mention... that thing you said to the principal? I am glad you have tenure! Because if I said it, my non-tenured bottom would have been bounced right out of the school!". Unless it is a pickup line, like this, I think in a more natural conversation, you might sidecomment on gear or something, and then be back in the regular conversation, more like this: or for the dudes, Good game designers know to avoid this kind of sidetracking. It is a bogdown of clean conversation, it adds complexity to keeping players on track, and it wastes precious time in development. It tends to confuse players, who are already conditioned that if NPC A mentions a dude who sells swords the next town over, it means either he is secretly a black dragon in disguise, he has a mission you can take, or he is a Plot Point that must be cleared before moving on. Luckily, I am a modder, and can ignore this (albeit at my peril), adding a few little "awareness" dialogs here and there. They can be added to the PID, where players who love RP interaction will find them; they can be added to flirts; and with a little bit of judicial weaving, they can even be interjected into vanilla reactions by Canonical BioWare™ NPCs. In a few places, they can even be snuck in as a side branch in a conversation, which may or may not sidetrack the conversation. For that reason (the potential sidetrack) the FriendTalks are the best place to look at adding one or two of these, in more innocent conversations where it does not really matter if a player is sidetracked as much. We all have those conversations where you start talking about something, and then someone says something bad about <INSERT_FAVORITE_TEAM_OR_HOBBY_OR_POLITICAL_STANCE_HERE>, and suddenly it is all broken up, and the original conversation is completely lost! We can play with this idea at the dialog level, adding a reaction template to be scattered where it mimics regular conversational flow. With some situational rewriting, this template can be used for inserting reactions to the one item we know Aran could not shut his mouth about: /* LEAT21 // Human Flesh +5 evil armor */ IF ~HasItemEquiped("LEAT21",Player1) Global("c-arskinarm","LOCALS",0)~ GOTO b100 IF ~HasItemEquiped("LEAT21",Player1) Global("c-arskinarm","LOCALS",1) GlobalTimerExpired("c-aranskin","GLOBAL")~ GOTO b101 IF ~HasItemEquiped("LEAT21",Player1) Global("c-arskinarm","LOCALS",2) GlobalTimerExpired("c-aranskin","GLOBAL")~ GOTO b102 IF ~~ b100 SAY ~[ARAN] Hey, by the way, your armor be all wrong. I know you be th' scourge o' Faerun, but you don't have to wear your heart on your sleeve, eh? In this case, someone else's, by th' look. An' I won't say how bad it smells.~ IF ~~ THEN DO ~SetGlobal("c-arskinarm","LOCALS",1) SetGlobalTimer("c-aranskin","GLOBAL",FOUR_DAYS)~ EXIT END // or whatever tie backs necessary IF ~~ b101 SAY ~[ARAN] You stll be wearin' that Grumbar-lovin' Cyric-blighted armor? Gives me th' chills, it does.~ ++ ~[PC] If it bothers you that much, I will take it off.~ DO ~SetGlobal("c-arskinarm","LOCALS",2) SetGlobalTimer("c-aranskin","GLOBAL",FOUR_DAYS)~ + b103 ++ ~[PC] I think it has a great effect on our opponents' morale. You are just going to have to get used to it.~ DO ~SetGlobal("c-arskinarm","LOCALS",2) SetGlobalTimer("c-aranskin","GLOBAL",FOUR_DAYS)~ + b103 ++ ~[PC] If I wanted you opinion, I would have asked.~ DO ~SetGlobal("c-arskinarm","LOCALS",2) SetGlobalTimer("c-aranskin","GLOBAL",FOUR_DAYS)~ + b103 ++ ~[PC] Shut up, or your ears will add decoration to it.~ DO ~SetGlobal("c-arskinarm","LOCALS",2) SetGlobalTimer("c-aranskin","GLOBAL",FOUR_DAYS)~ + b103 END IF ~~ b102 SAY ~[ARAN] Look, I do a good bit around here, an' I know you be th' leader. I'm just sayin', that armor makes it blighted hard for me to do my job. Th' smell be only part o' it. Shar's Kiss, get rid o' it, eh?~ ++ ~[PC] Or you will run crying like a weakling child, break your contract, and leave?~ DO ~SetGlobal("c-arskinarm","LOCALS",3)~ + b104 ++ ~[PC] Shut up, Aran. I heard you the first two times. I will use what tools I see fit to advance my goals.~ DO ~SetGlobal("c-arskinarm","LOCALS",3)~ + b104 ++ ~[PC] Are you volunteering to add more skin to this armor? Speak again, and I will ~ DO ~SetGlobal("c-arskinarm","LOCALS",3)~ + b104 ++ ~[PC] I may very well take it off. You are useful. But then again, I might put it back on. You will have to get used to it, or leave.~ DO ~SetGlobal("c-arskinarm","LOCALS",3)~ + b104 ++ ~[PC] You do very little, and I am tired of your whining. That is the last warning you will get.~ DO ~SetGlobal("c-arskinarm","LOCALS",3)~ + b104 END IF ~~ b103 SAY ~[ARAN] Hey, I don't go around second guessin' you. So if I be sayin' it, you know there be one hells of a lot more people who have noticed. Might fit your ideas, but it be bad tactics to give away your position that way.~ IF ~~ THEN EXIT END // or whatever tie backs necessary IF ~~ b104 SAY ~[ARAN] Cyric's Black Heart, I don't run out on contracts. But you smell worse than a charnelhouse. If I throw up, you will be knowin' why.~ IF ~~ THEN EXIT END // or whatever tie backs necessary Another template to run out might be a set of reactions for PID, with Aran reacting to using Drow weapons: /* PID for Underdark: equipment addition */ + ~Global("c-arandroweq","LOCALS",0) HasItemEquiped("DWBLUN01","c-aran") Global("c-arandroweq","LOCALS",0)~ + ~[PC] Aran, you keep looking oddly at that Drow flail you are using. Is there something wrong?~ DO ~SetGlobal("c-arandroweq","LOCALS",1)~ + c-aranreactdrow // Drow Flail +3 + ~Global("c-arandroweq","LOCALS",0) OR(2) HasItemEquiped("DWCHAN01","c-aran") HasItemEquiped("DWCHAN02","c-aran")~ + ~[PC] Aran, you keep looking oddly at that armor you are wearing. Is there something wrong?~ DO ~SetGlobal("c-arandroweq","LOCALS",1)~ + c-aranreactdrow // Drow Elven Chain +3, Drow Adamantine Chain +5 + ~Global("c-arandroweq","LOCALS",0) HasItemEquiped("DWCLCK01","c-aran")~ + ~[PC] Aran, you keep looking oddly at that cloak you are wearing. Is there something wrong?~ DO ~SetGlobal("c-arandroweq","LOCALS",1)~ + c-aranreactdrow // Drow Piwafwi Cloak + ~Global("c-arandroweq","LOCALS",0) HasItemEquiped("DWHALB01","c-aran")~ + ~[PC] Aran, you keep looking oddly at that halberd you are weilding. Is there something wrong?~ DO ~SetGlobal("c-arandroweq","LOCALS",1)~ + c-aranreactdrow // Drow Halberd +3 + ~Global("c-arandroweq","LOCALS",0) HasItemEquiped("DWPLAT01","c-aran")~ + ~[PC] Aran, you keep looking oddly at that plate armor you are wearing. Is there something wrong?~ DO ~SetGlobal("c-arandroweq","LOCALS",1)~ + c-aranreactdrow // Drow Full Plate +5 + ~Global("c-arandroweq","LOCALS",0) HasItemEquiped("DWSHLD01","c-aran")~ + ~[PC] Aran, you keep looking oddly at that shield you are holding. Is there something wrong?~ DO ~SetGlobal("c-arandroweq","LOCALS",1)~ + c-aranreactdrow // Drow Shield +3 + ~Global("c-arandroweq","LOCALS",0) HasItemEquiped("DWSPER01","c-aran")~ + ~[PC] Aran, you keep looking oddly at that lance you are weilding. Is there something wrong?~ DO ~SetGlobal("c-arandroweq","LOCALS",1)~ + c-aranreactdrow // Drow Lance +3 + ~Global("c-arandroweq","LOCALS",0) HasItemEquiped("DWSW1H01","c-aran")~ + ~[PC] Aran, you keep looking oddly at that scimitar you are weilding. Is there something wrong?~ DO ~SetGlobal("c-arandroweq","LOCALS",1)~ + c-aranreactdrow // Drow Scimitar +3 + ~Global("c-arandroweq","LOCALS",0) HasItemEquiped("DWSW1H02","c-aran")~ + ~[PC] Aran, you keep looking oddly at that longsword you are weilding. Is there something wrong?~ DO ~SetGlobal("c-arandroweq","LOCALS",1)~ + c-aranreactdrow // Drow Longsword +3 + ~Global("c-arandroweq","LOCALS",0) HasItemEquiped("DWXBOW01","c-aran")~ + ~[PC] Aran, you keep looking oddly at that crossbow you are using. Is there something wrong?~ DO ~SetGlobal("c-arandroweq","LOCALS",1)~ + c-aranreactdrow // Drow Crossbow of Speed IF ~~ c-aranreactdrow SAY ~[ARAN] Shar's Spikey Spit, I don't rightly want naught to do wi' a weapon what turns to dust in sunlight. I know it be powerful an' magical, but give me a solid surface weapon an' I'd be a mite happier.~ IF ~~ THEN DO ~SetGlobal("c-arandroweq","LOCALS",1)~ EXIT END Other ideas to play with: 0x402C HPPercent(O:Object*,I:Hit Points*) See HP(O:Object*,I:Hit Points*) except this is for a percentage. 0x402D HPPercentLT(O:Object*,I:Hit Points*) See HPLT(O:Object*,I:Hit Points*) except this is for a percentage. 0x402E HPPercentGT(O:Object*,I:Hit Points*) See HPGT(O:Object*,I:Hit Points*) except this is for a percentage. 0x4031 HaveSpell(I:Spell*Spell) Returns true only if the active CRE has the specified spell memorised. 0x4032 HaveAnySpells() Returns true if the active CRE has at least one spell memorised. 0x4044 CheckStat(O:Object*,I:Value*,I:StatNum*Stats) Returns true only if the specified object has the statistic in the 3rd parameter at the value of the 2nd parameter. 0x4045 CheckStatGT(O:Object*,I:Value*,I:StatNum*Stats) Returns true only if the specified object has the statistic in the 3rd parameter greater than the value of the 2nd parameter. 0x4046 CheckStatLT(O:Object*,I:Value*,I:StatNum*Stats) Returns true only if the specified object has the statistic in the 3rd parameter less than the value of the 2nd parameter. 0x404E PartyGold(I:Amount*) Returns true only if the player's party has the amount of gold specified in the 2nd parameter. 0x404F PartyGoldGT(I:Amount*) Returns true only if the player's party has more gold than specified in the 2nd parameter. 0x4050 PartyGoldLT(I:Amount*) Returns true only if the player's party has less gold than specified in the 2nd parameter. 0x4064 HasWeaponEquiped(O:Object*) Returns true only if the specified object has a weapon in a quickslot. 0x407F HasItemEquiped(S:ResRef*,O:Object*) Returns true if the specified object has the specified item in one of its quicklots if it is a weapon, or has it equipped if it is a piece of armour of an amulet etc. InventoryFull(O:Object*) One other area that readily springs to mind are flirts. Since appearance in PC-land is entirely subjective, and we currently do not have a way of identifying what portrait/avatar coloration combination is used, or anything else cosmetic like that in scripting, we often are restricted in the bread and butter of human attraction - reaction and commentary on appearance. We have to live in "generic land", with Assuming Facts Not In Evidence to be avoided. A sample of a problem-flirt: or worse, With a nod to HasItemEquiped(), though, some direct observation is possible: /* Flirt Additions: */ + ~HasItemEquiped("AMUL12",Player1) Global("TEMPVAR","LOCALS",0)~ + j100 // Laeral's Tear Necklace (3000 gp) + ~HasItemEquiped("AMUL01",Player1) Global("TEMPVAR","LOCALS",0)~ + j101 // Necklace of Missiles + ~HasItemEquiped("AMUL04",Player1) Global("TEMPVAR","LOCALS",0)~ + j102 // Studded Necklace with Zios Gems + ~HasItemEquiped("AMUL05",Player1) Global("TEMPVAR","LOCALS",0)~ + j103 // Bluestone Necklace + ~HasItemEquiped("AMUL06",Player1) Global("TEMPVAR","LOCALS",0)~ + j104 // Agni Mani Necklace + ~HasItemEquiped("AMUL07",Player1) Global("TEMPVAR","LOCALS",0)~ + j105 // Rainbow Obsidian Necklace + ~HasItemEquiped("AMUL08",Player1) Global("TEMPVAR","LOCALS",0)~ + j106 // Tiger Cowrie Shell Necklace + ~HasItemEquiped("AMUL09",Player1) Global("TEMPVAR","LOCALS",0)~ + j107 // Silver Necklace + ~HasItemEquiped("AMUL10",Player1) Global("TEMPVAR","LOCALS",0)~ + j108 // Gold Necklace + ~HasItemEquiped("AMUL11",Player1) Global("TEMPVAR","LOCALS",0)~ + j109 // Pearl Necklace + ~HasItemEquiped("AMUL16",Player1) Global("TEMPVAR","LOCALS",0)~ + j110 // Amulet of Metaspell Influence (+1 2nd level spell) + ~HasItemEquiped("AMUL18",Player1) Global("TEMPVAR","LOCALS",0)~ + j111 // Wolfsbane Charm +2 vs Lycanthropes + ~HasItemEquiped("AMUL22",Player1) Global("TEMPVAR","LOCALS",0)~ + j112 // Periapt of Proof Against Poison IF ~~ j100m // Laeral's Tear Necklace (3000 gp) SAY ~[ARAN] (He leans forward slightly, studying the Laeral's Tear necklace you are wearing.)~ IF ~~ THEN GOTO j113 // expensive END IF ~~ j101 // Necklace of Missiles SAY ~[ARAN] (He leans forward slightly, studying the Necklace of Missiles necklace you are wearing.)~ IF ~~ THEN GOTO j114 // missiles END IF ~~ j102 // Studded Necklace with Zios Gems SAY ~[ARAN] (He leans forward slightly, studying the zios gems embedded in the necklace you are wearing.)~ IF ~~ THEN GOTO j119 /* clunky */ END IF ~~ j103 // Bluestone Necklace SAY ~[ARAN] (He leans forward slightly, studying the bluestone necklace you are wearing.)~ IF ~~ THEN GOTO j119 /* clunky */ END IF ~~ j104 // Agni Mani Necklace SAY ~[ARAN] (He leans forward slightly, studying the angi mani necklace you are wearing.)~ IF ~~ THEN GOTO j119 /* clunky */ END IF ~~ j105 // Rainbow Obsidian Necklace SAY ~[ARAN] (He leans forward slightly, studying the obsidian necklace you are wearing.)~ IF ~~ THEN GOTO j119 /* clunky */ END IF ~~ j106 // Tiger Cowrie Shell Necklace SAY ~[ARAN] (He leans forward slightly, studying the cowrie shell necklace you are wearing.)~ IF ~~ THEN GOTO j119 /* clunky */ END IF ~~ j107 // Silver Necklace SAY ~[ARAN] (He leans forward slightly, studying the silver necklace you are wearing.)~ IF ~~ THEN GOTO j115 /* simple */ END IF ~~ j108 // Gold Necklace SAY ~[ARAN] (He leans forward slightly, studying the gold necklace you are wearing.)~ IF ~~ THEN GOTO j115 /* simple */ END IF ~~ j109 // Pearl Necklace SAY ~[ARAN] (He leans forward slightly, studying the pearl necklace you are wearing.)~ IF ~~ THEN GOTO j115 /* simple */ END IF ~~ j110 // Amulet of Metaspell Influence (+1 2nd level spell) SAY ~[ARAN] (He leans forward slightly, studying the amulet you are wearing.)~ IF ~~ THEN GOTO j118 /* magical */ END IF ~~ j111 // Wolfsbane Charm +2 vs Lycanthropes SAY ~[ARAN] (He leans forward slightly, studying the wolfsbane charm you are wearing.)~ IF ~~ THEN GOTO j117 /* anti-wolf */ END IF ~~ j112 // Periapt of Proof Against Poison SAY ~[ARAN] (He leans forward slightly, studying the periapt you are wearing.)~ IF ~~ THEN GOTO j116 /* anti-poison */ END IF ~~ j113 SAY ~[ARAN] Now, I do think that piece o' jewelry matches you. But on full account, there be few pieces, no matter how expensive, what can do justice to th' beauty o' your eyes.~ DO ~SetGlobal("TEMPVAR","LOCALS",1)~ EXIT END // expensive IF ~~ j114 SAY ~[ARAN] (Hesitantly, he reaches one hand out to touch it...) OUCH! That there necklace done bit me! Hells, <CHARNAME>, you could have warned me th' bloody thing was leakin' some o' that missile-energy.~ DO ~SetGlobal("TEMPVAR","LOCALS",1)~ EXIT END // missiles IF ~~ j115 SAY ~[ARAN] Perfect. Simple, attractive, understated, an' nearly as beautiful as you.~ DO ~SetGlobal("TEMPVAR","LOCALS",1)~ EXIT END // simple IF ~~ j116 SAY ~[ARAN] Good protection. You might want to keep in on tonight, eh? On account o' I am cookin' wi' some new spices, an' I am nt sure I have the amount just right.~ DO ~SetGlobal("TEMPVAR","LOCALS",1)~ EXIT END // anti-poison IF ~~ j117 SAY ~[ARAN] Now, you may think that charm will keep th' lkes o' me away. Problem is, I'm no wolf. I just act like one!~ DO ~SetGlobal("TEMPVAR","LOCALS",1)~ EXIT END // anti-wolf IF ~~ j118 SAY ~[ARAN] (He gently caresses it with the tip of one finger, then shivers and shakes his hand.) Now, that done give me a set o' goosebumps. Either it did, or th' curve o' your neck did. Either way, I think I might want to repeat th' experience.~ DO ~SetGlobal("TEMPVAR","LOCALS",1)~ EXIT END // magical IF ~~ j119 SAY ~[ARAN] Now, that be alright for some women, but I am not so sure when it comes to you. I think it sets off your eyes right nice, but I think it be a mite clunky. Here. This pearl necklace might be better.~ DO ~<< GiveItemCreate "AMUL11">> SetGlobal("TEMPVAR","LOCALS",1)~ EXIT END // clunky
×
×
  • Create New...