Instalar Steam
iniciar sesión
|
idioma
简体中文 (chino simplificado)
繁體中文 (chino tradicional)
日本語 (japonés)
한국어 (coreano)
ไทย (tailandés)
Български (búlgaro)
Čeština (checo)
Dansk (danés)
Deutsch (alemán)
English (inglés)
Español de Hispanoamérica
Ελληνικά (griego)
Français (francés)
Italiano
Bahasa Indonesia (indonesio)
Magyar (húngaro)
Nederlands (holandés)
Norsk (noruego)
Polski (polaco)
Português (Portugués de Portugal)
Português-Brasil (portugués de Brasil)
Română (rumano)
Русский (ruso)
Suomi (finés)
Svenska (sueco)
Türkçe (turco)
Tiếng Việt (vietnamita)
Українська (ucraniano)
Comunicar un error de traducción
Note that "commenting out" a line means to place two forward slashes before it. So to "comment out" the phrase "Hello friends." I would change it to "//Hello friends." In these tutorials I might instruct you to comment out lines instead of deleting them so that you can easily revert your changes later if you so choose, just by removing the forward slashes that you added.
2. Now go into the Data\Public\Epic_Encounters_071a986c-9bfa-425e-ac72-7e26177c08f6\Scripts folder.
3. Open "AMER_MAIN_PlayerFeatureFunctions.charScript" in a program like notepad.
4. On line #722 you will find this text:
Set(%AMER_OoCHealingEnabled, INT:1)
5. Change it to this:
Set(%AMER_OoCHealingEnabled, INT:0)
6. Save the file and close; you're done! (If starting a new game, you will need to save that game, then re-load it for this change to take effect)
2. Now go into the Data\Public\Epic_Encounters_071a986c-9bfa-425e-ac72-7e26177c08f6\Scripts folder.
3. Open "PUZZLE_HiddenPerception.itemScript" in a program like notepad.
4. At the top of the file, on line #10 is the text:
EXTERN FLOAT:%AMER_RequiredPerceptionModifier = -2
5. Modify the "-2" at the end of that line to whatever you like. If you make it "5" it would mean that all hidden objects need 7 more Perception to see than they do now. Making it "0" would return it to the original game's values.
6. Save the file and close; you're done!
1. Go to your installtion directory.
2. Now go into the Data\Public\Epic_Encounters_071a986c-9bfa-425e-ac72-7e26177c08f6\Scripts folder.
3. Open "AMER_MAIN_CharacterMechanics" in a program like notepad.
4. On line # 144 is the text:
Add(_Index, INT:0)
5. You can change the value, currently zero, to whatever you like. A positive value will mean that your party is considered as that many levels higher than you actually are for the purposes of scaling. A negative value will do the reverse. If you'd like to disable scaling entirely, set this to a very large negative number, something like -99 will do the trick.
6. Save the file and close; you're done!
To disable enemies from actually "leveling up" (which, again, is not where the majority of their power is derived from), you will need to have a very basic understanding of The Divinity Engine Enhanced Edition (and have it downloaded); there are plenty tutorials out there to supplement these instructions. Lastly, please keep in mind that performing the steps below will render any saved games incompatible. So this tweak is one you will want to do before starting a new playthrough.
1. Go to your installtion directory.
2. Now go into the Data\Mods\Epic_Encounters_071a986c-9bfa-425e-ac72-7e26177c08f6\Story\RawFiles\Goals folder.
3. Delete "_AMER_ScaleEncounters.txt" .
4. Open "The Divinity Engine Enhanced Edition".
5. Open the "Epic Encounters" project.
6 Load any level, "AMER_TEST" is probably fastest.
7. Open the "Story Editor".
8. Click File -> Generate Definitions and Build.
9. Save and close the editor, you're done!
2. Now go into the Data\Public\Epic_Encounters_071a986c-9bfa-425e-ac72-7e26177c08f6\Scripts folder.
3. Open "AMER_MAIN_CharacterMechanics" in a program like notepad.
4. On line # 782 change this text:
IsLessThen(_Count, 6)
to this:
IsLessThen(_Count, 0)
5. Save the file and close; you're done!
2. Now go into the Data\Public\Epic_Encounters_071a986c-9bfa-425e-ac72-7e26177c08f6\Stats\Generated\Data folder.
3. Open "Character.txt" in a program like notepad.
4. Starting at line # 86 you will find the following lines of text:
new entry "CasualNPC"
type "Character"
data "Vitality" "-50"
data "ChanceToHitBoost" "-25"
new entry "NormalNPC"
type "Character"
new entry "HardcoreNPC"
type "Character"
data "Vitality" "100"
data "ChanceToHitBoost" "20"
5. Each of these three entries influences the stats of every NPC in the game for a given difficulty setting. As you can see, "CasualNPC" and "HardcoreNPC" both already have vitality modifiers. If you'd like to change the vitality modifier for Classic difficulty, you just need to add a line for vitality in "NormalNPC"--in the same way the others have it. Whatever number you choose for vitality is the percent of base vitality that is added to the NPC's total. If you use a negative value, NPCs will have less vitality. Conversely, using a positive value will give NPCs more vitality. Note that using a negative value of -100 or less may cause problems, I'm not sure.
In the unmodded game, "HardcoreNPC" has a vitality entry of "20".
6. Save the file and close; you're done!
I've tried to maintain some semblance of organization, though as things got bigger and I got more afraid of nonsensical crashes, some things ended up in places that might not makes the most sense. That being said, lets talk for a moment about the "AMER_MAIN" family of character scripts. There are ten of these in total, and they form the backbone of Epic Encounters' scripting.
AMER_MAIN_PlayerExtensions: Only player characters have this script, it does things that only players would need. Things like the maximum resistance system and various talent/ability bonuses happen here.
AMER_MAIN_CharacterExtensions: This script, and consequently, every AMER_MAIN script to follow in this list, is attached to every character in the game with DefaultCharacter script (this should be every character). Events and their respective function calls are stored here. Not too much interesting happens are apart from preventing on-turn / on-turn-end effects from occuring twice when using the "wait" feature in combat.
AMER_MAIN_CharacterFunctions: This is pretty much anything related to reactions, but Lucky Charm and Untreated Poison are here too.
AMER_MAIN_CharacterMechanics: Global mechanics that everything(tm) needs to have; lots of major systems in here. The scaling system, the applicator consume event handler (I'll talk about this in more detail somewhere else), shotgun limiting, hard disable immunity system, Hyperacute invisibility detection, backstab multiplier scaling, and the chain system--these are all here.
AMER_MAIN_SkillExtensions: This one got pretty bare when I split the skill scripts into three parts. There isn't much here, but it has part of the applicator consume system and it also has on-turn handling for pseudo-statuses that have nothing to do with "faking" saving throws.
AMER_MAIN_SkillCasts: Super important, also super long. This probably needs to be separated into a few parts. This script has all of the initial work that needs to be done when a skill is cast. Pretty much if a skill needs to do something weird, it has some inital values set or some functions called here. Also, precentage-based healing is calculated here.
AMER_MAIN_SkillFunctions: Functions for spell effects that aren't dependant on first faking a saving throw. Pretty much every spell here has a unique function that gets called when its applicator consume is handled.
AMER_MAIN_Statuses: Oh boy oh boy, this one is fun; this is where the new statuses are made. New statuses that involve more than just a simple, static buff/debuff probably havea both an initial function and an upkeep function in here. Additionally, toward the bottom of the script is where "InitializeStatus" and "StatusUpkeep" are. These functions are what make saving throws happen and call a status' unique functions. Also Torment's on-movement damage hangs out here, because why not?
AMER_MAIN_StatusParameters: Every fake status needs to intialize a set of variables so that the fake status system can handle them modularly. There are two sets of variables for (almost) all of these statuses: one for initial application, and one for its upkeep. This is where you attribute a status its special functions, if it has any, as well as its saving throw and text information.
AMER_MAIN_SubRoutines: This is stuff that gets called from a variety of places. Movement detection, the function that calculates status success chance, the function that generates a status' saving throw string, the function that allows you to do remote effects to a character, functions that un-map an attribute/armor value, removing current AP, and the function that allows you to differentiate backstab damage bonuses based on an attack's base damage multiplier. All of that stuff is here.
In this section I will discuss how you can use "applicator consumes" to create unique spell effects as I have in Epic Encounters. I do assume some understanding of the editor, the game's stat files and how to make a skillbook that grants a spell, and scripting for this tutorial. Firstly, let's define what exactly an applicator consume is, and why it's necessary to use.
In this game, there's only so many things that can be changed within skilldata.txt--indeed one can very quickly run out of ways to make spells feel unique when only using these parameters. So, if we want to script a spell, we need a way for the game's scripting to pick up on the spell being used. We can catch an OnSkillCast event for this spell, but what if we need to do something to the spell's target(s)? How do we know what is being targeted, how do they know who the caster is? One would assume that the use of CharacterGetStatusSourceCharacter() would help here, but let me save you the trouble--this function is bugged and can't differentiate between different consumes. This is where applicator consumes, and my underlying systems for them, come in.
An "applicator consume" is nothing more than a featureless set of two potion effects, both with the same stackID, so they can cancel one-another out. The basic idea is that a spell can apply one of these potion effects, so that it we can catch the OnCharacterStatus(__Me, CONSUME) event in characer scripts. Once we've caught this event, we can check against a list of specific consumes and, for whichever we do have, we can apply its couterpart--the one that removes it because it has the same stackID. Now, mind that in Epic Encounters this process is a little different for the sake of performance, but that's another topic--what's important is that we understand that we can use unique applicator consumes to allow us to attach scripted sequences to any spell we desire.
So, let's start basic, we're going to make a simple spell that displays a text string over the head of the affected character and the caster.
1. Open up the editor and load epic encounters' level called AMER_Test. This is our testing suite.
2. Make a spell! Let's use "Target_ChillyWind" as our base, so go ahead and make a copy of its entries (don't forget the leveled entry, "Target_ChillyWind_4") and rename it to whatever you like; I'll use "AMER_SKILL_TestSpell" as my example.
3. Make an applicator consume set! Go over to potion.txt and paste this in somewhere:
new entry "AMER_ApplyTestSpell"
type "Potion"
data "StackId" "AMERapplytestspell"
data "Duration" "0"
new entry "AMER_RemoveApplyTestSpell"
type "Potion"
data "StackId" "AMERapplytestspell"
data "Duration" "0"
4. Now we need to make our spell apply the applicator consume, so go back over to the spell data and change this:
data "SkillProperties" "Chilled,100,2"
to this:
data "SkillProperties" "Consume,100,2,AMER_ApplyTestSpell"
5. Now, before we start scripting anything, it's important to note that from this point on we'll be making use of "UnusedDev" files. These files are exact copies of the files used in the mod, but are themselves, unused. The reason this is done is because the editor doesn't error-check scripts correctly if they are in use, so we will always make changes first to the UnusedDev version of a script, try saving the script, if no errors are found, copy the script and paste into the actual copy of the script.
6. So, open up "AMER_UnusedDev_MAIN_SkillFunctions" and "AMER_MAIN_SkillFunctions"--this is where our scripting for this spell will go.
7. Go ahead and copy-paste this under the huge F U N C T I O N S banner near the top of the file, below the global variable declarations:
EVENT TestSpellInitial
VARS
CHARACTER:_CharSource
ON
OnFunction("AMER_TestSpellInitial")
ACTIONS
CharacterConsume(__Me, "AMER_RemoveApplyTestSpell")
IF "c1"
GetVar(_CharSource, __Me, "AMER_SkillSource")
THEN
StatusText(_CharSource, "AMER_ChainOne")
StatusText(__Me, "AMER_ChainTwo")
ENDIF
8. Save, and if no errors have been found, copy the entire script and paste it over the contents of AMER_MAIN_SkillFunctions, save that one now as well. This is going to make "Chain Bonus x 1!" appear over the caster (_CharSource), and "Chain Bonus x 2!" appear over the target (__Me). It's important to note that here we get the caster from "AMER_SkillSource", this is always going to work, and it works because of what we're going to do next.
9. Open "AMER_UnusedDev_MAIN_SkillCasts" and "AMER_MAIN_SkillCasts", this is how we'll get the system to initialize your spell's function and the casting character when it is used.
10. This file is organized by spell school; since we copied "Target_ChillyWind", it's Aerotheurge for this spell--which is right at the top! Paste this under the //==================AEROTHEURGE========================// tag.
EVENT OnCastTestSpell
// T E S T S P E L L
VARS
//=========================//
FLOAT:_Duration = 2.0
//=========================//
FLOAT:_Attribute
ON
OnSkillCast(__Me, "AMER_SKILL_TestSpell")
ACTIONS
//Broadcast expect applicator event.
Add(_Duration, %AMER_ExpectApplicatorTimeOffset)
Set(%AMER_ApplicatorConsumeInstances, INT:1)
Set(%AMER_ExpectApplicatorWindow, _Duration)
Set(%AMER_ApplicatorIsStatus, INT:0)
Set(%AMER_ApplicatorFunction, "AMER_TestSpellInitial")
CharacterEvent(__Me, "AMER_ExpectApplicatorConsume")
11. Some notes on what's happening above: The _Duration variable is how long the system waits for the applicator consume to be found before "closing itself off" from applicator consumes, 2.0 seconds is the default, it fits pretty much any spell correctly. Set(%AMER_ApplicatorConsumeInstances, INT:1) is the number of times we want to allow this spell to apply the applicator per cast, if we used a multi-projectile spell we might change this value. Set(%AMER_ApplicatorIsStatus, INT:0) is a flag we'll set if this is a spell that needs to fake being a status--that's something we'll cover another time, this spell won't do that. Set(%AMER_ApplicatorFunction, "AMER_TestSpellInitial") is how we're letting the system know which function to call when this spell's applicator consume is detected. CharacterEvent(__Me, "AMER_ExpectApplicatorConsume") is how we're disseminating this variable data to all the characters around us, and thereby letting them know who the source of this spell is.
12. Save the file, if no errors are found, copy the entire script (just like we did before) and paste it over the contents of AMER_MAIN_SkillCasts, save that one now as well. Now go ahead and reload the module (load the "Shared" module then load up epic encounters again, because that's the least crash-inducing way to reload the module).
13. Test it out! If everything worked right you should see the chain bonus texts appearing over both the caster and its target. Now you can expand from here--learn from the other functions below yours and do whatever you like! Since the function knows who the caster of the spell is and the target being hit, you can do all sorts of weird functionality based off of their statistics, statuses, vitality, even other global variables and more.
There's more of this stuff to come as I find time to write it :)
Once you download the Developer Edition you can just unzip it to your installation directory and then everything should be where I reference it to be.
I need to get some sleep now though, if there's problems with it I can help you out with it more tomorrow.
Un-zipping it in the game installation folder as it was explained on the link you provided did not put the files folders where you said. Arent they rather supposed to go into the data folder in the instalation folder?
INIT
ITEM:__Me
INT:%CurrentIsVisible=0
INT:%NewIsVisible=0
INT:%TimerStopped=0
EXTERN FLOAT:%MinPerception=0
EXTERN FLOAT:%MinDistance=0
EXTERN FLOAT:%MinPerceptionHardcore= 0
EXTERN FLOAT:%MinPerceptionCasual= 0
EXTERN FLOAT:%AMER_RequiredPerceptionModifier = -2
EXTERN INT:%IsTrap = 1
There's no simple tutorial that I could write for generic modifications, but, if you have some background with programming/scripting, it's not the most involved process to just add scripting for talents in the same way that I have already done with some. I don't remember if traits have an object scripting query or not, if they do it would be accomplished in much the same way.
If you're looking for a starting point, you'll want to scan over the script "AMER_MAIN_PlayerExtensions." That's where Epic Encounters influences talents.