diff --git a/example_scripts/castle.js b/example_scripts/castle.js new file mode 100644 index 0000000..e160d32 --- /dev/null +++ b/example_scripts/castle.js @@ -0,0 +1,52 @@ +load($SCRIPT_DIR + "/fort.js"); +// +// a castle is just a big wide fort with 4 taller forts at each corner +// +function castle (side, height, drone) +{ + // + // use sensible default parameter values + // if no parameters are supplied + // + if (typeof drone == "undefined") + drone = new Drone(); + if (typeof side == "undefined") + side = 24; + if (typeof height == "undefined") + height = 10; + if (height < 8 || side < 20) + throw new java.lang.RuntimeException("Castles must be at least 20 wide X 8 tall"); + // + // remember where the drone is so it can return 'home' + // + drone.chkpt('castle'); + // + // how big the towers at each corner will be... + // + var towerSide = 10; + var towerHeight = height+4; + + // + // the main castle building will be front and right of the first tower + // + drone.fwd(towerSide/2).right(towerSide/2); + // + // the castle is really just a big fort with 4 smaller 'tower' forts at each corner + // + drone = fort(side,height,drone); + // + // move back to start position + // + drone.move('castle'); + // + // now place 4 towers at each corner (each tower is another fort) + // + for (var corner = 0; corner < 4; corner++) + { + // construct a 'tower' fort + fort(towerSide,towerHeight,drone); + // move forward the length of the castle then turn right + drone.fwd(side+towerSide-1).turn(); + } + return drone.move('castle'); +} diff --git a/example_scripts/cottage.js b/example_scripts/cottage.js new file mode 100644 index 0000000..077c151 --- /dev/null +++ b/example_scripts/cottage.js @@ -0,0 +1,93 @@ +// +// need to use the drone module to create buildings easily +// it can be done using calls to putBlock(), putSign(), getPlayerPos() and getMousePos() +// but it's easier to use the Drone class +// $SCRIPT_DIR is a special javascript variable whose value is the directory where the +// current script resides. +// $SCRIPT is a special javascript variable whose value is the full name of the current script. +// +var scriptDir = $SCRIPT_DIR; +load(scriptDir + "/drone.js"); // assumes cottage.js and drone.js are in same directory +// +// usage: +// [1] to build a cottage at the player's current location or the cross-hairs location... +// +// /js cottage(); +// +// [2] to build a cottage using an existing drone... +// +// /js cottage(drone); +// + +function cottage(/* optional */ drone) +{ + if (typeof drone == "undefined"){ + drone = new Drone(); + } + drone.chkpt('cottage') + .box0(48,7,2,6) // 4 walls + .right(3).door() // door front and center + .up(1).left(2).box(102) // windows to left and right + .right(4).box(102) + .left(5).up().prism0(53,7,6); + // + // put up a sign near door. + // + drone.down().right(4).sign(["Home","Sweet","Home"],68); + + return drone.move('cottage'); +}; +// +// a more complex script that builds an tree-lined avenue with +// cottages on both sides. +// +function cottage_road(numberCottages,/* optional */ drone) +{ + if (typeof numberCottages == "undefined"){ + numberCottages = 6; + } + if (typeof drone == "undefined"){ + drone = new Drone(); + } + var i=0, distanceBetweenTrees = 11; + // + // step 1 build the road. + // + var cottagesPerSide = Math.floor(numberCottages/2); + drone + .chkpt("cottage_road") // make sure the drone's state is saved. + .box(43,3,1,cottagesPerSide*(distanceBetweenTrees+1)) // build the road + .up().right() // now centered in middle of road + .chkpt("cr"); // will be returning to this position later + + // + // step 2 line the road with trees + // + for (; i < cottagesPerSide+1;i++){ + drone + .left(5).oak() + .right(10).oak() + .left(5) // return to middle of road + .fwd(distanceBetweenTrees+1); // move forward. + } + drone.move("cr").back(6); // move back 1/2 the distance between trees + + // this function builds a path leading to a cottage. + function pathAndCottage(d){ + return cottage(d.down().box(43,1,1,5).fwd(5).left(3).up()); + }; + // + // step 3 build cottages on each side + // + for (i = 0;i < cottagesPerSide; i++) + { + drone.fwd(distanceBetweenTrees+1).chkpt("r"+i); + // build cottage on left + pathAndCottage(drone.turn(3)).move("r"+i); + // build cottage on right + pathAndCottage(drone.turn()).move("r"+i); + } + // return drone to where it was at start of function + return drone.move("cottage_road"); +} + diff --git a/example_scripts/fort.js b/example_scripts/fort.js new file mode 100644 index 0000000..83b0c97 --- /dev/null +++ b/example_scripts/fort.js @@ -0,0 +1,61 @@ +load($SCRIPT_DIR + "/drone.js"); +// +// constructs a medieval fort +// +function fort(side, height, drone) +{ + if (typeof drone == "undefined") + drone = new Drone(); + if (typeof side == "undefined") + side = 18; + if (typeof height == "undefined") + height = 6; + if (height < 4 || side < 10) + throw new java.lang.RuntimeException("Forts must be at least 9 wide X 4 tall"); + // make sure side is even + if (side%2) + side++; + var brick = 98; + // + // build walls. + // + drone.chkpt('fort').box0(brick,side,height-1,side); + // + // build turrets + // + drone.up(height-1); + for (i = 0;i <= 3;i++){ + var turret = []; + drone.box(brick) // solid brick corners + .up().box('50:5').down() // light a torch on each corner + .fwd(); + turret.push('109:'+ Drone.PLAYER_STAIRS_FACING[drone.dir]); + turret.push('109:'+ Drone.PLAYER_STAIRS_FACING[(drone.dir+2)%4]); + drone.box(turret,1,1,side-2).fwd(side-2).turn(); + } + // + // build battlements + // + drone.move('fort'); + drone.up(height-2).fwd().right().box('44:5',side-2,1,side-2); + var battlementWidth = 3; + if (side <= 12) + battlementWidth = 2; + + drone.fwd(battlementWidth).right(battlementWidth) + .box(0,side-((1+battlementWidth)*2),1,side-((1+battlementWidth)*2)); + // + // add door + // + var torch = '50:' + Drone.PLAYER_TORCH_FACING[drone.dir]; + drone.move('fort').right((side/2)-1).door2() // double doors + .back().left().up().box(torch) // left torch + .right(3).box(torch); // right torch + // + // add ladder up to battlements + // + var ladder = '65:' + Drone.PLAYER_SIGN_FACING[(drone.dir+2)%4]; + drone.move('fort').right((side/2)-3).fwd(1) // move inside fort + .box(ladder, 1,height-1,1); + return drone.move('fort'); +}; diff --git a/screenshots/2012-12-27_13.25.06.png b/screenshots/2012-12-27_13.25.06.png new file mode 100644 index 0000000..2074739 Binary files /dev/null and b/screenshots/2012-12-27_13.25.06.png differ diff --git a/screenshots/2012-12-28_13.38.07.png b/screenshots/2012-12-28_13.38.07.png new file mode 100644 index 0000000..63352b1 Binary files /dev/null and b/screenshots/2012-12-28_13.38.07.png differ diff --git a/screenshots/2012-12-28_23.04.33.png b/screenshots/2012-12-28_23.04.33.png new file mode 100644 index 0000000..9e52db6 Binary files /dev/null and b/screenshots/2012-12-28_23.04.33.png differ diff --git a/screenshots/castles-interlocking.png b/screenshots/castles-interlocking.png new file mode 100644 index 0000000..e190626 Binary files /dev/null and b/screenshots/castles-interlocking.png differ diff --git a/screenshots/forts-castles.png b/screenshots/forts-castles.png new file mode 100644 index 0000000..561565c Binary files /dev/null and b/screenshots/forts-castles.png differ