A Dark Souls 3 Modding Tips and Tricks Guide By WhurDaMuffinsAt

A significant amount of the knowledge found here was taught to me by El Fonz0, Rodan, and Vawser for whose guidance I am incredibly grateful. Please note that this guide is written from the perspective of Vawser’s Cinders mod, but should still be applicable in most respects to vanilla DS3 modding and other DS3 overhauls. If you'd like to add information to this page or have questions, please message me on Discord @WhurDaMuffinsAt#7672


DSAnimStudio

General

-When editing a weapon already with an override tae, make sure to consider keeping those override animations in your new override tae that you don’t intend to override yourself

-2nd Light attacks always repeat after 3rd (Exceptions can be made in the HKS. See below)

-Final moveset implementation steps for all weapons: Register tae in behbnd. Register Override Number (tae number) in Yapped under EquipParamWeapon

-You can view dummypolys in Anim Studio under Scene.

Event Editing

-How to set up events for editing: Make sure animation is set to standard in Anim info and check import hkx. Then copy paste (Ctrl C/V) the events from the original animation.

-Slow down or speed up the end of attack pauses with Jump Tables.

-Blend smooths the transition from any previous animations

-When adding multiple overlapping InvokeAttackBehavior events to an animation, you must increase unk04 in intervals of 1. For example, with 2 overlapping InvokeAttackBehaviors set one of their unk04s to 1 and keep the other at 0.

-SpawnOneShotFFX can be used to add vfx to a weapon without damage for the event’s duration. -SpawnOneShotFFX has a Timer Number field that needs to be set in increments of 1 when you have overlapping vfx calls.

-OverrideWeaponModelLocations is used on WAs to sheathe left-hand weapon/shield.

-The WA for a paired weapon needs a slightly different OverrideWeaponModelLocations than normal weapons. RHModel1AbsorpPosParamCondition and RHModel1ChangeType need to be set to 2 in order for the left-hand model to be called during the WA when used 1-handed. Additionally, InvokeWeaponArtWeaponStyleCheck is needed.

-Event WeaponArtFPConsumption calls the FP drain from SwordArtsParam.

-AiModule_ChangeAngle used for WAs as well most paired weapon attacks (potentially for off-hand weapon trail vfx).

-The SetSPRegenRatePercent event exists on nearly all animations, affecting stamina regen while attacking and blocking.

-The InvokeManualAttackAiming event is used on slow animations to allow for manually aiming attacks while locked on.

-The event InvokeEventEzStateFlag<HKS_env301> is needed on WA activators to transition into their follow-up attack(s). The event AddSpEffect(100570) is needed on the activator as well to allow for the R1 follow-up for WAs like the Ringed Knight Paired Greatswords.

-JumpTables 103, 104, 106, 107, 108, and 121 are absent from Bloodborne animations and should be added with appropriate frame adjustments. InvokeDS3Poise and BlendToIdleOrMovement are needed as well.

-Event RootMotionReduction is found on Jump attacks and is used to reduce the distance the character travels during an animation. It can be used to effectively change running animations into normal attacks with no/very little animation funkiness. Values between 1 and 5 typically work best.

-The event DebugAnimSpeed is used to speed up or slow down certain parts of an animation.The number you set will convert the area of the event into that many frames. For example, a 10 frame event set to 20 will play at half speed while setting it to 5 will play at double speed.

-Jump Table 5 calls for the window where the animation can be parried.

-Jump Table 8 calls for invincibility frames.

-AddSpEffect_Multiplayer ID 31 is used to add the counter frame effect. Bloodborne animations often have additional AddSpEffect_Muliplayer events, but these should be deleted after porting.

-As explained by Rodan, SpawnFFX_BySpEffect allows one to call ffx only when a specifically chosen speffect is active.

-Jump Table 7 Prevents turning during an animation.

-Tae event 710 hides a currently equipped weapon (either right or left hand) and may be especially useful when coupled with vfx that throw your equipped weapon.

-Jumptable 24 makes the character immune to stagger for it's duration.

-Event 500 sets certain parts of the character to be "move-throughable." Used mostly on large bosses.

-SendEzStateRequest refers to IfCharacterHasEventMessage in the EMEVD.

-The bullet attachment type field in InvokeBuleetBehavior dictates whether the bullet spawns according to the angle of the dummypoly. 0 is no and 1 is yes.

Animations

-Animations axxx_030330/axxx_034330 are transitions between the first and third light attack to the first charged strong attack

-Strong Attacks: SpEffect with ID100280 controls all charged variants. Without it, uncharged never triggers. Omitting it allows for omitting the charged mechanic. Changing the location of the SpEffect will change when the uncharged animation begins.

-Anim xxx920 is the backstep attack animation. It is unused since the backstep attack is just the same as the running attack.

-Anim xxx100 is kick, xxx150 is deflected, xxx200 is parried, xxx800/801/810 is falling

-Anim 034800/801/810 are unused 2H fall animations

Bloodborne

-BB animation importing: open 2 Anim Studios>standard>import hkx>Copy over events and ignore error (Ctrl a doesn’t usually grab all events in c0000.bb)

-Importing BB Paired Attacks to DS3 requires adding a second invokeattackbehavior, one for each hand with appropriate hitbox entries in atkparam.

-Transitioning from DS3 animations to Bloodborne ones and vice-versa can cause strange torso rotation especially in animations with exaggerated torso turning to begin with. To potentially fix this, you can try cropping off the beginning of the animation you're transitioning to.

Weapon Trails

-There are several types of weapon trails in Cinders that follow the weapon blade when swung. SpawnFFX_Blade is typically used to spawn these trails but sometimes SpawnOneShotFFx is used instead. Some weapon trail IDs are: 401001 is a white trail, 401002 is the typical WA white trail, 440603 is the Aquamarine Dagger’s blue trail, 440370 is the wind trail from the Storm Curved Sword, 440270 is a thick off-white trail from Ciaran’s Tracers, 440271 is a thick Orange trail from Ciaran’s Tracers, 440051 is a thick reddish-orange trail from Lorian’s Greatsword, and 440120/440806 is good flame trail.


Yapped

General

-Opening params in yapped: Open Game\Data0.bdt
If playing Cinders: Cinders\param\gameparam\gameparam_dlc2.parambnd.dcx

-You can find Spell Vfx Ids for SpawnOneShotFFX in Yapped in both the Magic and Bullet params.

-Bullets can be set to sonsume durability with the FP Cost field in BehaviorParam.

-ReinforceParamWeapon determines the damage and scaling of both infusions and reinforcement levels.

-Shoplineupparam controls who sells what.

NpcParam

-An enemy's lock-on distance is determined Lock Distance. By default, this is connected to the dummy 220.

-Disable Init Dead allows enemies to always spawn on character load in even after being killed

-Hit Stop Type causes player attacks to pause for a period of time after hitting the character when set to 1, 2, or 3. 1 and 3 are negligible, but type 2 adds a noticeable amount of pause for the player after each attack.

