• Hi Guest!

    We have recently posted a VaM2 2024 Progress Update on Patreon!
    Check out the details here: https://www.patreon.com/posts/vam2-august-2024-111164439
  • Hi Guest!

    We are excited to announce a new feature on the Hub: Favorites!
    You can now add resources to your favorites, and organize your favorites into collections! You can check out the details in our official announcement!

  • Happy Holidays Guest!

    We want to announce that we will be working at reduced staffing for the holidays. Specifically Monday the 23rd until Jan 2nd.

    This will affect approval queue times and responses to support tickets. Please adjust your plans accordingly and enjoy yourselves this holiday season!
ForceForge

Plugins ForceForge

ParticlePinnacle

Well-known member
Featured Contributor
Messages
223
Reactions
1,368
Points
93
ParticlePinnacle submitted a new resource:

ForceForge - lots of forces

Just a beta version if anyone wants to use it, i don't plan on making major changes to this
LMK if there's stuff that's idiotic or features need to be added

This plugin will apply not just one but 25-ish different forces on different axes and directions and timings to provide more realistic movement. This allows for adjacent timeline animations that can focus more on interactivity+movement, maybe?

Instructions, install the forceforge.cslist to the atom you want...

Read more about this resource...
 
Can you possibly add "pelvis" on the "move this" tab? I find that using pelvis instead of hips is a lot better for torque isolation.
 
Can you possibly add "pelvis" on the "move this" tab? I find that using pelvis instead of hips is a lot better for torque isolatio
hmm, the "move this" "to this" thing is just about the direction of the main force, the pelvis, abdomen and abdomen 2 are the main torso components that get torque

pelvis might be a good addition though along w/ vagina trigger
edit:
lol, wait, spaghetti code, i just used pelvis as the target when hips are selected, since people don't usually set it as a positional controller
 
Last edited:
hmm, the "move this" "to this" thing is just about the direction of the main force, the pelvis, abdomen and abdomen 2 are the main torso components that get torque

pelvis might be a good addition though along w/ vagina trigger
edit:
lol, wait, spaghetti code, i just used pelvis as the target when hips are selected, since people don't usually set it as a positional controller
Very true a lot people dont use pelvis controller, personally I find the motion, rotation, and position is better when applying force and torque to it instead of hips, and with a vagina trigger or deeper vagina trigger would be great for quick torque when touched, differently would be nice to see with what you can do.
 
Last edited:
Very true a lot people dont use pelvis controller, personally I find the motion, rotation, and position is better when applying force and torque to it instead of hips, and with a vagina trigger or deeper vagina trigger would be great for quick torque when touched, differently would be nice to see with what you can do.
it's actually applying a bunch of forces to a lot of joints at different times, thats how the motion changes w/ the individual sliders


