# actorskin
actorskin = IDENTIFIED_BLOCK
actorskin.name = TRANSLATED_STRING
actorskin.singleplayer = BOOLEAN
actorskin.multiplayer = BOOLEAN

# aircraft
aircraft = IDENTIFIED_BLOCK
aircraft.param = ANONYMOUS_BLOCK
aircraft.param.speed = INT
aircraft.param.maxspeed = INT
aircraft.param.shield = INT
aircraft.param.ecm = INT
aircraft.param.damage = INT
aircraft.param.accuracy = INT
aircraft.param.range = INT
aircraft.param.antimatter = INT
aircraft.name = TRANSLATED_STRING
aircraft.defaultname = TRANSLATED_STRING
aircraft.interestlevel = INT
aircraft.type = ENUM
aircraft.type.VALUES = transporter,interceptor,ufo
aircraft.model = MODEL
aircraft.price = INT
aircraft.leader = BOOLEAN
aircraft.building = ID
aircraft.building.VALUES = building
aircraft.numteam = INT
aircraft.size = INT
aircraft.image = PICS_IMAGE
aircraft.nogeoscape = BOOLEAN
aircraft.radar = ANONYMOUS_BLOCK
aircraft.radar.range = INT
aircraft.radar.trackingrange = INT
aircraft.slot = ANONYMOUS_BLOCK
aircraft.slot.type = ENUM
aircraft.slot.type.VALUES = base_missile,base_laser,weapon,shield,electronics,pilot,ammo,base_ammo_missile,base_ammo_laser
aircraft.slot.position = ENUM
aircraft.slot.position.VALUES = nose_left,nose_center,nose_right,wing_left,wing_right,rear_left,rear_center,rear_right
aircraft.slot.size = ENUM
aircraft.slot.size.VALUES = light,medium,heavy
aircraft.slot.contains = ID
aircraft.slot.contains.VALUES = tech
aircraft.slot.ammo = ID
aircraft.slot.ammo.VALUES = tech

# alienteam
# TODO alienteam.equipment.ELEMENT must be fixed by another validator
alienteam = IDENTIFIED_BLOCK
alienteam.category = LIST
alienteam.category.ELEMENT = ENUM
alienteam.category.ELEMENT.VALUES = recon,terror,baseattack,building,supply,xvi,intercept,harvest,alienbase,ufocarrier,rescue
alienteam.equipment = LIST
alienteam.equipment.ELEMENT = STRING
alienteam.teaminterest = ANONYMOUS_BLOCK
alienteam.teaminterest.mininterest = INT
alienteam.teaminterest.maxinterest = INT
alienteam.teaminterest.minaliencount = INT
alienteam.teaminterest.maxaliencount = INT
alienteam.teaminterest.team = LIST
alienteam.teaminterest.team.ELEMENT = ID
alienteam.teaminterest.team.ELEMENT.VALUES = team

# TODO basetemplate
# it is need to rework the script to have refereces to buildings
basetemplate = IDENTIFIED_BLOCK
basetemplate.building = TUPLE
basetemplate.building.ELEMENT1 = ID
basetemplate.building.ELEMENT1.VALUES = building
basetemplate.building.ELEMENT2 = VEC2

# building
building = IDENTIFIED_BLOCK
building.name = TRANSLATED_STRING
building.image = PICS_IMAGE
building.fixcosts = INT
building.depends = ID
building.depends.VALUES = building
building.type = ENUM
building.type.VALUES = lab,hospital,aliencont,workshop,storage,hangar,smallhangar,quarters,power,command,amstorage,entrance,missile,laser,radar
building.build_time = INT
building.varcosts = INT
building.map_name = STRING
building.tech = ID
building.tech.VALUES = tech
building.size = VEC2
building.capacity = INT
building.level = REAL
building.nogeoscape = BOOLEAN
building.ondisable = STRING
building.onenable = STRING
building.ondestroy = STRING
building.onconstruct = STRING
building.mandatory = BOOLEAN
building.max_count = INT
building.starting_employees = INT

