|
|
|
# New Bone Types
|
|
|
|
|
|
|
|
## Item Bone
|
|
|
|
**Tags: `ih_` for head display, `ir_` for main hand display, `il_`for off hand display**
|
|
|
|
**No cubes in bone**
|
|
|
|
|
|
|
|
Used to display an item on the desired slot.
|
|
|
|
Unlike the old hand bone, this bone is not linked to any equipment slots of the base entity. Although it would not auto-update, you can create as many item bones and hold as many item types as you want.
|
|
|
|
Configure the item display with [SetItemModel](https://github.com/Ticxo/Model-Engine-Wiki/wiki/%5BTemporary-Wiki%5D-3.0-Features#setitemmodel) mechanic.
|
|
|
|
|
|
|
|
## Leash Bone
|
|
|
|
**Tags: `l_`**
|
|
|
|
**No cubes in bone**
|
|
|
|
|
|
|
|
Mark a bone as the attachment point when being leashed. Can have multiple.
|
|
|
|
Connect a leash to this bone with the [Leash](https://github.com/Ticxo/Model-Engine-Wiki/wiki/%5BTemporary-Wiki%5D-3.0-Features#leash) mechanic.
|
|
|
|
The bone can also be the source of the leash with [LeashSelf](https://github.com/Ticxo/Model-Engine-Wiki/wiki/%5BTemporary-Wiki%5D-3.0-Features#leashself) mechanic.
|
|
|
|
|
|
|
|
## Rendered Ghost Bone
|
|
|
|
**Tags: `g_`**
|
|
|
|
**No cubes in bone**
|
|
|
|
|
|
|
|
Mark a ghost bone as rendered in-game.
|
|
|
|
Normal ghost bones (bones without cubes inside) are only used internally and do not spawn armor stands. Marking them as rendered would cause them to spawn an armor stand, but will not display any models.
|
|
|
|
You can set the model of a rendered ghost bone using the [ChangePart](https://github.com/Ticxo/Model-Engine-Wiki/wiki/Mechanics#changepart) mechanic.
|
|
|
|
|
|
|
|
***
|
|
|
|
|
|
|
|
# MM Model Mechanics
|
|
|
|
## BodyClamp
|
|
|
|
Configure the rotational interaction between the head bone and body bone.
|
|
|
|
| Attribute | Aliases | Description | Default |
|
|
|
|
|:---:|:---:|---|:---:|
|
|
|
|
| headuneven | hu, head | Is the head clamp uneven (used while model is walking) | false |
|
|
|
|
| maxhead | mh, mxh | Maximum angle the head can rotate | 50 |
|
|
|
|
| minhead | mnh | Minimum angle the head can rotate | -maxhead |
|
|
|
|
| bodyuneven | bu, body | Is the body clamp uneven (used while model is idling) | false |
|
|
|
|
| maxbody | mb, mxb | Maximum angle the body can rotate | 50 |
|
|
|
|
| minbody | mnb | Minimum angle the body can rotate | -maxbody |
|
|
|
|
| playermode | m, mode, player | Should the body reorient itself like vanilla mobs | false |
|
|
|
|
| stable | s | Stable angle before the body rotates<br>E.g. if `maxbody` = 50, and `stable` = 15, the <br>head can rotate freely until it passes 65 degrees,<br>then the body would snap back to be 50 degrees <br>apart from the head. | 15 |
|
|
|
|
| rdelay | rde | Delay in ticks before the body reorient itself | 10 |
|
|
|
|
| rduration | rdu | How long in ticks would the body take to reorient itself | 10 |
|
|
|
|
|
|
|
|
***
|
|
|
|
|
|
|
|
## DefaultState
|
|
|
|
Configure the default states of a model.
|
|
|
|
| Attribute | Aliases | Description | Default |
|
|
|
|
|:---:|:---:|---|:---:|
|
|
|
|
| modelid | m, mid, model | The model being changed | |
|
|
|
|
| type | t | The default state getting changed | |
|
|
|
|
| state | s | Animation name | |
|
|
|
|
| lerpin | li | Lerp in tick | prev |
|
|
|
|
| lerpout | lo | Lerp out tick | prev |
|
|
|
|
| speed | sp | Speed modifier | prev |
|
|
|
|
|
|
|
|
***
|
|
|
|
|
|
|
|
## Leash
|
|
|
|
**Visually** link a leash bone to the target.
|
|
|
|
| Attribute | Aliases | Description | Default |
|
|
|
|
|:---:|:---:|---|:---:|
|
|
|
|
| modelid | m, mid, model | The model being changed | |
|
|
|
|
| partid | p, pid, part | Leash bone | |
|
|
|
|
| leash | l | Is leashed to target | |
|
|
|
|
|
|
|
|
***
|
|
|
|
|
|
|
|
## LeashSelf
|
|
|
|
Link a leash bone to another.
|
|
|
|
| Attribute | Aliases | Description | Default |
|
|
|
|
|:---:|:---:|---|:---:|
|
|
|
|
| modelid | m, mid, model | The model being changed | |
|
|
|
|
| sourceid | s, sid, src, source | The leash bone being leashed | |
|
|
|
|
| destid | d, did, dest | The leash bone holding the leash | |
|
|
|
|
> The leash would be visible as long as the destination is in view, or it will disappear. Double leash if you need it to be always visible (leash A to B, then leash B to A)
|
|
|
|
|
|
|
|
***
|
|
|
|
|
|
|
|
## MountModel
|
|
|
|
If the model has driver/passenger bones, mount entities to those bones.
|
|
|
|
| Attribute | Aliases | Description | Default |
|
|
|
|
|:---:|:---:|---|:---:|
|
|
|
|
| driver | d, drive | Is this mechanic mounting a driver | true |
|
|
|
|
| force | f | Should the target be forced to mount on the bone<br>Driver: dismount the original driver and mount the target<br>Passenger: find a seat with the least passengers and mount the target | false |
|
|
|
|
| autodismount | ad | If the target is already mounted on another seat, should the target dismount from the old seat and mount on the new seat | false |
|
|
|
|
| damagemount | dmg | Can the mounted entity damage the mount | false |
|
|
|
|
| mode | m | What mount mode should the mounted entity use<br>**Walking**: WASD ground controller<br>**Flying**: WASD-Sneak-Jump aerial controller (jump to ascend, shift to descend, shift while mount on ground to dismount)<br>**Flying_v16**: WASD-Pitch-Jump aerial controller for 1.16 (look up + space to ascend, look down + space to descend)<br>**Force_Walking**: Same as Walking, but mounted entity cannot dismount<br>**Force_Flying**: Same as Flying, but mounted entity cannot dismount | walking |
|
|
|
|
| modelid | mid, model | Not Driver: The model ID of the passenger bones. | |
|
|
|
|
| pbone | p | Not Driver: A list of seats searched when mounting entities<br>Format: pbone=seat1,seat2,seat3<br>If force is not enabled, this will fill all the seats until no more passengers can be mounted. | |
|
|
|
|
|
|
|
|
***
|
|
|
|
|
|
|
|
## SubModel
|
|
|
|
Add or remove a part of a different model to the targeted model. This will create all child bones contained in the substitution, with the offset and rotation taken from the model.
|
|
|
|
| Attribute | Aliases | Description | Default |
|
|
|
|
|:---:|:---:|---|:---:|
|
|
|
|
| modelid | m, mid, model | The targeted model | |
|
|
|
|
| partid | p, pid, part | The targeted part | |
|
|
|
|
| subpartid | sp, spid, subpart | The new part | |
|
|
|
|
| remove | r | Is this mechanic removing a part | |
|
|
|
|
|
|
|
|
***
|
|
|
|
|
|
|
|
## SetModelTag
|
|
|
|
Set the name displayed on the name tag of the model.
|
|
|
|
| Attribute | Aliases | Description | Default |
|
|
|
|
|:---:|:---:|---|:---:|
|
|
|
|
| modelid | m, mid, model | The targeted model | |
|
|
|
|
| bone | b | The selected bone | |
|
|
|
|
| tag | t | The name, or a placeholder string | |
|
|
|
|
| visible | v | The visibility of the name tag | true |
|
|
|
|
|
|
|
|
***
|
|
|
|
|
|
|
|
## SwapEntity
|
|
|
|
Swap the model owner from one entity to the target.
|
|
|
|
| Attribute | Aliases | Description | Default |
|
|
|
|
|:---:|:---:|---|:---:|
|
|
|
|
| modelid | m, mid, model | The targeted model | |
|
|
|
|
| hitbox | h | Should override hitbox | true |
|
|
|
|
| invisible | i, invis | Should the base entity be invisible | true |
|
|
|
|
| step | s | New step height of receiver entity | 0.5 |
|
|
|
|
| radius | rad | View radius of the model | base entity default |
|
|
|
|
|
|
|
|
***
|
|
|
|
|
|
|
|
## LockModel
|
|
|
|
Lock all yaw rotation of the model. Useful when trying to execute a skill without the model turning.
|
|
|
|
| Attribute | Aliases | Description | Default |
|
|
|
|
|:---:|:---:|---|:---:|
|
|
|
|
| lock | l | True to lock the model rotation.<br>This would lock both the head and body yaw rotation,<br>but animations do still play. | true |
|
|
|
|
|
|
|
|
***
|
|
|
|
|
|
|
|
## SetItemModel
|
|
|
|
Set the item displayed on an item bone.
|
|
|
|
| Attribute | Aliases | Description | Default |
|
|
|
|
|---|---|---|---|
|
|
|
|
| modelid | m, mid, model | The targeted model | |
|
|
|
|
| bone | b | The targeted item bone | |
|
|
|
|
| item | i | The material name of a vanilla item, or the name of a MM item.<br>If this attribute is not set, it would set the item as AIR. | |
|
|
|
|
|
|
|
|
***
|
|
|
|
|
|
|
|
# MM VFX Mechanics
|
|
|
|
## VFX
|
|
|
|
Set the VFX of the mob.
|
|
|
|
| Attribute | Aliases | Description | Default |
|
|
|
|
|---|---|---|---|
|
|
|
|
| modelid | m, mid, model | The model id of the VFX | |
|
|
|
|
| partid | p, pid, part | The part id of the VFX | |
|
|
|
|
| remove | r | Is this mechanic used for removing a VFX | false |
|
|
|
|
| radius | rad | The view radius of the VFX | base entity default |
|
|
|
|
| color | c | The color of the VFX | FFFFFF |
|
|
|
|
| enchant | en | If the VFX is enchanted | false |
|
|
|
|
| visible | v | If the VFX is visible | true |
|
|
|
|
| bvisible | bv | If the base entity of the VFX is visible. | false |
|
|
|
|
| autotick | at | Should the VFX update by itself<br>When enabled, the VFX would update location, pitch and yaw | false |
|
|
|
|
| autorange | ar | Should the VFX spawn/despawn automatically to player <br>based on distance | true |
|
|
|
|
|
|
|
|
***
|
|
|
|
|
|
|
|
## VFXSpawn
|
|
|
|
Removed.
|
|
|
|
|
|
|
|
***
|
|
|
|
|
|
|
|
## VFXPoint
|
|
|
|
Removed `useyaw` attribute.
|
|
|
|
|
|
|
|
***
|
|
|
|
|
|
|
|
## VFXObserver (vfxobs)
|
|
|
|
Manually set the target to see the vfx.
|
|
|
|
| Attribute | Aliases | Description | Default |
|
|
|
|
|---|---|---|---|
|
|
|
|
| remove | r | Hide from targets | false |
|
|
|
|
| force | f | Force the target to see the VFX | false |
|
|
|
|
|
|
|
|
***
|
|
|
|
|
|
|
|
## VFXChangeModel
|
|
|
|
Change the model of the VFX. The armor stand holding the VFX would change size if the VFX uses a different size.
|
|
|
|
| Attribute | Aliases | Description | Default |
|
|
|
|
|---|---|---|---|
|
|
|
|
| modelid | m, mid, model | The model id of the new VFX model | |
|
|
|
|
| partid | p, pid, part | The part id of the new VFX model | |
|
|
|
|
|
|
|
|
***
|
|
|
|
|
|
|
|
# Scriptable keyframes
|
|
|
|
Using the script keyframe, you can now call MM skills or MEG commands at the exact animation frame. You can add new script keyframes by opening the effects timeline within Blockbench.
|
|
|
|
![image](https://user-images.githubusercontent.com/41558177/177030314-8db9a942-238d-4dd8-a228-1e354943e2ce.png)
|
|
|
|
Afterward, add a new keyframe on the Instructions timeline. Instead of the normal XYZ input, you will see an input called Script.
|
|
|
|
![image](https://user-images.githubusercontent.com/41558177/177030338-d663af59-8249-4026-ba9b-7b48ef0f96c1.png)
|
|
|
|
|
|
|
|
## MM Skills
|
|
|
|
You can call any custom-defined MM skills by using the prefix `mm:` and the skill name. For example:
|
|
|
|
```yml
|
|
|
|
Primary_5:
|
|
|
|
Skills:
|
|
|
|
- message{m="Get punched";audience=world} @self
|
|
|
|
- explode @ModelPart{m=dr_axis;p=attack_point}
|
|
|
|
```
|
|
|
|
![image](https://user-images.githubusercontent.com/41558177/177030827-c7bc59c0-ff89-4545-8a60-3e5df1578d8a.png)
|
|
|
|
You can even use [Skill Parameters](https://git.lumine.io/mythiccraft/MythicMobs/-/wikis/skills/skillparametersystem) within keyframes.
|
|
|
|
```yml
|
|
|
|
Primary_5:
|
|
|
|
Skills:
|
|
|
|
- message{m=<skill.dialogue>;audience=world} @self
|
|
|
|
- explode @ModelPart{m=dr_axis;p=attack_point}
|
|
|
|
```
|
|
|
|
![image](https://user-images.githubusercontent.com/41558177/177030890-dee52b88-8ce5-49a2-ad7a-7713305c653c.png)
|
|
|
|
|
|
|
|
## MEG Commands
|
|
|
|
MEG Commands are, by design, structurally very similar to MM mechanics. Currently, we have 7 commands which have the same attributes as their MM mechanic counterpart. However, **all commands will only target the model you are editing.**
|
|
|
|
* changeparent = [ChangeParent](https://github.com/Ticxo/Model-Engine-Wiki/wiki/Mechanics#changeparent)
|
|
|
|
* partvis = [PartVisibility](https://github.com/Ticxo/Model-Engine-Wiki/wiki/Mechanics#partvisibility)
|
|
|
|
* tint = [Tint](https://github.com/Ticxo/Model-Engine-Wiki/wiki/Mechanics#tint)
|
|
|
|
* enchant = [Enchant](https://github.com/Ticxo/Model-Engine-Wiki/wiki/Mechanics#enchant)
|
|
|
|
* tag = [SetModelTag](https://github.com/Ticxo/Model-Engine-Wiki/wiki/Mechanics#setmodeltag)
|
|
|
|
* changepart = [ChangePart](https://github.com/Ticxo/Model-Engine-Wiki/wiki/Mechanics#changepart)
|
|
|
|
* remap = [RemapModel](https://github.com/Ticxo/Model-Engine-Wiki/wiki/Mechanics#remapmodel)
|
|
|
|
|
|
|
|
To use a MEG command, you just enter it like using them as a normal mechanic.
|
|
|
|
![image](https://user-images.githubusercontent.com/41558177/177031244-1abfce42-da71-4978-a88f-8e429de8fe64.png)
|
|
|
|
|
|
|
|
## Multiline scripts
|
|
|
|
You can write multiple lines of scripts into a single keyframe, and you can also mix and match different script types.
|
|
|
|
![image](https://user-images.githubusercontent.com/41558177/177031293-34a39164-7ddf-4490-af9e-aae6008e86a7.png)
|
|
|
|
This keyframe would run the MM Skill that plays the dialogue and effect first, then the MEG command to enchant the arm bone.
|
|
|
|
|
|
|
|
## Using Animation Variables
|
|
|
|
Finally, you can make use of the Variable Placeholder system provided by Blockbench itself. This system is also extremely similar to MM's variable system, and it works on both MM skills and MEG commands.
|
|
|
|
![image](https://user-images.githubusercontent.com/41558177/177031442-0f2ca7a4-973f-4e47-b34d-f82ee150398d.png)
|
|
|
|
|
|
|
|
## [Video Demo](https://youtu.be/JqVQ4ARJoIQ) |
|
|
|
\ No newline at end of file |