EquipParamWeapon

-Adding a new tae override to a weapon: EquipParamWeapon>CtrlF to find your weapon. Then find the Moveset Override Category field and change it to the new tae number. Do the same with all 15 variants of the weapon.

-Weapon VFX 0-4 in EquipParamWeapon are used to add vfx permanently to a weapon. Their location is determined by the dummpoly set in Weapon VFX 1-4 Position. With non-10000+ numbers, VFX will go on both hands if the weapon is paired, but only when 2-handed. When using 10000+ numbers, like 11300 for example, the vfx will remain when sheathed.

-Weapon item IDs are assigned automatically based on their row in EquipParamWeapon. Follow this link, then set the converter to dec, input the row number, and it outputs the item id.

-Adding a new weapon: Follow this tutorial. 2 additional fields not explained in the tutorial: Wandering Equip ID refers to what weapon is shown in your ghost’s hands in another player’s world. Vagrant Item ID likely affects how a weapon looks when dropped on the ground.

-Hit VFX 0 is the ID of the weapon’s base attack trail. This is called for the duration of invokeattackbehavior in each animation’s tae. Effect VFX Type 1 in SpEffectVfxParam removes this if set.

-Bolts and arrows have their own entries

Weapon Arts

-Changing WAs requires designating the proper WA ID and WA Anim ID in EquipParamWeapon. These IDs are found in SwordArtParam.

-To Change a WA’s (FP) values, copy it to a new row in SwordArtParam, edit your desired fields, then refer to it in EquipParamWeapon.

SpEffects

-You can add an effect to a weapon (such as fire resistance) by creating a SpEffect in SpEffectParam and adding its ID to the Effect field of the weapon in EquipParamWeapon. For ongoing effects set the SpEffect's duration to -1.

-SpEffectParam entries have a parameter called Effect VFX 0 (and 1, 2,3, etc.) that calls on entries in the SpEffectVFXParam that control what ffx is called and on what dummy(s).

-The number of frames within an animation of a SpEffects event determines how many times it is called.

-The activate after consecutive hits effect, exclusive to Pontiff’s Eye rings, works by a SpEffect that dictates a Value that must be reached (40) as defined by State Effect 1 – Condition. Each weapon’s hits add a certain amount to the counter leading towards that value and proc the effect when 40 is reached. The amount each weapon builds toward the value per swing is determined via the 6900 to 6980 speffect range. One of those is added in each atkparam entry under Target Effect. To add build-up to bullets, add one of the speffects to the bullet entry as well.

-SpEffect Cycle Occurances: Cycle Occurances are generally used to allow for effects to repeat for a desired amount of time. The basic example of this is as follows: you’ll need two separate SpEffectParam entries. The first should determine the duration of the effect (set under Duration) and after how much time the effect should repeat during its duration (set under Trigger Interval). The second should simply set the effect, whatever it is. This second entry is known as the cycle occurance because it is the effect that is cycled (repeated). Back in the first entry, input the row number of the cycle occurance under Cycle Occurance Effect ID. In the cycle occurance, set the duration and Trigger Interval to 0.

-You can fire bullets via SpEffect. Behavior ID points to a behavior row for the player which then points to a bullet. State Info has to be 334 and Bullet Behavior ID - DmyPoly ID needs to be set to a dummy poly.

-To set up a weapon buff SpEffect, for something like a lightning damage buff with lightning vfx, simply follow a vanilla example of this such as Onyx Blade’s WA. When doing this for a paired weapon, you have to manipulate the SpEffectVFXParam entries a bit after following the normal steps. In both SpEffectVFXParam entries add 11300 to the field Effect VFX - Dummy ID 2. This allows the buff to affect the weapon’s left-hand model.

Atk_Param

-Deflection (an attack bouncing off a wall) is governed by the field Hit #: Hit Type in AtkParam. Invoke collision activates deflection for the attack at the corresponding Model Points as specified by the Hitbox Start Model Point: # fields.

-Base Attack Repel in EquipParamWeapon controls the ability to not deflect off enemy shields. 31 is needed to not deflect off small shields, 71 for medium, and 80 for greatshields. Attack Correction Guard Attack Rate in AtkParam changes this value per attack. 400 is enough to avoid deflection when using any weapon type.

-Map Hit Type can control how a bullet tracks an enemy. Setting it to projectile causes airborne bullets often to miss low to the ground targets. Setting it to hazard makes these bullets track exactly to the lock-on point.

-Spells use the damage fields while weapons use the attack correction fields. It’s unclear if it’s possible to change this. From my testing I found that it is likely nothing within either BehviorParam_Pc, AtkParam_Pc, or the Bullet param that causes the differentiation. I believe it is also not the vfx or dummpoly used. My testing: I called the same chain (behavior>bullet>atk) in 2 different ways: 1st way was invoke bullet behavior event in tae, and 2nd was calling the behavior entry from speffect. The tae event called the Attack Correction fields and the speffect called the Damage fields.

-Attack Material in atk param controls how weapons interact with the map like when the hitbox connects with the ground. Setting to -1 is default (like contact creates enviromentally specific effects like scraping metal and sparks) while 1 seems to negate the contact.

Bullets

-To add a bullet to an animation: Find its bullet ID, then add it to a new BehaviorParam_Pc entry for the weapon, then refer to that entry with InvokeBulletBehavior in the tae.

-Bullet angles can be changed in the Bullet param with Horizontal Shoot Angle. This is also useful for adding multiple bullets when combined with Shoot Angle - Horizontal Interval. For example, if using three bullets you’d like to be symmetrically in front, choose x for Horizontal Shoot Angle and -x for Shoot Angle - Horizontal Interval. Vertical Shoot Angle works somewhat differently as the value can’t be negative. 90 is straight up while 180 is straight down. It is important to know that the angle is based on the current direction of the bullet. This means for example that an already vertical bullet with Vertical Shoot Angle set to 90 will go horizontally backwards.

-There are 2 ways to make a bullet call another bullet: Hit Bullet ID and Bullet Emitter: Bullet ID. Hit Bullet ID is the most common and easiest to use. Simply input the row number of the desired bullet (the child bullet) in the in the Hit Bullet ID field of the bullet you’d like it to follow (the parent bullet). The child will be called at the exact moment the parent expires. Bullets can be made invisible (by giving them no vfx) as a means of transporting a desired child bullet to a desired location in a desired amount of time. Bullet Emitter: Bullet ID allows you to call another bullet multiple times during the duration of the parent bullet. Input the row number here of the child bullet and put the desired time between firings of the child bullet under Bullet Emitter: Shoot Interval 1.

-SpEffects can be added to bullets by adding their ID to Target Effect ID 0-4.