# campaign
campaign = IDENTIFIED_BLOCK
campaign.name = TRANSLATED_STRING
campaign.text = TRANSLATED_STRING
campaign.team = ENUM
campaign.team.VALUES = civilian,phalanx,alien
campaign.soldiers = INT
campaign.scientists = INT
campaign.workers = INT
campaign.pilots = INT
campaign.ugvs = INT
campaign.difficulty = INT
campaign.minhappiness = REAL
campaign.maxdebts = INT
campaign.xvirate = INT
campaign.firstbase = ID
campaign.researched = ID
campaign.equipment = ID
campaign.soldierequipment = ID
campaign.market = ID
campaign.asymptotic_market = ID
campaign.credits = INT
campaign.map = GEOSCAPE_IMAGE
# TODO ^ is that a ref to something? or it is useless? or it need a special validating?
campaign.visible = BOOLEAN
campaign.events = ID
campaign.date = DATE
campaign.basecost = INT
campaign.researchrate = REAL
campaign.uforeductionrate = REAL
campaign.initialinterest = INT
campaign.employeerate = REAL
campaign.healingrate = REAL
campaign.producerate = REAL
campaign.researchrate = REAL
campaign.alienbaseinterest = INT
campaign.salary = ANONYMOUS_BLOCK
campaign.salary.soldier_base = INT
campaign.salary.soldier_rankbonus = INT
campaign.salary.worker_base = INT
campaign.salary.worker_rankbonus = INT
campaign.salary.scientist_base = INT
campaign.salary.scientist_rankbonus = INT
campaign.salary.pilot_base = INT
campaign.salary.pilot_rankbonus = INT
campaign.salary.robot_base = INT
campaign.salary.robot_rankbonus = INT
campaign.salary.aircraft_factor = INT
campaign.salary.aircraft_divisor = INT
campaign.salary.base_upkeep = INT
campaign.salary.admin_initial = INT
campaign.salary.admin_soldier = INT
campaign.salary.admin_worker = INT
campaign.salary.admin_scientist = INT
campaign.salary.admin_pilot = INT
campaign.salary.admin_robot = INT
campaign.salary.debt_interest = REAL

# cgame
# TODO it is needed to rework equipmentlist as a list
cgame = IDENTIFIED_BLOCK
cgame.window = STRING
cgame.name = TRANSLATED_STRING
cgame.equipments = LIST
cgame.equipments.ELEMENT = ID
cgame.equipments.ELEMENT.VALUES = equipment

# chrtemplate
chrtemplate = IDENTIFIED_BLOCK
chrtemplate.rate = INT
chrtemplate.strength = VEC2
chrtemplate.speed = VEC2
chrtemplate.accuracy = VEC2
chrtemplate.mind = VEC2
chrtemplate.close = VEC2
chrtemplate.heavy = VEC2
chrtemplate.assault = VEC2
chrtemplate.sniper = VEC2
chrtemplate.explosive = VEC2
chrtemplate.health = VEC2
chrtemplate.piloting = VEC2
chrtemplate.targeting = VEC2
chrtemplate.evading = VEC2

# city
city = IDENTIFIED_BLOCK
city.name = TRANSLATED_STRING
city.pos = VEC2

# components
components = IDENTIFIED_BLOCK
components.aircraft = ID
components.aircraft.VALUES = aircraft
components.time = INT
components.item = ANONYMOUS_BLOCK
components.item.id = ID
components.item.id.VALUES = craftitem,item
components.item.amount = INT
components.item.numbercrash = ENUM
components.item.numbercrash.VALUES = 0,1,%

# craftitem
craftitem = IDENTIFIED_BLOCK
craftitem.name = TRANSLATED_STRING
craftitem.crafttype = ID
craftitem.crafttype.VALUES = building
craftitem.size = INT
craftitem.installationTime = INT
craftitem.price = INT
craftitem.is_dummy = BOOLEAN
craftitem.model = STRING
craftitem.crafttype = ENUM
craftitem.crafttype.VALUES = base_missile,base_laser,weapon,shield,electronics,pilot,ammo,base_ammo_missile,base_ammo_laser
craftitem.craftweapon = ID
craftitem.virtual = BOOLEAN
craftitem.beamcolor = COLOR
craftitem.ammo = INT
craftitem.wdamage = INT
craftitem.wrange = REAL
craftitem.wspeed = INT
craftitem.delay = INT
craftitem.bullets = BOOLEAN
craftitem.beam = BOOLEAN
craftitem.price = INT
craftitem.installationTime = INT
# TODO thing using V_RELABS are not very nice (for the game code too)
craftitem.fuelsize = REAL
craftitem.ecm = REAL
craftitem.speed = REAL
craftitem.damage = REAL
craftitem.shield = REAL
craftitem.maxspeed = REAL
craftitem.accuracy = REAL