C#:
     ForceApplierSingleJoint("chest",TargetZForce,targetTorque,delayvariable1, ZeroTorque,1f,-.15f);
                ForceApplierSingleJoint("hip",targetForce,targetTorque,delayvariable6,ZeroTorque,1f,.33f);
                   ForceApplierSingleJoint("abdomen2",targetForce,targetTorque,delayvariable3,ZeroTorque,1f,.13f);
                   ForceApplierSingleJoint("abdomen",targetForce,targetTorque,delayvariable5,ZeroTorque,1f,.23f);
                ForceApplierSingleJoint("pelvis",targetForce,targetTorque,delayvariable7,ZeroTorque,1f,.25f);
                ForceApplierSingleJoint("rShin",targetForce,targetTorque,delayvariable5,ZeroTorque,1f,.15f);
                ForceApplierSingleJoint("lShin",targetForce,targetTorque,delayvariable5,ZeroTorque,1f,.15f);
                ForceApplierSingleJoint("rThigh",targetForce,targetTorque,delayvariable6,0f,1f,.53f);
                ForceApplierSingleJoint("lThigh",targetForce,targetTorque,delayvariable6,0f,1f,.53f);
                //torque
                ForceApplierSingleJoint("abdomen",targetForce,targetTorque,delayvariable4,1f,ZeroForce,-1.5f);
                ForceApplierSingleJoint("pelvis",targetForce,targetTorque,delayvariable7,1f,ZeroForce,-2f);
                ForceApplierSingleJoint("abdomen2",targetForce,targetTorque,delayvariable3,1f,ZeroForce,-.3f);
                ForceApplierSingleJoint("chest",TargetZForce,targetTorque,delayvariable2,1f,ZeroForce,-.15f);
                ForceApplierSingleJoint("lCollar",targetForce,rigidbodyCache["lCollar"].transform.up,delayvariable5,1f,0f,1f);
                ForceApplierSingleJoint("rCollar",targetForce,-rigidbodyCache["rCollar"].transform.up,delayvariable5,1f,0f,1f);
                ForceApplierSingleJoint("rThigh",targetForce,rigidbodyCache["rThigh"].transform.up*torqueFactorJSON.val,delayvariable5,1f,0f,.3f*KneeMovement.val);
                ForceApplierSingleJoint("lThigh",targetForce,rigidbodyCache["lThigh"].transform.up*torqueFactorJSON.val,delayvariable5,1f,0f,-.3f*KneeMovement.val);
                ForceApplierSingleJoint("rThigh",targetForce,rigidbodyCache["rThigh"].transform.forward*torqueFactorJSON.val,delayvariableSine5,1f,0f,.3f*KneeMovement.val);
                ForceApplierSingleJoint("lThigh",targetForce,-rigidbodyCache["lThigh"].transform.forward*torqueFactorJSON.val,delayvariableSine5,1f,0f,.3f*KneeMovement.val);
                //secondary actions
                //up-down
                ForceApplierSingleJoint("hip",targetForceZ*updownsecondarymotionint,targetTorque,delayvariableSine5,0f,1f,1f);
                ForceApplierSingleJoint("chest",targetForceZ*updownsecondarymotionint,targetTorque,delayvariableSine1,0f,1f,.75f);
                ForceApplierSingleJoint("rForeArm",targetForceZ*updownsecondarymotionint,targetTorque,delayvariableSine4,0f,1f,-.1f*HandElbowMovement.val);
                ForceApplierSingleJoint("lForeArm",targetForceZ*updownsecondarymotionint,targetTorque,delayvariableSine4,0f,1f,-.1f*HandElbowMovement.val);
                //side to side
                if(SidetoSidemotionint!=0f){
                ForceApplierSingleJoint("rThigh",targetForceX*SidetoSidemotionint,targetTorque,delayvariableSine3,1f,1f,.33f);
                ForceApplierSingleJoint("lThigh",targetForceX*SidetoSidemotionint,targetTorque,delayvariableSine3,1f,1f,.33f);
                ForceApplierSingleJoint("hip",targetForceX*SidetoSidemotionint,targetTorque,delayvariableSine3,1f,1f,.33f);}
                //ForceApplierSingleJoint("rForeArm",targetForceX*SidetoSidemotionint,targetTorque,delayvariable4,0f,1f,.1f*HandElbowMovement.val);
                //ForceApplierSingleJoint("lForeArm",targetForceX*SidetoSidemotionint,targetTorque,delayvariable4,0f,1f,.1f*HandElbowMovement.val);
 
hmm, the "move this" "to this" thing is just about the direction of the main force, the pelvis, abdomen and abdomen 2 are the main torso components that get torque

pelvis might be a good addition though along w/ vagina trigger
edit:
lol, wait, spaghetti code, i just used pelvis as the target when hips are selected, since people don't usually set it as a positional controller
it's actually applying a bunch of forces to a lot of joints at different times, thats how the motion changes w/ the individual sliders


