Skip to content

Need help in making Vampire Kit(spells, scripts, creatures, items)

Gel87Gel87 Member Posts: 158
Hello,

Im trying to make a vampire kit.
The kit will have name: GeKitVa
It will be a custom thief.
I want it to work in BG1EE, BG2EE, SOD. (I dont have EET)
Im using CD Tweaks for removal of XP cap and level 50.

Im using NearInfinity and Weidu.

Im on work now, but i have those kit tp files back home for referanse, but i want start here as im stuck here for 2 weeks.

Issue 1:
Vampire Creature does not exist in bg1ee. I have tried to copy the creature before from bg2ee, but it becomes invisible. I also think only fledging vampire male exists in bg sod.

My character is supposed to cast a polymorph spell(visual) in lvl1 cia clab table.
This polymorph spell will also include some kit treats, and add a custom vampire attack wepon with profience short sword.

I will need a gender check of some sort, so i polymorph into the correct shape based on gender.
I will also need to change my race to Vampire and possible even add that race to selection screen.

What files do i need to copy over from BG2EE for a vampire creature to be visible in BG1EE/SOD?
Relevant vampire creatures according to internet:
Fledging Vampire:
VAMFLF01
VAMFLM01
C6VAMP01
C6FLM01

Vampire:
VVFEMAL1.cre
VAMPAT01

Vampire Elder:
VAMVER01
VAMOLD01

Vampire Ancient:
VAMEMI01
VAMANC01

Any1one know how to fix theese issues:
Getting creature visible in all 3 games?
Polymorph based on gender?
Add Vampire Race to selection screen, or change it live via script or spell?