# TODO damagetypes
# maybe creating an id per damagetypes makes more sense

# entity
# TODO maybe the full entity type need a special validator
# TODO most of this strings need another validating
entity = IDENTIFIED_BLOCK
entity.description = STRING
entity.color = COLOR
entity.size = STRING
entity.spawnflags = STRING
entity.model = STRING
entity.mandatory = ANONYMOUS_MAP_BLOCK
entity.optional = ANONYMOUS_MAP_BLOCK
entity.type = ANONYMOUS_MAP_BLOCK
entity.range = ANONYMOUS_MAP_BLOCK
entity.default = ANONYMOUS_MAP_BLOCK

# TODO equipment
# it is needed to rework the script (item element)
equipment = IDENTIFIED_BLOCK
equipment.name = TRANSLATED_STRING
equipment.mininterest = INT
equipment.maxinterest = INT
equipment.item = TUPLE
equipment.item.ELEMENT1 = ID
equipment.item.ELEMENT1.VALUES = item,craftitem
equipment.item.ELEMENT2 = INT
equipment.aircraft = TUPLE
equipment.aircraft.ELEMENT1 = ID
equipment.aircraft.ELEMENT1.VALUES = aircraft
equipment.aircraft.ELEMENT2 = INT

# TODO events
# it should be better to rework the event as a single element to create id
# QUESTION is the "main" id usefull for something?

# font
font = IDENTIFIED_BLOCK
font.font = TRANSLATED_STRING
font.size = INT
font.style = ENUM
font.style.VALUES = TTF_STYLE_NORMAL,TTF_STYLE_BOLD,TTF_STYLE_ITALIC,TTF_STYLE_UNDERLINE

# gametype
gametype = IDENTIFIED_BLOCK
gametype.name = TRANSLATED_STRING
gametype.cvarlist = ANONYMOUS_MAP_BLOCK

# installation
# QUESTION it looks like image is relative to base instead of base/pics. Is that or?
installation = IDENTIFIED_BLOCK
installation.name = TRANSLATED_STRING
installation.model = MODEL
installation.image = BASE_IMAGE
installation.cost = INT
installation.radar_range = INT
installation.radar_tracking_range = INT
installation.max_damage = INT
installation.max_ufo_stored = INT
installation.max_batteries = INT
installation.buildtime = INT
installation.once = BOOLEAN
# TODO add the enum for installation.type
installation.type = STRING
installation.description = TRANSLATED_STRING

# implants
implant = IDENTIFIED_BLOCK
implant.item = ID
implant.item.VALUES = item
implant.removetime = INT
implant.installationtime = INT

# inventory
inventory = IDENTIFIED_BLOCK
inventory.shape = VEC4
inventory.extension = BOOLEAN
inventory.headgear = BOOLEAN
inventory.armour = BOOLEAN
inventory.temp = BOOLEAN
inventory.scroll = BOOLEAN
inventory.single = BOOLEAN
inventory.all = BOOLEAN
inventory.in = INT
inventory.out = INT