C#:
     ForceApplierSingleJoint("chest",TargetZForce,targetTorque,delayvariable1, ZeroTorque,1f,-.15f);
                ForceApplierSingleJoint("hip",targetForce,targetTorque,delayvariable6,ZeroTorque,1f,.33f);
                   ForceApplierSingleJoint("abdomen2",targetForce,targetTorque,delayvariable3,ZeroTorque,1f,.13f);
                   ForceApplierSingleJoint("abdomen",targetForce,targetTorque,delayvariable5,ZeroTorque,1f,.23f);
                ForceApplierSingleJoint("pelvis",targetForce,targetTorque,delayvariable7,ZeroTorque,1f,.25f);
                ForceApplierSingleJoint("rShin",targetForce,targetTorque,delayvariable5,ZeroTorque,1f,.15f);
                ForceApplierSingleJoint("lShin",targetForce,targetTorque,delayvariable5,ZeroTorque,1f,.15f);
                ForceApplierSingleJoint("rThigh",targetForce,targetTorque,delayvariable6,0f,1f,.53f);
                ForceApplierSingleJoint("lThigh",targetForce,targetTorque,delayvariable6,0f,1f,.53f);
                //torque
                ForceApplierSingleJoint("abdomen",targetForce,targetTorque,delayvariable4,1f,ZeroForce,-1.5f);
                ForceApplierSingleJoint("pelvis",targetForce,targetTorque,delayvariable7,1f,ZeroForce,-2f);
                ForceApplierSingleJoint("abdomen2",targetForce,targetTorque,delayvariable3,1f,ZeroForce,-.3f);
                ForceApplierSingleJoint("chest",TargetZForce,targetTorque,delayvariable2,1f,ZeroForce,-.15f);
                ForceApplierSingleJoint("lCollar",targetForce,rigidbodyCache["lCollar"].transform.up,delayvariable5,1f,0f,1f);
                ForceApplierSingleJoint("rCollar",targetForce,-rigidbodyCache["rCollar"].transform.up,delayvariable5,1f,0f,1f);
                ForceApplierSingleJoint("rThigh",targetForce,rigidbodyCache["rThigh"].transform.up*torqueFactorJSON.val,delayvariable5,1f,0f,.3f*KneeMovement.val);
                ForceApplierSingleJoint("lThigh",targetForce,rigidbodyCache["lThigh"].transform.up*torqueFactorJSON.val,delayvariable5,1f,0f,-.3f*KneeMovement.val);
                ForceApplierSingleJoint("rThigh",targetForce,rigidbodyCache["rThigh"].transform.forward*torqueFactorJSON.val,delayvariableSine5,1f,0f,.3f*KneeMovement.val);
                ForceApplierSingleJoint("lThigh",targetForce,-rigidbodyCache["lThigh"].transform.forward*torqueFactorJSON.val,delayvariableSine5,1f,0f,.3f*KneeMovement.val);
                //secondary actions
                //up-down
                ForceApplierSingleJoint("hip",targetForceZ*updownsecondarymotionint,targetTorque,delayvariableSine5,0f,1f,1f);
                ForceApplierSingleJoint("chest",targetForceZ*updownsecondarymotionint,targetTorque,delayvariableSine1,0f,1f,.75f);
                ForceApplierSingleJoint("rForeArm",targetForceZ*updownsecondarymotionint,targetTorque,delayvariableSine4,0f,1f,-.1f*HandElbowMovement.val);
                ForceApplierSingleJoint("lForeArm",targetForceZ*updownsecondarymotionint,targetTorque,delayvariableSine4,0f,1f,-.1f*HandElbowMovement.val);
                //side to side
                if(SidetoSidemotionint!=0f){
                ForceApplierSingleJoint("rThigh",targetForceX*SidetoSidemotionint,targetTorque,delayvariableSine3,1f,1f,.33f);
                ForceApplierSingleJoint("lThigh",targetForceX*SidetoSidemotionint,targetTorque,delayvariableSine3,1f,1f,.33f);
                ForceApplierSingleJoint("hip",targetForceX*SidetoSidemotionint,targetTorque,delayvariableSine3,1f,1f,.33f);}
                //ForceApplierSingleJoint("rForeArm",targetForceX*SidetoSidemotionint,targetTorque,delayvariable4,0f,1f,.1f*HandElbowMovement.val);
                //ForceApplierSingleJoint("lForeArm",targetForceX*SidetoSidemotionint,targetTorque,delayvariable4,0f,1f,.1f*HandElbowMovement.val);
Oh I see, so in theory there is no need for a pelvis option since you did explain that Move this To this is just to help guide the direction, and isnt for the spaghetti twerking motion, and overall the pelvis is activated along with hips man. Ima have fun figuring out settings with this Plugin, thanks for explanation. Also when it comes to Divining rod, would you say that abdomen2 is a better target for most positions? 🤔
 
Last edited:
ParticlePinnacle updated ForceForge with a new update entry:

improvements

quick update, i left the OG files in the package in case it m
Responder: disabled unused stuff, quickness
added in knee and foot movement
switched from cosine to sinusiodal movement, force applied now unlimited