-Bullets can be made to affect targets multiple times. This is done utilizing Continuous Hitbox and Hitbox Duration. Checking Continuous hitbox means that after the duration set by Hitbox Duration has passed the hitbox will reset and be able to damage enemies again (even despite Shared Hitbox). This is most useful for adding ticking damage/status effect aoes. These are added via SpEffect. Simply follow the example of other bullets that call for these types of effects such as Pestilent Mist (SpEffect row 170000270). Note that hitbox duration carries over from parent bullets to their children, so set parent bullet hitbox duration to whatever is desired on the child (needs testing). Hitbox duration is a perfect alternative to unshared hitboxes for many multi-projectile bullets in order to control the max number of hits on large and otherwise “shotgunnable” enemies.

-Use Shared Hit List is a checkable field in the Bullet param. If checked, the bullet will only be able to affect each target a single time, even if the bullet calls multiple bullets. It will also affect child bullets.

-Attenuation Range in the Bullet param is the range at which the bullet swaps from the in range fields to the out range fields.

-There are two methods to making bullets follow the ground/walls (snaking). For both methods make sure all bullets involved have penetrate map unchecked: 1. The first method is simply to check the box Follow Type: Follow Floor on your bullet. This will make it so that if the bullet touches the floor, it will stick to it and continue its route there on the floor. This method can be undesired because once sticking to the floor, the bullet will begin following whatever routes it feels like, snaking all over the place.
2. The second method is more complicated but allows for bullets to proceed along the ground or walls in a straight line. You’ll need to set up a bullet chain where each chains to the next as specified with Hit Bullet ID. When the initial bullet impact a surface it will immediately chain to the next bullet on impact, but the next will bounce off the surface instead of sticking to it. To force it to not bounce away, set Gravity: In Range and Gravity: Out of Range for each bullet to something like 100 or 200. This forces the bullet downwards. What happens is the bullet will still bounce but very briefly and often unnoticeably right back to the ground. Each impact will generate the next bullet, so you will need many bullets (regardless of duration) to generate any length. Around 15 works well. (Please note that the vanilla examples of this have Hitbox Duration set to 99 and Launch Condition set to 255. I don’t think these matter, but may make some difference I’m unaware of.)

-When making a bullet chain that follows the ground, it’s best to set the damage using an emitter. The reason is that the impact of each bullet with the ground is determined by the hir radius, and generally you’ll want this to be quite low. As such, it may be necessary to set it lower than you’d like that actual hit radius to be for damaging enemies. The workaround for this is having each bullet in the chain call an invisible child with Bullet Emitter: Bullet ID with the desired hit radius for damaging enemies. Vanilla Black Serpent uses this methodology.

-Homing angle is the degree to which a bullet is allowed to turn. Bullets will home toward a locked on enemy; otherwise, they will automatically home toward the player’s feet.

-Acceleration duration is the time before the bullet begins accelerating/decelerating.

-Adding self-damage to bullets: it is typically sufficient to check Self Target in the bullet’s AtkParam entry to allow it affect the user. However, bullet SpEffects also need to enable Trigger for Self on the SpEffect entry.

-Enabling Persistent Attack FX allows bullet impact IDs to stick in enemies (like arrows).

-Shoot interval is the time between bullet firings, as directed by the duration of InvokeBulletBehavior in tae, independent of the bullet’s duration.


Behbnd

-In the behbnd there may be multiple entries for certain animations (most commonly WAs) to register your new number.

-xxx330 animations have two behbnd entries and can be sped up to be largely invisible if they don’t fit quite right.

-In the generator section of Behbnd, you can see what each list of numbers is registered for by looking one row above that list’s “numelements” row. (Example is AttackBothHeavy2End_CMSG found above the 34341 list.) You can also use this method to check what certain animation IDs pertain to.

-Within each registered animation you’ll find cropStartAmountLocalTime and cropEndAmountLocalTime which can be used to crop out the beginning or end of animations. The values are in seconds.

-Looping an animation: simply replace MODE_SINGLE_PLAY with MODE_LOOPING and the animation will replay indefinitely if not canceled by another action.

-Mirroring an animation. The final line of an entry is the "flags" line. Setting this to 4 will mirror the animation.


Flver Editor

-You can check for DummyPolys using Flver Editor (MySFformat). Need the flv file from Parts Folder by unpacking the appropriate file (weapons start with wp). You can find the “Equip Model ID in Yapped under EquipParamWeapon which is also the file number in parts. In MySFformat, click on Dummies, find the range of indexes for the dummypolyids, see where each is on the weapon (where the white cross is in the image) and choose the best for the VFX you’re adding.

-You can edit and add new dummies in Flver Editor. To add a new one, copy an existing dummy entry from the large box in the dummy tab. They start with {"Position… and end in …Unk34":0}. Paste it at the end after a comma but before the closing ]. Change the Ref ID within the new entry to something unused. Lastly, click Json Mod to save your changes. To edit a dummy, select the dummy and use the translate x, y, z boxes. Adding a value to these boxes and pressing modify moves the dummy that much in the respective direction. Don’t click Json Mod after these changes.

-When adding a second flver to a weapon make sure in the yabber bnd to add the new entry just 1 number above the main flver, not 100 above it. Name the second flver the same as the first with just a _1 at the end.

-When editing a dummy’s postion manually within the JSON text, there are three sets of coordinates that can be manipulated: position, forward, and upward. The position coordinates move the dummy origin, the forward coordinates change the direction the dummy is pointing, and the upward coordinates change the rotation of the dummy.

-You can change the size of a model in flver editor. Simply go to Mesh, check the box next to scale on the left side of the opened panel, and in the 3 boxes to the right input the new proportions.


Cross-Application/General

General

-SpEffects can be added to animations by adding the AddSpEffect_… event in tae. Multiple effects can override each other based on their Effect Category setting in SpEffectParam. Using the most recent version of Yapped-Honey-Bear should make the choice clear.

-As explained by Rodan, the event InvokeAttackBehavior has a StateInfo field. This corresponds to the StateInfo field in SpEffectParam. Only when a SpEffect with StateInfo set the same as in the event will the event trigger.

-Adding L1 Moveset: Check Gai Item Menu/Is Dual Weapon in EquipParamWeapon, then add axxx_033yyy moveset in AnimStudio

-cropEndAmountLocalTime is useful for removing end of animation idling that differs from the weapons idle. Another method as laid out by NamelessHoodie is to add a SpEffect to the animation that begins where you’d like the animation to stop. Give that SpEffect an unused ID (100750 as an example) and register it in yapped. In the HKS (for information on HKS editing see the final section of this document), add the following script to any animations' functions you intend to crop:

-Dark Souls 3’s texture files for models are located within tpf files. All weapons, world models, enemy models and vfx models have tpf files dictating their textures including color. It is possible to recolor any of these textures. To find the desired tpf file: for enemies find their .texbnd.dcx within the chr folder, for weapons locate the weapon’s parts file, and for vfx models look in the tex folder within resource-ffxbnd in the sfx folder. Tpf files contain .dds files that can be edited in programs like paint.net which can be found for free here. Tpf files may contain three .dds files that govern different aspects of the texture including a, r, and n. The three different .dds filetypes may be found within separate tpf files as well. For the purposes of recoloring textures, the best tools in Paint.net are Adjustments>Hue/Saturation and Recolor.