# item
# TODO we must fix the particle script to fix many ids
item = IDENTIFIED_BLOCK
item.name = TRANSLATED_STRING
item.model = MODEL
item.image = PICS_IMAGE
item.weapon = BOOLEAN
item.type = ENUM
# These are the animation types - that are configured in the *.anm files
# TODO: parse anm files and use the values from there
item.type.VALUES = armour,biggun,ammo,pistol,melee,rifle,grenade,rpg
item.weight = REAL
item.armourpath = STRING
# TODO ^ it need special validating
item.useable = ENUM
item.useable.VALUES = civilian,phalanx,alien
item.animationindex = INT
item.holdtwohanded = BOOLEAN
item.firetwohanded = BOOLEAN
item.shape = SHAPE
item.center = VEC3
item.scale = REAL
item.ammo = INT
item.reload = INT
item.reloadsound = SOUND
item.price = INT
item.size = INT
item.is_primary = BOOLEAN
item.is_secondary = BOOLEAN
item.is_heavy = BOOLEAN
item.is_misc = BOOLEAN
item.is_dummy = BOOLEAN
item.virtual = BOOLEAN
item.thrown = BOOLEAN
item.notonmarket = BOOLEAN
item.is_ugvitem = BOOLEAN
item.headgear = BOOLEAN
item.oneshot = BOOLEAN
item.deplete = BOOLEAN
item.dmgtype = STRING
# TODO ^ it is a ref to content of damagetypes, but this structure is quite strange
item.weapon_mod = ANONYMOUS_BLOCK
item.weapon_mod.weapon = ID
item.weapon_mod.firedef = ANONYMOUS_BLOCK
item.weapon_mod.firedef.name = TRANSLATED_STRING
item.weapon_mod.firedef.skill = ENUM
item.weapon_mod.firedef.skill.VALUES = strength,speed,accuracy,mind,close,heavy,assault,sniper,explosive,health
item.weapon_mod.firedef.projtl = ID
item.weapon_mod.firedef.projtl.VALUES = particle
item.weapon_mod.firedef.impact = ID
item.weapon_mod.firedef.impact.VALUES = particle
item.weapon_mod.firedef.hitbody = ID
item.weapon_mod.firedef.hitbody.VALUES = particle
item.weapon_mod.firedef.firesnd = SOUND
item.weapon_mod.firedef.impsnd = SOUND
item.weapon_mod.firedef.bodysnd = SOUND
item.weapon_mod.firedef.bncsnd = SOUND
item.weapon_mod.firedef.sndonce = BOOLEAN
item.weapon_mod.firedef.speed = INT
item.weapon_mod.firedef.spread = VEC2
item.weapon_mod.firedef.crouch = REAL
item.weapon_mod.firedef.range = REAL
item.weapon_mod.firedef.shots = INT
item.weapon_mod.firedef.delaybetweenshots = INT
item.weapon_mod.firedef.ammo = INT
item.weapon_mod.firedef.time = INT
item.weapon_mod.firedef.damage = VEC2
item.weapon_mod.firedef.dmgweight = STRING
item.weapon_mod.firedef.reaction = BOOLEAN
item.weapon_mod.firedef.spldmg = VEC2
item.weapon_mod.firedef.splrad = INT
item.weapon_mod.firedef.throughwall = INT
item.weapon_mod.firedef.gravity = BOOLEAN
item.weapon_mod.firedef.irgoggles = BOOLEAN
item.weapon_mod.firedef.rolled = BOOLEAN
item.weapon_mod.firedef.launched = BOOLEAN
item.weapon_mod.firedef.delay = INT
item.weapon_mod.firedef.bounce = INT
item.weapon_mod.firedef.bncfac = REAL
item.weapon_mod.firedef.rounds = INT
item.weapon_mod.firedef.impactattenuation = REAL

# quite special cause the key should refer to an id (it is not hardcoded ingame)
item.protection = ANONYMOUS_BLOCK
item.protection.normal_light = INT
item.protection.normal_medium = INT
item.protection.normal_heavy = INT
item.protection.normal_spray = INT
item.protection.normal_steelblade = INT
item.protection.normal_monomolecularblade = INT
item.protection.normal_needle = INT
item.protection.blast = INT
item.protection.fire_medium = INT
item.protection.fire_heavy = INT
item.protection.fire_flamer = INT
item.protection.incendiary = INT
item.protection.shock = INT
item.protection.plasma_light = INT
item.protection.plasma_medium = INT
item.protection.plasma_heavy = INT
item.protection.plasma_pierce = INT
item.protection.laser_light = INT
item.protection.laser_medium = INT
item.protection.laser_heavy = INT
item.protection.particlebeam_light = INT
item.protection.particlebeam_medium = INT
item.protection.particlebeam_heavy = INT
item.protection.stun_electro = INT
item.protection.stun_gas = INT

item.rating = ANONYMOUS_BLOCK
item.rating.normal = INT
item.rating.blast = INT
item.rating.fire = INT
item.rating.shock = INT
item.rating.plasma = INT
item.rating.laser = INT
item.rating.particlebeam = INT
item.rating.stun_electro = INT
item.rating.stun_gas = INT

# language
# TODO it is needed to rework the list alone
language = IDENTIFIED_BLOCK
language.name = TRANSLATED_STRING
language.native = STRING
language.code = LIST
language.code.ELEMENT = STRING

# mail
mail = IDENTIFIED_BLOCK
mail.from = TRANSLATED_STRING
mail.to = TRANSLATED_STRING
mail.subject = TRANSLATED_STRING
mail.body = TRANSLATED_STRING
mail.model = MODEL
mail.icon = PICS_IMAGE
mail.skipmessage = BOOLEAN

