Jump to content

Recommended Posts

I installed mod with recomended Vanila Armors, it contains esp that requies original BUF, I changed this esp's master file to Breaking Armor but got no visual effect on armor even after zero durability (i tested this on rusty iron armor that you can get from beggining.)

Any particular reason that you should not or can not use the omod? The omod file contains very old plugin that was made even before BA came out, I forgot to delete it, but it won't be installed if you just stick with the scripted install.
Link to comment

I installed this mod via wrye bash, should I use obmm for this?

That explains how you've noticed that the plugin is still there. yes, use obmm, or do it manually if you don't mind quite a bit of work. I wouldn't have packed this into omod if I intended to allow the bain installer.
Link to comment
  • 2 weeks later...

the topic about vanilla breakarmor somehow... "disappeared" from the forum. (got it deleted? moved? merged elsewhere? something else happened to it?)

 

its in the op as link too. http://www.loverslab.com/index.php?showtopic=11295

 

 

Recommended Mods (Perhaps even Required):
Because what's the point of Break Armor if you don't have anything to break?

Break Armor for Vanilla Armors

BU Armors Compilation

 

it had i.e. alot of "vuravica fly" armor pieces as breakable.

 

had the topic bookmarked and noticed some days ago that it just errors out now.

Link to comment

Just started looking into using the Callback function in RaperS to get a report on clothing durability and it seems a bit inexact for callback method 1, especially if the actor is combining breakable armor top with breakable clothing bottom or vice versa.

 

Why isn't it reporting the two slot's healths individually as the single number like 1519 for upper breakable at 5/9 health and lower breakable at 9/9 health or 1300 for upper breakable at 3/9 health and no lower breakable, etc.?

Link to comment

The short answer is that when I wrote it the primary requester was ShiaNekoChan. The goal was to streamline Nudeshy integration.

 

There are three modes in the current callback functionality. Modes 0 and 1 were written specifically to meet a return format requested by ShiaNekoChan.

 

Mode 2 gives you direct access to all of the tracked data for the NPC in question. Now, this may be more data than you want to deal with, but I'd be willing to add a fourth mode, if you like.

 

Now, if you decide to try Mode 2, you'll get the NPCState array as your return value. This has lots of goodies.

 

The main one that you will probably want to look at is the 'Equip' and 'BAEquip' sub-array. Every Break-Armor item that is currently tracked on the given NPC will show up here, indexed by equipKey. Note: unequipped items *should* be purged from the BAEquip array at the end of every NPC scanning cycle, so hopefully there won't be any unequipped items taking up space.

 

Gives the base object reference for the object:

 

returnedArray["BAEquip"][equipKey]

 

"HIdx" Gives the currently displayed health state of the object. This ranges from 0 (for undamaged) to n, where n is the number of _ba##.nif meshes available for the object.

 

returnedArray["Equip"][equipKey]["HIdx"]

 

This will give you n + 1 for a given piece of equipment.

 

ar_Size returnedArray["Equip"][equipKey]["Paths"]

Link to comment

Now, if you decide to try Mode 2, you'll get the NPCState array as your return value. This has lots of goodies.

 

The main one that you will probably want to look at is the 'Equip' and 'BAEquip' sub-array. Every Break-Armor item that is currently tracked on the given NPC will show up here, indexed by equipKey. Note: unequipped items *should* be purged from the BAEquip array at the end of every NPC scanning cycle, so hopefully there won't be any unequipped items taking up space.

 

Gives the base object reference for the object:

 

returnedArray["BAEquip"][equipKey]

 

"HIdx" Gives the currently displayed health state of the object. This ranges from 0 (for undamaged) to n, where n is the number of _ba##.nif meshes available for the object.

 

returnedArray["Equip"][equipKey]["HIdx"]

 

This will give you n + 1 for a given piece of equipment.

 

ar_Size returnedArray["Equip"][equipKey]["Paths"]

 

So to specifically ensure getting health of only lower-body object for example:

set armorlowerhealth to -1
set rEquipped to GetEquippedObject 3
let arTmp := Call rBACallback target 2
set idx to 0
while idx < ( ar_Size arTmp["Equip"] )
   if rEquipped == arTmp["Equip"][idx]["Ref"]
      set tmpi to ar_Size arTmp["Equip"][idx]["Paths"] - 1
      set armorlowerhealth to 100 * ( tmpi - arTmp["Equip"][idx]["HIdx"] ) / tmpi     ; tmpi - HIdx to reverse 0 - n being undamaged to damaged
   endif
   set idx to idx + 1
loop
; Now armorlowerhealth >= 0 is % health as reported by BA

That look about right to you?

Link to comment

That looks good to me.

 

You'll only get a few discrete percentages from that rather than a real spectrum, but it will give you the relative damage percentage for both armor and clothing.

 

Now, I should note, my Oblivion coding is pretty rusty right now...I've been buried in Blender Python scripts for the last month or so *hopefully* the information I gave you is correct.

 

