v50 Steam/Premium information for editors
  • v50 information can now be added to pages in the main namespace. v0.47 information can still be found in the DF2014 namespace. See here for more details on the new versioning policy.
  • Use this page to report any issues related to the migration.
This notice may be cached—the current version can be found here.

Divine equipment/script

From Dwarf Fortress Wiki
Jump to navigation Jump to search
angel_item_info={
    armor={
        pants={
            gen={},
            adj={
                "blocky",
                "rounded",
                "thin",
                "jagged"
            }
        },
        armor={
            gen={},
            adj={
                "bulging",
                "square",
                "segmented",
                "jagged"
            }
        },
        helm={
            gen={},
            adj={
                "conical",
                "rounded",
                "tall",
                "jagged"
            }
        },
        gloves={
            gen={},
            adj={
                "bulky",
                "intricate",
                "thin",
                "jagged"
            }
        },
        shoes={
            gen={},
            adj={
                "blocky",
                "sleek",
                "intricate",
                "jagged"
            }
        },
    },
    clothing={
        pants={
            gen={},
            adj={
                "split",
                "frilly",
                "sheer",
                "bell-shaped"
            }
        },
        armor={
            gen={},
            adj={
				"frilly",
				"sleek",
				"bulky",
				"asymmetrical",
            }
        },
        helm={
            gen={},
            adj={
				"frilly",
				"sleek",
				"bulky",
            }
        },
        gloves={
            gen={},
            adj={
				"bulky",
				"sleek",
				"frilly",
            }
        },
        shoes={
            gen={},
            adj={
				"frilly",
				"sheer",
				"bulky",
            }
        },
    },
    weapon={
        PIKE={
            gen={},
            adj={
                "curved",
                "wavy",
                "jagged",
                "thin"
            }
        },
        WHIP={
            gen={},
            adj={
                "bulky",
                "branching",
                "thin",
                "long",
            }
        },
        BOW={
            gen={},
            adj={
                "pointed",
                "tall",
                "jagged",
                "thin",
            }
        },
        BLOWGUN={
            gen={},
            adj={
                "curved",
                "wavy",
                "jagged",
                "thin"
            }
        },
        AXE={
            gen={},
            adj={
                "crescent",
                "jagged",
                "thin",
            }
        },
        SWORD={
            gen={},
            adj={
                "curved",
                "wavy",
                "jagged",
                "thin"
            }
        },
        DAGGER={
            gen={},
            adj={
                "curved",
                "twisted",
                "jagged",
                "thin",
            }
        },
        MACE={
            gen={},
            adj={
                "bent",
                "tall",
                "jagged",
                "thin",
            }
        },
        HAMMER={
            gen={},
            adj={
                "curved",
                "large-headed",
                "jagged",
                "thin",
            }
        },
        SPEAR={
            gen={},
            adj={
                "thick",
                "wavy",
                "jagged",
                "thin",
            }
        },
        CROSSBOW={
            gen={},
            adj={
                "sleek",
                "long",
                "jagged",
                "bulky",
            }
        },
    },
    ammo={
        ARROW={},
        BLOWDART={},
        BOLT={}
    },
    shield={
        gen={},
        adj={
            "curved",
            "square",
            "tall",
            "rectangular"
        }
    }
}