# mapdef
# TODO it is needed to rework some content with a list
# TODO maybe add special validator for map name and param?
mapdef = IDENTIFIED_BLOCK
mapdef.map = STRING
mapdef.params = LIST
mapdef.size = STRING
mapdef.singleplayer = BOOLEAN
mapdef.multiplayer = BOOLEAN
mapdef.campaign = BOOLEAN
mapdef.storyrelated = BOOLEAN
mapdef.teams = INT
mapdef.gametypes = ANONYMOUS_BLOCK
mapdef.description = TRANSLATED_STRING
mapdef.victorycondition = TRANSLATED_STRING
mapdef.missionbriefing = TRANSLATED_STRING
mapdef.maxaliens = INT
mapdef.civilianteam = ID
mapdef.civilianteam.VALUES = team
mapdef.onwin = STRING
mapdef.hwclass = INT
mapdef.gametypes = LIST
mapdef.gametypes.ELEMENT = ID
mapdef.gametypes.ELEMENT.VALUES = gametype
mapdef.aircraft = LIST
mapdef.aircraft.ELEMENT = ID
mapdef.aircraft.ELEMENT.VALUES = aircraft
mapdef.ufos = LIST
mapdef.ufos.ELEMENT = ID
mapdef.ufos.ELEMENT.VALUES = aircraft
mapdef.terrains = LIST
mapdef.terrains.ELEMENT = ENUM
mapdef.terrains.ELEMENT.VALUES = desert,arctic,water,mountain,tropical,cold,wasted,grass,coast
mapdef.cultures = LIST
mapdef.cultures.ELEMENT = ENUM
mapdef.cultures.ELEMENT.VALUES = water,eastern,western,oriental,african
mapdef.populations = LIST
mapdef.populations.ELEMENT = ENUM
mapdef.populations.ELEMENT.VALUES = water,urban,suburban,village,rural,nopopulation

# medal
medal = IDENTIFIED_BLOCK
medal.name = TRANSLATED_STRING
medal.image = STRING

# menu_model
menu_model = IDENTIFIED_BLOCK
menu_model.model = MODEL
menu_model.tag = STRING
menu_model.parent = ID
menu_model.parent.VALUES = menu_model
menu_model.need = ID
menu_model.need.VALUES = menu_model
menu_model.anim = STRING

# msgoptions
msgoptions = IDENTIFIED_BLOCK
msgoptions.category = ANONYMOUS_BLOCK
msgoptions.category.name = TRANSLATED_STRING
msgoptions.category.option = ANONYMOUS_BLOCK
msgoptions.category.option.type = STRING
msgoptions.category.option.status = LIST
msgoptions.category.option.status.ELEMENT = ENUM
msgoptions.category.option.status.ELEMENT.VALUES = PAUSE,SOUND,NOTIFY

# msgid
msgid = IDENTIFIED_BLOCK
msgid.text = TRANSLATED_STRING

# music
music = IDENTIFIED_LIST
music.ELEMENT = MUSIC

# names
names = IDENTIFIED_BLOCK
names.female = LIST
names.female.ELEMENT = STRING
names.male = LIST
names.male.ELEMENT = STRING
names.neutral = LIST
names.neutral.ELEMENT = STRING
names.lastname = LIST
names.lastname.ELEMENT = STRING

# nation
nation = IDENTIFIED_BLOCK
nation.name = TRANSLATED_STRING
nation.color = COLOR
nation.funding = INT
nation.happiness = REAL
nation.soldiers = INT
nation.scientists = INT
nation.workers = INT
nation.pilots = INT
nation.pos = VEC2

# TODO notresearchable

# TODO particle
# TODO it is needed to find a way to parse the full file

# rank
rank = IDENTIFIED_BLOCK
rank.name = TRANSLATED_STRING
rank.shortname = TRANSLATED_STRING
rank.image = PICS_IMAGE
rank.mind = INT
rank.killed_enemies = INT
rank.killed_others = INT
rank.type = ENUM
rank.type.VALUES =  EMPL_SOLDIER,EMPL_SCIENTIST,EMPL_SOLDIER,EMPL_WORKER,EMPL_PILOT,EMPL_ROBOT
rank.factor = REAL
rank.level = INT

