Growtopia Wiki
No edit summary
No edit summary
(20 intermediate revisions by 3 users not shown)
Line 31: Line 31:
 
 
 
return "<span class='"..table.concat(class," ").."'>"..mw.getCurrentFrame():preprocess("{{filepath:"..file.."}}"):gsub("?cb=(.*)$","/window-crop/width/"..tsize.."/x-offset/"..(pos%rowlen)*tsize.."/y-offset/"..math.floor(pos/rowlen)*tsize.."/window-width/"..tsize.."/window-height/"..tsize.."?fill=cb-%1").."</span>[".."[Category:AutoPurge]]"
 
return "<span class='"..table.concat(class," ").."'>"..mw.getCurrentFrame():preprocess("{{filepath:"..file.."}}"):gsub("?cb=(.*)$","/window-crop/width/"..tsize.."/x-offset/"..(pos%rowlen)*tsize.."/y-offset/"..math.floor(pos/rowlen)*tsize.."/window-width/"..tsize.."/window-height/"..tsize.."?fill=cb-%1").."</span>[".."[Category:AutoPurge]]"
  +
end
  +
  +
local function getSpriteOffset(pos, tsize, rowlen)
  +
tsize = tsize or 32
  +
rowlen = rowlen or 64
  +
  +
return "-"..(pos%rowlen)*tsize.."px -"..math.floor(pos/rowlen)*tsize.."px"
 
end
 
end
   
Line 67: Line 74:
 
function item.Sprite(frame)
 
function item.Sprite(frame)
 
return getItemSpriteByName(frame.args[1])
 
return getItemSpriteByName(frame.args[1])
  +
end
  +
  +
function item.SpriteOffset(frame)
  +
local tsize = frame.args[2] or 32
  +
local data = getItemData(md5.md5(frame.args[1]))
  +
local pos = data[1]
  +
return getSpriteOffset(pos,tsize,false)
 
end
 
end
   
Line 75: Line 89:
 
function item.ItemLink(frame)
 
function item.ItemLink(frame)
 
local name = frame.args[1] or ""
 
local name = frame.args[1] or ""
  +
dname = name
  +
if(name == "Card Block Seed") then
  +
name = "Card Block - Spade Seed"
  +
end
  +
if(name == "Tangram Block Seed") then
  +
name = "Tangram Block A Seed"
  +
  +
end
 
local d = getItemData(md5.md5(name))
 
local d = getItemData(md5.md5(name))
 
local s = getItemSpriteByName(name, d)
 
local s = getItemSpriteByName(name, d)
Line 87: Line 109:
 
local iname = name:gsub("%sSeed$","")
 
local iname = name:gsub("%sSeed$","")
 
if(d[3] ~= md5.md5(iname)) then return s.." [["..name.."]]" end
 
if(d[3] ~= md5.md5(iname)) then return s.." [["..name.."]]" end
return s.." [["..iname.."|"..name.."]]"
+
return s.." [["..iname.."|"..dname.."]]"
 
else
 
else
 
return s.." [["..name.."]]"
 
return s.." [["..name.."]]"
Line 109: Line 131:
 
local c = {}
 
local c = {}
 
addCategory(c,"Item")
 
addCategory(c,"Item")
table.insert(s,"__NOTOC__<div class='iteminfobox'>")
+
table.insert(s,"__NOTOC__<div class='gtw-card item-card'>")
table.insert(s,"<div class='header'><h3>")
+
table.insert(s,"<div class='card-header'><h3>")
 
table.insert(s,getItemSprite(d))
 
table.insert(s,getItemSprite(d))
table.insert(s,"&nbsp;<b class='s_name'>"..name)
+
table.insert(s,"&nbsp;<b>"..name)
 
if(d[3]<999) then
 
if(d[3]<999) then
table.insert(s,"&nbsp;<small class='s_rarity'>(Rarity: "..d[3]..")</small>")
+
table.insert(s,"&nbsp;<small>(Rarity: "..d[3]..")</small>")
 
end
 
end
 
table.insert(s,"</b></h3><span></span></div>")
 
table.insert(s,"</b></h3><span></span></div>")
 
--------------------
 