Issue 2:
I want to have a spell called Blood Drain.
I want this to happen:
Enemy forced to sleep for X ammount of time.
Myself bend towards target in any way possible(kneel?, bend? Parts of attack animation?
I also want to make and add some .bam red bloodlike bams to use. Maby projectiles too.
- I want 2 of this spell, one to simulate killing "the first vampire" for his powers which will kill him while laying down.
- And one for normal use, which i will improve with leveling ups. At later stage its supposed to turn enemy into a ally custom vampire creature, and give me XP for kill.

How do i do this? Any pointers?

Issue 3:
How do i make and import/compile and use dialogs?
File type? Scripts to active/trigger? Scripts to import via tp2 file?

Issue 4:
My vampire will summon a nerfing ring, Daywalker Ring.
This ring will protect myself vs a custom incendiate/burn kill spell.
Then i want a script that kills my vampire when in sunlight by casting my custom spell.
I can use the summon invisible creature, or just force myself to cast spell on myself. The custom vampires will also die in sunlight, and i will add that to their BCS script.
But i have no idea how to check if affected by sunlight or not? Im also kinda weak in scripting xD
When my vampire reach the Vampire Originator form it will always be immune or ignore the sunlight script.

Issue 5:
Also wonder if there is any way of making small bats more visible? (a custom creature) Or even slightly bigger? Cause i have a spell called Bat Swarm. It works somewhat how i want it too, it summons a lot of bats on myself. Theese bats have a script to MoveToObject(nearestEnemyOf(Player1)), then ReallyForceSpellRES on NearestEnemyOf(player1), but should probarly be NearestEnemyOf(Myself)?

Issue 6:
Timers, only once, etc?
How do i make forecample the Attack(NearestEnemyOf(Myself)) only attack once or a certain time before continue next part of script? If i chose this option for my bats they never stop attacking before their summon timer runs out, the script never continue to cast spell or anything, they just attack xD

Issue 7:
I imported a custom wepon in wepon slot for the bats. I chose wepon slot 1. But they dont use it? Anyone know why?

Can any please help? Im trying with chat GPT etc, google etc, but i fail XD

Comments

  • Gel87Gel87 Member Posts: 158
    edited January 5
    Okay, so lets see... I learned some more on youtube.

    I will use ConTEXT @ www.contexteditor.org:
    To create files. Or export and rename from NearInfinity.
    .TP2
    .TPA
    .D
    .baf

    So lets look at one issue at the time.

    Shapechange: Vampire Origin:
    - Lets call "Shapechange: Vampire Origin" spell for: GelVa10.spl. (Will be a summon spell for summoning a custom Genie, and set global value "GelVa10_SpellActivated")
    - Lets call the "Genie" creature for: GelVa10.cre
    - Lets call the "Genie" Script for: GelVa10.bcs or baf
    - Lets call the "Genie" Dialog for: GelVa10.d
    - Lets call the "Bring First Vampire" spell genie use to summon first vampir for: GelVa11.spl
    - Lets call "The First Vampire" creature for GelVa11.cre.
    - Lets call "The First Vampire" Script for: GelVa11.bcs or baf
    - Lets call "The First Vampire" Dialog for: GelVa11.d
    - Lets call the "Drain First Vampire" spell for: GelVa12.spl
    - And if "Drain First Vampire" spell need a script call it: GelVa12.bcs or baf.

    GelVa10.BCS: (Genie creature script)
    IF
    		Global("GelVa10_SpellActivated","GLOBAL",1)
    		!InDialog(Player1) // Check if Player1 is not in dialog mode
    THEN
     	RESPONSE #100
      		ActionOverride(Player1, PauseGame())
        		ActionOverride(PlayEffect("DOOR01"))  // Play Teleport effect
    		ActionOverride(PlaySound("DOOR01")) // Play teleport sound
        		SetGlobal("GelVa10_SpellActivated","GLOBAL",2)
        		ActionOverride(Player1, StartDialog("GelVa10.d"))
    
    IF
    		Global("GelVa10_SpellActivated","GLOBAL",2)
    		See(LastSummonerOf(Myself))
    		!InDialog(Player1) // Check if Player1 is not in dialog mode
    THEN
    	RESPONSE #100
     		ActionOverride(Player1, ReallyForceSpellRes("GelVa11.spl", Player1))
     		SetGlobal("GelVa11_SpellActivated","GLOBAL",0)
    
    IF
    		Global("GelVa12_SpellActivated", "Global",0) // Set by the GelVa12 spell itself
    THEN
    	RESPONSE #100
    		SetGlobalTimer("GelVa10", "GLOBAL", 10) /// Timer 10 second?
    
    IF
    		GlobalTimerExpired("GelVa10", "GLOBAL")
    THEN
    		ActionOverride((PlayEffect("DOOR01", Myself))) // Simulate teleport away
    		ActionOverride((PlaySound("DOOR01", Myself))) // Play teleport sound
    		DestroySelf()
    

    GelVa10.D: (Genie Dialog)
    IF
    	True()
    THEN
    	BEGIN
    		SetDialog("LastSummonerOf(Myself)")
    		SetText("Child of Baal, you would be the perfect candidate to replace The First Vampire. Would you like to summon him 					 
    		so you can steal his powers?")
        		AddResponse("Yes, bring him here.", 1)
    
    

    GelVa11.BCS: (First Vampire creature script)
    IF
    		Global("GelVa11_SpellActivated","GLOBAL",1)
    THEN
    	RESPONSE #100
    		ActionOverride(LastSummonerOf(Myself), StartDialog("GelVa11.d"))
    
    IF
    		See(LastSummonerOf(Myself))
    		Global("GelVa11_Dialog_1","GLOBAL",1)
    THEN
    	RESPONSE #100
    		ActionOverride(Player1, ReallyForceSpellRes("GelVa12.spl", Myself))
    


    GelVa11.D: (First Vampir Dialog)
    IF
    	True()
    THEN
    	BEGIN
    		SetText("What's going on? Who are you to awaken me from my long sleep?")
     		AddResponse("Your powers will be mine, time to die!", 1)
    END
    
    IF
    		Response #1
    THEN
    	BEGIN
    		SetGlobal("GelVa11_Dialog_1", "GLOBAL", 1) // Set the global variable for GelVa11.bcs
    END
    

    This is partly what me and ghatgpt tried to come up with...
    Post edited by Gel87 on
  • Gel87Gel87 Member Posts: 158
    edited January 5
    Started on sunlight script as well.
    Line 18 dont compile.
    I have not yet made the spell in line 35, but i dont think thats the issue.

    Baldur.bcs // General game script
    IF // CHecks for custom Vampires
            Race("Vampire")
            OR(4)
            Kit("GeKitVa")  // Shadow Lurker Vampire
            NumCreatureGT("GelVa20",0) // Turned Vampire
            NumCreatureGT("GelVa21",0) // Turned Elder Vampire
            NumCreatureGT("GelVa22",0) // Turned Ancient Vampire
    THEN
        RESPONSE #100
            SetGlobal("Sunlight","GLOBAL",1)
    END
    
    IF // Checks for sunlight hours
    	Global("Sunlight","GLOBAL",1)
        	OR(3)
            TimeOfDay(0) // DAY
            TimeOfDay(3) // MORNING
            TimeOfDay(1, 2) // (DAWN_START, DAWN_END) 
    THEN
        RESPONSE #100
            SetGlobal("Sunlight","GLOBAL",2)
    END
    
    IF // Checks for sunlight blocking conditions and none weather areas.
    	Global("Sunlight","GLOBAL",2)
    	OR(7)
            !Global("WEATHER","LOCALS",3) // Rain
            !Global("WEATHER","LOCALS",4) // Snow
            !Global("WEATHER","LOCALS",5) // Fog
            !AreaType(32) // DUNGEON
            !AreaType(64) // EXTENDEDNIGHT
            !InArea("DREAMAREA") // AreaFlag,IDS (DREAMAREA) number 8
    	!AreaFlag(32) // NOREST (To protect from sun when inside buildings)
            AreaType(1) // OUTDOOR
    THEN
        RESPONSE #100
    	ActionOverride(ANYONE, SUMMON("GelVa30"))
            SetGlobal("Sunlight","GLOBAL",3) // Will force Invisible creature to cast Dissintigrate on relevant targets.
    END
    

    Notes to self:
    0x407F HasItemEquiped(S:ResRef*,O:Object*)
    Returns true if the specified object has the specified item outside the general inventory slots (does not check for equipped status). This trigger does not work for Melf's Minute Meteors or other magically created weapons.

    Line 35 to be swapped with:
    ActionOverride(ReallyForceSpellRES(Player1,"GelVa30",Player1)) // SummonInvisible Creature
    or maby:
    ActionOverride(Player1, Summon("GelVa30"))

    Including ring of daywalker, I guess this has to be included in the invislbe creature script:

    GelVa30.bcs // Invisible creature
    IF
    	Global("Sunlight","GLOBAL",3) // Invisible Creature Check if condition for spellcasting is set
    THEN
    	RESPONSE #100
    		SetGlobal("Sunlight","GLOBAL",4)
    		ActionOverride(ReallyForceSpellRES("GelVa98",Myself)
    		DestroySelf()
    END
    

    Activate Destroy all custom vampire in area spell:
    IF
            	Kit("GeKitVa")  // Shadow Lurker Vampire Kit	
    		Global("Sunlight","GLOBAL",4) // Set by spell "Inniate Vampire Sun Burn"(GelVa98.spl)
    		OR(2)
    		!HasItemEquiped("GelVa99", Player1) // Daywalker ring
    		!HasItem("GelVa06", Player1) // Vampire Wepon +5 given by Vampire Origin Shape.
    THEN
    	RESPONSE #100
    		ActionOverride(ReallyForceSpellRES("GelVa97", Player1)) // Cast "Kill Vampire" Spell for relevant player
    END
    
    IF
            	Kit("GeKitVa")  // Shadow Lurker Vampire Kit	
    		Global("Sunlight","GLOBAL",4) // Set by spell "Inniate Vampire Sun Burn"(GelVa98.spl)
    		OR(2)
    		!HasItemEquiped("GelVa99", Player2) // Daywalker ring
    		!HasItem("GelVa06", Player2) // Vampire Wepon +5 given by Vampire Origin Shape.
    THEN
    	RESPONSE #100
    		ActionOverride(ReallyForceSpellRES("GelVa97", Player2)) // Cast "Kill Vampire" Spell for relevant player
    END
    
    IF
            	Kit("GeKitVa")  // Shadow Lurker Vampire Kit	
    		Global("Sunlight","GLOBAL",4) // Set by spell "Inniate Vampire Sun Burn"(GelVa98.spl)
    		OR(2)
    		!HasItemEquiped("GelVa99", Player3) // Daywalker ring
    		!HasItem("GelVa06", Player3) // Vampire Wepon +5 given by Vampire Origin Shape.
    THEN
    	RESPONSE #100
    		ActionOverride(ReallyForceSpellRES("GelVa97", Player3)) // Cast "Kill Vampire" Spell for relevant player
    END
    
    IF
            	Kit("GeKitVa")  // Shadow Lurker Vampire Kit	
    		Global("Sunlight","GLOBAL",4) // Set by spell "Inniate Vampire Sun Burn"(GelVa98.spl)
    		OR(2)
    		!HasItemEquiped("GelVa99", Player4) // Daywalker ring
    		!HasItem("GelVa06", Player4) // Vampire Wepon +5 given by Vampire Origin Shape.
    THEN
    	RESPONSE #100
    		ActionOverride(ReallyForceSpellRES("GelVa97", Player4)) // Cast "Kill Vampire" Spell for relevant player
    END
    
    IF
            	Kit("GeKitVa")  // Shadow Lurker Vampire Kit	
    		Global("Sunlight","GLOBAL",4) // Set by spell "Inniate Vampire Sun Burn"(GelVa98.spl)
    		OR(2)
    		!HasItemEquiped("GelVa99", Player5) // Daywalker ring
    		!HasItem("GelVa06", Player5) // Vampire Wepon +5 given by Vampire Origin Shape.
    THEN
    		RESPONSE #100
    		ActionOverride(ReallyForceSpellRES("GelVa97", Player5)) // Cast "Kill Vampire" Spell for relevant player
    END
    
    IF
            	Kit("GeKitVa")  // Shadow Lurker Vampire Kit	
    		Global("Sunlight","GLOBAL",4) // Set by spell "Inniate Vampire Sun Burn"(GelVa98.spl)
    		OR(2)
    		!HasItemEquiped("GelVa99", Player6) // Daywalker ring
    		!HasItem("GelVa06", Player6) // Vampire Wepon +5 given by Vampire Origin Shape.
    THEN
    	RESPONSE #100
    		ActionOverride(ReallyForceSpellRES("GelVa97", Player6)) // Cast "Kill Vampire" Spell for relevant player
    END
    

    Custom vampire script for GelVa20.cre, GelVa21.cre, GelVa22.cre
    IF
    		Global("Sunlight","GLOBAL",4)
    THEN
    	RESPONSE #100
    		ActionOverride(ReallyForceSpellRES("GelVa97", Myself))
    		DestroySelf() 
    END
    
    // Copy orginal vampire script below or above?
    

    Compile issue:
    TimeOfDay(DAWN_START, DAWN_END) // Fails to compile, something wrong with setup

    Maby theese can work?:
    TimeOfDay(DAWN) /// Does not exists in the time of day .ids
    Time("19:00", "07:00") /// Do not know the exact time of sunlight start and end
    Post edited by Gel87 on
  • Gel87Gel87 Member Posts: 158
    edited January 5
    Or maby:
    IF
    Global("Sunlight", "GLOBAL", 1)
    OR(2)
    TimeOfDay("19:00", "23:59")
    TimeOfDay("00:00", "07:00")
    THEN
    RESPONSE #100
    SetGlobal("Sunlight", "GLOBAL", 2)
    END

    Also:
    Creatures in shadows often SHIMMER in games.

    !HasVisualEffect(Myself, "SHIMMER")

    Any1 know if there is a lot of "SHIMMER" effects in the game? And if they infact do SHIMMER in shadows?

    Note to self:
    ACTION_IF ~!READ_ASCII_BYTES~ ~race.ids~ ~%VAMPIRE_RACE_STRREF%~ BEGIN
      APPEND ~RACE.IDS~ ~your_mod_folder/race.ids~
    END
    

    Needed files for putting vampires in bg1ee:
    CRE
    BAM
    ITM
    SPL

    other?

    RACE.IDS
    125 VAMPIRE

    Example:
    BEGIN ~Add Vampire Race~
      INCLUDE "your_mod_folder/weidu_external/your_weidu_external.tph"
      // Add Vampire to RACE.IDS
      COPY_EXISTING ~RACE.IDS~ ~override/RACE.IDS~
        PATCH_IF ~(SOURCE_SIZE != 0x7A0)~ BEGIN
          // Ensure proper size of RACE.IDS
          REPLACE_TEXTUALLY ~IDS V1.0~ ~IDS V1.1~
        END
        APPEND ~
    125 VAMPIRE
    ~
      BUT_ONLY
      // Add your vampire creatures here (copy from BG2 EE to your mod folder)
      // Add other necessary modifications...
    
      // Example: Add Vampire kit to class table (replace with your actual class table)
      INSERT_BYTES ~kits/classes.2da~ 0x8 0x01 // Assuming 1 is the column for vampires in the class table
      // Add other necessary modifications...
    END
    
    
    
    Post edited by Gel87 on
  • jmerryjmerry Member Posts: 3,853
    I ... don't really want to engage with this project of yours. It fundamentally doesn't interest me. But all of the work you've put in betrays a fundamental lack of understanding of how things work. It's not just a case of needing to make little edits. Some examples from that latest post:
    !HasVisualEffect(Myself, "SHIMMER")
    There is no such thing as a "HasVisualEffect" script trigger. Or any trigger with the word "visual" in it. It took me a few seconds to check that, because I happen to have the IESDP page for script triggers up as a reference. And among the VVC files (visual effects), there is no SHIMMER.

    All this for testing when you should apply the sunlight threat? There's precedent for that, in the form of Hexxat's character. And you know what that uses? Her script checks for whether she's outdoors during daylight hours, and whether she's wearing the key cloak that protects her. That's it, aside from the actual mechanics of swapping between different versions of her undroppable amulet.
    Example:
    BEGIN ~Add Vampire Race~
      INCLUDE "your_mod_folder/weidu_external/your_weidu_external.tph"
      // Add Vampire to RACE.IDS
      COPY_EXISTING ~RACE.IDS~ ~override/RACE.IDS~
        PATCH_IF ~(SOURCE_SIZE != 0x7A0)~ BEGIN
          // Ensure proper size of RACE.IDS
          REPLACE_TEXTUALLY ~IDS V1.0~ ~IDS V1.1~
        END
        APPEND ~
    125 VAMPIRE
    ~
      BUT_ONLY
      // Add your vampire creatures here (copy from BG2 EE to your mod folder)
      // Add other necessary modifications...
    
      // Example: Add Vampire kit to class table (replace with your actual class table)
      INSERT_BYTES ~kits/classes.2da~ 0x8 0x01 // Assuming 1 is the column for vampires in the class table
      // Add other necessary modifications...
    END
    

    Oh dear. First off, that IDS modification? IDS is a plain text format. There's a header row - which is sometimes a number, sometimes IDS V1.0, and sometimes IDS_V1.0 - and then there are rows with the data. A size check on that is nonsensical; unlike the binary formats, there's no "every valid file of this type has at least X bytes, and the data at any location within the first X bytes has a fixed purpose". So, you check whether the file is exactly 1952 bytes for no good reason, and do a text replacement on the header that probably doesn't actually affect anything if it isn't.
    And once you're done with that, you append a duplicate of an existing line. Or would, if APPEND wasn't an ACTION with two arguments instead of a PATCH with one; that's a syntax error (The PATCH with one argument is APPEND_FILE). The whole thing is a waste, because the vampire race already exists in all versions of BGEE.
    Oh, and that INCLUDE line you had? That's saying that you're going to put a library file at that file path location, which is clearly meant to do something. But everything that follows doesn't use any original functions or the like, so I have no idea what it's meant to do. Also, obvious placeholder name is obviously wrong; the "weidu_external" setup you see in mods is for putting files created during the installation process outside the mod folder itself, for purposes of immutability.

    Oh, but that's not all. Then there's the next thing you do.
    INSERT_BYTES ~kits/classes.2da~ 0x8 0x01 // Assuming 1 is the column for vampires in the class table
      // Add other necessary modifications...
    END
    
    First, INSERT_BYTES is a PATCH operation. If you try to do it without having a file already loaded, as you do here, it'll throw a syntax error.
    Second, INSERT_BYTES takes two integer arguments; pad the file with X zeros at position Y. It does not take a string argument at all - that's another syntax error.
    Third, inserting zeros (nulls) into a plain text file such as a .2da is a nonsensical thing to do.
    Fourth, there is no "kits" folder or "classes.2da" file in the game, so the file you're apparently trying to insert nulls into doesn't even exist.
    Fifth, that floating END with nothing to be ended is another syntax error.
    Finally, adding a kit - especially a player-usable kit - is a rather complicated action that touches on lots of different 2da files. Complicated, but standard. There are third-party libraries for it, so you just INCLUDE that library and use the function.
  • Gel87Gel87 Member Posts: 158
    jmerry wrote: »
    I ... don't really want to engage with this project of yours. It fundamentally doesn't interest me. But all of the work you've put in betrays a fundamental lack of understanding of how things work. It's not just a case of needing to make little edits. Some examples from that latest post:
    !HasVisualEffect(Myself, "SHIMMER")
    There is no such thing as a "HasVisualEffect" script trigger. Or any trigger with the word "visual" in it. It took me a few seconds to check that, because I happen to have the IESDP page for script triggers up as a reference. And among the VVC files (visual effects), there is no SHIMMER.

    All this for testing when you should apply the sunlight threat? There's precedent for that, in the form of Hexxat's character. And you know what that uses? Her script checks for whether she's outdoors during daylight hours, and whether she's wearing the key cloak that protects her. That's it, aside from the actual mechanics of swapping between different versions of her undroppable amulet.
    Example:
    BEGIN ~Add Vampire Race~
      INCLUDE "your_mod_folder/weidu_external/your_weidu_external.tph"
      // Add Vampire to RACE.IDS
      COPY_EXISTING ~RACE.IDS~ ~override/RACE.IDS~
        PATCH_IF ~(SOURCE_SIZE != 0x7A0)~ BEGIN
          // Ensure proper size of RACE.IDS
          REPLACE_TEXTUALLY ~IDS V1.0~ ~IDS V1.1~
        END
        APPEND ~
    125 VAMPIRE
    ~
      BUT_ONLY
      // Add your vampire creatures here (copy from BG2 EE to your mod folder)
      // Add other necessary modifications...
    
      // Example: Add Vampire kit to class table (replace with your actual class table)
      INSERT_BYTES ~kits/classes.2da~ 0x8 0x01 // Assuming 1 is the column for vampires in the class table
      // Add other necessary modifications...
    END
    

    Oh dear. First off, that IDS modification? IDS is a plain text format. There's a header row - which is sometimes a number, sometimes IDS V1.0, and sometimes IDS_V1.0 - and then there are rows with the data. A size check on that is nonsensical; unlike the binary formats, there's no "every valid file of this type has at least X bytes, and the data at any location within the first X bytes has a fixed purpose". So, you check whether the file is exactly 1952 bytes for no good reason, and do a text replacement on the header that probably doesn't actually affect anything if it isn't.
    And once you're done with that, you append a duplicate of an existing line. Or would, if APPEND wasn't an ACTION with two arguments instead of a PATCH with one; that's a syntax error (The PATCH with one argument is APPEND_FILE). The whole thing is a waste, because the vampire race already exists in all versions of BGEE.
    Oh, and that INCLUDE line you had? That's saying that you're going to put a library file at that file path location, which is clearly meant to do something. But everything that follows doesn't use any original functions or the like, so I have no idea what it's meant to do. Also, obvious placeholder name is obviously wrong; the "weidu_external" setup you see in mods is for putting files created during the installation process outside the mod folder itself, for purposes of immutability.

    Oh, but that's not all. Then there's the next thing you do.
    INSERT_BYTES ~kits/classes.2da~ 0x8 0x01 // Assuming 1 is the column for vampires in the class table
      // Add other necessary modifications...
    END
    
    First, INSERT_BYTES is a PATCH operation. If you try to do it without having a file already loaded, as you do here, it'll throw a syntax error.
    Second, INSERT_BYTES takes two integer arguments; pad the file with X zeros at position Y. It does not take a string argument at all - that's another syntax error.
    Third, inserting zeros (nulls) into a plain text file such as a .2da is a nonsensical thing to do.
    Fourth, there is no "kits" folder or "classes.2da" file in the game, so the file you're apparently trying to insert nulls into doesn't even exist.
    Fifth, that floating END with nothing to be ended is another syntax error.
    Finally, adding a kit - especially a player-usable kit - is a rather complicated action that touches on lots of different 2da files. Complicated, but standard. There are third-party libraries for it, so you just INCLUDE that library and use the function.

    Thank you so much :smiley:
    - I will see if I can locate hexxat's script in near infinity :smiley: and use that instead.

    - I guess i will have to locate it in baldur.bcs for it to affect. Since it is supposed to affect player 1 to 6 depending on who have the kti. And I dont know how i implement that, if i just compile it like any other script, or if i have to append or anything.

    - I also need to include it for my "turned vampires" but that should be simple then by adding it to their copied and custom bcs.

    - The reason i built it like that, was to make sure the script set a global value even if i was using protective items from sunlight, due to the fact if i had turned vampires they would need to still die in sun. But i guess it may be cleaner to instead check for items first in baldur.bcs, and then instead check for sunlight condition seperate for their creature.bcs. So that unnecesary script dont have to run if none of theese creatures exist? I dno xD

    - Now comes the part where you explain me all wrong with that adding vampire script. I kinda asked chatgpt how to do it, and how to make it so that it dont interfere with other mods. And i tried to make it explain me whats going on as i dont understand that script at all xD So i guess i have to tune down the chat gpt.

    - The sunlight script i asked first chatgpt, then i went to nearinfinity, copied a bcs. Modified, to see for correct colour codes, and used that github isdp page to look for triggers and actions, although i dont always understand their example of how its written correctly :P And i guess that one is pretty clean. But i think i will instead of Summon use ReallyForceSpellRES to summon creature instead, because this i got from chatgpt and i dont know if works, it also white here in the code, which makes me suspisious.
    ActionOverride(ANYONE, SUMMON("GelVa30"))
    Instead use this:
    ActionOverride(Player1, ReallyForceSpellRES("GelVa30", Player1) // Spell that summon invi creature

    - When it comes to the earlier post, its supposed to be a spell like wish.
    * It will be a HLA which can only be picked after you have picked 5 other HLA's
    * It will be the last state of vampire, also make the vampire immune to sunlight, via his wepon.
    * The spell will be applied via lua, with AP_GelVa10, it will summon a Genie which starts a dialog, and will summon the first vampire once you answere, then first vampire will say something and then i will Cast a 1ranged spell to simulate i drain all his blood and i get some powers.
    However i struggle with this spell, i tried something as simple as to copy agnazaar sorcer projectile and spell, change R G B values and copy spell, and then the spell would not be in the game, most likely because projectile needs to be added to .ids table for projectiles? I have also issues simulating me bending over the sleeping enemy. No idea how xD Maby just attack once function?
    I changed into a normal burning hands projectile, and spell appeared ingame.
    I added some effects as delayed exploding death, piercing damage and sleep. Those worked...

    I also know that Shapechange: Vampire Originator has global value issues, because i thought i could start at global value 0, but i have now learned that 0 is always true on those, so need to make every value 1 number higher xD Spell would be made to set a global value, and then script would take over. But first i need the end spell (Blood Drain First Vampire) to look somewhat realistic lol xD

    When it comes to kit, i have made those before. Like 11-12 of them that works. I now use argent77 version 4.0 of add kit. So that part i will be able to do. Im just terrible at scripting, I kinda try to learn it from scratch xD

    The other issue, why i ask very newbeginner questions, is due to the fact that im stuck in the north sea, and dont have all my previous files and its been years since u made kitsxD

  • Gel87Gel87 Member Posts: 158
    I bought bg2ee now as well and checked hexxat scripts.
    Im not the best to understand, but seems like TimeGT and TimeLT if i remember correct was used for DUSK_START to DAWN_START.
    Else "outdoor" was also an check. And there was a check for area "temple of sun, darkened or smt".
    Other than that it was area checks.
    All the areas in city etc.

    But i cannot use areachecks for every area in BG1, BG2, BG2 exspansion, SOD... Or well, i could.. But way more work i guess for me.

    So my plan has kinda changed into checking for:

    TimeGT(DUSK_START)
    TimeLT(DAWN_START)
    (avoid, all the day, morning, etc checks... cause i guess DUSK/DAWN is more relevant for sunlight)

    Then check:
    NOREST , if i remember correctly no places with sunlight have a NOREST function...

    Cause Outdoors is not a factor i think, cause within this table there is also city, forest, etc...

    Maby keep checks for !Areachecks for Dungeon/extendednight etc/dreamarea etc

    Anyway, i will fineread hexxat script, and have started to copy all i can find related to vampires in bg2, so i can copy creatures, animations, bams, hexxat's spells etc and take it from there. Also check for race.its or .2da related stuff and check that it match.

    Anyway, COPY if not exists. How do i do this with:
    BAMS
    Creatures
    Sounds
    Projectiles
    ?

    And whats the best way to add on existing IDS and possible 2da if not exist?
  • Gel87Gel87 Member Posts: 158
    Did not have much to yesterday, but i went true and copied:
    BAMS for hexxat's spells (blooddrain etc)
    BAMS for vampire movement/attacking etc animation
    All other BAMS relevant for vampires.
    Scripts. (BCS/BAF) - All relevant for normal vampires, blood and hexxat.
    Sounds. (WAV) - All sounds for vampires
    VVC. all relevant for vampire.
    INI for both vampire genders.
    Wepons. (I will not start with all those immunities at level one, but nice to copy effects from and have as referance)
    Vampire creatures.
    Spells.
    EFF
    etc

    Then i made a notepad document, to fill in info with them, so i have more control.
    Some of this is to make vampire animation to appear in baldurs gate 1 EE. (Hope it will)
    Some is to make custom Blood drain and maby other spells, and to make sure sounds, effects, bams and all are availeble in bg1 as well.

    So, basicly for my summoned vampires, i will copy one relevant creature, make adjustment and make like 4 types depending on level of spell.
    Fledgling Vampire (Custom weak one)
    Vampire (Custom, without lvl drain, or a low chance for low level drain)
    Elder Vampire (Custom one)
    Ancient Vampire(Custom one)

    I want them custom to addjust them more balanced. And i want to be carefull with level drain due to enemies lvl drained to death are to easy, and i also get no XP if they die by that reason. Same as mindflayers with their intelligent kill^^

    Now there is one issue:
    They have strings for battle shouts and selecting sounds and such.
    Those don't exists in BG1EE, and they are connected to sounds. If i add new string entries for those, how will those be connected to the sounds?

    How do i make a .bam, forexample for a spell icon, wepon icon? Cause currently im using the troll one. Would be cool to make one myself. Same for bat spells, like a simple bat symbol.

    I also noticed each bam has like 546 pictures with mva....BAM for monster movement. Is it possible to create a new bam from chosen pictures of those, if one export them as pictures. To simulate vampire bending over while blood draining, and then somehow add that as a function when casting blood drain?

    Currently i made my wepons with short sword profience, but maby i should add them as hands, and add them to vampfist table? Like a monkfist.2da, im already using the usability flag of sun soul monk anyway.
  • Gel87Gel87 Member Posts: 158
    - I have now vampires in bg1ee. You where correct. Only thing missing was the creature itself.
    - (This was not the case last time i tried, but i played bg1ee via sod then, and bg1ee was deleted and was not able to download again somehow. )
    - But i guess i need to check SOD as well, if not i will copy relevant .bam, sounds, and INI files.
    And in that case i need the function for: IF game is: Bg1ee / bg2ee / sod. What is the correct way of writing that?

    The stringrefs are not identical between bg1ee and bg2ee. Vampires has names as long discussions. I guess that is easy with SAY_NAME1 and SAY_NAME2. But the issue after that is SOUNDS:
    I dont remember the correct spelling of all now but its something like:
    FIRST_MEETING: Ohhh, a mortal. BLABLA
    BATTLE_CRY1: BlaBla!

    How do i make new strings for those, and connect them to audio and then add them to creature?
  • Gel87Gel87 Member Posts: 158
    edited January 7
    Comment for later use(yes had to try chatgpt again since i know nothing like John Snow) :

    /////////// Example:
    ACTION_IF GAME_IS ~bgee sod~ THEN BEGIN
    	BEGIN @1 "Text01 [Vamp1.WAV]"
        		SAY ~Text01~ [Vamp1.WAV]
    	END
    
    	BEGIN @2 "Text02 [Vamp2.WAV]"
        		SAY ~Text02~ [Vamp2.WAV]
    	END
    
     // Add Text01
    	BEGIN @3 "Text03 [Vamp1.WAV]"
           		SAY ~Text03~ [Vamp3.WAV]
     	END
    
     // Add Text02
     	BEGIN @3 "Text04 [Vamp4.WAV]"
            	SAY ~Text04~ [Vamp4.WAV]
    	END
        BUT_ONLY
    END
    
        // Modify BATTLE_CRY1 and sounds in GelVa20.cre
    COPY ~GelVa20.cre~ ~override/GelVa20.cre~ /// Or copy from mod folder if new, or altered.
            WRITE_ASCII 0x74 "Text01 [Vamp1.WAV]" #10 // Example for BATTLE_CRY1, check list
            WRITE_ASCII 0x8C "Text02 [Vamp2.WAV]" #10 // Example for SELECT_COMMON1, check list
    

    In this example:

    0x74 is the offset for BATTLE_CRY1.
    0x8C is the offset for the next sound field (e.g., SELECT_COMMON1).
    #10 is the number of characters to write.
    You might need to adjust these offsets based on the actual structure of the creature file. You can use tools like NearInfinity to inspect the structure of the CRE file and find the correct offsets.


    "Yes, the ASCII codes for the characters in the strings will be listed in NearInfinity. When you open a CRE file in NearInfinity, you can find the strings in the "ASCII" tab. NearInfinity will display the ASCII codes for each character in the string. You can use this information to modify or create strings in your TP2 file.

    For example, if you have the string "Hello" in the ASCII tab, you will see the corresponding ASCII codes for each character in the string"

    DEFINE_ASSOCIATIVE_ARRAY vars
    ~STR_VAR10~ ~Your text goes here.~
  • Gel87Gel87 Member Posts: 158
    COPY ~Kitname/CreatureName.cre~ ~override/crename.cre~ //handling the creature
    WRITE_ASCII ~0x0248~ ~Scriptname~

    (just needed to remember this xD)

    I struggle a little, spells and such are starting to take their final forms. But my issue is that i have forgotten how to import that sunlight script. I will change globalnames from sunlight to GelSunlight just in case this mod ever becomes something some1 else would like to use.
    I think the sunlight script needs to be in baldur.bcs somehow. But i forgot how to implement that into the game via tp2 file. But i have that function on my minflayer kit and can look when back home, because at that time there was no scroll bars, and mage kit section was full, so had to use baldur.bcs script, start a figher illithid kit, then game would transform me into mage and give me the correct kit. But i got loads of help to do that, so i dont remember all to well, but i think i will manage that part when i get home xD

    To avoid letting forexample melf's minute shower destroy my wepon after drain, so that wepon reaper:
    "Try using the opcode #143 . Like said, the 111 is magical item, the 143 is normal item, the 111 can be at it's slot while you have the 143 too, and the 111 is used first. So you get to trow the ~minimeteors and when they end, you still have the 143 equipped at the slot it was originally in."

Sign In or Register to comment.