Mollo → R2

Giik's moth with the fuse antennae, rebuilt as a full 3D fighter for the Rivals 2 Workshop. Phase 1 is done on the Blender side: model, rig, 125 animations, 36 attacks with their frame data. Next is the Unreal Mod Kit, which is not installed yet.

Model + rig: done Animations: done (first pass) Attack data: done Unreal import: waiting on Mod Kit Bomb system in Lua: phase 2
Original Rivals 1 Workshop key art of Mollo holding a cherry bomb
Source: Giik's Rivals 1 Workshop key art (Steam item 1871989159).
195cm tall, antennae included (Zetterburn is 178)
23.9ktriangles (Workshop average is ~50k)
56bones, official R2 names
125animations at 60 fps
36attacks with windows + hitboxes
4props: bomb, spray can, flare gun, bat

The pipeline

Every step is a script, so changing a pose or a frame count rebuilds everything in about a minute. Green is done; orange needs the Mod Kit.

flowchart LR
  A[R1 key art
Steam Workshop] --> B[Grok concept
front + back A-pose] B --> C[TRELLIS
image to 3D] C --> D[rig_mollo.py
weld, skeleton, heat weights,
cape split by raycast] D --> E[props_mollo.py
4 props on own bones] E --> F[animer.py
poses, leg IK, visual bake] F --> G[spec_attaques.py
hitbox check renders + JSON] F --> H[exporter.py
SK + AN FBX] F --> I[textures.py
BC, N, ORMS] H --> J[Unreal Mod Kit
import, materials, HB_ capsules] G --> K[ATT_ assets
windows, hitboxes, on-hit] J --> K K --> L[Lua
bombs, fuse, flare aim,
jab spray, aerial charge] L --> M[Playtest] classDef done fill:#1f3326,stroke:#8fd19e,color:#efe4dc; classDef todo fill:#3a2a14,stroke:#ffb347,color:#efe4dc; class A,B,C,D,E,F,G,H,I done; class J,K,L,M todo;

Model

The concept was generated from the R1 key art, front and back in A-pose, in the stylized toon look of Rivals 2. TRELLIS built the textured mesh from both views. The result is turned 180° to face −Y as the docs require, scaled in Blender at unit scale 0.01, and stands on z = 0.

Concept art of Mollo from the front in A-pose
Concept, front. The belt bomb came out as a literal cherry; the texture can fix that.
Concept art of Mollo from the back, showing the cape and bandana knot
Concept, back: tattered moth-wing cape, bandana knot.
Four views of the TRELLIS mesh: back, three-quarter back, side, front
TRELLIS mesh, 23k triangles. Back / ¾ back / side / front.

Rig

The skeleton copies the naming of the official reference rigs (Wrastor, Zetterburn): Root_M, Spine1_M, Shoulder_L, Hip_L, a free-floating Grab_M. Mollo adds three-segment antennae, a bandana tail, a 3×4 cape chain and one bone per prop. Getting clean deformation took four rounds; the problems are listed below.

First rig test with the mesh tearing at every joint
v1: the mesh tears at every bend.
Final rig tests: kick, leg back, arms, crouch, torso twist, cape
v7: kick, leg back, arms, crouch, torso twist, cape flap. Clean.

Animation

Poses are written as data in axes anyone can read (X = his left, Y = his back, Z = up). The right side is mirrored from the left, grounded states run through leg IK so the feet stay planted, then everything is baked to plain bone curves for Unreal. This is the docs' "gameplay quality" pass: clear key poses and correct timing, not polished animation yet.

Idle animation
Idle · 80 f, loop
Run animation
Run · 24 f, ninja arms
Double jump animation
DoubleJump · wings open, flip
Forward tilt animation
FTilt · 9 / 5 / 21
Neutral air animation
NAir · 2-hit cape spin
Jab 3 spray animation
Jab3 · spray can loop
Up strong animation including charge
UStrong · charge + 4-hit firework
Down special bat animation
DSpecial · the bat, 38 f wind-up

Covered: all the R2 movement states from the docs (ground, air, shield, dodges, hitstun, knockdown, ledge, getups, grabbed, items), the 4 bomb-strong variants, grabs, pummels and 4 throws. Mollo never had a grab in R1, so the throws are new designs.

Attacks

Frame data comes straight from the Rivals Academy YAML (patch 2.1.5.6): every animation lasts exactly the R1 frame count. The strike pose lands on the first active frame. Each hitbox sits on a bone with a radius in cm, then gets checked in a render from both sides.

