Awesome_A0 Posted April 23, 2019 Share Posted April 23, 2019 I am attempting to make a mod that adds new bee items. I have added a version of royal jelly from DST and added a recipe for honeycombs using it. In the crafting menu, the image for the royal jelly does not show up, yet outside of the crafting menu there are not any issues. I am not sure how to fix this. The error log displays this message: WARNING! Could not find region 'OUTOFSPACE' from atlas '../mods/testbox/images/inventoryimages/royaljelly.xml'. Is the region specified in the atlas? Link to comment Share on other sites More sharing options...
MidrealmDM Posted April 30, 2019 Share Posted April 30, 2019 Your tex file has the image(s) and your xml defines the region of the file to use For this example I am assuming that your royaljelly.tex contains only 1 image of 128 x 128 pixels if so, your royaljelly.xml should read something like this<Atlas> <Texture filename="royaljelly.tex" /> <Elements> <Element name="royaljelly.tex" u1="0.0078125" u2="0.9921875" v1="0.0078125" v2="0.9921875" /> </Elements> </Atlas> The region of your tex file is defined by four edges... u1, u2, v1, and v2 u1 is the leftmost edge of your image, and u2 is the rightmost, meaning pixel 1 is on the left However, v1 is the BOTTOM edge of you image, and v2 is the TOP so pixel 1 is at the bottom... and pixel 128 (or 256, or whatever) is at the top The numbers are derived by percentage of the image dimensions. In this example the mushroom soup (blue bowl with the mushrooms) occupies the following region 'u' pixels between 192 to 256 and 'v' pixels between 64 and 128 (remember counting up from the bottom)<Elements> <Element name= item #1, u1 u2 v1 v2 /> ... <Element name="soup_mushroom.tex" u1="0.75390625" u2="0.99609375" v1="0.25390625" v2="0.49609375" /> ... <Element name= item #15, u1 u2 v1 v2 /> </Elements> To avoid overlapping pixels in the images, instead of starting at pixel 0 and ending at 256, I choose to take the pixels between two points. So from the left edge a region 64 pixels wide would be measured from pixel 1 instead of 0 reaching to pixel 63 instead of 64 likewise the next image after it would be measured from 65 to 127 So my soup has u1 of 193/256 and u2 of 255/256 (between 192 and 256) In theory, if your tex file has only one image the region could be u1="0" u2="1" v1="0" v2="1" /> However, I have never tried this, so I don't know if it would work, as I always define the region with 1 pixel 'border' =-=-=-=-=-=- Don't forget your tex files should be factors of 2 in dimensions starting at 2x2 and doubling with each step up, 4x4, 8x8, 16x16, 32 x 32, 64 x 64, 128 x 128, 256 x 256, etc. (although anything less than 64 pixels is IMHO too small) So If you want five images of 64x64 in a single tex file, you must use a file of 256 x 256 with a lot of empty/unused space Link to comment Share on other sites More sharing options...
Awesome_A0 Posted May 5, 2019 Author Share Posted May 5, 2019 Thank you for your response. My region had been defined as u1="0" u2="1" v1="0" v2="1". I changed the region to u1="0.0078125" u2="0.9921875" v1="0.0078125" v2="0.9921875" but it still gives the same error message. I also tried with images from another mod with both regions and it still did not work. This leads me to believe that the problem is not with the image or atlas, but somewhere else in my code. Here is my mod folder: testbox.zip Link to comment Share on other sites More sharing options...
Ultroman Posted May 6, 2019 Share Posted May 6, 2019 Some things you could try: Try removing the line: inst.components.inventoryitem.imagename = "royaljelly" In most item mods I see, they don't specify the imagename, only the atlasname. I dunno. maybe it would work if you put "royaljelly.tex"? You have two lines of: local inst = CreateEntity() Remove one of them. Instead of doing this:local jelly = Ingredient("royal_jelly", 5) jelly.atlas = "images/inventoryimages/royaljelly.xml" you can just do this:local jelly = Ingredient("royal_jelly", 5, "images/inventoryimages/royaljelly.xml") in which case you really don't need to put it in a local variable anymore. This should properly set up the atlas variable (even though what you had was also acceptable). A separate problem. In your test_box.lua you have these lines: inst:ListenForEvent( "dusktime", StopSpawningFn(inst), GetWorld()) inst:ListenForEvent( "daytime", StartSpawningFn(inst), GetWorld()) When passing a reference to an existing function to ListenForEvent, your should not include the parentheses or the parameters. The difference is, without the parentheses and parameters, you are giving it s reference to the function. With the parentheses and parameters you are actually calling the function, and passing the return value of that function to the ListenForEvent function, instead of passing it a reference to your custom function. You do NOT want that. That makes ListenForEvent not call your functions, because you are not passing them a function. That said, if you were to pass it an in-line function, you obviously need to include the parentheses and parameters, but also the function body e.g. inst:ListenForEvent( "daytime", function(inst) someFunction(inst) inst.someVariable = 5 end , GetWorld()) Link to comment Share on other sites More sharing options...
Hornete Posted May 6, 2019 Share Posted May 6, 2019 I'm not sure if this would work as this is for DST, but I did this for my wagstaff mod to have custom items show up in recipes local wagstaffnormalgoggles_recipe = AddRecipe("wagstaffnormalgoggles", {Ingredient("goldnugget", 1), Ingredient("pigskin", 1)}, tinkeringtab, TECH.NONE, nil, nil, nil, nil) wagstaffnormalgoggles_recipe.atlas = "images/inventoryimages/wagstaffnormalgoggles.xml" Link to comment Share on other sites More sharing options...
Ultroman Posted May 6, 2019 Share Posted May 6, 2019 33 minutes ago, Omaremad74 said: I'm not sure if this would work as this is for DST, but I did this for my wagstaff mod to have custom items show up in recipes local wagstaffnormalgoggles_recipe = AddRecipe("wagstaffnormalgoggles", {Ingredient("goldnugget", 1), Ingredient("pigskin", 1)}, tinkeringtab, TECH.NONE, nil, nil, nil, nil) wagstaffnormalgoggles_recipe.atlas = "images/inventoryimages/wagstaffnormalgoggles.xml" I don't think it's the image for the product that's the problem. It's the image for one of the ingredients that is not showing up, and that ingredient is a custom item, which seems to be where this stems from. Link to comment Share on other sites More sharing options...
Hornete Posted May 6, 2019 Share Posted May 6, 2019 26 minutes ago, Ultroman said: I don't think it's the image for the product that's the problem. It's the image for one of the ingredients that is not showing up, and that ingredient is a custom item, which seems to be where this stems from. Wooops, I thought I posted the right thing, I meant this local wagstaffarmorgoggles_recipe = AddRecipe("wagstaffarmorgoggles", {Ingredient("wagstaffnormalgoggles", 1, "images/inventoryimages/wagstaffnormalgoggles.xml", "wagstaffnormalgoggles.tex"), Ingredient("cutstone", 1)}, tinkeringtab, TECH.NONE, nil, nil, nil, nil) wagstaffarmorgoggles_recipe.atlas = "images/inventoryimages/wagstaffarmorgoggles.xml" Look at the wagstaffnormalgoggles ingredient I referenced the xml and tex files right after it. Link to comment Share on other sites More sharing options...
Ultroman Posted May 6, 2019 Share Posted May 6, 2019 30 minutes ago, Omaremad74 said: local wagstaffarmorgoggles_recipe = AddRecipe("wagstaffarmorgoggles", {Ingredient("wagstaffnormalgoggles", 1, "images/inventoryimages/wagstaffnormalgoggles.xml", "wagstaffnormalgoggles.tex"), Ingredient("cutstone", 1)}, tinkeringtab, TECH.NONE, nil, nil, nil, nil) wagstaffarmorgoggles_recipe.atlas = "images/inventoryimages/wagstaffarmorgoggles.xml" Look at the wagstaffnormalgoggles ingredient I referenced the xml and tex files right after it. That doesn't really make sense, though. The Ingredient "constructor" looks like this in original DS and Hamlet, respectively: DS Ingredient = Class(function(self, type, amount, atlas) self.type = type self.amount = amount self.atlas = (atlas and resolvefilepath(atlas)) or resolvefilepath("images/inventoryimages.xml") end) Hamlet Ingredient = Class(function(self, type, amount, atlas) self.type = type self.amount = amount self.atlas = (atlas and resolvefilepath(atlas)) end) The 'self' parameter is automatically filled, so it only takes 3 parameters, and you're giving it 4. The 4th parameter you give (the path to the tex file) will not be used for anything. For DST, which has a 4th parameter, that 4th parameter is labelled "deconstruct", and is NOT expecting a path to a texture (though I'm not sure what it actually wants in that parameter, but I'm guessing a function). Another thing is that there is no AddRecipe function in DS. That's only in DST. That aside, for DST, if you provide AddRecipe with the atlas parameter, then you don't have to set it afterwards. Link to comment Share on other sites More sharing options...
Hornete Posted May 6, 2019 Share Posted May 6, 2019 17 hours ago, Ultroman said: [snip] Sorry, haha I just wanted to provide a possible solution. It worked for me in DST so maybe it works for DS? Anyhow thanks for informing me about some things Link to comment Share on other sites More sharing options...
Ultroman Posted May 6, 2019 Share Posted May 6, 2019 30 minutes ago, Omaremad74 said: Sorry, haha I just wanted to provide a possible solution. It worked for me in DST so maybe it works for DS? Anyhow thanks for informing me about some things I get it Please don't be put down by my reply in any way. I also just want to help Link to comment Share on other sites More sharing options...
Awesome_A0 Posted May 6, 2019 Author Share Posted May 6, 2019 1: The line inst.components.inventoryitem.imagename = "royaljelly" is required. Changing it to "royaljelly.tex" does not work. I think the reason why you haven't seen that used is that most people define the image name after the crafting recipe in modmain. As royal jelly does not have a crafting recipe, the image name is defined in the prefab file instead. 3: I was not aware that you could put them in the same line. I have changed that. 4: The testbox structure was simply me taking the code from the bee box in the game files. As it works currently, I assumed that I didn't need to change anything else. I do not know why this worked, but changing the name of the xml and .tex files from royaljelly to royal_jelly fixed the issue. Thank you for your help. Link to comment Share on other sites More sharing options...
Ultroman Posted May 7, 2019 Share Posted May 7, 2019 1. That may be true. 3. Awesome 4. Okidoki. It just really shouldn't work xD 21 minutes ago, Awesome_A0 said: I do not know why this worked, but changing the name of the xml and .tex files from royaljelly to royal_jelly fixed the issue. Thank you for your help. That's super weird...I meticulously checked the references, and nothing seemed wrong. It's one of those moments where you just leave it be, and walk into the sunset Link to comment Share on other sites More sharing options...
Awesome_A0 Posted May 7, 2019 Author Share Posted May 7, 2019 I have actually been having a second problem, but I though that it was related to the first one. I was hoping that solving that one would help me to fix it, but it seems that is not the case. The second problem is that when building the textbox structure, the green version that shows you where you are placing it does not appear. When it is placed, the structure appears and then correctly plays the build animation. The strange thing is that no errors are generated, unlike the other problem. Link to comment Share on other sites More sharing options...
Ultroman Posted May 7, 2019 Share Posted May 7, 2019 I think there's something different when working with structures that have placers. Find a mod that makes a new structure, and see which extra textures you need. I would assume that if you had a placer-texture, then it would give you a warning as to why it isn't showing. Link to comment Share on other sites More sharing options...
Awesome_A0 Posted May 7, 2019 Author Share Posted May 7, 2019 I have found the solution to my problem. When creating the placer, I set the build to test_box instead of bee_box. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.
Please be aware that the content of this thread may be outdated and no longer applicable.