Now, I'm getting ready to start coding an update for BreakArmor that fixes a few issues related to array purging and nif sanitizing. While I'm at it, would you like me to add a callback that triggers damage mesh swaps? Now, this probably isn't necessary for armor (just lowering the health of the item is all that is required there), but there is currently no way to trigger clothing swaps without damaging the NPC.

 

I've got a couple of ideas on ways to implement this sort of stage trigger. Let me know if that is something you would be interested in and what features you would like it to have.

Link to comment

Now, I'm getting ready to start coding an update for BreakArmor that fixes a few issues related to array purging and nif sanitizing. While I'm at it, would you like me to add a callback that triggers damage mesh swaps? Now, this probably isn't necessary for armor (just lowering the health of the item is all that is required there), but there is currently no way to trigger clothing swaps without damaging the NPC.

 

I've got a couple of ideas on ways to implement this sort of stage trigger. Let me know if that is something you would be interested in and what features you would like it to have.

I don't have any specific request for that, just interested in getting status of breakable clothing at the moment.

 

Doesn't this functionality already have a callback for Lovers BU options to hook into?

Link to comment

Not really. The old Lovers Break Undies system just damaged armor to force the changes. loversbreakarmor just uses the existing framework.

 

What's needed, if I ever get around to it (or if Movomo beats me to it) is to have loversbreakarmor send mesh swap commands to the breakarmor framework directly. For that, I'll first need to add that functionality to the framework.

 

Then there's the minor fact that I haven't gotten around to learning about the Lovers with PK api, so I don't know which approaches work best for Lovers with PK integration and which are dead ends...or conflict bait. I'll probably pester you with questions when I do.

Link to comment

Speaking of LoversBA, there is no nice way to force clothing break at present.

 

I've added a couple of lines that will probably break clothings gradually.

Simply, damaging the actor's fatigue. a lot.

If CBHMult is 30 times greater than CBFMult(default setting), damage amount to fatigue to force the last ba stage should be 30 times of max fatigue.

 

scn xLoversPkrBUBreakSub

;BreakArmor compatible Equipment Damage

ref me
ref r
short pos
short per
float damage
short ret	;One damage has progressed
int iDamage

Begin Function { me r pos per }

	if me==0 || r==0 || per==0
		return
	endif

;Check to see if BreakArmor is active
	if Call xLoversPkrBUCheck r
;Check Durability
		if r.IsArmor
			if me.GetEquippedCurrentHealth pos > 0
;				Multiplier to normalize degradation as a percentage of total item health
				set damage to (GetObjectHealth r) * per / 100 * (-1)
;				Damage
				me.ModEquippedCurrentHealth damage pos
				set ret to 1
;				printC "Lovers: %n Was Damaged" r
			endif
		else
;			Damage for clothings
			if xLoversBreakArmor.var_fBACBFMult == 0
;				Let's not take crashes.
				SetFunctionValue 0
				return
			endif
			set damage to (xLoversBreakArmor.var_fBACBHMult / xLoversBreakArmor.var_fBACBFMult) * (me.GetMaxAVC 10) * (per / 100) * (-1)
			set iDamage to damage
			me.ModActorValueC 10 iDamage
			set ret to 1
		endif
	endif

	SetFunctionValue ret
End

 

Link to comment

Heh...I was just thinking about sending you a message Movomo.

 

Since you've really picked up the ball that I dropped for the loversbreakarmor plugin, what sort of force mesh swap callback functionality would you like?

Link to comment

Heh...I was just thinking about sending you a message Movomo.

 

Since you've really picked up the ball that I dropped for the loversbreakarmor plugin, what sort of force mesh swap callback functionality would you like?

Nothing, for me, for now. (provided those damage fatigue codes work)

Lovers with Pk system just calls the force-break function every few seconds, and we don't want touch the entire lovers system. Let's just stick with indirect breaking.

 

Perhaps WappyOne needs that functionality more than me.

Link to comment

Thinking on it further, I think the best thing you can do with regards to a damaging callback is not one that advances a stage, especially given that BA can have varying number of stages for individual pieces. (Even though all existing ones use 4 right now, I believe?)
 
So what about having a callback that a mod asks BA to do % percent damage to worn items?  If an armor BA can just apply that immediately.  If clothing BA adds it to the actor's array as a new 'Extradamage' variable that is added to the normal break calculation.  So if Lovers or another mod asked for 10% damage and you would have calculated 20% damage with your normal method (no damage, leave at original mesh) it act as 30% damaged (switch to damaged mesh 1).  This variable would get reset to 0 whenever cloth mending normally happened.
 
I've also just discovered a small issue with Lovers itself in regards to BA compatibility: While you can flag armors to be excluded from stripping to be used by the BA/BU callback it only actually doesn't strip them if it finds "BreakUndies.esm" in the load order.  I should fix it and have Greg replace the v96v2 Lovers.esp.
 

Lovers with Pk system just calls the force-break function every few seconds, and we don't want touch the entire lovers system. Let's just stick with indirect breaking.

Except now we (I) have to go in there anyway, since it is hard-coded to look for "BreakUndies.esm"

 

 

