So I've been working on adding more large Monsters into the game to act kind of like bosses... Until recently I have been quite successful, but my most recent abomin... Creation... Has been causing me grief for over a week. I am trying to create a Unique Monster that is a "largefish" and swims. I have never done this before, and can't get it to work. /debug shows the creatures hitbox, and it does move in the water, but it's sprite is "stuck" for lack of a better word on one frame. Starbound.log is showing an error which I will post below, but I can't figure out how to correct it. I'm hoping somebody here who has more experience modding can help me solve this issue, so I can finish this massive boss monster. This is the error in Starbound.log: Code: [21:31:35.265] [Info] UniverseServer: Warping player 1 to CelestialWorld:132132548:-720922248:-287858222:11=3721.84.1152 [21:31:41.114] [Error] Could not load image asset '/default', using placeholder default. (AssetException) No such asset '/default' [21:31:41.114] [Error] Could not load image asset '/default:flop.1', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:flop.1' [21:31:42.119] [Error] Could not load image asset '/default:flop.2', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:flop.2' [21:31:42.338] [Error] Could not load image asset '/default:swim.1', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:swim.1' [21:31:42.529] [Error] Could not load image asset '/default:swim.2', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:swim.2' [21:31:42.671] [Error] Could not load image asset '/default:swim.3', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:swim.3' [21:31:42.827] [Error] Could not load image asset '/default:swim.4', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:swim.4' [21:31:43.013] [Error] Could not load image asset '/default:swim.5', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:swim.5' [21:31:43.155] [Error] Could not load image asset '/default:swim.6', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:swim.6' [21:31:43.297] [Error] Could not load image asset '/default:swim.7', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:swim.7' [21:31:43.491] [Error] Could not load image asset '/default:swim.8', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:swim.8' [21:32:19.185] [Info] UniverseClient: Client disconnecting... This is the .frames file: Code: { "frameGrid" : { "size" : [2550, 1270], "dimensions" : [8, 3], "names" : [ [ "swim.1", "swim.2", "swim.3", "swim.4", "swim.5", "swim.6", "swim.7", "swim.8" ], [ "melee.1", "melee.2", "melee.3", "melee.4", null, null, null, null ], [ "ranged.1", null, null, null, null, null, "flop.1", "flop.2" ] ] }, "aliases" : { "idle" : "swim.1" } } I can post the .animation, .monstertype, and .monsterpart files if those would help, but I believe the issue is with the .frames file, although I may be wrong... The sprite sheet itself is unfinished, but I have been using a sprite sheet of identical size (20400x3810) to test the creature.
Nah. Problem is your image file. It's not being loaded, so the frames file has nothing to refer to. Reason it's not being loaded is it's not the right size. You have an 8x3 grid - the dimensions of the sheet have to be divisible by 8 and 3 respectively. Can't have 0.33 of a pixel.
thought it was divisible by 8 and 3... 20400/8 = 2550 3810/3 = 1270 "size" refers to frame size, the sheet is much larger...
No problem. And it is massive, takes up the whole screen on zoom 4x. It's the biggest thing I've made so far, but if I can't figure out the sprite issue I may end up abandoning it...
if you can post all the files, ill take a look at it. I think it has something to do with how you named something. It shouldn't be looking for an image called /default. Unless you named your fish /default.png , and i can't see why you would.
Just got reminded of something. I had an animation that were refusing to work. changed the key to start at 0 instead of 1 (so it'd be swim.0 to swim.7) and it worked. Not idea why though, and probably won't work for you.
Here are the rest of the files and file names... File Names: fin.monsterpart fin.png head.monsterpart leviathan.animation leviathan.frames leviathan.monstertype leviathan.png tail.monsterpart tail.png Files: fin.monsterpart Code: { "name" : "leviathan", "category" : "leviathan", "type" : "fin", "frames" : { "fin" : "fin.png" } } head.monsterpart Code: { "name" : "leviathan", "category" : "leviathan", "type" : "head", "frames" : { "head" : "leviathan.png" } } leviathan.animation Code: { "animatedParts" : { "stateTypes" : { "movement" : { "priority" : 0, "default" : "idle", "states" : { "idle" : { "frames" : 1 }, "flopping" : { "frames" : 2, "cycle" : 0.25, "mode" : "loop" }, "swimFast" : { "frames" : 8, "cycle" : 0.6, "mode" : "loop" }, "swimSlow" : { "frames" : 8, "cycle" : 0.9, "mode" : "loop" } } }, "attack" : { "priority" : 1, "default" : "idle", "states" : { "idle" : { "frames" : 1 }, "melee" : { "frames" : 4, "cycle" : 0.8, "mode" : "transition", "transition" : "idle" }, "shooting" : { "frames" : 1 } } }, "releaseParticles" : { "default" : "off", "states" : { "off" : { "frames" : 1, "properties" : { "particleEmittersOff" : [ "releaseParticles" ] } }, "on" : { "frames" : 1, "cycle" : 0.1, "mode" : "transition", "transition" : "off", "properties" : { "particleEmittersOn" : [ "releaseParticles" ] } } } } }, "parts" : { "backfin" : { "properties" : { "rotationGroup" : "all", "offset" : [-0.5, 0], "zLevel" : 0 }, "partStates" : { "movement" : { "idle" : { "properties" : { "image" : "<partImage>:idle?flipx" } }, "flopping" : { "properties" : { "image" : "<partImage>:flop.<frame>?flipx" } }, "swimFast" : { "properties" : { "image" : "<partImage>:swim.<frame>?flipx" } }, "swimSlow" : { "properties" : { "image" : "<partImage>:swim.<frame>?flipx" } } } } }, "tail" : { "properties" : { "rotationGroup" : "all", "offset" : [-0.5, 0], "zLevel" : 1 }, "partStates" : { "movement" : { "idle" : { "properties" : { "image" : "<partImage>:idle?flipx" } }, "flopping" : { "properties" : { "image" : "<partImage>:flop.<frame>?flipx" } }, "swimFast" : { "properties" : { "image" : "<partImage>:swim.<frame>?flipx" } }, "swimSlow" : { "properties" : { "image" : "<partImage>:swim.<frame>?flipx" } } } } }, "head" : { "properties" : { "rotationGroup" : "all", "offset" : [-0.5, 0], "zLevel" : 2 }, "partStates" : { "movement" : { "idle" : { "properties" : { "image" : "<partImage>:idle?flipx" } }, "flopping" : { "properties" : { "image" : "<partImage>:flop.<frame>?flipx" } }, "swimFast" : { "properties" : { "image" : "<partImage>:swim.<frame>?flipx" } }, "swimSlow" : { "properties" : { "image" : "<partImage>:swim.<frame>?flipx" } } }, "attack" : { "idle" : { "properties" : { "image" : "<partImage>:idle?flipx" } }, "melee" : { "properties" : { "image" : "<partImage>:melee.<frame>?flipx" } }, "shooting" : { "properties" : { "image" : "<partImage>:ranged.<frame>?flipx" } } } } }, "frontfin" : { "properties" : { "rotationGroup" : "all", "offset" : [-0.5, 0], "zLevel" : 3 }, "partStates" : { "movement" : { "idle" : { "properties" : { "image" : "<partImage>:idle?flipx" } }, "flopping" : { "properties" : { "image" : "<partImage>:flop.<frame>?flipx" } }, "swimFast" : { "properties" : { "image" : "<partImage>:swim.<frame>?flipx" } }, "swimSlow" : { "properties" : { "image" : "<partImage>:swim.<frame>?flipx" } } } } } } }, "rotationGroups" : { "all" : { "angularVelocity" : 3.0 } }, "particleEmitters" : { "deathPoof" : { "particles" : [ { "particle" : { "type" : "animated", "animation" : "/animations/puff2c/puff2c.animation", "size" : 1, "angularVelocity" : 35, "fade" : 1, "destructionTime" : 1, "position" : [0, 0], "initialVelocity" : [0, 0], "finalVelocity" : [0, 0], "approach" : [1, 1], "timeToLive" : 0.4, "layer" : "middle" } }, { "particle" : { "type" : "animated", "animation" : "/animations/fizz1/fizz1.animation", "size" : 1, "angularVelocity" : 20, "fade" : 1, "destructionTime" : 1, "position" : [0, 0], "initialVelocity" : [-8, 8], "finalVelocity" : [-3, -4], "approach" : [15, 15], "timeToLive" : 3.45, "layer" : "middle", "variance" : { "initialVelocity" : [-4, 2], "finalVelocity" : [-3, -4] } } }, { "particle" : { "type" : "animated", "animation" : "/animations/fizz1/fizz1.animation", "size" : 1, "angularVelocity" : 20, "fade" : 1, "destructionTime" : 1, "position" : [0, 0], "initialVelocity" : [8, 8], "finalVelocity" : [3, -4], "approach" : [15, 15], "timeToLive" : 3.45, "layer" : "middle", "variance" : { "initialVelocity" : [4, 2], "finalVelocity" : [3, -4] } } }, { "particle" : { "type" : "animated", "animation" : "/animations/fizz2/fizz2.animation", "size" : 1, "angularVelocity" : 20, "fade" : 1, "destructionTime" : 1, "position" : [0, 0], "initialVelocity" : [-8, 8], "finalVelocity" : [-3, -4], "approach" : [15, 15], "timeToLive" : 3.45, "layer" : "middle", "variance" : { "initialVelocity" : [-4, 2], "finalVelocity" : [-3, -4] } } }, { "particle" : { "type" : "animated", "animation" : "/animations/fizz2/fizz2.animation", "size" : 1, "angularVelocity" : 20, "fade" : 1, "destructionTime" : 1, "position" : [0, 0], "initialVelocity" : [8, 8], "finalVelocity" : [3, -4], "approach" : [15, 15], "timeToLive" : 3.45, "layer" : "middle", "variance" : { "initialVelocity" : [4, 2], "finalVelocity" : [3, -4] } } }, { "particle" : { "type" : "animated", "animation" : "/animations/fizz3/fizz3.animation", "size" : 1, "angularVelocity" : 20, "fade" : 1, "destructionTime" : 1, "position" : [0, 0], "initialVelocity" : [-8, 8], "finalVelocity" : [-3, -4], "approach" : [15, 15], "timeToLive" : 3.45, "layer" : "middle", "variance" : { "initialVelocity" : [-4, 2], "finalVelocity" : [-3, -4] } } }, { "particle" : { "type" : "animated", "animation" : "/animations/fizz3/fizz3.animation", "size" : 1, "angularVelocity" : 20, "fade" : 1, "destructionTime" : 1, "position" : [0, 0], "initialVelocity" : [8, 8], "finalVelocity" : [3, -4], "approach" : [15, 15], "timeToLive" : 3.45, "layer" : "middle", "variance" : { "initialVelocity" : [4, 2], "finalVelocity" : [3, -4] } } }, { "particle" : { "type" : "animated", "animation" : "/animations/fizz4/fizz4.animation", "size" : 1, "angularVelocity" : 20, "fade" : 1, "destructionTime" : 1, "position" : [0, 0], "initialVelocity" : [-8, 8], "finalVelocity" : [-3, -4], "approach" : [15, 15], "timeToLive" : 3.45, "layer" : "middle", "variance" : { "initialVelocity" : [-4, 2], "finalVelocity" : [-3, -4] } } }, { "particle" : { "type" : "animated", "animation" : "/animations/fizz4/fizz4.animation", "size" : 1, "angularVelocity" : 20, "fade" : 1, "destructionTime" : 1, "position" : [0, 0], "initialVelocity" : [8, 8], "finalVelocity" : [3, -4], "approach" : [15, 15], "timeToLive" : 3.45, "layer" : "middle", "variance" : { "initialVelocity" : [4, 2], "finalVelocity" : [3, -4] } } } ] }, "captureParticles" : { "particles" : [ { "particle" : "monstercapture" } ] }, "releaseParticles" : { "particles" : [ { "particle" : "monsterrelease" } ] }, "teleportOut" : { "particles" : [ { "particle" : "monstercapture" } ] }, "teleportIn" : { "particles" : [ { "particle" : "monsterrelease" } ] }, "levelUp" : { "particles" : [ { "particle" : "monsterlevelup" } ] } }, "sounds" : { "turnHostile" : [ ], "deathPuff" : [ "/sfx/npc/enemydeathpuff.ogg" ] }, "effects" : { "blink" : { "type" : "flash", "time" : 0.25, "directives" : "fade=ffffff;0.5" } } } leviathan.frames Code: { "frameGrid" : { "size" : [2550, 1270], "dimensions" : [8, 3], "names" : [ [ "swim.1", "swim.2", "swim.3", "swim.4", "swim.5", "swim.6", "swim.7", "swim.8" ], [ "melee.1", "melee.2", "melee.3", "melee.4", null, null, null, null ], [ "ranged.1", null, null, null, null, null, "flop.1", "flop.2" ] ] }, "aliases" : { "idle" : "swim.1" } } leviathan.monstertype Code: { "type" : "leviathan", "shortdescription" : "Leviathan", "description" : "A Massive, Prehistoric, Aquatic Super-Predator.", "categories" : [ "leviathan" ], "parts" : [ "head", "tail", "fin" ], "animation" : "leviathan.animation", "baseParameters" : { "scripts" : [ "/monsters/generated/swimming/swimmingMonster.lua", "/scripts/util.lua", "/scripts/vec2.lua", "/scripts/stateMachine.lua", "/monsters/generated/swimming/wanderState.lua", "/monsters/generated/swimming/attackState.lua", "/monsters/generated/swimming/fleeState.lua", "/monsters/generated/swimming/flopState.lua" ], "persistent" : true, "behavior" : "monster", "renderLayer" : "foregroundEntity", "metaBoundBox" : [-2.0, -2.0, 2.0, 2.0], "scale" : 0.5, "movementSettings" : { "collisionPoly" : [ [-2.5, -1.0], [2.5, -1.0], [2.5, 0.5], [-2.5, 0.5] ], "mass" : 1.5, "liquidBuoyancy" : 1.0, "flySpeed" : 18, "liquidFriction" : 2.0, "liquidForce" : 150.0, "airJumpProfile" : { "jumpSpeed" : 15.0, "jumpControlForce" : 900.0, "jumpInitialPercentage" : 1.0, "jumpHoldTime" : 0.0, "multiJump" : false, "reJumpDelay" : 0.05, "autoJump" : false, "collisionCancelled" : true } }, "moveRatioLimit" : 0.6, "directionChangeCooldown" : 1.0, "targetSearchRadius" : 15, "targetHoldRadius" : 40, "targetChangeCooldown" : 5.0, "attackStartDistance" : 12.0, "attackApproachTime" : 3.0, "attackWindupTime" : 1.0, "attackChargeTime" : 1.2, "attackChargeSpeed" : 60, "wanderTime" : [4.0, 8.0], "fleeTimeRange" : [0.0, 0.0], "flopJumpInterval" : [0.3, 1.5], "knockoutTime" : 0.5, "knockoutEffect" : "blink", "deathParticles" : "deathPoof", "blockedSensors" : [ [2.75, -1.0], [3.0, 0.0], [2.75, 1.0] ], "upSensors" : [ [-1.25, -1.25], [1.0, -1.25], [2.75, -1.25] ], "downSensors" : [ [-1.25, 0.75], [1.0, 0.75], [2.75, 0.75] ], "touchDamage" : { "poly" : [ [-2.5, -1.0], [2.5, -1.0], [2.5, 0.5], [-2.5, 0.5] ], "damage" : 15, "teamType" : "enemy", "damageSourceKind" : "slash", "knockback" : 20, "statusEffects" : [ ] }, "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" : 3 }, "protection" : { "baseValue" : 5.0 }, "healthRegen" : { "baseValue" : 0.1 }, "powerMultiplier" : { "baseValue" : 1.0 }, "physicalResistance" : { "baseValue" : 0.0 }, "fireResistance" : { "baseValue" : 1.0 }, "fireStatusImmunity" : { "baseValue" : 1.0 }, "iceResistance" : { "baseValue" : 0.0 }, "iceStatusImmunity" : { "baseValue" : 1.0 }, "electricResistance" : { "baseValue" : 0.0 }, "electricStatusImmunity" : { "baseValue" : 1.0 }, "poisonResistance" : { "baseValue" : 0.0 }, "poisonStatusImmunity" : { "baseValue" : 1.0 } }, "resources" : { "stunned" : { "deltaValue" : -1.0, "initialValue" : 0.0 }, "health" : { "maxStat" : "maxHealth", "deltaStat" : "healthRegen", "defaultPercentage" : 100 } } }, "mouthOffset" : [0, 0], "feetOffset" : [0, -4], "capturable" : false, "captureHealthFraction" : 0.0, "nametagColor" : [64, 200, 255] } } tail.monsterpart Code: { "name" : "leviathan", "category" : "leviathan", "type" : "tail", "frames" : { "tail" : "tail.png" } } Hopefully that helps...
Do I? The head has frames as leviathan.frames, tail.monsterpart and fin.monsterpart are both blank, the whole sprite is on leviathan.png... They are also all the same size, but I can try that and see if it helps... Edit: Adding two .frames files for the tail and fin files didn't have any effect... Code: [14:53:54.378] [Info] UniverseServer: listening for incoming TCP connections on 0.0.0.0:21025 [14:54:01.222] [Error] Could not load image asset '/default', using placeholder default. (AssetException) No such asset '/default' [14:54:01.223] [Error] Could not load image asset '/default:flop.1', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:flop.1' [14:54:01.836] [Error] Could not load image asset '/default:flop.2', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:flop.2' [14:54:02.071] [Error] Could not load image asset '/default:swim.1', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:swim.1' [14:54:02.257] [Error] Could not load image asset '/default:swim.2', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:swim.2' [14:54:02.416] [Error] Could not load image asset '/default:swim.3', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:swim.3' [14:54:02.562] [Error] Could not load image asset '/default:swim.4', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:swim.4' [14:54:02.758] [Error] Could not load image asset '/default:swim.5', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:swim.5' [14:54:02.906] [Error] Could not load image asset '/default:swim.6', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:swim.6' [14:54:03.061] [Error] Could not load image asset '/default:swim.7', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:swim.7' [14:54:03.259] [Error] Could not load image asset '/default:swim.8', using placeholder default. (AssetException) No associated frames file found for image '/default' while resolving image frame '/default:swim.8' [14:54:12.519] [Info] UniverseClient: Client disconnecting...
If the whole image is on the head file, why do you have fin and tail? Maybe try removing all references to them? Just tossing out ideas, I still dont see any reason for it to be looking for a /default image
They are placeholders from the base game's largefish files as that's what I've built off of. I wish there was a fish mod that was a unique monster as it would be much easier to work from, but I haven't seen such a thing... I have tried without them and it doesn't make any difference either, they are only there because I tried without them first and thought adding them may fix the error, but it is now obvious that the error is being caused by something else... Is it possible my image file is just TOO massive? Is 20400x3810 possibly too much for the game to deal with?
After temporarily abandoning this mod for a while I encountered the problem on a different monster, and dug further into the issue. After hours of tinkering I discovered that the issue is with how Starbound builds Procedural Creatures from parts... Long story short, I moved the sprite for Leviathan from the head.png to tail.png (so head and fin were both blank, and tail had the sprite) because the head only uses 1 frame by default, but my whole creature was on that sprite sheet. After moving it to the tail.png it has animated with no issues and I have begun work on the mod again. Thanks to everyone who helped me troubleshoot this problem as it helped me rule out causes and eventually solve the problem, without you guys I probably never would have solved this issue on my own, so thanks!