Your Digital Media Has Never Looked So Good

 
User avatar
Komag
Topic Author
Posts: 808
Joined: Fri Aug 22, 2014 3:42 am

"Internal limit size exceeded" compile error - function with lots of "elseif"s

Sat Oct 14, 2017 3:04 pm

This is a new error I've never seen before:

*** ERROR compiling /pkg:/source/obj.brs:
Internal limit size exceeded. (compile error &hae) in pkg:/source/obj.brs(3394)

Line 3394 is the "END IF" of a very large IF statement with many many ELSEIF lines. This is my object list for all Things and Items in the game. I've never heard of a limit like this - what is the limit? I'll probably just have to restructure how I do it, but if there is any insight, that would be appreciated.

A quick count is about 240 ELSEIF lines

Here's the whole function:
(I tried to put the whole function but it's far over the 60000 character limit for making a forums post! So here is a part of it...
IF objct = "blocker"
 objct = {
 kind: "infoTh"
 'kind: "block" ' If we use this, then it would block flying Items, I think I don't want that
 name: "blocker"
 objNm: "blocker"
 blocker: TRUE
 'vis: FALSE
 swap: TRUE
 }
 '============== ITEMS ===============
 ELSEIF objct = "handL" ' Only for HUD
 objct = {
 sprite: ["sprite_handL", "sprite_handL_2", "sprite_handL_3"]
 }
 ELSEIF objct = "handR" ' Only for HUD
 objct = {
 sprite: ["sprite_handR", "sprite_handR_2", "sprite_handR_3"]
 }
 ELSEIF objct = "short sword" ' 5
 c = 5
 objct = {
 kind: "005 sword"
 name: "short sword"
 objNm: "short sword"
 code: c
 blocker: FALSE
 sprite: ["sprite_sword1", "sprite_sword1_2", "sprite_sword1_3"]
 spriteDraw: FALSE
 inven: {
 weight: 1
 value: 5
 equip: TRUE
 slot: "ield" ' Match last 4 of "right wield" OR "left wield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 cd: 8 ' Cooldown, in cycles
 }
 statsArr: [ ["att", 2] ]
 dscr: getCreateItemDscr(c) ' "SHORT SWORD: A short sturdy blade of iron, simple and effective."
 }
 ELSEIF objct = "cutlass" ' 6
 c = 6
 objct = {
 kind: "005 sword"
 name: "cutlass"
 objNm: "cutlass"
 code: c
 blocker: FALSE
 sprite: ["sprite_sword2", "sprite_sword2_2", "sprite_sword2_3"]
 spriteDraw: FALSE
 inven: {
 weight: 1.2
 value: 8
 equip: TRUE
 slot: "ield" ' Match last 4 of "right wield" OR "left wield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 cd: 10 ' Cooldown, in cycles
 }
 statsArr: [ ["att", 3] ]
 dscr: getCreateItemDscr(c) ' "CUTLASS: Nautical in design, with a slight curve like the bow of a ship, this blade will stab and slice as you see fit."
 }
 ELSEIF objct = "vorpal sabre" ' 7
 c = 7
 objct = {
 kind: "005 sword"
 name: "vorpal sabre"
 objNm: "vorpal sabre"
 code: c
 blocker: FALSE
 sprite: ["sprite_sword3", "sprite_sword3_2", "sprite_sword3_3"]
 spriteDraw: FALSE
 inven: {
 weight: 1
 value: 35
 equip: TRUE
 slot: "ield" ' Match last 4 of "right wield" OR "left wield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 cd: 6 ' Cooldown, in cycles
 }
 statsArr: [ ["att", 5] ]
 dscr: getCreateItemDscr(c) ' "VORPAL SABRE: This exotic blade was forged in Ironheart and vorpalized, at great expense, in Zarehm so that its edge forms a mathematical line of nearly infinite sharpness."
 }
 ELSEIF objct = "knife" ' 10
 c = 10
 objct = {
 kind: "010 dagger"
 name: "knife"
 objNm: "knife"
 code: c
 blocker: FALSE
 sprite: ["sprite_dagger1", "sprite_dagger1_2", "sprite_dagger1_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.3
 value: 1
 equip: TRUE
 slot: "ield" ' Match last 4 of "right wield" OR "left wield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 cd: 6 ' Cooldown, in cycles
 }
 statsArr: [ ["att", 1] ]
 dscr: getCreateItemDscr(c) ' "KNIFE: Thieves and brigands often brandish the simple knife because they cannot afford anything better. Nonetheless, it can cause serious damage."
 }
 ELSEIF objct = "dagger" ' 11
 c = 11
 objct = {
 kind: "010 dagger"
 name: "dagger"
 objNm: "dagger"
 code: c
 blocker: FALSE
 sprite: ["sprite_dagger2", "sprite_dagger2_2", "sprite_dagger2_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.8
 value: 2
 equip: TRUE
 slot: "ield" ' Match last 4 of "right wield" OR "left wield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 cd: 8 ' Cooldown, in cycles
 }
 'statsArr: [ ["att", 2] ]
 statsArr: [ ["att", 1000] ]
 dscr: getCreateItemDscr(c) ' "DAGGER: A short iron blade, easily concealed, and quite deadly in the skilled hand."
 }
 ELSEIF objct = "severance blade" ' 12
 c = 12
 objct = {
 kind: "010 dagger"
 name: "severance blade"
 objNm: "severance blade"
 code: c
 blocker: FALSE
 sprite: ["sprite_dagger3", "sprite_dagger3_2", "sprite_dagger3_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.3
 value: 45
 equip: TRUE
 slot: "ield" ' Match last 4 of "right wield" OR "left wield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 cd: 4 ' Cooldown, in cycles
 }
 statsArr: [ ["att", 6] ]
 dscr: getCreateItemDscr(c) ' "SEVERANCE BLADE: Unnervingly light, this slender weapon has been given a dark enchantment which prevents pierced flesh from clotting or cauterizing for several hours longer than usual."
 }
 ELSEIF objct = "rapier" ' 15
 c = 15
 objct = {
 kind: "015 finesse"
 name: "rapier"
 objNm: "rapier"
 code: c
 blocker: FALSE
 sprite: ["sprite_sword6", "sprite_sword6_2", "sprite_sword6_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.8
 value: 12
 equip: TRUE
 slot: "ield" ' Match last 4 of "right wield" OR "left wield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 cd: 8 ' Cooldown, in cycles
 }
 statsArr: [ ["att", 4] ]
 dscr: getCreateItemDscr(c) ' "RAPIER: As a finesse weapon, the thin-bladed rapier requires training and skill to be most effective."
 }
 ELSEIF objct = "middonian backsword" ' 16
 c = 16
 objct = {
 kind: "015 finesse"
 name: "middonian backsword"
 objNm: "middonian backsword"
 code: c
 blocker: FALSE
 sprite: ["sprite_sword7", "sprite_sword7_2", "sprite_sword7_3"]
 spriteDraw: FALSE
 inven: {
 weight: 1.2
 value: 28
 equip: TRUE
 slot: "ield" ' Match last 4 of "right wield" OR "left wield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 cd: 10 ' Cooldown, in cycles
 }
 statsArr: [ ["att", 7] ]
 dscr: getCreateItemDscr(c) ' "MIDDONIAN BACKSWORD: A particular single-edged sword, the clannish fighters of Middoni developed its use into a lethal artform rarely shared outside that city."
 }
 ELSEIF objct = "torch" ' 20
 c = 20
 objct = {
 kind: "020 club"
 name: "torch"
 objNm: "torch"
 code: c
 blocker: FALSE
 spOrAnim1: FALSE
 spOrAnims: [ ["anim_torch_lit", "anim_torch_lit_2", "anim_torch_lit_2"]
 ["sprite_torch", "sprite_torch_2", "sprite_torch_3"] ]
 spriteDraw: FALSE
 inven: {
 weight: 1
 value: 1
 equip: TRUE
 slot: "ield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 cd: 8 ' Cooldown, in cycles
 destroy: FALSE
 }
 fuel: m.sy.torchLife
 litOn: FALSE
 bright: 0
 dM: 1 ' Distance multiplier
 onLMap: FALSE
 statsArr: [ ["att", 1] ]
 stats2Arr: [ ["fire", 2] ]
 stats2Bool: "litOn"
 effect: [torchToggle]
 dscr: getCreateItemDscr(c) ' "TORCH: A simple wooden stave, banded with an oil soaked wick at one end, it can be used as a club while in-hand and continues to serve as a light source when not equipped. Its fuel is limited and it will eventually burn out."
 }
 ELSEIF objct = "club" ' 21
 c = 21
 objct = {
 kind: "020 club"
 name: "club"
 objNm: "club"
 code: c
 blocker: FALSE
 sprite: ["sprite_club", "sprite_club_2", "sprite_club_3"]
 spriteDraw: FALSE
 inven: {
 weight: 2.4
 value: 0
 equip: TRUE
 slot: "ield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: ""
 cd: 14
 }
 statsArr: [ ["att", 2] ]
 dscr: getCreateItemDscr(c) ' "CLUB: A dense piece of hardwood, worn to rounded lumpy edges and stained through brutal use."
 }
 ELSEIF objct = "earl's mace" ' 22
 c = 22
 objct = {
 kind: "020 club"
 name: "earl's mace"
 objNm: "earl's mace"
 code: c
 blocker: FALSE
 sprite: ["sprite_mace", "sprite_mace_2", "sprite_mace_3"]
 spriteDraw: FALSE
 inven: {
 weight: 2.8
 value: 16
 equip: TRUE
 slot: "ield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: ""
 cd: 12
 }
 statsArr: [ ["att", 6] ]
 dscr: getCreateItemDscr(c) ' "EARL'S MACE: Constructed of enduring steel, its head is encircled with a series of spiked flanges. This style of mace took on the moniker ""earl"" after the legendary questings of Omner, the first Earl of Stalwart Row in Ironheart, it being his preferred weapon."
 }
 ELSEIF objct = "sling" ' 25
 c = 25
 objct = {
 kind: "025 ranged"
 name: "sling"
 objNm: "sling"
 code: c
 blocker: FALSE
 sprite: ["sprite_sling", "sprite_sling_2", "sprite_sling_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.2
 value: 3
 equip: TRUE
 slot: "ield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: ""
 cd: 16 ' Cooldown, in cycles
 }
 ranged: ["rock"]
 statsArr: [ ["att", 1] ]
 dscr: getCreateItemDscr(c)
 }
 ELSEIF objct = "short bow" ' 26
 c = 26
 objct = {
 kind: "025 ranged"
 name: "short bow"
 objNm: "short bow"
 code: c
 blocker: FALSE
 sprite: ["sprite_bow1", "sprite_bow1_2", "sprite_bow1_3"]
 spriteDraw: FALSE
 inven: {
 weight: 1
 value: 7
 equip: TRUE
 slot: "ield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: ""
 cd: 14 ' Cooldown, in cycles
 }
 ranged: ["broad arrow", "fire arrow"]
 statsArr: [ ["att", 2] ]
 dscr: getCreateItemDscr(c) ' "SHORT BOW: A simple small wooden bow, strung straight, effective but not overpowering, this is good for the inexperienced."
 }
 ELSEIF objct = "reflex bow" ' 27
 c = 27
 objct = {
 kind: "025 ranged"
 name: "reflex bow"
 objNm: "reflex bow"
 code: c
 blocker: FALSE
 sprite: ["sprite_bow2", "sprite_bow2_2", "sprite_bow2_3"]
 spriteDraw: FALSE
 inven: {
 weight: 1.2
 value: 14
 equip: TRUE
 slot: "ield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: ""
 cd: 18 ' Cooldown, in cycles
 }
 ranged: ["broad arrow", "fire arrow"]
 statsArr: [ ["att", 4] ]
 dscr: getCreateItemDscr(c) ' "REFLEX BOW: Composited of maple, spruce, oryx horn, and wild deer sinew for maximum flexibility, the recurve lends greater shot strength to your ranged attacks."
 }
 ELSEIF objct = "supernal bow" ' 28
 c = 28
 objct = {
 kind: "025 ranged"
 name: "supernal bow"
 objNm: "supernal bow"
 code: c
 blocker: FALSE
 sprite: ["sprite_bow3", "sprite_bow3_2", "sprite_bow3_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.5
 value: 48
 equip: TRUE
 slot: "ield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: ""
 cd: 12 ' Cooldown, in cycles
 }
 ranged: ["broad arrow", "fire arrow"]
 statsArr: [ ["att", 8] ]
 dscr: getCreateItemDscr(c) ' "SUPERNAL BOW: Anciently blessed by the goddess Sariah, and stolen from Oblasia by the brazen thief Esrom, it has been lost for centuries until now. Holy magic seems to have preserved it's fibers; even the string has nary a wisp of fray."
 }
 ELSEIF objct = "rock" ' 30
 c = 30
 objct = {
 kind: "030 throwing"
 name: "rock"
 objNm: "rock"
 code: c
 blocker: FALSE
 spOrAnim1: FALSE
 spOrAnims: [ ["anim_rockAn", "anim_rockAn_2", "anim_rockAn_3"]
 ["sprite_rock", "sprite_rock_2", "sprite_rock_3"] ]
 spriteDraw: FALSE
 inven: {
 weight: 0.5
 value: 0
 stack: 1
 stackW: 0.5
 stackV: 0
 equip: TRUE
 slot: "ield" ' Match last 4 of "right wield" OR "left wield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 cd: 4 ' Cooldown, in cycles
 }
 frPlyr: FALSE
 ranged: ["rock"]
 statsArr: [ ["att", 1] ]
' sticky: FALSE
 dscr: getCreateItemDscr(c) ' "ROCK: A fist-sized stone capable of inflicting some damage if thrown well."
 }
 ELSEIF objct = "throwing star" ' 31
 c = 31
 objct = {
 kind: "030 throwing"
 name: "throwing star"
 objNm: "throwing star"
 code: c
 blocker: FALSE
 spOrAnim1: FALSE
 spOrAnims: [ ["anim_star1An", "anim_star1An_2", "anim_star1An_3"]
 ["sprite_star1", "sprite_star1_2", "sprite_star1_3"] ]
 spriteDraw: FALSE
 inven: {
 weight: 0.2
 value: 2
 stack: 1
 stackW: 0.2
 stackV: 2
 equip: TRUE
 slot: "ield" ' Match last 4 of "right wield" OR "left wield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 cd: 4 ' Cooldown, in cycles
 }
 frPlyr: FALSE
 ranged: ["throwing star"]
 statsArr: [ ["att", 2] ]
 req: [ ["dex", 12] ]
 sticky: TRUE
 dscr: getCreateItemDscr(c) ' "THROWING STAR: A small but deadly multi-bladed instrument requiring a skillful hand to wield effectively."
 }
 ELSEIF objct = "gyre slicer" ' 32
 c = 32
 objct = {
 kind: "030 throwing"
 name: "gyre slicer"
 objNm: "gyre slicer"
 code: c
 blocker: FALSE
 spOrAnim1: FALSE
 spOrAnims: [ ["anim_star2An", "anim_star2An_2", "anim_star2An_3"]
 ["sprite_star2", "sprite_star2_2", "sprite_star2_3"] ]
 spriteDraw: FALSE
 inven: {
 weight: 0.8
 value: 22
 equip: TRUE
 slot: "ield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: ""
 cd: 8 ' Cooldown, in cycles
 }
 frPlyr: FALSE
 ranged: ["gyre slicer"]
 statsArr: [ ["att", 12] ]
 req: [ ["dex", 14] ]
 sticky: FALSE
 dscr: getCreateItemDscr(c) ' "GYRE SLICER: The use of this whirling chalikar eludes the average thrower, but a dextrous hand will send its five star-aligned blades slicing into an enemy with alarming precision."
 }
 ELSEIF objct = "boomerang" ' 33
 c = 33
 objct = {
 kind: "030 throwing"
 name: "boomerang"
 objNm: "boomerang"
 code: c
 blocker: FALSE
 spOrAnim1: FALSE
 spOrAnims: [ ["anim_boomAn", "anim_boomAn_2", "anim_boomAn_3"]
 ["sprite_boom", "sprite_boom_2", "sprite_boom_3"] ]
 spriteDraw: FALSE
 inven: {
 weight: 0.5
 value: 5
 equip: TRUE
 slot: "ield" ' Match last 4 of "right wield" OR "left wield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 cd: 10 ' Cooldown, in cycles
 'cd: 2 ' TESTING
 }
 frPlyr: FALSE
 ranged: ["boomerang"]
 statsArr: [ ["att", 1] ]
 dscr: getCreateItemDscr(c) ' "BOOMERANG: An aged and hardened wooden arc with sharp edges, it will reverse trajectory mid-flight and return to its starting point."
 }
 ELSEIF objct = "astral cross-stick" ' 34
 c = 34
 objct = {
 kind: "030 throwing"
 name: "astral cross-stick"
 objNm: "astral cross-stick"
 code: c
 blocker: FALSE
 spOrAnim1: FALSE
 spOrAnims: [ ["anim_boom2An", "anim_boom2An_2", "anim_boom2An_3"]
 ["sprite_boom2", "sprite_boom2_2", "sprite_boom2_3"] ]
 spriteDraw: FALSE
 inven: {
 weight: 1.6
 value: 21
 equip: TRUE
 slot: "ield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: ""
 cd: 14 ' Cooldown, in cycles
 }
 frPlyr: FALSE
 ranged: ["astral cross-stick"]
 statsArr: [ ["att", 3] ]
 dscr: getCreateItemDscr(c) ' "ASTRAL CROSS-STICK: A four-armed metallic boomerang with enough weight to cause blunt force damage, the curvature of its arms steer it back to the thrower's location."
 }
 ELSEIF objct = "broad arrow" ' 40
 c = 40
 objct = {
 kind: "040 arrow"
 name: "broad arrow"
 objNm: "broad arrow"
 code: c
 blocker: FALSE
 spriteZ: [ ["sprite_arrow0", "sprite_arrow0_2", "sprite_arrow0_3"]
 ["sprite_arrow1", "sprite_arrow1_2", "sprite_arrow1_3"]
 ["sprite_arrow2", "sprite_arrow2_2", "sprite_arrow2_3"]
 ["sprite_arrow3", "sprite_arrow3_2", "sprite_arrow3_3"] ]
 spriteDraw: FALSE
 inven: {
 weight: 0.1
 value: 1
 stack: 1
 stackW: 0.1
 stackV: 1
 equip: TRUE
 slot: "ield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: ""
 cd: 4 ' Cooldown, in cycles
 }
 frPlyr: FALSE
 statsArr: [ ["att", 2] ]
 facing: 1 ' arrows need facing
 sticky: TRUE
 dscr: getCreateItemDscr(c) ' "BROADHEAD ARROW: A simple wooden shaft, sturdy enough, with a sharp iron head."
 }
 ELSEIF objct = "blackwood wand" ' 64
 c = 64
 objct = {
 kind: "060 wand"
 name: "blackwood wand"
 objNm: "blackwood wand"
 code: c
 blocker: FALSE
 sprite: ["sprite_wand2", "sprite_wand2_2", "sprite_wand2_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.2
 value: 15
 equip: TRUE
 slot: "ield" ' Match last 4 of "right wield" OR "left wield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 cd: 6 ' Cooldown, in cycles
 }
 spellInfo: [ 1, "magic missile"]
 statsArr: [ ["att", 3], ["ltng", 2], ["cold", 2] ]
 'spellAtt: [ 3,0,2,2,0 ]
 dscr: getCreateItemDscr(c) ' "BLACKWOOD WAND: An aged gnarled wooden rod, bent with power and purpose."
 }
 ELSEIF objct = "alder wand" ' 65
 c = 65
 objct = {
 kind: "060 wand"
 name: "alder wand"
 objNm: "alder wand"
 code: c
 blocker: FALSE
 sprite: ["sprite_wand3", "sprite_wand3_2", "sprite_wand3_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.1
 value: 25
 equip: TRUE
 slot: "ield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: ""
 cd: 4 ' Cooldown, in cycles
 }
 bright: 0 ' Read by updateLMapObjct(), placeItem(), fillLayout(), tSpawnAt()
 dM: 1 ' Distance multiplier
 onLMap: FALSE
 spellInfo: [ 2, "magicLight"]
 dscr: getCreateItemDscr(c)
 }
 ELSEIF objct = "leather cap" ' 70
 c = 70
 objct = {
 'kind: "045 light armor" ' This matters in equipLorH()
 kind: "070 head"
 heavy: FALSE
 name: "leather cap"
 objNm: "leather cap"
 code: c
 blocker: FALSE
 sprite: ["sprite_leather_cap", "sprite_leather_cap_2", "sprite_leather_cap_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.5
 value: 2
 equip: TRUE
 slot: "head"
 eqp1: "equip armor"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["def", 1] ]
 dscr: getCreateItemDscr(c) ' "LEATHER CAP: Adorned with a few iron spikes, this hardened leather cap offers a bit of protection for your not so hardened head."
 }
 ELSEIF objct = "tumbler helm" ' 71
 c = 71
 objct = {
 kind: "070 head"
 heavy: FALSE
 name: "tumbler helm"
 objNm: "tumbler helm"
 code: c
 blocker: FALSE
 sprite: ["sprite_tumbler_helm", "sprite_tumbler_helm_2", "sprite_tumbler_helm_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.8
 value: 12
 equip: TRUE
 slot: "head"
 eqp1: "equip armor"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["def", 3] ]
 dscr: getCreateItemDscr(c) ' "TUMBLER HELM: Made of overlapping plates of hardened leather infused with rare strengthening agents."
 }
 ELSEIF objct = "mail coif" ' 72
 c = 72
 objct = {
 kind: "070 head"
 heavy: TRUE
 name: "mail coif"
 objNm: "mail coif"
 code: c
 blocker: FALSE
 sprite: ["sprite_mail_coif", "sprite_mail_coif_2", "sprite_mail_coif_3"]
 spriteDraw: FALSE
 inven: {
 weight: 1.1
 value: 4
 equip: TRUE
 slot: "head"
 eqp1: "equip armor"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["def", 3] ]
 dscr: getCreateItemDscr(c) ' "MAIL COIF: Simple and elegant in design, this ring mesh head gear will help you live to see another day."
 }
 ELSEIF objct = "iron helmet" ' 73
 c = 73
 objct = {
 'kind: "040 heavy armor"
 kind: "070 head"
 heavy: TRUE
 name: "iron helmet"
 objNm: "iron helmet"
 code: c
 blocker: FALSE
 sprite: ["sprite_iron_helmet", "sprite_iron_helmet_2", "sprite_iron_helmet_3"]
 spriteDraw: FALSE
 inven: {
 weight: 1.5
 value: 6
 equip: TRUE
 slot: "head"
 eqp1: "equip armor"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["def", 4] ]
 dscr: getCreateItemDscr(c) ' "IRON HELMET: A dented and worn helm to protect your noggin."
 }
 ELSEIF objct = "leather jerkin" ' 77
 c = 77
 objct = {
 kind: "077 torso"
 heavy: FALSE
 name: "leather jerkin"
 objNm: "leather jerkin"
 code: c
 blocker: FALSE
 sprite: ["sprite_leather_jerkin", "sprite_leather_jerkin_2", "sprite_leather_jerkin_3"]
 spriteDraw: FALSE
 inven: {
 weight: 2.5
 value: 12
 equip: TRUE
 slot: "torso"
 eqp1: "equip armor"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["def", 3] ]
 dscr: getCreateItemDscr(c) ' "LEATHER JERKIN: Sturdy and tough, you'll be glad you were wearing it instead of a flimsy cloth shirt, but all other armor types are stronger."
 }
 ELSEIF objct = "tumbler cuirass" ' 78
 c = 78
 objct = {
 kind: "077 torso"
 heavy: FALSE
 name: "tumbler cuirass"
 objNm: "tumbler cuirass"
 code: c
 blocker: FALSE
 sprite: ["sprite_tumbler_cuirass", "sprite_tumbler_cuirass_2", "sprite_tumbler_cuirass_3"]
 spriteDraw: FALSE
 inven: {
 weight: 3.5
 value: 28
 equip: TRUE
 slot: "torso"
 eqp1: "equip armor"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["def", 6] ]
 dscr: getCreateItemDscr(c) ' "TUMBLER CUIRASS: Cured and perfected over several months, the formula for turning this multi-jointed leather armor into near-steel strength is a jealously guarded secret among the fighters of Middoni in Oblasia."
 }
 ELSEIF objct = "mail hauberk" ' 79
 c = 79
 objct = {
 kind: "077 torso"
 heavy: TRUE
 name: "mail hauberk"
 objNm: "mail hauberk"
 code: c
 blocker: FALSE
 sprite: ["sprite_mail_hauberk", "sprite_mail_hauberk_2", "sprite_mail_hauberk_3"]
 spriteDraw: FALSE
 inven: {
 weight: 2.5
 value: 18
 equip: TRUE
 slot: "torso"
 eqp1: "equip armor"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["def", 5] ]
 dscr: getCreateItemDscr(c) ' "MAIL HAUBERK: Composed of thousands of heat treated steel rings clasped in groups of five, the wearer is protected from all peircing and cutting attacks, and retains great flexibility."
 }
 ELSEIF objct = "leather pants" ' 84
 c = 84
 objct = {
 kind: "084 legs"
 heavy: FALSE
 name: "leather pants"
 objNm: "leather pants"
 code: c
 blocker: FALSE
 sprite: ["sprite_leather_pants", "sprite_leather_pants_2", "sprite_leather_pants_3"]
 spriteDraw: FALSE
 inven: {
 weight: 1.2
 value: 8
 equip: TRUE
 slot: "legs"
 eqp1: "equip armor"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["def", 2] ]
 dscr: getCreateItemDscr(c) ' "LEATHER PANTS: The pliable softened hide allows for leg movement while still being thick enough to offer some real protection."
 }
 ELSEIF objct = "tumbler leggings" ' 85
 c = 85
 objct = {
 kind: "084 legs"
 heavy: FALSE
 name: "tumbler leggings"
 objNm: "tumbler leggings"
 code: c
 blocker: FALSE
 sprite: ["sprite_tumbler_leggings", "sprite_tumbler_leggings_2", "sprite_tumbler_leggings_3"]
 spriteDraw: FALSE
 inven: {
 weight: 1.9
 value: 21
 equip: TRUE
 slot: "legs"
 eqp1: "equip armor"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["def", 5] ]
 dscr: getCreateItemDscr(c) ' "TUMBLER LEGGINGS: This Middonian leather, ultra-hardened and fashioned to give full twisting flexibility at the knee, will provide excellent leg protection."
 }
 ELSEIF objct = "mail chausses" ' 86
 c = 86
 objct = {
 kind: "084 legs"
 heavy: TRUE
 name: "mail chausses"
 objNm: "mail chausses"
 code: c
 blocker: FALSE
 sprite: ["sprite_mail_chausses", "sprite_mail_chausses_2", "sprite_mail_chausses_3"]
 spriteDraw: FALSE
 inven: {
 weight: 2.4
 value: 16
 equip: TRUE
 slot: "legs"
 eqp1: "equip armor"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["def", 4] ]
 dscr: getCreateItemDscr(c) ' "MAIL CHAUSSES: These mail leg coverings, held up by a belt, allow your legs freedom of movement whilst keeping them from serious harm."
 }
 ELSEIF objct = "leather boots" ' 91
 c = 91
 objct = {
 'kind: "045 light armor"
 kind: "091 feet"
 heavy: FALSE
 name: "leather boots"
 objNm: "leather boots"
 code: c
 blocker: FALSE
 sprite: ["sprite_leather_boots", "sprite_leather_boots_2", "sprite_leather_boots_3"]
 spriteDraw: FALSE
 inven: {
 weight: 1.1
 value: 5
 equip: TRUE
 slot: "feet"
 eqp1: "equip armor"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["def", 1], ["cold", 1] ]
 dscr: getCreateItemDscr(c) ' "LEATHER BOOTS: Moderate flexible protection for your feet."
 }
 ELSEIF objct = "tumbler shoes" ' 92
 c = 92
 objct = {
 kind: "091 feet"
 heavy: FALSE
 name: "tumbler shoes"
 objNm: "tumbler shoes"
 code: c
 blocker: FALSE
 sprite: ["sprite_tumbler_shoes", "sprite_tumbler_shoes_2", "sprite_tumbler_shoes_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.9
 value: 12
 equip: TRUE
 slot: "feet"
 eqp1: "equip armor"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["def", 3] ]
 dscr: getCreateItemDscr(c) ' "TUMBLER SHOES: A flexible segmented design, these shoe or boot coverings allow for full movement of the foot and ankle, yet the treated leather plates are remarkably strong."
 }

 ELSEIF objct = "mail leather boots" ' 93
 c = 93
 objct = {
 kind: "091 feet"
 heavy: TRUE
 name: "mail leather boots"
 objNm: "mail leather boots"
 code: c
 blocker: FALSE
 sprite: ["sprite_mail_leather_boots", "sprite_mail_leather_boots_2", "sprite_mail_leather_boots_3"]
 spriteDraw: FALSE
 inven: {
 weight: 1.6
 value: 14
 equip: TRUE
 slot: "feet"
 eqp1: "equip armor"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["def", 3] ]
 dscr: getCreateItemDscr(c) ' "MAIL LEATHER BOOTS: Simply a pair of flexible leather boots with steel ring mail bound to the upper surface for extra protection."
 }
 ELSEIF objct = "iron sabatons" ' 94
 c = 94
 objct = {
 'kind: "040 heavy armor"
 kind: "091 feet"
 heavy: TRUE
 name: "iron sabatons"
 objNm: "iron sabatons"
 code: c
 blocker: FALSE
 sprite: ["sprite_iron_boots", "sprite_iron_boots_2", "sprite_iron_boots_3"]
 spriteDraw: FALSE
 inven: {
 weight: 2.6
 value: 5
 equip: TRUE
 slot: "feet"
 eqp1: "equip armor"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["def", 2], ["dex", -1] ]
 dscr: getCreateItemDscr(c) ' "IRON SABATONS: Hefty plate protection for your feet."
 }
 ELSEIF objct = "leather gloves" ' 98
 c = 98
 objct = {
 kind: "098 hands"
 heavy: FALSE
 name: "leather gloves"
 objNm: "leather gloves"
 code: c
 blocker: FALSE
 sprite: ["sprite_leather_gloves", "sprite_leather_gloves_2", "sprite_leather_gloves_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.3
 value: 4
 equip: TRUE
 slot: "hands"
 eqp1: "equip armor"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["def", 1] ]
 dscr: getCreateItemDscr(c) ' "LEATHER GLOVES: These tough gloves will help protect your hands as you face your enemies in close combat."
 }
 ELSEIF objct = "tumbler fists" ' 99
 c = 99
 objct = {
 kind: "098 hands"
 heavy: FALSE
 name: "tumbler fists"
 objNm: "tumbler fists"
 code: c
 blocker: FALSE
 sprite: ["sprite_tumbler_fists", "sprite_tumbler_fists_2", "sprite_tumbler_fists_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.5
 value: 12
 equip: TRUE
 slot: "hands"
 eqp1: "equip armor"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["def", 3] ]
 dscr: getCreateItemDscr(c) ' "TUMBLER FISTS: Overlapping hard leather segments specially laid together for full finger and wrist movement yet complete protective covering."
 }
 ELSEIF objct = "iron gauntlets" ' 101
 c = 101
 objct = {
 'kind: "040 heavy armor"
 kind: "098 hands"
 heavy: TRUE
 name: "iron gauntlets"
 objNm: "iron gauntlets"
 code: c
 blocker: FALSE
 sprite: ["sprite_iron_gauntlets", "sprite_iron_gauntlets_2", "sprite_iron_gauntlets_3"]
 spriteDraw: FALSE
 inven: {
 weight: 1.5
 value: 8
 equip: TRUE
 slot: "hands"
 eqp1: "equip armor"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["def", 2], ["ftr", 1] ]
 dscr: getCreateItemDscr(c) ' "IRON GAUNTLETS: Putting this segmented iron protection on your hands lends strength to your grip and gives you a sense of fighting power."
 }
 ELSEIF objct = "star shield" ' 108
 c = 108
 objct = {
 kind: "105 shield"
 name: "star shield"
 objNm: "star shield"
 code: c
 blocker: FALSE
 sprite: ["sprite_shield4", "sprite_shield4_2", "sprite_shield4_3"]
 spriteDraw: FALSE
 inven: {
 weight: 2.2
 value: 6
 equip: TRUE
 slot: "ield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: ""
 cd: 24 ' Cooldown, in cycles
 }
 'statsArr: [ ["def". 2], ["att", 1] ]
 statsArr: [ ["def", 2], ["att", 1], ["con", 1] ]
 dscr: getCreateItemDscr(c) ' "IRON SHIELD: Deft use of a good shield can deflect many a blow. Good for the occasional shield bash too."
 }
 ELSEIF objct = "mirror shield" ' 109
 c = 109
 objct = {
 kind: "105 shield"
 name: "mirror shield"
 objNm: "mirror shield"
 code: c
 blocker: FALSE
 sprite: ["sprite_shield5", "sprite_shield5_2", "sprite_shield5_3"]
 spriteDraw: FALSE
 inven: {
 weight: 3
 value: 30
 equip: TRUE
 slot: "ield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: ""
 cd: 24 ' Cooldown, in cycles
 }
 'statsArr: [ ["def", 3], ["att", 1] ]
 statsArr: [ ["def", 3], ["att", 1], ["wis", 2] ]
 dscr: getCreateItemDscr(c) ' "MIRROR SHIELD: It's entire front half is fitted with a smooth continuous sheet of hundreds of nearly transparent actinolite gemstones, set in a slightly concave surface. When wielded with skill and good timing, it has the power to deflect elemental magic."
 }
 ELSEIF objct = "opal ring" ' 130
 c = 130
 objct = {
 kind: "130 ring"
 name: "opal ring"
 objNm: "opal ring"
 code: c
 blocker: FALSE
 sprite: ["sprite_ring1_opal", "sprite_ring1_opal_2", "sprite_ring1_opal_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.1
 value: 25
 equip: TRUE
 slot: "ring"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["max", 10 ] ]
 dscr: getCreateItemDscr(c) ' "OPAL RING: A simple band with a single opal gem that slightly glows."
 }
 ELSEIF objct = "steel ring" ' 131
 c = 131
 objct = {
 kind: "130 ring"
 name: "steel ring"
 objNm: "steel ring"
 code: c
 blocker: FALSE
 sprite: ["sprite_ring2_steel", "sprite_ring2_steel_2", "sprite_ring2_steel_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.1
 value: 25
 equip: TRUE
 slot: "ring"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: ""
 }
 statsArr: [ ["str", 2] ]
 dscr: getCreateItemDscr(c) ' "STEEL RING: Octagonal in shape, it almost seems to grow and shrink with emanations of power, like breath."
 }
 ELSEIF objct = "pink potion" ' 140 Healing
 c = 140
 objct = {
 'kind: "tool"
 kind: "140 potion"
 name: "pink potion"
 objNm: "pink potion"
 code: c
 blocker: FALSE
 'sprite: ["sprite_potion4", "sprite_potion4_2", "sprite_potion4_3"]
 sprite: ["sprite_potion1", "sprite_potion1_2", "sprite_potion1_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.2
 value: 1
 stack: 1
 stackW: 0.2
 stackV: 1
 equip: TRUE
 slot: " use" ' Match last 4 of "L quick use" OR "R quick use"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 use: TRUE
 destroy: TRUE
 repl: "round flask"
 }
 'stats: { hth: 10 }
 'effect: [potionHealPre]
 effect: [potionQuaff]
 taskInfo: [ 41, 6, ["a pink potion"] ]
 dscr: getCreateItemDscr(c) ' "PINK POTION: A deep pink infusion, when imbibed it restores 10 to 20 percent of your health."
 }
 ELSEIF objct = "grey potion" ' 141 Invisibility
 c = 141
 objct = {
 kind: "140 potion"
 name: "grey potion"
 objNm: "grey potion"
 code: c
 blocker: FALSE
 sprite: ["sprite_potion2", "sprite_potion2_2", "sprite_potion2_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.2
 value: 5
 stack: 1
 stackW: 0.2
 stackV: 5
 equip: TRUE
 slot: " use" ' Match last 4 of "L quick use" OR "R quick use"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 use: TRUE
 destroy: TRUE
 repl: "pyramid flask"
 }
 'effect: [potionInvisPre]
 effect: [potionQuaff]
 taskInfo: [ 41, 0, [] ]
 dscr: getCreateItemDscr(c) ' "GREY POTION: An illusive cloudy grey decoction, it grants you short-term invisibility, allowing movement and simple actions. The shroud dissipates early if you attack or get hit."
 }
 ELSEIF objct = "blue potion" ' 142 Speed
 c = 142
 objct = {
 'kind: "tool"
 kind: "140 potion"
 name: "blue potion"
 objNm: "blue potion"
 code: c
 blocker: FALSE
 sprite: ["sprite_potion3", "sprite_potion3_2", "sprite_potion3_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.2
 value: 1
 stack: 1
 stackW: 0.2
 stackV: 1
 equip: TRUE
 slot: " use"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 use: TRUE
 destroy: TRUE
 repl: "round flask"
 }
 'stats: { hth: 10 }
 effect: [potionQuaff]
 taskInfo: [ 41, 30, [] ]
 dscr: getCreateItemDscr(c) ' "BLUE POTION: This light blue solution quickens all your attacks for a time."
 }
 ELSEIF objct = "black potion" ' 143 Poison
 c = 143
 objct = {
 kind: "140 potion"
 name: "black potion"
 objNm: "black potion"
 code: c
 blocker: FALSE
 sprite: ["sprite_potion4", "sprite_potion4_2", "sprite_potion4_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.2
 value: 5
 stack: 1
 stackW: 0.2
 stackV: 5
 equip: TRUE
 slot: " use" ' Match last 4 of "L quick use" OR "R quick use"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 use: TRUE
 destroy: TRUE
 repl: "round flask"
 }
 effect: [applyPoison]
 dscr: getCreateItemDscr(c) ' "BLACK POTION: Applied to a weapon or projectile set, this viscous dark tincture aids in more rapidly dispatching enemies."
 }
 ELSEIF objct = "dynamic potion" ' 146 Strength
 c = 146
 objct = {
 kind: "140 potion"
 name: "dynamic potion"
 objNm: "dynamic potion"
 code: c
 blocker: FALSE
 'sprite: ["sprite_potion1", "sprite_potion1_2", "sprite_potion1_3"]
 animSprite: ["anim_potion_permR", "anim_potion_permR_2", "anim_potion_permR_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.2
 value: 30
 stack: 1
 stackW: 0.2
 stackV: 30
 equip: TRUE
 slot: " use" ' Match last 4 of "L quick use" OR "R quick use"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 use: TRUE
 destroy: TRUE
 repl: "round flask"
 }
 effect: [potionQuaff]
 taskInfo: [ 41, 31, ["a dynamic potion", "str", "strength"] ]
 dscr: getCreateItemDscr(c) ' "DYNAMIC POTION: A powerful suspension coursing with energy."
 }
 ELSEIF objct = "effervescent potion" ' 147 Dexterity
 c = 147
 objct = {
 kind: "140 potion"
 name: "effervescent potion"
 objNm: "effervescent potion"
 code: c
 blocker: FALSE
 animSprite: ["anim_potion_permR", "anim_potion_permR_2", "anim_potion_permR_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.2
 value: 30
 stack: 1
 stackW: 0.2
 stackV: 30
 equip: TRUE
 slot: " use"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 use: TRUE
 destroy: TRUE
 repl: "round flask"
 }
 effect: [potionQuaff]
 taskInfo: [ 41, 31, ["an effervescent potion", "dex", "dexterity"] ]
 dscr: getCreateItemDscr(c) ' "EFFERVESCENT POTION: An impressive suspension dancing with vivacity."
 }
 ELSEIF objct = "ebullient potion" ' 148 Constitution
 c = 148
 objct = {
 kind: "140 potion"
 name: "ebullient potion"
 objNm: "ebullient potion"
 code: c
 blocker: FALSE
 animSprite: ["anim_potion_permP", "anim_potion_permP_2", "anim_potion_permP_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.2
 value: 30
 stack: 1
 stackW: 0.2
 stackV: 30
 equip: TRUE
 slot: " use" ' Match last 4 of "L quick use" OR "R quick use"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 use: TRUE
 destroy: TRUE
 repl: "pyramid flask"
 }
 effect: [potionQuaff]
 taskInfo: [ 41, 31, ["an ebullient potion", "con", "constitution"] ]
 dscr: getCreateItemDscr(c) ' "EBULLIENT POTION: An overactive suspension vibrating with zest."
 }
 ELSEIF objct = "sparkling potion" ' 149 Wisdom
 c = 149
 objct = {
 kind: "140 potion"
 name: "sparkling potion"
 objNm: "sparkling potion"
 code: c
 blocker: FALSE
 animSprite: ["anim_potion_permP", "anim_potion_permP_2", "anim_potion_permP_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.2
 value: 30
 stack: 1
 stackW: 0.2
 stackV: 30
 equip: TRUE
 slot: " use" ' Match last 4 of "L quick use" OR "R quick use"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: "" ' For exact slot name
 use: TRUE
 destroy: TRUE
 repl: "pyramid flask"
 }
 effect: [potionQuaff]
 taskInfo: [ 41, 31, ["a sparkling potion", "wis", "wisdom"] ]
 bright: 2
 dM: 0.8
 onLMap: FALSE
 dscr: getCreateItemDscr(c) ' "SPARKLING POTION: A shining suspension pulsing with brilliance."
 }
 ELSEIF objct = "mortar" ' 150
 c = 150
 objct = {
 kind: "150 alchemy"
 name: "mortar"
 objNm: "mortar"
 code: c
 blocker: FALSE
 sprite: ["sprite_mortar", "sprite_mortar_2", "sprite_mortar_3"]
 spriteDraw: FALSE
 inven: {
 weight: 1.6
 value: 15
 equip: FALSE
 use: TRUE
 destroy: FALSE
 }
 effect: [alchInit]
 dscr: getCreateItemDscr(c) ' "MORTAR: A medium-fine grain small granite mortar and pestle, used for grinding and mixing ingredients for potion making."
 }
 ELSEIF objct = "round flask" ' 151
 c = 151
 objct = {
 kind: "150 alchemy"
 name: "round flask"
 objNm: "round flask"
 code: c
 blocker: FALSE
 sprite: ["sprite_potion_flask1", "sprite_potion_flask1_2", "sprite_potion_flask1_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.1
 value: 1
 stack: 1
 stackW: 0.1
 stackV: 1
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "ROUND FLASK: Basic apparatus, you'll need a flask to mix ground ingredients into some liquid to have a quaffable potion. Round flasks are well suited to potions that affect the body, needing just the right swirl."
 }
 ELSEIF objct = "pyramid flask" ' 152
 c = 152
 objct = {
 kind: "150 alchemy"
 name: "pyramid flask"
 objNm: "pyramid flask"
 code: c
 blocker: FALSE
 sprite: ["sprite_potion_flask2", "sprite_potion_flask2_2", "sprite_potion_flask2_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.1
 value: 2
 stack: 1
 stackW: 0.1
 stackV: 2
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "PYRAMID FLASK: Basic apparatus, you'll need a flask to mix ground ingredients into some liquid to have a quaffable potion. Pyramid flasks are well suited to potions that affect the mind, needing just the right shake."
 }
 ELSEIF objct = "hagoth leaf" ' 153
 c = 153
 objct = {
 kind: "153 ingredients"
 name: "hagoth leaf"
 objNm: "hagoth leaf"
 code: c
 blocker: FALSE
 sprite: ["sprite_ingr_hagothleaf", "sprite_ingr_hagothleaf_2", "sprite_ingr_hagothleaf_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.2
 value: 3
 stack: 1
 stackW: 0.3
 stackV: 3
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "HAGOTH LEAF: A large broad red leaf of tropical origin with healing qualities, that dries into a cloth-like foldable material, discovered by the explorer Hagoth on the first of his two great sea expeditions."
 }
 ELSEIF objct = "gideontree root" ' 154
 c = 154
 objct = {
 kind: "153 ingredients"
 name: "gideontree root"
 objNm: "gideontree root"
 code: c
 blocker: FALSE
 sprite: ["sprite_ingr_gideontreeroot", "sprite_ingr_gideontreeroot_2", "sprite_ingr_gideontreeroot_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.2
 value: 2
 stack: 1
 stackW: 0.2
 stackV: 2
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "GIDEONTREE ROOT: The gideontree is not a tree at all, but a small shrub with the root being larger than the top. Thus it is a hardy defensive plant, believed to be a source of long life."
 }
 ELSEIF objct = "moss sprig" ' 155
 c = 155
 objct = {
 kind: "153 ingredients"
 name: "moss sprig"
 objNm: "moss sprig"
 code: c
 blocker: FALSE
 sprite: ["sprite_ingr_moss_sprig", "sprite_ingr_moss_sprig_2", "sprite_ingr_moss_sprig_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.1
 value: 0
 stack: 1
 stackW: 0.1
 stackV: 0
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "MOSS SPRIG: This bluish spongy moss smells especially pungent."
 }
 ELSEIF objct = "cotton thorn" ' 156
 c = 156
 objct = {
 kind: "153 ingredients"
 name: "cotton thorn"
 objNm: "cotton thorn"
 code: c
 blocker: FALSE
 sprite: ["sprite_ingr_cotton_thorn", "sprite_ingr_cotton_thorn_2", "sprite_ingr_cotton_thorn_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.1
 value: 1
 stack: 1
 stackW: 0.1
 stackV: 1
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "COTTON THORN: This reedy stalk is topped with a grey-tufted ball brandishing thin spikey thorns, yet the angles seem to absorb more light than they reflect, causing a fading effect of dim and darker areas that are hard to see."
 }
 ELSEIF objct = "black widow egg" ' 157
 c = 157
 objct = {
 kind: "153 ingredients"
 name: "black widow egg"
 objNm: "black widow egg"
 code: c
 blocker: FALSE
 sprite: ["sprite_ingr_blackWidowEgg", "sprite_ingr_blackWidowEgg_2", "sprite_ingr_blackWidowEgg_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.3
 value: 3
 stack: 1
 stackW: 0.5
 stackV: 3
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "BLACK WIDOW EGG: A suprisingly heavy fibrous egg sack, you can see it writhing and wiggling, its inner life striving to break free."
 }
 ELSEIF objct = "flower of eden" ' 158
 c = 158
 objct = {
 kind: "153 ingredients"
 name: "flower of eden"
 objNm: "flower of eden"
 code: c
 blocker: FALSE
 sprite: ["sprite_ingr_flowerofEden", "sprite_ingr_flowerofEden_2", "sprite_ingr_flowerofEden_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.2
 value: 8
 stack: 1
 stackW: 0.2
 stackV: 8
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "FLOWER OF EDEN: It is said Ze'ezrom himself cultivates this slow growing flower to mix into his tea, its aroma reminiscent of lemons and cinnamon."
 }
 ELSEIF objct = "centipede legs" ' 159
 c = 159
 objct = {
 kind: "153 ingredients"
 name: "centipede legs"
 objNm: "centipede legs"
 code: c
 blocker: FALSE
 sprite: ["sprite_ingr_centipedeLegs", "sprite_ingr_centipedeLegs_2", "sprite_ingr_centipedeLegs_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.1
 value: 15
 stack: 1
 stackW: 0.1
 stackV: 15
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "CENTIPEDE LEGS: After carefully de-legging a dead centipede, you are now the proud possessor of exactly 100 tiny brittle centipede legs, proven by sages throughout history to cure warts, toe fungus, beetle bules, halitosis, worm fit, gadianton fever, lemuel's itch, nephitis, scrumpox, rose cold, and possibly scrivener's palsy (unconfirmed)."
 }
 ELSEIF objct = "book" ' 160
 c = 160
 objct = {
 kind: "160 readable" ' This matters in saveInvItemDetails(), saveItemDetails()
 name: "book"
 objNm: "book"
 code: c
 blocker: FALSE
 sprite: ["sprite_book", "sprite_book_2", "sprite_book_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.3
 value: 0 ' Will a value of 0 cause a problems?
 equip: FALSE
 'use: TRUE
 read: TRUE ' both "use" and "read" are checked in workGenMenu() inventory section, getCreateItemDscr()
 destroy: FALSE
 }
 effect: [prepBookInv]
 dscr: 0
 }
 ELSEIF objct = "note" ' 161
 c = 161
 objct = {
 kind: "160 readable"
 name: "note"
 objNm: "note"
 code: c
 blocker: FALSE
 sprite: ["sprite_note", "sprite_note_2", "sprite_note_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.1
 value: 0 ' Will a value of 0 cause a problems?
 equip: FALSE
 }
 airDrag: 0.3
 dscr: 0
 }
 ELSEIF objct = "copper key" ' 170
 c = 170
 objct = {
 kind: "170 key"
 name: "copper key"
 objNm: "copper key"
 code: c
 blocker: FALSE
 sprite: ["sprite_copper_key", "sprite_copper_key_2", "sprite_copper_key_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.2
 value: 1
 stack: 1 ' Stackable, and quantity
 stackW: 0.2
 stackV: 1
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "COPPER KEY: An uninteresting dull copper key, commonly used for low security locks."
 }
 ELSEIF objct = "gate key" ' 171
 c = 171
 objct = {
 kind: "170 key"
 name: "gate key"
 objNm: "gate key"
 code: c
 blocker: FALSE
 sprite: ["sprite_gate_key", "sprite_gate_key_2", "sprite_gate_key_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.3
 value: 2
 stack: 1
 stackW: 0.3
 stackV: 2
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "GATE KEY: A bracket-shaped key for a portcullis lock."
 }
 ELSEIF objct = "garnet" ' 180
 c = 180
 objct = {
 kind: "180 gem"
 name: "garnet"
 objNm: "garnet"
 code: c
 blocker: FALSE
 sprite: ["sprite_gem_garnet", "sprite_gem_garnet_2", "sprite_gem_garnet_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.1
 value: 30
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "GARNET: A multifaceted oval-shaped pyrope or ""fire eye"" gem about the size of your thumb, of a deep blood-red hue."
 }
 ELSEIF objct = "citrine" ' 181
 c = 181
 objct = {
 kind: "180 gem"
 name: "citrine"
 objNm: "citrine"
 code: c
 blocker: FALSE
 sprite: ["sprite_gem_citrine", "sprite_gem_citrine_2", "sprite_gem_citrine_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.3
 value: 50
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "CITRINE: Cut as a shallow blunted triangle, this quartz gem's smokey orangish yellow color reminds you of crystalized honey."
 }
 ELSEIF objct = "azurite" ' 182
 c = 182
 objct = {
 kind: "180 gem"
 name: "azurite"
 objNm: "azurite"
 code: c
 blocker: FALSE
 sprite: ["sprite_gem_azurite", "sprite_gem_azurite_2", "sprite_gem_azurite_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.3
 value: 70
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "AZURITE: An uncut copper carbonate stone, rounded and polished to a bright sheen, you feel as though you could swim in its mystical swirling blue depths."
 }
 ELSEIF objct = "seraphinite" ' 183
 c = 183
 objct = {
 kind: "180 gem"
 name: "seraphinite"
 objNm: "seraphinite"
 code: c
 blocker: FALSE
 sprite: ["sprite_gem_seraphinite", "sprite_gem_seraphinite_2", "sprite_gem_seraphinite_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.2
 value: 90
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "SERAPHINITE: Carved into a smooth, almost soft, rounded heart, this stormy green and white clinochlore stone is possessed of ethereal divine beauty."
 }
 ELSEIF objct = "moonstone" ' 190
 c = 190
 objct = {
 kind: "190 junk"
 name: "moonstone"
 objNm: "moonstone"
 code: c
 blocker: FALSE
 sprite: ["sprite_gem_moonstone", "sprite_gem_moonstone", "sprite_gem_moonstone"]
 spriteDraw: FALSE
 inven: {
 weight: 0.3
 value: 50
 equip: FALSE
 }
 bright: 2
 dM: 1.5
 onLMap: FALSE
 dscr: getCreateItemDscr(c) ' "MOONSTONE: A perfect sphere of polished orthoclase, its bluish white chatoyancy follows your eye as you turn it in your hand, while its adularescent glow emanates with power."
 }
 ELSEIF objct = "star block" ' 191
 c = 191
 objct = {
 kind: "190 junk"
 name: "star block"
 objNm: "star block"
 code: c
 blocker: TRUE
 flyBlocker: FALSE
 sprite: ["sprite_starblock", "sprite_starblock_2", "sprite_starblock_3"]
 spriteDraw: FALSE
 inven: {
 weight: 250
 value: 1
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "STAR BLOCK: A large and very heavy stone block which has been rough hewn into the shape of a four-pointed star."
 }
 ELSEIF objct = "barrel" ' 200
 c = 200
 objct = {
 kind: "200 breakable"
 name: "barrel"
 objNm: "barrel"
 code: c
 blocker: TRUE
 flyBlocker: FALSE
 sprite: ["sprite_barrel", "sprite_barrel_2", "sprite_barrel_3"]
 spriteDraw: FALSE
 inven: {
 weight: 215
 value: 1
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "BARREL: A surprisingly heavy large wooden barrel with thick sides. It is in such disrepair that it can be knocked apart if enough force is applied."
 lit: -1 ' Objct.lit is usually for moving things, like monsters or flyItems, but also in this case needed for proper dmg txt brightness in prepDmgNum()
 hth: 15
 max: 15
 dex: 0
 def: [ 2,-1,-1,10,100 ]
 exp: 0
 stepN: 0
 contents: []
' dmg: []
 }
 ELSEIF objct = "crate" ' 201
 c = 201
 objct = objctInfo("barrel")
 objct.Append( {
 name: "crate"
 objNm: "crate"
 code: c
 sprite: ["sprite_crate1", "sprite_crate1_2", "sprite_crate1_3"]
 inven: {
 weight: 45
 value: 1
 equip: FALSE
 }
 dscr: getCreateItemDscr(c) ' "CRATE: A roughly constructed wooden storage box with a lid that has been nailed shut. It doesn't appear very strong and could be knocked apart with a few hits."
 hth: 10
 max: 10
 def: [ 1,-1,-1,10,100]
 } )
 ELSEIF objct = "dried batwing" ' 220
 c = 220
 objct = {
 kind: "220 food"
 name: "dried batwing"
 objNm: "dried batwing"
 code: c
 blocker: FALSE
 sprite: ["sprite_food_batwing", "sprite_food_batwing_2", "sprite_food_batwing_3"]
 spriteDraw: FALSE
 inven: {
 weight: 0.1
 value: 1
 stack: 1
 stackW: 0.1
 stackV: 1
 equip: FALSE
 use: TRUE
 destroy: TRUE
 foodAmt: 5
 }
 effect: [eatFood]
 dscr: getCreateItemDscr(c)
 }
 ELSEIF objct = "magic missile" ' 244
 c = 244
 objct = {
 kind: "050 ammo"
 name: "magic missile"
 objNm: "magic missile"
 code: c
 blocker: FALSE
 animSprite: ["anim_mmiss7", "anim_mmiss7", "anim_mmiss7"] ' No dimmer versions
 spriteDraw: FALSE
 inven: {
 weight: 0.1
 value: 1
 stack: 1
 stackW: 0.1
 stackV: 1
 equip: TRUE
 slot: "ield"
 eqp1: "equip other"
 equipped: FALSE
 eqSlot: ""
 cd: 4 ' Cooldown, in cycles
 }
 frPlyr: FALSE
 att: [ 3,0,2,2,0 ]
 sndInfo: ["magicMis", 3, 350]
 sticky: TRUE
 deflect: TRUE
 facing: 0
 bright: 2
 dM: 1
 poof: TRUE
 onLMap: FALSE
 'LY: 0
 'LX: 0
 dscr: getCreateItemDscr(c) ' "MAGIC MISSILE: An impactful energy bolt, not to be taken lightly."
 }
 
 '============== MONSTERS ===============
 ELSEIF objct = "slime" ' 1
 objct = {
 kind: "mon" ' BASE
 name: "purple slime"
 objNm: "slime"
 code: 1
 blocker: TRUE ' BASE
 animSprite: ["anim_mon_slime", "anim_mon_slime_2", "anim_mon_slime_3"]
 spriteDraw: FALSE ' BASE
 id: 0 ' BASE ' Monster ID, generated in makeMon()
 curY: 0 ' BASE
 curX: 0 ' BASE
 cy: 0 ' BASE
 cx: 0 ' BASE
 cR: 0 ' BASE
 facing: 0 ' BASE
 preDoor: [] ' BASE ' For door popping y/x
 lit: -1 ' BASE
 timr: 0 ' BASE
 nudgeTimr: -1
 stepping: FALSE ' BASE
 stepN: 0 ' BASE
 seePlayer: FALSE ' BASE
 sleep: FALSE ' BASE
 speed: 10
 spBase: 10 '
 visn: 4 '
 hth: 25
 'hth: 50 ' FOR TESTING
 max: 25
 dex: 10
 str: 6
 con: 10
 att: [ 2,0,0,0,2 ]
 def: [ 2,0,0,-2,100 ] '
 'exp: 5 ' 5 '
 exp: 1000 ' TESTING
 pLev: 0 '
 contents: [] ' BASE '
' dmg: [] ' BASE '
 }
 ELSEIF objct = "bat" ' 2
 objct = objctInfo("slime")
 objct.Append( {
 name: "huge bat"
 objNm: "bat"
 code: 2
 animSprite: ["anim_mon_bat", "anim_mon_bat_2", "anim_mon_bat_3"]
 speed: 10
 spBase: 10
 visn: 5
 hth: 20
 max: 20
 dex: 15
 str: 8
 con: 10
 att: [ 4,0,0,0,1 ] ' A little psn dmg
 def: [ 1,0,-1,0,1 ] '
 exp: 10
 pLev: 1
 } )
 ELSEIF objct = "bbat" ' 5
 objct = objctInfo("bat")
 objct.Append( {
 name: "blind bat"
 objNm: "bbat"
 code: 5
 visn: 1
 } )
 ELSEIF objct = "rat" ' 3
 objct = objctInfo("slime")
 objct.Delete("animSprite")
 objct.Append( {
 name: "huge rat"
 objNm: "rat"
 code: 3
 animSpriteZ: [ ["anim_mon_rat0", "anim_mon_rat0_2", "anim_mon_rat0_3"]
 ["anim_mon_rat1", "anim_mon_rat1_2", "anim_mon_rat1_3"]
 ["anim_mon_rat2", "anim_mon_rat2_2", "anim_mon_rat2_3"]
 ["anim_mon_rat3", "anim_mon_rat3_2", "anim_mon_rat3_3"] ]
 speed: 10
 spBase: 10
 visn: 5 ' Default 5
 hth: 35
 max: 35
 dex: 12
 str: 10
 con: 10
 att: [ 5,0,0,0,0 ]
 def: [ 2,-1,0,0,0 ] ' Slight weakness to fire
 exp: 10
 pLev: 1 ' Matching player level for 1-to-1 exp
 contents: [objctInfo("opal ring")] '
 } )
 ELSEIF objct = "ratsee" ' 6 ' A far seeing rat for pathfinding testing
 objct = objctInfo("rat")
 objct.Append( {
 objNm: "ratsee"
 code: 6
 'speed: 3
 speed: 15
 'spBase: 3
 spBase: 15
 visn: 15 ' To see almost the whole room
 'hth: 10
 hth: 100
 'max: 10
 max: 100
 exp: 3
 contents: []
 } )
 
 ELSEIF objct = "flame" ' 4
 objct = objctInfo("slime")
 objct.Append( {
 name: "flame sprite"
 objNm: "flame"
 code: 4
 animSprite: ["anim_mon_elemfire", "anim_mon_elemfire", "anim_mon_elemfire"] ' Always bright
 speed: 6
 spBase: 6
 visn: 4
 hth: 30
 max: 30
 dex: 15
 str: 20
 con: 15
 att: [ 6,4,0,0,0 ] ' Some fire dmg
 def: [ 2,100,0,-8,0 ] '
 exp: 20
 pLev: 2
 bright: 3 ' Read by updateLMapObjct()
 dM: 1 ' Distance multiplier
 onLMap: FALSE ' Flag to track if Item is on LMap or not
 'LY: 0 '
 'LX: 0
 } )
 END IF
 RETURN objct
END FUNCTION
 
User avatar
squirreltown
Posts: 870
Joined: Sun Apr 21, 2013 2:20 pm

Re: "Internal limit size exceeded" compile error - function with lots of "elseif"s

Sat Oct 14, 2017 3:53 pm

Is there code after #3394?
what changed between now and the last time it worked?

Never seen this but it doesn't sound like a bug, it seems pretty definite.
I can't see how the content would matter but the size of something sure does. Biggest .brs file I could find of mine has 84,000 chrs.
Kinetics Screensavers
 
User avatar
RokuNB
Posts: 465
Joined: Fri Mar 31, 2017 2:22 pm

Re: "Internal limit size exceeded" compile error - function with lots of "elseif"s

Sat Oct 14, 2017 5:48 pm

I am most curious what that error means - and perhaps RokuKC will shed some light.

But in the mean time, @Komag... don't you notice how this massive if-elseif-elseif-...ad-nauseam resembles a dictionary (roAA)?

Say initially you create a catalog in main() or such:
m.WHOLE_EARTH_CATALOG = {
    blocker: {
        kind: "infoTh"
        'kind: "block" ' If we use this, then it would block flying Items, I think I don't want that
        name: "blocker"
        objNm: "blocker"
        blocker: TRUE
        'vis: FALSE
        swap: TRUE
    }
    handL: {
        sprite: ["sprite_handL", "sprite_handL_2", "sprite_handL_3"]
    }
    handR: {
        sprite: ["sprite_handR", "sprite_handR_2", "sprite_handR_3"]
    }
    "short sword": {
        kind: "005 sword"
        name: "short sword"
        objNm: "short sword"
        code: 5
        blocker: FALSE
        sprite: ["sprite_sword1", "sprite_sword1_2", "sprite_sword1_3"]
        spriteDraw: FALSE
        inven: {
            weight: 1
            value: 5
            equip: TRUE
            slot: "ield" ' Match last 4 of "right wield" OR "left wield"
            eqp1: "equip other"
            equipped: FALSE
            eqSlot: "" ' For exact slot name
            cd: 8 ' Cooldown, in cycles
        }
        statsArr: [ ["att", 2] ]
        dscr: getCreateItemDscr(5) ' "SHORT SWORD: A short sturdy blade of iron, simple and effective."
    }
    cutlass: {
        objct = {
        kind: "005 sword"
        name: "cutlass"
        objNm: "cutlass"
        code: 6
        blocker: FALSE
        sprite: ["sprite_sword2", "sprite_sword2_2", "sprite_sword2_3"]
        spriteDraw: FALSE
        inven: {
            weight: 1.2
            value: 8
            equip: TRUE
            slot: "ield" ' Match last 4 of "right wield" OR "left wield"
            eqp1: "equip other"
            equipped: FALSE
            eqSlot: "" ' For exact slot name
            cd: 10 ' Cooldown, in cycles
        }
        statsArr: [ ["att", 3] ]
        dscr: getCreateItemDscr(6) ' "CUTLASS: Nautical in design, with a slight curve like the bow of a ship, this blade will stab and slice as you see fit."
    }
    ...
}


Then later when you need to find an object in some method (so m is not global), it's as simple as asking for
glbl = getGlobalAA()
' then do something with '
glbl.WHOLE_EARTH_CATALOG.cutlass
glbl.WHOLE_EARTH_CATALOG["short sword"]
No chained if-s, works very fast.

Now there are caveats to that - say these objects are not constants and you don't want when you create two different ones - cutlass1 and cutlass2 - and don't want when changing properties of cutlass1 (say change slot-equipped or make visible or make it dull) - don't want the same to happen to cutlass2? Then that means you need to create a copy from the WHOLE_EARTH_CATALOG samples/models/templates. If models are "flat" (i.e. single-depth of roAA), that's as easy as
newCutlass = { }
newCutlass.append(glbl.WHOLE_EARTH_CATALOG.cutlass) ' shallow copy

And so you have it. If you want to kick it up a notch, for a multi-level "deep copy"? The look for a deepCopy function (there must have been a few here in the forum) - but absolutely the laziest way to make a deep copy - that will work in many cases - is to do
newCutlass = parseJSON(formatJSON(glbl.WHOLE_EARTH_CATALOG.cutlass))

Bam!
 
User avatar
Komag
Topic Author
Posts: 808
Joined: Fri Aug 22, 2014 3:42 am

Re: "Internal limit size exceeded" compile error - function with lots of "elseif"s

Sat Oct 14, 2017 7:56 pm

squirreltown wrote:
Is there code after #3394?
what changed between now and the last time it worked?

The function ends right after returning the object. The last thing I did was add one more object, so I think I must have just gone over some limit with it.

I recounted - it's 233 things (the first IF and 232 ELSEIF's), and if I comment out one of them, even a small one, it all works again.

I'll try changing it to an Associative Array (probably something I should have done LONG ago, but the current approach is just what I was able to come up with in my early days learning to program this game).

How big can a dictionary be? How much memory would it take up if I keep it global like that?
 
User avatar
squirreltown
Posts: 870
Joined: Sun Apr 21, 2013 2:20 pm

Re: "Internal limit size exceeded" compile error - function with lots of "elseif"s

Sat Oct 14, 2017 8:49 pm

Komag wrote:
I recounted - it's 233 things (the first IF and 232 ELSEIF's), and if I comment out one of them, even a small one, it all works again.

That is really interesting. I remember the variables/functions were limited to 256 at one time, but i swear that got raised to 65000 or something. I agree with writing it differently though, i would have started looking over my shoulder long before 100 elseif's. :)
Kinetics Screensavers
 
User avatar
RokuNB
Posts: 465
Joined: Fri Mar 31, 2017 2:22 pm

Re: "Internal limit size exceeded" compile error - function with lots of "elseif"s

Sun Oct 15, 2017 12:12 pm

Komag wrote:
How big can a dictionary be?

Pretty big. Theoretically unlimited, current implementation will work decent with thousands and hit performance wall with tens of thousands and above - but that can be extended in another release. Now how big a dictionary literal (i.e. literally constructing it in one swoop within curly brackets as above) can be, i haven't tried - maybe there is a compiler limit and you'll come by to let us know

How much memory would it take up if I keep it global like that?

don't worry about it, insignificant in the big picture of things
 
User avatar
Komag
Topic Author
Posts: 808
Joined: Fri Aug 22, 2014 3:42 am

Re: "Internal limit size exceeded" compile error - function with lots of "elseif"s

Mon Oct 16, 2017 5:02 am

Okay, after a BUNCH of work, I've changed the system. It was harder than I thought because I had many instances of causing a stack overflow by an endless recursion due some aspect of an item definition depending on calling the Function itself to first set up a "base" item to alter. Then I had to change my whole approach of naming the keys (thank goodness you can now use strings directly). 

Anyway, now it's working great with no error's yet, we'll see how it goes.
 
User avatar
RokuKC
Posts: 315
Joined: Wed Sep 10, 2014 10:44 am
Location: Roku HQ

Re: "Internal limit size exceeded" compile error - function with lots of "elseif"s

Mon Oct 16, 2017 12:39 pm

Komag wrote:
This is a new error I've never seen before:

*** ERROR compiling /pkg:/source/obj.brs:
Internal limit size exceeded. (compile error &hae) in pkg:/source/obj.brs(3394)

Line 3394 is the "END IF" of a very large IF statement with many many ELSEIF lines. This is my object list for all Things and Items in the game. I've never heard of a limit like this - what is the limit? I'll probably just have to restructure how I do it, but if there is any insight, that would be appreciated.

A quick count is about 240 ELSEIF lines


There is currently a limit of 255 jumps (either compiler generated or goto labels) within a function, which is being exceeded with all the elseifs in your function.
 
User avatar
Komag
Topic Author
Posts: 808
Joined: Fri Aug 22, 2014 3:42 am

Re: "Internal limit size exceeded" compile error - function with lots of "elseif"s

Mon Oct 16, 2017 1:54 pm

Hmm, okay, so some other things must be "jumps" too, such as other Function calls maybe, so added to the 232 ELSEIF's got up over the 255 limit.
 
User avatar
RokuKC
Posts: 315
Joined: Wed Sep 10, 2014 10:44 am
Location: Roku HQ

Re: "Internal limit size exceeded" compile error - function with lots of "elseif"s

Mon Oct 16, 2017 3:01 pm

Komag wrote:
Hmm, okay, so some other things must be "jumps" too, such as other Function calls maybe, so added to the 232 ELSEIF's got up over the 255 limit.


I wouldn't expect regular function calls to be an issue, but probably FOR / WHILE loops as well as IF.

Who is online

Users browsing this forum: No registered users and 7 guests