# TODO researchable
# TODO researched

# sequence
# TODO it is need to rework some part of it with a list (precache)
sequence = IDENTIFIED_BLOCK
sequence.music = MUSIC
sequence.animspeed = INT
sequence.click = INT
sequence.wait = REAL
sequence.delete = ID
sequence.rem = ID
sequence.sound = SOUND
sequence.precache = IDENTIFIED_LIST
sequence.precache.ELEMENT = STRING
sequence.camera = IDENTIFIED_BLOCK
sequence.camera.zoom = REAL
sequence.camera.angles = VEC3
sequence.camera.dist = REAL
sequence.model = IDENTIFIED_BLOCK
sequence.model.model = MODEL
sequence.model.skin = INT
sequence.model.anim = STRING
sequence.model.origin = VEC3
sequence.model.omega = VEC3
sequence.model.speed = VEC3
sequence.model.angles = VEC3
sequence.model.parent = ID
sequence.model.tag = STRING
sequence.obj2d = IDENTIFIED_BLOCK
sequence.obj2d.image = BASE_IMAGE
sequence.obj2d.text = TRANSLATED_STRING
sequence.obj2d.pos = VEC2
sequence.obj2d.size = VEC2
sequence.obj2d.align = STRING
sequence.obj2d.color = COLOR
sequence.obj2d.bgcolor = COLOR
sequence.obj2d.speed = VEC2
sequence.obj2d.font = STRING
sequence.obj2d.fade = VEC4
sequence.obj2d.relative = BOOLEAN
sequence.obj2d.inbackground = BOOLEAN

# sprite
sprite = IDENTIFIED_BLOCK
sprite.border = BOOLEAN
sprite.image = PICS_IMAGE
sprite.texl = VEC2
sprite.size = VEC2
sprite.pack64 = BOOLEAN
sprite.single = BOOLEAN
sprite.tiled_17_1_3 = BOOLEAN
sprite.tiled_25_1_3 = BOOLEAN
sprite.tiled_popup = BOOLEAN
sprite.hoveredtexl = VEC2
sprite.disabledtexl = VEC2
sprite.clickedtexl = VEC2

# staticcampaign
staticcampaign = IDENTIFIED_BLOCK
staticcampaign.mission = IDENTIFIED_BLOCK
staticcampaign.mission.city = ID
staticcampaign.mission.city.VALUES = city
staticcampaign.stage = IDENTIFIED_BLOCK
staticcampaign.stage.set = IDENTIFIED_BLOCK
staticcampaign.stage.set.needed = ID
staticcampaign.stage.set.delay = VEC3
staticcampaign.stage.set.frame = VEC3
staticcampaign.stage.set.expire = VEC3
staticcampaign.stage.set.missions = STRING
staticcampaign.stage.set.number = INT
staticcampaign.stage.set.quota = INT
staticcampaign.stage.set.nextstage = ID
staticcampaign.stage.set.ufos = INT
staticcampaign.stage.set.endstage = ID
staticcampaign.stage.set.commands = STRING

# team
# TODO fix the hit_particle values
# TODO fix the race values, or it is an ID?
# TODO fix many other content
team = IDENTIFIED_BLOCK
team.weapons = BOOLEAN
team.armour = BOOLEAN
team.robot = BOOLEAN
team.name = TRANSLATED_STRING
team.tech = ID
team.team = ENUM
team.team.VALUES = phalanx,civilian,alien
team.onlyWeapon = ID
team.size = INT
team.hit_particle = ID
team.hit_particle.VALUES = particle
team.death_texture = BASE_IMAGE
team.bodytype = ID
team.footstepsound = SOUND

team.names = ID
team.names.VALUES = names
team.models = ANONYMOUS_BLOCK
team.models.female = TUPLE
team.models.female.ELEMENT1 = STRING
team.models.female.ELEMENT2 = STRING
team.models.female.ELEMENT3 = STRING
team.models.female.ELEMENT4 = INT
team.models.female.ELEMENT5 = INT
team.models.male = TUPLE
team.models.male.ELEMENT1 = STRING
team.models.male.ELEMENT2 = STRING
team.models.male.ELEMENT3 = STRING
team.models.male.ELEMENT4 = INT
team.models.male.ELEMENT5 = INT
team.models.neutral = TUPLE
team.models.neutral.ELEMENT1 = STRING
team.models.neutral.ELEMENT2 = STRING
team.models.neutral.ELEMENT3 = STRING
team.models.neutral.ELEMENT4 = INT
team.models.neutral.ELEMENT5 = INT
team.actorsounds = ANONYMOUS_BLOCK
team.actorsounds.female = ANONYMOUS_BLOCK
team.actorsounds.female.hurtsound = SOUND
team.actorsounds.female.deathsound = SOUND
team.actorsounds.male = ANONYMOUS_BLOCK
team.actorsounds.male.hurtsound = SOUND
team.actorsounds.male.deathsound = SOUND
team.actorsounds.neutral = ANONYMOUS_BLOCK
team.actorsounds.neutral.hurtsound = SOUND
team.actorsounds.neutral.deathsound = SOUND