--------------------
table.insert(s,"<div class='sect_text'>")
+
table.insert(s,"<div class='card-text'>")
 
if((frame.args[1] or ""):len()>0) then
 
if((frame.args[1] or ""):len()>0) then
 
if(d[2]==64) then table.insert(s,"This is a 1 lb. "..name..". ") end
 
if(d[2]==64) then table.insert(s,"This is a 1 lb. "..name..". ") end
Line 128: Line 150:
 
table.insert(s,"</div>")
 
table.insert(s,"</div>")
 
--------------------
 
--------------------
table.insert(s,"<b class='sect_title'>Properties</b>")
+
table.insert(s,"<b class='card-title'>Properties</b>")
table.insert(s,"<div class='sect_text'>")
+
table.insert(s,"<div class='card-text'>")
 
 
 
local l = {}
 
local l = {}
Line 135: Line 157:
 
table.insert(l,"This item can be placed in two directions, depending on the direction you're facing.") end
 
table.insert(l,"This item can be placed in two directions, depending on the direction you're facing.") end
 
if((d[4]/2)%2>=1) then
 
if((d[4]/2)%2>=1) then
table.insert(l,"This item has special properties you can adjust with the Wrench.") end
+
table.insert(l,"This item has special properties you can adjust with the [[Wrench]].") end
 
if((d[4]/4)%2>=1) then
 
if((d[4]/4)%2>=1) then
 
table.insert(l,"This item never drops any [[seed]]s.") end
 
table.insert(l,"This item never drops any [[seed]]s.") end
Line 152: Line 174:
 
table.insert(l,"This item is PUBLIC: Even if it's locked, anyone can smash it.") end
 
table.insert(l,"This item is PUBLIC: Even if it's locked, anyone can smash it.") end
 
if((d[4]/16384)%2>=1) then
 
if((d[4]/16384)%2>=1) then
if(id==3762) then table.insert(l,"This item can only be created during SummerFest!")
+
if(id==3762) then table.insert(l,"This item can only be created during [[SummerFest]]!")
else table.insert(l,"This item can only be created during WinterFest!") end
+
else table.insert(l,"This item can only be created during [[WinterFest]]!") end
 
end
 
end
 
if((d[4]/32768)%2>=1) then
 
if((d[4]/32768)%2>=1) then
table.insert(l,"This item cannot be dropped or traded.")
+
table.insert(l,"This item cannot be [[dropping|dropped]] or [[trading|traded]].")
 
addCategory(s,"Untradable") end
 
addCategory(s,"Untradable") end
 
if((d[14]/262144)%2>=1) then
 
if((d[14]/262144)%2>=1) then
table.insert(l,"This item can be transmuted.")
+
table.insert(l,"This item can be [[:Category:Transmutable|transmuted]].")
 
addCategory(s,"Transmutable") end
 
addCategory(s,"Transmutable") end
 
if(d[2]==3) then
 
if(d[2]==3) then
Line 166: Line 188:
 
table.insert(l,"This item has no use... by itself.") end
 
table.insert(l,"This item has no use... by itself.") end
 
if(d[2]==64) then
 
if(d[2]==64) then
table.insert(l,"This is a fish. It can only be placed in a Fish Tank. You can't divide fish into pieces.") end
+
table.insert(l,"This is a fish. It can only be placed in a [[Fish Tank]]. You can't divide fish into pieces.") end
 
if(d[2]==107 and name ~= "Ancient Shards") then
 
if(d[2]==107 and name ~= "Ancient Shards") then
 
table.insert(l,"This item can be upgraded.") end
 
table.insert(l,"This item can be upgraded.") end
Line 174: Line 196:
 
table.insert(s,"</div>")
 
table.insert(s,"</div>")
 
--------------------
 
--------------------
table.insert(s,"<b class='sect_title'>Data</b>")
+
table.insert(s,"<b class='card-title'>Data</b>")
table.insert(s,"<table class='sect_text'>")
+
table.insert(s,"<table class='card-field'>")
 
 
 
table.insert(s,"<tr><th>Type</th><td>")
 
table.insert(s,"<tr><th>Type</th><td>")
Line 235: Line 257:
 
 
 
if(ca[4] =="Foreground" or ca[4] =="Background") then
 
