Skip to content

[Tutorial] jastey's SoD NPC Modding Tutorials

2»

Comments

  • jasteyjastey Member Posts: 2,780
    edited April 2019
    Update of Tutorial no 1 to version 4!

    Please note: In xxbd0101.baf, the trigger of the second script block was changed to close an oversight that prevented Biff to spawn in case the player met him in the city before but did not take him into the group.
    Also, there were copy&paste errors where Minsc's death variable was still present, but of course it needs to be Biff's.

    And: The tutorial has two new components!
    - "Add Biff to Corwin's list about companions in BG city" - before going into BG city, Corwin can be asked about former companions who are now to be found inside the city. Biff will be mentioned here, too, in case he was in the party before (which is in principle not possible but it's an example in case your NPC will be).
    - "Make the Mod EET compatible" This paragraph deals with EET compatibility for an SoD only NPC mod - which is the kind of mod with the least work, at least compared with BG:EE or BGII mods.

    Changes:
    • corrected copy&paste errors where Minsc's death variable was inside scripts instead of Biff's
    • fixed oversight in xxbd0101.baf: in case Biff was taken into the group in BG city but then left standing before the last night before the coalition marches against the crusade, he wouldn't spawn in front of the Ducal Palace
    • added new paragraph: "Add Biff to Corwin's list about companions in BG city"
    • added new paragraph: "Make the Mod EET compatible"
  • jasteyjastey Member Posts: 2,780
    And the tutorial no 2 was updated, too.

    Version 2 comes with the changes:
    -added paragraph: "Biff visits the PC in Prison"
  • jasteyjastey Member Posts: 2,780
    And of course the Tutorial NPC Mod "Biff the Understudy" was updated in accordance with the tutorials.
    Version 2 comes with bugfixes and new content.

    Changes:
    -added EET compatibility
    -corrected copy&paste errors where Minsc's death variable was inside scripts instead of Biff's
    -corrected trigger of second script block in xxbd0101.baf to close the oversight that Biff wouldn't (re)spawn here in case he was already spawned in bd0010.are but not taken into the group
    -added "Biff visits PC in prison"
    -added "Corwin will mention Biff's whereabouts in BG city if asked about the former companions"
    -the mod now uses a tra file (albeit only for the line needed for EET fate spirit) and HANDLE_CHARSETS for text conversion
  • jasteyjastey Member Posts: 2,780
    ...And tutorial 2 updates to v3, now with the missing dialogue needed for the paragraph "Biff visits PC in Prison"...
  • ArdanisArdanis Member Posts: 1,736
    edited April 2019
    jastey wrote: »
    I used the SmallWait() because BeamDog used them, but I made experiences with script commands not being executed in cutscenes unless there is a short waiting, so I just left them in, trusting on the devs experiences. I don't know how many times I fought with cutscenes not working properly although all commands where ok in principle, and then finally a "Wait(1)" did the miracle, so if I have a template that uses a (Small)Wait() somewhere, I'm not going to try whether it will work without. :D
    Yep. Also note you can stack several ActionOverride() for an actor in cutscene mode to make an action queue - in this case inserting waits will instead disrupt the queue.

    Couple other non-obvious things to not accidentally change, lest they destroy your weekend:
    1) SaveLocation("LOCALS","variable",[x.y]) must be in uppercase, otherwise it won't work. Coordinate variables are about the only place I know where case matters.
    2) Trigger overrides for objects that may not exist in the area need to be the last in condition block:
    OR(2)
        !Range("ff_camp",999) //"Name" of a trigger which detects the camps
        !TriggerOverride("ff_camp",IsOverMe("xxBiff"))
    
    Even merely switching positions of TO() and Range() here will break it if you're not in any camp area (1000, 7100 or 3000). Happens with dialog triggers as well. I think a temporary solution was to place a dummy ff_camp dot in all SoD areas so that it wouldn't bug out, but as the new locations kept getting added I opted for a combo like this.

    jastey wrote: »
    Ha! :) Yeah, I went for option one, instead.
    EDIT: Just so this doesn't make the wrong impression: I complained to @Raduziel via PM that I can't get one of the cutscenes to work and will either leave it or throw my comp out of the window.
    If you still have the script, I can take a look at it.
    Raduziel wrote: »
    One question: why do you keep changing the creature AI Script at every camp transition?
    Safety measure, really, in case something unpredictable happens.
  • RaduzielRaduziel Member Posts: 4,714
    Thanks for the insight, @Ardanis .

    As for case-sensitive stuff, Weidu-highlighter in Notepad++ wasn't recognizing "locals" but did recognize "LOCALS". Ditto for globals/GLOBALS.

    I don't know if it is relevant, though.
  • jasteyjastey Member Posts: 2,780
    edited April 2019
    @Ardanis Thank you very much for the insight!
    Thank you very much for your generous offer. I don't have the cutscene any more (it was the attempt to let a non-party member walk along in the very last SoD area, but it's such a short moment and I don't even need it for any of my own private NPC projects.) I might come back to your offer if I have similar difficulties in one of the other cutscenes where all characters in SoD are supposed to move / gather / do something else, though!
    Also note you can stack several ActionOverride() for an actor in cutscene mode to make an action queue - in this case inserting waits will instead disrupt the queue.
    If someone would give me a quick explanation what an action queue and also disrupting it actually means (and whether there are instances where one would want one or the other), maybe with an example, that would be great.

    @Raduziel That might be because the highlighter was probably created before SoD used small letters for locals and global. I didn't know that is actually possible before that. (It probably wasn't, in the old engine.)

  • ArdanisArdanis Member Posts: 1,736
    edited April 2019
    jastey wrote: »
    If someone would give me a quick explanation what an action queue and also disrupting it actually means (and whether there are instances where one would want one or the other), maybe with an example, that would be great.
    One example is NEWGAME.BCS in BG2:
    CreateCreature("ISHADDUD",[3269.3264],SW)
        CreateVisualEffect("ICSPAIN",[3510.3100])
        PlaySound("EFF_M38")
        SmallWait(7)
        ActionOverride("ishaddud",MoveToPoint([3758.2946]))
        ActionOverride("ishaddud",SmallWait(8))
        ActionOverride("ishaddud",Face(SW))
        ActionOverride("ishaddud",SmallWait(8))
        ActionOverride("ishaddud",DisplayStringHead(Myself,54407))
        ActionOverride("ishaddud",PlaySound("TUTHH04"))
    
    This will make the shadow thief execute all the overrides given to him (first move, then wait, then face etc.), and the cutscene id won't need to bother with directing him any further. On the other hand, if those AOs had waits between them:
    ActionOverride("ishaddud",MoveToPoint([3758.2946]))
        Wait(1)
        ActionOverride("ishaddud",SmallWait(8))
    
    Then the thief would start moving to designated point, only to be overridden a second later with SmallWait(8), making him stop walking and do that instead.

    This is particularly useful if you have multiple non-unique actors (i.e. sharing DV aka scripting name) spawned and need them to follow complex instructions simultaneously. Best example that springs to mind is the looping BDCUT11A.BCS from SoD (initiated in BDCUT11.BCS), which spawns few random crusaders every second and makes them march across the screen.


    On the other hand, you may have a character ordered to walk away and then have them stop and turn back. While it's possible to time it perfectly, it's usually easier to just send them farther than they need to be and stop them in the middle with override action.
  • jasteyjastey Member Posts: 2,780
    Interesting! Thank you very much for the explanations,
  • jasteyjastey Member Posts: 2,780
    The third tutorial, mainly dealing with interjection points and general reactions is on hold until after the next patch. Reason is here.
  • SkitiaSkitia Member Posts: 1,083
    edited June 2019
    For the first part of the tutorial, regarding this section:
    /* xxBiffsP.dlg Biff's kickout dialogue for SoD */
    BEGIN ~xxBiffsP~
    
    /* If kicked out in Avernus (so Caelar can join) in bd4700.are
    This sets Global("xxBiff_kicked_bd4700","global",1) which is used in xxbdcut59b.baf */
    /* Biff can't go home from here - so he will stay and say something brave. */
    IF ~AreaCheck("bd4700")
        GlobalLT("bd_plot","global",570)~ THEN BEGIN kickout_1
      SAY ~Sure, er, I'll stay around... and fight.~
      IF ~~ THEN DO ~SetGlobal("xxBiff_kicked_bd4700","global",1)
                     SetGlobal("bd_joined","locals",0)~ EXIT
    END
    

    The dialogue is scripted (Perhaps patched or adjusted from its original version where it wasn't the case) so that Caelar will never join a party of six. Thus I'm not sure if it's necessary beyond mimickry. Even if you reform your party during the battle, Caelar will never get added, and most likely the people you removed will die anyway.

    Thus you could potentially cut it from the tutorial, or leave it in there for legacy purposes.
  • jasteyjastey Member Posts: 2,780
    @Skitia I admit that's from what can be seen in the original NPCs' kickout dialogue, but I never actually tested it.
  • jasteyjastey Member Posts: 2,780
    The tutorials 1 and 4 were updated, tutorial 3 is now available, but not finished, the "Biff the Understudy Tutorial mod" was updated with in accordance to the updates for tutorial 1 and 4.
  • jasteyjastey Member Posts: 2,780
    Tutorial 1 is updated to v7, there were some leftover descriptions in there that didn't make any sense in the current version.
  • jasteyjastey Member Posts: 2,780
    edited October 2021
    Tutorial 2 updates to v5 with adaptions to the last scenes.

    Changelog:
    - added SetGlobal("bd_meet_canon_party","bd6200",1)to creation at the sewer exit (after PC escapes prison) so Imoen will be aware there is someone waiting at the clearing.
    - changed handling of NPC in the last SoD area (abduction area): NPC will not appear for EET abduction scene. I couldn't make the transition to BGII work properly if the effects are on the NPC while they are not in party.
    Post edited by jastey on
  • jasteyjastey Member Posts: 2,780
    Tutorial 2 updates to v6: added paragraph "8. If Biff should NOT be present after the PC escapes the prison".
  • jasteyjastey Member Posts: 2,780
    All tutorials plus the tutorial mod package were updated and heavily revised! The tutorials are finished now from what I can determine by browsing the SoD game files. There might be changes once I finished my own NPC mods for SoD.


    Changelog Tutorial 1 v8:
    - Tutorial was revised and updated with new content. This includes unification of used naming schemes, correction of typos and oversights. Proposed examples might have changed in details.
    - Rewritten first section for compatibility with EndlessBG1 mod. New title: General throughts to transition into SoD's "Korlasz' Crypt".
    - Chapter 2 "Add Biff to Corwin's list about companions in BG city" now uses I_C_T directly.
    - Content list order corrected.

    Changelog Tutorial 2 v7:
    - Tutorial was revised and updated with new content. This includes unification of used naming schemes, correction of typos and oversights. Proposed examples might have changed in details.
    - Chapter 3 "Biff visits the PC in Prison" expanded in case the NPC should visit as a love interest after Corwin.
    - Added Continue() to script additions via EXTEND_TOP except cutscenes.
    - Revised the order of actions in some script blocks.
    - Corrected typos and oversights.

    Changelog Tutorial 3 v3:
    - Tutorial was revised and updated with new content. This includes unification of used naming schemes, correction of typos and oversights. Proposed examples might have changed in details.
    - New chapter: Training the Recruits in the Coalition Camp
    - New chapter: The Chicken, the Well, and the Dog Easter Egg
    - New chapter: Providing the "Skipit" Functionality for Cutscenes
    - New chapter: Promotion of the Road to Discovery Mod and its Possibilities for your NPC Mod
    - Unified Biff's joined.dlg to "xxBiffJ".
    - Chapter paragraphs are numbered now.
    - Chapters about commenting in final scene deprecated ("Last area bd6100.are: comment in abduction scene (EET)").

    Changelog Tutorial 4 v3:
    - Tutorial was revised and updated with new content. This includes unification of used naming schemes, correction of typos and oversights. Proposed examples might have changed in details.
    - Added new chapter: Include Optional Component for Banters in "Dialog Style". Examples in chapters 1-3 adjusted for compatibility with new chapter 4. (i.e. used variables changed; comments on how to put all banters into one single baf file removed.)
    - Examples in chapters 1 and 3 expanded: Biff and Corwin banter two times now.


    Changelog Tutorial Mod Package "Biff the Understudy":

    -Updated the mod to the Tutorial updates: Tutorial 1 v8, Tutorial 2 v7, Tutorial 3 v3, Tutorial 4 v3. Please note: The mod was revised and updated according to the changes in the tutorials. Details and specifics have changed at various places!
    -Added example of German language choice (not active) and traify-ed all lines in the tp2 (not many).
    -Changed handling of texts: setup-xxbiff.tra contains lines needed for setup, all ingame text from tp2 moved into game-xxbiff.tra.
    -Added dynamic order syntax and globally unique labels to xxbiff.ini and tp2 to include support for Project Infinity, with explanations.
    -Updated Readme.

  • jasteyjastey Member Posts: 2,780
    Tutorial 1 "Automatic Transition of NPCs into SoD and between Camps in SoD" updates to v9!

    Changelog:

    -Added note to paragraph "Biff's SoD kickout dialogue with the needed local variables" regarding the importance of trigger order for NextTriggerObject(!IsOverMe()) if the object might not be in the area, by Ardanis.
  • jasteyjastey Member Posts: 2,780
    All Tutorials plus the Template Mod package were updated.
    • Optimized naming scheme of d and baf files for search and replace of names (if tutorial NPC mod template is used for other NPCs): This includes unification of used naming schemes, correction of typos and oversights. Proposed examples might have changed in details.
    • Greetings dialogue file name changed to "xxBiffsG" to distinguish it from the OVERRDE script.
    • All variables should start with the prefix "xxBiff_".
  • jasteyjastey Member Posts: 2,780
    Part 3 was updated to v5 with a bug fix.

    Changelog:

    Updated link for "Providing the "Skipit" Functionality for Cutscenes".
    Fixed syntax for interjection into "The Chicken, the Well, and the Dog Easter Egg" (I_C_T3 instead of I_C_T).


    The Biff the Understudy NPC Tutorial mod package was updated to v6. Please note that the contents with scripted reactions to game events and crossmod to Road to Discovery is still a work in progress.

    Changelog:

    -Integrated script and dialogue templates for using Road to Discovery's trigger variable system for reactions to the main story elements.
  • StummvonBordwehrStummvonBordwehr Member, Mobile Tester Posts: 1,385
    Thanks Jastey.

    I really appreciate how much time and effort you have put into SoD. I really enjoy that part of the game, and I really like the extra love you are pouring into it.
  • jasteyjastey Member Posts: 2,780
    Thanks so much!

    I am about to finish the contents for SoD for all my NPC mods (including two yet unpublished) so I am playing the campaign with my mods currently and am enjoying it very much.
    Biff is in my party, too!
  • StummvonBordwehrStummvonBordwehr Member, Mobile Tester Posts: 1,385
    Biff? SoD is short of figthers, but still…
    What are his stats and saves, still 9 for all stats and 20 for saves?
    Hi saves should normalize at level up I’d reckon.. But what about proficiencies?
  • jasteyjastey Member Posts: 2,780
    I just took the existing cre file (yes! there is a cre file for Biff the Understudy in the original game: DIALOGMO.cre) and put it in there. All I patched was death variable, scripts, and dialogue. I didn't change any other stats.
  • StummvonBordwehrStummvonBordwehr Member, Mobile Tester Posts: 1,385
    jastey wrote: »
    I just took the existing cre file (yes! there is a cre file for Biff the Understudy in the original game: DIALOGMO.cre) and put it in there. All I patched was death variable, scripts, and dialogue. I didn't change any other stats.

    Considering the things he could do in the first installment, it makes sense that he had some coding to back up his awesomeness. Best og luck with him - at last he will have his moment to shine.
  • jasteyjastey Member Posts: 2,780
    Biff NPC Tutorial mod package updates to 7 and is now alphatested on SoD. This is the last version I was planning, any updates will be bugfixes only.

    Changelog:

    -Optimized script and dialogue templates for using Road to Discovery's trigger variable system for reactions to the main story elements.
    -The mod tempate is now alphatested with regard to general bugs, triggers, and appropriate timers.


    Modding Tutorial Part 2: "Make Your NPC Comment and Move Along at the End of SoD" updates to v9.

    Changelog: -Changed CutSceneID() in bdcut61_patch.baf to Player1.


    Modding Tutorial Part 3: "Add Other General SoD Behavior to Your NPC: XP Adjustment, Actions in Story Cutscenes, Commenting of Main Story Events" updates to v6.

    Changelog:

    - Fixed variable setting at open portal comment.
    - Fixed variable setting in arriving in Avernus comment.
    - Fixed comment timing in Avernus elevator.
  • StummvonBordwehrStummvonBordwehr Member, Mobile Tester Posts: 1,385
    edited April 2023
    Sounds like a busy easter…
    7 updates to some of the many mods you manage. Hope you had time to enjoy a part of the holiday at least
    Ps. Thanks for the updates
  • jasteyjastey Member Posts: 2,780
    @StummvonBordwehr thanks for the kind words! It was 17 mods in total - all I took along on my own SoD run and some more. This was the biggest update run for me so far.
  • StummvonBordwehrStummvonBordwehr Member, Mobile Tester Posts: 1,385
    jastey wrote: »
    @StummvonBordwehr thanks for the kind words! It was 17 mods in total - all I took along on my own SoD run and some more. This was the biggest update run for me so far.

    Thats impressive. Thanks for the updates and work in general - it is much appreciated
  • jasteyjastey Member Posts: 2,780
    Thanks for the kind words!
Sign In or Register to comment.