@@ -1,11 +1,6 @@ | |||
;; lobo: Logo Bolo | |||
;; (c) Ben Kurtovic, 2011 | |||
globals [ | |||
base-max-ammo | |||
base-max-armor | |||
] | |||
breed [bases base] | |||
bases-own [ | |||
@@ -14,6 +9,8 @@ bases-own [ | |||
last-ammo-regen | |||
last-armor-regen | |||
last-refuel | |||
max-ammo | |||
max-armor | |||
team | |||
] | |||
@@ -23,17 +20,19 @@ bases-own [ | |||
to spawn-base [base-xcor base-ycor] | |||
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 | |||
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 max-ammo b-armor | |||
set max-armor b-armor | |||
set team b-team | |||
set color get-base-color | |||
set shape "base" | |||
@@ -71,7 +70,7 @@ end | |||
to refuel-tank [tank-to-refuel] | |||
let time-since-last-refuel timer - last-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 | |||
set armor armor + 1 | |||
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 | |||
set ammunition ammunition + 1 | |||
ask myself [ | |||
@@ -97,11 +96,11 @@ 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 > 6 [ | |||
if ammunition < max-ammo and time-since-last-ammo-regen > 6 [ | |||
set ammunition ammunition + 1 | |||
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 last-armor-regen timer | |||
] | |||
@@ -47,7 +47,7 @@ end | |||
to go | |||
ask player [ | |||
do-player-logic | |||
do-player-logic | |||
] | |||
ask tanks [ | |||
do-tank-logic | |||
@@ -89,12 +89,12 @@ end | |||
to debug [agent action msg] | |||
; Comment this and remove the output box | |||
; to turn off debugging info: | |||
output-print (word (round timer) ": " agent ": " action " (" msg ")") | |||
print (word (round timer) ": " agent ": " action " (" msg ")") | |||
end | |||
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 mouse-was-down? false | |||
set player-deaths 0 | |||
@@ -102,12 +102,6 @@ to setup-defaults | |||
set player-kills 0 | |||
set player-target-xcor 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 | |||
to make-sounds-table | |||
@@ -117,6 +111,8 @@ to make-sounds-table | |||
table:put sounds "noammo" "Cowbell" | |||
table:put sounds "pickup" "Hi Bongo" | |||
table:put sounds "shot" "Acoustic Snare" | |||
table:put sounds "place" "Vibraslap" | |||
table:put sounds "nopill" "Cowbell" | |||
end | |||
to load-map | |||
@@ -159,6 +155,21 @@ to draw-border [b-color b-thickness] | |||
end | |||
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 | |||
to render | |||
@@ -177,7 +188,7 @@ end | |||
to play-sound [name] | |||
if enable-sound? [ | |||
let dist distancexy ([xcor] of player) ([ycor] of player) | |||
let volume 127 - (dist * 4) | |||
let volume 127 - (dist * 8) | |||
if volume > 0 [ | |||
sound:play-drum (table:get sounds name) volume | |||
] | |||
@@ -185,36 +196,36 @@ to play-sound [name] | |||
end | |||
@#$#@#$#@ | |||
GRAPHICS-WINDOW | |||
452 | |||
254 | |||
10 | |||
972 | |||
551 | |||
8 | |||
8 | |||
30.0 | |||
964 | |||
541 | |||
17 | |||
12 | |||
20.0 | |||
1 | |||
10 | |||
12 | |||
1 | |||
1 | |||
1 | |||
0 | |||
0 | |||
0 | |||
1 | |||
1 | |||
1 | |||
-8 | |||
8 | |||
-8 | |||
8 | |||
-17 | |||
17 | |||
-12 | |||
12 | |||
0 | |||
0 | |||
1 | |||
frames | |||
BUTTON | |||
43 | |||
100 | |||
138 | |||
133 | |||
19 | |||
143 | |||
114 | |||
176 | |||
New Game | |||
setup | |||
NIL | |||
@@ -227,10 +238,10 @@ NIL | |||
NIL | |||
BUTTON | |||
290 | |||
99 | |||
384 | |||
132 | |||
129 | |||
143 | |||
223 | |||
176 | |||
Play Game | |||
go | |||
T | |||
@@ -242,23 +253,12 @@ G | |||
NIL | |||
NIL | |||
MONITOR | |||
269 | |||
290 | |||
389 | |||
339 | |||
Player Speed | |||
[speed] of player | |||
8 | |||
1 | |||
12 | |||
BUTTON | |||
109 | |||
172 | |||
230 | |||
21 | |||
208 | |||
224 | |||
FIRE! | |||
255 | |||
Fire! | |||
player-fire | |||
NIL | |||
1 | |||
@@ -269,95 +269,22 @@ F | |||
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 | |||
264 | |||
179 | |||
394 | |||
212 | |||
50 | |||
97 | |||
186 | |||
130 | |||
enable-sound? | |||
enable-sound? | |||
0 | |||
1 | |||
-1000 | |||
MONITOR | |||
272 | |||
411 | |||
390 | |||
460 | |||
Player Target | |||
word \"(\" player-target-xcor \", \" player-target-ycor \")\" | |||
10 | |||
1 | |||
12 | |||
BUTTON | |||
109 | |||
235 | |||
230 | |||
268 | |||
22 | |||
308 | |||
225 | |||
341 | |||
Cancel Order | |||
player-cancel-order | |||
NIL | |||
@@ -369,54 +296,61 @@ C | |||
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 | |||
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 | |||
12 | |||
MONITOR | |||
261 | |||
584 | |||
357 | |||
629 | |||
Pillbox Anger | |||
[anger] of pillbox 4 | |||
6 | |||
TEXTBOX | |||
19 | |||
75 | |||
241 | |||
93 | |||
--------------------------------- | |||
11 | |||
0.0 | |||
1 | |||
TEXTBOX | |||
21 | |||
185 | |||
262 | |||
213 | |||
--------------------------------- | |||
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 | |||
11 | |||
T | |||
OBSERVER | |||
NIL | |||
P | |||
NIL | |||
NIL | |||
@#$#@#$#@ | |||
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 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 -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 | |||
true | |||
@@ -1,18 +1,15 @@ | |||
;; lobo: Logo Bolo | |||
;; (c) Ben Kurtovic, 2011 | |||
globals [ | |||
pill-anger-range | |||
pill-max-armor | |||
] | |||
breed [pillboxes pillbox] | |||
pillboxes-own [ | |||
alive? | |||
anger | |||
anger-range | |||
armor | |||
last-fire-time | |||
max-armor | |||
team | |||
] | |||
@@ -22,33 +19,40 @@ pillboxes-own [ | |||
to spawn-pillbox [pill-xcor pill-ycor] | |||
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 | |||
to set-pill-vars [p-anger p-armor p-team p-xcor p-ycor] | |||
to set-pill-vars [p-team] | |||
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 max-armor 8 | |||
set team p-team | |||
set color get-pill-color | |||
set shape "pillbox-alive" | |||
set size 1.1 | |||
setxy p-xcor p-ycor | |||
end | |||
to do-pill-logic | |||
set label armor | |||
ifelse alive? [ | |||
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 [ | |||
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 | |||
@@ -59,6 +63,14 @@ to do-pill-logic | |||
] | |||
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 | |||
set armor armor - 1 | |||
ifelse armor = 0 [ | |||
@@ -76,7 +88,7 @@ to pill-shot-at | |||
end | |||
to relax | |||
let min-anger first pill-anger-range | |||
let min-anger first anger-range | |||
set anger anger + 0.00025 | |||
if anger > min-anger [ | |||
set anger min-anger | |||
@@ -84,7 +96,7 @@ to relax | |||
end | |||
to enrage | |||
let max-anger last pill-anger-range | |||
let max-anger last anger-range | |||
set anger anger - 0.2 | |||
if anger < max-anger [ | |||
set anger max-anger | |||
@@ -54,6 +54,18 @@ to do-player-logic | |||
] | |||
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 | |||
if player-has-target? [ | |||
cancel-target | |||
@@ -1,11 +1,6 @@ | |||
;; lobo: Logo Bolo | |||
;; (c) Ben Kurtovic, 2011 | |||
globals [ | |||
tank-max-ammo | |||
tank-max-armor | |||
] | |||
breed [tanks tank] | |||
tanks-own [ | |||
@@ -16,6 +11,8 @@ tanks-own [ | |||
friction | |||
is-accelerating? | |||
is-player? | |||
max-ammo | |||
max-armor | |||
max-fire-rate | |||
max-speed | |||
max-turn | |||
@@ -36,12 +33,14 @@ end | |||
to set-tank-vars [player? tteam txcor tycor theading] | |||
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 friction 0.0075 | |||
set is-accelerating? false | |||
set is-player? player? | |||
set max-ammo 24 | |||
set max-armor 8 | |||
set max-fire-rate 7 | |||
set max-speed 0.25 | |||
set max-turn 24 | |||