angel_item_info.armor.pants.gen.greaves=function()
    local lines={}
    -- some more variety-causing way to generate these?
    lines[#lines+1]="[NAME:greaves:greaves]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.armor.pants.adj).."]"
    lines[#lines+1]="[ARMORLEVEL:3]"
    lines[#lines+1]="[LBSTEP:MAX]"
    lines[#lines+1]="[SHAPED]"
    lines[#lines+1]="[LAYER:ARMOR]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:15]"
    lines[#lines+1]="[LAYER_PERMIT:30]"
    lines[#lines+1]="[MATERIAL_SIZE:6]"
    lines[#lines+1]="[METAL]"
    lines[#lines+1]="[BARRED]"
    lines[#lines+1]="[HARD]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.pants.gen.skirt=function()
    local lines={}
    lines[#lines+1]="[NAME:skirt:skirts]"
    lines[#lines+1]="[LBSTEP:1]"
    lines[#lines+1]="[LAYER:OVER]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:10]"
    lines[#lines+1]="[LAYER_PERMIT:100]"
    lines[#lines+1]="[MATERIAL_SIZE:2]"
    return {item=lines,weight=1}
end

angel_item_info.armor.armor.gen.breastplate=function()
    local lines={}
    lines[#lines+1]="[NAME:breastplate:breastplates]"
    lines[#lines+1]="[ARMORLEVEL:3]"
    lines[#lines+1]="[UBSTEP:0]"
    lines[#lines+1]="[LBSTEP:0]"
    lines[#lines+1]="[SHAPED]"
    lines[#lines+1]="[LAYER:ARMOR]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:20]"
    lines[#lines+1]="[LAYER_PERMIT:50]"
    lines[#lines+1]="[MATERIAL_SIZE:9]"
    return {item=lines,weight=1}
end

-- out into its own file?
angel_item_info.clothing.armor.gen.coat=function()
    local lines={}
    lines[#lines+1]="[NAME:coat:coats]"
    lines[#lines+1]="[UBSTEP:MAX]"
    lines[#lines+1]="[LBSTEP:1]"
    lines[#lines+1]="[LAYER:OVER]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:20]"
    lines[#lines+1]="[LAYER_PERMIT:50]"
    lines[#lines+1]="[MATERIAL_SIZE:5]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.armor.gen.shirt=function()
    local lines={}
    lines[#lines+1]="[NAME:shirt:shirts]"
    lines[#lines+1]="[UBSTEP:MAX]"
    lines[#lines+1]="[LBSTEP:0]"
    lines[#lines+1]="[LAYER:UNDER]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:10]"
    lines[#lines+1]="[LAYER_PERMIT:50]"
    lines[#lines+1]="[MATERIAL_SIZE:3]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.armor.gen.cloak=function()
    local lines={}
    lines[#lines+1]="[NAME:cloak:cloaks]"
    lines[#lines+1]="[UBSTEP:MAX]"
    lines[#lines+1]="[LBSTEP:1]"
    lines[#lines+1]="[LAYER:COVER]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:15]"
    lines[#lines+1]="[LAYER_PERMIT:150]"
    lines[#lines+1]="[MATERIAL_SIZE:5]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.armor.gen.tunic=function()
    local lines={}
    lines[#lines+1]="[NAME:tunic:tunics]"
    lines[#lines+1]="[UBSTEP:0]"
    lines[#lines+1]="[LBSTEP:1]"
    lines[#lines+1]="[LAYER:UNDER]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:10]"
    lines[#lines+1]="[LAYER_PERMIT:50]"
    lines[#lines+1]="[MATERIAL_SIZE:3]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.armor.gen.toga=function()
    local lines={}
    lines[#lines+1]="[NAME:toga:togas]"
    lines[#lines+1]="[UBSTEP:1]"
    lines[#lines+1]="[LBSTEP:1]"
    lines[#lines+1]="[LAYER:OVER]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:30]"
    lines[#lines+1]="[LAYER_PERMIT:100]"
    lines[#lines+1]="[MATERIAL_SIZE:5]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.armor.gen.cape=function()
    local lines={}
    lines[#lines+1]="[NAME:cape:capes]"
    lines[#lines+1]="[UBSTEP:0]"
    lines[#lines+1]="[LBSTEP:0]"
    lines[#lines+1]="[LAYER:COVER]"
    lines[#lines+1]="[COVERAGE:50]"
    lines[#lines+1]="[LAYER_SIZE:10]"
    lines[#lines+1]="[LAYER_PERMIT:300]"
    lines[#lines+1]="[MATERIAL_SIZE:3]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.armor.gen.vest=function()
    local lines={}
    lines[#lines+1]="[NAME:vest:vests]"
    lines[#lines+1]="[UBSTEP:0]"
    lines[#lines+1]="[LBSTEP:0]"
    lines[#lines+1]="[LAYER:OVER]"
    lines[#lines+1]="[COVERAGE:50]"
    lines[#lines+1]="[LAYER_SIZE:10]"
    lines[#lines+1]="[LAYER_PERMIT:50]"
    lines[#lines+1]="[MATERIAL_SIZE:2]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.armor.gen.dress=function()
    local lines={}
    lines[#lines+1]="[NAME:dress:dresses]"
    lines[#lines+1]="[UBSTEP:MAX]"
    lines[#lines+1]="[LBSTEP:MAX]"
    lines[#lines+1]="[LAYER:UNDER]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:10]"
    lines[#lines+1]="[LAYER_PERMIT:50]"
    lines[#lines+1]="[MATERIAL_SIZE:5]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.armor.gen.robe=function()
    local lines={}
    lines[#lines+1]="[NAME:robe:robes]"
    lines[#lines+1]="[UBSTEP:MAX]"
    lines[#lines+1]="[LBSTEP:MAX]"
    lines[#lines+1]="[LAYER:OVER]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:20]"
    lines[#lines+1]="[LAYER_PERMIT:100]"
    lines[#lines+1]="[MATERIAL_SIZE:6]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.armor.helm.gen.helm=function()
    local lines={}
    lines[#lines+1]="[NAME:helm:helms]"
    lines[#lines+1]="[ARMORLEVEL:1]"
    lines[#lines+1]="[METAL_ARMOR_LEVELS]"
    lines[#lines+1]="[SHAPED]"
    lines[#lines+1]="[LAYER:ARMOR]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:30]"
    lines[#lines+1]="[LAYER_PERMIT:20]"
    lines[#lines+1]="[MATERIAL_SIZE:2]"
    lines[#lines+1]="[BARRED]"
    lines[#lines+1]="[SCALED]"
    lines[#lines+1]="[LEATHER]"
    lines[#lines+1]="[SHAPED]"
    return {item=lines,weight=1}
end

angel_item_info.armor.helm.gen.cap=function()
    local lines={}
    lines[#lines+1]="[NAME:cap:caps]"
    lines[#lines+1]="[METAL_ARMOR_LEVELS]"
    lines[#lines+1]="[LAYER:OVER]"
    lines[#lines+1]="[COVERAGE:50]"
    lines[#lines+1]="[LAYER_SIZE:10]"
    lines[#lines+1]="[LAYER_PERMIT:15]"
    lines[#lines+1]="[MATERIAL_SIZE:1]"
    lines[#lines+1]="[LEATHER]"
    lines[#lines+1]="[HARD]"
    lines[#lines+1]="[METAL]"
    lines[#lines+1]="[SHAPED]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.helm.gen.hood=function()
    local lines={}
    lines[#lines+1]="[NAME:hood:hoods]"
    lines[#lines+1]="[LAYER:COVER]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:10]"
    lines[#lines+1]="[LAYER_PERMIT:100]"
    lines[#lines+1]="[MATERIAL_SIZE:2]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.helm.gen.turban=function()
    local lines={}
    lines[#lines+1]="[NAME:turban:turbans]"
    lines[#lines+1]="[LAYER:OVER]"
    lines[#lines+1]="[COVERAGE:50]"
    lines[#lines+1]="[LAYER_SIZE:20]"
    lines[#lines+1]="[LAYER_PERMIT:100]"
    lines[#lines+1]="[MATERIAL_SIZE:2]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.helm.gen.mask=function()
    local lines={}
    lines[#lines+1]="[NAME:mask:masks]"
    lines[#lines+1]="[LAYER:UNDER]"
    lines[#lines+1]="[COVERAGE:50]"
    lines[#lines+1]="[LAYER_SIZE:20]"
    lines[#lines+1]="[LAYER_PERMIT:10]"
    lines[#lines+1]="[MATERIAL_SIZE:2]"
    lines[#lines+1]="[LEATHER]"
    lines[#lines+1]="[HARD]"
    lines[#lines+1]="[METAL]"
    lines[#lines+1]="[BARRED]"
    lines[#lines+1]="[SCALED]"
    lines[#lines+1]="[SHAPED]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.helm.gen.veil_head=function()
    local lines={}
    lines[#lines+1]="[NAME:head veil:head veils]"
    lines[#lines+1]="[LAYER:OVER]"
    lines[#lines+1]="[COVERAGE:50]"
    lines[#lines+1]="[LAYER_SIZE:10]"
    lines[#lines+1]="[LAYER_PERMIT:100]"
    lines[#lines+1]="[MATERIAL_SIZE:2]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.helm.gen.veil_face=function()
    local lines={}
    lines[#lines+1]="[NAME:face veil:face veils]"
    lines[#lines+1]="[LAYER:UNDER]"
    lines[#lines+1]="[COVERAGE:50]"
    lines[#lines+1]="[LAYER_SIZE:10]"
    lines[#lines+1]="[LAYER_PERMIT:100]"
    lines[#lines+1]="[MATERIAL_SIZE:2]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.helm.gen.headscarf=function()
    local lines={}
    lines[#lines+1]="[NAME:headscarf:headscarves]"
    lines[#lines+1]="[LAYER:OVER]"
    lines[#lines+1]="[COVERAGE:50]"
    lines[#lines+1]="[LAYER_SIZE:10]"
    lines[#lines+1]="[LAYER_PERMIT:100]"
    lines[#lines+1]="[MATERIAL_SIZE:2]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.armor.gloves.gen.gauntlet=function()
    local lines={}
    lines[#lines+1]="[NAME:gauntlet:gauntlets]"
    lines[#lines+1]="[ARMORLEVEL:2]"
    lines[#lines+1]="[UPSTEP:1]"
    lines[#lines+1]="[SHAPED]"
    lines[#lines+1]="[LAYER:ARMOR]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:20]"
    lines[#lines+1]="[LAYER_PERMIT:15]"
    lines[#lines+1]="[MATERIAL_SIZE:2]"
    lines[#lines+1]="[SCALED]"
    lines[#lines+1]="[BARRED]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.gloves.gen.glove=function()
    local lines={}
    lines[#lines+1]="[NAME:glove:gloves]"
    lines[#lines+1]="[MATERIAL_SIZE:1]"
    lines[#lines+1]="[LAYER:UNDER]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:10]"
    lines[#lines+1]="[LAYER_PERMIT:10]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.gloves.gen.mitten=function()
    local lines={}
    lines[#lines+1]="[NAME:mitten:mittens]"
    lines[#lines+1]="[LAYER:COVER]"
    lines[#lines+1]="[COVERAGE:150]"
    lines[#lines+1]="[LAYER_SIZE:15]"
    lines[#lines+1]="[LAYER_PERMIT:20]"
    lines[#lines+1]="[MATERIAL_SIZE:1]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.armor.shoes.gen.boots_high=function()
    local lines={}
    lines[#lines+1]="[NAME:high boot:high boots]"
    lines[#lines+1]="[ARMORLEVEL:1]"
    lines[#lines+1]="[UPSTEP:1]"
    lines[#lines+1]="[METAL_ARMOR_LEVELS]"
    lines[#lines+1]="[LAYER:OVER]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:25]"
    lines[#lines+1]="[LAYER_PERMIT:15]"
    lines[#lines+1]="[MATERIAL_SIZE:2]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.armor.shoes.gen.boots_low=function()
    local lines={}
    lines[#lines+1]="[NAME:low boot:low boots]"
    lines[#lines+1]="[ARMORLEVEL:1]"
    lines[#lines+1]="[METAL_ARMOR_LEVELS]"
    lines[#lines+1]="[LAYER:OVER]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:25]"
    lines[#lines+1]="[LAYER_PERMIT:15]"
    lines[#lines+1]="[MATERIAL_SIZE:1]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.shoes.gen.shoes=function()
    local lines={}
    lines[#lines+1]="[NAME:shoe:shoes]"
    lines[#lines+1]="[LAYER:OVER]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:20]"
    lines[#lines+1]="[LAYER_PERMIT:15]"
    lines[#lines+1]="[MATERIAL_SIZE:1]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.shoes.gen.sandals=function()
    local lines={}
    lines[#lines+1]="[NAME:sandal:sandals]"
    lines[#lines+1]="[LAYER:OVER]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:25]"
    lines[#lines+1]="[LAYER_PERMIT:15]"
    lines[#lines+1]="[MATERIAL_SIZE:1]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.shoes.gen.chausses=function()
    local lines={}
    lines[#lines+1]="[NAME:chausse:chausses]"
    lines[#lines+1]="[UPSTEP:MAX]"
    lines[#lines+1]="[LAYER:UNDER]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:10]"
    lines[#lines+1]="[LAYER_PERMIT:15]"
    lines[#lines+1]="[MATERIAL_SIZE:3]"
    lines[#lines+1]="[LEATHER]"
    return {item=lines,weight=1}
end

angel_item_info.clothing.shoes.gen.socks=function()
    local lines={}
    lines[#lines+1]="[NAME:sock:socks]"
    lines[#lines+1]="[LAYER:UNDER]"
    lines[#lines+1]="[COVERAGE:100]"
    lines[#lines+1]="[LAYER_SIZE:10]"
    lines[#lines+1]="[LAYER_PERMIT:15]"
    lines[#lines+1]="[MATERIAL_SIZE:1]"
    return {item=lines,weight=1}
end

local function make_sword_func(name)
    return function()
        local lines={}
        lines[#lines+1]="[NAME:"..name.."]"
        lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.SWORD.adj).."]"
        lines[#lines+1]="[SIZE:300]"
        lines[#lines+1]="[SKILL:SWORD]"
        lines[#lines+1]="[TWO_HANDED:37500]"
        lines[#lines+1]="[MINIMUM_SIZE:32500]"
        lines[#lines+1]="[MATERIAL_SIZE:3]"
        lines[#lines+1]="[ATTACK:EDGE:20000:4000:slash:slashes:NO_SUB:1250]"
        lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
        lines[#lines+1]="[ATTACK:EDGE:50:2000:stab:stabs:NO_SUB:1000]"
        lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
        lines[#lines+1]="[ATTACK:BLUNT:20000:4000:slap:slaps:flat:1250]"
        lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
        lines[#lines+1]="[ATTACK:BLUNT:100:1000:strike:strikes:pommel:1000]"
        lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
        return {item=lines,weight=1}
    end
end

angel_item_info.weapon.SWORD.gen.sword=make_sword_func("sword:swords")

angel_item_info.weapon.SWORD.gen.blade=make_sword_func("blade:blades")

angel_item_info.weapon.PIKE.gen.pike=function()
    local lines={}
    lines[#lines+1]="[NAME:pike:pikes]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.PIKE.adj).."]"
    lines[#lines+1]="[SIZE:800]"
    lines[#lines+1]="[SKILL:PIKE]"
    lines[#lines+1]="[TWO_HANDED:77500]"
    lines[#lines+1]="[MINIMUM_SIZE:62500]"
    lines[#lines+1]="[MATERIAL_SIZE:4]"
    lines[#lines+1]="[ATTACK:EDGE:20:12000:stab:stabs:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ATTACK:BLUNT:10000:6000:bash:bashes:shaft:1250]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    return {item=lines,weight=1}
end

local function make_whip_func(name)
    return function()
        local lines={}
        lines[#lines+1]="[NAME:"..name.."]"
        lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.WHIP.adj).."]"
        lines[#lines+1]="[SIZE:300]"
        lines[#lines+1]="[SKILL:WHIP]"
        lines[#lines+1]="[TWO_HANDED:27500]"
        lines[#lines+1]="[MINIMUM_SIZE:22500]"
        lines[#lines+1]="[MATERIAL_SIZE:1]"
        lines[#lines+1]="[ATTACK:BLUNT:1:10:lash:lashes:NO_SUB:5000]"
        lines[#lines+1]="[ATTACK_PREPARE_AND_RECOVER:4:4]"
        lines[#lines+1]="[ATTACK_FLAG_BAD_MULTIATTACK]"
        return {item=lines,weight=1}
    end
end

angel_item_info.weapon.WHIP.gen.whip=make_whip_func("whip:whips")

angel_item_info.weapon.WHIP.gen.lash=make_whip_func("lash:lashes")

angel_item_info.weapon.WHIP.gen.scourge=function()
    local lines={}
    lines[#lines+1]="[NAME:scourge:scourges]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.WHIP.adj).."]"
    lines[#lines+1]="[SIZE:300]"
    lines[#lines+1]="[SKILL:WHIP]"
    lines[#lines+1]="[TWO_HANDED:27500]"
    lines[#lines+1]="[MINIMUM_SIZE:22500]"
    lines[#lines+1]="[MATERIAL_SIZE:1]"
    lines[#lines+1]="[ATTACK:EDGE:10:50:lash:lashes:NO_SUB:2000]"
    lines[#lines+1]="[ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ATTACK_FLAG_BAD_MULTIATTACK]"
    return {item=lines,weight=1}
end

-- if you want your angels to use a totally different kind of arrow, you're totally allowed to do that,
-- which is why there's this whole arrow table
angel_item_info.ammo.ARROW.thin=function()
    local lines={}
    lines[#lines+1]="[NAME:arrow:arrows]"
    lines[#lines+1]="[ADJECTIVE:thin]"
    lines[#lines+1]="[CLASS:ARROW]"
    lines[#lines+1]="[SIZE:150]"
    lines[#lines+1]="[ATTACK:EDGE:4:1000:stab:stabs:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    return {item=lines,weight=1}
end

angel_item_info.ammo.ARROW.jagged=function()
    local lines={}
    lines[#lines+1]="[NAME:arrow:arrows]"
    lines[#lines+1]="[ADJECTIVE:jagged]"
    lines[#lines+1]="[CLASS:ARROW]"
    lines[#lines+1]="[SIZE:150]"
    lines[#lines+1]="[ATTACK:EDGE:5:1000:stab:stabs:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    return {item=lines,weight=1}
end

angel_item_info.ammo.ARROW.wide_headed=function()
    local lines={}
    lines[#lines+1]="[NAME:arrow:arrows]"
    lines[#lines+1]="[ADJECTIVE:wide-headed]"
    lines[#lines+1]="[CLASS:ARROW]"
    lines[#lines+1]="[SIZE:150]"
    lines[#lines+1]="[ATTACK:EDGE:100:1000:stab:stabs:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    return {item=lines,weight=1}
end

angel_item_info.ammo.ARROW.cone_headed=function()
    local lines={}
    lines[#lines+1]="[NAME:arrow:arrows]"
    lines[#lines+1]="[ADJECTIVE:cone-headed]"
    lines[#lines+1]="[CLASS:ARROW]"
    lines[#lines+1]="[SIZE:175]"
    lines[#lines+1]="[ATTACK:EDGE:50:1000:stab:stabs:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    return {item=lines,weight=1}
end

angel_item_info.weapon.BOW.gen.bow=function(i,prefix)
    local lines={}
    lines[#lines+1]="[NAME:bow:bows]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.BOW.adj).."]"
    lines[#lines+1]="[SIZE:300]"
    lines[#lines+1]="[SKILL:SWORD]"
    lines[#lines+1]="[RANGED:BOW:ARROW]"
    lines[#lines+1]="[SHOOT_FORCE:1000]"
    lines[#lines+1]="[SHOOT_MAXVEL:200]"
    lines[#lines+1]="[TWO_HANDED:0]"
    lines[#lines+1]="[MINIMUM_SIZE:15000]"
    lines[#lines+1]="[MATERIAL_SIZE:3]"
    lines[#lines+1]="[ATTACK:BLUNT:10000:4000:bash:bashes:NO_SUB:1250]"
        lines[#lines+1]="[ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ITEM_AMMO:"..prefix.."WP_A"..tostring(i).."]"
    add_generated_info(lines)
    table_merge(lines,generate_from_list(angel_item_info.ammo.ARROW).item)
    return {item=lines,weight=1}
end

angel_item_info.ammo.BOLT.short=function()
    local lines={}
    lines[#lines+1]="[NAME:bolt:bolts]"
    lines[#lines+1]="[ADJECTIVE:short]"
    lines[#lines+1]="[CLASS:BOLT]"
    lines[#lines+1]="[SIZE:125]"
    lines[#lines+1]="[ATTACK:EDGE:5:500:stab:stabs:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    return {item=lines,weight=1}
end

angel_item_info.ammo.BOLT.long=function()
    local lines={}
    lines[#lines+1]="[NAME:bolt:bolts]"
    lines[#lines+1]="[ADJECTIVE:long]"
    lines[#lines+1]="[CLASS:BOLT]"
    lines[#lines+1]="[SIZE:175]"
    lines[#lines+1]="[ATTACK:EDGE:5:1000:stab:stabs:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    return {item=lines,weight=1}
end

angel_item_info.ammo.BOLT.jagged=function()
    local lines={}
    lines[#lines+1]="[NAME:bolt:bolts]"
    lines[#lines+1]="[ADJECTIVE:jagged]"
    lines[#lines+1]="[CLASS:BOLT]"
    lines[#lines+1]="[SIZE:150]"
    lines[#lines+1]="[ATTACK:EDGE:10:1000:stab:stabs:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    return {item=lines,weight=1}
end

angel_item_info.ammo.BOLT.thin=function()
    local lines={}
    lines[#lines+1]="[NAME:bolt:bolts]"
    lines[#lines+1]="[ADJECTIVE:thin]"
    lines[#lines+1]="[CLASS:BOLT]"
    lines[#lines+1]="[SIZE:150]"
    lines[#lines+1]="[ATTACK:EDGE:3:1500:stab:stabs:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    return {item=lines,weight=1}
end

angel_item_info.weapon.CROSSBOW.gen.crossbow=function(i,prefix)
    local lines={}
    lines[#lines+1]="[NAME:crossbow:crossbows]"
    lines[#lines+1]="[SIZE:400]"
    lines[#lines+1]="[SKILL:HAMMER]"
    lines[#lines+1]="[RANGED:CROSSBOW:BOLT]"
    lines[#lines+1]="[SHOOT_FORCE:1000]"
    lines[#lines+1]="[SHOOT_MAXVEL:200]"
    lines[#lines+1]="[TWO_HANDED:0]"
    lines[#lines+1]="[MINIMUM_SIZE:15000]"
    lines[#lines+1]="[MATERIAL_SIZE:3]"
    lines[#lines+1]="[ATTACK:BLUNT:10000:4000:bash:bashes:NO_SUB:1250]"
        lines[#lines+1]="[ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ITEM_AMMO:"..prefix.."WP_A"..tostring(i).."]"
    add_generated_info(lines)
    table_merge(lines,generate_from_list(angel_item_info.ammo.BOLT).item)
    return {item=lines,weight=1}
end

angel_item_info.ammo.BLOWDART.narrow=function()
    local lines={}
    lines[#lines+1]="[NAME:blowdart:blowdarts]"
    lines[#lines+1]="[ADJECTIVE:narrow]"
    lines[#lines+1]="[CLASS:BLOWDART]"
    lines[#lines+1]="[SIZE:20]"
    lines[#lines+1]="[ATTACK:EDGE:1:50:stick:sticks:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    return {item=lines,weight=1}
end

angel_item_info.ammo.BLOWDART.thick=function()
    local lines={}
    lines[#lines+1]="[NAME:blowdart:blowdarts]"
    lines[#lines+1]="[ADJECTIVE:thick]"
    lines[#lines+1]="[CLASS:BLOWDART]"
    lines[#lines+1]="[SIZE:40]"
    lines[#lines+1]="[ATTACK:EDGE:2:50:stick:sticks:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    return {item=lines,weight=1}
end

angel_item_info.ammo.BLOWDART.tapered=function()
    local lines={}
    lines[#lines+1]="[NAME:blowdart:blowdarts]"
    lines[#lines+1]="[ADJECTIVE:narrow]"
    lines[#lines+1]="[CLASS:BLOWDART]"
    lines[#lines+1]="[SIZE:30]"
    lines[#lines+1]="[ATTACK:EDGE:1:50:stick:sticks:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    return {item=lines,weight=1}
end

angel_item_info.ammo.BLOWDART.double=function()
    local lines={}
    lines[#lines+1]="[NAME:blowdart:blowdarts]"
    lines[#lines+1]="[ADJECTIVE:double-tipped]"
    lines[#lines+1]="[CLASS:BLOWDART]"
    lines[#lines+1]="[SIZE:25]"
    lines[#lines+1]="[ATTACK:EDGE:2:50:stick:sticks:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    return {item=lines,weight=1}
end

angel_item_info.weapon.BLOWGUN.gen.blowgun=function(i,prefix)
    local lines={}
    lines[#lines+1]="[NAME:blowgun:blowguns]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.BOW.adj).."]"
    lines[#lines+1]="[SIZE:150]"
    lines[#lines+1]="[SKILL:SWORD]"
    lines[#lines+1]="[RANGED:BLOWGUN:BLOWDART]"
    lines[#lines+1]="[SHOOT_FORCE:100]"
    lines[#lines+1]="[SHOOT_MAXVEL:1000]"
    lines[#lines+1]="[TWO_HANDED:0]"
    lines[#lines+1]="[MINIMUM_SIZE:5000]"
    lines[#lines+1]="[MATERIAL_SIZE:2]"
    lines[#lines+1]="[ATTACK:BLUNT:10000:4000:bash:bashes:NO_SUB:1250]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ITEM_AMMO:"..prefix.."WP_A"..tostring(i).."]"
    add_generated_info(lines)
    table_merge(lines,generate_from_list(angel_item_info.ammo.BLOWDART).item)
    return {item=lines,weight=1}
end

angel_item_info.weapon.AXE.gen.battle=function(i,prefix)
    local lines={}
    lines[#lines+1]="[NAME:battle axe:battle axes]"
    lines[#lines+1]="[SIZE:800]"
    lines[#lines+1]="[SKILL:AXE]"
    lines[#lines+1]="[TWO_HANDED:47500]"
    lines[#lines+1]="[MINIMUM_SIZE:42500]"
    lines[#lines+1]="[MATERIAL_SIZE:4]"
    lines[#lines+1]="[ATTACK:EDGE:40000:6000:hack:hacks:NO_SUB:1250]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ATTACK:BLUNT:40000:6000:slap:slaps:flat:1250]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ATTACK:BLUNT:100:1000:strike:strikes:pommel:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.AXE.adj).."]"
    return {item=lines,weight=1}
end

angel_item_info.weapon.AXE.gen.halberd=function(i,prefix)
    local lines={}
    lines[#lines+1]="[NAME:halberd:halberds]"
    lines[#lines+1]="[SIZE:1200]"
    lines[#lines+1]="[SKILL:AXE]"
    lines[#lines+1]="[TWO_HANDED:77500]"
    lines[#lines+1]="[MINIMUM_SIZE:62500]"
    lines[#lines+1]="[MATERIAL_SIZE:5]"
    lines[#lines+1]="[ATTACK:EDGE:20000:8000:slash:slashes:NO_SUB:1250]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ATTACK:EDGE:50:2000:stab:stabs:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ATTACK:BLUNT:20000:6000:bash:bashes:shaft:1250]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.AXE.adj).."]"
    return {item=lines,weight=1}
end

angel_item_info.weapon.AXE.gen.great=function(i,prefix)
    local lines={}
    lines[#lines+1]="[NAME:great axe:great axes]"
    lines[#lines+1]="[SIZE:1300]"
    lines[#lines+1]="[SKILL:AXE]"
    lines[#lines+1]="[TWO_HANDED:77500]"
    lines[#lines+1]="[MINIMUM_SIZE:62500]"
    lines[#lines+1]="[MATERIAL_SIZE:5]"
    lines[#lines+1]="[ATTACK:EDGE:60000:8000:hack:hacks:NO_SUB:1250]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ATTACK:BLUNT:60000:8000:slap:slaps:flat:1250]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ATTACK:BLUNT:100:1000:strike:strikes:pommel:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.AXE.adj).."]"
    return {item=lines,weight=1}
end

angel_item_info.weapon.DAGGER.gen.dagger=function(i,prefix)
    local lines={}
    lines[#lines+1]="[NAME:dagger:daggers]"
    lines[#lines+1]="[SIZE:200]"
    lines[#lines+1]="[SKILL:DAGGER]"
    lines[#lines+1]="[TWO_HANDED:27500]"
    lines[#lines+1]="[MINIMUM_SIZE:5000]"
    lines[#lines+1]="[MATERIAL_SIZE:1]"
    lines[#lines+1]="[ATTACK:EDGE:1000:800:slash:slashes:NO_SUB:1250]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ATTACK:EDGE:5:1000:stab:stabs:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ATTACK:BLUNT:20:600:strike:strikes:pommel:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.DAGGER.adj).."]"
    return {item=lines,weight=1}
end

angel_item_info.weapon.DAGGER.gen.knife=function(i,prefix)
    local lines={}
    lines[#lines+1]="[NAME:knife:knives]"
    lines[#lines+1]="[SIZE:200]"
    lines[#lines+1]="[SKILL:DAGGER]"
    lines[#lines+1]="[TWO_HANDED:27500]"
    lines[#lines+1]="[MINIMUM_SIZE:5000]"
    lines[#lines+1]="[MATERIAL_SIZE:1]"
    lines[#lines+1]="[ATTACK:EDGE:1000:800:slash:slashes:NO_SUB:1250]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ATTACK:EDGE:5:1000:stab:stabs:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.DAGGER.adj).."]"
    return {item=lines,weight=1}
end

angel_item_info.weapon.DAGGER.gen.nail=function(i,prefix)
    local lines={}
    lines[#lines+1]="[NAME:nail:nails]"
    lines[#lines+1]="[SIZE:200]"
    lines[#lines+1]="[SKILL:DAGGER]"
    lines[#lines+1]="[TWO_HANDED:27500]"
    lines[#lines+1]="[MINIMUM_SIZE:5000]"
    lines[#lines+1]="[MATERIAL_SIZE:1]"
    lines[#lines+1]="[ATTACK:EDGE:5:1000:stab:stabs:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.DAGGER.adj).."]"
    return {item=lines,weight=1}
end

angel_item_info.weapon.DAGGER.gen.spike=function(i,prefix)
    local lines={}
    lines[#lines+1]="[NAME:spike:spikes]"
    lines[#lines+1]="[SIZE:200]"
    lines[#lines+1]="[SKILL:DAGGER]"
    lines[#lines+1]="[TWO_HANDED:27500]"
    lines[#lines+1]="[MINIMUM_SIZE:5000]"
    lines[#lines+1]="[MATERIAL_SIZE:1]"
    lines[#lines+1]="[ATTACK:EDGE:5:1000:stab:stabs:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.DAGGER.adj).."]"
    return {item=lines,weight=1}
end

angel_item_info.weapon.DAGGER.gen.prong=function(i,prefix)
    local lines={}
    lines[#lines+1]="[NAME:prong:prongs]"
    lines[#lines+1]="[SIZE:200]"
    lines[#lines+1]="[SKILL:DAGGER]"
    lines[#lines+1]="[TWO_HANDED:27500]"
    lines[#lines+1]="[MINIMUM_SIZE:5000]"
    lines[#lines+1]="[MATERIAL_SIZE:1]"
    lines[#lines+1]="[ATTACK:EDGE:5:1000:stab:stabs:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.DAGGER.adj).."]"
    return {item=lines,weight=1}
end

angel_item_info.weapon.MACE.gen.mace=function(i,prefix)
    local lines={}
    lines[#lines+1]="[NAME:mace:maces]"
    lines[#lines+1]="[SIZE:800]"
    lines[#lines+1]="[SKILL:MACE]"
    lines[#lines+1]="[TWO_HANDED:37500]"
    lines[#lines+1]="[MINIMUM_SIZE:32500]"
    lines[#lines+1]="[MATERIAL_SIZE:3]"
    lines[#lines+1]="[ATTACK:BLUNT:20:200:bash:bashes:NO_SUB:2000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.MACE.adj).."]"
    return {item=lines,weight=1}
end

angel_item_info.weapon.HAMMER.gen.war_hammer=function(i,prefix)
    local lines={}
    lines[#lines+1]="[NAME:war hammer:war hammers]"
    lines[#lines+1]="[SIZE:400]"
    lines[#lines+1]="[SKILL:HAMMER]"
    lines[#lines+1]="[TWO_HANDED:37500]"
    lines[#lines+1]="[MINIMUM_SIZE:32500]"
    lines[#lines+1]="[MATERIAL_SIZE:3]"
    lines[#lines+1]="[ATTACK:BLUNT:10:200:bash:bashes:NO_SUB:2000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.HAMMER.adj).."]"
    return {item=lines,weight=1}
end

angel_item_info.weapon.HAMMER.gen.maul=function(i,prefix)
    local lines={}
    lines[#lines+1]="[NAME:maul:mauls]"
    lines[#lines+1]="[SIZE:1300]"
    lines[#lines+1]="[SKILL:HAMMER]"
    lines[#lines+1]="[TWO_HANDED:77500]"
    lines[#lines+1]="[MINIMUM_SIZE:62500]"
    lines[#lines+1]="[MATERIAL_SIZE:5]"
    lines[#lines+1]="[ATTACK:BLUNT:100:6000:bash:bashes:NO_SUB:2000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.HAMMER.adj).."]"
    return {item=lines,weight=1}
end

angel_item_info.weapon.SPEAR.gen.spear=function(i,prefix)
    local lines={}
    lines[#lines+1]="[NAME:spear:spears]"
    lines[#lines+1]="[SIZE:400]"
    lines[#lines+1]="[SKILL:SPEAR]"
    lines[#lines+1]="[TWO_HANDED:47500]"
    lines[#lines+1]="[MINIMUM_SIZE:5000]"
    lines[#lines+1]="[MATERIAL_SIZE:3]"
    lines[#lines+1]="[ATTACK:EDGE:20:10000:stab:stabs:NO_SUB:1000]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ATTACK:BLUNT:10000:6000:bash:bashes:shaft:1250]"
    lines[#lines+1]="    [ATTACK_PREPARE_AND_RECOVER:3:3]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.weapon.SPEAR.adj).."]"
    return {item=lines,weight=1}
end

angel_item_info.shield.gen.shield=function(i,prefix)
    local lines={}
    lines[#lines+1]="[NAME:shield:shields]"
    lines[#lines+1]="[ARMORLEVEL:2]"
    lines[#lines+1]="[BLOCKCHANCE:20]"
    lines[#lines+1]="[UPSTEP:2]"
    lines[#lines+1]="[MATERIAL_SIZE:4]"
    lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.shield.adj).."]"
    return {item=lines,weight=1}
end

angel_item_gens={}

angel_item_gens.default=function(prefix,tokens)
    local weapon_num=5
    local shield_num=1
    local a_pants_num=1
    local c_pants_num=1
    local a_armor_num=1
    local c_armor_num=1
    local a_helm_num=1
    local c_helm_num=1
    local a_gloves_num=1
    local c_gloves_num=1
    local a_shoes_num=1
    local c_shoes_num=1
    local lines={}
    local tokens={
        WEAPON={},
        AMMO={},
        SHIELD={},
        ARMOR={},
        HELM={},
        GLOVES={},
        SHOES={},
        PANTS={}
    }
    for i=1,a_pants_num do
        local tok=prefix.."APN"..tostring(i)
        tokens.PANTS[#tokens.PANTS+1]=tok
        lines[#lines+1]="[ITEM_PANTS:"..tok.."]"
        add_generated_info(lines)
        table_merge(lines,generate_from_list(angel_item_info.armor.pants.gen,i,prefix).item)
        lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.armor.pants.adj).."]"
        lines[#lines+1]="[METAL]"
        lines[#lines+1]="[HARD]"
    end
    for i=1,c_pants_num do
        local tok=prefix.."CPN"..tostring(i)
        tokens.PANTS[#tokens.PANTS+1]=tok
        lines[#lines+1]="[ITEM_PANTS:"..tok.."]"
        add_generated_info(lines)
        table_merge(lines,generate_from_list(angel_item_info.clothing.pants.gen,i,prefix).item)
        lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.clothing.pants.adj).."]"
        lines[#lines+1]="[SOFT]"
        lines[#lines+1]="[STRUCTURAL_ELASTICITY_WOVEN_THREAD]"
    end
    for i=1,a_armor_num do
        local tok=prefix.."AAR"..tostring(i)
        tokens.ARMOR[#tokens.ARMOR+1]=tok
        lines[#lines+1]="[ITEM_ARMOR:"..tok.."]"
        add_generated_info(lines)
        table_merge(lines,generate_from_list(angel_item_info.armor.armor.gen,i,prefix).item)
        lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.armor.armor.adj).."]"
        lines[#lines+1]="[HARD]"
        lines[#lines+1]="[METAL]"
    end
    for i=1,c_armor_num do
        local tok=prefix.."CAR"..tostring(i)
        tokens.ARMOR[#tokens.ARMOR+1]=tok
        lines[#lines+1]="[ITEM_ARMOR:"..tok.."]"
        add_generated_info(lines)
        table_merge(lines,generate_from_list(angel_item_info.clothing.armor.gen,i,prefix).item)
        lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.clothing.armor.adj).."]"
        lines[#lines+1]="[SOFT]"
        lines[#lines+1]="[STRUCTURAL_ELASTICITY_WOVEN_THREAD]"
    end
    for i=1,a_helm_num do
        local tok=prefix.."AHM"..tostring(i)
        tokens.HELM[#tokens.HELM+1]=tok
        lines[#lines+1]="[ITEM_HELM:"..tok.."]"
        add_generated_info(lines)
        table_merge(lines,generate_from_list(angel_item_info.armor.helm.gen,i,prefix).item)
        lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.armor.helm.adj).."]"
        lines[#lines+1]="[HARD]"
        lines[#lines+1]="[METAL]"
    end
    for i=1,c_helm_num do
        local tok=prefix.."CHM"..tostring(i)
        tokens.HELM[#tokens.HELM+1]=tok
        lines[#lines+1]="[ITEM_HELM:"..tok.."]"
        add_generated_info(lines)
        table_merge(lines,generate_from_list(angel_item_info.clothing.helm.gen,i,prefix).item)
        lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.clothing.helm.adj).."]"
        lines[#lines+1]="[SOFT]"
        lines[#lines+1]="[STRUCTURAL_ELASTICITY_WOVEN_THREAD]"
    end
    for i=1,a_gloves_num do
        local tok=prefix.."AGL"..tostring(i)
        tokens.GLOVES[#tokens.GLOVES+1]=tok
        lines[#lines+1]="[ITEM_GLOVES:"..tok.."]"
        add_generated_info(lines)
        table_merge(lines,generate_from_list(angel_item_info.armor.gloves.gen,i,prefix).item)
        lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.armor.gloves.adj).."]"
        lines[#lines+1]="[METAL]"
        lines[#lines+1]="[HARD]"
    end
    for i=1,c_gloves_num do
        local tok=prefix.."CGL"..tostring(i)
        tokens.GLOVES[#tokens.GLOVES+1]=tok
        lines[#lines+1]="[ITEM_GLOVES:"..tok.."]"
        add_generated_info(lines)
        table_merge(lines,generate_from_list(angel_item_info.clothing.gloves.gen,i,prefix).item)
        lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.clothing.gloves.adj).."]"
        lines[#lines+1]="[SOFT]"
        lines[#lines+1]="[STRUCTURAL_ELASTICITY_WOVEN_THREAD]"
    end
    for i=1,a_shoes_num do
        local tok=prefix.."ASH"..tostring(i)
        tokens.SHOES[#tokens.SHOES+1]=tok
        lines[#lines+1]="[ITEM_SHOES:"..tok.."]"
        add_generated_info(lines)
        table_merge(lines,generate_from_list(angel_item_info.armor.shoes.gen,i,prefix).item)
        lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.armor.shoes.adj).."]"
        lines[#lines+1]="[METAL]"
        lines[#lines+1]="[HARD]"
    end
    for i=1,c_shoes_num do
        local tok=prefix.."CSH"..tostring(i)
        tokens.SHOES[#tokens.SHOES+1]=tok
        lines[#lines+1]="[ITEM_SHOES:"..tok.."]"
        add_generated_info(lines)
        table_merge(lines,generate_from_list(angel_item_info.clothing.shoes.gen,i,prefix).item)
        lines[#lines+1]="[ADJECTIVE:"..pick_random(angel_item_info.clothing.shoes.adj).."]"
        lines[#lines+1]="[SOFT]"
        lines[#lines+1]="[STRUCTURAL_ELASTICITY_WOVEN_THREAD]"
    end
    local available_skills={
        "PIKE",
        "WHIP",
        "BOW",
        "BLOWGUN",
        "AXE",
        "SWORD",
        "DAGGER",
        "MACE",
        "HAMMER",
        "SPEAR",
        "CROSSBOW"
    }
    for i=1,weapon_num do
        local tok=prefix.."WP"..tostring(i)
        tokens.WEAPON[#tokens.WEAPON+1]=tok
        lines[#lines+1]="[ITEM_WEAPON:"..tok.."]"
        add_generated_info(lines)
        local skill=pick_random_no_replace(available_skills)
        table_merge(lines,generate_from_list(angel_item_info.weapon[skill].gen,i,prefix).item)
    end
    for i=1,shield_num do
        local tok=prefix.."SH"..tostring(i)
        tokens.SHIELD[#tokens.SHIELD+1]=tok
        lines[#lines+1]="[ITEM_SHIELD:"..tok.."]"
        add_generated_info(lines)
        table_merge(lines,generate_from_list(angel_item_info.shield.gen,i,prefix).item)
    end
    return {lines=lines,weight=1,tokens=tokens}
end
CancelHideAbout

Rating Divine equipment/script