| @@ -0,0 +1,136 @@ | |||||
| ;; lobo: Logo Bolo | |||||
| ;; (c) Ben Kurtovic, 2011 | |||||
| globals [ | |||||
| base-max-ammo | |||||
| base-max-armor | |||||
| ] | |||||
| breed [bases base] | |||||
| bases-own [ | |||||
| ammunition | |||||
| armor | |||||
| last-ammo-regen | |||||
| last-armor-regen | |||||
| last-refuel | |||||
| team | |||||
| ] | |||||
| ;; ========== | |||||
| ;; Procedures | |||||
| ;; ========== | |||||
| to spawn-base [base-xcor base-ycor] | |||||
| create-bases 1 [ | |||||
| set-base-vars base-max-ammo base-max-armor -1 base-xcor base-ycor | |||||
| ] | |||||
| end | |||||
| to set-base-vars [b-ammo b-armor b-team b-xcor b-ycor] | |||||
| set ammunition b-ammo | |||||
| set armor b-armor | |||||
| set team b-team | |||||
| set last-ammo-regen timer | |||||
| set last-armor-regen timer | |||||
| set last-refuel timer | |||||
| set color get-base-color | |||||
| set shape "base" | |||||
| set size 1.15 | |||||
| setxy b-xcor b-ycor | |||||
| end | |||||
| to do-base-logic | |||||
| ifelse team = -1 [ | |||||
| if any? tanks-here [ | |||||
| claim-base one-of tanks-here | |||||
| ] | |||||
| ] [ | |||||
| let allies-here tanks-here with [team = ([team] of myself)] | |||||
| let enemies-here tanks-here with [team != ([team] of myself)] | |||||
| if any? allies-here [ | |||||
| refuel-tank one-of allies-here | |||||
| ] | |||||
| if any? enemies-here and armor = 0 [ | |||||
| claim-base one-of enemies-here | |||||
| set armor 1 | |||||
| ] | |||||
| ] | |||||
| regenerate | |||||
| set label armor | |||||
| end | |||||
| to claim-base [claimer] | |||||
| set team [team] of claimer | |||||
| set color get-base-color | |||||
| end | |||||
| to refuel-tank [tank-to-refuel] | |||||
| let did-armor-refuel? false | |||||
| let did-ammo-refuel? false | |||||
| let time-since-last-refuel timer - last-refuel | |||||
| ask tank-to-refuel [ | |||||
| if armor < tank-max-armor and ([armor] of myself) > 1 and time-since-last-refuel > 25 / max-fps [ ; 25 frames | |||||
| set armor armor + 1 | |||||
| set did-armor-refuel? true | |||||
| ] | |||||
| if ammunition < tank-max-ammo and ([ammunition] of myself) > 1 and time-since-last-refuel > 10 / max-fps [ ; 10 frames | |||||
| set ammunition ammunition + 1 | |||||
| set did-ammo-refuel? true | |||||
| ] | |||||
| ] | |||||
| if did-armor-refuel? or did-ammo-refuel? [ | |||||
| set last-refuel timer | |||||
| ifelse did-armor-refuel? [ | |||||
| set armor armor - 1 | |||||
| ] [ | |||||
| set ammunition ammunition - 1 | |||||
| ] | |||||
| ] | |||||
| end | |||||
| to regenerate | |||||
| let time-since-last-ammo-regen timer - last-ammo-regen | |||||
| let time-since-last-armor-regen timer - last-armor-regen | |||||
| if ammunition < base-max-ammo and time-since-last-ammo-regen > 10 [ | |||||
| set ammunition ammunition + 1 | |||||
| set last-ammo-regen timer | |||||
| ] | |||||
| if armor < base-max-armor and time-since-last-armor-regen > 25 [ | |||||
| set armor armor + 1 | |||||
| set last-armor-regen timer | |||||
| ] | |||||
| end | |||||
| to base-shot-at | |||||
| debug "BASE-SHOT" (word who " by " ([shooter] of myself)) | |||||
| set armor armor - 1 | |||||
| ifelse armor > 0 [ | |||||
| explode "decay" | |||||
| play-sound "shot" | |||||
| ] [ | |||||
| explode "shot" | |||||
| play-sound "kill" | |||||
| ] | |||||
| end | |||||
| ;; ========= | |||||
| ;; Reporters | |||||
| ;; ========= | |||||
| to-report get-base-afiliation | |||||
| if team = -1 [ report "neutral" ] | |||||
| if team = 0 [ report "ally" ] | |||||
| report "enemy" | |||||
| end | |||||
| to-report get-base-color | |||||
| let affiliation get-base-afiliation | |||||
| if affiliation = "neutral" [ report gray ] | |||||
| if affiliation = "ally" [ report green ] | |||||
| if affiliation = "enemy" [ report red ] | |||||
| end | |||||
| @@ -26,8 +26,8 @@ to fire-bullet | |||||
| set size 0.5 | set size 0.5 | ||||
| ; Bullets shouldn't travel perfectly straight: | ; Bullets shouldn't travel perfectly straight: | ||||
| lt random 10 | |||||
| rt random 10 | |||||
| lt random 5 | |||||
| rt random 5 | |||||
| ] | ] | ||||
| end | end | ||||
| @@ -42,12 +42,18 @@ to do-bullet-logic | |||||
| let mxcor xcor | let mxcor xcor | ||||
| let mycor ycor | let mycor ycor | ||||
| let is-close-enough false | let is-close-enough false | ||||
| let target min-one-of tanks-here [distancexy mxcor mycor] | |||||
| let shootable-bases-here bases-here with [armor > 0 and team != -1 and team != [team] of tank [shooter] of myself] | |||||
| let targets (turtle-set tanks-here shootable-bases-here) | |||||
| let target min-one-of targets [distancexy mxcor mycor] | |||||
| if target != nobody [ | if target != nobody [ | ||||
| ask target [ | ask target [ | ||||
| if distancexy mxcor mycor < 0.65 [ | if distancexy mxcor mycor < 0.65 [ | ||||
| set is-close-enough true | set is-close-enough true | ||||
| shot-at | |||||
| ifelse breed = tanks [ | |||||
| tank-shot-at | |||||
| ] [ | |||||
| base-shot-at | |||||
| ] | |||||
| ] | ] | ||||
| ] | ] | ||||
| ] | ] | ||||
| @@ -25,15 +25,17 @@ to make-explosions-table | |||||
| table:put explodes "kill" [["explosion-kill" 3 20 0.5] ["explosion-shot" 1.25 15 1] | table:put explodes "kill" [["explosion-kill" 3 20 0.5] ["explosion-shot" 1.25 15 1] | ||||
| ["explosion-shot" 1.25 15 1 ] ["explosion-shot" 1.25 10 1] | ["explosion-shot" 1.25 15 1 ] ["explosion-shot" 1.25 10 1] | ||||
| ["explosion-shot" 1.25 10 1 ] ["explosion-decay" 0.65 10 2] | ["explosion-shot" 1.25 10 1 ] ["explosion-decay" 0.65 10 2] | ||||
| ["explosion-decay" 0.65 10 2 ] ["explosion-decay" 0.65 7.5 2] | |||||
| ["explosion-decay" 0.65 7.5 2 ] ["explosion-decay" 0.65 5 3] | |||||
| ["explosion-decay" 0.65 10 2 ] ["explosion-decay" 0.65 8 2] | |||||
| ["explosion-decay" 0.65 7 2 ] ["explosion-decay" 0.65 5 3] | |||||
| ["explosion-decay" 0.65 5 3 ]] | ["explosion-decay" 0.65 5 3 ]] | ||||
| end | end | ||||
| to explode [name] | to explode [name] | ||||
| debug "EXPLODE" name | debug "EXPLODE" name | ||||
| let data table:get explodes name | let data table:get explodes name | ||||
| foreach data [create-explosion ?] | |||||
| foreach data [ | |||||
| create-explosion ? | |||||
| ] | |||||
| end | end | ||||
| to create-explosion [info] | to create-explosion [info] | ||||
| @@ -42,6 +44,7 @@ to create-explosion [info] | |||||
| let lifespan (item 2 info) | let lifespan (item 2 info) | ||||
| let deviation (item 3 info) | let deviation (item 3 info) | ||||
| hatch-explosions 1 [ | hatch-explosions 1 [ | ||||
| set label "" | |||||
| set shape sprite | set shape sprite | ||||
| set size maxsize / 2 | set size maxsize / 2 | ||||
| set midlife lifespan / 2 | set midlife lifespan / 2 | ||||
| @@ -5,6 +5,7 @@ | |||||
| ;; | ;; | ||||
| __includes [ | __includes [ | ||||
| "base.nls" | |||||
| "bullet.nls" | "bullet.nls" | ||||
| "explosion.nls" | "explosion.nls" | ||||
| "player.nls" | "player.nls" | ||||
| @@ -34,9 +35,12 @@ to setup | |||||
| make-sounds-table | make-sounds-table | ||||
| make-explosions-table | make-explosions-table | ||||
| load-map | load-map | ||||
| spawn-player | |||||
| spawn-tank 0 ask tank 1 [ setxy -6 0 ] | |||||
| spawn-tank 1 ask tank 2 [ setxy 6 0 ] | |||||
| spawn-player 0 0 0 | |||||
| spawn-tank 0 -6 0 90 | |||||
| spawn-tank 1 6 0 270 | |||||
| ;spawn-base -3 -7 | |||||
| spawn-base 0 -7 | |||||
| ;spawn-base 3 -7 | |||||
| render | render | ||||
| set last-tick-time timer | set last-tick-time timer | ||||
| end | end | ||||
| @@ -48,6 +52,9 @@ to go | |||||
| ask tanks [ | ask tanks [ | ||||
| do-tank-logic | do-tank-logic | ||||
| ] | ] | ||||
| ask bases [ | |||||
| do-base-logic | |||||
| ] | |||||
| ask bullets [ | ask bullets [ | ||||
| do-bullet-logic | do-bullet-logic | ||||
| ] | ] | ||||
| @@ -91,6 +98,10 @@ to setup-defaults | |||||
| set player-kills 0 | set player-kills 0 | ||||
| set player-target-xcor 0 | set player-target-xcor 0 | ||||
| set player-target-ycor 0 | set player-target-ycor 0 | ||||
| set tank-max-ammo 24 | |||||
| set tank-max-armor 8 | |||||
| set base-max-ammo 50 | |||||
| set base-max-armor 20 | |||||
| end | end | ||||
| to make-sounds-table | to make-sounds-table | ||||
| @@ -260,10 +271,10 @@ player-has-target? | |||||
| 12 | 12 | ||||
| OUTPUT | OUTPUT | ||||
| 998 | |||||
| 30 | |||||
| 1375 | |||||
| 521 | |||||
| 1012 | |||||
| 10 | |||||
| 1500 | |||||
| 557 | |||||
| 12 | 12 | ||||
| MONITOR | MONITOR | ||||
| @@ -398,6 +409,39 @@ true | |||||
| 0 | 0 | ||||
| Polygon -7500403 true true 150 5 40 250 150 205 260 250 | Polygon -7500403 true true 150 5 40 250 150 205 260 250 | ||||
| base | |||||
| false | |||||
| 0 | |||||
| Rectangle -1184463 true false 60 240 120 255 | |||||
| Rectangle -1184463 true false 120 225 180 240 | |||||
| Rectangle -1184463 true false 180 240 240 255 | |||||
| Polygon -1184463 true false 45 240 30 240 30 270 60 270 60 255 45 255 | |||||
| Polygon -7500403 true true 195 210 195 225 225 225 225 195 210 195 210 210 | |||||
| Polygon -1184463 true false 60 45 60 30 30 30 30 60 45 60 45 45 | |||||
| Polygon -1184463 true false 240 255 240 270 270 270 270 240 255 240 255 255 | |||||
| Rectangle -1184463 true false 45 60 60 120 | |||||
| Rectangle -1184463 true false 180 45 240 60 | |||||
| Rectangle -1184463 true false 240 180 255 240 | |||||
| Rectangle -1184463 true false 60 120 75 180 | |||||
| Rectangle -1184463 true false 120 60 180 75 | |||||
| Rectangle -1184463 true false 225 120 240 180 | |||||
| Rectangle -1184463 true false 45 180 60 240 | |||||
| Rectangle -1184463 true false 60 45 120 60 | |||||
| Rectangle -1184463 true false 240 60 255 120 | |||||
| Rectangle -1184463 true false 135 135 165 165 | |||||
| Rectangle -1184463 true false 165 120 180 135 | |||||
| Rectangle -1184463 true false 120 120 135 135 | |||||
| Rectangle -1184463 true false 120 165 135 180 | |||||
| Rectangle -1184463 true false 165 165 180 180 | |||||
| Rectangle -7500403 true true 195 105 210 195 | |||||
| Polygon -1184463 true false 255 60 270 60 270 30 240 30 240 45 255 45 | |||||
| Rectangle -7500403 true true 105 90 195 105 | |||||
| Rectangle -7500403 true true 90 105 105 195 | |||||
| Rectangle -7500403 true true 105 195 195 210 | |||||
| Polygon -7500403 true true 210 105 225 105 225 75 195 75 195 90 210 90 | |||||
| Polygon -7500403 true true 105 90 105 75 75 75 75 105 90 105 90 90 | |||||
| Polygon -7500403 true true 90 195 75 195 75 225 105 225 105 210 90 210 | |||||
| bullet | bullet | ||||
| true | true | ||||
| 5 | 5 | ||||
| @@ -14,10 +14,10 @@ globals [ | |||||
| ;; Procedures | ;; Procedures | ||||
| ;; ========== | ;; ========== | ||||
| to spawn-player | |||||
| to spawn-player [tank-xcor tank-ycor tank-heading] | |||||
| create-tanks 1 [ | create-tanks 1 [ | ||||
| set player tank who | set player tank who | ||||
| set-tank-vars 0 true | |||||
| set-tank-vars true 0 tank-xcor tank-ycor tank-heading | |||||
| ] | ] | ||||
| end | end | ||||
| @@ -1,6 +1,11 @@ | |||||
| ;; lobo: Logo Bolo | ;; lobo: Logo Bolo | ||||
| ;; (c) Ben Kurtovic, 2011 | ;; (c) Ben Kurtovic, 2011 | ||||
| globals [ | |||||
| tank-max-ammo | |||||
| tank-max-armor | |||||
| ] | |||||
| breed [tanks tank] | breed [tanks tank] | ||||
| tanks-own [ | tanks-own [ | ||||
| @@ -22,30 +27,31 @@ tanks-own [ | |||||
| ;; Procedures | ;; Procedures | ||||
| ;; ========== | ;; ========== | ||||
| to spawn-tank [tank-team] | |||||
| to spawn-tank [tank-team tank-xcor tank-ycor tank-heading] | |||||
| create-tanks 1 [ | create-tanks 1 [ | ||||
| set-tank-vars tank-team false | |||||
| set-tank-vars false tank-team tank-xcor tank-ycor tank-heading | |||||
| ] | ] | ||||
| end | end | ||||
| to set-tank-vars [tank-team player-tank?] | |||||
| to set-tank-vars [player? tteam txcor tycor theading] | |||||
| set acceleration 0.03 | set acceleration 0.03 | ||||
| set ammunition 24 | |||||
| set armor 8 | |||||
| set ammunition tank-max-ammo | |||||
| set armor tank-max-armor | |||||
| set fire-cool-down 0 | set fire-cool-down 0 | ||||
| set friction 0.0075 | set friction 0.0075 | ||||
| set is-accelerating? false | set is-accelerating? false | ||||
| set is-player? player-tank? | |||||
| set is-player? player? | |||||
| set max-fire-rate 7 | set max-fire-rate 7 | ||||
| set max-speed 0.25 | set max-speed 0.25 | ||||
| set max-turn 24 | set max-turn 24 | ||||
| set speed 0 | set speed 0 | ||||
| set team tank-team | |||||
| set team tteam | |||||
| set color get-tank-color | set color get-tank-color | ||||
| set heading 0 | |||||
| set heading theading | |||||
| set shape "tank" | set shape "tank" | ||||
| set size 1.5 | set size 1.5 | ||||
| setxy txcor tycor | |||||
| end | end | ||||
| to do-tank-logic | to do-tank-logic | ||||
| @@ -100,7 +106,7 @@ to fire | |||||
| ] | ] | ||||
| end | end | ||||
| to shot-at | |||||
| to tank-shot-at | |||||
| debug "SHOT" (word who " by " ([shooter] of myself)) | debug "SHOT" (word who " by " ([shooter] of myself)) | ||||
| set armor armor - 1 | set armor armor - 1 | ||||
| ifelse armor = 0 [ | ifelse armor = 0 [ | ||||