if(ca[4] =="Foreground" or ca[4] =="Background") then
table.insert(s,"<b class='sect_title invisible-high-impact'>Paint Preview</b>")
+
table.insert(s,"<b class='card-title invisible-high-impact'>Paint Preview</b>")
table.insert(s,"<div class='sect_text paint_preview invisible-high-impact'>")
+
table.insert(s,"<div class='card-text paint-preview invisible-high-impact'>")
 
table.insert(s,"<div class='paint'>"..getItemSprite(d).."<i>None</i></div>")
 
table.insert(s,"<div class='paint'>"..getItemSprite(d).."<i>None</i></div>")
 
table.insert(s,"<div class='paint red'>"..getItemSprite(d).."<i>"..getItemSpriteByName("Paint Bucket - Red").." Red</i></div>")
 
table.insert(s,"<div class='paint red'>"..getItemSprite(d).."<i>"..getItemSpriteByName("Paint Bucket - Red").." Red</i></div>")
Line 253: Line 275:
 
 
 
----- [Handle Category] -----
 
----- [Handle Category] -----
if(d[2]==3) then
+
if(d[2]==2) then
addCategory(c,"Lock")
+
addCategory(c,"Doors")
  +
elseif(d[2]==3) then
  +
addCategory(c,"Locks")
  +
elseif(d[2]==5) then
  +
addCategory(c,"Treasure Blocks")
  +
elseif(d[2]==6) then
  +
addCategory(c,"Deadly Blocks")
  +
elseif(d[2]==7) then
  +
addCategory(c,"Trampoline Blocks")
 
elseif(d[2]==8) then
 
elseif(d[2]==8) then
addCategory(c,"Consumable")
+
addCategory(c,"Consumables")
  +
elseif(d[2]==9 or d[2]==104 or d[2]==105 or d[2]==106) then
  +
addCategory(c,"Entrances")
  +
elseif(d[2]==10) then
  +
addCategory(c,"Signs")
  +
elseif(d[2]==11) then
  +
addCategory(c,"SFX Foreground Blocks")
  +
elseif(d[2]==12) then
  +
addCategory(c,"Toggleable Animated Blocks")
  +
elseif(d[2]==14) then
  +
addCategory(c,"Platforms")
  +
elseif(d[2]==16) then
  +
addCategory(c,"Pain Blocks (Lava)")
 
elseif(d[2]==20) then
 
elseif(d[2]==20) then
 
addCategory(c,"Clothes")
 
addCategory(c,"Clothes")
 
addCategory(c,getItemType("clothingType",d[8])[1].." (Clothes)")
 
addCategory(c,getItemType("clothingType",d[8])[1].." (Clothes)")
  +
elseif(d[2]==21 or d[2]==122) then
  +
addCategory(c,"Animated Foreground Blocks")
  +
elseif(d[2]==22) then
  +
addCategory(c,"SFX Background Blocks")
  +
elseif(d[2]==23) then
  +
addCategory(c,"Toggleable Background Blocks")
  +
elseif(d[2]==24) then
  +
addCategory(c,"Bouncy Blocks")
  +
elseif(d[2]==25) then
  +
addCategory(c,"Pain Blocks")
  +
elseif(d[2]==26) then
  +
addCategory(c,"Portals")
  +
elseif(d[2]==27) then
  +
addCategory(c,"Checkpoints")
  +
elseif(d[2]==28) then
  +
addCategory(c,"Sheet Music")
  +
elseif(d[2]==29) then
  +
addCategory(c,"Slippery Blocks")
  +
elseif(d[2]==31) then
  +
addCategory(c,"Toggleable Blocks")
  +
elseif(d[2]==32) then
  +
addCategory(c,"Chests")
  +
elseif(d[2]==33) then
  +
addCategory(c,"Mailboxes")
  +
elseif(d[2]==34) then
  +
addCategory(c,"Bulletin Boards")
  +
elseif(d[2]==35) then
  +
addCategory(c,"Event Mystery Blocks")
  +
elseif(d[2]==36) then
  +
addCategory(c,"Random Blocks")
 
elseif(d[2]==37 or d[2]==129) then
 
