@@ -1,11 +1,6 @@ | |||||
;; lobo: Logo Bolo | ;; lobo: Logo Bolo | ||||
;; (c) Ben Kurtovic, 2011 | ;; (c) Ben Kurtovic, 2011 | ||||
globals [ | |||||
base-max-ammo | |||||
base-max-armor | |||||
] | |||||
breed [bases base] | breed [bases base] | ||||
bases-own [ | bases-own [ | ||||
@@ -14,6 +9,8 @@ bases-own [ | |||||
last-ammo-regen | last-ammo-regen | ||||
last-armor-regen | last-armor-regen | ||||
last-refuel | last-refuel | ||||
max-ammo | |||||
max-armor | |||||
team | team | ||||
] | ] | ||||
@@ -23,17 +20,19 @@ bases-own [ | |||||
to spawn-base [base-xcor base-ycor] | to spawn-base [base-xcor base-ycor] | ||||
create-bases 1 [ | create-bases 1 [ | ||||
set-base-vars base-max-ammo base-max-armor -1 base-xcor base-ycor | |||||
set-base-vars 50 20 -1 base-xcor base-ycor | |||||
] | ] | ||||
end | end | ||||
to set-base-vars [b-ammo b-armor b-team b-xcor b-ycor] | to set-base-vars [b-ammo b-armor b-team b-xcor b-ycor] | ||||
set ammunition b-ammo | set ammunition b-ammo | ||||
set armor b-armor | set armor b-armor | ||||
set team b-team | |||||
set last-ammo-regen timer | set last-ammo-regen timer | ||||
set last-armor-regen timer | set last-armor-regen timer | ||||
set last-refuel timer | set last-refuel timer | ||||
set max-ammo b-armor | |||||
set max-armor b-armor | |||||
set team b-team | |||||
set color get-base-color | set color get-base-color | ||||
set shape "base" | set shape "base" | ||||
@@ -71,7 +70,7 @@ end | |||||
to refuel-tank [tank-to-refuel] | to refuel-tank [tank-to-refuel] | ||||
let time-since-last-refuel timer - last-refuel | let time-since-last-refuel timer - last-refuel | ||||
ask tank-to-refuel [ | ask tank-to-refuel [ | ||||
ifelse armor < tank-max-armor and ([armor] of myself) > 1 [ | |||||
ifelse armor < max-armor and ([armor] of myself) > 1 [ | |||||
if time-since-last-refuel > 25 / max-fps [ ; 25 frames | if time-since-last-refuel > 25 / max-fps [ ; 25 frames | ||||
set armor armor + 1 | set armor armor + 1 | ||||
ask myself [ | ask myself [ | ||||
@@ -80,7 +79,7 @@ to refuel-tank [tank-to-refuel] | |||||
] | ] | ||||
] | ] | ||||
] [ | ] [ | ||||
if ammunition < tank-max-ammo and ([ammunition] of myself) > 1 [ | |||||
if ammunition < max-ammo and ([ammunition] of myself) > 1 [ | |||||
if time-since-last-refuel > 10 / max-fps [ ; 10 frames | if time-since-last-refuel > 10 / max-fps [ ; 10 frames | ||||
set ammunition ammunition + 1 | set ammunition ammunition + 1 | ||||
ask myself [ | ask myself [ | ||||
@@ -97,11 +96,11 @@ to regenerate | |||||
let time-since-last-ammo-regen timer - last-ammo-regen | let time-since-last-ammo-regen timer - last-ammo-regen | ||||
let time-since-last-armor-regen timer - last-armor-regen | let time-since-last-armor-regen timer - last-armor-regen | ||||
if ammunition < base-max-ammo and time-since-last-ammo-regen > 6 [ | |||||
if ammunition < max-ammo and time-since-last-ammo-regen > 6 [ | |||||
set ammunition ammunition + 1 | set ammunition ammunition + 1 | ||||
set last-ammo-regen timer | set last-ammo-regen timer | ||||
] | ] | ||||
if armor < base-max-armor and time-since-last-armor-regen > 15 [ | |||||
if armor < max-armor and time-since-last-armor-regen > 15 [ | |||||
set armor armor + 1 | set armor armor + 1 | ||||
set last-armor-regen timer | set last-armor-regen timer | ||||
] | ] | ||||
@@ -47,7 +47,7 @@ end | |||||
to go | to go | ||||
ask player [ | ask player [ | ||||
do-player-logic | |||||
do-player-logic | |||||
] | ] | ||||
ask tanks [ | ask tanks [ | ||||
do-tank-logic | do-tank-logic | ||||
@@ -89,12 +89,12 @@ end | |||||
to debug [agent action msg] | to debug [agent action msg] | ||||
; Comment this and remove the output box | ; Comment this and remove the output box | ||||
; to turn off debugging info: | ; to turn off debugging info: | ||||
output-print (word (round timer) ": " agent ": " action " (" msg ")") | |||||
print (word (round timer) ": " agent ": " action " (" msg ")") | |||||
end | end | ||||
to setup-defaults | to setup-defaults | ||||
set-patch-size 30 | |||||
resize-world -8 8 -8 8 | |||||
set-patch-size 20 | |||||
resize-world -17 17 -12 12 | |||||
set max-fps 30 | set max-fps 30 | ||||
set mouse-was-down? false | set mouse-was-down? false | ||||
set player-deaths 0 | set player-deaths 0 | ||||
@@ -102,12 +102,6 @@ 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 | |||||
set pill-anger-range [1.2 0.2] | |||||
set pill-max-armor 8 | |||||
end | end | ||||
to make-sounds-table | to make-sounds-table | ||||
@@ -117,6 +111,8 @@ to make-sounds-table | |||||
table:put sounds "noammo" "Cowbell" | table:put sounds "noammo" "Cowbell" | ||||
table:put sounds "pickup" "Hi Bongo" | table:put sounds "pickup" "Hi Bongo" | ||||
table:put sounds "shot" "Acoustic Snare" | table:put sounds "shot" "Acoustic Snare" | ||||
table:put sounds "place" "Vibraslap" | |||||
table:put sounds "nopill" "Cowbell" | |||||
end | end | ||||
to load-map | to load-map | ||||
@@ -159,6 +155,21 @@ to draw-border [b-color b-thickness] | |||||
end | end | ||||
to show-hud | to show-hud | ||||
ask patch (max-pxcor - 1) (max-pycor - 1) [ | |||||
set plabel (word "Armor: " [armor] of player) | |||||
] | |||||
ask patch (max-pxcor - 1) (max-pycor - 2) [ | |||||
set plabel (word "Ammo: " [ammunition] of player) | |||||
] | |||||
ask patch (max-pxcor - 1) (max-pycor - 3) [ | |||||
set plabel (word "Pillboxes: " [number-of-pills] of player) | |||||
] | |||||
ask patch (max-pxcor - 1) (min-pycor + 2) [ | |||||
set plabel (word "Deaths: " player-deaths) | |||||
] | |||||
ask patch (max-pxcor - 1) (min-pycor + 1) [ | |||||
set plabel (word "Kills: " player-kills) | |||||
] | |||||
end | end | ||||
to render | to render | ||||
@@ -177,7 +188,7 @@ end | |||||
to play-sound [name] | to play-sound [name] | ||||
if enable-sound? [ | if enable-sound? [ | ||||
let dist distancexy ([xcor] of player) ([ycor] of player) | let dist distancexy ([xcor] of player) ([ycor] of player) | ||||
let volume 127 - (dist * 4) | |||||
let volume 127 - (dist * 8) | |||||
if volume > 0 [ | if volume > 0 [ | ||||
sound:play-drum (table:get sounds name) volume | sound:play-drum (table:get sounds name) volume | ||||
] | ] | ||||
@@ -185,36 +196,36 @@ to play-sound [name] | |||||
end | end | ||||
@#$#@#$#@ | @#$#@#$#@ | ||||
GRAPHICS-WINDOW | GRAPHICS-WINDOW | ||||
452 | |||||
254 | |||||
10 | 10 | ||||
972 | |||||
551 | |||||
8 | |||||
8 | |||||
30.0 | |||||
964 | |||||
541 | |||||
17 | |||||
12 | |||||
20.0 | |||||
1 | 1 | ||||
10 | |||||
12 | |||||
1 | 1 | ||||
1 | 1 | ||||
1 | 1 | ||||
0 | 0 | ||||
0 | |||||
0 | |||||
1 | 1 | ||||
1 | |||||
1 | |||||
-8 | |||||
8 | |||||
-8 | |||||
8 | |||||
-17 | |||||
17 | |||||
-12 | |||||
12 | |||||
0 | 0 | ||||
0 | 0 | ||||
1 | 1 | ||||
frames | frames | ||||
BUTTON | BUTTON | ||||
43 | |||||
100 | |||||
138 | |||||
133 | |||||
19 | |||||
143 | |||||
114 | |||||
176 | |||||
New Game | New Game | ||||
setup | setup | ||||
NIL | NIL | ||||
@@ -227,10 +238,10 @@ NIL | |||||
NIL | NIL | ||||
BUTTON | BUTTON | ||||
290 | |||||
99 | |||||
384 | |||||
132 | |||||
129 | |||||
143 | |||||
223 | |||||
176 | |||||
Play Game | Play Game | ||||
go | go | ||||
T | T | ||||
@@ -242,23 +253,12 @@ G | |||||
NIL | NIL | ||||
NIL | NIL | ||||
MONITOR | |||||
269 | |||||
290 | |||||
389 | |||||
339 | |||||
Player Speed | |||||
[speed] of player | |||||
8 | |||||
1 | |||||
12 | |||||
BUTTON | BUTTON | ||||
109 | |||||
172 | |||||
230 | |||||
21 | |||||
208 | |||||
224 | 224 | ||||
FIRE! | |||||
255 | |||||
Fire! | |||||
player-fire | player-fire | ||||
NIL | NIL | ||||
1 | 1 | ||||
@@ -269,95 +269,22 @@ F | |||||
NIL | NIL | ||||
NIL | NIL | ||||
MONITOR | |||||
270 | |||||
350 | |||||
389 | |||||
399 | |||||
Player Has Target? | |||||
player-has-target? | |||||
5 | |||||
1 | |||||
12 | |||||
OUTPUT | |||||
1012 | |||||
10 | |||||
1500 | |||||
557 | |||||
12 | |||||
MONITOR | |||||
55 | |||||
290 | |||||
149 | |||||
339 | |||||
Player Deaths | |||||
player-deaths | |||||
17 | |||||
1 | |||||
12 | |||||
MONITOR | |||||
55 | |||||
350 | |||||
148 | |||||
399 | |||||
Player Kills | |||||
player-kills | |||||
17 | |||||
1 | |||||
12 | |||||
MONITOR | |||||
160 | |||||
290 | |||||
261 | |||||
339 | |||||
Player Ammo | |||||
[ammunition] of player | |||||
17 | |||||
1 | |||||
12 | |||||
MONITOR | |||||
160 | |||||
350 | |||||
260 | |||||
399 | |||||
Player Armor | |||||
[armor] of player | |||||
17 | |||||
1 | |||||
12 | |||||
SWITCH | SWITCH | ||||
264 | |||||
179 | |||||
394 | |||||
212 | |||||
50 | |||||
97 | |||||
186 | |||||
130 | |||||
enable-sound? | enable-sound? | ||||
enable-sound? | enable-sound? | ||||
0 | 0 | ||||
1 | 1 | ||||
-1000 | -1000 | ||||
MONITOR | |||||
272 | |||||
411 | |||||
390 | |||||
460 | |||||
Player Target | |||||
word \"(\" player-target-xcor \", \" player-target-ycor \")\" | |||||
10 | |||||
1 | |||||
12 | |||||
BUTTON | BUTTON | ||||
109 | |||||
235 | |||||
230 | |||||
268 | |||||
22 | |||||
308 | |||||
225 | |||||
341 | |||||
Cancel Order | Cancel Order | ||||
player-cancel-order | player-cancel-order | ||||
NIL | NIL | ||||
@@ -369,54 +296,61 @@ C | |||||
NIL | NIL | ||||
NIL | NIL | ||||
BUTTON | |||||
109 | |||||
536 | |||||
368 | |||||
569 | |||||
NIL | |||||
ask one-of bases [claim-base tank 2] | |||||
NIL | |||||
TEXTBOX | |||||
16 | |||||
14 | |||||
303 | |||||
53 | |||||
LoBo: Logo Bolo | |||||
28 | |||||
0.0 | |||||
1 | 1 | ||||
T | |||||
OBSERVER | |||||
NIL | |||||
NIL | |||||
NIL | |||||
NIL | |||||
MONITOR | |||||
160 | |||||
412 | |||||
259 | |||||
461 | |||||
Player's Pills | |||||
[number-of-pills] of player | |||||
17 | |||||
TEXTBOX | |||||
41 | |||||
53 | |||||
304 | |||||
87 | |||||
a game by Ben Kurtovic | |||||
14 | |||||
0.0 | |||||
1 | 1 | ||||
12 | |||||
MONITOR | |||||
261 | |||||
584 | |||||
357 | |||||
629 | |||||
Pillbox Anger | |||||
[anger] of pillbox 4 | |||||
6 | |||||
TEXTBOX | |||||
19 | |||||
75 | |||||
241 | |||||
93 | |||||
--------------------------------- | |||||
11 | |||||
0.0 | |||||
1 | 1 | ||||
TEXTBOX | |||||
21 | |||||
185 | |||||
262 | |||||
213 | |||||
--------------------------------- | |||||
11 | 11 | ||||
0.0 | |||||
1 | |||||
MONITOR | |||||
148 | |||||
584 | |||||
246 | |||||
629 | |||||
Pillbox Armor | |||||
[armor] of pillbox 4 | |||||
17 | |||||
BUTTON | |||||
22 | |||||
265 | |||||
225 | |||||
298 | |||||
Place Pill | |||||
player-place-pill | |||||
NIL | |||||
1 | 1 | ||||
11 | |||||
T | |||||
OBSERVER | |||||
NIL | |||||
P | |||||
NIL | |||||
NIL | |||||
@#$#@#$#@ | @#$#@#$#@ | ||||
WHAT IS IT? | WHAT IS IT? | ||||
@@ -560,10 +494,10 @@ Rectangle -7500403 true false 255 135 300 165 | |||||
Polygon -7500403 true false 30 60 30 30 60 30 90 60 60 90 30 60 | Polygon -7500403 true false 30 60 30 30 60 30 90 60 60 90 30 60 | ||||
Polygon -7500403 true false 60 270 30 270 30 240 60 210 90 240 60 270 | Polygon -7500403 true false 60 270 30 270 30 240 60 210 90 240 60 270 | ||||
Polygon -7500403 true false 270 240 270 270 240 270 210 240 240 210 270 240 | Polygon -7500403 true false 270 240 270 270 240 270 210 240 240 210 270 240 | ||||
Polygon -2674135 true true 195 165 210 180 210 180 210 210 180 210 165 195 | |||||
Polygon -2674135 true true 165 105 180 90 180 90 210 90 210 120 195 135 | |||||
Polygon -2674135 true true 105 135 90 120 90 120 90 90 120 90 135 105 | |||||
Polygon -2674135 true true 135 195 120 210 120 210 90 210 90 180 105 165 | |||||
Polygon -2674135 true true 195 165 210 180 210 210 180 210 165 195 | |||||
Polygon -2674135 true true 165 105 180 90 210 90 210 120 195 135 | |||||
Polygon -2674135 true true 105 135 90 120 90 90 120 90 135 105 | |||||
Polygon -2674135 true true 135 195 120 210 90 210 90 180 105 165 | |||||
tank | tank | ||||
true | true | ||||
@@ -1,18 +1,15 @@ | |||||
;; lobo: Logo Bolo | ;; lobo: Logo Bolo | ||||
;; (c) Ben Kurtovic, 2011 | ;; (c) Ben Kurtovic, 2011 | ||||
globals [ | |||||
pill-anger-range | |||||
pill-max-armor | |||||
] | |||||
breed [pillboxes pillbox] | breed [pillboxes pillbox] | ||||
pillboxes-own [ | pillboxes-own [ | ||||
alive? | alive? | ||||
anger | anger | ||||
anger-range | |||||
armor | armor | ||||
last-fire-time | last-fire-time | ||||
max-armor | |||||
team | team | ||||
] | ] | ||||
@@ -22,33 +19,40 @@ pillboxes-own [ | |||||
to spawn-pillbox [pill-xcor pill-ycor] | to spawn-pillbox [pill-xcor pill-ycor] | ||||
create-pillboxes 1 [ | create-pillboxes 1 [ | ||||
set-pill-vars (first pill-anger-range) pill-max-armor -1 pill-xcor pill-ycor | |||||
set-pill-vars -1 | |||||
setxy pill-xcor pill-ycor | |||||
] | |||||
end | |||||
to hatch-pillbox | |||||
hatch 1 [ | |||||
debug who "PILL-HATCH" (word "by " ([who] of myself)) | |||||
set breed pillboxes | |||||
set-pill-vars [team] of myself | |||||
] | ] | ||||
end | end | ||||
to set-pill-vars [p-anger p-armor p-team p-xcor p-ycor] | |||||
to set-pill-vars [p-team] | |||||
set alive? true | set alive? true | ||||
set anger p-anger | |||||
set armor p-armor | |||||
set anger 1.2 | |||||
set anger-range [1.2 0.2] | |||||
set armor 8 | |||||
set last-fire-time timer | set last-fire-time timer | ||||
set max-armor 8 | |||||
set team p-team | set team p-team | ||||
set color get-pill-color | set color get-pill-color | ||||
set shape "pillbox-alive" | set shape "pillbox-alive" | ||||
set size 1.1 | set size 1.1 | ||||
setxy p-xcor p-ycor | |||||
end | end | ||||
to do-pill-logic | to do-pill-logic | ||||
set label armor | set label armor | ||||
ifelse alive? [ | ifelse alive? [ | ||||
if timer - last-fire-time > anger [ | if timer - last-fire-time > anger [ | ||||
let targets tanks in-radius 9 | |||||
let targets tanks with [team != [team] of myself] in-radius 9 | |||||
if any? targets [ | if any? targets [ | ||||
let target min-one-of targets [distancexy [xcor] of myself [ycor] of myself] | |||||
face target | |||||
fire-bullet 9 | |||||
set last-fire-time timer | |||||
pill-fire-at min-one-of targets [distancexy [xcor] of myself [ycor] of myself] | |||||
] | ] | ||||
] | ] | ||||
relax | relax | ||||
@@ -59,6 +63,14 @@ to do-pill-logic | |||||
] | ] | ||||
end | end | ||||
to pill-fire-at [target] | |||||
debug who "PILL-FIRE" (word "at " [who] of target) | |||||
face target | |||||
play-sound "fire" | |||||
fire-bullet 9 | |||||
set last-fire-time timer | |||||
end | |||||
to pill-shot-at | to pill-shot-at | ||||
set armor armor - 1 | set armor armor - 1 | ||||
ifelse armor = 0 [ | ifelse armor = 0 [ | ||||
@@ -76,7 +88,7 @@ to pill-shot-at | |||||
end | end | ||||
to relax | to relax | ||||
let min-anger first pill-anger-range | |||||
let min-anger first anger-range | |||||
set anger anger + 0.00025 | set anger anger + 0.00025 | ||||
if anger > min-anger [ | if anger > min-anger [ | ||||
set anger min-anger | set anger min-anger | ||||
@@ -84,7 +96,7 @@ to relax | |||||
end | end | ||||
to enrage | to enrage | ||||
let max-anger last pill-anger-range | |||||
let max-anger last anger-range | |||||
set anger anger - 0.2 | set anger anger - 0.2 | ||||
if anger < max-anger [ | if anger < max-anger [ | ||||
set anger max-anger | set anger max-anger | ||||
@@ -54,6 +54,18 @@ to do-player-logic | |||||
] | ] | ||||
end | end | ||||
to player-place-pill | |||||
ask player [ | |||||
ifelse number-of-pills > 0 [ | |||||
set number-of-pills number-of-pills - 1 | |||||
hatch-pillbox | |||||
play-sound "place" | |||||
] [ | |||||
play-sound "nopill" | |||||
] | |||||
] | |||||
end | |||||
to cancel-order | to cancel-order | ||||
if player-has-target? [ | if player-has-target? [ | ||||
cancel-target | cancel-target | ||||
@@ -1,11 +1,6 @@ | |||||
;; 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 [ | ||||
@@ -16,6 +11,8 @@ tanks-own [ | |||||
friction | friction | ||||
is-accelerating? | is-accelerating? | ||||
is-player? | is-player? | ||||
max-ammo | |||||
max-armor | |||||
max-fire-rate | max-fire-rate | ||||
max-speed | max-speed | ||||
max-turn | max-turn | ||||
@@ -36,12 +33,14 @@ end | |||||
to set-tank-vars [player? tteam txcor tycor theading] | to set-tank-vars [player? tteam txcor tycor theading] | ||||
set acceleration 0.03 | set acceleration 0.03 | ||||
set ammunition tank-max-ammo | |||||
set armor tank-max-armor | |||||
set ammunition 20 | |||||
set armor 8 | |||||
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? | set is-player? player? | ||||
set max-ammo 24 | |||||
set max-armor 8 | |||||
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 | ||||