-Vfx model tpf editing steps for duplication to new model: Example for taking the 8440 model and recoloring as new model 8450. Make a desktop folder. Find the 8440 model and its .tpfs in Game\Cinders\sfx\frpg_sfxbnd_commoneffects_resource-ffxbnd-dcx and make copies of each. Place them in the desktop folder. Rename all 8450. Open each .tpf with yabber. Inside each rename the .dds files there to 8450. Inside each of the yabber.bnds change the 8440 found there to 8450. Edit the .dds files with something like paint.net to your preference, save, and repack the .tpfs with yabber. Now open the 8450 model with flver editor. On the first page (flver bones), in the index at the top left change all 8440s to 8450s and then click modify. Then open material and click edit at the top. Under each “path” section in this next window change all 8440s to 8450s. Then click OK. You can now close flver editor. Next, add the 8450 model back into the resource-ffxbnd model folder and the 8450 .tpfs into the resource-ffxbnd tex folder. Finally, in the resource-ffxbnd yabber.bnd add the four new entries where appropriate. (Don’t forget to refer to your new model in the vfx .fxr file!)

-Using debug menu, you can view hitboxes in-game. The option to enable is game > ダメーシ… > Enable the first option

-AI Duplication: Go to DARK SOULS III\Game\Cinders\script\aicommon-luabnd-dcx\script\ai\out\bin and find the ai battle file you want based on the original character’s NpcThinkParam entry’s Battle Goal ID. Throw the file into Katalash’s lua decompiler. You should get a new file from this, so rename it giving it a new unused number (and remove .dec). Also change your new character’s Battle Goal ID to this new number. Now open it up with notepad++ and leave this be for now. Find goal_list.lua in the same bin folder. Open this with notepad++ and search for the original character’s entries (by control F the Battle Goal ID). Duplicate them giving them a new name and your new number. Back in the decompiled file, you’ll see in the file’s first 2 lines Register commands. In both of these you’ll see the Goal_… that you just duplicated over in goal_list.lua. Replace these with your new entries you made there. The first line will also have a name in quotes. Seemingly this can be anything though it may need to end in Battle. An optional step is to search for _Act01 and you’ll just prior to the _ is a name. You can replace this with anything you like throughout the document by control r then replace all. Save both this file and the goal_list.lua. Now make sure to add your new entry in the yabberbnd in DARK SOULS III\Game\Cinders\script\aicommon-luabnd-dcx. Your placement of the entry in the yabberbnd is important and should follow as closely as possible the closest lua files in number (so not at the very bottom probably).

-Stance WA - A few key components and tips: Speffects 100130-100160 force movement at specific angle at walking speed. These aren't necessary if movement should be straight but you may want the set movement speed to walk event instead. Speffect 100330 forces the stance "end" animation. The HKS script if env("アニメ終了か", 1) == TRUE means if the animation reaches its end. Mode_looping may not be ideal for custom stances because your looping animation probably isn’t a perfect loop and mode_looping doesn’t utilize blend when the animation restarts. Therefore, you should have a speffect (not the end of animation script) call for the looping animation to repeat on both the 210 and 215 animations. Using the stance of the ringed knight straight sword on a paired weapon results in the l1 attacks being replaced by guard due to Valorhearts hks scripts. To override, you need to add or sp_kind == x (where x is your tae #) after both if c_SwordArtsID ~= 32 occurrences. To add a third attack to the stance (on pressing L1) you should remove the guard/LH attack jumptables and use this script on the looping function:

Dummies

-DummyPoly 200 is for adding effects to the entire player character (such as auras).

-Dummypolys follow a pathing system where if you call a dummy with another dummy 1 number higher, that will be called as well. For example, calling dummypoly 300 will also call 301 if it exists.

-A weapon’s dummies need to be called according to which hand it is equipped in and which of the weapon’s models it is. For the most common case, this is simple: main weapon equipped in right hand (most weapons have only a single model anyway). For this case, simply add 10000 to whichever dummypoly you’d like to use. (so 10300 for the weapon’s dummypoly 300). For all other instances, refer to this list: 10000 = right weapon model 0, 11000 = right weapon model 1, 12000 = right weapon model 2, 13000 = right weapon model 3, 20000 = left weapon model 0, 21000 = left weapon model 1, 22000 = left weapon model 2, 23000 = left weapon model 3.

-You can change how any weapon is attached to the player’s hands in both idles and animations. Weapons are attached at specific dummy points as specified by WepAbsorpPosParam. The row that governs any particular weapon here is determined by the Weapon Sheath Position ID field in EquipParamWeapon. Within a row of WepAbsorpPosParam you’ll see the many fields that determine which dummypoly of the player character the weapon attaches to for a given stance. Most weapons only use 6 fields here though: 1H - Dummy ID 0, 1H - Dummy ID 1, 2H - Dummy ID 0, Sheathed - Dummy ID 0, Sheathed - Dummy ID 1, and 2H - Dummy ID 4. Respectively these each pertain to a single stance as follows: 1H right, 1h left, 2h right, left sheathed, right sheathed, and 2h left. The rest of the fields pertain to additional weapon models of a weapon (such as the second weapon of a dual weapon). You can find more info about this from Halvard’s explanation of weapon position here.

-You can change what dummy a weapon attaches to during a single animation using the tae event OverrideWeaponModelLocations. Edit the event field RHModel0ChangeType to whichever stance dummypoly you’d like that animation to take up (for the main weapon model). Use the other fields here for additional weapon models you’d like to control. Also be sure that IsEnabledWhile2HandingRightWeapon is set to 1 if it’s a 2-hand animation. Unfortunately, you can only specify the dummy set by a particular stance in WepAbsorpPosParam. It may be easiest to manipulate the 1h right stance dummy since it can be moved liberally about the weapon’s handle.

VFX

-Most VFX/Bullet IDs can be found here.

-The follower javelin VFX 440480 is great to use as a general vfx for models such as for spawning a dagger in your hand for a single animation. Changing the size of the model may be best handled in flver editor.

Attack Behavior

-BehaviorJudgeID under the InvokeAttackBehavior event in Anim Studio links an animation to damage values, stamina usage, hitboxes, etc. as dictated by params. Behavior Judge Ids first link to BehaviorParam_PC in Yapped where most notably stamina usage is determined. You can use an existing row or create a new one. BehaviorParam_PC links to an AtkParam_PC entry or a Bullet entry with the Reference ID field. In AtkParam_PC, many aspects of an attack are designated, most notably damage and hitboxes.