elseif(d[2]==37 or d[2]==129) then
addCategory(c,"Component")
+
addCategory(c,"Components")
 
elseif(d[2]==38) then
 
elseif(d[2]==38) then
addCategory(c,"Provider")
+
addCategory(c,"Providers")
  +
elseif(d[2]==39) then
  +
addCategory(c,"Chemical Combiners")
  +
elseif(d[2]==41 or d[2]==81 or d[2]==89) then
  +
addCategory(c,"Weather Machines")
  +
elseif(d[2]==45) then
  +
addCategory(c,"Toggleable Deadly Blocks")
  +
elseif(d[2]==52) then
  +
addCategory(c,"Game Blocks")
  +
elseif(d[2]==56) then
  +
addCategory(c,"Crystals")
  +
elseif(d[2]==60) then
  +
addCategory(c,"Pushing Blocks")
 
elseif(d[2]==64) then
 
elseif(d[2]==64) then
 
addCategory(c,"Fish")
 
addCategory(c,"Fish")
  +
elseif(d[2]==98) then
  +
addCategory(c,"Ovens")
 
elseif(d[2]==107) then
 
elseif(d[2]==107) then
addCategory(c,"Artifact")
+
addCategory(c,"Artifacts")
  +
elseif(d[2]==108) then
  +
addCategory(c,"Jelly Blocks")
  +
elseif(d[2]==113) then
  +
addCategory(c,"CyBlock Bots")
  +
elseif(d[2]==114) then
  +
addCategory(c,"CyBlock Commands")
  +
elseif(d[2]==115) then
  +
addCategory(c,"Lucky Tokens")
  +
elseif(d[2]==120) then
  +
addCategory(c,"Startopia Starship Blocks")
  +
elseif(d[2]==123 or d[2]==124 or d[2]==125) then
  +
addCategory(c,"Autobreaking Blocks")
 
end
 
end
  +
local isBlock = false
 
if(ca[4] =="Foreground") then
 
if(ca[4] =="Foreground") then
addCategory(c,"Foreground Block")
+
addCategory(c,"Foreground Blocks")
  +
isBlock = true
 
end
 
end
 
if(ca[4] =="Background") then
 
if(ca[4] =="Background") then
addCategory(c,"Background Block")
+
addCategory(c,"Background Blocks")
  +
isBlock = true
 
end
 
end
if(d[7]==0) then
+
if(d[7]==0 and isBlock) then
addCategory(c,"Non-solid Block")
+
addCategory(c,"Non-solid Blocks")
 
end
 
end
 
if(mw.title.getCurrentTitle().nsText=="") then
 
if(mw.title.getCurrentTitle().nsText=="") then

Revision as of 14:32, 12 July 2020

Documentation for this module may be created at Module:Item/doc

local item = {}

local md5 = require('Module:Md5')


local function in_array(h,a) 
    for k,v in ipairs(a) do if v == h then return true end end return false
end
local function addCategory(t,n) 
   table.insert(t,"[".."[Category:"..n.."]]") 
end


local function getItemData(hash)
    local a = mw.loadData('Module:Item/Data')
    return a[hash] or {-1, -1}
end

local function getItemType(name,id)
    local a = mw.loadData('Module:Item/Type')
    return (a[name] or {})[id] or {}
end


local function getSprite(file, pos, tsize, rowlen, class)
    tsize = tsize or 32
    rowlen = rowlen or 64
    class = class or {}
    
    table.insert(class,"growsprite")
    
    return "<span class='"..table.concat(class," ").."'>"..mw.getCurrentFrame():preprocess("{{filepath:"..file.."}}"):gsub("?cb=(.*)$","/window-crop/width/"..tsize.."/x-offset/"..(pos%rowlen)*tsize.."/y-offset/"..math.floor(pos/rowlen)*tsize.."/window-width/"..tsize.."/window-height/"..tsize.."?fill=cb-%1").."</span>[".."[Category:AutoPurge]]"
end

local function getSpriteOffset(pos, tsize, rowlen)
    tsize = tsize or 32
    rowlen = rowlen or 64

    return "-"..(pos%rowlen)*tsize.."px -"..math.floor(pos/rowlen)*tsize.."px"
end

