I took to creating something incredibly necessary - a greatsword the size of a dagger, and a dagger the size of a greatsword. After a little math and pixel measurements, pretty sure its almost exact. With some more measurements, I also made a winged kobold roughly 5 feet tall, assuming this edgelord I use as a test dummy is 6 feet tall.
I've just come here to post how much fun I've had playing around with this! Fun to scale my PC down to mouse size, giant size. Fun moving bookcases around. With scripting, one could do things like swimming and flying, because the model height can be adjusted while still 'walking' on the terrain. In fact, one could have walkable bridges that can be walked under too. Not perfect, but perfectly fun and a great step, I think.
So is this something you have to do with scripting only? I want to enlarge a placeable object. Can't I just adjust the size in the toolset when I place it?
@raz651 Yes, this is something you must use a script to use at the moment. I believe they said they'd have to incorperate it directly into the toolset eventually, but at the moment it is thankfully very easy to do. It should be as simple as putting SetObjectVisualTransform(OBJECT_SELF, 10, 1.5) in the on spawn script of a placeable to make an object 50% larger. (If you don't want to make hundreds of scripts, one per placeable, you could also give your placeables variables that the script finds and uses as the scale, meaning you'll only need one script.)
Bosses that grow bigger as they near their enrage timer! Alice-in-Wonderland-shrinking players! Kinda-sorta-faked vertical-position-adjusting flying!! Pseudo-randomized random encounter forest areas with rotating, rescaling, and repositioning trees? Statue-ifying creatures is going to get amazing with this, too, especially if they can figure out how to make the statues stay stable. Blink dogs? Magic weapons that grow bigger until you can't carry them anymore? Magic weapons that grow smaller until they vanish when you equip them? Floor and wall spike traps where the spike models are hidden in the floor/walls and moved out via scripting rather than animating the model? Hidden compartments covered by non-static non-usable placeables that get moved aside? Falling-towards-the-ground sequences? Birds that are actually flying up in the air at varying height levels!!
@raz651 Oh. That's true. Well, that's what I get for not working with placeables ever.
An actual solution would to make an on-enter script for your area (or a bigger one on module load so you don't get loaded down with tons of scripts) that makes certain placeables different sizes. Something like below, adding another line with a different tag each time. void main()
{
SetObjectVisualTransform(GetObjectByTag("placeable"), 10, 1.5);
} There's probably a more efficient manner this can be done using a loop function and variables, but my last experience with loops gave me a headache (granted, what I was trying to do was a lot more complicated than this). After a little thinking it would also probably be better to add the above to the bottom of a module's OnModuleLoad script instead of the Area's OnEnter script so you don't have to make one script per area and it doesn't constantly fire every time you enter the area.
@raz651 I don't think they said if there was a limit, so I couldn't tell you. Setting the multiplier to something incredibly absurd, like 100x, would probably give you a good idea of how much room you have to work with though, but I'm not sure if there's anything small enough to ever need to be that much bigger.
For placable you can just use heartbeat with a variable/integer marker to only run once. That looks up local float on the placable for your sizing. LOL loving the pictures.
Bosses that grow bigger as they near their enrage timer! Alice-in-Wonderland-shrinking players! Kinda-sorta-faked vertical-position-adjusting flying!! Pseudo-randomized random encounter forest areas with rotating, rescaling, and repositioning trees? Statue-ifying creatures is going to get amazing with this, too, especially if they can figure out how to make the statues stay stable. Blink dogs? Magic weapons that grow bigger until you can't carry them anymore? Magic weapons that grow smaller until they vanish when you equip them? Floor and wall spike traps where the spike models are hidden in the floor/walls and moved out via scripting rather than animating the model? Hidden compartments covered by non-static non-usable placeables that get moved aside? Falling-towards-the-ground sequences? Birds that are actually flying up in the air at varying height levels!!
It great, Dam though, now I have to write a whole new bunch of custom core scripting functions to handle all this
Seem height does not affect the combat engine, so cannot move the creature high enough that the pc have to use range weapons for flying creatures ,but should be able to integrate it with the old system I was going to use to make it work.
This is set at 40.0 and the position z axis set at -10 (as low as it will go in toolset). It seems the bigger the item gets it causes some lag issues also. Not to mention that you can not see the entire placeable because of camera angles.
It great, Dam though, now I have to write a whole new bunch of custom core scripting functions to handle all this
Seem height does not affect the combat engine, so cannot move the creature high enough that the pc have to use range weapons for flying creatures ,but should be able to integrate it with the old system I was going to use to make it work.
::suggestive eyebrow waggle:: ::throws more ideas::
Levitating furniture in haunted houses! Alien abduction beams that grab and pull in cows and people! Chopping rotor blade traps! Walls that slowly move in, crushing people! Trapped-fairy-bottles that shrink and trap the player when they release the fairy! Doors that jump to the ceiling when you try to open them! Furniture that sticks to ceilings! In fact, players that walk on ceilings!
We're going to need an M.C. Escher tileset.
Flipping bladed weapons around! Holding all holdables at whatever angle one needs! A rip in reality that gets bigger and shrinks and damages everything in it's vincinity! Slime monsters that grow bigger by consuming other things! Circumventing the fight with the ginormous boss by shrinking them to adorably tiny size! Cake that gets bigger when you eat it! Putting the tiny player in the bird cage placeable model! Thieves on windowsills and running over roofs! Growing blazing inferno by scaling up fire placeables! Planting trees that grow over time! Falling anvils and pianos!
... umber hulk piggyback rides! If we could link two creatures together, attaching one to the other based on one of the other creature's nodes kinda like it's with the beam VFX, we could turn all existing creatures into usable, separately targetable mounts. Possibly even ones that can carry multiple players at once. ::headscratch:: Heck, let's have players who are mounts and can carry other players. Bosses that can pick players up and throw them! Want!
::psyched!::
Maybe there could be a SetIsRangedTarget function that prevents something from being attackable save for with ranged weapons and spells? Like with the dartboard - that had no really satisfying scripting solution. hmm.
eeeeee there can be spiders swarming through cave tunnels now, ceiling, walls, floor, just spiders everywhere effing heck yeah spiders make everything better
Also, this means no more making different size variants of the same placeable, ever!! :'-D
Yes there plenty of graphical stuff, but not trying to be a downer but there still logistical problems with relation to walkmeshes/combat engine for example giant chest with pc having major clipping (if we could get custom trigger non-walk that would be great. Then we can just set down a trigger to the new size and be done.) Anyhow here an example of a custom function using the new system. Transitional scaling with amount and speed control.
I hope we can get the pwk to also transform though, eventually. But heck yes, this is huge. Hey, I need to try something. Be back later!
So, the model is rotated, but the movement isn't. Thus, rotating a creature 90 degrees will make it move sideways while playing the walk forward animation. I'm not complaining, because this is still a great step (ugh, no pun intended) in the right direction.
Seeing this thread makes me happy. I'm really glad people enjoy playing with it and I think there are a lot of possibilities with it that weren't envisioned at first. This is a feature we long wanted to implement.
Yes, toolset support will come. Full persistence (server vaults, etc) is already in. Adding toolset UI, live manipulation and render support needs to come as well.
No, there aren't any limits on the values you can insert (you can even set animation scale to 0 for example). programmer-defined values have a habit of being ran into needlessly so I tend to avoid them where possible, even if that results in more unhandled edge cases down the road.
Changing the walk mesh seems out of scope for me for this feature, but adding functions to adjust the AABB separately is something I'd like to do. If you have suggestions on how to design this, please speak up.
All the same if you find issues or things that could be better in some other way please say so too and we can still change them before they hit stable. That is what the dev branch is for.
I just like to say the whole team who worked on this just rock. Best feature added to date and will make future modules/pw have some really unique feel. As for future implementation/support related to this, A SetCreatureSize function would help and can we get size modifiers to show on character sheets AC. I would love to see some way of doing OBJECT_VISUAL_TRANSFORM_TRANSLATE_Z that does move the rootdummy up/down and does affect combat engine and maybe have some kind of extrapolation of down attack to target (so it play the down attack animation and move all the way to the target) for support for pseudo-flying attack( I know it far fetched). As for the AABB as a seperate feature, we need some more control over it, maybe a non-walkable /walkable trigger, maybe a walkable placable that overrides the walkmesh under it. Some functions like RecalculateTileWalkmesh / RecalculateAreaWalkmesh called after the trigger/placable is deleted/created. Placables that can be tagged as tileset walkmesh types (example placable water that when the pc walk through it, the same splash effect happens that happens when a pc walk through a tile of water (stream tile example).
The only issues I have spotted are related to vfx / visual applied to pc before/after scaling that are not syncing. I have a visual familar on shoulder system that while the pc apply the visual(familar on shoulder) the visual matches the size even after scaling, but if the visual is removed and reapplied then it reverts to standard size. Hmm might be able to work around it with scripting.
This is what was show in the 8169 delvolopment shows new script commands.
int OBJECT_VISUAL_TRANSFORM_SCALE = 10; int OBJECT_VISUAL_TRANSFORM_ROTATE_X = 21; int OBJECT_VISUAL_TRANSFORM_ROTATE_Y = 22; int OBJECT_VISUAL_TRANSFORM_ROTATE_Z = 23; int OBJECT_VISUAL_TRANSFORM_TRANSLATE_X = 31; int OBJECT_VISUAL_TRANSFORM_TRANSLATE_Y = 32; int OBJECT_VISUAL_TRANSFORM_TRANSLATE_Z = 33; int OBJECT_VISUAL_TRANSFORM_ANIMATION_SPEED = 40;
// Gets a visual transform on the given object. // - oObject can be any valid Creature, Placeable, Item or Door. // - nTransform is one of OBJECT_VISUAL_TRANSFORM_* // Returns the current (or default) value. float GetObjectVisualTransform(object oObject, int nTransform);
// Sets a visual transform on the given object. // - oObject can be any valid Creature, Placeable, Item or Door. // - nTransform is one of OBJECT_VISUAL_TRANSFORM_* // - fValue depends on the transformation to apply. // Returns the old/previous value. float SetObjectVisualTransform(object oObject, int nTransform, float fValue);
I know what SCALE, ROTATE AND ANIMATION_SPEED do. What does the TRANSLATE part do?
Translate changes the position. Up, down, left, right, back, forward, that sort of thing. That's what got the player onto the ceiling in the earlier picture - rotating them alone would've had them walking with their feet in the air and their head on the ground. :-)
I figured I come back here and expanded on creature size. There is a workaround for creature sizing for npc and pc. First NPC you can use the scaling/tail system to have all the different sizes and after you adjust them and applied polymorph with a number holder then the engine will recognize the new size. ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectPolymorph(46), oPC, 0.6);
This work around works for pc also. Copy the PC lines in the appearance.2da and place them lower down. Adjust each one size category up and save. When you want to increase the size of the pc change the appearance with SetCreatureAppearanceType function to the new matching size and run ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectPolymorph(46), oPC, 0.6); After that the engine will recognize the PC new size. I will post a video example with a halfling that has enlarge spell cast on it and then be treated as a medium creature. This enables me to do a fully function enlarge person spell / Reduce person spell for PC. This works great for PC, but NPC tail/scale system has noticeable de-synchronization of weapon attack animation of humanoid characters so a New BD SetSize function that incorporates the polymorph effect would be ideal.
As I suggested in the Art thread, I'd like a separate scale for the walking and running animation speeds so that I can adjust the walking animation speed to compensate for the increased size without making them animate overall incredibly slowly or quickly.
Comments
Overland maps.
Lotsa ideas.
Thanks, Beamdog!
-JFK
This is so cool.
Bosses that grow bigger as they near their enrage timer! Alice-in-Wonderland-shrinking players! Kinda-sorta-faked vertical-position-adjusting flying!! Pseudo-randomized random encounter forest areas with rotating, rescaling, and repositioning trees? Statue-ifying creatures is going to get amazing with this, too, especially if they can figure out how to make the statues stay stable. Blink dogs? Magic weapons that grow bigger until you can't carry them anymore? Magic weapons that grow smaller until they vanish when you equip them? Floor and wall spike traps where the spike models are hidden in the floor/walls and moved out via scripting rather than animating the model? Hidden compartments covered by non-static non-usable placeables that get moved aside? Falling-towards-the-ground sequences? Birds that are actually flying up in the air at varying height levels!!
An actual solution would to make an on-enter script for your area (or a bigger one on module load so you don't get loaded down with tons of scripts) that makes certain placeables different sizes. Something like below, adding another line with a different tag each time.
void main() { SetObjectVisualTransform(GetObjectByTag("placeable"), 10, 1.5); }
There's probably a more efficient manner this can be done using a loop function and variables, but my last experience with loops gave me a headache (granted, what I was trying to do was a lot more complicated than this). After a little thinking it would also probably be better to add the above to the bottom of a module's OnModuleLoad script instead of the Area's OnEnter script so you don't have to make one script per area and it doesn't constantly fire every time you enter the area.
Seem height does not affect the combat engine, so cannot move the creature high enough that the pc have to use range weapons for flying creatures
Levitating furniture in haunted houses! Alien abduction beams that grab and pull in cows and people! Chopping rotor blade traps! Walls that slowly move in, crushing people! Trapped-fairy-bottles that shrink and trap the player when they release the fairy! Doors that jump to the ceiling when you try to open them! Furniture that sticks to ceilings! In fact, players that walk on ceilings!
We're going to need an M.C. Escher tileset.
Flipping bladed weapons around! Holding all holdables at whatever angle one needs! A rip in reality that gets bigger and shrinks and damages everything in it's vincinity! Slime monsters that grow bigger by consuming other things! Circumventing the fight with the ginormous boss by shrinking them to adorably tiny size! Cake that gets bigger when you eat it! Putting the tiny player in the bird cage placeable model! Thieves on windowsills and running over roofs! Growing blazing inferno by scaling up fire placeables! Planting trees that grow over time! Falling anvils and pianos!
... umber hulk piggyback rides! If we could link two creatures together, attaching one to the other based on one of the other creature's nodes kinda like it's with the beam VFX, we could turn all existing creatures into usable, separately targetable mounts. Possibly even ones that can carry multiple players at once. ::headscratch:: Heck, let's have players who are mounts and can carry other players. Bosses that can pick players up and throw them! Want!
::psyched!::
Maybe there could be a SetIsRangedTarget function that prevents something from being attackable save for with ranged weapons and spells? Like with the dartboard - that had no really satisfying scripting solution. hmm.
eeeeee there can be spiders swarming through cave tunnels now, ceiling, walls, floor, just spiders everywhere effing heck yeah spiders make everything better
Also, this means no more making different size variants of the same placeable, ever!! :'-D
Video LINK
So, the model is rotated, but the movement isn't. Thus, rotating a creature 90 degrees will make it move sideways while playing the walk forward animation. I'm not complaining, because this is still a great step (ugh, no pun intended) in the right direction.
Gonna play some more.
-JFK
Yes, toolset support will come. Full persistence (server vaults, etc) is already in. Adding toolset UI, live manipulation and render support needs to come as well.
No, there aren't any limits on the values you can insert (you can even set animation scale to 0 for example). programmer-defined values have a habit of being ran into needlessly so I tend to avoid them where possible, even if that results in more unhandled edge cases down the road.
Changing the walk mesh seems out of scope for me for this feature, but adding functions to adjust the AABB separately is something I'd like to do. If you have suggestions on how to design this, please speak up.
All the same if you find issues or things that could be better in some other way please say so too and we can still change them before they hit stable. That is what the dev branch is for.
This is what was show in the 8169 delvolopment shows new script commands.
int OBJECT_VISUAL_TRANSFORM_SCALE = 10;int OBJECT_VISUAL_TRANSFORM_ROTATE_X = 21;
int OBJECT_VISUAL_TRANSFORM_ROTATE_Y = 22;
int OBJECT_VISUAL_TRANSFORM_ROTATE_Z = 23;
int OBJECT_VISUAL_TRANSFORM_TRANSLATE_X = 31;
int OBJECT_VISUAL_TRANSFORM_TRANSLATE_Y = 32;
int OBJECT_VISUAL_TRANSFORM_TRANSLATE_Z = 33;
int OBJECT_VISUAL_TRANSFORM_ANIMATION_SPEED = 40;
// Gets a visual transform on the given object.
// - oObject can be any valid Creature, Placeable, Item or Door.
// - nTransform is one of OBJECT_VISUAL_TRANSFORM_*
// Returns the current (or default) value.
float GetObjectVisualTransform(object oObject, int nTransform);
// Sets a visual transform on the given object.
// - oObject can be any valid Creature, Placeable, Item or Door.
// - nTransform is one of OBJECT_VISUAL_TRANSFORM_*
// - fValue depends on the transformation to apply.
// Returns the old/previous value.
float SetObjectVisualTransform(object oObject, int nTransform, float fValue);
I know what SCALE, ROTATE AND ANIMATION_SPEED do. What does the TRANSLATE part do?
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectPolymorph(46), oPC, 0.6);
This work around works for pc also. Copy the PC lines in the appearance.2da and place them lower down. Adjust each one size category up and save. When you want to increase the size of the pc change the appearance with SetCreatureAppearanceType function to the new matching size and run
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectPolymorph(46), oPC, 0.6);
After that the engine will recognize the PC new size. I will post a video example with a halfling that has enlarge spell cast on it and then be treated as a medium creature. This enables me to do a fully function enlarge person spell / Reduce person spell for PC. This works great for PC, but NPC tail/scale system has noticeable de-synchronization of weapon attack animation of humanoid characters so a New BD SetSize function that incorporates the polymorph effect would be ideal.
VIDEO SAMPLE LINK