-Locating an animation’s BehaviorParam_Pc row: You need 2 number to find the animation’s row. First, you’ll need the BehaviorJudgeID found within the animation’s InvokeAttackBehavior event. Second, you’ll need the Behavior Variation ID of the weapon in EquipWeaponParam. I’ll use the Broadsword’s first two-handed light attack as an example. The BehaviorJudgeID is 200 and the Behavior Variation ID 2301. The row number in BehaviorParam_Pc is found as follows: 10 followed by the Behavior Variation ID followed by the BehaviorJudgeID, so 102301200. You can also search through the row names with Control F and the row numbers with Control G.

Weapon Descriptions

-Weapon Descriptions and WA Descriptions can be changed from Game>msg>engus then unpack item_dlc2.msgbnd.dcx. Then msg>engUS>64bit then unpack appropriate folder and edit.

-To change the WA name shown on the main weapon screen: Game>msg>engus then unpack menu_dlc2.msgbnd.dcx. Then msg>engUS>64bit then unpack FDP - Text 2 - DLC1.fmg.xml and edit.


VFX Editing

CCCode is the go-to for any and all vfx related information. The more in depth info here was discovered by them.

Setup

-Setting up an effect for editing. Start by downloading Meowmaritus’ FXMLR tool. Then create a shortcut for the application on your desktop. Next, go to Game\sfx and unpack frpg_sfxbnd_commoneffects_effect-ffxbnd-dcx and frpg_sfxbnd_commoneffects_resource.ffxbnd with yabber. Inside of these are the ffx .fxr files. The files are named according to FX ID, so if you know the FX ID, the file you’re looking for is f000(ID). You can now unpack this file by dragging it to your new FXMLR tool. This gives you an xml that you can now open and edit with something like notepad++.

-Duplicating vfx: Before editing, it’s probably best to create a new effect id for whatever changes you make. So before editing, first duplicate the file and give it an unused FX ID. Then open the new file with the FXMLR tool and change the <ID> field to the new ID. Finally, go back to \sfx\frpg_sfxbnd_commoneffects_effect-ffxbnd-dcx to see the yabber xml file. You need to duplicate an existing entry here, give it an unused ID, and add your new FX ID into the path field. Keep in mind though that certain FXs chain. This means when one is called so is the one with the next FX ID. So, if you can identify that your vfx has chaining, you should duplicate all those in the chain maintaining the same ID order.

General

-Quote from Vawser: "The VFX particle system is composed of different components, each used for a different part of the overall particle. From what I've seen, it is best to treat the EffectID 1004 sections as a 'component', and EffectID 2200 as the 'component group'. Then each ActionID section is used to apply certain properties to the particle." Basically, vfx are broken down into pieces that govern different aspects of the overall vfx. For example, most fire vfx will have pieces that control the main flame, the glow, the smaller fiery particles, etc. These pieces typically are separated into EffectID="2200" sections.

-ActionIDs can narrow down one’s search for a particular property of vfx: 34 - Movement related, 75 - Sound related, 81 - Sound related, 105 - Movement related, 131 - Color related, 132 - ID Link, 603 - Color/Sound related, 605 - Color/Sound related, 609 - Color related

-Effect ID 2001 references vfx chaining

-You can change the models and textures used in effects. Each vfx piece will have a </Properties2> section and right below that will be double set of fields labeled <Fields1> and <Fields2>. Near the top of <Fields1> will be a number exceeding 1000. This number is a texture/model call. It is referencing the models and textures in the frpg_sfxbnd_commoneffects_resource-ffxbnd-dcx. You can actually add new models there with a new ID and then use them in an effect.

-FFXFieldInt (a field requiring an integer) can be replaced with FFXFieldFloat (field requiring any number) where necessary. However, it seems it can have an effect in some places.

-The leading FieldInt value under TypeEnumA=”67” is likely indicating the number of color fields in that section.

-You can keep notes within the file for yourself with <!— text here —>

-To turn off a piece of vfx, find ActionID=“199” at the very end of that piece of vfx’s section. This ID will contain a single ffxfieldint set to 0 and setting it to 1 will turn it off.

-The ActionID="75" section(s) contain the sound ID used by the FFX. The ID itself is the same as the name of the sample in DSSI (excluding the leading s000 characters). This is typically found in the final 2200 section of a vfx.

Color Editing

-To change color, start by finding all the TypeEnumA=“35”. You’ll see 4 FFXFields underneath each. The first three are rgb values and fourth controls brightness. Each set of these under TypeEnumA=“35” represents one part of the VFX’s color. To change one of these sets to your intended color, use this color wheel site to find your intended color’s RGB Normalized decimal to set for the first three fields. Do the same in any other TypeEnumA color sections that the vfx contains (19, 67, 83, 99, or 4163).

-You can change the color of a vfx model or texture using the methods described under the General subheading within the Cross Application/General section of this guide. An easier method exists for some models though (method provided by p0): If a model has emissive textures, that may be the only thing you need to remove in order for the model to follow the color prescribed in the corresponding color section. To do so, find the model in the appropriate resource folder and open it with flver editor. Open the model’s material section and find the word emissive within the JSON text. Remove that piece of the text starting with { and ending with },. Afterwards hit modify json. It may be best to create a copy of the model to use instead.

-Many vfx pieces have multiple color sections (usually a 67 and 35 but sometimes two 67s and even sometimes a 99 and 35). It seems the lower of the two sections have a secondary effect on the color, including glow and tint. Sometimes these sections have just as much say in the color as the primary section. One thing I've come across is that sometimes making both the main section and the complementary section the same (ex. blue) the color will turn out different (often green for the intention of blue).

Duration Switch

-Combination of 4 sections that can handle this. Follow this order and after each step, you should check and see if the vfx’s duration is following your command. #1. Primarily it’s action ID 128. Under this you’ll probably see <FFXProperty TypeEnumA="32" TypeEnumB="8"> with a float field right below. This float sets the duration for that vfx piece. A negative number is infinite. It’s possible you’ll see <FFXProperty TypeEnumA="16" TypeEnumB="4"> and no float. It seems this auto sets 1 second or something; anyhow you can simply change it from 16 and 4 to 32 and 8. You’ll also need to add in the float and the <Fields> line just like the other 128 sections. #2. Secondarily, the very last line of the 67 color sections (and maybe 83, 99, and 4163 as well) may cause the vfx to become transparent if it’s set to this: <FFXField xsi:type="FFXFieldInt" Value="0" />. Change these to <FFXField xsi:type="FFXFieldFloat" Value="1" />. #3. Action ID 129 may act just like 128, with the float there controlling duration. #4. If these don’t work, it may be action id 300 (or 3xx not sure exactly what other 300 and something action ids though), in which case the second to last FFXFieldInt can also set duration.

VFX stickiness

