From 2db55ef6fc9ce73ecec35d2241d2faa4082f0441 Mon Sep 17 00:00:00 2001 From: fry- Date: Mon, 2 Feb 2015 23:08:57 +0100 Subject: [PATCH] added a demo for 2D fog of war --- demos/2d/fog_of_war/.fscache | 11 ++++ demos/2d/fog_of_war/engine.cfg | 12 ++++ demos/2d/fog_of_war/floor.png | Bin 0 -> 572 bytes demos/2d/fog_of_war/fog.gd | 86 +++++++++++++++++++++++++++++ demos/2d/fog_of_war/fog.png | Bin 0 -> 31448 bytes demos/2d/fog_of_war/fog.scn | Bin 0 -> 3714 bytes demos/2d/fog_of_war/fog.xml | 29 ++++++++++ demos/2d/fog_of_war/icon.png | Bin 0 -> 3639 bytes demos/2d/fog_of_war/icon.png.flags | 1 + demos/2d/fog_of_war/tile_edit.scn | Bin 0 -> 1443 bytes demos/2d/fog_of_war/troll.gd | 43 +++++++++++++++ demos/2d/fog_of_war/troll.png | Bin 0 -> 7246 bytes demos/2d/fog_of_war/troll.scn | Bin 0 -> 1839 bytes 13 files changed, 182 insertions(+) create mode 100644 demos/2d/fog_of_war/.fscache create mode 100644 demos/2d/fog_of_war/engine.cfg create mode 100644 demos/2d/fog_of_war/floor.png create mode 100644 demos/2d/fog_of_war/fog.gd create mode 100644 demos/2d/fog_of_war/fog.png create mode 100644 demos/2d/fog_of_war/fog.scn create mode 100644 demos/2d/fog_of_war/fog.xml create mode 100644 demos/2d/fog_of_war/icon.png create mode 100644 demos/2d/fog_of_war/icon.png.flags create mode 100644 demos/2d/fog_of_war/tile_edit.scn create mode 100644 demos/2d/fog_of_war/troll.gd create mode 100644 demos/2d/fog_of_war/troll.png create mode 100644 demos/2d/fog_of_war/troll.scn diff --git a/demos/2d/fog_of_war/.fscache b/demos/2d/fog_of_war/.fscache new file mode 100644 index 0000000000..ba5e3995f3 --- /dev/null +++ b/demos/2d/fog_of_war/.fscache @@ -0,0 +1,11 @@ +::res://::1422910453 +floor.png::ImageTexture::1422910453:: +fog.gd::GDScript::1422910025:: +fog.png::ImageTexture::1422908128:: +fog.scn::PackedScene::1422909435:: +fog.xml::TileSet::1422909324:: +icon.png::ImageTexture::1422811193:: +tile_edit.scn::PackedScene::1422909313:: +troll.gd::GDScript::1422909940:: +troll.png::ImageTexture::1418669358:: +troll.scn::PackedScene::1418669358:: diff --git a/demos/2d/fog_of_war/engine.cfg b/demos/2d/fog_of_war/engine.cfg new file mode 100644 index 0000000000..5c4307b5bc --- /dev/null +++ b/demos/2d/fog_of_war/engine.cfg @@ -0,0 +1,12 @@ +[application] + +name="Fog of War" +main_scene="res://fog.scn" +icon="icon.png" + +[input] + +move_up=[key(Up)] +move_bottom=[key(Down)] +move_left=[key(Left)] +move_right=[key(Right)] diff --git a/demos/2d/fog_of_war/floor.png b/demos/2d/fog_of_war/floor.png new file mode 100644 index 0000000000000000000000000000000000000000..07b4f8c98f615f90772f43a4c9e427bd9e25cd17 GIT binary patch literal 572 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4kiW$h8qca7Z@0rm_1z_Ln2zw-q0>OY#_k) z;Qs0gH3f$Q2LcuxxUhizgq)$=elf;WyE57h9%@(X_(6FKP=j!WxgMi1i4CtpS!_ib>24{&Om2F&hW+Nx|bIGzpzfB*3LA4)%%h#yQ3F- zmNrcB4>VzDnd%>C(tBHcz5d(YyBn+juXbK}P-p73bHc974iP^^Tp!DHMaU=BF3>df z@Lo1wy^HO0Qu95RlkdfzO7wOvI=C%iYVM*81`h4{i!yFq(>-Mso_-VJR)Dpu$6NWm5 ZT@|&Z2W|gPWME)m@O1TaS?83{1OQm{0#E<| literal 0 HcmV?d00001 diff --git a/demos/2d/fog_of_war/fog.gd b/demos/2d/fog_of_war/fog.gd new file mode 100644 index 0000000000..9da5680e4d --- /dev/null +++ b/demos/2d/fog_of_war/fog.gd @@ -0,0 +1,86 @@ + +extends TileMap + +# member variables here, example: +# var a=2 +# var b="textvar" + +# boundarys for the fog rectangle +var x_min = -20 # left start tile +var x_max = 20 # right end tile +var y_min = -20 # top start tile +var y_max = 20 # bottom end tile + +var position # players position + +# iteration variables +var x +var y + +# variable to check if player moved +var x_old +var y_old + +# array to build up the visible area like a square +# first value determines the width/height of the tip +# here it would be 2*2 + 1 = 5 tiles wide/high +# second value determines the total squares size +# here it would be 5*2 + 1 = 10 tiles wide/high +var l = range(2,5) + +# process that runs in realtime +func _fixed_process(delta): + position = get_node("../troll").get_pos() + + # calculate the corresponding tile + # from the players position + x = int(position.x/get_cell_size().x) + # switching from positive to negative tile positions + # causes problems because of rounding problems + if position.x < 0: + x -= 1 # correct negative values + + y = int(position.y/get_cell_size().y) + if position.y < 0: + y -= 1 + + # check if the player moved one tile further + if (x_old != x) or (y_old != y): + + # create the transparent part (visited area) + var end = l.size()-1 + var start = 0 + for steps in range(l.size()): + for m in range(x-l[end]-1,x+l[end]+2): + for n in range(y-l[start]-1,y+l[start]+2): + if get_cell(m,n) != 0: + set_cell(m,n,1,0,0) + end -= 1 + start += 1 + + # create the actual and active visible part + var end = l.size()-1 + var start = 0 + for steps in range(l.size()): + for m in range(x-l[end],x+l[end]+1): + for n in range(y-l[start],y+l[start]+1): + set_cell(m,n,-1) + end -= 1 + start += 1 + + x_old = x + y_old = y + + pass + +func _ready(): + # Initalization here + + # create a square filled with the 100% opaque fog + for x in range(x_min,x_max): + for y in range(y_min,y_max): + set_cell(x,y,0,0,0) + set_fixed_process(true) + pass + + diff --git a/demos/2d/fog_of_war/fog.png b/demos/2d/fog_of_war/fog.png new file mode 100644 index 0000000000000000000000000000000000000000..56980c298d5ebca56dd75badf3474e0788267ce9 GIT binary patch literal 31448 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 literal 0 HcmV?d00001 diff --git a/demos/2d/fog_of_war/fog.scn b/demos/2d/fog_of_war/fog.scn new file mode 100644 index 0000000000000000000000000000000000000000..4987f1ead5198aecede135b9d290bd9fc2676553 GIT binary patch literal 3714 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 V&kX89G_kUSI-EhlLC&DwCjbrLZUq1U literal 0 HcmV?d00001 diff --git a/demos/2d/fog_of_war/fog.xml b/demos/2d/fog_of_war/fog.xml new file mode 100644 index 0000000000..ed08d84a1f --- /dev/null +++ b/demos/2d/fog_of_war/fog.xml @@ -0,0 +1,29 @@ + + + + + + "fog opaque" + + -48, -48 + 0, 0 + 0, 0, 144, 144 + + + "fog transparent" + + -48, -48 + 0, 0 + 144, 0, 144, 144 + + + "floor" + + 0, 0 + 0, 0 + 0, 0, 0, 0 + + + + + \ No newline at end of file diff --git a/demos/2d/fog_of_war/icon.png b/demos/2d/fog_of_war/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0c422e37b0ea9e6ad2901c8d425cb12f4d37694f GIT binary patch literal 3639 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hE|9QGNhE&XXIy*XF+OzC< zedt|Zv-e9}VspKxrDQ+(*z>j`ZL|0rCPtwrxeYbVZ^S(&^c(a$%1zdv@Rz6Z#&rfx zwb_xkXH3+MPd&Y>TSzr<&*uE8?Rh~#c{Cw7uyl3A@_gEnOc)2lO;b){rEQ0 zwM65=y-SDdS^qt3=G0@+C_SpD;-&c@>#u{i;QwuZKAp5TTc3GWUp}USL9s*4U2^uU z#Zj7zY|1wrUvliq86l3&t1CVzwy>`-e>LObiSz24f*0@n^X|RkhK2)g{{MC6$e&?2 zX=b6@rAW2MC$D|IUOoGXSv>z0_q3#G`e}Jv>)wZZ$;_20D%#Q?svSG?_yM81-G4rv zd_RjTLR+LiKW=I8;hw_R*QPHyq}Fz&YTM8E$NzT*-D^Gk$lU&Sw$0KBi!Qs~T<3jr zTSV=4r@ci*qGg`y#_y-c+s(Y(wEh3>s>O9L&$V3nakV*K_)>|9VnBmH>_1W4d5i@lp@qTKM}l{1Gy>D9}^2^RQSE@N{ibF5w_vLD`1f5uC z&ijv0AV6 zy6U2@-(=GtR>(2DdbRoRmUE%Xdm7qTB@18e<(~aINV)Eqr&Q4E*A~?aAMOm7V`6k- zzH!U-gXGGH-qq!%3a_@kz5JKK$|9bTxhG$+C*0iNbU))#kyD=qiWvSEH}X8!a=6T9 z@N&XQ@%VpTCo6>BAD;2F^@LmUo&Eo_dkVfB+IEZeaM0`%ezmu?*-rGF|M2vYZHwgc zl1c0#)6I_O>lEex;|o;2VqEZZT=9EjOaAhwnn(ZK z5K->rIUoK{;0#ySlNTcK=k8{1{hO23mbKL5r^WTF(|2tD60nussZH{!c>F)1+r@@U z+LnvV3wjYWX?RU)3!$E7sjRYoY4N6$ZRSeiU%>-E{TyMw$ECD?W?Og7hv z*}i>|iEr|!TN3MDe|)?+T}I~FgjsA}8#iq_6drG%qB7gY;BAJ)qsA99|bZ-4ZH^V&Ik6I&{Ff17pptjyFPQQy~&P7RWr8!O8DTF<9N z{P>fW-TgqvDY1ERb8_7JJ&zw4w6Bx4(_N{!^vOke`9#y4DM2Z2!7pw-IK;o6VQGh| z-{pY(xP3V^6Vg3c&S_2S*jiS{6RR%5_w`Bi<-dvB_Wk7B>t5yU z)w|Vv_S$`CJStXb)>yDEi1G|*DB60Zn49OoroTFc`+wiP9ryRPrQiRRp&X7|gLZD1 zUnk+k=){qA_41!Yt$FWWKA93U;~~cb{VnU5ju&1i^|be2IYnur&z3s#SG^0vwm54# zczNy&$>ZExk+V}O%bL$mvpZb6M|=6{+|%(}&z`?`sL+aeX4=CecOLODT=nX0 zOXU?+-O6WDwhiXJv!(dbN!?JyzaLVI=XjLldQZ~MjU(n_%3^EvUP}; zY2N+0kB@!v)!E(ndZ)#@-esA89!uoj_24Ug(Y6b_q#Vr;n6O z+duc8^rxN5HcKVu%djStXV0%%+i3HerM+d!q@aywK0f4}Zy)jGoA_s$x8fYFyhe*P z5AYv1zxVb>@XHB~*Ow|eYO4O;U8(g{YUV|ijV?VGI|XBoKh=nT@M3|()+p!8Tk_gO z6kdE#Wtf)wy*F*C+Rd8%hffxE`j{QP@kGPPVehpCF>4B@=wDb7Jw52#QjvyF%u}ki zp3B>M&+-`)r^!v{AKT2H2DNTApM69)kjwq(=k~5ozgJIL72>Ok2?lE3U7w z zz`r-p=FY-`4JRirj(zm9@ZI_QFL#PRU_0XSnU_bpg+EENc3!qwKG&PiuGhajuaM(9 z`Z)dm|^-u+%f?w!MIrX>Pv-o0NiMQN_b zM2?vmK|Fi5+xx7_6=<#UO03k|_Bv>*lt|a{lpy7`uS{aSik=FUE%r)Ene_6cWNTq*&|Z(-1A=Z&U?M#dX1jUQG>-TPJ&7sSx0F>eWL;I7y#4*wy(a&EJ$j>*wjqJLRmmjz z_%x=N=Zp_tG!$)Ib&Al*6N>se$Vq_zF~W3Y0Vtx zS8e(gwus((R_Yype7VQucr(&2W2hXUi0xGx?b>vx5>hr}y?R%v{@b zX+qT#@I{@V1v%N$l+<}cxvatTRaC(2*0A@^>9 zq@q$M&&x9w=5EKL`l@vI-#>VMB~wd6`D0P;HcDvo_5y(C*UvcozONH%zyI0QBa?qSoRJn8Wxl3Pk(gn?(j$B@RCS{ZD z&1*~A1iKQGZHsp9d(ETGt-BAF^9#g& zJbmn=VsF;Q#pm_(i#F^%RgpGlOJ>=b|7ZECU893Ilx7`^zxP*C^!T#8+a@{PZC4j0 zUd_C+I-*x=U9vFm-1uoTdel!!D>_ZINHlh{kWrNB65x|;`6{q1Z_Awfk#c^OuX#F_ z2#Bm@d%fDe?BZ*!iJ6aHx7V8%JbmVxQ6JpQX3@M&mWB8F!;7EF_c`Z0Ub@+739plf z-2V^pb6Bn>JLgWGdvN84tOXt)uAB;KKN>qN@8q_MPj9Mij=zhHzZ1;pRjF}4_2Y4+=b&Xf@UbZ}4{{Qku={v6cFYXy+AO7{K z-{yAAQbC$Cf{jl$g!* zLc{rY@S?pv{#*xdJ+!O7z1m{!iEnqrw=I4=fA#K4LB->%Hh=zSxm$Yuj>^|^mrtIV zA5&pbI;HxlQvUrv5Bk3z{1`F&grDn~f+z3U?2HyKDA;lO+dr|;r3I~Sd)96_r@t}t zS`Od*GL+Ypuz9d`ID>PE&L6|4)p3zMXwr54rp?aldbJ zzHZv3xKFpF>vr7!_s4Om&%1)@k1opP$)C65nAN^)R^x^3FH@dPI{r-LRH>#+PN2n& zN2UUOs-5cYo=1XRoDz9_k6$n`QM|~cf4?u-wc>`?!z!-Zr5j?W@4CAn#BO1X&7wHH zE%OAO;#?~}_#dCQPOWZI^JK=B2_ARth(~Q|LLxZdBQr~_BBUu z-MqZm{_Vw^^8{r7M+L;j+gY5mwc?&|`u)E;CF`&Ec--Y?JoNabmCk9ex@5BCnSv*_ tAN)`2&;L{Wd+$EIU+16x`17CfrBCa>O@Dv-F)%PNc)I$ztaD0e0st}18>9dL literal 0 HcmV?d00001 diff --git a/demos/2d/fog_of_war/icon.png.flags b/demos/2d/fog_of_war/icon.png.flags new file mode 100644 index 0000000000..dbef2209e8 --- /dev/null +++ b/demos/2d/fog_of_war/icon.png.flags @@ -0,0 +1 @@ +gen_mipmaps=true diff --git a/demos/2d/fog_of_war/tile_edit.scn b/demos/2d/fog_of_war/tile_edit.scn new file mode 100644 index 0000000000000000000000000000000000000000..aaca19d3701ca7a8bacf6fea2f340fcd6474c0d0 GIT binary patch literal 1443 zcmWFvc6Md}0RaYv**pvk-K-1@j0_A7j0}toYzYhuJPNE_0g1`ksVTw9sd=diybnwn z7+4hS65<*76gc>bQj7CTi;`3I^AdAY88{UL+2fN+^HOqBQxfFZij#{n3rh4G*ccg@ z6yz8<6qq?eQY%VIi&7Z`6u1=}xUKZ{({l3ji}VWe(jTzMFGz5ZXUtDekaZ|$;8HMU z$;nSn%ux_$GGO?n!0W*9fc>e1rb9l1l!6Qcy8<%dlvE=Z23`d|-uTSig8ZVA_=3ce3@JXoXnC+{RA$?oYV*GV$Ask ziOC9bj0_SFSan&7Q*+Yd4@f&?CfGH2vL>ZwWagzPq%aqy=9MHo;VCIf%qvdIFUr*~ z$S;1tCdgEjUy`WtfKi#DSmF1=Y>xQc)RM&bcm{5TTIRI;bOnV%roz(Hglnw91x1-9 zsfqp!B@6Q%=P5BUm82Fa&U5(1nxB?doLZ8=#hR9rSrDJ`fRT%#EWwhgEUifKIzw>+ zH$%n(Zb#Pyt^|M9-29Z%oJ55T2Y=S0)bz~!yu|JXF6Q{6)Z~VJ4s#O@E%=t;>i9Kr zrjsahS!z+SgDnHI!fD67jvF1WvnS{0<;5rGmnv#AFe^woFdUF#$Wz?)fJw?}rh}Bj zbI!8FqRhm+l41rq1p~)Z3}OoG2N;|r9FiOim>C!v>>cRX5N2$!cVKq% zacFi(al9fJAD^0%S(0BAUyxIpo|zY4T%yRyP^{SRpy3eWpy6Pk6z?G9z~{j1aE-Gd zvm!MozBn(jAVJfC!9mJ_nYk)IKR2PCxw<*P-a)|O0#j*m>H|hyhdmAw4ojHw(~1*z zu!|kwI=s83?XZKm19L)@Lk)w0LbQW`12=W)Z5xXm zR2@D!i8&}b9AZq#R8(NfOHNIY0r}j)LBffHp~9hhfoOxCgD6Ag0}fFK7ls@K7nNfS zMTw>d*K3_1WBg+ zqD+-F4_Ks~^O&mgQWw8uK6~bjt%J9_(1DrE#YO2!2}TYK4l>R`3Ni^BomVi%S0uYJ zS-BM^w7c^^WsqYmDpi$cO)V+O%u9dDF6%IrE4j3|BtJJku_(PbA=N}F(4;gG67#v!k^0cxf7p11=skS;OxO`Eqb?9>pa?3bT=UB0#jv>Dz&Y^;t zfx+RB1G9sLgP{Yv1A}7$1A}7917>E|;|~}a7zLaim>ZlOxLcne;BH_)AkWaEpv`!| z@d5W#7tRG!-Q_aAJz!05U~stOxXqoJshB}QL4;)i0|UeV1q=#Y2@DQ=jy4V_9T?oE zIB+{$b>MdS>A>#b>mck9=pcM_o1?yiu!FOM@B?NBhp7&49g^J>9l{+L9Q+-)p_u)F zc(N0hL%vg)gSF#)hjOP(2YyFM2X+QQg%pQ!2B8J)4%H6bjtd=}8AKJt9qQdbI(UOj zQ)duY5O|=y*`eQ&+2Oduaz}B8d0): + motion = get_collision_normal().slide(motion) + motion=move(motion) + slide_attempts-=1 + + +func _ready(): + # Initalization here + set_fixed_process(true) + pass + + diff --git a/demos/2d/fog_of_war/troll.png b/demos/2d/fog_of_war/troll.png new file mode 100644 index 0000000000000000000000000000000000000000..69f195d0341a794babffb7ee668461784eb2b7ba GIT binary patch literal 7246 zcmeAS@N?(olHy`uVBq!ia0y~yUi( z0|NtRfk$L90|U1(2s1Lwnj^u$z`$PO>FdgVk5f)uisie!oG1eWgJg+oM2T~LZf8G_-rN4|Ui!Yv)!%#n zM%k|1-I})2@sN{3cu$4z__x(P|CX-hmCv19PUr1;R#1Iv@5zbRZqL>{tGh)`q_OtR zIsW-o9h0u@XWJd*@zQ(g8`qr;^~Q0fzn>o8vgYUK_qA^>=Kp)!x_;L;eyh(l)t6E% zk{DQGtzQUf1TkjE+TEQP)X;Rk_R&FcaofL3yYD?||NH3eL@vL5zvTBnFyH_2xA6Ks z@2>a7Ez7IFC@L#6!}~(+k2l^)OBo~${+w{sI^wya;8!EBh;8hfnKlhq+fOHl#~DuM zJN8t6&$G4D|0@gZO@CbS^_W6gINQP&6$dUxO_nJttG@Jgdh&me*PmJq#swRr zizkQ+EzH!ff6BXEFII8sfgKk(jqeJX?qMx!DC;p0NigWT6%Zzsad<;pLUvkOTVngl z)|Od!6<)3P`*+>dU*mxLUWa=%4+3sCE?ARzKT=>uKzNU1RPuzWHY-iSMGs3Ih%%@+ zE^acbDQdHv!>3t0q-&Pe+gX=xZ1*j%`}z5FQL^gl+r07bXZO9l5yXAXU1nl-GGum_ZTq=O-lEUlZ~2O~ zi3}aqJ*)Z49?m(eaed3B`3vS4Y-V0lW^hdDe#YghRnpSm@0#yC;VZ}RxSQb~Q`_sc zPcI$|JNou$M+?)GFj>CLyOwC&es>=95=?c8Ia5tMyRUb?1Wy#-T^V$Lyh zPQ@?BPH~C947~JQTVTlP0+f%yF#cta*#bxj8T9vk+X#d*T zz4Mj}LzBWs`=XOexy{=r9^V_M8}eZ1$7ct6tC>B{3x96ERr8=L)8paIhXJ4C>x-ry z+uO55z4G5A)_ZZXL9wl8&YWO7y0Cj{0Mmi9H#2IUbk%;k)a-ljU8qN}cC5&*k9}*N z%z5^9>%I@d6K}72J2iRPzh?|A4jLV6w|?c#e!XAmk$Gc-jkaCEMz(K>H$IuK-}^J+ z@ht6S3$@#;5Bj&I))GT>_tGDxw)xzI>^7B8Qu=A?BYg4o*S$d;T zWu|L=h?SybpZ6zc$8$nAKKkh?F(|UIPSk%qZEsP5-G9b6kE)k&H(k)Km-(0UsY!nG z)?d?aKVPvh=_L1MLD8*GHx<3$)jEBS^Z6VOW&UeMQ}hK~x)v=ve=Ta;*2PB;zrB8> z_d(y(b~gRp8Jx8@{p0spSU>%LGe*0^`?22nOFbvJd_HkqV?4KUbr$nBomK$_O~o6D zY4Or$R|@pHT(nrd;|wpyf@dFpEag?7-EXsL?mM%EyC2=RVe=l=# zGfMbI#OWVox%6g*45@qS5TuT!DG(6+{wWt@`F4 zJ4LGM^m)0xb%j<|N*yt|Ya^vaR>}vQp2l=`nZQ1EjV_g0zOHNg`u{C+o7dLB?7yAq zxu#OXigmi#k56Q@`@Lvvsrde9RQYrAgQWV^5`DPc=1pUSe^a^>k#@^9BKQ7`GM zE<5dM`@DrO>}#r5>c=H3Dysv!-aehBR@<@SutYjnRP+zIgOP2ed}~h}t_X>KKF9mG zj@nMP1LrJ-UM@&j$#P9iN+>05*T%bZa_h9Dmzqy=o^zMiY5wI$C+?_n=kxD5cYE%% zIJ?54*K?K~oYi=7X#nFyc~7b5rkgG;*v40xX`$acTjW?&a_2)9h9vgD>BqiaS9b~* zQ(;LLPR@F}z*IYUcl@MzFJ@h;eN{c}!nu9tzP870_>o@xdEXqL1|?CGTRIyyZt^)M zF)e7Kf@5HCBd5kz*TCpiUT2S4BySad6Cu>$&|-8s>2J>e^qU`fn^F!<+qrIQ$vLeu z7JHt&j4h9^w-tV{l4L0^4XpiHt@U-!&#&RNA9k(2WuGDW=jr;sla?nQx-C6tS0S{d z<*km%Lv}mXh0AYkw%b#n&QN%*@uqLbLuV&0O-~Od!Nk`eOKP6YJL_lk^uF}=!>bi; zFfwdZ@Qi!v>L}|vPkbAbs)vWrm$=EFA{-TFEUf~9ayfm_e6|mM0{>LWaGkFd%tK zlvn$$r%O-1lb#!OB=*8?F|)m2+}Hi-y}4{xp2@m+nbt+~Lf96sQA_UGaI2s`_lGIN zdS(U#u}>E*n9eLc#uA_B^EPAECzXujyowy6tqW6fb)t`lNU{q!dMGx{Fucn5lF%@vNT2TT#+B+bXSgzmjf~U|72D%c}VoMDH$ra!Mg+f>*;#2BjmNPP=6T z*2-o*UU6v}t01F~ON;ldE-|64B?a}55AJ^V?(bLg&MUWTYCg0cm%mZ>eP;Fcy4w4x zcP~f3o*d5qYwCUj@oF#5RLQiR^H(h@Tez*Q>rR5rmb^?omBo?ITL11d_;BC;&N;X9 zm3sFxey#t`WMy;iY*MUrChzBzMGJdftxjCN9Dj4)JI~~+%xn8SJU=iuDyV3@|F0YO zcui8Sj4#(&7ne5@E(simCT?p#A$~(j&sV8({1@Zx%z!P|FvpXZfzr}CY|R$E*ZT9TwxoBq&h~Oz@3Xq@ird>ci&tICtE^qLb=%)XYmP6TSowdQ#nMe0 z%Ra{)jWd6EC(A+LQ{#`z$M>66T;DD&ExfL)rZc&FVK$2#C!^Gqp3TYbuUiuji)|7- zFwr4_r+w+Nlv}r7N?+|++Lv$EChC@~TN7XNe|vS@(yHyxgufnORySX!${Boh8^i7R zmQr4|eNoxJ4{umvZoYHXrJTa;d;TmqA;ZCv&ggh3zx?t2N-JjdsnyF*Xx;V}t?_qo z46+v3QP)>cv~^LnKkp9f$qz35XU@}p_lnInx3RFPeQdlJY?uEt zKY&5neci6yhq;rUY+bg>uIksjxBqz=irc@|+{xLqro?UP?9y1Vug~&Qy`<+J{ic6T z|H!gcvY&2Q20!wj?w>oaZk6M4{oZ(SwtM>L%ayZ^cX==*OepN}ik_GC%j7O!X5p#j zD_th4m;c$b?Lb-D1J6T$pR1MZ3y;2?qwuoD*zt-^`|QK}f0i-j&pWwqQ=!`5hDA|!>U&RO zsC%O9C-vkf)89qMzFD{{E67B0C{A?2W&&Bc`N zV4oI)fEjbS6>3_e*e@(~yLP@{-*Q7)qgS_*cH6sb7G2O`Bk}mdg_Cw_!ps*%^%z+W z7~EQQKPEs|SB>zO6prNMYG8Zzs18PMvP2n**2@pK;V^HTu4B zW*7&jM)BFy%xmhc|L$&G8#Hz4@5{T6)jBHFIj&FJFKnhP<|V)&GI^FqQ*#94*3Fl> zPx{9e-=6qo-}!lUzgvS6=4Dqt%Fnmju)cD^?QhQhC&Jc5L~Hx6>)lg)_|LiB*SFc3 zY_I=#bnea{?))-66Q74I5$+DukFWf*@bh-&ic36c4>M+4Z|1$Xf4}S5u!gU3jBEyX zPE7n({Ns&)Rqv^nkC*$0-_JUIX5!y)pZbj#JD+8$pHJ7Hawmg5N7j1Vu@^#9@w zzOa>+-zi{Ha#{JN^=;{GUaJdFf2@7O-c+mpO8dKi_+5*AX5aRT&n;1D_9zUD3O}f+ z&z3g%M}z5I|Dx6Ao2$e><(C$}ej~nAJw9pX#3Ni;DhjF(+=b2={>tpV_$!6^z~r~~ zR(t;>{GYT`d)X_4Z<0PKvev3A#q2gV8T4&kS@QKggN=5J-Qz2p!(ZQ)_;UZ6+suml z_wAg@=ih5#viQKld34h%?WAbd{Q z^>)_<=G-@bSbzGx%&`79fAOY$maBPU>l3cEFD|gqOeuM+6I+$iRaMK&t}G!?(DypZ zI)0Ur{+7x&|9Y*fo~!5ocoy*G!BykOOTBkn?6`8^+6EWxK#4S|bh#IapZ^F(7k885s{v3TaUg$uP5-^~%La`}GPlnO^p%+q2$z9pC$j?>G~WLZ8T% z(tt?@)eCroqitf17!wK$U#jo!zO2`wbZP2i�AeufB=d6=$FQ@N#)fu9dCk|3wLP zhSvX@&+b`se3IImJ7O)HwNxgwe6VS}Ww=CW!aR|^#XIXSf64hR+CH6&VSiKp4O^Rt z({XHKF;m3e-gxX4ojx;G!aMJrOSz5k%~{4LUrSwPT(qp+;LF{Vkiwa>iv3$^#MKto zPhZ5i-}J(-RsVMA&7QkqC5z+FKAU(4frEz}s~lFpb{3N}yUbbo*kH%k2Z#3CT3wZ5 z52_P7kh{b{qr2<#p$#GrR6Z=&nriX{xXw@QtTmtJAu*CR=N7-A+Dtr`|qo`a0$oMhO*>!1R5c57X*& z6Qmh7J!f5bY4O*!o1H4-Ra_xpwK7N#qlstrxFmni)p+&7bTGLQ27RuP6bS2nx8 zDBqjpuk!u6aL{vk0gL|~n`dWN{eIY9yw-b04#N{>r&)c5mpueDSd(SFT}6H{On{UU}f;#k%<~4l~^QQIfjzd*AxMDX||VxAA;9mnq=CM~7p+ zxmy0KS)Xf~(zM%(8JO9aY!}N~Ht#sI%5A;5!0+X=UZe_Jlx=BXQ;K&IYMeQ-r73CJ zlxu9f+;cpn3Ib2hn=$iu*ZQ+?>RN-?eI`8b6io1E=Kiv4Nc4EJ^ zbk6*>=O%_TRr#?q?-!yxNfL_C~vbGl(Hb zh#}3Nb2>}Vk9i7;9E&^MmdY+s2)^dGT`67^rZe%a((28p{NQBEAz`-D|eY$kM2obU>j(sA_5WQvQ6Nm+Q~z)$<-$ z>wo6MW$)>w@i$+ZCGbub|0UyM*Tgn;ZlAzH{ebHS#O>;4v8`TN<#af{T5;wd<3k5u z`_FMyuG%fvztKoaF+gaoLW*mGCg(9j$4*Q zYT~lz+P>$QyF2CG_FJ(rJ1bl#pE(k=-ahd--&%#1DM#i;GvVa zxmaveCy0whCN7*3(5atun)~(Dl22`0F74-i@TBqd?)=;Jp4^TKi8B;MCx%QoB)s98 zqsD>HEi>Y}R_>Nie%WFl@$Ad`O^Lra8MM#qJMo|SA9ZKbT?-MTS^YOMmX%ESyhA5e zqjt(H%P*|vPMR$WJjT5$A@SF}-k3}f_;e{DC^Dq&uhZ>cH%gY*rDPY(En7Fo_CnR+ zDLSOl2Nk`S5dDx;yX(>W{d?H5Ltc@7J=8caKV z`0llj?Pk9dCtg3E@Zko1+@v3NW?u;9PX6Kd}yLdkPvo{~-Eu|3@73HZp#qU?+uB5%J02CJ zOC9b^Jl^y2h`R(wuBmkL-8-MkzPGoDh_Osu7mZ2NZ z@?qWKx5uLUeYd|YF>bpy?b51cWg-h?+plmenLH`x0VgA)p^xcwQ)f@3xy!uPCfBAJ zFWoI4|KB|Q(w|y}d0&g?l>MKfShV>J&ss^Alc9bRxlii<9a(Q*pEl+1i@&pN=iHP! zu;H+eu_B{WT&A43+m&N07j5d3{qm?Jga2&%GC|L%yXSnTWrw+xEqUv2FP>tjz4E!S z_L2u>8=OU|G_p?zbwxP|%G7>~h_I#< z!wqc@@5ERyxf#}B9KE%2jk&;Gm1TY}7RQJEn5TXvYmXDxS>wyT+c$;w?U`^^HQfAv z(OaE&KbLuL-nemlNaVj)iIIOVelnPAZ)M%6zba7RRwT#$kBg%F{&NOTgS(>+kDT%7xIrQ+hTd&?Eak|vs`+gD#wyyhFcroNBQzcMVlz~Z$1K_X3 z$}RL4ex3en?Fs%E1r@cOqRY=c*`_5^b$jdT;?+wgR6RWK#r?a_zs#f^6ORTOS5+<+ z=AJ*rwoW7QB-8D^Oa(f<$vst>>hf3P848{`sef^@T=n+Z>iDX!cCq36XXf%-Y4`K* z+g6hEZP&Aq1!{|BvX@sk>b)^#cz0ZG-beYGC!Ocn6+dPQ_%T*U>;2j6_Z=}q_H9FZ d?BV~c-VaU$G~T=RgMop8!PC{xWt~$(69DOE(tZE{ literal 0 HcmV?d00001 diff --git a/demos/2d/fog_of_war/troll.scn b/demos/2d/fog_of_war/troll.scn new file mode 100644 index 0000000000000000000000000000000000000000..f5d87c363181f4cd96a61ec91051ba0bae6f9d55 GIT binary patch literal 1839 zcmWFvc6Md}0RaYvC43AF;_M6zj0_A7j0}toYzYhuJPNE_0g1`ksVTw9sd=diybnwn z7}yl-65<*76gc>bQj7CTi;`3I^AdAY8H5!Cg_BE*OY(E$i}Q2JQj6k~G82m#*cHTB zixN{ZON$eX*@}~kG7C!d8`u~bI2B|#1z9CR6i6OQW*pkxF0afF%{&cCpa>2DTuS=TQC|EEVFc>AQ zdB7^lWXO=PK-A#~k8@^Ga!zV+Mq)v#kxPQ3LpuYDg0TYw1G5541233?>T94uS~>5;pR9XXd5mCYEF-JLRWTD&#ZpDkyTt zXXX~<7nQ^pB$i|(x^k6e7H1}9=46&s>L+k9`6UVK zA213s6e|WXq$c?@6gz4&$0z5PD!4l?N#JKL);G{k;7B-_!090LfWe-TK~SL&WKCvz zdTLRk8GBA*Wol6|gNTAWL$cy?uFRCw`0~t>4E^E~M|DO9@dxbU4A}>r5;7mK7%7A@ zW~MygG-ON8NGwWBE>XyLXh|^SD$dN$)6Y#TO3%zo%)za4VK`95W9vG)Ny1W^Ax` zV0K7xFn7Lsz}Vq614Dv56GH<-0t07*eM7y!!-n~@9UYvR^M#tN9P}N`olF^mn+`fp zf66SYYU8rZA<^NGi!^t9d}>N&Nq$j$K~AYM8$-NvK4WUJ(uW7k8V{I)9K;-^I@mh~ z9I|%^c3?Ol-X`2A=`htn`~g>=gP4Pr(kzEa2R;X8$8yes%!<^U_~N|8f`kGG1_vnz z=A>B;-84QOV3>=sfq8w@%9T*w} z9Jm>b8#)|rIVd|YGgqZ07A1HvGcf#eb`Wp~VM@y{OJHYaU@&oV5O%!ET$Y(y?s~Z4 ztAnb;W#_35iVlkzQ!*9fneviT6J$Uk<=`OUpukuWuRL{uXoH@EC`07~4pB!ZhZky^ zY#I6K`FV*s4_RcK)g9#6Q}fC)i}LewRc1b5k$0Hv`poUf17?N?f0sXax!kGFTwU4rJZguRpq5F4rM-j=8UaFyUYG3484p+r7B&FsU>d9j`TPsotlrI#njq+$>)`T$;erE$gWVIJFD%JLsi}D?UmO%%SXKHQ`W&9QaJ~}G zbrn@3hl>u_tdrfsPcVcpocd2%WcS&(zcVFqi?l#AP-Mz}e+hMYUx4VFY_XB1I zcLfJ#huseP4)Yxt9MT<}9p*a-JIr@rcbM-W?NIL^4W{QiNPCGpEI+u`@veiq%LNB> z25E&D2X+P-1$GB#2H6Gd?i(DgGsr9OJ6v~6c2H+jWN5hmfSJMjumiKhW{3L@(;XNb z^dE?Cc2s`AzL`N;!Nx(DK?S7u0W$-GssfJ#vqQGS?FY))4&NQZA2Q1y6lYLV2zSV4 zP*-4g*vz1z!0w>VpsB#_=+2;}!0vdQL3;r^gN_2b<9r6)1?&uZ3hWN%4EhV$84MKI n9iKB8E?{RcTENa=ynx+-!6Duu+B3T8C_AWj3