From 930ef452a1216c30d8aea486b634db1d542506c2 Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 16 Nov 2015 00:43:59 +1000 Subject: [PATCH] Add level saving for admins, and include 2 levels to progress through --- minigames/bulldozer/storage_level1.txt | 399 +++++++++++++++++++++++++ minigames/bulldozer/storage_level2.txt | 194 ++++++++++++ qcsrc/common/minigames/minigame/bd.qc | 302 ++++++++++++++++--- 3 files changed, 848 insertions(+), 47 deletions(-) create mode 100644 minigames/bulldozer/storage_level1.txt create mode 100644 minigames/bulldozer/storage_level2.txt diff --git a/minigames/bulldozer/storage_level1.txt b/minigames/bulldozer/storage_level1.txt new file mode 100644 index 000000000..43c73d31b --- /dev/null +++ b/minigames/bulldozer/storage_level1.txt @@ -0,0 +1,399 @@ +// bulldozer storage "level1" last updated 16-11-2015 00:13:42 +nextlevel=level2 +"e6" 4 "0 0 0" ; +"a10" 4 "0 0 0" ; +"c12" 4 "0 0 0" ; +"a9" 4 "0 0 0" ; +"a8" 4 "0 0 0" ; +"a7" 4 "0 0 0" ; +"a6" 4 "0 0 0" ; +"d12" 4 "0 0 0" ; +"j8" 4 "0 0 0" ; +"k9" 4 "0 0 0" ; +"i10" 4 "0 0 0" ; +"i9" 4 "0 0 0" ; +"k10" 4 "0 0 0" ; +"k11" 4 "0 0 0" ; +"l11" 4 "0 0 0" ; +"m11" 4 "0 0 0" ; +"m13" 4 "0 0 0" ; +"n12" 4 "0 0 0" ; +"l13" 4 "0 0 0" ; +"k13" 4 "0 0 0" ; +"m12" 4 "0 0 0" ; +"j13" 4 "0 0 0" ; +"j14" 4 "0 0 0" ; +"j15" 4 "0 0 0" ; +"i15" 4 "0 0 0" ; +"h14" 4 "0 0 0" ; +"h15" 4 "0 0 0" ; +"h13" 4 "0 0 0" ; +"h12" 4 "0 0 0" ; +"f12" 4 "0 0 0" ; +"g12" 4 "0 0 0" ; +"f11" 4 "0 0 0" ; +"f10" 4 "0 0 0" ; +"g10" 4 "0 0 0" ; +"h10" 4 "0 0 0" ; +"i8" 4 "0 0 0" ; +"k8" 4 "0 0 0" ; +"j11" 1 "0 0 0" ; +"j9" 2 "0 0 0" ; +"g11" 2 "0 0 0" ; +"i14" 2 "0 0 0" ; +"l12" 2 "0 0 0" ; +"i11" 3 "0 0 0" ; +"i12" 3 "0 0 0" ; +"a20" 5 "0 0 0" ; +"j10" 3 "0 0 0" ; +"k12" 3 "0 0 0" ; +"a19" 5 "0 0 0" ; +"a18" 5 "0 0 0" ; +"a17" 5 "0 0 0" ; +"a16" 5 "0 0 0" ; +"a15" 5 "0 0 0" ; +"a14" 5 "0 0 0" ; +"a13" 5 "0 0 0" ; +"a12" 5 "0 0 0" ; +"b12" 5 "0 0 0" ; +"b11" 5 "0 0 0" ; +"b10" 5 "0 0 0" ; +"b9" 5 "0 0 0" ; +"b7" 5 "0 0 0" ; +"b6" 5 "0 0 0" ; +"c6" 5 "0 0 0" ; +"d6" 5 "0 0 0" ; +"f6" 5 "0 0 0" ; +"f7" 5 "0 0 0" ; +"f8" 5 "0 0 0" ; +"f9" 5 "0 0 0" ; +"h9" 5 "0 0 0" ; +"g9" 5 "0 0 0" ; +"g8" 5 "0 0 0" ; +"g7" 5 "0 0 0" ; +"g6" 5 "0 0 0" ; +"g5" 5 "0 0 0" ; +"g4" 5 "0 0 0" ; +"h6" 5 "0 0 0" ; +"h7" 5 "0 0 0" ; +"h8" 5 "0 0 0" ; +"i7" 5 "0 0 0" ; +"i6" 5 "0 0 0" ; +"j6" 5 "0 0 0" ; +"k6" 5 "0 0 0" ; +"j7" 5 "0 0 0" ; +"k7" 5 "0 0 0" ; +"l6" 5 "0 0 0" ; +"l7" 5 "0 0 0" ; +"l8" 5 "0 0 0" ; +"l9" 5 "0 0 0" ; +"m10" 5 "0 0 0" ; +"l10" 5 "0 0 0" ; +"m8" 5 "0 0 0" ; +"m7" 5 "0 0 0" ; +"m6" 5 "0 0 0" ; +"m5" 5 "0 0 0" ; +"m4" 5 "0 0 0" ; +"m3" 5 "0 0 0" ; +"m2" 5 "0 0 0" ; +"m1" 5 "0 0 0" ; +"n1" 5 "0 0 0" ; +"o1" 5 "0 0 0" ; +"p1" 5 "0 0 0" ; +"q1" 5 "0 0 0" ; +"r1" 5 "0 0 0" ; +"s1" 5 "0 0 0" ; +"t2" 5 "0 0 0" ; +"t3" 5 "0 0 0" ; +"t4" 5 "0 0 0" ; +"t5" 5 "0 0 0" ; +"t6" 5 "0 0 0" ; +"t7" 5 "0 0 0" ; +"t8" 5 "0 0 0" ; +"t9" 5 "0 0 0" ; +"t10" 5 "0 0 0" ; +"t11" 5 "0 0 0" ; +"t12" 5 "0 0 0" ; +"t13" 5 "0 0 0" ; +"t14" 5 "0 0 0" ; +"t15" 5 "0 0 0" ; +"t16" 5 "0 0 0" ; +"t17" 5 "0 0 0" ; +"t18" 5 "0 0 0" ; +"t19" 5 "0 0 0" ; +"t20" 5 "0 0 0" ; +"s20" 5 "0 0 0" ; +"r20" 5 "0 0 0" ; +"q20" 5 "0 0 0" ; +"p20" 5 "0 0 0" ; +"o20" 5 "0 0 0" ; +"n20" 5 "0 0 0" ; +"m20" 5 "0 0 0" ; +"l20" 5 "0 0 0" ; +"k20" 5 "0 0 0" ; +"j20" 5 "0 0 0" ; +"i20" 5 "0 0 0" ; +"h20" 5 "0 0 0" ; +"g20" 5 "0 0 0" ; +"e20" 5 "0 0 0" ; +"d20" 5 "0 0 0" ; +"c20" 5 "0 0 0" ; +"b20" 5 "0 0 0" ; +"f20" 5 "0 0 0" ; +"f19" 5 "0 0 0" ; +"f18" 5 "0 0 0" ; +"f17" 5 "0 0 0" ; +"f16" 5 "0 0 0" ; +"f15" 5 "0 0 0" ; +"f14" 5 "0 0 0" ; +"f13" 5 "0 0 0" ; +"a5" 4 "0 0 0" ; +"a4" 4 "0 0 0" ; +"a3" 4 "0 0 0" ; +"a2" 4 "0 0 0" ; +"a1" 4 "0 0 0" ; +"b1" 4 "0 0 0" ; +"c1" 4 "0 0 0" ; +"d1" 4 "0 0 0" ; +"e1" 4 "0 0 0" ; +"f1" 4 "0 0 0" ; +"g1" 4 "0 0 0" ; +"h1" 4 "0 0 0" ; +"i1" 4 "0 0 0" ; +"j1" 4 "0 0 0" ; +"k1" 4 "0 0 0" ; +"l1" 4 "0 0 0" ; +"l2" 4 "0 0 0" ; +"l3" 4 "0 0 0" ; +"l4" 4 "0 0 0" ; +"l5" 4 "0 0 0" ; +"e12" 5 "0 0 0" ; +"e11" 5 "0 0 0" ; +"e13" 5 "0 0 0" ; +"e14" 5 "0 0 0" ; +"e15" 5 "0 0 0" ; +"e16" 5 "0 0 0" ; +"e18" 5 "0 0 0" ; +"e19" 5 "0 0 0" ; +"e17" 5 "0 0 0" ; +"d13" 5 "0 0 0" ; +"c13" 5 "0 0 0" ; +"b13" 5 "0 0 0" ; +"b14" 5 "0 0 0" ; +"b15" 5 "0 0 0" ; +"b16" 5 "0 0 0" ; +"b18" 5 "0 0 0" ; +"b19" 5 "0 0 0" ; +"d2" 4 "0 0 0" ; +"b2" 4 "0 0 0" ; +"c2" 4 "0 0 0" ; +"e2" 4 "0 0 0" ; +"f2" 4 "0 0 0" ; +"g2" 4 "0 0 0" ; +"h2" 4 "0 0 0" ; +"j3" 4 "0 0 0" ; +"i2" 4 "0 0 0" ; +"j2" 4 "0 0 0" ; +"k2" 4 "0 0 0" ; +"k3" 4 "0 0 0" ; +"i3" 4 "0 0 0" ; +"g3" 4 "0 0 0" ; +"h3" 4 "0 0 0" ; +"f3" 4 "0 0 0" ; +"e3" 4 "0 0 0" ; +"d3" 4 "0 0 0" ; +"c3" 4 "0 0 0" ; +"b3" 4 "0 0 0" ; +"c19" 5 "0 0 0" ; +"c7" 4 "0 0 0" ; +"d19" 5 "0 0 0" ; +"d17" 5 "0 0 0" ; +"e10" 4 "0 0 0" ; +"d15" 5 "0 0 0" ; +"e7" 4 "0 0 0" ; +"b5" 4 "0 0 0" ; +"c5" 4 "0 0 0" ; +"e5" 4 "0 0 0" ; +"d5" 4 "0 0 0" ; +"b4" 4 "0 0 0" ; +"d4" 4 "0 0 0" ; +"e4" 4 "0 0 0" ; +"c4" 4 "0 0 0" ; +"c14" 5 "0 0 0" ; +"c15" 5 "0 0 0" ; +"c17" 5 "0 0 0" ; +"b17" 5 "0 0 0" ; +"d7" 4 "0 0 0" ; +"c18" 5 "0 0 0" ; +"h5" 4 "0 0 0" ; +"h4" 4 "0 0 0" ; +"i4" 4 "0 0 0" ; +"j4" 4 "0 0 0" ; +"k5" 4 "0 0 0" ; +"j5" 4 "0 0 0" ; +"i5" 4 "0 0 0" ; +"d18" 5 "0 0 0" ; +"d10" 4 "0 0 0" ; +"d16" 5 "0 0 0" ; +"c16" 5 "0 0 0" ; +"d14" 5 "0 0 0" ; +"g13" 5 "0 0 0" ; +"g14" 5 "0 0 0" ; +"k4" 4 "0 0 0" ; +"g15" 5 "0 0 0" ; +"e9" 4 "0 0 0" ; +"e8" 4 "0 0 0" ; +"b8" 4 "0 0 0" ; +"c8" 4 "0 0 0" ; +"d8" 4 "0 0 0" ; +"d9" 4 "0 0 0" ; +"c9" 4 "0 0 0" ; +"g16" 5 "0 0 0" ; +"g17" 5 "0 0 0" ; +"g18" 5 "0 0 0" ; +"c11" 4 "0 0 0" ; +"d11" 4 "0 0 0" ; +"g19" 5 "0 0 0" ; +"h19" 5 "0 0 0" ; +"h18" 5 "0 0 0" ; +"h16" 5 "0 0 0" ; +"h17" 5 "0 0 0" ; +"i16" 5 "0 0 0" ; +"i17" 5 "0 0 0" ; +"i18" 5 "0 0 0" ; +"j19" 5 "0 0 0" ; +"j18" 5 "0 0 0" ; +"j17" 5 "0 0 0" ; +"i19" 5 "0 0 0" ; +"j16" 5 "0 0 0" ; +"k16" 5 "0 0 0" ; +"k15" 5 "0 0 0" ; +"k14" 5 "0 0 0" ; +"k17" 5 "0 0 0" ; +"k18" 5 "0 0 0" ; +"k19" 5 "0 0 0" ; +"l19" 5 "0 0 0" ; +"c10" 4 "0 0 0" ; +"f5" 4 "0 0 0" ; +"f4" 4 "0 0 0" ; +"l18" 5 "0 0 0" ; +"l17" 5 "0 0 0" ; +"l16" 5 "0 0 0" ; +"l15" 5 "0 0 0" ; +"l14" 5 "0 0 0" ; +"a11" 4 "0 0 0" ; +"m14" 5 "0 0 0" ; +"m15" 5 "0 0 0" ; +"m16" 5 "0 0 0" ; +"m17" 5 "0 0 0" ; +"m18" 5 "0 0 0" ; +"n19" 5 "0 0 0" ; +"m19" 5 "0 0 0" ; +"n18" 5 "0 0 0" ; +"n17" 5 "0 0 0" ; +"n16" 5 "0 0 0" ; +"n15" 5 "0 0 0" ; +"n14" 5 "0 0 0" ; +"n13" 5 "0 0 0" ; +"n11" 5 "0 0 0" ; +"n10" 5 "0 0 0" ; +"n9" 5 "0 0 0" ; +"n8" 5 "0 0 0" ; +"n7" 5 "0 0 0" ; +"n6" 5 "0 0 0" ; +"n5" 5 "0 0 0" ; +"n4" 5 "0 0 0" ; +"n3" 5 "0 0 0" ; +"n2" 5 "0 0 0" ; +"m9" 5 "0 0 0" ; +"t1" 5 "0 0 0" ; +"s2" 5 "0 0 0" ; +"s3" 5 "0 0 0" ; +"s4" 5 "0 0 0" ; +"s5" 5 "0 0 0" ; +"s6" 5 "0 0 0" ; +"s7" 5 "0 0 0" ; +"s8" 5 "0 0 0" ; +"s9" 5 "0 0 0" ; +"s10" 5 "0 0 0" ; +"s11" 5 "0 0 0" ; +"s12" 5 "0 0 0" ; +"s13" 5 "0 0 0" ; +"s14" 5 "0 0 0" ; +"s15" 5 "0 0 0" ; +"s16" 5 "0 0 0" ; +"s17" 5 "0 0 0" ; +"s18" 5 "0 0 0" ; +"s19" 5 "0 0 0" ; +"r19" 5 "0 0 0" ; +"q19" 5 "0 0 0" ; +"p19" 5 "0 0 0" ; +"o19" 5 "0 0 0" ; +"o18" 5 "0 0 0" ; +"o17" 5 "0 0 0" ; +"o16" 5 "0 0 0" ; +"o15" 5 "0 0 0" ; +"o14" 5 "0 0 0" ; +"o13" 5 "0 0 0" ; +"o12" 5 "0 0 0" ; +"o11" 5 "0 0 0" ; +"o10" 5 "0 0 0" ; +"o9" 5 "0 0 0" ; +"o8" 5 "0 0 0" ; +"o7" 5 "0 0 0" ; +"o6" 5 "0 0 0" ; +"o5" 5 "0 0 0" ; +"o4" 5 "0 0 0" ; +"o3" 5 "0 0 0" ; +"o2" 5 "0 0 0" ; +"p2" 5 "0 0 0" ; +"p3" 5 "0 0 0" ; +"p4" 5 "0 0 0" ; +"p5" 5 "0 0 0" ; +"p6" 5 "0 0 0" ; +"p7" 5 "0 0 0" ; +"p9" 5 "0 0 0" ; +"p10" 5 "0 0 0" ; +"p11" 5 "0 0 0" ; +"p13" 5 "0 0 0" ; +"p14" 5 "0 0 0" ; +"p15" 5 "0 0 0" ; +"p16" 5 "0 0 0" ; +"p17" 5 "0 0 0" ; +"p18" 5 "0 0 0" ; +"p12" 5 "0 0 0" ; +"p8" 5 "0 0 0" ; +"q8" 5 "0 0 0" ; +"q15" 5 "0 0 0" ; +"q16" 5 "0 0 0" ; +"q17" 5 "0 0 0" ; +"q18" 5 "0 0 0" ; +"r18" 5 "0 0 0" ; +"r17" 5 "0 0 0" ; +"r16" 5 "0 0 0" ; +"r15" 5 "0 0 0" ; +"r14" 5 "0 0 0" ; +"r13" 5 "0 0 0" ; +"r12" 5 "0 0 0" ; +"r11" 5 "0 0 0" ; +"r10" 5 "0 0 0" ; +"r9" 5 "0 0 0" ; +"r7" 5 "0 0 0" ; +"r6" 5 "0 0 0" ; +"r4" 5 "0 0 0" ; +"r3" 5 "0 0 0" ; +"r2" 5 "0 0 0" ; +"q2" 5 "0 0 0" ; +"q3" 5 "0 0 0" ; +"q4" 5 "0 0 0" ; +"q6" 5 "0 0 0" ; +"q7" 5 "0 0 0" ; +"q5" 5 "0 0 0" ; +"r5" 5 "0 0 0" ; +"r8" 5 "0 0 0" ; +"q9" 5 "0 0 0" ; +"q10" 5 "0 0 0" ; +"q11" 5 "0 0 0" ; +"q12" 5 "0 0 0" ; +"q13" 5 "0 0 0" ; +"q14" 5 "0 0 0" ; diff --git a/minigames/bulldozer/storage_level2.txt b/minigames/bulldozer/storage_level2.txt new file mode 100644 index 000000000..adec0fd24 --- /dev/null +++ b/minigames/bulldozer/storage_level2.txt @@ -0,0 +1,194 @@ +// bulldozer storage "level2" last updated 16-11-2015 00:39:35 +nextlevel=level2 +"a20" 4 "0 0 0" ; +"b20" 4 "0 0 0" ; +"c20" 4 "0 0 0" ; +"d20" 4 "0 0 0" ; +"e20" 4 "0 0 0" ; +"f20" 4 "0 0 0" ; +"g20" 4 "0 0 0" ; +"h20" 4 "0 0 0" ; +"i20" 4 "0 0 0" ; +"j20" 4 "0 0 0" ; +"k20" 4 "0 0 0" ; +"l20" 4 "0 0 0" ; +"m20" 4 "0 0 0" ; +"n20" 4 "0 0 0" ; +"o20" 4 "0 0 0" ; +"p20" 4 "0 0 0" ; +"q20" 4 "0 0 0" ; +"r20" 4 "0 0 0" ; +"s20" 4 "0 0 0" ; +"t20" 4 "0 0 0" ; +"t19" 4 "0 0 0" ; +"t18" 4 "0 0 0" ; +"t17" 4 "0 0 0" ; +"t16" 4 "0 0 0" ; +"t15" 4 "0 0 0" ; +"t14" 4 "0 0 0" ; +"t13" 4 "0 0 0" ; +"t9" 4 "0 0 0" ; +"s9" 4 "0 0 0" ; +"r9" 4 "0 0 0" ; +"q9" 4 "0 0 0" ; +"p9" 4 "0 0 0" ; +"o9" 4 "0 0 0" ; +"n9" 4 "0 0 0" ; +"m9" 4 "0 0 0" ; +"l9" 4 "0 0 0" ; +"k9" 4 "0 0 0" ; +"j9" 4 "0 0 0" ; +"i9" 4 "0 0 0" ; +"h9" 4 "0 0 0" ; +"g9" 4 "0 0 0" ; +"f9" 4 "0 0 0" ; +"e9" 4 "0 0 0" ; +"d9" 4 "0 0 0" ; +"c9" 4 "0 0 0" ; +"b9" 4 "0 0 0" ; +"a9" 4 "0 0 0" ; +"a10" 4 "0 0 0" ; +"a11" 4 "0 0 0" ; +"a12" 4 "0 0 0" ; +"a13" 4 "0 0 0" ; +"a14" 4 "0 0 0" ; +"a15" 4 "0 0 0" ; +"a16" 4 "0 0 0" ; +"a17" 4 "0 0 0" ; +"a18" 4 "0 0 0" ; +"a19" 4 "0 0 0" ; +"t12" 4 "0 0 0" ; +"t11" 4 "0 0 0" ; +"t10" 4 "0 0 0" ; +"k4" 4 "0 0 0" ; +"t3" 4 "0 0 0" ; +"s4" 4 "0 0 0" ; +"t2" 4 "0 0 0" ; +"l5" 4 "0 0 0" ; +"j6" 4 "0 0 0" ; +"c19" 4 "0 0 0" ; +"r6" 4 "0 0 0" ; +"c18" 4 "0 0 0" ; +"c17" 4 "0 0 0" ; +"i6" 4 "0 0 0" ; +"c7" 4 "0 0 0" ; +"c16" 4 "0 0 0" ; +"c15" 4 "0 0 0" ; +"c14" 4 "0 0 0" ; +"c13" 4 "0 0 0" ; +"o6" 4 "0 0 0" ; +"p6" 4 "0 0 0" ; +"c12" 4 "0 0 0" ; +"l7" 4 "0 0 0" ; +"l6" 4 "0 0 0" ; +"t6" 4 "0 0 0" ; +"t5" 4 "0 0 0" ; +"b19" 2 "0 0 0" ; +"k5" 4 "0 0 0" ; +"b18" 2 "0 0 0" ; +"p5" 4 "0 0 0" ; +"j4" 4 "0 0 0" ; +"k15" 1 "0 0 0" ; +"g16" 3 "0 0 0" ; +"g12" 3 "0 0 0" ; +"l3" 4 "0 0 0" ; +"b6" 4 "0 0 0" ; +"i5" 4 "0 0 0" ; +"b5" 4 "0 0 0" ; +"r10" 4 "0 0 0" ; +"b4" 4 "0 0 0" ; +"r12" 4 "0 0 0" ; +"r11" 4 "0 0 0" ; +"r13" 4 "0 0 0" ; +"c3" 4 "0 0 0" ; +"r14" 4 "0 0 0" ; +"r15" 4 "0 0 0" ; +"d6" 4 "0 0 0" ; +"r17" 4 "0 0 0" ; +"r18" 4 "0 0 0" ; +"s10" 2 "0 0 0" ; +"d5" 4 "0 0 0" ; +"s11" 2 "0 0 0" ; +"d4" 4 "0 0 0" ; +"o17" 3 "0 0 0" ; +"o13" 3 "0 0 0" ; +"l4" 4 "0 0 0" ; +"h7" 4 "0 0 0" ; +"o4" 4 "0 0 0" ; +"p4" 4 "0 0 0" ; +"t4" 4 "0 0 0" ; +"h6" 4 "0 0 0" ; +"h5" 4 "0 0 0" ; +"h4" 4 "0 0 0" ; +"h3" 4 "0 0 0" ; +"f4" 4 "0 0 0" ; +"f5" 4 "0 0 0" ; +"f6" 4 "0 0 0" ; +"n6" 4 "0 0 0" ; +"d3" 4 "0 0 0" ; +"o5" 4 "0 0 0" ; +"n4" 4 "0 0 0" ; +"a2" 4 "0 0 0" ; +"b2" 4 "0 0 0" ; +"c2" 4 "0 0 0" ; +"d2" 4 "0 0 0" ; +"e2" 4 "0 0 0" ; +"f2" 4 "0 0 0" ; +"g2" 4 "0 0 0" ; +"h2" 4 "0 0 0" ; +"i2" 4 "0 0 0" ; +"j2" 4 "0 0 0" ; +"k2" 4 "0 0 0" ; +"l2" 4 "0 0 0" ; +"m2" 4 "0 0 0" ; +"n2" 4 "0 0 0" ; +"o2" 4 "0 0 0" ; +"p2" 4 "0 0 0" ; +"q2" 4 "0 0 0" ; +"r2" 4 "0 0 0" ; +"s2" 4 "0 0 0" ; +"t1" 4 "0 0 0" ; +"s1" 4 "0 0 0" ; +"r1" 4 "0 0 0" ; +"q1" 4 "0 0 0" ; +"p1" 4 "0 0 0" ; +"o1" 4 "0 0 0" ; +"n1" 4 "0 0 0" ; +"m1" 4 "0 0 0" ; +"l1" 4 "0 0 0" ; +"k1" 4 "0 0 0" ; +"j1" 4 "0 0 0" ; +"i1" 4 "0 0 0" ; +"h1" 4 "0 0 0" ; +"g1" 4 "0 0 0" ; +"f1" 4 "0 0 0" ; +"e1" 4 "0 0 0" ; +"d1" 4 "0 0 0" ; +"c1" 4 "0 0 0" ; +"b1" 4 "0 0 0" ; +"a1" 4 "0 0 0" ; +"t7" 4 "0 0 0" ; +"p3" 4 "0 0 0" ; +"p7" 4 "0 0 0" ; +"d7" 4 "0 0 0" ; +"r3" 4 "0 0 0" ; +"c8" 4 "0 0 0" ; +"b8" 4 "0 0 0" ; +"a8" 4 "0 0 0" ; +"d8" 4 "0 0 0" ; +"e8" 4 "0 0 0" ; +"f8" 4 "0 0 0" ; +"g8" 4 "0 0 0" ; +"h8" 4 "0 0 0" ; +"i8" 4 "0 0 0" ; +"j8" 4 "0 0 0" ; +"k8" 4 "0 0 0" ; +"l8" 4 "0 0 0" ; +"m8" 4 "0 0 0" ; +"n8" 4 "0 0 0" ; +"o8" 4 "0 0 0" ; +"p8" 4 "0 0 0" ; +"q8" 4 "0 0 0" ; +"r8" 4 "0 0 0" ; +"s8" 4 "0 0 0" ; +"t8" 4 "0 0 0" ; diff --git a/qcsrc/common/minigames/minigame/bd.qc b/qcsrc/common/minigames/minigame/bd.qc index c2d3572e9..0385e3944 100644 --- a/qcsrc/common/minigames/minigame/bd.qc +++ b/qcsrc/common/minigames/minigame/bd.qc @@ -9,10 +9,10 @@ const int BD_TURN_TYPE = 0x0f00; // turn type mask const int BD_SF_PLAYERMOVES = MINIG_SF_CUSTOM; // 240 tiles... -const int BD_LET_CNT = 12; -const int BD_NUM_CNT = 12; +const int BD_LET_CNT = 20; +const int BD_NUM_CNT = 20; -const int BD_TILE_SIZE = 12; +const int BD_TILE_SIZE = 20; const int BD_TEAMS = 1; @@ -20,6 +20,13 @@ const int BD_TEAMS = 1; .int bd_moves; +.string bd_levelname; +.string bd_nextlevel; + +#ifdef SVQC +.bool bd_canedit; +#endif + .int bd_tiletype; const int BD_TILE_DOZER = 1; const int BD_TILE_TARGET = 2; @@ -29,6 +36,8 @@ const int BD_TILE_BRICK2 = 5; const int BD_TILE_BRICK3 = 6; const int BD_TILE_LAST = 6; +string autocvar_sv_minigames_bulldozer_startlevel = "level1"; + // find same game piece given its tile name entity bd_find_piece(entity minig, string tile, bool check_target) { @@ -77,39 +86,16 @@ void bd_check_winner(entity minig) } } -void minigame_setup_randompiece(entity minigame, int ttype) +bool bd_canfill(int ttype) { - RandomSelection_Init(); - int i, j; - for(i = 1; i < BD_LET_CNT - 1; ++i) - for(j = 1; j < BD_NUM_CNT - 1; ++j) + switch(ttype) { - string pos = minigame_tile_buildname(i, j); - if(!bd_find_piece(minigame, pos, false) && !bd_find_piece(minigame, pos, true)) - RandomSelection_Add(world, 0, pos, 1, 1); + case BD_TILE_BRICK1: + case BD_TILE_BRICK2: + case BD_TILE_BRICK3: return true; } - entity piece = msle_spawn(minigame,"minigame_board_piece"); - piece.team = 1; - piece.netname = strzone(RandomSelection_chosen_string); - piece.bd_tiletype = ttype; - minigame_server_sendflags(piece,MINIG_SF_ALL); -} - -void bd_setup_pieces(entity minigame) -{ - // TODO! - /*minigame_setup_randompiece(minigame, BD_TILE_DOZER); - minigame_setup_randompiece(minigame, BD_TILE_TARGET); - minigame_setup_randompiece(minigame, BD_TILE_BOULDER); - minigame_setup_randompiece(minigame, BD_TILE_BRICK1); - minigame_setup_randompiece(minigame, BD_TILE_BRICK2); - minigame_setup_randompiece(minigame, BD_TILE_BRICK3); - minigame_setup_randompiece(minigame, BD_TILE_BRICK1); - minigame_setup_randompiece(minigame, BD_TILE_BRICK2); - minigame_setup_randompiece(minigame, BD_TILE_BRICK3); - - minigame_server_sendflags(minigame,MINIG_SF_UPDATE);*/ + return false; } bool bd_move_dozer(entity minigame, entity dozer) @@ -169,6 +155,7 @@ void bd_move(entity minigame, entity player, string dir) { if ( minigame.minigame_flags & BD_TURN_MOVE ) if ( dir ) + if(bd_valid_tile(dir)) { //if ( bd_valid_tile(pos) ) //if ( bd_find_piece(minigame, pos, false) ) @@ -253,6 +240,38 @@ void bd_do_move(entity minigame, entity player, string dir, string thetile) bd_editor_place(minigame, player, dir, stof(thetile)); } +void bd_fill_recurse(entity minigame, entity player, int thetype, int letter, int number) +{ + string pos = minigame_tile_buildname(letter,number); + if(!bd_valid_tile(pos)) + return; + if(bd_find_piece(minigame, pos, false) || bd_find_piece(minigame, pos, true)) + return; + + bd_editor_place(minigame, player, pos, thetype); + + bd_fill_recurse(minigame, player, thetype, letter - 1, number); + bd_fill_recurse(minigame, player, thetype, letter + 1, number); + bd_fill_recurse(minigame, player, thetype, letter, number - 1); + bd_fill_recurse(minigame, player, thetype, letter, number + 1); +} + +void bd_do_fill(entity minigame, entity player, string dir, string thetile) +{ + if(minigame.minigame_flags & BD_TURN_EDIT) + { + int thetype = stof(thetile); + + if(!bd_canfill(thetype)) + return; + + int letter = minigame_tile_letter(dir); + int number = minigame_tile_number(dir); + + bd_fill_recurse(minigame, player, thetype, letter, number); + } +} + void bd_reset_moves(entity minigame) { entity e; @@ -269,27 +288,184 @@ void bd_reset_moves(entity minigame) } } +void bd_load_level(entity minigame); +void bd_setup_pieces(entity minigame) +{ + entity e = world; + while( (e = findentity(e, owner, minigame)) ) + if(e.classname == "minigame_board_piece") + { + if(e.netname) { strunzone(e.netname); } + remove(e); + } + + bd_load_level(minigame); +} + +void bd_do_next_match(entity minigame, entity player) +{ + minigame.minigame_flags = BD_TURN_MOVE; + minigame_server_sendflags(minigame,MINIG_SF_UPDATE); + + if(minigame.bd_nextlevel && minigame.bd_nextlevel != "") + { + if(minigame.bd_levelname) { strunzone(minigame.bd_levelname); } + minigame.bd_levelname = strzone(minigame.bd_nextlevel); + } + + bd_setup_pieces(minigame); + + bd_reset_moves(minigame); +} + +void bd_set_next_match(entity minigame, string next) +{ + if(minigame.bd_nextlevel) { strunzone(minigame.bd_nextlevel); } + minigame.bd_nextlevel = strzone(next); +} + +void bd_next_match(entity minigame, entity player, string next) +{ + if(minigame.minigame_flags & BD_TURN_WIN) + bd_do_next_match(minigame, player); + if(minigame.minigame_flags & BD_TURN_EDIT) + bd_set_next_match(minigame, next); +} + // request a new match void bd_restart_match(entity minigame, entity player) { minigame.minigame_flags = BD_TURN_MOVE; minigame_server_sendflags(minigame,MINIG_SF_UPDATE); - entity e = world; - while ( ( e = findentity(e,owner,minigame) ) ) - if ( e.classname == "minigame_board_piece" ) - remove(e); bd_setup_pieces(minigame); bd_reset_moves(minigame); } -void bd_activate_editor(entity minigame) +void bd_activate_editor(entity minigame, entity player) { +#ifdef SVQC + if(!player.minigame_players.bd_canedit) + { + sprint(player.minigame_players, "You're not allowed to edit levels, sorry!\n"); + return; + } +#endif + minigame.minigame_flags = BD_TURN_EDIT; minigame_server_sendflags(minigame,MINIG_SF_UPDATE); bd_reset_moves(minigame); + + bd_setup_pieces(minigame); +} + +string bd_save_piece(entity minigame, entity e) +{ + string bd_string = ""; + + bd_string = strcat(bd_string, "\"", e.netname, "\" "); + bd_string = strcat(bd_string, ftos(e.bd_tiletype), " "); + bd_string = strcat(bd_string, sprintf("\"%.9v\"", e.bd_dir), " "); + bd_string = strcat(bd_string, "; "); + + return bd_string; +} + +void bd_set_nextlevel(entity minigame, string s) +{ + string blah = substring(s, 11, strlen(s)); + + if(minigame.bd_nextlevel) { strunzone(minigame.bd_nextlevel); } + minigame.bd_nextlevel = strzone(blah); +} + +entity bd_load_piece(entity minigame, string s) +{ + // separate pieces between the ; symbols + tokenizebyseparator(s, "; "); + string bd_string = argv(0); + + tokenize_console(bd_string); + + entity e = msle_spawn(minigame,"minigame_board_piece"); + e.team = 1; + + int argv_num = 0; + e.netname = strzone(argv(argv_num)); ++argv_num; + e.bd_tiletype = stof(argv(argv_num)); ++argv_num; + e.bd_dir = stov(argv(argv_num)); ++argv_num; + + minigame_server_sendflags(e,MINIG_SF_ALL); + + return e; +} + +bool bd_save_level(entity minigame) +{ + if(minigame.bd_levelname && minigame.bd_levelname != "") + { + // saves all objects to the database file + string file_name; + float file_get; + + file_name = strcat("minigames/bulldozer/storage_", minigame.bd_levelname, ".txt"); + file_get = fopen(file_name, FILE_WRITE); + fputs(file_get, strcat("// bulldozer storage \"", minigame.bd_levelname, "\" last updated ", strftime(true, "%d-%m-%Y %H:%M:%S"), "\n")); + + if(minigame.bd_nextlevel && minigame.bd_nextlevel != "" && fexists(strcat("minigames/bulldozer/storage_", minigame.bd_levelname, ".txt"))) + fputs(file_get, strcat("nextlevel=", minigame.bd_nextlevel, "\n")); + + entity e = world; + while ( ( e = findentity(e,owner,minigame) ) ) + if ( e.classname == "minigame_board_piece" ) + { + // use a line of text for each object, listing all properties + fputs(file_get, strcat(bd_save_piece(minigame, e), "\n")); + } + fclose(file_get); + + return true; + } + + return false; +} + +void bd_load_level(entity minigame) +{ + // loads all items from the database file + string file_read, file_name; + float file_get; + + file_name = strcat("minigames/bulldozer/storage_", minigame.bd_levelname, ".txt"); + file_get = fopen(file_name, FILE_READ); + if(file_get < 0) + { + LOG_INFO("^3BULLDOZER: ^7could not find storage file ^3", file_name, "^7, no items were loaded\n"); + } + else + { + for(;;) + { + file_read = fgets(file_get); + if(file_read == "") + break; + if(substring(file_read, 0, 2) == "//") + continue; + if(substring(file_read, 0, 1) == "#") + continue; + if(substring(file_read, 0, 10) == "nextlevel=") + { + bd_set_nextlevel(minigame, file_read); + continue; + } + + entity e; + e = bd_load_piece(minigame, file_read); + } + } + fclose(file_get); } void bd_close_editor(entity minigame) @@ -301,8 +477,16 @@ void bd_close_editor(entity minigame) return; } - minigame.minigame_flags = BD_TURN_MOVE; - minigame_server_sendflags(minigame,MINIG_SF_UPDATE); + if(bd_save_level(minigame)) + { + minigame.minigame_flags = BD_TURN_MOVE; + minigame_server_sendflags(minigame,MINIG_SF_UPDATE); + } + else + { + LOG_INFO("You need to set the level name!\n"); + return; + } } #ifdef SVQC @@ -314,6 +498,8 @@ int bd_server_event(entity minigame, string event, ...) { case "start": { + if(minigame.bd_levelname) { strunzone(minigame.bd_levelname); } + minigame.bd_levelname = strzone(autocvar_sv_minigames_bulldozer_startlevel); bd_setup_pieces(minigame); minigame.minigame_flags = BD_TURN_MOVE; @@ -328,6 +514,9 @@ int bd_server_event(entity minigame, string event, ...) if(e.netname) { strunzone(e.netname); } remove(e); } + + if(minigame.bd_nextlevel) { strunzone(minigame.bd_nextlevel); } + if(minigame.bd_levelname) { strunzone(minigame.bd_levelname); } return false; } case "join": @@ -346,17 +535,20 @@ int bd_server_event(entity minigame, string event, ...) bd_do_move(minigame, ...(0,entity), ((...(1,int)) >= 2 ? argv(1) : string_null), ((...(1,int)) >= 3 ? argv(2) : string_null)); return true; case "next": - bd_restart_match(minigame,...(0,entity)); + bd_next_match(minigame,...(0,entity), ((...(1,int) >= 2 ? argv(1) : string_null))); return true; case "restart": bd_restart_match(minigame,...(0,entity)); return true; case "edit": - bd_activate_editor(minigame); + bd_activate_editor(minigame,...(0,entity)); return true; case "save": bd_close_editor(minigame); return true; + case "fill": + bd_do_fill(minigame, ...(0,entity), ((...(1,int)) >= 2 ? argv(1) : string_null), ((...(1,int)) >= 3 ? argv(2) : string_null)); + return true; } return false; @@ -601,9 +793,9 @@ string bd_turn_to_string(int turnflags) if ( turnflags & BD_TURN_WIN ) if(random() > 0.5) - return _("Tubular!"); + return _("Tubular! Press ""Next Level"" to continue!"); else - return _("Wicked!"); + return _("Wicked! Press ""Next Level"" to continue!"); if( turnflags & BD_TURN_EDIT ) return _("Press the space bar to change your currently selected tile"); @@ -631,6 +823,14 @@ void bd_editor_make_move(entity minigame) } } +void bd_editor_fill(entity minigame) +{ + if ( minigame.minigame_flags == BD_TURN_EDIT ) + { + minigame_cmd("fill ", bd_curr_pos, " ", ftos(bd_curr_tile)); + } +} + void bd_set_curr_pos(string s) { if ( bd_curr_pos ) @@ -740,10 +940,18 @@ int bd_client_event(entity minigame, string event, ...) case "mouse_pressed": { if(minigame.minigame_flags & BD_TURN_EDIT) - if(...(0,int) == K_MOUSE1) { - bd_editor_make_move(minigame); - return true; + if(...(0,int) == K_MOUSE1) + { + bd_editor_make_move(minigame); + return true; + } + + if(...(0,int) == K_MOUSE2) + { + bd_editor_fill(minigame); + return true; + } } return false; @@ -801,7 +1009,7 @@ int bd_client_event(entity minigame, string event, ...) } case "menu_show": { - HUD_MinigameMenu_CustomEntry(...(0,entity),_("Next Match"),"next"); + HUD_MinigameMenu_CustomEntry(...(0,entity),_("Next Level"),"next"); HUD_MinigameMenu_CustomEntry(...(0,entity),_("Restart"),"restart"); HUD_MinigameMenu_CustomEntry(...(0,entity),_("Editor"),"edit"); HUD_MinigameMenu_CustomEntry(...(0,entity),_("Save"),"save"); -- 2.39.2