team.templates = LIST
team.templates.ELEMENT = ID
team.templates.ELEMENT.VALUES = chrtemplate

team.resistance = ANONYMOUS_BLOCK
team.resistance.normal_spray = INT
team.resistance.normal_light = INT
team.resistance.normal_medium = INT
team.resistance.normal_heavy = INT
team.resistance.normal_steelblade = INT
team.resistance.normal_monomolecularblade = INT
team.resistance.normal_needle = INT
team.resistance.blast = INT
team.resistance.fire_light = INT
team.resistance.fire_medium = INT
team.resistance.fire_heavy = INT
team.resistance.fire_flamer = INT
team.resistance.incendiary = INT
team.resistance.shock = INT
team.resistance.laser_light = INT
team.resistance.laser_medium = INT
team.resistance.laser_heavy = INT
team.resistance.plasma_light = INT
team.resistance.plasma_medium = INT
team.resistance.plasma_heavy = INT
team.resistance.plasma_pierce = INT
team.resistance.particlebeam_light = INT
team.resistance.particlebeam_medium = INT
team.resistance.particlebeam_heavy = INT
team.resistance.stun_electro = INT
team.resistance.stun_gas = INT

# bodydef
bodydef = IDENTIFIED_BLOCK
bodydef.bodypart = IDENTIFIED_BLOCK
bodydef.bodypart.name = TRANSLATED_STRING
bodydef.bodypart.area = INT
bodydef.bodypart.bleed = INT
bodydef.bodypart.threshold = INT
bodydef.bodypart.shape = COLOR
bodydef.bodypart.penalty = TUPLE
bodydef.bodypart.penalty.ELEMENT1 = ENUM
bodydef.bodypart.penalty.ELEMENT1.VALUES = reaction,movement,accuracy,shooting,visibility,max_tu
bodydef.bodypart.penalty.ELEMENT2 = INT

# tech
tech = IDENTIFIED_BLOCK
tech.name = TRANSLATED_STRING
tech.type = ENUM
tech.type.VALUES = tech,weapon,news,armour,craft,craftitem,building,alien,ugv,logic
tech.up_chapter = ID
tech.up_chapter.VALUES = up_chapter
tech.time = INT
tech.delay = INT
tech.producetime = INT
tech.provides = ID
tech.image = PICS_IMAGE
tech.model = MODEL_OR_ID
tech.model.VALUES = menu_model,ugv
tech.announce = BOOLEAN
tech.redirect = ID
tech.redirect.VALUES = tech
tech.event = STRING

tech.description = ANONYMOUS_BLOCK
tech.description.default = TRANSLATED_STRING
tech.description.extra = TUPLE
tech.description.extra.ELEMENT1 = ID
tech.description.extra.ELEMENT1.VALUES = tech
tech.description.extra.ELEMENT2 = TRANSLATED_STRING
tech.pre_description = ANONYMOUS_BLOCK
tech.pre_description.default = TRANSLATED_STRING
tech.pre_description.extra = TUPLE
tech.pre_description.extra.ELEMENT1 = ID
tech.pre_description.extra.ELEMENT1.VALUES = tech
tech.pre_description.extra.ELEMENT2 = TRANSLATED_STRING

tech.mail_pre = ANONYMOUS_BLOCK
tech.mail_pre.from = TRANSLATED_STRING
tech.mail_pre.to = TRANSLATED_STRING
tech.mail_pre.icon = PICS_IMAGE
tech.mail_pre.model = MODEL
tech.mail_pre.subject = TRANSLATED_STRING
tech.mail = ANONYMOUS_BLOCK
tech.mail.from = TRANSLATED_STRING
tech.mail.to = TRANSLATED_STRING
tech.mail.subject = TRANSLATED_STRING
tech.mail.icon = PICS_IMAGE
tech.mail.model = MODEL