Edit: Looking at LoversBreakArmor.esp this has been over-ridden.  Though maybe the replacement xLoversPkrBUCheck might want to use the callback to verify that equipped items are BA compatible instead of always returning 1.

Link to comment

Well, if we're looking at modifying the lovers system I'd be more than happy add any callback functions to BreakArmor that would simplify the process.

 

Note: These features would be enabled for Break Armor, Break Clothing, and Break Weapon items.

 

One feature that I'm thinking about adding is an 'advance next stage' style function. The idea would probably be to implement four modes

 

1. Advance to Next Break State. Increase the healthindex by 1 and 'soft pin' it there. This would cause the mesh to be swapped for the next most broken mesh

2. Advance to Previous Break State. Decrease the healthindex by 1 and 'soft pin' it there. This would cause the mesh to be swapped for a lest broken mesh

3. Set the break state. Set the healthindex to an arbitrary number and/or break percentage (with invisible validation to ensure a valid healthindex)

4. Reset to normal functioning.

 

One bit of code that will need some testing will be the 'soft pin'. Ordinarily, Break Armor re-checks the health state of tracked items every time the relevant NPC cycles through the queue (maximum of 1 NPC per frame). With a mode 1 soft pin, damage would need to exceed the imaginary soft pin value to trigger a swap. I haven't decided how to handle the mode 2 soft pin...It may be best to just repair the item to reach that value. Mode 3 would behave like mode 1 or mode 2, depending on the value change.

 

The reset could be dependent on a callback from the original calling mod, but I think I'll also add some sort of settable expiration timer (with a default value of, maybe, 120 seconds)

 

Just let me know what sort of approach makes the most sense for lovers, and I'll get to coding.

Link to comment

I've also just discovered a small issue with Lovers itself in regards to BA compatibility: While you can flag armors to be excluded from stripping to be used by the BA/BU callback it only actually doesn't strip them if it finds "BreakUndies.esm" in the load order.  I should fix it and have Greg replace the v96v2 Lovers.esp.

I'd be happy to replace rev96v2 if you guys make any new updates. Just let me know.
Link to comment
  • 2 weeks later...

I've been having some trouble getting this to work with Break Undies armour. I've got the whole BA thing working fine, but I can't seem to get it to function for BreakUndies.esm stuff.

 

Everything loads fine, I've got the BU_Disabler and the LoversBreakArmor in the right spots (I think...game loads and BA stuff works with Lovers).

 

What ini files should I have in /Data/Ini/?

 

Do I need to rename files to the BA system in order to make them work?

 

Something else I'm missing?

Link to comment

I've been having some trouble getting this to work with Break Undies armour. I've got the whole BA thing working fine, but I can't seem to get it to function for BreakUndies.esm stuff.

 

Everything loads fine, I've got the BU_Disabler and the LoversBreakArmor in the right spots (I think...game loads and BA stuff works with Lovers).

 

What ini files should I have in /Data/Ini/?

 

Do I need to rename files to the BA system in order to make them work?

 

Something else I'm missing?

Break Armor can identify both of BreakUndies.ini and Break_Armor.ini.

If you have already set up your BU ini before trying BA, it should work, without additional tweak.

If not (you don't have any ini entry for that armor), simply renaming files would be easier.

 

By the way.. You don't need BreakUndies.esm unless you have very old BU armor plugins. Avoid enabling BreakUndies.esm as possible.

Link to comment

I've tried sorting this out again, but I still can't seem to get this to work. Disabled the old BreakUndies.esm (and obviously everything that needed it as a master), checked to make sure some vanilla BA stuff worked (it did), and set about trying to rename some .nif files.

 

Now, in particular I want to use an old BU version of R18PN Mina armour (C cup version). I decided to try just the original .esp with the meshes from the BU version, renamed like so:

lowbody.nif

lowbody_ba1.nif

lowbody_ba2.nif

...and so on...

 

That's correct?

 

What I read in the first post leads me to think that should work, so what am I missing? Do I need to put something into the BA ini, like a path?

Link to comment

lowbody.nif

lowbody_ba1.nif

lowbody_ba2.nif

...and so on...

That is correct. Just maks sure you don't have any ini entry for this. If you rename them you don't need ini file. If your ini entry and actual file paths are not consistent bad thing will happen..

 

Process the ini file -> but cannot find actual meshes -> add it to the ignore list -> will not attempt to find _ba meshes in game.

Link to comment

 

lowbody.nif

lowbody_ba1.nif

lowbody_ba2.nif

...and so on...

That is correct. Just maks sure you don't have any ini entry for this. If you rename them you don't need ini file. If your ini entry and actual file paths are not consistent bad thing will happen..

 

Process the ini file -> but cannot find actual meshes -> add it to the ignore list -> will not attempt to find _ba meshes in game.

 

Then it should be working, but it's not.

 

Is it possible the directory got added to an ignore list somehow from before? If so, what would be the best way to purge that? Delete all the core BA plugin files, or would I need to go as far as also deleting and reinstalling all the various armours?

 

A simple clean save to reinitialize BA did not do the trick, which is why I'm asking.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use