local function getSeedSprite(data) 
    local class = {"seed"}
    local pos = data[1]
    return getSprite("SeedSprites.png",pos,16,false,class)
end
local function getTreeSprite(data) 
    local pos = data[1]
    return getSprite("TreeSprites.png",pos,32)
end
local function getItemSprite(data) 
    local class = {}
    local pos = data[1]
    if(data[6] == 25) then table.insert(class,"shifty") end
    return getSprite("ItemSprites.png",pos,32,false,class)
end
local function getItemSpriteByName(name, data)
    local class = {}
    data = data or getItemData(md5.md5(name))
    if(data[2] == -1) then
        local treeTest_name = name:gsub("%sTree$","")
        if(treeTest_name ~= name) then 
            local data2 = getItemData(md5.md5(treeTest_name))
            if(data2[2] > -1) then return getTreeSprite(data2) end
        end
    end
        

    if(data[2] == 19 and not in_array(name,{"Magic Egg","Mutated Seed"})) then return getSeedSprite(data) end
    return getItemSprite(data)
end


function item.Sprite(frame)
    return getItemSpriteByName(frame.args[1])
end

function item.SpriteOffset(frame)
    local tsize = frame.args[2] or 32
    local data = getItemData(md5.md5(frame.args[1]))
    local pos = data[1]
    return getSpriteOffset(pos,tsize,false)
end

function item.SpritePos(frame)
    return getSprite(frame.args[1],frame.args[2],frame.args[3],frame.args[4])
end

function item.ItemLink(frame)
    local name = frame.args[1] or ""
    dname = name
    if(name == "Card Block Seed") then
        name = "Card Block - Spade Seed"
    end
    if(name == "Tangram Block Seed") then
        name = "Tangram Block A Seed"
        
    end
    local d = getItemData(md5.md5(name))
    local s = getItemSpriteByName(name, d)
    if(d[2] == -1) then
        local tname = name:gsub("%sTree$","")
        if(getItemData(md5.md5(tname))[2] ~= -1) then
            return s.." [["..tname.."|"..name.."]]"
        end
        return s.." Unknown Item"
    end
    if(d[2] == 19) then
        local iname = name:gsub("%sSeed$","")
        if(d[3] ~= md5.md5(iname)) then return s.." [["..name.."]]" end
        return s.." [["..iname.."|"..dname.."]]"
    else
        return s.." [["..name.."]]"
    end
end