tech.require_AND = ANONYMOUS_BLOCK
tech.require_AND.alienglobal = INT
tech.require_AND.tech = ID
tech.require_AND.tech.VALUES = tech
tech.require_AND.item = TUPLE
tech.require_AND.item.ELEMENT1 = ID
tech.require_AND.item.ELEMENT1.VALUES = item,craftitem
tech.require_AND.item.ELEMENT2 = INT
tech.require_AND.ufo = TUPLE
tech.require_AND.ufo.ELEMENT1 = ID
tech.require_AND.ufo.ELEMENT1.VALUES = aircraft
tech.require_AND.ufo.ELEMENT2 = INT
tech.require_AND.alien = TUPLE
tech.require_AND.alien.ELEMENT1 = ID
tech.require_AND.alien.ELEMENT1.VALUES = team
tech.require_AND.alien.ELEMENT2 = INT
tech.require_AND.alien_dead = TUPLE
tech.require_AND.alien_dead.ELEMENT1 = ID
tech.require_AND.alien_dead.ELEMENT1.VALUES = team
tech.require_AND.alien_dead.ELEMENT2 = INT

tech.require_OR = ANONYMOUS_BLOCK
tech.require_OR.alienglobal = INT
tech.require_OR.tech = ID
tech.require_OR.tech.VALUES = tech
tech.require_OR.item = TUPLE
tech.require_OR.item.ELEMENT1 = ID
tech.require_OR.item.ELEMENT1.VALUES = item,craftitem
tech.require_OR.item.ELEMENT2 = INT
tech.require_OR.ufo = TUPLE
tech.require_OR.ufo.ELEMENT1 = ID
tech.require_OR.ufo.ELEMENT1.VALUES = aircraft
tech.require_OR.ufo.ELEMENT2 = INT
tech.require_OR.alien = TUPLE
tech.require_OR.alien.ELEMENT1 = ID
tech.require_OR.alien.ELEMENT1.VALUES = team
tech.require_OR.alien.ELEMENT2 = INT
tech.require_OR.alien_dead = TUPLE
tech.require_OR.alien_dead.ELEMENT1 = ID
tech.require_OR.alien_dead.ELEMENT1.VALUES = team
tech.require_OR.alien_dead.ELEMENT2 = INT

tech.require_for_production = ANONYMOUS_BLOCK
tech.require_for_production.alienglobal = INT
tech.require_for_production.tech = ID
tech.require_for_production.tech.VALUES = tech
tech.require_for_production.item = TUPLE
tech.require_for_production.item.ELEMENT1 = ID
tech.require_for_production.item.ELEMENT1.VALUES = item,craftitem
tech.require_for_production.item.ELEMENT2 = INT
tech.require_for_production.ufo = TUPLE
tech.require_for_production.ufo.ELEMENT1 = ID
tech.require_for_production.ufo.ELEMENT1.VALUES = aircraft
tech.require_for_production.ufo.ELEMENT2 = INT
tech.require_for_production.alien = TUPLE
tech.require_for_production.alien.ELEMENT1 = ID
tech.require_for_production.alien.ELEMENT1.VALUES = team
tech.require_for_production.alien.ELEMENT2 = INT
tech.require_for_production.alien_dead = TUPLE
tech.require_for_production.alien_dead.ELEMENT1 = ID
tech.require_for_production.alien_dead.ELEMENT1.VALUES = team
tech.require_for_production.alien_dead.ELEMENT2 = INT

# terrain
terrain = IDENTIFIED_BLOCK
terrain.footstepsound = SOUND
terrain.bouncefraction = REAL

# tips
tip = TRANSLATED_STRING

# tutorial
tutorial = IDENTIFIED_BLOCK
tutorial.name = TRANSLATED_STRING
tutorial.sequence = ID

# ugv
ugv = IDENTIFIED_BLOCK
ugv.tu = INT
ugv.weapon = ID
ugv.armour = ENUM
ugv.armour.VALUES = medium
ugv.actors = TRANSLATED_STRING
ugv.price = INT

# up_chapter
up_chapter = IDENTIFIED_BLOCK
up_chapter.name = TRANSLATED_STRING

# version
version = STRING