-Action ID 105 sets how attached the vfx is to the dummypoly. However, in order to properly edit action id 105 for stickiness, it needs to exist in the proper format. This means existing 105s may need to be altered and action id 55 sections may need to be turned into 105s. #1. Altering an action ID 105 section: the necessary property for stickiness editing is <FFXProperty TypeEnumA="64" TypeEnumB="16">. Many 105 sections lack this and instead have a <FFXProperty TypeEnumA="96" TypeEnumB="24">. First, replace the 96 and 24 with 64 and 16. Second, delete everything in between the 2 <Fields> sections and replace it with:

                                      <FFXField xsi:type="FFXFieldInt" Value="2" />
                                      <FFXField xsi:type="FFXFieldFloat" Value="0" />                 
                                      <FFXField xsi:type="FFXFieldFloat" Value="1" />
                                      <FFXField xsi:type="FFXFieldFloat" Value="0" />
                                      <FFXField xsi:type="FFXFieldFloat" Value="x" />                 
                                      <FFXField xsi:type="FFXFieldFloat" Value="y" />                   
                                      <FFXField xsi:type="FFXFieldFloat" Value="z" />

The variables x, y, and z are numbers chosen by you. Y and z are floats between 0 and 1 with 1 as completely stuck on the dummy and 0 as not stuck at all. X is the time is takes for the vfx piece to transition from y to z. In other words, the vfx piece starts stuck y amount to the dummy and after x seconds the vfx piece will have gradually become z stuck to the dummy. For choosing a duration, you may want to choose the duration set forth under action id 128 or 129 for that vfx piece, unless it’s set to be infinite (as explained in the “duration switch” section). #2. Making action ID 55 into 105: First change 55 to 105. Next between </FFXProperty> and </Properties1> add:

                              <FFXProperty TypeEnumA="0" TypeEnumB="0">
                                <Section8s />
                                <Fields />
                              </FFXProperty>
                              <FFXProperty TypeEnumA="64" TypeEnumB="16">
                                <Section8s />
                                <Fields>
                                  <FFXField xsi:type="FFXFieldInt" Value="2" />
                                  <FFXField xsi:type="FFXFieldFloat" Value="0" />
                                  <FFXField xsi:type="FFXFieldFloat" Value="1" />
                                  <FFXField xsi:type="FFXFieldFloat" Value="0" />
                                  <FFXField xsi:type="FFXFieldFloat" Value="x" />
                                  <FFXField xsi:type="FFXFieldFloat" Value="y" />
                                  <FFXField xsi:type="FFXFieldFloat" Value="z" />
                                </Fields>
                              </FFXProperty>

The first line of this (<FFXProperty TypeEnumA="0" TypeEnumB="0">) should be indented the same as the preceding line (</FFXProperty>). Do the same for x, y and z as previously stated. Finally, below this you’ll see a <Fields1> section containing 2 <FFXField xsi:type="FFXFieldInt" Value="0" /> fields. You’ll need to add a third field after the 2 existing fields in this section: <FFXField xsi:type="FFXFieldInt" Value="1" />.


HKS

Sometimes certain behaviors need to be registered in Cinders>action>script>c0000.hks. This section details many examples of this that have an incredible amount of potential for varying movesets. Keep in mind the the HKS can be difficult to navigate and errors can break your game.

Necessary Scripts

-Registering new Warcry SpEffects: Control F WarcrySpAtk. Where it says local buff = add x to the list in numerical order (where x is the new Warcry Cycle Occurance).