function item.Infobox(frame) 
    local name = frame.args["name"] or mw.title.getCurrentTitle().text
    local d = getItemData(md5.md5(name))
    
    local s = {}
    
    if(d[2] == -1 or d[2] == 19) then
        table.insert(s,"<div><b style='color: #F00'>Invalid Item</b></div>")
        if(mw.title.getCurrentTitle().nsText=="") then 
            addCategory(s,"Invalid Item")
        end
        return table.concat(s)
    end
    
    local c = {}
    addCategory(c,"Item")
    table.insert(s,"__NOTOC__<div class='gtw-card item-card'>")
    table.insert(s,"<div class='card-header'><h3>")
    table.insert(s,getItemSprite(d))
    table.insert(s,"&nbsp;<b>"..name)
     if(d[3]<999) then
        table.insert(s,"&nbsp;<small>(Rarity: "..d[3]..")</small>")
    end
    table.insert(s,"</b></h3><span></span></div>")
    --------------------
    table.insert(s,"<div class='card-text'>")
    if((frame.args[1] or ""):len()>0) then
        if(d[2]==64) then table.insert(s,"This is a 1 lb. "..name..". ") end
        table.insert(s,frame.args[1])
    else
        table.insert(s,"<i class='warning'>Description missing.</i>")
        addCategory(c,"Missing Description")
    end
    table.insert(s,"</div>")
    --------------------
    table.insert(s,"<b class='card-title'>Properties</b>")
    table.insert(s,"<div class='card-text'>")
    
    local l = {}
    if((d[4]/1)%2>=1) then
        table.insert(l,"This item can be placed in two directions, depending on the direction you're facing.") end
    if((d[4]/2)%2>=1) then
        table.insert(l,"This item has special properties you can adjust with the [[Wrench]].") end
    if((d[4]/4)%2>=1) then
        table.insert(l,"This item never drops any [[seed]]s.") end
    if((d[4]/32)%2>=1) then
        if(d[2]==20) then table.insert(l,"This item can kill zombies during a Pandemic!") 
        else table.insert(l,"This item can't be used on yourself.") end
    end
    if((d[4]/128)%2>=1) then
        table.insert(l,"This item can only be used in World-Locked worlds.") end
    if((d[4]/512)%2>=1) then
        table.insert(l,"This item can't be destroyed - smashing it will return it to your backpack if you have room!") 
    end
    if((d[4]/2048)%2>=1) then
        table.insert(l,"A tree of this type can bear surprising fruit!") end
    if((d[4]/4096)%2>=1) then
        table.insert(l,"This item is PUBLIC: Even if it's locked, anyone can smash it.") end
    if((d[4]/16384)%2>=1) then
        if(id==3762) then table.insert(l,"This item can only be created during [[SummerFest]]!")
        else table.insert(l,"This item can only be created during [[WinterFest]]!") end
    end
    if((d[4]/32768)%2>=1) then
        table.insert(l,"This item cannot be [[dropping|dropped]] or [[trading|traded]].")
        addCategory(s,"Untradable")  end
    if((d[14]/262144)%2>=1) then
        table.insert(l,"This item can be [[:Category:Transmutable|transmuted]].")
        addCategory(s,"Transmutable") end
    if(d[2]==3) then
        table.insert(l,"A lock makes it so only you (and designated friends) can edit an area.") end
    if(d[2]==37 or d[2]==114) then
        table.insert(l,"This item has no use... by itself.") end
    if(d[2]==64) then
        table.insert(l,"This is a fish. It can only be placed in a [[Fish Tank]]. You can't divide fish into pieces.") end
    if(d[2]==107 and name ~= "Ancient Shards") then
        table.insert(l,"This item can be upgraded.") end
    
    if(#l==0) then table.insert(s,"None")
    else table.insert(s,table.concat(l,"<br>")) end
    table.insert(s,"</div>")
    --------------------
    table.insert(s,"<b class='card-title'>Data</b>")
    table.insert(s,"<table class='card-field'>")
    
    table.insert(s,"<tr><th>Type</th><td>")
    local ca = getItemType("category",d[2])
    if(d[2]==20) then ca = getItemType("clothingType",d[8]) end
    if(not ca[1]) then table.insert(s,getItemSpriteByName("Blank").." <i class='warning'>Unknown ("..d[2]..")</i>")
    else
        table.insert(s,getItemSpriteByName(ca[3]).." "..ca[1])
        if(ca[4] ~= false) then table.insert(s,"<small> - "..ca[4].."</small>") end
        if(#ca[2] > 0) then table.insert(s,"<br><small class='desc'>"..ca[2].."</small>") end
    end
    
    table.insert(s,"</td></tr><tr><th>Chi</th><td>")
    local chi_uc = mw.getContentLanguage():ucfirst((frame.args[2] or ""):lower())
    if(chi_uc == "None" or in_array(d[2],{20,107})) then
        table.insert(s,"None")
    elseif(in_array(chi_uc,{"Fire","Water","Earth","Wind"})) then
        table.insert(s,getItemSpriteByName("Element - "..chi_uc).." "..chi_uc)
        addCategory(c,"Chi - "..chi_uc)
    else
        table.insert(s,"<i class='warning'>Unknown</i>")
        addCategory(c,"Missing Chi")
    end
 
    table.insert(s,"</td></tr><tr><th>Texture Type</th><td>")
    local tt = getItemType("textureType",d[5])
    table.insert(s,getSprite("TextureTypeSprite.png", d[5], 32, 8).." "..(tt[1] or "<i class='warning'>Unknown</i>"))
 
    table.insert(s,"</td></tr><tr><th>Collision Type</th><td>")
    local ct = getItemType("collisionType",d[7])
    table.insert(s,getSprite("CollisionTypeSprite.png", d[7], 32, 8).." "..(ct[1] or "<i class='warning'>Unknown</i>"))
    
    table.insert(s,"</td></tr><tr><th>Hardness</th><td>"..getItemSpriteByName("Fist").." ")
    table.insert(s,math.ceil(d[9]/6).." Hits<br>"..getItemSpriteByName("Pickaxe").." ")
    table.insert(s,math.ceil(d[9]/8).." Hits<br><small>Restores after <b>"..d[10].."s</b>")
    table.insert(s," of inactivity.</small></td></tr>")
    
    table.insert(s,"<tr><th>Seed Color</th><td class='seedColor'>"..getSeedSprite(d).." <div>")
    table.insert(s,"<span style='background:"..d[11].."'></span> "..d[11].."<br>")
    table.insert(s,"<span style='background:"..d[12].."'></span> "..d[12].."</div></td></tr>")
    
    table.insert(s,"<tr><th>Grow Time</th><td>"..getTreeSprite(d).." ")
    if(d[13]>=604800) then table.insert(s,math.floor(d[13]/604800).."w ") end
    if(d[13]>=86400) then table.insert(s,math.floor(d[13]%604800/86400).."d ") end
    if(d[13]>=3600) then table.insert(s,math.floor(d[13]%86400/3600).."h ") end
    if(d[13]>=60) then table.insert(s,math.floor(d[13]%3600/60).."m ") end
    table.insert(s,(d[13]%60).."s</td></tr>")
    
    table.insert(s,"<tr><th>Default Gems Drop</th><td>"..getItemSpriteByName("Gems").." ")
    if(d[3]==999) then table.insert(s,"N/A".."</td></tr>")
    else
        if((d[14]/131072)%2>=1) then table.insert(s,"0</td></tr>")
        elseif(d[3]>30) then table.insert(s,"0 - "..math.floor(d[3]/4+1).."</td></tr>")
        elseif(d[3]>=8) then table.insert(s,"0 - "..math.floor(math.floor(d[3]/4)*0.75+1).."</td></tr>")
        else table.insert(s,"0 - 1</td></tr>") end
    end
    
    table.insert(s,"</table>")
    
    if(ca[4] =="Foreground" or ca[4] =="Background") then
        table.insert(s,"<b class='card-title invisible-high-impact'>Paint Preview</b>")
        table.insert(s,"<div class='card-text paint-preview invisible-high-impact'>")
        table.insert(s,"<div class='paint'>"..getItemSprite(d).."<i>None</i></div>")
        table.insert(s,"<div class='paint red'>"..getItemSprite(d).."<i>"..getItemSpriteByName("Paint Bucket - Red").." Red</i></div>")
        table.insert(s,"<div class='paint yellow'>"..getItemSprite(d).."<i>"..getItemSpriteByName("Paint Bucket - Yellow").." Yellow</i></div>")
        table.insert(s,"<div class='paint green'>"..getItemSprite(d).."<i>"..getItemSpriteByName("Paint Bucket - Green").." Green</i></div>")
        table.insert(s,"<div class='paint aqua'>"..getItemSprite(d).."<i>"..getItemSpriteByName("Paint Bucket - Aqua").." Aqua</i></div>")
        table.insert(s,"<div class='paint blue'>"..getItemSprite(d).."<i>"..getItemSpriteByName("Paint Bucket - Blue").." Blue</i></div>")
        table.insert(s,"<div class='paint purple'>"..getItemSprite(d).."<i>"..getItemSpriteByName("Paint Bucket - Purple").." Purple</i></div>")
        table.insert(s,"<div class='paint charcoal'>"..getItemSprite(d).."<i>"..getItemSpriteByName("Paint Bucket - Charcoal").." Charcoal</i></div>")
        table.insert(s,"</div>")
    end
    
    --table.insert(s,mw.getCurrentFrame():preprocess("<div class='footer'>Incorrect Texture? Press [{{fullurl:{{FULLPAGENAME}}|action=purge}} here] to reload it.</div>"))
    table.insert(s,"</div>")
 
 
    ----- [Handle Category] -----
    if(d[2]==2) then 
        addCategory(c,"Doors")
    elseif(d[2]==3) then 
        addCategory(c,"Locks")
    elseif(d[2]==5) then 
        addCategory(c,"Treasure Blocks")
    elseif(d[2]==6) then 
        addCategory(c,"Deadly Blocks")
    elseif(d[2]==7) then 
        addCategory(c,"Trampoline Blocks")
    elseif(d[2]==8) then 
        addCategory(c,"Consumables")
    elseif(d[2]==9 or d[2]==104 or d[2]==105 or d[2]==106) then 
        addCategory(c,"Entrances")
    elseif(d[2]==10) then 
        addCategory(c,"Signs")
    elseif(d[2]==11) then 
        addCategory(c,"SFX Foreground Blocks")
    elseif(d[2]==12) then 
        addCategory(c,"Toggleable Animated Blocks")
    elseif(d[2]==14) then 
        addCategory(c,"Platforms")
    elseif(d[2]==16) then 
        addCategory(c,"Pain Blocks (Lava)")
    elseif(d[2]==20) then 
        addCategory(c,"Clothes")
        addCategory(c,getItemType("clothingType",d[8])[1].." (Clothes)")
    elseif(d[2]==21 or d[2]==122) then 
        addCategory(c,"Animated Foreground Blocks")
    elseif(d[2]==22) then 
        addCategory(c,"SFX Background Blocks")
    elseif(d[2]==23) then 
        addCategory(c,"Toggleable Background Blocks")
    elseif(d[2]==24) then 
        addCategory(c,"Bouncy Blocks")
    elseif(d[2]==25) then 
        addCategory(c,"Pain Blocks")
    elseif(d[2]==26) then 
        addCategory(c,"Portals")
    elseif(d[2]==27) then 
        addCategory(c,"Checkpoints")
    elseif(d[2]==28) then 
        addCategory(c,"Sheet Music")
    elseif(d[2]==29) then 
        addCategory(c,"Slippery Blocks")
    elseif(d[2]==31) then 
        addCategory(c,"Toggleable Blocks")
    elseif(d[2]==32) then 
        addCategory(c,"Chests")
    elseif(d[2]==33) then 
        addCategory(c,"Mailboxes")
    elseif(d[2]==34) then 
        addCategory(c,"Bulletin Boards")
    elseif(d[2]==35) then 
        addCategory(c,"Event Mystery Blocks")
    elseif(d[2]==36) then 
        addCategory(c,"Random Blocks")
    elseif(d[2]==37 or d[2]==129) then 
        addCategory(c,"Components")
    elseif(d[2]==38) then 
        addCategory(c,"Providers")
    elseif(d[2]==39) then 
        addCategory(c,"Chemical Combiners")
    elseif(d[2]==41 or d[2]==81 or d[2]==89) then 
        addCategory(c,"Weather Machines")
    elseif(d[2]==45) then 
        addCategory(c,"Toggleable Deadly Blocks")
    elseif(d[2]==52) then 
        addCategory(c,"Game Blocks")
    elseif(d[2]==56) then 
        addCategory(c,"Crystals")
    elseif(d[2]==60) then 
        addCategory(c,"Pushing Blocks")
    elseif(d[2]==64) then 
        addCategory(c,"Fish")
    elseif(d[2]==98) then 
        addCategory(c,"Ovens")
    elseif(d[2]==107) then 
        addCategory(c,"Artifacts")
    elseif(d[2]==108) then 
        addCategory(c,"Jelly Blocks")
    elseif(d[2]==113) then 
        addCategory(c,"CyBlock Bots")
    elseif(d[2]==114) then 
        addCategory(c,"CyBlock Commands")
    elseif(d[2]==115) then 
        addCategory(c,"Lucky Tokens")
    elseif(d[2]==120) then 
        addCategory(c,"Startopia Starship Blocks")
    elseif(d[2]==123 or d[2]==124 or d[2]==125) then 
        addCategory(c,"Autobreaking Blocks")
    end
    local isBlock = false
    if(ca[4] =="Foreground") then
        addCategory(c,"Foreground Blocks")
        isBlock = true
    end
    if(ca[4] =="Background") then
        addCategory(c,"Background Blocks")
        isBlock = true
    end
    if(d[7]==0 and isBlock) then
        addCategory(c,"Non-solid Blocks")
    end
    if(mw.title.getCurrentTitle().nsText=="") then
        table.insert(s,table.concat(c))
    end
    return table.concat(s)
end

return item