version: 1 name: Equip devices while reprogramming description: | While executing 'reprogram', we should equip any required devices which the target robot doesn't have. https://github.com/swarm-game/swarm/pulls/533 objectives: - condition: | try { base_boats <- as base {count "boat"}; base_solar <- as base {count "solar panel"}; base_treads <- as base {count "treads"}; base_drills <- as base {count "metal drill"}; fred <- robotNamed "fred"; p <- as fred {whereami}; boatEquipped <- as fred {equipped "boat"}; drillEquipped <- as fred {equipped "metal drill"}; solarEquipped <- as fred {equipped "solar panel"}; treadsEquipped <- as fred {equipped "treads"}; return (p == (2,0) && boatEquipped && drillEquipped && solarEquipped && treadsEquipped && base_boats == 1 && base_solar == 1 && base_treads == 1 && base_drills == 1 ); } { return false } solution: | fred <- build {require "boat"; setname "fred"}; wait 5; reprogram fred {require "boat"; require "metal drill"; move; move} robots: - name: base loc: [0,0] dir: [1,0] devices: - 3D printer - logger - flash memory - clock inventory: - [2, boat] - [2, solar panel] - [2, treads] - [2, metal drill] - [50, rock] known: [water] world: default: [blank, null] palette: '.': [grass] '~': [dirt, water] '┌': [stone, upper left corner] '┐': [stone, upper right corner] '└': [stone, lower left corner] '┘': [stone, lower right corner] '─': [stone, horizontal wall] '│': [stone, vertical wall] upperleft: [-1, 1] map: | ┌───┐ │.~.│ └───┘