Forceforge main: now consistently chooses a target direction and applies appropriate force
hips movement will apply hand movement in the palm direction, if you so choose to move the slider for hand/elbow movement
movement type + destination aka: "move this", "to this" are now saved...

Read the rest of this update entry...
 
Oh I see, so in theory there is no need for a pelvis option since you did explain that Move this To this is just to help guide the direction, and isnt for the spaghetti twerking motion, and overall the pelvis is activated along with hips man. Ima have fun figuring out settings with this Plugin, thanks for explanation. Also when it comes to Divining rod, would you say that abdomen2 is a better target for most positions? 🤔
yep, lots of joints have individual timings and forces, so its not like you're using just the hip or just the pelvis, its pelvis, abdomen, hips, abdomen 2, chest, elbows, knees, hands, shoulders

i had no idea you could target abdomen2 w/ divining rod, it appeared to work alright w/ defaults
 
Apologies if it's a stupid question, but what does the "minimum distance for pelvis" slider do? Say if the plugin is on a male atom and I move the pelvis area to a distance of 0.4 from the target will the plugin push the pelvis back to a distance of 0.5 or is it more like if I put the pelvis at a distance of 0.6 it will pull the pelvis in to a distance of 0.5? Or does the slider not have an effect until the pelvis is within distance of 0.5?

Again sorry if it's an obvious answer, I am but a simple pervert trying to understand.
 
Apologies if it's a stupid question, but what does the "minimum distance for pelvis" slider do? Say if the plugin is on a male atom and I move the pelvis area to a distance of 0.4 from the target will the plugin push the pelvis back to a distance of 0.5 or is it more like if I put the pelvis at a distance of 0.6 it will pull the pelvis in to a distance of 0.5? Or does the slider not have an effect until the pelvis is within distance of 0.5?

Again sorry if it's an obvious answer, I am but a simple pervert trying to understand.

so that's basically just an activation envelope, .7 or 1 is fine but at like at a value of .4 and your force values are really high or you're knocking the other model around a bit more than intended, the model with forceforge installed will move outside the envelope and stop thrusting,

until it moves back into the activation distance

i may need to rethink that, maybe if it only starts a thrusting sequence when its within a certain distance...
 
V1 works great! However V2 for me throws an exception when I load forceForge on the male it says "forceResponder" not found and vice versa (empty scene, no other plugins loaded)
 
V1 works great! However V2 for me throws an exception when I load forceForge on the male it says "forceResponder" not found and vice versa (empty scene, no other plugins loaded)
V2 works better for me. The wrong path cause the exception.Open the var file,than change "Custom\Scripts\particlepinnacle\thrustor\internal" to "Custom\Scripts\particlepinnacle\thrustor\Internal",it will be OK. the "i" in "internal" should be upper.
 
V2 works better for me. The wrong path cause the exception.Open the var file,than change "Custom\Scripts\particlepinnacle\thrustor\internal" to "Custom\Scripts\particlepinnacle\thrustor\Internal",it will be OK. the "i" in "internal" should be upper.
oof, did not check that, 1 sec
 
so that's basically just an activation envelope, .7 or 1 is fine but at like at a value of .4 and your force values are really high or you're knocking the other model around a bit more than intended, the model with forceforge installed will move outside the envelope and stop thrusting,

until it moves back into the activation distance

i may need to rethink that, maybe if it only starts a thrusting sequence when its within a certain distance...
The numbers were a placeholder, you can replace .5 with just 'x'. I was trying to understand what the 'x' by asking what +/- x would look like.
 
V1 works great! However V2 for me throws an exception when I load forceForge on the male it says "forceResponder" not found and vice versa (empty scene, no other plugins loaded)
gah, thanks for pointing that out, apparently you need to delete and re-add folders if you're changing names
 
Hey, this plugin is really awesome and helpfull in many ways. So thanks again ParticlePinnacle for making this !

I got some issues with 'MinDistance for Target'

Example : I use trigger to call 'slot 1' with MinDistance for Target at 0.3, and i wanna get a value of 0.8 for 'slot 2'. But when i change the value on slot 2, it apply same value for slot 1, sadly had to add another trigger manually for the right value i want on MinDistance for Target. Is it intended or a bug ?
 
Back
Top Bottom