Hitbox check renders, first half: BAir to Jab1, red spheres on the active frame
Hitbox check, left and right views per move (first half).
Hitbox check renders, second half: Jab2 to UTilt
Second half. Throws show Grab_M releasing the opponent.
MoveFrames (R1)DamageAngleLanding lagWhat it is in 3D
Ground
Jab 1 · 2 · 35/2/12 · 2/3/16 · 8/loop/73 · 4 · 2×n40 · 65 · 30Left jab, right cross, flaming spray can on loop
Dash attack6/4/27440Shoulder slide; scoops up a grounded bomb on f9
F-tilt9/5/21940Straight riot-boot kick
U-tilt6/2·3/15880Headbutt upward, fuse antennae whip
D-tilt4/8/18565Low sweep
Air
N-air6/4·6/112 + 5556Spin with the cape wings open
F-air5/charge/4/4/249–1431012Chargeable diving dropkick
B-air6/6/2381309Double back kick
U-air8/5·5/213 + 6100 · 906Two upward swipes, antennae on the second
D-air8/9/146 · 5270 · 706Stomp: soles spike, shins pop up
Strongs (+60 f charge)
F-strong12/3·3·3/303·3·620 · 45Left-right flurry, two-hand shove
U-strong13/4·3·3·4/262·2·2·5120 → 90Firework fountain overhead, 4 crackles
D-strong12/3/407 · 590 · 75Double fist slam, center + sides
Bomb tosses13/3/6 · 9/3/12 · 9/1/55 · 5 · 040 · 90When a bomb is held, strongs throw it charged
Specials
N-special4/12/2bombsPulls a bomb from the belt: ↑ cherry, ← firecracker, → flashbang, ↓ finisher
F-special21/aim/14/9480Flare gun: aim a cursor, flare detonates bombs
U-special14/4/30/134 + 2×590Rides a firework rocket, then pratfall
D-special38/3/3/226 · 11 · 1650 · 40Baseball bat; sweetspot at the tip

The full entry sheet with every hitbox, offset, radius, BKB/KBS and hitpause is in export/ATTAQUES.md, and as data in export/attaques_mollo.json. Knockback values are R1's as-is; they will need balancing in R2.

What went wrong, and how it was fixed

The mesh tore at every jointfixed

TRELLIS delivers a mesh split along its UV seams, so each island was skinned on its own. Welding the vertices before skinning (16k → 11.5k vertices) closed every tear.

Cape fused to the legsfixed

In a kick, the cape stretched into a sail between leg and floor. A distance threshold could not separate them because Mollo's legs are thick fur. Now a ray goes from each vertex toward the leg bone: if it crosses another surface first, the vertex is cape. 80 bridging triangles below the shorts are cut.

Leg bones outside the legsfixed

The legs sit at ±24 cm, not ±13 cm as I first estimated from the concept. The leg axis is now measured from the cream fur color in the texture.

Knees pointing sideways under IKfixed

A brute-force pole angle search gave 165° on one side and 0° on the other. Replaced by the analytic signed angle (−83° / −96°).

Rotation signsfixed

Upward bones (spine, head, antennae) and downward bones (legs, cape) lean in opposite directions for the same axis. The first crouch looked like sitting on a chair, and the run cape stuck out in front. The convention is now written at the top of the pose file.

Strikes landing latefixed

The hitbox check showed Jab 1 and the grabs hitting at belly height: the strike pose was keyed at the end of the active window. Strike poses now land on the first active frame.

Right arm convention, Grab_M, prop palettefixed

Three specials used the left arm's signs on the right arm. Grab_M was never animated, so a thrown opponent would not have moved. The props texture was lost because a generated image has to be packed to survive saving.

Bat held along the forearmopen

The bat points at the floor during the swing instead of across it. It needs a rotation on PropBat_R in the bat poses.

Ledge origin is a guessopen

The docs never say where the character's origin sits when hanging. I put it at the ledge corner with the body below. To verify in the editor against a base character.

Hitbox offsets are in Blender bone spaceopen

Unreal can swap bone axes on import, so offsets may need eyeballing per hitbox. The sheet gives the world position at the active frame for that.

Phase 2: in the Mod Kit

  1. Install the Rivals of Aether II Mod Kit near a drive root (G:\R2ModKit), launch with Steam running, let shaders compile (up to an hour).
  2. Create a new 3D Character Mod named Mollo, open the content folder.
  3. Reimport SK_Mol_Default.fbx over the template skeletal mesh, then AN_Mol_Default.fbx; import the 4 textures with their suffixes, make MI_ instances of MAT_Cha_Standard.
  4. Rebuild the HB_ physics asset with capsules only, assign animation states in the character data.
  5. Fill the ATT_ assets from the entry sheet. If the editor's Python plugin is available, I can script this from the JSON.
  6. Create the articles: 4 bomb types (holdable), the flare, then write the Lua for fuse timers, bomb selection, flare aim, spray can and aerial charge, using the in-editor Lua docs.

What I need from you

Install the Mod Kit when you can, and tell me the path. Once it's there I can read the Lua API docs and the engine's class names from disk, which I can't get from the website.

The Steam Workshop subscription to Giik's Mollo (1871989159) hasn't downloaded yet. Its GML is the exact source for the fuse and bomb logic in phase 2.

This build stays private: Mollo belongs to Aether Studios and Giik.

Files

export/SK_Mol_Default.fbxmesh + skeleton, R2 export settings
export/AN_Mol_Default.fbxall 125 actions, baked
export/textures/T_Mol_DefaultBody_BC / _N / _ORMS, T_Mol_DefaultProps_BC
export/ATTAQUES.mdentry sheet for the ATT_ assets
export/attaques_mollo.jsonsame data, machine-readable
blender/mollo_anim.blendsource scene with every action
work/*.pythe pipeline; poses live in anims_mollo, anims_mouvement, attaques_mollo

Sources: Rivals 2 Workshop docs · Rivals Academy, Mollo · Mollo on the R1 Steam Workshop