Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --------------------------------------------------------------------------------------
- --- VARIABLES THAT AFFECT THE SPACE OF THE GAME AREA (SPAWN AREA, PLAY AREA AND CATALOGUE AREA TOGETHER)
- --------------------------------------------------------------------------------------
- --
- -- PLAY AREA
- --
- GRIDCELL_SIZE = 5 -- the width of one grid cell in minecraft blocks. MUST BE ODD NUMBER minimum is 3 maximum is 11
- GRIDCELL_COUNT = 10 -- the number of gridcells or slots across X and Z in one game. MUST BE between 5 and 10
- --
- -- CATALOGUE AREA
- --
- CATALOGUE_SLOTCOUNT = {
- x = 2, --the number of slots along the X axis
- z = 3 --the number of slots along the Z axis
- }
- --
- --
- --
- ------------------------------
- ---ADVANCED SETTINGS BELOW----
- ------------------------------
- --
- -- ADVANCED PLAY AREA SETTINGS
- --
- PLAY_AREA_OFFSET = {
- x = 3, -- the number of grid cells along X the play area is offset from the edge of the spawn zone (the same is used of the CATALOGUE offset)
- z = 3 -- the number of grid cells along Z the play area is offset from the edge of the spawn zone (the negtive of this is used for the catalogue offset)
- }
- TRENCHES ={
- WIDTH = 1, -- in minecraft blocks how WIDE are trenches carved around the platforms of the play area, catalogue area and spawn area (from the edge out)
- DEPTH = 5 -- in minecraft blocks how DEEP are trenches carved around the platforms of the play area, catalogue area and spawn area (from level of computer down)
- }
- DO_GRID = true --this refers to the grid of detector blocks placed on the ground at the start of each new game
- GRID_HOLE_CHANCE = 0 --
- --BUILDZONE_FLOOR_HEIGHT = -1 --the elevation of the floor of the play area realtive to the computer elevation (along Y axis)
- --- this is the matrix or grid of play areas that are created in the world
- GAME_FIELD = {
- countX = 1,
- countZ = 1
- }
- GAME_FIELD_MAX = {
- countX = 3, --don't change this, it must stay 3
- countZ = 3 --don't change this, it must stay 3
- }
- BUILDZONE_OFFSET = 0 -- in grid cells, the number of grid cells left between the play areas (buildzones)
- --
- -- ADVANCED CATALOGUE AREA SETTINGS
- --
- CATALOGUE_SLOTSIZE = {
- x = 3, -- the size of the slot defined as number of grid cells along X
- z = 3 -- the size of the slot defined as number of grid cells along Z
- }
- CATALOGUE_SLOT_OFFSET = 1 -- the number of grid cells left free between the slots, also used of the width of the edge of both catalogue and play area
- VOCAB_HEIGHT = 29 --the maximum height of an element in the catalgoue
- --
- -- ADVANCED SPAWN AREA
- --
- --the spawn area consists of one large area for the spawn of everyone, both ops and adventure players and
- -- a dispatching area with launchpads that lead to a buildzone. for each buildzone there is a dedicated launchpad
- SPAWNZONE_SIZE = 39 -- in minecraft blocks, the size of the spawn zone
- --the launch pads are the square ares in the spawn zone on which players jump to join a game in the corresponding buildzone
- PORTAL = {
- SIZE = 5, -- in minecraft blocks, the size of the launch pads along X and Z
- OFFSET = 3 -- in minecraft blocks, the distance between the launch pads
- }
- -- Status ( 0 = in game, 1 = quit with homecomer, 2 = left game )
- PLAYER_STATUS = {
- IN_GAME = 0,
- LEFT_WITH_HOMECOMER = 1,
- LEFT_OTHERWISE = 2
- }
- -- Phase ( 1 = dormant, 2 = currently playing, 3 = game over, waiting for players to leave the buildzone )
- QUEUE_PHASE = {
- DORMANT = 1,
- PLAYING = 2,
- GAMEOVER = 3
- }
- CLONE_MASK_MODE = {
- REPLACE = "replace", -- Clones all blocks, including air.
- MASKED = "masked", -- Clones only blocks that are not air.
- FILTERED = "filtered" -- Clones only blocks that match the tileName.
- }
- CLONE_MODE = {
- NORMAL = "normal", -- Clone the blocks from the source region to the destination region.
- FORCE = "force", -- Force the clone if the source region and destination region overlap.
- MOVE = "move" -- Clone the blocks from the source region to the destination region. Then replace the cloned blocks in the source region with air (blocks not cloned in the source region will remain unchanged if CLONE_MASK_MODE.FILTERED was used).
- }
- FILL_LIMIT = 32768
- RECORDS_FOLDER = "/records"
- BUILDZONES_LIST_FILE = RECORDS_FOLDER.."/_buildzones-list.json"
- ------------------
- --OLDER STUFF
- -------------------
- DEBUG_MODE = true
- ANNOUNCE_ENGLISH = false
- ANNOUNCE_GERMAN = false
- SHOW_HIGHSCORES = false --maybe have debug mode highscroes and actual game highscores saved into files
- if not DEBUG_MODE then
- ANNOUNCE_ENGLISH = true --in actual play mode at least english messages will be displayed
- SHOW_HIGHSCORES = true --in play mode always show the highscores in the sidebar
- end
- CITY_VERSION = 1 -- this denotes which iteration of the map is current. When the map is full, i.e. all buildzones have been played we replace it with an empty one and increase the city vesrion with 1
- SPAWN_VILLAGER = false
- PHASE_LENGTH_GAME = 600 --seconds a game lasts
- PHASE_LENGTH_WAIT = 15 --seconds to wait for players to stand in the yeloow box before starting a game
- PHASE_LENGTH_OVER = 15 --seconds to wait after a game is completing befor setting the buildzone to the next phase
- HOMECOMER_TYPE = "Pig"
- HOMECOMER_VALUE = 90 --90 is for pig
- MAX_PLAYERS_PER_GAME = 4
- MIN_BUILDINGS = 5 -- the minimum number of buildings a buildzone must have in order to be saved and no discarded at the end of a game
- DEFAULT_NAME = 'BUILDING'
- WOOL_PER_EMERALD = 64
- PICKAXE_USES = 40
- BLOCKS = {
- AIR = {block='minecraft:air',variant=0},
- CAMP_FLOOR = {block='minecraft:sandstone',variant=0},
- WHITE_GRID = {block='minecraft:sandstone',variant=0},
- DARK_GRID = {block='minecraft:snow',variant=0},
- CONSTRUCTION = {block='minecraft:diamond_ore',variant=0},
- RING = {block='minecraft:diamond_ore',variant=0},
- DETECT = {block='minecraft:red_sandstone',variant=0},
- DETECT_DEAD = {block='minecraft:redstone_block',variant=0},
- VOCAB_DETECT = {block="minecraft:quartz_block",variant=0},
- VOCAB_REPLACE = {block="minecraft:coal_block",variant=0},
- VICTORY_MARKER = {block="minecraft:emerald_block",variant=0},
- PLUG = {block="minecraft:lapis_ore",variant=0},
- PHVFLOOR = {block="minecraft:stone_slab",variant=3},
- BUILDING_HOUSE = {block="minecraft:wool",variant=0},
- BUILDING_GARDEN = {block="minecraft:wool",variant=13},
- BUILDING_WATER = {block="minecraft:wool",variant=1},
- SPAWNZONE_FENCE = {block="minecraft:stained_glass",variant=0},
- _matWhiteSmooth ={block="mincreaft:stained_hardened_clay",variant=0},
- _matWhiteSmooth2 = {block="minecraft:brick_block",variant=0},
- _matYellowSmooth = {block="minecraft:stained_hardened_clay",variant=4},
- _matPinkSmooth = {block="minecraft:stained_hardened_clay",variant=6},
- _matBlueSmooth = {block="minecraft:stained_hardened_clay",variant=9},
- _matPurpleSmooth = {block="minecraft:stained_hardened_clay",variant=10},
- _matWhiteTextured = {block="minecraft:planks",variant=4},
- _matYellowTextured = {block="minecraft:planks",variant=1},
- _matPinkTextured = {block="minecraft:planks",variant=0},
- _matBlueTextured = {block="minecraft:planks",variant=2},
- _matPurpleTextured = {block="minecraft:planks",variant=5}
- }
- os.loadAPI('utils')
- os.loadAPI('json')
- local ox,oy,oz = commands.getBlockPosition()
- computer = {
- x = ox,
- y = oy,
- z = oz
- }
- -- function to check if settings file exist and if not create it using the default settings in registry
- --if settings file exists then read it and change the variables to reflect the settings there
- function loadCustomSettings()
- -- does json file exist?
- --local result = nil
- --fs.makeDir("/records")
- local filename = "settings"
- local settings = {}
- if utils.file_exists(filename) then
- ---read from file and change the settings
- settings = json.decodeFromFile(filename)
- --set the settings to the ones found in the file
- GRIDCELL_SIZE = settings.grid_cell_size
- GRIDCELL_COUNT = settings.grid_cell_count
- CATALOGUE_SLOTCOUNT = settings.catalogue_slot_count
- --PLAY_AREA_OFFSET = settings.play_area_offset
- --TRENCHES = settings.trenches
- DO_GRID = settings.do_grid
- GRID_HOLE_CHANCE = settings.grid_hole_chance
- --PLUG_LENGTH = settings.plug_length
- GAME_FIELD = settings.game_field
- BUILDZONE_OFFSET = settings.buildzone_offset
- CATALOGUE_SLOTSIZE = settings.catalogue_slot_size
- --CATALOGUE_SLOT_OFFSET = settings.catalogue_slot_offset
- --DEBUG_MODE = settings.debug_mode
- ANNOUNCE_ENGLISH = settings.announce_english
- ANNOUNCE_GERMAN = settings.announce_german
- --SHOW_HIGHSCORES = settings.show_highscores
- --CITY_VERSION = settings.city_version
- SPAWN_VILLAGER = settings.spawn_villager
- --NUMBER_OF_BUILDZONES = settings.number_of_buildzones
- PHASE_LENGTH_GAME = settings.phase_length_game
- PHASE_LENGTH_WAIT = settings.phase_length_wait
- PHASE_LENGTH_OVER = settings.phase_length_over
- --HOMECOMER_TYPE = settings.homecomer_type
- --HOMECOMER_VALUE = settings.homecomer_value
- --MAX_PLAYERS_PER_GAME = settings.max_players_per_game
- --MIN_BUILDINGS = settings.min_buildings
- --]]
- else
- --create the file with default settings
- --collect the settings variables in one json object
- settings.grid_cell_size = GRIDCELL_SIZE
- settings.grid_cell_count = GRIDCELL_COUNT
- settings.catalogue_slot_count = CATALOGUE_SLOTCOUNT
- --settings.play_area_offset = PLAY_AREA_OFFSET
- --settings.trenches = TRENCHES
- settings.do_grid = DO_GRID
- settings.grid_hole_chance = GRID_HOLE_CHANCE
- --settings.plug_length = PLUG_LENGTH
- settings.game_field = GAME_FIELD
- settings.buildzone_offset = BUILDZONE_OFFSET
- settings.catalogue_slot_size = CATALOGUE_SLOTSIZE
- --settings.catalogue_slot_offset = CATALOGUE_SLOT_OFFSET
- --settings.debug_mode = DEBUG_MODE
- settings.announce_english = ANNOUNCE_ENGLISH
- settings.announce_german = ANNOUNCE_GERMAN
- --settings.show_highscores = SHOW_HIGHSCORES
- --settings.city_version = CITY_VERSION
- settings.spawn_villager = SPAWN_VILLAGER
- --settings.number_of_buildzones = NUMBER_OF_BUILDZONES
- settings.phase_length_game = PHASE_LENGTH_GAME
- settings.phase_length_wait = PHASE_LENGTH_WAIT
- settings.phase_length_over = PHASE_LENGTH_OVER
- --settings.homecomer_type = HOMECOMER_TYPE
- --settings.homecomer_value = HOMECOMER_VALUE
- --settings.max_players_per_game = MAX_PLAYERS_PER_GAME
- --settings.min_buildings = MIN_BUILDINGS
- --save the file with settings
- local file = fs.open(filename,"w")
- file.write(json.encodePretty(settings))
- file.close()
- end
- return settings
- end
- loadCustomSettings()
- --- VARIABLES CONSTRUCTED FROM THE SETTINGS ABOVE
- BUILDZONE_WIDTH = GRIDCELL_SIZE * GRIDCELL_COUNT --
- PLUG_LENGTH = math.floor(GRIDCELL_SIZE/3) -- the number of minecraft blocks which the crosses arround each detector block that are made out of plug blocks will expand to
- --SPAWN related
- MAIN_SPAWN_AREA = {
- x = computer.x - math.floor(SPAWNZONE_SIZE/2),
- y = computer.y - 1,
- z = computer.z - math.floor(SPAWNZONE_SIZE/2),
- w = SPAWNZONE_SIZE + PORTAL.SIZE*GAME_FIELD_MAX.countX + PORTAL.OFFSET*(GAME_FIELD_MAX.countX+1),
- l = SPAWNZONE_SIZE,
- h = 3 -- the height of the fence around the spawn zone
- }
- PORTALS_LOCATIONS = {} --the coordinates of the 3x3 waitng zones for joining a game that correspond to a buildzone
- local padx = computer.x + math.floor(SPAWNZONE_SIZE/2) + PORTAL.OFFSET
- local pady = computer.y - 1
- local padz = computer.z - math.floor(GAME_FIELD_MAX.countZ/2) * PORTAL.OFFSET - math.floor((GAME_FIELD_MAX.countZ/2) * PORTAL.SIZE)
- for ix = 0, GAME_FIELD_MAX.countZ - 1 do
- for iz=0, GAME_FIELD_MAX.countZ - 1 do
- local xpos = padx + ix * (PORTAL.OFFSET + PORTAL.SIZE)
- local ypos = pady
- local zpos = padz + iz * (PORTAL.OFFSET + PORTAL.SIZE)
- --print("making pads", ix, iz, xpos, ypos, zpos)
- table.insert(PORTALS_LOCATIONS,{x=xpos,y=ypos,z=zpos})
- end
- end
- ---CATALOGUE related
- --the sizes of any catalogue slot in minecraft blocks
- ELEMENT = {
- sizeX = CATALOGUE_SLOTSIZE.x * GRIDCELL_SIZE,
- sizeZ = CATALOGUE_SLOTSIZE.z * GRIDCELL_SIZE
- }
- FIRST_ELEMENT= {
- --x = computer x minus the play are offset x minus 2 times the width (cells*2 + 3)
- x = computer.x - PLAY_AREA_OFFSET.x * GRIDCELL_SIZE - ELEMENT.sizeX - math.floor(GRIDCELL_SIZE/2),
- --computer y
- y = computer.y,
- --computer z + play area offset plus width (cells + 2)
- z = utils.closestGridCoord(computer.z, GRIDCELL_SIZE, computer.z + SPAWNZONE_SIZE/2) + PLAY_AREA_OFFSET.z * GRIDCELL_SIZE + math.floor(GRIDCELL_SIZE/2) + 1
- }
- CATALOG_AREA = {
- x = computer.x - (PLAY_AREA_OFFSET.x - CATALOGUE_SLOT_OFFSET) * GRIDCELL_SIZE - 1 ,
- y = computer.y - 1,
- z = utils.closestGridCoord(computer.z, GRIDCELL_SIZE, computer.z + SPAWNZONE_SIZE/2) + (PLAY_AREA_OFFSET.z - CATALOGUE_SLOT_OFFSET )* GRIDCELL_SIZE + 1,
- dx = - 2 * CATALOGUE_SLOTCOUNT.x * GRIDCELL_SIZE * ( CATALOGUE_SLOTSIZE.x + 1 ) - CATALOGUE_SLOT_OFFSET * GRIDCELL_SIZE * (CATALOGUE_SLOTCOUNT.x+1) +1 ,
- dz = CATALOGUE_SLOTCOUNT.z * GRIDCELL_SIZE * ( CATALOGUE_SLOTSIZE.z + 1 ) + CATALOGUE_SLOT_OFFSET * GRIDCELL_SIZE * (CATALOGUE_SLOTCOUNT.z+1) -1
- }
- ---
- ---
- --- PLAY AREA RELATED
- --
- NUMBER_OF_BUILDZONES = GAME_FIELD.countX*GAME_FIELD.countZ -- the number of games that can be active simultaneously
- --a platfrom encompassing all play areas (number of play areas is defined in GAME_FIELD)
- PLAY_AREAS = {
- x= computer.x + (PLAY_AREA_OFFSET.x - CATALOGUE_SLOT_OFFSET) * GRIDCELL_SIZE + 1 ,
- y=computer.y - 1,
- z = utils.closestGridCoord(computer.z, GRIDCELL_SIZE, computer.z + SPAWNZONE_SIZE/2) + (PLAY_AREA_OFFSET.z - CATALOGUE_SLOT_OFFSET ) * GRIDCELL_SIZE + 1,
- dx = 2 * CATALOGUE_SLOT_OFFSET * GRIDCELL_SIZE + (GRIDCELL_SIZE-1) + BUILDZONE_WIDTH * GAME_FIELD.countX + (BUILDZONE_OFFSET * GRIDCELL_SIZE)*(GAME_FIELD.countX-1),
- dz = 2 * CATALOGUE_SLOT_OFFSET * GRIDCELL_SIZE + (GRIDCELL_SIZE-1) + BUILDZONE_WIDTH * GAME_FIELD.countZ + (BUILDZONE_OFFSET * GRIDCELL_SIZE)*(GAME_FIELD.countZ-1)
- }
- FIRST_ZONE = {
- x=computer.x + PLAY_AREA_OFFSET.x * GRIDCELL_SIZE + 1 + math.floor(GRIDCELL_SIZE/2),
- y=computer.y - 1,
- z=utils.closestGridCoord(computer.z, GRIDCELL_SIZE, computer.z + SPAWNZONE_SIZE/2) + PLAY_AREA_OFFSET.z * GRIDCELL_SIZE + 1 + math.floor(GRIDCELL_SIZE/2),
- }
- -- OLDER STUFF
- SPAWN = {
- x=computer.x-5,
- y=computer.y,
- z=computer.z-5,
- a1=90,
- a2=0
- }
- DEBUG_ZONE= {
- x=computer.x+2,
- y=computer.y,
- z=computer.z+2
- }
- WAITZONE = {
- x=12093,
- y=56,
- z=-1779,
- w=5,
- l=5
- }
- houseNBT = '{Item:{id:minecraft:wool,Damage:0s,tag:{display:{Name:"House Construction Block",Lore:[Place this against a Diamond to build a house]},CanPlaceOn:["'..BLOCKS.BUILDING_HOUSE.block..'","'..BLOCKS.PLUG.block..'","'..BLOCKS.DETECT.block..'"]}}}'
- -- {Item:{id:minecraft:wool,Damage:13s,tag:{display:{Name:"Resource 3",Lore:[20000 BLOCKS Resource Item]},CanPlaceOn:["minecraft:sandstone","minecraft:lapis_ore","minecraft:red_sandstone","wool"]}}}
- --gardenNBT = '{Item:{id:minecraft:wool,Damage:13s,tag:{display:{Name:"Garden Construction Block",Lore:[Place this against a Diamond to build a pond or pool]},CanPlaceOn:["'..BLOCKS.BUILDING_HOUSE.block..'","'..BLOCKS.PLUG.block..'","'..BLOCKS.DETECT.block..'"]}}}'
- --[[
- --call these to return a proper minecraft item string including adventure mode properties
- function houseBlock(quant)
- local text =
- BLOCKS.BUILDING_HOUSE.block..' '..quant..' '..BLOCKS.BUILDING_HOUSE.variant..' {display:{Name:"Urban Resource",Lore:[Place this against a Detector to build denser, more urban buildings]},CanPlaceOn:["'..BLOCKS.BUILDING_HOUSE.block..'","'..BLOCKS.PLUG.block..'","'..BLOCKS.DETECT.block..'"]}'
- return text
- end
- function gardenBlock(quant)
- local text = BLOCKS.BUILDING_GARDEN.block..' '..quant..' '..BLOCKS.BUILDING_GARDEN.variant..' {display:{Name:"Nature Resource",Lore:[Place this against a Detector to build greener, more open buildings]},CanPlaceOn:["'..BLOCKS.BUILDING_HOUSE.block..'","'..BLOCKS.PLUG.block..'","'..BLOCKS.DETECT.block..'"]}'
- return text
- end
- --]]
- --STARTING_ITEMS = {}
- -- houseBlock(30), gardenBlock(30),pickaxe
- --}
- --if the file starting_items doesnt exist then
- -- create it with the default ones
- local default_starting_items = {
- {
- block = "wool",
- variant = 0,
- amount = 16
- },
- {
- block = "wool",
- variant = 13,
- amount = 16
- }
- }
- local default_rewards = {
- {
- block = "wool",
- variant = 13,
- amount = 4
- }
- }
- local CanPlaceOnBlocks = {}
- BLOCKS_TO_SWAP = {}
- function getItems(filename, defaults_table)
- --local filename = "starting_items"
- local result = {}
- local items
- if not utils.file_exists(filename) then
- local file = fs.open(filename,"w")
- file.write(json.encodePretty(defaults_table))
- file.close()
- items = defaults_table
- else
- items = json.decodeFromFile(filename)
- end
- --local startingItemsTable = {}
- for i, item in ipairs(items) do
- if item.block and item.variant and item.amount then
- CanPlaceOnBlocks[item.block] = true
- table.insert(result,item)
- end
- end
- return result
- end
- local resource_counter = 1
- function createItemStrings(items)
- local result = {}
- -- convert the starting items table to minecraft strings with the correct PlaceOn tags
- -- all items can be placed on the white grid, the plug, the detector and on themselves
- local blocksList = ''
- for block in pairs(CanPlaceOnBlocks) do
- blocksList = blocksList..',"'..block..'"'
- end
- for i,item in ipairs(items) do
- --print(item.block)
- --print(item.amount)
- --print(item.variant)
- --print(BLOCKS.WHITE_GRID.block)
- --print(BLOCKS.PLUG.block)
- --print(BLOCKS.DETECT.block)
- --print(blocksList)
- local resource_name = 'Resource_'..resource_counter
- resource_counter = resource_counter + 1
- local _tag = '{display:{Name:"'..resource_name..'",Lore:[20000 BLOCKS Resource Item]},CanPlaceOn:["'..BLOCKS.WHITE_GRID.block..'","'..BLOCKS.PLUG.block..'","'..BLOCKS.DETECT.block..'"'..blocksList..']}'
- local swaptag = '{Item:{id:minecraft:'..item.block..',Damage:'..item.variant..'s,tag:'.._tag..'}}'
- local item_as_string = item.block..' '..item.amount..' '..item.variant..' '.._tag
- table.insert(BLOCKS_TO_SWAP, { block=item.block, variant=item.variant, name=resource_name, minecraft_tag = swaptag } )
- table.insert(result,item_as_string)
- end
- return result
- end
- local _starting_items = getItems("starting_items", default_starting_items)
- local _rewards = getItems("rewards", default_rewards)
- STARTING_ITEMS = createItemStrings(_starting_items)
- local blocksList = ''
- for block in pairs(CanPlaceOnBlocks) do
- blocksList = blocksList..',"'..block..'"'
- end
- local pickaxe = 'stone_pickaxe 1 '..131-PICKAXE_USES..' {CanDestroy:['..blocksList:sub(2)..'],display:{Name:"Resource Remover",Lore:[Use the pickaxe to remove up to '..PICKAXE_USES..' resource blocks]}}'
- table.insert(STARTING_ITEMS,pickaxe)
- DEFAULT_REWARDS = createItemStrings(_rewards)
- --[[
- for i, item in ipairs(STARTING_ITEMS) do
- table.insert(BLOCKS_TO_SWAP,item)
- end
- for i, item in ipairs(DEFAULT_REWARDS) do
- table.insert(BLOCKS_TO_SWAP,item)
- end
- --table.insert(BLOCKS_TO_SWAP, unpack(DEFAULT_REWARDS))
- --]]
- --print(json.encodePretty(BLOCKS_TO_SWAP))
- for k, v in ipairs(BLOCKS_TO_SWAP) do
- commands.scoreboard("objectives","add","bad_"..v.name,"dummy")
- --commands.scoreboard("objectives","add","bad_garden","dummy")
- end
- DEFAULT_ELEMENTS_SETTINGS = {
- {element_id=1, element_name="element",reward_emeralds=0,reward_blocks={{block = "minecraft:wool", variant = 0, amount=1},{block = "minecraft:wool", variant = 10, amount=10}}, metric_1=0, metric_2=0, metric_3=0, metric_4=0},
- {element_id=2, element_name="element",reward_emeralds=1,reward_blocks={}, metric_1=0, metric_2=0, metric_3=0, metric_4=0},
- {element_id=3, element_name="element",reward_emeralds=0,reward_blocks={{block = "minecraft:wool", variant = 0, amount=1}}, metric_1=0, metric_2=0, metric_3=0, metric_4=0}
- }
- --- TODO a function to collect the blocks listed in element_settings and starting_items and return them as a list to use for the PlaceOn Tags on all of them
- ----------------------------------------------------------------------------------------------------------------
- -- the data structure below represents the catalogue of vocabularies as built in minecraft
- -- id - is unique for each vocab, starting from 1 going to 40 currently
- -- column and row - represent the "physical" location of the vocab model in the catalogue in the minecraft world
- -- nameEN and nameDE - are names for english and german. for now english names must not have spaces, use dashes (-) instead
- -- typeEN and typeDE - are the type names, also in english and german such as tech&science spaces
- -- height - is how many blocks is this structure tall
- -- slots - is how many potential detector stones is this structure occupying as a building, ex. 2 for houses, 3 for corner extenstions, 0 for plazas
- -- green - is true or false and is used for easier calculation of the GREENEST GOAL - we dont use this field now and can be removed
- -- greenSlots - is how many slots are green and is used for easier calculation of the GREENEST GOAL
- VOCABS_DATA = {
- -- urban houses
- {id=1, column=1, row=1,nameEN="SINGLE-FAMILY-HOUSE",nameDE="EINFAMILIENHAUS", typeEN="HOUSES",typeDE="HÄUSER",height=10, slots=2, green=false, greenSlots=0, rewardUrban=false, rewardCount=4},
- {id=2, column=1, row=2,nameEN="SINGLE-FAMILY-HOUSE",nameDE="EINFAMILIENHAUS", typeEN="HOUSES",typeDE="HÄUSER",height=10, slots=2, green=false, greenSlots=0, rewardUrban=false, rewardCount=4},
- {id=3, column=1, row=3,nameEN="SINGLE-FAMILY-HOUSE",nameDE="EINFAMILIENHAUS", typeEN="HOUSES",typeDE="HÄUSER",height=10, slots=2, green=false, greenSlots=0, rewardUrban=false, rewardCount=4},
- {id=4, column=1, row=4,nameEN="SINGLE-FAMILY-HOUSE",nameDE="EINFAMILIENHAUS", typeEN="HOUSES",typeDE="HÄUSER",height=10, slots=2, green=false, greenSlots=0, rewardUrban=false, rewardCount=4},
- -- urban businesses
- {id=5, column=2, row=1,nameEN="GYM",nameDE="FITNESSSTUDIO", typeEN="BUSINESSES",typeDE="GESCHÄFTE",height=20, slots=5, green=false, greenSlots=0, rewardUrban=false, rewardCount=8},
- {id=6, column=2, row=2,nameEN="OFFICE-BUILDING",nameDE="BÜROGEBÄUDE", typeEN="BUSINESSES",typeDE="GESCHÄFTE",height=20, slots=5, green=false, greenSlots=0, rewardUrban=false, rewardCount=8},
- {id=7, column=2, row=3,nameEN="HOTEL",nameDE="HOTEL", typeEN="BUSINESSES",typeDE="GESCHÄFTE",height=20, slots=5, green=false, greenSlots=0, rewardUrban=false, rewardCount=8},
- {id=8, column=2, row=4 ,nameEN="BANK",nameDE="BANK", typeEN="BUSINESSES",typeDE="GESCHÄFTE",height=20, slots=5, green=false, greenSlots=0, rewardUrban=false, rewardCount=8},
- -- urban tech&science spaces
- {id=9, column=3, row=1,nameEN="LIBRARY",nameDE="BIBLIOTHEK", typeEN="TECH & SCIENCE SPACES",typeDE="WISSENSCHAFTSGEBÄUDE",height=16, slots=1, green=false, greenSlots=0, rewardUrban=false, rewardCount=10},
- {id=10, column=3, row=2,nameEN="FABLAB",nameDE="INNOVATIONSZENTRUM", typeEN="TECH & SCIENCE SPACES",typeDE="WISSENSCHAFTSGEBÄUDE",height=16, slots=1, green=false, greenSlots=0, rewardUrban=false, rewardCount=10},
- -- green tech&science spaces
- {id=11, column=3, row=3,nameEN="AQUAPONIC-GREENHOUSE",nameDE="AQUAPONIK-GEWÄCHSHAUS", typeEN="TECH & SCIENCE SPACES",typeDE="WISSENSCHAFTSGEBÄUDE",height=16, slots=1, green=true, greenSlots=1, rewardUrban=true, rewardCount=10},
- {id=12, column=3, row=4,nameEN="SCIENCE-BRIDGE",nameDE="WISSENSCHAFTSBRÜCKE", typeEN="TECH & SCIENCE SPACES",typeDE="WISSENSCHAFTSGEBÄUDE",height=16, slots=1, green=true, greenSlots=1, rewardUrban=true, rewardCount=10},
- -- urban house extensions
- {id=13, column=4, row=1,nameEN="HOUSE-EXTENSION",nameDE="HAUSERWEITERUNG", typeEN="EXTENSIONS",typeDE="ERWEITERUNGEN",height=10, slots=1, green=false, greenSlots=0, rewardUrban=false, rewardCount=6},
- {id=14, column=4, row=2,nameEN="HOUSE-EXTENSION",nameDE="HAUSERWEITERUNG", typeEN="EXTENSIONS",typeDE="ERWEITERUNGEN",height=10, slots=1, green=false, greenSlots=0, rewardUrban=false, rewardCount=6},
- {id=15, column=4, row=3,nameEN="HOUSE-EXTENSION",nameDE="HAUSERWEITERUNG", typeEN="EXTENSIONS",typeDE="ERWEITERUNGEN",height=10, slots=1, green=false, greenSlots=0, rewardUrban=false, rewardCount=6},
- {id=16, column=4, row=4,nameEN="HOUSE-EXTENSION",nameDE="HAUSERWEITERUNG", typeEN="EXTENSIONS",typeDE="ERWEITERUNGEN",height=10, slots=1, green=false, greenSlots=0, rewardUrban=false, rewardCount=6},
- --risers
- {id=17, column=5, row=1,nameEN="DOUBLE-FLOOR-RISER",nameDE="VERSCHIEBUNG-ZWEI-HOCH", typeEN="RISERS",typeDE="VERTIKALE VERSCHIEBUNGEN",height=0, slots=0, green=false, greenSlots=0, rewardUrban=true, rewardCount=8},
- {id=18, column=5, row=2,nameEN="SINGLE-FLOOR-RISER",nameDE="VERSCHIEBUNG-EINEN-HOCH", typeEN="RISERS",typeDE="VERTIKALE VERSCHIEBUNGEN",height=0, slots=0, green=false, greenSlots=0, rewardUrban=true, rewardCount=6},
- --plazas
- {id=19, column=5, row=3,nameEN="CITY-PLAZA",nameDE="STÄDTISCHER PLATZ", typeEN="PLAZAS",typeDE="PLÄTZE",height=0, slots=0, green=false, greenSlots=0, rewardUrban=false, rewardCount=2},
- {id=20, column=5, row=4,nameEN="PARK-PLAZA",nameDE="GRÜNER PLATZ", typeEN="PLAZAS",typeDE="PLÄTZE",height=0, slots=0, green=true, greenSlots=1, rewardUrban=true, rewardCount=2},
- --green businesses
- {id=21, column=6, row=1,nameEN="GREEN-GYM",nameDE="GRÜNES FITNESSSTUDIO", typeEN="BUSINESSES",typeDE="GESCHÄFTE",height=20, slots=5, green=true, greenSlots=5, rewardUrban=true, rewardCount=8},
- {id=22, column=6, row=2,nameEN="GREEN-OFFICE-BUILDING",nameDE="GRÜNES BÜROGEBÄUDE", typeEN="BUSINESSES",typeDE="GESCHÄFTE",height=20, slots=5, green=true, greenSlots=5, rewardUrban=true, rewardCount=8},
- {id=23, column=6, row=3,nameEN="GREEN-HOTEL",nameDE="GRÜNES HOTEL", typeEN="BUSINESSES",typeDE="GESCHÄFTE",height=20, slots=5, green=true, greenSlots=5, rewardUrban=true, rewardCount=8},
- {id=24, column=6, row=4,nameEN="GREEN-BANK",nameDE="GRÜNES BANK", typeEN="BUSINESSES",typeDE="GESCHÄFTE",height=20, slots=5, green=true, greenSlots=5, rewardUrban=true, rewardCount=8},
- ---green private garden extensions
- {id=25, column=7, row=1,nameEN="HOUSE-GARDEN",nameDE="PRIVATGARTEN", typeEN="EXTENSIONS",typeDE="ERWEITERUNGEN",height=0, slots=0, green=true, greenSlots=1, rewardUrban=true, rewardCount=6},
- {id=26, column=7, row=2,nameEN="HOUSE-GARDEN",nameDE="PRIVATGARTEN", typeEN="EXTENSIONS",typeDE="ERWEITERUNGEN",height=0, slots=0, green=true, greenSlots=1, rewardUrban=true, rewardCount=6},
- {id=27, column=7, row=3,nameEN="HOUSE-GARDEN",nameDE="PRIVATGARTEN", typeEN="EXTENSIONS",typeDE="ERWEITERUNGEN",height=0, slots=0, green=true, greenSlots=1, rewardUrban=true, rewardCount=6},
- {id=28, column=7, row=4,nameEN="HOUSE-GARDEN",nameDE="PRIVATGARTEN", typeEN="EXTENSIONS",typeDE="ERWEITERUNGEN",height=0, slots=0, green=true, greenSlots=1, rewardUrban=true, rewardCount=6},
- ---green gathering spaces
- {id=29, column=8, row=1,nameEN="OPEN-AIR-CINEMA",nameDE="FREILUFTKINO", typeEN="GATHERING SPACES",typeDE="TREFFPUNKTE",height=8, slots=3, green=true, greenSlots=3, rewardUrban=true, rewardCount=9},
- {id=30, column=8, row=2,nameEN="OPEN-AIR-SWIMMING-POOL",nameDE="FREIBAD", typeEN="GATHERING SPACES",typeDE="TREFFPUNKTE",height=8, slots=3, green=true, greenSlots=3, rewardUrban=true, rewardCount=9},
- {id=31, column=8, row=3,nameEN="GREEN-CAFE",nameDE="GRÜNES CAFÉ", typeEN="GATHERING SPACES",typeDE="TREFFPUNKTE",height=8, slots=3, green=true, greenSlots=3, rewardUrban=true, rewardCount=9},
- {id=32, column=8, row=4,nameEN="PALM-TREE-HOUSE",nameDE="PALMENGARTEN", typeEN="GATHERING SPACES",typeDE="TREFFPUNKTE",height=8, slots=3, green=true, greenSlots=3, rewardUrban=true, rewardCount=9},
- ----urban gathering spaces
- {id=33, column=9, row=1,nameEN="CINEMA",nameDE="KINO", typeEN="GATHERING SPACES",typeDE="TREFFPUNKTE",height=8, slots=3, green=false, greenSlots=0, rewardUrban=false, rewardCount=9},
- {id=34, column=9, row=2,nameEN="CONFERENCE-HALL",nameDE="KONFERENZHALLE", typeEN="GATHERING SPACES",typeDE="TREFFPUNKTE",height=8, slots=3, green=false, greenSlots=0, rewardUrban=false, rewardCount=9},
- {id=35, column=9, row=3,nameEN="CAFÉ",nameDE="CAFÉ", typeEN="GATHERING SPACES",typeDE="TREFFPUNKTE",height=8, slots=3, green=false, greenSlots=0, rewardUrban=false, rewardCount=9},
- {id=36, column=9, row=4,nameEN="ART-GALLERY",nameDE="KUNSTGALERIE", typeEN="GATHERING SPACES",typeDE="TREFFPUNKTE",height=8, slots=3, green=false, greenSlots=0, rewardUrban=false, rewardCount=9},
- ---green-roof houses
- {id=37, column=10, row=1,nameEN="GREEN-ROOF-HOUSE",nameDE="GRÜNES EINFAMILIENHAUS", typeEN="HOUSES",typeDE="HÄUSER",height=10, slots=2, green=true, greenSlots=2, rewardUrban=true, rewardCount=4},
- {id=38, column=10, row=2,nameEN="GREEN-ROOF-HOUSE",nameDE="GRÜNES EINFAMILIENHAUS", typeEN="HOUSES",typeDE="HÄUSER",height=10, slots=2, green=true, greenSlots=2, rewardUrban=true, rewardCount=4},
- {id=39, column=10, row=3,nameEN="GREEN-ROOF-HOUSE",nameDE="GRÜNES EINFAMILIENHAUS", typeEN="HOUSES",typeDE="HÄUSER",height=10, slots=2, green=true, greenSlots=2, rewardUrban=true, rewardCount=4},
- {id=40, column=10, row=4,nameEN="GREEN-ROOF-HOUSE",nameDE="GRÜNES EINFAMILIENHAUS", typeEN="HOUSES",typeDE="HÄUSER",height=10, slots=2, green=true, greenSlots=2, rewardUrban=true, rewardCount=4},
- }
- --DEFAULT_REWARD = houseBlock(4)
- --REWARDS = {}
- --[[if DEBUG_MODE then
- PHASE_LENGTH_GAME = 12000
- NUMBER_OF_BUILDZONES = 1
- FIRSTZONE = DEBUG_ZONE
- end]]
- function checkRegistryIntegrity()
- print("checking registry...")
- local result = true
- --check the gridcell size = MUST BE ODD NUMBER minimum is 3 maximum is 15
- if GRIDCELL_SIZE < 3 or GRIDCELL_SIZE > 15 or GRIDCELL_SIZE % 2 == 0 then
- -- abort setup and print a message
- term.setTextColor(colors.red)
- print("The grid cell size is:"..GRIDCELL_SIZE )
- print ("The grid cell size must be an odd number between 3 and 15")
- print("allowed settings are: 3, 5, 7, 9, 11, 13 or 15")
- print("change gridcell size in 'settings' and run 'play' again")
- term.setTextColor(colors.white)
- result = false
- end
- --check the GRIDCELL_COUNT = MUST BE between 5 and 10
- if GRIDCELL_COUNT < 5 or GRIDCELL_COUNT > 20 then
- -- abort setup and print a message
- term.setTextColor(colors.red)
- print("The grid cell count is:"..GRIDCELL_COUNT )
- print ("The grid cell count must be between 5 and 20")
- print("change gridcell count in 'settings' and run 'play' again")
- term.setTextColor(colors.white)
- result = false
- end
- --check the SPAWNZONE_SIZE = MUST BE 39
- if not SPAWNZONE_SIZE == 39 then
- -- abort setup and print a message
- term.setTextColor(colors.red)
- print("The spawn zone size is:"..SPAWNZONE_SIZE )
- print ("The spawn zone size must be 39")
- print("change spawn zone size in 'registry' and run 'play' again")
- term.setTextColor(colors.white)
- result = false
- end
- --check the PLAY_AREA_OFFSET.z is bigger than the CATALOGUE_SLOT_OFFSET to avoid destrying the computer from the world
- if PLAY_AREA_OFFSET.z - CATALOGUE_SLOT_OFFSET < 1 or PLAY_AREA_OFFSET.x - CATALOGUE_SLOT_OFFSET < 1 then
- term.setTextColor(colors.red)
- print ("PLAY_AREA_OFFSET.z is:", PLAY_AREA_OFFSET.z)
- print ("PLAY_AREA_OFFSET.x is:", PLAY_AREA_OFFSET.x)
- print ("CATALOGUE_SLOT_OFFSET is:", CATALOGUE_SLOT_OFFSET)
- print("PLAY_AREA_OFFSET.x and PLAY_AREA_OFFSET.z must be bigger with at least 1 than the CATALOGUE_SLOT_OFFSET otherwise the main computer it will be destroyed")
- print("change accordingly in registry and run 'play' again")
- term.setTextColor(colors.white)
- result = false
- end
- --check the CATALOGUE_SLOTSIZE.x = MUST BE ODD NUMBER minimum is 1 maximum is 3
- if CATALOGUE_SLOTSIZE.x < 1 or CATALOGUE_SLOTSIZE.x > 3 or CATALOGUE_SLOTSIZE.x % 2 == 0 then
- -- abort setup and print a message
- term.setTextColor(colors.red)
- print("The CATALOGUE_SLOTSIZE.x is:"..CATALOGUE_SLOTSIZE.x )
- --print ("The CATALOGUE_SLOTSIZE.x must be an odd number between 1 and 3")
- print("allowed settings are: 1 or 3")
- print("change CATALOGUE_SLOTSIZE.x in registry and run 'play' again")
- term.setTextColor(colors.white)
- result = false
- end
- --check the CATALOGUE_SLOTSIZE.z = MUST BE ODD NUMBER minimum is 1 maximum is 3
- if CATALOGUE_SLOTSIZE.z < 1 or CATALOGUE_SLOTSIZE.z > 3 or CATALOGUE_SLOTSIZE.z % 2 == 0 then
- -- abort setup and print a message
- term.setTextColor(colors.red)
- print("The CATALOGUE_SLOTSIZE.z is:"..CATALOGUE_SLOTSIZE.z )
- --print ("The CATALOGUE_SLOTSIZE.z must be an odd number between 1 and 3")
- print("allowed settings are: 1 or 3")
- print("change CATALOGUE_SLOTSIZE.z in registry and run 'play' again")
- term.setTextColor(colors.white)
- result = false
- end
- --check the CATALOGUE_SLOTSIZE.z = MUST BE ODD NUMBER minimum is 1 maximum is 3
- if GAME_FIELD.countX>3 or GAME_FIELD.countZ>3 or GAME_FIELD.countX<1 or GAME_FIELD.countZ<1 then
- -- abort setup and print a message
- term.setTextColor(colors.red)
- print("The GAME_FIELD is: "..GAME_FIELD.countX.." by "..GAME_FIELD.countZ.." play areas" )
- --print("one game is "..BUILDZONE_WIDTH.." blocks wide/long")
- --print("The total play area is: "..GAME_FIELD.countX*BUILDZONE_WIDTH.." by "..GAME_FIELD.countZ*BUILDZONE_WIDTH )
- print("GAME_FIELD.CountX and GAME_FIELD.CountZ can have the values of 1, 2 or 3")
- print("change in settings and registry and run 'play' again")
- term.setTextColor(colors.white)
- result = false
- end
- return result
- end
Add Comment
Please, Sign In to add comment