-Gael’s WA opener requires an HKS script for the directional input. When adding it to a new tae override: Control F sp_kind == 263 (where 263 is the Gael’s Greatsword tae#). Between 263 and then, add or sp_kind == x (where x is the new tae#).

-How to remove the extra dual-wield animation when switching to 2-handed when adding an L1 moveset to non-dual weapons: In HKS, control F if isDualBladeSpecific. For all 10 entries, add the following between TRUE and then: and sp_kind ~= 620. After the first of the ten entries, copy the next line which reads local sp_kind = env("装備武器特殊カテゴリ番号取得", HAND_RIGHT). Paste it one line above that first if isDualBladeSpecific line so that it looks like this:

After the sixth of the ten entries, copy the next line which reads local sp_kind = env("装備武器特殊カテゴリ番号取得", HAND_LEFT). Paste it one line above that sixth if isDualBladeSpecific line exactly as done with the first.

Trick Scripts

-Looping 3rd 2-handed Light attack back to 1st as exemplified by Friede's Great Scythe in vanilla: Control F function AttackBothLight3_onUpdate(). Enter down one line after

and add local sp_kind = env("装備武器特殊カテゴリ番号取得", hand). In the following line delete env("装備武器特殊カテゴリ番号取得", hand) and replace it with sp_kind. Finally, between 232 and then, add or sp_kind == x (where x is the new tae#).

-Creating a new script override is trickier. This requires understanding the function of each of the lines in the targeted script. Here’s a finished example for Looping 3rd 1-handed Light attack back to 1st since such an exception does not exist in vanilla DS3:

To get here I did the following: First find the existing script using Control F function AttackRightLight3_onUpdate() for this one. Then, replace "W_AttackBothLight2" with r1 (not “r1”). Add local r1 = "W_AttackRightLight2". Add local hand = HAND_RIGHT to point to the correct hand. Add the two sp_kind lines pointing to your intended tae override. Following then, the next line points to the intended exception. Make sure to use end the line after the termination of all if statements.

-Adding a 4th light attack is done much the same as creating different paths to combos as explained above. Simply loop the 3rd light attack to an unused animation (see Script Tips). Then, set up your 4th light attack’s function to combo as desired.

-The HKS can be used to workaround the FP rule for WAs where only half of the full FP cost is needed to perform the WA with full effect. Provided below is the script I used for forcing a custom Warcry WA to require a specific amount of FP. Essentially it says the following: For tae 620, if the player’s current FP amount is less than 1750, animation a620_037710 will play instead of a620_036700. This script was placed under function ExecAttack(r1, r2, l1, l2, b1, b2, is_guard, blend_type, artsr1, artsr2) in the section calling the Warcry WA. The script could be extrapolated to fit other WAs:

-You can force transitions between animations, like how xxx330 animations automatically transition into xxx320 ones. This is done by adding a SpEffect in the tae and calling it in the HKS to perform another action when it is called. Here’s an example from the vanilla HKS that calls for the Uncharged Strong Attack from the Charged one:

The first part elseif env(1108, ACTION_ARM_R2) <= 0 simply says, if not holding R2. The second part env(1116, 100280) == TRUE says, if SpEffect 100280 is active. The opening env(1116 means Speffect. The last part ExecEventAllBody("W_AttackRightHeavy1End") calls for the uncharged strong attack. Make sure to choose an unused SpEffect number like 100281-100289 and register them in SpEffect param by duplicating row 100280.

-You can use the aforementioned transitions to add Bloodborne Strong Attacks to DS3 in their entirety. You set 600 as 320 and have a SpEffect in the final frame force transition to 321 which is 610. From frame 1 of 610, add a SpEffect that calls for 341 (620) if not holding R2. At the end of 610 add a SpEffect calling for the transition to 340 (630). Have 330 be the 690 animation and give it the same SpEffect and script as 320. Just make sure the added HKS scripts are on the appropriate update functions. You can add a follow-up attack by utilizing the Special Warcry Heavies. Just add them as updates to the 340/341 animations.

-It’s possible to reverse the Charged Strong Attack mechanic so that the Uncharged animation cancels into the Charged animation. The purpose of this is to allow a broader range of custom strong attacks. To do this, assign the Charged Animation to the 321/341 slot and the Uncharged animation to the 320/340 slot. Add a SpEffect to the Uncharged animation that is only 1 frame long and place it where in the animation the Charged animation should cancel. Give it ID 100710. In Yapped, duplicate row 100280 into 100710. In the HKS, find the appropriate function with Control F: function x (where x is AttackRightHeavy1Start, AttackRightHeavy2Start, AttackBothHeavy1Start, or AttackBothHeavy2Start). Add the following line after the function’s last If statement’s return line:

In the second line replace Right with Both if it’s a 034xxx animation and 1 with 2 if it’s a xxx340 animation.

-It’s possible to institute another alternate charging mechanic utilizing a “ready” animation. The purpose of this is to allow a broader range of custom strong attacks. To do this, place your uncharged animation in the usual animation slot, but place your charged animation in the corresponding Warcry special heavy charged attack slot (so 350 instead of 320, 370 instead of 340). In your normal heavy animation slot, place any vanilla charge attack animation that has the holding location in an appropriate place for both of your animations (for example holding the charge down low on the character’s right side). This animation is your “ready” animation. Add a SpEffect to the ready animation in the frame right after the 100280 Speffect that’s already there. This new Speffect should be 1 frame long and have ID 100720. In Yapped, duplicate row 100280 into 100720. In the HKS, find the appropriate function with Control F: function x (where x is AttackRightHeavy1Start, AttackRightHeavy2Start, AttackBothHeavy1Start, or AttackBothHeavy2Start). Add the following line after the function’s last If statement’s return line:

In the second line replace Right with Both if it’s a 034xxx animation and 1 with 2 if it’s a xxx340 animation.

-If you’d like to add additional attacks to Warcry (outside of the normal special strong attacks), you can add unused animations to the warcry script in the HKS. For example if you’d like Warcry to change the first 1H light attack, you would start by picking an unused animation ID like 036310 which is SpecialAttackRightLight (an unused anim planned for just this purpose). Pick an animation for 036310 in AnimStudio and register it in the behbnd. Then in the HKS control f ATTACK_REQUEST_RIGHT_LIGHT then. Add the following at the end of this request but before ExecEventAllBody(r1):

Make sure to leave an empty line between this new script and ExecEventAllBody(r1). Note that 614 will be whatever tae # you’re using. For whichever animation you use, make sure to configure the update function to however you’d like the combo to proceed. To add two additional r1’s for the above example: pick 2 new unused animation, configure them in AnimStudio and register in behbnd, and add an elseif for each like so:

For other attacks like 2H Light attacks, follow these same instructions but find the appropriate request within this same function: elseif request == ATTACK_REQUEST_BOTH_LIGHT then

-To change the animation played when swapping from 1H to 2H and vice versa, find function ExecHandChange(hand, is_force, blend_type) in the HKS. There are 4 sections here: right hand, left-hand, right hand both, and left hand both. Each section is further broken down into the sheath position of the other hand since that determines the animation where your character either puts away or takes out that weapon. Once you have found your section, you’ll need to add a script like this one:

Breaking this script down: ExecEventHalfBlend is similar to ExecEventAllBody in that it calls an animation; however, it can be used to call only the upper or lower half of animations. This is desired for weapon swap animations since you want the player to be able to move while swapping weapons. ExecEventHalfBlend can only be used with certain animation IDs though, namely the crossbow IDs such as AttackCrossbowRightEmpty. The second piece, blend_type, determines what part of the animation plays (UPPER, LOWER, or ALLBODY). However, in this section it’s sufficient to keep it as blend_type for just the upper body. Make sure to set up the respective animation in AnimStudio and register it in the behbnd. If you’d like to add your custom animation to the end of the vanilla hand-swap animations, simply follow the same SpEffect canceling process described in the alternate charge mechanic tutorials above. One last tip, to avoid locking rotation, make sure JumpTable 7 is absent from your custom animation.

-How to create a new looping animation: I’ll use tae 604 for this explanation and assume that you’ll want the looping animation to end when the input call (such as L1) is let go. The trick to a looping animation is you’ll need a startup animation to bring the character into the loop. This startup animation can have any normal animation ID (let’s use 033000 for this example which is AttackBothLeft1). In the startup animation tae, add a new 1-frame speffect wherever you’d like the animation to stop and begin transitioning to the looping animation (speffect 100739 let’s call it). The looping animation needs to have an animation ID that allows for halfblending if you’d like the character to be able to move during the loop. Let’s use 035510 which is AttackCrossbowBothRightEmpty. In the looping animation you’ll need a speffect that spans the entire animation (speffect 100740 let’s call it). Next you’ll need to register your new speffects in params by simply duplicating speffect 100280 into 100739 and 100740. Now in the HKS, add the following to function AttackBothLeft1_onUpdate():

This first script simply says that if it’s a tae 604 animation being called and speffect 100739 is active then execute our specified attack in halfblend form. The last HKS piece goes onto function AttackCrossbowBothRightEmpty_Upper_onUpdate():

This final script tells the looping animation to end if the player is no longer holding L1 or the player is out of stamina.

Script Tips

-Adding the line local sp_kind = env("装備武器特殊カテゴリ番号取得", hand) and then replacing env("装備武器特殊カテゴリ番号取得", hand) in the following line with sp_kind makes the script more concise and easier to navigate.

-The chosen replacements in AttackCommonFunction are as follows: r1 = Right Hand Light, r2 = Right hand Heavy, l1 = Left Hand Light (mostly used for dual wield L1s), l2 = Left Hand Heavy(Most used for one hand left hand attacks), b1 = Both Hand Light, b2 = Both Hand Heavy

-2-Handed weapon behavior scripts require local style = c_Style typically after the function. 2-handing a left-handed weapon is technically different than 2-handing a right-handed weapon. In HKS this is typically resolved by adding the following after after local style = c_Style:

-The best unused animations to add in the HKS are 30350, 30351, 30360, 30370, 30371, 30510, 30610, 30910 and all the 34___ versions of those, as well as 30920 and 34920. The script names for these are in the behbnd. Another option is 30930 which is AttackRightCounter. This does not have a function in the hks, but you can create one easily by copying another.

-Another set of animation IDs that can used for additional slots are the crossbow animation Ids: 31500, 31510, 31520, 35500, 35510, 35520. You may run into trouble with these though and I would recommend only using them for animations that force another animation via speffect canceling. If using the crossbow anim ids and want them to play properly with the weapon equipped in the left hand, you’ll need to also register in the behbnd the lefthand versions (same ids) and call those separately.

-In a situation where an if line gets complicated (maybe it needs an or and an and) you can use parentheses to add priority. For example:
if (env(345, HAND_RIGHT) == 620 or env(345, HAND_RIGHT) == 614) and 1000 > env(2016) then
The parentheses before env and after 614 allow for the addition of the second tae, 614, to the script.

-The full FP cost workaround trick can also be used with other conditions. For example, replacing and 1750 > env(2016) with and hand ~= HAND_BOTH, you can call for a separate WA animation when 1-handing your weapon.

-To change the attacks that a roll combos into, use function Rolling_onUpdate.

-The nopoints (low fp) versions of WAs operate off the same hks functions as their primary counterparts.

-You can call a speffect from the hks with the format act(2002, x) where x is the speffect row number in params.

-c_SwordArtsID refers to the Act Type 0 field in SwordArtsParam.


DSMapStudio/EMEVD

DSMapStudio

-Controls: Right click to move camara and right click plus wasd to move (and hold shift to move faster). Control D duplicates something while delete deletes. Control Z undoes the last action. On the right, there is a search properties tab that allows you to search through all map pieces using a specific field such as EntityID.

-Instead of using the entity ID you can use entity groups to call a whole group of entities from the emevd.

-Duplicating an enemy: Start by finding the chr files for the enemy to be duplicated. Duplicate and rename them to a new number. Place them in Cinder's chr folder. Use Yabber.dcx to unpack them. Throw the new non-dcx files into HxD. Control R to replace all of the old file number with your new one. Make sure to do it twice for both types of encoding. Then save all 4 files in HxD and close. Now you need to drag these same files back into Yabber.dcx. Now the .dcx files are your new saved one and all the other ones can be deleted. You should open up all these with normal yabber to double-check all the numbers have been replaced especially the dds files. Next, duplicate the old entity’s npcparam and npcthinkparam rows into new ones with the corresponding row numbers. Then duplicate and rename the hkx file. Sound is next. Go into the games sound folder to find the files with the original entity’s ids. Duplicate all three files and rename to your new id. Then open the .fev file with HxD. Control R to replace fdp_cxxxx with fdp_cyyyy. Save and add all three files to your Cinders sound folder as well. You can now check if it’s working correctly using map editor to spawn it in game. Find an entity and duplicate it with ctrl D and move it somewhere. Match its CollisionName to the Name of the floor you place it on. Change its Think and NPC param ids to your new one. You can change its name to yours with _0000 for the first instance of it or _0001 for the second… Now change its model name to your new id. It should now pop up on the map. You may also want to give it a unique entityID if you plan to give it unique commands in the emevd. To work with Cinder's curses, add the entity groups for the curses (xxx5760 for all enemies and xxx5770 additionally for bosses). Now save and test in game.

-New bonfire: Duplicate the 4 parts to a bonfire and place them where desired in map editor: these are the bonfire itself, the character talk point, the character point, and the spawn point. The character talk point controls the menu, the character point is the warp to point, and the spawn point is the respawn point. Give them new entity ids 1 above the highest bonfire ids. They are numbered like this for example: the character talk point is 4500959, the character point is 4500979, the bonfire is 4501959, and the spawnpoint is 4502959. The character talk point needs a CollisionName set to the Name of a nearby floor (ex. h005600). Next, you’ll need to set up the bonfire script in your map's emevd (explained in the emevd section). Next you’ll need to go to BonfireWarpParam in yapped and set up a new row. Location Event ID needs the EventID from emevd, Warp Event ID needs the EntityID of the bonfire itself, Bonfire Name ID references an entry in the FDP - Text 2s in the msg’s menu file. Picture ID refers to menu>mapimage where the files for each location containing the bonfire pictures are kept and numbered. List ID is the area’s warp list number. Now you’ll need a new talk esd file which are located in the game’s script folder within your map’s file. Duplicate one of the other bonfire’s esd files there (check another bonfire’s character talk point’s Talk ID to find one). Finally, back in map editor set NPCParamID to 100000 and TalkID to your new esd number.

-You can call an alternate gparam file (like for lighting, fog, etc.) on map collision under SceneGparamConfig EventIDs where 1 is mxx_00_0100 under DrawParam.

-DrawGroups, DispGroups, and BackreadGroups: These determine what map pieces load when standing on a given piece of collision

-An Invader has at least three parts including the c0000 entity, an event dictating the spawn point and an activation box. The activation box sets the area the player enters for the invader to spawn.

EMEVD

-This page offers a tutorial on the basics of emevd: http://soulsmodding.wikidot.com/tutorial:learning-how-to-use-emevd#SectionEventParameters

-Event Flags with a 4 digit ending value of 5000 or higher (such as 10005000) will be set to OFF whenever the event system is reset.

-In common_func.emevd are commands initialized in map emevds. Common.emevd contains commands active on all maps.

-Boss' coop buffs are called by ActivateMultiplayerdependantBuffs in emevd, which calls MultiPlayCorrectionParam. The row here is determined by Multiplay Correction ID in NPCParam. The MultiPlayCorrectionParam row will call speffects depending on number of coop partners.

-Registering a new bonfire: At the very top of your bonfire’s map’s Event 0 will be the bonfire registry. Following their example, add a new row with a unique Eventid and the EntityId of the bonfire itself in map editor. To have a bonfire spawn only after a specific enemy dies, you’ll use InitializeCommonEvent with 5 fields (note this is Cinders’ method). The five fields are: EventID of this function in common_func.emevd which is 20005500, TargetEventFlagID which is the killed flag here, EventFlagID (follow the numbering of the normal bonfire registry), EntityID for the bonfire character talk point, and the EntityID for bonfire itself.

-HandleBossDefeat: Displays banner, embers the player, gives boss souls, kicks out summons, and disables the boss healthbar.

-SkipIfConditionGroupStateUncompiled allows you to do one thing if a condition group is true and another if false.

-Hit refers to collision in emevd and ActivateHit is used to enable/disable it.

-You can change the lockon point this in emevd with SetLockOnPoint to a different dummy. You can change the distance midfight by disabling 220 when the player is a set distance away utilizing IfEntityInoutsideRadiusOfEntity.

-Initiating awarding of items done via AwardItemLot, which references a row number in itemlotparam, which references equipparamgoods.

-The fogwall map object sets the size of the fogwall’s collision, and the placement/where it’s enterable. The emevd command calling the common command 20005820 sets FFX and size. To match the ffx size and the collision size, the fogwall model calling collision seems to line up with the ffx called like this: o000400 to 3, o000401 to 4, and o000402 to 5.

-Saving and quitting in a boss arena needs to put the player back outside the arena. This is done by setting the collision of the arena’s PlayRegionID. This refers to the PlayRegionParam in which you should set the boss’s Killed Event Flag from emevd in Event Flag ID 1.

-A cooping phantom will have their own emevd active for them.

-GameAreaParam is used by cinders to award souls after bossfight.

-All new map sounds need to be disabled in event 50