This commit is contained in:
Aria 2025-03-21 22:23:30 +11:00
commit 9c94d113d3
Signed by untrusted user who does not match committer: aria
GPG key ID: 19AB7AA462B8AB3B
10260 changed files with 1237388 additions and 0 deletions

View file

@ -0,0 +1,9 @@
{
"name" : "body",
"category" : "moondancer",
"type" : "body",
"frames" : {
"body" : "body.png"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -0,0 +1,9 @@
{
"name" : "head",
"category" : "moondancer",
"type" : "head",
"frames" : {
"head" : "glow.png"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -0,0 +1,67 @@
{
"animatedParts" : {
"parts" : {
"body" : {
"zLevel" : 0,
"properties" : {
"rotationGroup" : "body",
"image" : "<partImage>"
}
},
"head" : {
"zLevel" : 1,
"properties" : {
"rotationGroup" : "body",
"image" : "<partImage>",
"fullbright" : true
}
}
}
},
"rotationGroups" : {
"body" : {
"rotationCenter" : [0, 0],
"angularVelocity" : 5
}
},
"particleEmitters" : {
"trail" : {
"active" : true,
"emissionRate" : 10.0,
"particles" : [
{
"particle" : {
"type" : "animated",
"animation" : "/animations/fizz2/fizz2.animation",
"size" : 0.5,
"angularVelocity" : 20,
"fade" : 1,
"destructionTime" : 0,
"position" : [0, 0],
"initialVelocity" : [0, 0],
"timeToLive" : 4,
"layer" : "middle",
"variance" : {
"initialVelocity" : [1, 1]
}
}
}
]
}
},
"effects" : {
"blink" : {
"type" : "flash",
"time" : 0,
"directives" : "fade=ffffff;0.5"
}
},
"sounds" : {
"turnHostile" : [ ],
"deathPuff" : [ "/sfx/npc/enemydeathpuff.ogg" ]
}
}

View file

@ -0,0 +1,10 @@
{
"frameGrid" : {
"size" : [3, 3],
"dimensions" : [1, 1],
"names" : [
[ "idle" ]
]
}
}

View file

@ -0,0 +1,115 @@
{
"type" : "moondancer",
"categories" : [ "moondancer" ],
"parts" : [ "body", "head" ],
"animation" : "moondancer.animation",
"dropPools" : [
{
"default" : "empty",
"bugnet" : "butterbee"
}
],
"baseParameters" : {
"scripts" : [
"/monsters/bugs/bug.lua",
"/scripts/util.lua",
"/scripts/vec2.lua"
],
"buzzing" : {
"riseSpeed" : 2,
"minGroundDistance" : 2,
"fallSpeed" : 3,
"maxGroundDistance" : 5,
"changeDirSpeed" : 2,
"wanderDistance" : 5,
"rotationSpeed" : 2,
"rotationChangeInterval" : 1
},
"metaBoundBox" : [-0.5, -0.5, 0.5, 0.5],
"scale" : 1.0,
"movementSettings" : {
"collisionPoly" : [ [-0.5, -0.5], [0.5, -0.5], [0.5, 0.5], [-0.5, 0.5] ],
"mass" : 1,
"walkSpeed" : 10,
"runSpeed" : 10,
"jumpSpeed" : 5,
"flySpeed" : 3,
"airFriction" : 0,
"airForce" : 100.0,
"gravityEnabled" : false
},
"bodyMaterialKind" : "organic",
"knockoutTime" : 0.1,
"knockoutEffect" : "",
"damageTeamType" : "passive",
"statusSettings" : {
"statusProperties" : {
"targetMaterialKind" : "organic"
},
"appliesEnvironmentStatusEffects" : false,
"appliesWeatherStatusEffects" : false,
"minimumLiquidStatusEffectPercentage" : 0.1,
"primaryScriptSources" : [
"/stats/monster_primary.lua"
],
"primaryScriptDelta" : 5,
"stats" : {
"knockbackStunTime" : {
"baseValue" : 0.25
},
"knockbackThreshold" : {
"baseValue" : 9
},
"maxHealth" : {
"baseValue" : 1
},
"protection" : {
"baseValue" : 0.0
},
"healthRegen" : {
"baseValue" : 0.0
},
"wetImmunity" : {
"baseValue" : 1.0
},
"powerMultiplier" : {
"baseValue" : 1.0
}
},
"resources" : {
"stunned" : {
"deltaValue" : -1.0,
"initialValue" : 0.0
},
"health" : {
"maxStat" : "maxHealth",
"deltaStat" : "healthRegen",
"defaultPercentage" : 100
}
}
},
"mouthOffset" : [0, 0],
"feetOffset" : [0, -8],
"capturable" : false,
"relocatable" : true
}
}

View file

@ -0,0 +1,212 @@
{
"type" : "orbitroid",
"shortdescription" : "Scandroid",
"description" : "The Scandroid is on an endless search. No one knows what for.",
"categories" : [ "scandroid" ],
"parts" : [ "body" ],
"animation" : "scandroid.animation",
"dropPools" : [],
"baseParameters" : {
"scripts" : [
"/monsters/monster.lua"
],
"behavior" : "monster",
"seeThroughLiquid" : false,
"behaviorConfig" : {
"damageOnTouch" : true,
"targetQueryRange" : 50,
"targetOnDamage" : true,
"keepTargetInSight" : true,
"keepTargetInRange" : 100,
"targetOutOfSightTime" : 10.0,
"hurtWaitForGround" : false,
"foundTargetActions" : [
{
"name" : "action-animate",
"parameters" : {
"stateType" : "body",
"state" : "aggro",
"animationTime" : 0.6
}
}
],
"fleeActions" : [ ],
"hostileActions" : [ ],
"periodicActions" : [ ],
"approachActions" : [
{
"name" : "approach-orbit",
"parameters" : {
"approachSpeed" : 4
}
}
],
"followActions" : [
{
"name" : "approach-teleport",
"parameters" : {
}
},
{
"name" : "approach-orbit"
}
],
"wanderActions" : [],
"concurrentActions" : [
{
"name" : "action-globaltag",
"parameters" : {
"tagName" : "aggro",
"tag" : ""
}
}
],
"concurrentHostileActions" : [
{
"name" : "action-globaltag",
"parameters" : {
"tagName" : "aggro",
"tag" : "aggro"
}
}
]
},
"touchDamage" : {
"poly" : [ [0.625, 0.9375], [1.125, 0.4375], [1.125, -0.4375], [0.625, -0.9375], [-0.625, -0.9375], [-1.125, -0.4375], [-1.125, 0.4375], [-0.625, 0.9375] ],
"damage" : 9,
"teamType" : "enemy",
"damageSourceKind" : "lash",
"knockback" : 20,
"statusEffects" : [ ]
},
"metaBoundBox" : [-4, -4, 4, 4],
"scale" : 1.0,
"movementSettings" : {
"collisionPoly" : [ [0.625, 0.9375], [1.125, 0.4375], [1.125, -0.4375], [0.625, -0.9375], [-0.625, -0.9375], [-1.125, -0.4375], [-1.125, 0.4375], [-0.625, 0.9375] ],
"mass" : 2.0,
"walkSpeed" : 4,
"runSpeed" : 12,
"gravityEnabled" : false,
"bounceFactor" : 0.0,
"groundFriction" : 10,
"airFriction" : 0,
"airForce" : 32,
"flySpeed" : 15
},
"bodyMaterialKind" : "robotic",
"knockoutTime" : 0.3,
"knockoutAnimationStates" : {
"damage" : "stunned"
},
"deathParticles" : "deathPoof",
"knockoutEffect" : "",
"statusSettings" : {
"statusProperties" : {
"targetMaterialKind" : "robotic"
},
"appliesEnvironmentStatusEffects" : false,
"appliesWeatherStatusEffects" : true,
"minimumLiquidStatusEffectPercentage" : 0.1,
"primaryScriptSources" : [
"/stats/monster_primary.lua"
],
"primaryScriptDelta" : 5,
"stats" : {
"grit" : {
"baseValue" : 0.25
},
"knockbackStunTime" : {
"baseValue" : 0.3
},
"knockbackThreshold" : {
"baseValue" : 9
},
"maxHealth" : {
"baseValue" : 30
},
"protection" : {
"baseValue" : 0.0
},
"healthRegen" : {
"baseValue" : 0.0
},
"powerMultiplier" : {
"baseValue" : 1.0
},
"physicalResistance" : {
"baseValue" : 0.0
},
"fireResistance" : {
"baseValue" : 0.0
},
"fireStatusImmunity" : {
"baseValue" : 0.0
},
"iceResistance" : {
"baseValue" : 0.0
},
"iceStatusImmunity" : {
"baseValue" : 0.0
},
"electricResistance" : {
"baseValue" : -0.5
},
"electricStatusImmunity" : {
"baseValue" : 0.0
},
"poisonResistance" : {
"baseValue" : 0.5
},
"poisonStatusImmunity" : {
"baseValue" : 1.0
}
},
"resources" : {
"stunned" : {
"deltaValue" : -1.0,
"initialValue" : 0.0
},
"health" : {
"maxStat" : "maxHealth",
"deltaStat" : "healthRegen",
"defaultPercentage" : 100
}
}
},
"mouthOffset" : [0, 0],
"feetOffset" : [0, -8],
"capturable" : false
}
}

View file

@ -0,0 +1,247 @@
{
"type" : "swarpdroid",
"shortdescription" : "Scandroid",
"description" : "The Scandroid is on an endless search. No one knows what for.",
"categories" : [ "scandroid" ],
"parts" : [ "body" ],
"animation" : "scandroid.animation",
"dropPools" : [],
"baseParameters" : {
"scripts" : [
"/monsters/monster.lua"
],
"behavior" : "monster",
"seeThroughLiquid" : false,
"behaviorConfig" : {
"damageOnTouch" : true,
"targetQueryRange" : 50,
"targetOnDamage" : true,
"keepTargetInSight" : true,
"keepTargetInRange" : 100,
"targetOutOfSightTime" : 10.0,
"hurtWaitForGround" : false,
"foundTargetActions" : [
{
"name" : "action-animate",
"parameters" : {
"stateType" : "body",
"state" : "aggro",
"animationTime" : 0.6
}
}
],
"fleeActions" : [ ],
"hostileActions" : [
{
"name" : "action-fire",
"cooldown" : 2,
"parameters" : {
"requireLineOfSight" : true,
"maximumRange" : 25,
"minimumRange" : 15,
"windupStopForce" : 50,
"windupState" : "fire",
"windupTime" : 0.4,
"projectileType" : "energycrystal",
"projectileParameters" : {
"speed" : 25
},
"fireOffset" : [0, 0],
"aimAtTarget" : true,
"onGround" : false,
"fireState" : "",
"fireSound" : "",
"winddownStopForce" : 50,
"winddownState" : "",
"winddownTime" : 0.5
}
},
{
"name" : "approach-swarm",
"cooldown" : 2,
"parameters" : {
"maxRange" : 20,
"minMoveDistance" : 15,
"idleTime" : 0.0
}
}
],
"periodicActions" : [ ],
"approachActions" : [
],
"followActions" : [
{
"name" : "approach-teleport",
"parameters" : {
}
},
{
"name" : "approach-swarm",
"parameters" : {
"maxRange" : 20,
"minMoveDistance" : 12,
"idleTime" : 0.0
}
}
],
"wanderActions" : [],
"concurrentActions" : [
{
"name" : "action-globaltag",
"parameters" : {
"tagName" : "aggro",
"tag" : ""
}
}
],
"concurrentHostileActions" : [
{
"name" : "action-globaltag",
"parameters" : {
"tagName" : "aggro",
"tag" : "aggro"
}
}
]
},
"touchDamage" : {
"poly" : [ [0.625, 0.9375], [1.125, 0.4375], [1.125, -0.4375], [0.625, -0.9375], [-0.625, -0.9375], [-1.125, -0.4375], [-1.125, 0.4375], [-0.625, 0.9375] ],
"damage" : 9,
"teamType" : "enemy",
"damageSourceKind" : "lash",
"knockback" : 20,
"statusEffects" : [ ]
},
"metaBoundBox" : [-4, -4, 4, 4],
"scale" : 1.0,
"movementSettings" : {
"collisionPoly" : [ [0.625, 0.9375], [1.125, 0.4375], [1.125, -0.4375], [0.625, -0.9375], [-0.625, -0.9375], [-1.125, -0.4375], [-1.125, 0.4375], [-0.625, 0.9375] ],
"mass" : 2.0,
"walkSpeed" : 4,
"runSpeed" : 12,
"gravityEnabled" : false,
"bounceFactor" : 0.0,
"groundFriction" : 10,
"airFriction" : 0,
"airForce" : 100,
"flySpeed" : 20
},
"bodyMaterialKind" : "robotic",
"knockoutTime" : 0.3,
"knockoutAnimationStates" : {
"damage" : "stunned"
},
"deathParticles" : "deathPoof",
"knockoutEffect" : "",
"statusSettings" : {
"statusProperties" : {
"targetMaterialKind" : "robotic"
},
"appliesEnvironmentStatusEffects" : false,
"appliesWeatherStatusEffects" : true,
"minimumLiquidStatusEffectPercentage" : 0.1,
"primaryScriptSources" : [
"/stats/monster_primary.lua"
],
"primaryScriptDelta" : 5,
"stats" : {
"grit" : {
"baseValue" : 0.25
},
"knockbackStunTime" : {
"baseValue" : 0.3
},
"knockbackThreshold" : {
"baseValue" : 9
},
"maxHealth" : {
"baseValue" : 30
},
"protection" : {
"baseValue" : 0.0
},
"healthRegen" : {
"baseValue" : 0.0
},
"powerMultiplier" : {
"baseValue" : 1.0
},
"physicalResistance" : {
"baseValue" : 0.0
},
"fireResistance" : {
"baseValue" : 0.0
},
"fireStatusImmunity" : {
"baseValue" : 0.0
},
"iceResistance" : {
"baseValue" : 0.0
},
"iceStatusImmunity" : {
"baseValue" : 0.0
},
"electricResistance" : {
"baseValue" : -0.5
},
"electricStatusImmunity" : {
"baseValue" : 0.0
},
"poisonResistance" : {
"baseValue" : 0.5
},
"poisonStatusImmunity" : {
"baseValue" : 1.0
}
},
"resources" : {
"stunned" : {
"deltaValue" : -1.0,
"initialValue" : 0.0
},
"health" : {
"maxStat" : "maxHealth",
"deltaStat" : "healthRegen",
"defaultPercentage" : 100
}
}
},
"mouthOffset" : [0, 0],
"feetOffset" : [0, -8],
"capturable" : false
}
}

View file

@ -0,0 +1,216 @@
{
"type" : "turndroid",
"shortdescription" : "Scandroid",
"description" : "The Scandroid is on an endless search. No one knows what for.",
"categories" : [ "scandroid" ],
"parts" : [ "body" ],
"animation" : "scandroid.animation",
"dropPools" : [],
"baseParameters" : {
"scripts" : [
"/monsters/monster.lua"
],
"behavior" : "monster",
"seeThroughLiquid" : false,
"behaviorConfig" : {
"damageOnTouch" : true,
"targetQueryRange" : 50,
"targetOnDamage" : true,
"keepTargetInSight" : true,
"keepTargetInRange" : 100,
"targetOutOfSightTime" : 10.0,
"hurtWaitForGround" : false,
"foundTargetActions" : [
{
"name" : "action-animate",
"parameters" : {
"stateType" : "body",
"state" : "aggro",
"animationTime" : 0.2
}
}
],
"fleeActions" : [ ],
"hostileActions" : [
],
"periodicActions" : [ ],
"approachActions" : [
{
"name" : "approach-turn",
"parameters" : {
"turnSpeed" : 0.8
}
}
],
"followActions" : [
{
"name" : "approach-teleport",
"parameters" : {
}
},
{
"name" : "approach-turn",
"parameters" : {
"turnSpeed" : 1.6
}
}
],
"wanderActions" : [],
"concurrentActions" : [
{
"name" : "action-globaltag",
"parameters" : {
"tagName" : "aggro",
"tag" : ""
}
}
],
"concurrentHostileActions" : [
{
"name" : "action-globaltag",
"parameters" : {
"tagName" : "aggro",
"tag" : "aggro"
}
}
]
},
"touchDamage" : {
"poly" : [ [0.625, 0.9375], [1.125, 0.4375], [1.125, -0.4375], [0.625, -0.9375], [-0.625, -0.9375], [-1.125, -0.4375], [-1.125, 0.4375], [-0.625, 0.9375] ],
"damage" : 9,
"teamType" : "enemy",
"damageSourceKind" : "lash",
"knockback" : 20,
"statusEffects" : [ ]
},
"metaBoundBox" : [-4, -4, 4, 4],
"scale" : 1.0,
"movementSettings" : {
"collisionPoly" : [ [0.625, 0.9375], [1.125, 0.4375], [1.125, -0.4375], [0.625, -0.9375], [-0.625, -0.9375], [-1.125, -0.4375], [-1.125, 0.4375], [-0.625, 0.9375] ],
"mass" : 2.0,
"walkSpeed" : 4,
"runSpeed" : 12,
"gravityEnabled" : false,
"bounceFactor" : 0.0,
"groundFriction" : 10,
"airFriction" : 0,
"airForce" : 100,
"flySpeed" : 8
},
"bodyMaterialKind" : "robotic",
"knockoutTime" : 0.3,
"knockoutAnimationStates" : {
"damage" : "stunned"
},
"deathParticles" : "deathPoof",
"knockoutEffect" : "",
"statusSettings" : {
"statusProperties" : {
"targetMaterialKind" : "robotic"
},
"appliesEnvironmentStatusEffects" : false,
"appliesWeatherStatusEffects" : true,
"minimumLiquidStatusEffectPercentage" : 0.1,
"primaryScriptSources" : [
"/stats/monster_primary.lua"
],
"primaryScriptDelta" : 5,
"stats" : {
"grit" : {
"baseValue" : 0.25
},
"knockbackStunTime" : {
"baseValue" : 0.3
},
"knockbackThreshold" : {
"baseValue" : 9
},
"maxHealth" : {
"baseValue" : 30
},
"protection" : {
"baseValue" : 0.0
},
"healthRegen" : {
"baseValue" : 0.0
},
"powerMultiplier" : {
"baseValue" : 1.0
},
"physicalResistance" : {
"baseValue" : 0.0
},
"fireResistance" : {
"baseValue" : 0.0
},
"fireStatusImmunity" : {
"baseValue" : 0.0
},
"iceResistance" : {
"baseValue" : 0.0
},
"iceStatusImmunity" : {
"baseValue" : 0.0
},
"electricResistance" : {
"baseValue" : -0.5
},
"electricStatusImmunity" : {
"baseValue" : 0.0
},
"poisonResistance" : {
"baseValue" : 0.5
},
"poisonStatusImmunity" : {
"baseValue" : 1.0
}
},
"resources" : {
"stunned" : {
"deltaValue" : -1.0,
"initialValue" : 0.0
},
"health" : {
"maxStat" : "maxHealth",
"deltaStat" : "healthRegen",
"defaultPercentage" : 100
}
}
},
"mouthOffset" : [0, 0],
"feetOffset" : [0, -8],
"capturable" : false
}
}

View file

@ -0,0 +1,95 @@
pathState = {
moveToTargetMinDistance = 3,
maxYDistanceFromSpawnPoint = 5,
defaultIndoorSearchRadius = 30
}
function pathState.enter()
local targetPosition,targetBeacon = pathState.findGoal()
local desiredDistance = config.getParameter("pathing.desiredDistance", 2)
if not targetPosition then
return nil
elseif world.magnitude(world.distance(targetPosition, mcontroller.position())) < desiredDistance then
return nil
end
return {
targetPosition = targetPosition,
targetBeacon = targetBeacon,
desiredDistance = desiredDistance,
pather = Pather:new({run = config.getParameter("pathing.run", true)})
}
end
function pathState.enteringState(stateData)
local position = mcontroller.position()aa
script.setUpdateDelta(1)
end
function pathState.update(dt, stateData)
local position = mcontroller.position()
-- Find goal position
if not stateData.targetPosition then
return true
end
local toTarget = world.distance(stateData.targetPosition, position)
local moved = pather.move(stateData.targetPosition, dt)
if moved == "running" then
mcontroller.controlFace(pather.deltaX)
setMovementState()
elseif moved == false then
-- Stay in pathing state even when stuck
setIdleState()
return false
elseif moved == true then
-- Reached the target
return true
end
if world.magnitude(toTarget) <= stateData.desiredDistance then
return true
end
end
function pathState.leavingState(stateData)
world.debugText("leavingPathState", mcontroller.position(), "red")
local position = mcontroller.position()
if stateData.targetBeacon ~= nil then
local distance = world.magnitude(world.distance(stateData.targetPosition, position))
if distance < stateData.desiredDistance then
world.callScriptedEntity(stateData.targetBeacon, "onInteraction")
end
end
end
function pathState.findGoal()
local nearObjects = world.entityQuery(mcontroller.position(), 100, {
includedTypes = { "object"},
withoutEntityId = entity.id(),
boundMode = "Position",
order = "nearest"
})
local targetPosition
for _,objectId in pairs(nearObjects) do
if world.entityName(objectId) == "apexstatue3" then
local targetPosition = world.entityPosition(objectId)
targetPosition[2] = targetPosition[2] - pathState.collisionBottom()
return targetPosition, objectId
end
end
end
function pathState.collisionBottom()
local lowest = 0
for _,point in pairs(mcontroller.collisionPoly()) do
if point[2] < lowest then
lowest = point[2]
end
end
return lowest
end

View file

@ -0,0 +1,183 @@
{
"type" : "pathdebugcat",
"categories" : [ "petcat" ],
"parts" : [ "body" ],
"animation" : "petcat.animation",
"dropPools" : [ "basicMonsterTreasure" ],
"baseParameters" : {
"scripts" : [
"/scripts/stateMachine.lua",
"/scripts/util.lua",
"/scripts/vec2.lua",
"/monsters/pets/groundPet.lua",
"/monsters/pets/cat/catBehavior.lua",
"/monsters/pathState.lua"
],
"skills" : [],
"pathing": {
"desiredDistance": 2,
"run" : true
},
"behavior" : "catBehavior",
"behaviorParams" : {
"food" : {},
"monsters" : {
}
},
"petResources" : {
"sleepy" : 10,
"hunger" : 10,
"playful" : 60,
"curiosity" : 60
},
"petResourceDeltas" : {
"sleepy" : 0.5,
"hunger" : 0.5,
"playful" : 1,
"curiosity" : 1
},
"actionCooldowns" : {
"inspect" : 20,
"play" : 2,
"pounce" : 5,
"eat" : 5,
"beg" : 20,
"follow" : 0
},
"territoryDistance" : 40.0,
"territorialTargetRadius" : 20.0,
"minimalTargetRadius" : 6.0,
"targetSearchTime" : 0.5,
"targetHoldTime" : 5,
"metaBoundBox" : [-1.625, -2.375, 1.75, 2.0],
"scale" : 1.0,
"querySurroundingsCooldown" : 1,
"wander" : {
"wanderTime" : [5, 10],
"changeDirectionTime" : [5, 10],
"changeDirectionWait" : [1, 3]
},
"follow" : {
"startDistance" : 15,
"stopDistance" : 10,
"runDistance" : 20,
"targetMoveDistance" : 5
},
"pounce" : {
"maxRange" : 10,
"minRange" : 5
},
"idle" : {
"idleTime" : [2, 4]
},
"movementSettings" : {
"collisionPoly" : [ [-0.75, -1], [0.75, -1], [0.75, 0.5], [-0.75, 0.5] ],
"mass" : 1.0,
"gravityMultiplier" : 1.5,
"walkSpeed" : 4,
"runSpeed" : 14,
"flySpeed" : 15,
"airForce" : 50.0
},
"bodyMaterialKind" : "organic",
"knockoutTime" : 0.3,
"knockoutEffect" : "blink",
"deathParticles" : "deathPoof",
"touchDamage" : {
"poly" : [ [-1.625, -2.375], [1.75, -2.375], [1.75, 2.0], [-1.625, 2.0] ],
"damage" : 15,
"teamType" : "enemy",
"damageSourceKind" : "lash",
"statusEffects" : [ ]
},
"dropPools" : [ "potreasure" ],
"statusSettings" : {
"statusProperties" : {
"targetMaterialKind" : "organic"
},
"appliesEnvironmentStatusEffects" : false,
"appliesWeatherStatusEffects" : false,
"minimumLiquidStatusEffectPercentage" : 0.1,
"primaryScriptSources" : [
"/stats/monster_primary.lua"
],
"primaryScriptDelta" : 5,
"stats" : {
"knockbackStunTime" : {
"baseValue" : 0.25
},
"knockbackThreshold" : {
"baseValue" : 10
},
"maxHealth" : {
"baseValue" : 72
},
"protection" : {
"baseValue" : 1.0
},
"healthRegen" : {
"baseValue" : 0.0
}
},
"resources" : {
"stunned" : {
"deltaValue" : -1.0,
"initialValue" : 0.0
},
"health" : {
"maxStat" : "maxHealth",
"deltaStat" : "healthRegen",
"defaultPercentage" : 100
},
"sleepy" : {
"maxValue" : 100,
"defaultPercentage" : 10
},
"hunger" : {
"maxValue" : 100,
"defaultPercentage" : 10
},
"playful" : {
"maxValue" : 100,
"defaultPercentage" : 10
},
"curiosity" : {
"maxValue" : 100,
"defaultPercentage" : 10
}
}
},
"mouthOffset" : [0, 0],
"feetOffset" : [0, -8]
}
}