notevil
3aec681436
Phase 2.2 : fork mesh/transformer/ (vanilla PlayerModel → SkinnedMesh)
...
COPY verbatim EF + rewrite imports :
- rig/mesh/transformer/VanillaModelTransformer.java (~700 LOC)
Transformer principal : bake PlayerModel vanilla / HumanoidModel → SkinnedMesh biped
EF. Utilise les PartTransformer (HEAD/ARM/LEG/CHEST) avec AABB cover area.
- rig/mesh/transformer/HumanoidModelTransformer.java (~70 LOC)
Base abstract commune aux transformers humanoïdes.
- rig/mesh/transformer/HumanoidModelBaker.java (~115 LOC)
Entry point bake() + export JSON + registry MODEL_TRANSFORMERS.
L'ancienne stub de VanillaMeshPartDefinition (record 55 LOC) est remplacée par
la vraie record dans le fork — API identique (of(partName), of(partName, path,
invertedParentTransform, root)).
Ajouté mixin accessor :
- rig/mixin/client/MixinAgeableListModel.java (@Invoker pour headParts/bodyParts
sur AgeableListModel).
- src/main/resources/tiedup-rig.mixins.json (nouveau mixin config, package
com.tiedup.remake.rig.mixin).
- build.gradle : args '-mixin.config=tiedup-rig.mixins.json' dans client+server
run configs.
- META-INF/mods.toml : [[mixins]] config="tiedup-rig.mixins.json"
Logger EpicFightMod.LOGGER → TiedUpRigConstants.LOGGER dans HumanoidModelBaker.
Packages correctement rewrités par scripts/rig-rewrite-imports.sh. Compile
BUILD SUCCESSFUL maintenu.
2026-04-22 20:59:32 +02:00
notevil
4a587b7478
Phase 2.1 : D-01 fix — LivingEntityPatch animator field + eager init
...
Close le trap CRITIQUE tracé dans docs/plans/rig/PHASE0_DEGRADATIONS.md D-01
(getAnimator()=null → NPE garanti sur premier appel à MoveCoordFunctions:202,263).
Pattern EF-style conforme LivingEntityPatch EF:146-156 :
- protected Animator animator field
- Override onConstructed(T) : super + factory apply + initAnimator + postInit
- initAnimator(Animator) hook no-op pour subclasses (bind LivingMotion→Anim)
- getAnimator() retourne le field (non-null après onConstructed)
- getClientAnimator() : cast conditionnel instanceof ClientAnimator
Factory TiedUpRigConstants.ANIMATOR_PROVIDER (déjà en place, pattern lazy
method-ref client/server split) fournit la bonne instance selon Dist.
Compile + tests GREEN maintenus (11 tests bridge).
2026-04-22 20:31:00 +02:00
notevil
4d90a87b48
Phase 1 polish : SMELL-001, DOC-001, TEST-001 fixes
...
Résout les 3 items remontés par la review globale pré-Phase 2 :
SMELL-001 — TiedUpRigConstants.ANIMATOR_PROVIDER
Le ternaire retournait ServerAnimator::getAnimator dans les 2 branches
alors que ClientAnimator est maintenant forké (présent dans rig/anim/client/).
Switch vers ClientAnimator::getAnimator côté client (pattern lazy method-ref
préserve la non-chargement sur serveur dédié).
DOC-001 — AnimationManager:211
Commentaire ambigu "SkillManager.reloadAllSkillsAnimations() strippé"
clarifié : préciser que l'appel upstream EF venait de yesman.epicfight.skill.*
et que le combat system est hors scope TiedUp.
TEST-001 — GltfToSkinnedMeshTest coverage gaps
Tests précédents utilisaient [1,0,0,0] → drop trivial, renorm no-op.
Ajoute 3 tests :
- convertDropsLowestWeightAndRenormalizes : poids [0.5, 0.3, 0.15, 0.05]
force le drop du plus faible (0.05) + renorm des 3 restants.
- convertHandlesZeroWeightVertex : weights tous-zéro → fallback Root w=1.
- convertFallsBackToRootForUnknownJointName : joint GLB inconnu ("TentacleJoint42")
→ log WARN + fallback Root id=0 sans crash.
11 tests bridge GREEN (5 alias + 6 convert). Compile BUILD SUCCESSFUL.
2026-04-22 19:58:51 +02:00
notevil
94fcece05a
Phase 1.1-1.3 : bridge GLB → SkinnedMesh
...
Premier jalon Phase 1 : conversion d'un GltfData (format legacy 11-joints
PlayerAnimator) vers SkinnedMesh Epic Fight (biped ~20 joints).
Files :
- rig/bridge/GlbJointAliasTable.java : table mapping statique PlayerAnimator
→ biped EF (body/torso→Chest, leftUpperArm→Arm_L, leftLowerArm→Elbow_L, etc).
Fallback Root pour inconnus. Bypass si nom déjà biped (Root/Torso/Chest/Head
ou suffixe _R/_L).
- rig/bridge/GltfToSkinnedMesh.java : convert(GltfData, AssetAccessor<Armature>)
→ SkinnedMesh. Pré-calcule jointIdMap, boucle vertices (pos/normal/uv + drop 4th
joint à plus faible poids + renormalise 3 restants), groupe indices par
primitive (material) en VanillaMeshPartDefinition.
Note : animations GLB ignorées (scope Phase 4 JSON EF authored).
Compile BUILD SUCCESSFUL maintenu.
2026-04-22 14:28:37 +02:00
notevil
4a615368df
Phase 0 audit findings : fixes D-07 + D-08 post-verification
...
Cross-check de l'audit Phase 0 contre les sources EF (4 agents) a remonté :
D-08 RÉFUTÉ partiellement :
- EF LivingEntityPatch.getTarget() = getLastHurtMob() — identique à notre stub.
- MAIS MobPatch.getTarget() override avec Mob.getTarget() manquait chez nous.
- Fix : override ajouté, ref commentée à EF MobPatch.java:171-174.
- Sans ça, MoveCoordFunctions.MOB_ATTACK_TARGET_LOOK aurait la mauvaise
sémantique (dernier mob qui m'a frappé vs cible AI courante) → NPC ne
tourne pas vers sa cible pendant attack anim.
D-07 VALIDÉ :
- correctRootJoint zero-out X/Z de la Root en espace monde pour éviter
sliding visuel pendant LinkAnimation vers ActionAnimation.
- Safe Phase 1 (idle/walk = StaticAnimation, pas ActionAnimation).
- Critical Phase 2+ dès qu'une vraie ActionAnimation bondage est jouée.
- Fix : dev assertion LOGGER.warn en IS_DEV_ENV pointant vers
PHASE0_DEGRADATIONS.md D-07. Empêche découverte tardive.
Autres findings post-vérification (traçés en doc gitignorée) :
D-01 getAnimator()=null : fix Phase 2 (pas Phase 1) — field protected EF-style
D-02 sync() stripped : FAUX-POSITIF partiel — BEGINNING_LOCATION non affecté
(IndependentVariableKey non-synced), seul DESTINATION en MP dédié
D-03 InstantiateInvoker throws : swallowed par try/catch, silent no-op
D-04 Patch suppression : doc EXTRACTION.md §3.12/§10 corrigée (Option A)
D-05 reloadAllSkillsAnimations : était déjà dans SkillManager (commentaire OK)
D-06 playAnimationAt : ARCHITECTURE.md §5.5.1 pseudocode (signature fantôme)
→ notes ajoutées pointant vers D-06
D-09 AnimationBegin/EndEvent : listeners EF uniquement skill system interne,
ON_BEGIN/END_EVENTS data-driven continuent de fonctionner
D-10 AT 127 lignes : ~50% utile (GUI TiedUp existant), ne pas fix maintenant
IK stack (S-05 pas dans les docs) : section R12 ajoutée à ARCHITECTURE.md §11.
Compile BUILD SUCCESSFUL maintenu (0 errors).
2026-04-22 03:39:44 +02:00
notevil
1cef57a472
Phase 0 : compile SUCCESS (464 -> 0 errors)
...
Core data model du rig EF extractible compile désormais cleanly.
Changements clé :
1. AccessTransformer wiring (-80 errors)
- Copie EF accesstransformer.cfg dans resources/META-INF/
- Uncomment accessTransformer = file(...) dans build.gradle
- Débloque l'héritage des package-private RenderType.CompositeState +
RenderType.CompositeRenderType + RenderType.OutlineProperty nécessaires
à TiedUpRenderTypes.
2. Stubs compat rendering Phase 2
- PatchedEntityRenderer<E,T,M,R> : type param 4 pour PrepareModelEvent
- RenderItemBase : type marker pour PatchedRenderersEvent.RegisterItemRenderer
- LayerUtil + LayerProvider : interface fonctionnelle 5-params pour RegisterResourceLayersEvent
- PlayerPatch<T extends Player> : extends LivingEntityPatch
- ToolHolderArmature interface : leftTool/rightTool/backToolJoint()
3. Stubs compat combat Phase 2+
- AttackResult + ResultType enum : utilisé comme type pour StateFactor ATTACK_RESULT
- TrailInfo record : stubbé avec playable=false → particle trail jamais émis
- AttackAnimation.Phase.hand = InteractionHand.MAIN_HAND
- AttackAnimation.JointColliderPair : stub pour instanceof check
- AttackAnimation.getPhaseByTime(float) : retourne Phase neutre
- ActionAnimation.correctRootJoint() : no-op Phase 0
- ActionAnimation.BEGINNING_LOCATION + INITIAL_LOOK_VEC_DOT re-exposés comme AnimationVariables
4. Physics types alignés
- InverseKinematicsProvider extends SimulationProvider<...>
- InverseKinematicsSimulator implements PhysicsSimulator<Joint, ...>
- InverseKinematicsObject implements SimulationObject<...>
- InverseKinematicsBuilder extends SimulationObject.SimulationObjectBuilder
- ik.bake() signature : (Object, Object, boolean, boolean) conforme StaticAnimation usage
5. Mesh/compute stubs
- ComputeShaderSetup.TOTAL_POSES + TOTAL_NORMALS : OpenMatrix4f[MAX_JOINTS] pool
- ComputeShaderSetup.MeshPartBuffer inner class + destroyBuffers()
- ComputeShaderProvider.supportComputeShader() = false
- VanillaModelTransformer.VanillaMeshPartDefinition record minimal
- HumanoidMesh.getHumanoidArmorModel() : return null (armor rendering Phase 2)
6. Fixes typage / API
- TiedUpRenderTypes.prefix("x").toString() x15 : ResourceLocation -> String
- AnimationManager Logger : log4j -> slf4j
- TiedUpRigConstants.logAndStacktraceIfDevSide 4-arg overload + Throwable instead of RuntimeException
- LivingEntityPatch.getReach(InteractionHand) overload
- StaticAnimation(boolean, String, AssetAccessor) 3-arg overload
Result : compileJava -> BUILD SUCCESSFUL
Prochain jalon : runClient + verify rig se charge sans crash.
2026-04-22 03:16:14 +02:00
notevil
bdbd429bdf
WIP: fork patch/collider/codec stubs, 464->135 compile errors
...
Phase 0 compile progress (70% reduction). Core data model compile :
Refs yesman.epicfight strippées (hors 4 javadocs) :
- AnimationProperty : combat properties EXTRA_DAMAGE, STUN_TYPE, PARTICLE
- ClientAnimator : playAnimationAt(..., AnimatorControlPacket.Layer, Priority)
- ClothSimulator : OBBCollider -> fork geometry-only dans rig/collider/
- InstantiateInvoker : Collider, ColliderPreset, Armatures, DatapackEditScreen
- MoveCoordFunctions : GrapplingAttackAnimation
- SimulationTypes : InverseKinematicsSimulator (path rewrite)
Stubs patch/ :
- EntityPatch<T> abstract — getOriginal, isLogicalClient, getMatrix, getAngleTo
- LivingEntityPatch<T> abstract — getAnimator, getArmature, getTarget, getYRot*
- MobPatch<T extends Mob> — instanceof check only
- item/CapabilityItem — type marker
Forks utilitaires :
- rig/collider/OBBCollider — geometry only (strip Entity collision, drawInternal)
- anim/types/StateSpectrum — identique EF, imports rewrités
- util/PacketBufferCodec — StreamCodec backport
- util/TimePairList — identique EF
- util/HitEntityList — shell pour Priority enum uniquement
- util/ExtendableEnum + ExtendableEnumManager — register/assign enum
Fix package declarations :
- armature/Joint.java + JointTransform.java : package rig.anim -> rig.armature
- Imports JointTransform ajoutés dans anim/{Pose,Keyframe,TransformSheet}
Residu 135 errors = cluster rendering (Phase 2) :
- render/TiedUpRenderTypes (17) : CompositeState package-private MC
- event/PatchedRenderersEvent (11) : missing PatchedEntityRenderer
- mesh/SkinnedMesh (13) : VanillaMeshPartDefinition, compute shader fields
- asset/JsonAssetLoader (6), anim/LivingMotion (5)
2026-04-22 02:45:18 +02:00
notevil
f0d8408384
WIP: stub ClientConfig + gameasset registries, strip Meshes mobs
...
Nouveaux stubs core :
- TiedUpAnimationConfig — remplace yesman.epicfight.config.ClientConfig.
Flags animation/rendu, no-op pour combat.
- TiedUpRigRegistry — remplace gameasset.Animations.EMPTY_ANIMATION +
gameasset.Armatures.ArmatureContructor.
Fichiers forkés additionnels (dépendances transitives découvertes) :
- anim/types/DirectStaticAnimation.java (EMPTY_ANIMATION est un DirectStaticAnimation)
- event/InitAnimatorEvent.java (postInit() forge event)
- event/EntityPatchRegistryEvent.java (mod bus event pour register patches)
Strip combat :
- Meshes.java : retiré les 11 mob meshes (CreeperMesh, DragonMesh, VexMesh,
WitherMesh, etc.) + armor + particle + cape. Garde BIPED
et ALEX / BIPED_OLD_TEX / BIPED_OUTLAYER (variants joueur).
- Animator.playDeathAnimation : Animations.BIPED_DEATH (ARR asset) →
EMPTY_ANIMATION fallback.
- AnimationManager.apply : Armatures.reload() stripped (no-op, à rebrancher
Phase 2 sur TiedUpArmatures).
- ClientPlayerPatch.entityPairing : body entier strippé (combat skills
Technician/Adrenaline/Emergency Escape).
sed global : ClientConfig.* → TiedUpAnimationConfig.*
sed global : Animations.EMPTY_ANIMATION → TiedUpRigRegistry.EMPTY_ANIMATION
sed global : Armatures.ArmatureContructor → TiedUpRigRegistry.ArmatureContructor
Résidus yesman.epicfight : 86 → 74 (-12)
Reste : physics (16) + network (13) + world combat (10) + particle (3) +
collider (2) + client misc (2) + skill (2). Tous combat-entangled,
demandent strip méthode par méthode.
2026-04-22 00:53:42 +02:00
notevil
324e7fb984
WIP: create TiedUpRigConstants, replace EpicFightMod/SharedConstants refs
...
- Nouveau TiedUpRigConstants.java : centralise MODID/LOGGER/identifier/prefix,
constantes runtime (IS_DEV_ENV, A_TICK, GENERAL_ANIMATION_TRANSITION_TIME,
MAX_JOINTS), factory ANIMATOR_PROVIDER (client/server split) + helpers
stacktraceIfDevSide/logAndStacktraceIfDevSide.
- sed global : EpicFightMod.* → TiedUpRigConstants.*
- sed global : EpicFightSharedConstants.* → TiedUpRigConstants.*
- sed global : EpicFightRenderTypes → TiedUpRenderTypes (class rename upstream)
- Fix package declarations : Armature.java + TiedUpRenderTypes.java
Résidus yesman.epicfight : 115 → 86 (-29)
Reste : gameasset/physics/network/world/config/skill (combat deps à strip) +
combat mode refs dans patch/LocalPlayerPatch + ClientPlayerPatch (Phase 2).
2026-04-22 00:33:39 +02:00
notevil
cbf61906e0
WIP: initial epic fight core extraction (Phase 0)
...
83 files forkés d'Epic Fight (~18k LOC). Base non-compilable en l'état.
Contenu extrait :
- math/ — OpenMatrix4f, Vec3f/4f/2f, QuaternionUtils, MathUtils, ...
- armature/ — Armature, Joint, JointTransform, HumanoidArmature
- anim/ — Animator, ServerAnimator, ClientAnimator, LivingMotion, ...
- anim/types/ — StaticAnimation, DynamicAnimation, MovementAnimation, LinkAnimation,
ConcurrentLinkAnimation, LayerOffAnimation, EntityState
- anim/client/ — Layer, ClientAnimator, JointMask
- mesh/ — SkinnedMesh, SingleGroupVertexBuilder, Mesh, HumanoidMesh, ...
- cloth/ — AbstractSimulator, ClothSimulator (dépendance transitive de StaticMesh)
- asset/ — JsonAssetLoader, AssetAccessor
- patch/ — EntityPatch, LivingEntityPatch, PlayerPatch, ClientPlayerPatch
- util/ — ParseUtil, TypeFlexibleHashMap
- exception/ — AssetLoadingException
- event/ — PatchedRenderersEvent, PrepareModelEvent, RegisterResourceLayersEvent
- render/ — TiedUpRenderTypes
Headers GPLv3 + attribution injectés sur tous les .java.
Package declarations fixées sur Armature.java et TiedUpRenderTypes.java.
115 imports résiduels à résoudre manuellement :
- yesman.epicfight.main (EpicFightMod, EpicFightSharedConstants) — 30
- yesman.epicfight.gameasset (Animations, Armatures, EpicFightSounds) — 12
- yesman.epicfight.api.physics + physics.ik (combat physics) — 16
- yesman.epicfight.network.* (combat packets) — 13
- yesman.epicfight.world.* (combat entity logic) — 10
- yesman.epicfight.config.ClientConfig — 3
- yesman.epicfight.skill, .client.gui, .particle, .collider — divers combat/UI
Stratégie fix (2-3 sem manuel) : strip usage combat, stubs pour refs
core (EpicFightMod → TiedUpMod, SharedConstants → TiedUpRigConstants,
ClientConfig → TiedUpAnimationConfig).
2026-04-22 00:26:29 +02:00