From c79e16f394a027db7cc5b6d1ea1e27da0b24bbb6 Mon Sep 17 00:00:00 2001 From: xolatile Date: Wed, 16 Jul 2025 23:08:07 +0200 Subject: [PATCH] Data files, broken... --- data/background.png | Bin 0 -> 1047 bytes data/background_decal.png | Bin 0 -> 1987 bytes data/background_detail.png | Bin 0 -> 165433 bytes data/blendbrush.cfg | 31 + data/crosshair.png | Bin 0 -> 754 bytes data/crosshair_hit.png | Bin 0 -> 735 bytes data/cube.png | Bin 0 -> 17170 bytes data/cube2badge.png | Bin 0 -> 10235 bytes data/default_map_models.cfg | 412 +++++ data/default_map_settings.cfg | 135 ++ data/defaults.cfg | 248 +++ data/font.cfg | 3 + data/game_fps.cfg | 73 + data/glsl.cfg | 2802 +++++++++++++++++++++++++++++++++ data/guicursor.png | Bin 0 -> 3052 bytes data/guioverlay.png | Bin 0 -> 751 bytes data/guiskin.png | Bin 0 -> 14702 bytes data/guislider.png | Bin 0 -> 1339 bytes data/heightmap.cfg | 138 ++ data/hit.png | Bin 0 -> 252 bytes data/keymap.cfg | 133 ++ data/leftdown.png | Bin 0 -> 48666 bytes data/license.txt | 11 + data/loading_bar.png | Bin 0 -> 1001 bytes data/loading_frame.png | Bin 0 -> 433 bytes data/logo.png | Bin 0 -> 33151 bytes data/logo_1024.png | Bin 0 -> 73538 bytes data/mapshot_frame.png | Bin 0 -> 751 bytes data/menus.cfg | 2020 ++++++++++++++++++++++++ data/rightup.png | Bin 0 -> 50967 bytes data/sounds.cfg | 57 + data/stdedit.cfg | 349 ++++ data/stdlib.cfg | 59 + data/teammate.png | Bin 0 -> 1450 bytes 34 files changed, 6471 insertions(+) create mode 100755 data/background.png create mode 100755 data/background_decal.png create mode 100755 data/background_detail.png create mode 100644 data/blendbrush.cfg create mode 100644 data/crosshair.png create mode 100644 data/crosshair_hit.png create mode 100755 data/cube.png create mode 100644 data/cube2badge.png create mode 100644 data/default_map_models.cfg create mode 100644 data/default_map_settings.cfg create mode 100644 data/defaults.cfg create mode 100644 data/font.cfg create mode 100644 data/game_fps.cfg create mode 100644 data/glsl.cfg create mode 100644 data/guicursor.png create mode 100755 data/guioverlay.png create mode 100644 data/guiskin.png create mode 100755 data/guislider.png create mode 100644 data/heightmap.cfg create mode 100644 data/hit.png create mode 100644 data/keymap.cfg create mode 100644 data/leftdown.png create mode 100644 data/license.txt create mode 100755 data/loading_bar.png create mode 100755 data/loading_frame.png create mode 100755 data/logo.png create mode 100755 data/logo_1024.png create mode 100755 data/mapshot_frame.png create mode 100644 data/menus.cfg create mode 100644 data/rightup.png create mode 100644 data/sounds.cfg create mode 100644 data/stdedit.cfg create mode 100644 data/stdlib.cfg create mode 100644 data/teammate.png diff --git a/data/background.png b/data/background.png new file mode 100755 index 0000000000000000000000000000000000000000..23477b2ffab60344e6013f01421c0f62647da0c4 GIT binary patch literal 1047 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&6|H(?D8gCb z5n0T@z%2~Ij105pNB{-dOFVsD*`Khm@)|HIA2av>6q3yhi70W-&&^HED*~rZKkJxf#Ld%!GoYKTy85}Sb4q9e0PL=T$^ZZW literal 0 HcmV?d00001 diff --git a/data/background_decal.png b/data/background_decal.png new file mode 100755 index 0000000000000000000000000000000000000000..fc772b1d2b6ca9c5eae9e3d29d1258e61eb7ebc6 GIT binary patch literal 1987 zcmV;!2R!(RP)&$j;8p zo^$3qf3p)6a!gLA6Sr^Q7Hn^AZ3O_-*46?53+7*=*De$k`FuWZ<#PGXypzY{fyd*?+xv}1BiwHHe`CedDI#YJkr$0iM5Q7W z2m}gh)pM!@uh%jGYrEij$s%o4pH(#(z1I(2=3jxhr@>ti}n$^rl+U#vzT(B@9}u> z_U&5`LU8QZv5bWehr{^w>sQ8zDH!O-LpDA~=MzF`wKr_o0F6cityT-YUXKL}7Vz?x zZHyN}wMy#B0>IeV82o-e7>2>BRjZ&@t5H-`^zVc!mFS9p`t%7iGc$Pn_%S9YC!x`3 zFgiNQwHK`819sEuS`< z4OXiaPNy^LEKzciBbLaB+4-M8fAHYJ1N8Ltz~yqGv$GS;&CSs3_0VWE31f6R9p=xU zFRI9R>hJH*U7f&sbiPZ7*$Wpgz;3sry}cb4iv@Lcbto?{7ky8%<1?GhAcVl-aHM^A zwx+IO;lFX?M!^9!H8mI?AIH?x6sD)A5sgL>jYiSi+na&}m&=7GPo6-l)k3G!;memV z`1v^9?B9R1W zR##WUU@-97w9=b3ifxEwlGJ?v{vGe$y~EVh6l^wI&cisvFdUlGB~7vwwR-hxw6wI~ z{rmSQDJkLF^?E&S-n=O|uB4;{FJ8O=02CJ&r$hrGhnOi!2_f)$y=euMl}ivpP+ndR zqtTca=I73xOSnID=uq1E)oL}CE?t^2KmGmvaJ$`DxpJlSD3MJ}6 z75K-GANc(FGYBDQX=&l@w{G1!?q0}T7A{-}v)PQ%(NO@vnl)<@d_X!g%X#Tc2*JR> z0N%WL1Cz-lswCFQi8-BKC2`Sa(w_NJyLsta)X^l9wexl`6R!fXpFZgt};E4J;xfddK9PFLxP)f5Fw zd<<^izFiQeLc;j{e(qVkGyU-4gXp{K>gv)aWr|gXeDEQJV9}yQl9kxq-JQ~wE>94u zFS@$A;B-2rhuW;|0D#?Y$J(`Pv(DI($!fLoj$zAUF=}pZPT62l90r#!UrrH*z3=So zOz7L&+lz^b3CS>}wFf{o5lXki8=w8LboJ_0T)cQuR>8$4QU?znq^AtI3J8Tlc=+%k z$K?L~`z0qUu~0|_A{A)?r9HdI$v%Z?gOr&FE@5JGVL_;EBgHe&hm<=C@lk7%7B z#3PKRyVwsGwNNW{?T=;`=1`?e6YIUtb@tUAqQC2={S? z-3C*#s7a7H+jBosgco{VRaHe*;ZhZ#ku!8sGftd1fnYF*yLa!(<|BE#UX@%I&^Vg@{P}Z4qfw|- zD*XKU6R}tfkw^sLa2R7_V+aO=3BpGr5zNlc;?=8Hu-ok*gkZ~-Eu6V%wOUkFRZ%%J zlzDQHCB1z45~og`LRVK8tX3ZrnbSBOX0ceP9654C@cE-hkEqxGSw%Rv+pWj}>1Z^X)+8n-Ca`124l3^}h<}zy4VQQB z+@UfTjkGy03ZNxCjqFxYb5PQOQWIWjr%0P}V)KQnkes2EJ$_Os|0bahd8z&(Ux>)7 z;CyD0D@6EwK5BxilrWFl+FGiAdQLv2KBuU)wH02k7e1d)vZ>6a&?}4Ne4v#}{{S6v V=XMi0&q)9P002ovPDHLkV1j46xsLz< literal 0 HcmV?d00001 diff --git a/data/background_detail.png b/data/background_detail.png new file mode 100755 index 0000000000000000000000000000000000000000..5c0dbe634e18c329c2c4c2687f632f0d568105f2 GIT binary patch literal 165433 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

E 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 literal 0 HcmV?d00001 diff --git a/data/blendbrush.cfg b/data/blendbrush.cfg new file mode 100644 index 0000000..506193c --- /dev/null +++ b/data/blendbrush.cfg @@ -0,0 +1,31 @@ +////////////////////////////////////////////////////////////////// +//Texture blending + +addblendbrush "Circle 8px soft" "packages/blendbrush/circle_8_soft.png" +addblendbrush "Circle 8px hard" "packages/blendbrush/circle_8_hard.png" +addblendbrush "Circle 8px solid" "packages/blendbrush/circle_8_solid.png" +addblendbrush "Circle 16px soft" "packages/blendbrush/circle_16_soft.png" +addblendbrush "Circle 16px hard" "packages/blendbrush/circle_16_hard.png" +addblendbrush "Circle 16px solid" "packages/blendbrush/circle_16_solid.png" +addblendbrush "Circle 32px soft" "packages/blendbrush/circle_32_soft.png" +addblendbrush "Circle 32px hard" "packages/blendbrush/circle_32_hard.png" +addblendbrush "Circle 32px solid" "packages/blendbrush/circle_32_solid.png" +addblendbrush "Circle 64px soft" "packages/blendbrush/circle_64_soft.png" +addblendbrush "Circle 64px hard" "packages/blendbrush/circle_64_hard.png" +addblendbrush "Circle 64px solid" "packages/blendbrush/circle_64_solid.png" +addblendbrush "Circle 128px soft" "packages/blendbrush/circle_128_soft.png" +addblendbrush "Circle 128px hard" "packages/blendbrush/circle_128_hard.png" +addblendbrush "Circle 128px solid" "packages/blendbrush/circle_128_solid.png" +addblendbrush "Noise 64px" "packages/blendbrush/noise_64.png" +addblendbrush "Noise 128px" "packages/blendbrush/noise_128.png" +addblendbrush "Square 16px hard" "packages/blendbrush/square_16_hard.png" +addblendbrush "Square 16px solid" "packages/blendbrush/square_16_solid.png" +addblendbrush "Square 32px hard" "packages/blendbrush/square_32_hard.png" +addblendbrush "Square 32px solid" "packages/blendbrush/square_32_solid.png" +addblendbrush "Square 64px hard" "packages/blendbrush/square_64_hard.png" +addblendbrush "Square 64px solid" "packages/blendbrush/square_64_solid.png" +addblendbrush "Gradient 16px" "packages/blendbrush/gradient_16.png" +addblendbrush "Gradient 32px" "packages/blendbrush/gradient_32.png" +addblendbrush "Gradient 64px" "packages/blendbrush/gradient_64.png" +addblendbrush "Gradient 128px" "packages/blendbrush/gradient_128.png" + diff --git a/data/crosshair.png b/data/crosshair.png new file mode 100644 index 0000000000000000000000000000000000000000..178b861a578e51d570579b89df3c4da8260d50ff GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;g=CK)Uj~LMH3o);76yi2K%s^g z3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tWb%7py;uO4R_t~l9y^I=A2(?!1Q zxtfvwb0$ojJkjUL_P)MZU9zHE`+r|~^L(qDmu-XM(gbhEzPSt;Hv&H$v%c#iaVSc8 z>Avp7qr3K}u^#&Ef(3K$vY+0% zXVRlDtM=ybzR6Vk?ii81Qm-*_Zxrrxxd zFai`N9}*fORJ%hrMX3JP58dSNmmxK|qxAM2U<|94xJHzuB$lLFB^RXvDF!10BU4=i zQ(YtD5JN*NLlY}QBW(i%D+7b@MS0FB8glbfGSez?Yf$@t?LSb12Hb{{%-q!ClEmBs cbUkKPM#d0JVxMb!0rfC=y85}Sb4q9e08S(+&Hw-a literal 0 HcmV?d00001 diff --git a/data/crosshair_hit.png b/data/crosshair_hit.png new file mode 100644 index 0000000000000000000000000000000000000000..ff50c948aeef0f951a3735d6962c573d996fefd7 GIT binary patch literal 735 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jPK-BC>eK@{Ea{HEjtmSN z`?>!lvI6-E$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a z5n0T@z%2~Ij105pNB{-dOFVsD*QjYr`)`c`Q6j+Q71aX z8@o(c-|San!G zFZ@8s{f5e!jhF7t^jh0+MaTN>O?}q`k)47GEE0@v4Nz)X#ifb!760y6QsCLZd@C+m zyQ-d3djV^i?O(qyt5z>K!eznq{=l;9+XVM!xp-J>NUb~Qy^l#jd*7qR>I7|-73)}X znSME56kxPsk`LmWweP{B!;e%sIR4K2de}oR=}*hQy_Z^kZsgzPGPC-|NyF8a1*(QS z8E@w({hqTcv}~g9cIUFU4=oK(Etju3mS4!5RK$F*Qgc7|GS{rb4*ZWUmTR7$C-sMc z)3Ts9sc7$C%eqZb-tA{ym=0;?Gw)%_FFKIfn3wZ`Q>f^H)KQW8CDZ!CK2E->bGY=K zV$$xp8N2J7R`;)bWjV9!^7LCfi$rg(nf>rj(IcyaA*y+qzk68TD7QaOuXs0Sho6CI zP~k<@RBipOmNf^=c0Dkd*b=kD&G4pP!gB^|&Reku@|vg1@NY2L>162WJ^ApZCpy08 zEB7hZ7IkhIxAwD#5C2k$fRkiZK<7+(`KZ0x_(W1&ouwQeB;&?-#51b P(-ecJtDnm{r-UW|Oq($; literal 0 HcmV?d00001 diff --git a/data/cube.png b/data/cube.png new file mode 100755 index 0000000000000000000000000000000000000000..97f52d6b1e730912cc52ca13436d0360b2900ef2 GIT binary patch literal 17170 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 literal 0 HcmV?d00001 diff --git a/data/cube2badge.png b/data/cube2badge.png new file mode 100644 index 0000000000000000000000000000000000000000..978058e7940ac323a21662c49471fb1d1ffd3ba8 GIT binary patch literal 10235 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�bTCvTEOUH`RT`{1R2@DDyw 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.cfg", +// which you can use to override the settings in this file. + +exec "data/default_map_models.cfg" + +// the skybox for this map: +if (strcmp $skybox "") [ + skybox "skyboxes/remus/sky01" +] + +materialreset +texture water "golgotha/water2.jpg" // water surface +texture 1 "textures/waterfall.jpg" // waterfall +texture 1 "textures/watern.jpg" // water normals +texture 1 "textures/waterdudv.jpg" // water distortion +texture 1 "textures/waterfalln.jpg" // waterfall normals +texture 1 "textures/waterfalldudv.jpg" // waterfall distortion + +texture lava "dg/floor_lava2.jpg" 0 0 0 2 // lava surface +texture 1 "dg/floor_lava2.jpg" 0 0 0 2 // falling lava + +// texture definitions for the map: +texturereset // starts the texture slot/index at 0 + setshader stdworld // use default world shader unless specified otherwise + texture 0 "textures/sky.png" // dummy sky texture + texture 0 "textures/default.png" // default geometry texture + + texture 0 "aard/aardograss_1.jpg" + autograss "textures/grass_aard.png" + texture 0 "ik2k/ik_floor_brick128a.jpg" + texture 0 "ik2k/ik_floor_wood128b.jpg" + texture 0 "ik2k/ik_ground_cobbles128.jpg" + texture 0 "ik2k/ik_brick_3216d.jpg" + texture 0 "ik2k/ik_brick_6464c.jpg" + + exec "packages/dg/package.cfg" + exec "packages/tech1soc/package.cfg" + exec "packages/ik2k/package.cfg" + exec "packages/ikbase/package.cfg" + exec "packages/payne/package.cfg" + exec "packages/than_ind/package.cfg" + exec "packages/jf1/package.cfg" + + // misc textures (mine/schwenz/some tech1soc) + setshader stdworld + texture 0 "aard/aardfdry256_1.jpg" + texture 0 "tech1soc/spring3.jpg" + texture 0 "tech1soc/sqrlig02wb.jpg" + texture 0 "tech1soc/sqrlig03bc.jpg" + texture 0 "tech1soc/zdetlig01bb.jpg" + texture 0 "tech1soc/zdetlig02bb.jpg" + texture 0 "aard/aardmbr16_2.jpg" + texture 0 "tech1soc/zdetlig04bb.jpg" + texture 0 "tech1soc/zdet_trim2a.jpg" + texture 0 "aard/aardmmet32_1.jpg" + texture 0 "tech1soc/zdet_trim5b.jpg" + texture 0 "schwenz/dt_tile_check.01.jpg" + + exec "packages/egyptsoc/package.cfg" + exec "packages/rorschach/package2.cfg" + exec "packages/subverse/package.cfg" + exec "packages/g_pack/package.cfg" + + // missing jf & tech1soc textures + setshader stdworld + texture 0 "jf1/jfsquare.jpg" + texture 0 "jf1/jfyellow.jpg" + texture 0 "tech1soc/jp11a.jpg" + texture 0 "tech1soc/flr_tmtl_drk.jpg" + + exec "packages/lunaran/package.cfg" + exec "packages/gibbie/package.cfg" + exec "packages/philipk/package.cfg" + exec "packages/gor/package.cfg" + exec "packages/aftas/package.cfg" + exec "packages/mitaman/package.cfg" + exec "packages/noctua/package.cfg" + exec "packages/loopix/package.cfg" + exec "packages/g_pack/package2.cfg" + + // Misc textures + setshader stdworld + texture 0 "textures/nieb/rock01.jpg" + setshader bumpspecmapworld + setshaderparam "specscale" 0.25 0.25 0.25 + texture 0 "ikbase/specialbrick.jpg" + texture n "ikbase/specialbrick_normal.jpg" + + exec "packages/painkillah/package.cfg" + exec "packages/tomek/package.cfg" + exec "packages/textures/nieb/package.cfg" + exec "packages/trak5/package.cfg" + exec "packages/textures/nieb/garden/package.cfg" + exec "packages/textures/medieval_soc/package.cfg" + exec "packages/textures/terrain_soc/package.cfg" + exec "packages/textures/nieb/autumn/package.cfg" + exec "packages/textures/nieb/clone/package.cfg" + exec "packages/textures/nieb/suite/package.cfg" + + // Blikje bier + exec "packages/blikjebier/akaritori/package2.cfg" + exec "packages/blikjebier/concrete/package.cfg" + exec "packages/blikjebier/metal/package.cfg" + + setshader stdworld + texture 0 "blikjebier/ground/ground1.jpg" + texture 0 "blikjebier/ground/ground2.jpg" + texture 0 "blikjebier/ground/ground3.jpg" + texture 0 "blikjebier/ground/ground4.jpg" + texture 0 "blikjebier/ground/ground5.jpg" + texture 0 "blikjebier/ground/g1mm.jpg" + + texture 0 "blikjebier/snow/clear_snow.jpg" + texture 0 "blikjebier/snow/dirty_snow.jpg" + + exec "packages/egyptsoc/package2.cfg" + exec "packages/textures/fatum/package.cfg" + exec "packages/textures/philipk/pk02/package.cfg" + exec "packages/textures/yves_allaire/ex/package.cfg" + exec "packages/dg/package2.cfg" + + setshader stdworld + texture 0 "makke/dirt01.jpg" + texture 0 "makke/dirt02.jpg" + texture 0 "makke/platten.jpg" + texture 0 "makke/platten_var1.jpg" + texture 0 "textures/nieb/bonepile.jpg" + + exec "packages/textures/swatllama/package.cfg" + + // for cfgs that don't set shaders... + setshader stdworld diff --git a/data/defaults.cfg b/data/defaults.cfg new file mode 100644 index 0000000..41b978f --- /dev/null +++ b/data/defaults.cfg @@ -0,0 +1,248 @@ +// these default settings get executed whenever "config.cfg" is not available +// do not modify anything below, instead change settings in game, or add to autoexec.cfg + +name "unnamed" + +invmouse 0 // 1 for flightsim mode +sensitivity 3 // similar number to quake +fov 100 // 90 is default in other games + +musicvol 60 // set higher if you want (max 255) +soundvol 255 // sounds average volume is actually set per sound, average 100 + +gamma 100 // set to your liking, 100 = default + +fullbrightmodels 60 // make player models a bit easier to see + +// console + +consize 5 // console is 5 lines +miniconsize 5 // mini-console is 5 lines +miniconwidth 40 // mini-console is 40% of screen width +fullconsize 75 // full console is 75% of screen height +miniconfilter 0x300 // display chat and team chat in mini-console +confilter (&~ 0x2FFF $miniconfilter) // don't display other player frags or mini-console stuff in console +fullconfilter 0xFFFF // display all messages in full console + +// WASD + +bind W forward +bind A left +bind S backward +bind D right + +bind UP "forward" +bind DOWN "backward" +bind RIGHT "right" +bind LEFT "left" + +// old style weapon binds +//bind 0 "weapon 0 1 2" +//bind 1 "weapon 1 2 4" +//bind 2 "weapon 2 1 4" +//bind 3 "weapon 3 4 2" +//bind 4 "weapon 4 3 2" +//bind 5 "weapon 5 3 1" +//bind 6 "weapon 6 2 4" + +// new style weapon binds +bind 0 "setweapon FI" +bind 1 "setweapon SG" +bind 2 "setweapon CG" +bind 3 "setweapon RL" +bind 4 "setweapon RI" +bind 5 "setweapon GL" +bind 6 "setweapon PI" +bind 7 "setweapon FI" + +bind SPACE "jump" +bind MOUSE2 "jump" +bind MOUSE1 "attack" +bind MOUSE3 "weapon" +specbind MOUSE1 "nextfollow" +specbind MOUSE2 "nextfollow -1" +specbind MOUSE3 "follow" +specbind SPACE "follow" + +bind R dropflag + +bind TAB "showscores" + +bind T "saycommand" +bind Y "sayteamcommand" +bind BACKQUOTE "saycommand /" +bind SLASH "saycommand /" + +bind I taunt + +bind E edittoggle +bind LCTRL "allowspedit" +bind RCTRL "allowspedit" + +bind KP_MINUS "conskip 5" +bind KP_PLUS "conskip -1000" + +bindvarquiet F1 paused +bindvarquiet PAUSE paused + +bind F11 "toggleconsole" +bind F12 "screenshot" + +bind INSERT "addbot" +bind DELETE "delbot" + +hudgun 1 + +////////////////////////////////// +// universal scrollwheel + modifier commands: + +defaultmodifier = 0 +modifier = $defaultmodifier +domodifier = [ modifier = $arg1; onrelease [ modifier = $defaultmodifier ] ] + +universaldelta = [ + do [delta_@(if $editing [ result edit ] [ result game ])_@modifier @arg1] +] + +bind MOUSE4 [ universaldelta 1 ] // also used for editing, see below +bind MOUSE5 [ universaldelta -1 ] + +////////////////////////////////// + +delta_game_0 = [ if (= $arg1 1) [ weapon 2 3 5 4 1 6 0 ] [ weapon 4 1 6 2 3 5 0 ] ] + +//zfov = 120 +//delta_game_1 = [ +// zfov = (+ $zfov (* $arg1 (div $zfov -5))) +// if (< $zfov 10) [ zfov = 10 ] +// if (> $zfov 120) [ zfov = 120 ] +// fov $zfov +//] + +//bind G [ domodifier 1 ] + +bind G [ togglezoom ] +bind Z [ togglezoom ] + +////////////////////////////////// +// Sauerbraten Editing related bindings +// found in autoexec.cfg in your sauerbraten directory + +editbind SPACE [ cancelsel ] +editbind MOUSE1 [ if $blendpaintmode [paintblendmap] [editdrag] ] +editbind MOUSE3 [ selcorners ] +editbind MOUSE2 [ if $blendpaintmode [rotateblendbrush] [editextend] ] + +editbind J [ gotosel ] + +editbind KP_ENTER [ entselect insel ] +editbind N [ selentfindall ] + +editbind LSHIFT [ editcut ] +editbindmod LCTRL [ passthrough ] +editbindmod LALT [ hmapedit ] +editbind DELETE [ editdel ] + +editbind T [ saycommand ] +editbind X [ editflip ] +editbind C [ editcopy ] +editbind V [ editpaste ] +editbind Z [ undo; passthroughsel 0] +editbind U [ undo; passthroughsel 0] +editbind I [ redo ] +editbind H [ if $hmapedit [ editface 1 -1 ] [ hmapedit 1 ] ] + +editbind O [ domodifier 15 ] // vSlot: offset H +editbind P [ domodifier 16 ] // vSlot: offset V + +editbindvar 5 hidehud +editbindvar 6 entselsnap +editbindvar 7 outline +editbindvar 8 wireframe +bindvar 9 thirdperson allowthirdperson +editbindvar 0 allfaces +editbind K calclight +editbindvar L fullbright +editbindvar M showmat + +editbind PERIOD selentedit + +editbind F2 showtexgui +editbind F3 [if (cleargui 1) [] [showentgui]] +editbind F4 [if (cleargui 1) [] [showgui mapmodels]] +editbind F5 savemap +editbind F6 [ notepad (mapcfgname) ] +editbind F9 [echo (getseltex) : (gettexname (getseltex))] // echo texture info + +// commands below are used with scroll wheel (and universaldelta). +// if you have no scroll wheel or don't want to use it, +// you can either change the binds of universaldelta +// ex: bind MOUSE4 [ universaldelta 1 ] +// bind MOUSE5 [ universaldelta -1 ] +// can be changed to: +// bind PAGEUP [ universaldelta 1 ] +// bind PAGEDOWN [ universaldelta -1 ] +// so that the PAGEUP and PAGEDOWN key act just like a scroll wheel +// +// or you can rebind all the commands to seperate keys +// ex: bind T [ domodifier 6 ] +// can be changed to: +// bind HOME [ edittex 1 ] +// bind END [ edittex -1 ] + + +editbind G [ domodifier 1 ] // domodifier 1 -> executes delta_edit_1 +editbind F [ domodifier 2 ] // etc... +editbind Q [ domodifier 3 ] +editbind R [ domodifier 4 ] +editbind Y [ domodifier 6 ] +editbind B [ domodifier 9 ] +editbind COMMA [ domodifier 10; onrelease entautoview ] + +delta_edit_0 = [ + if $blendpaintmode [ + scrollblendbrush $arg1 + ] [ + editfacewentpush $arg1 1 // Fill and Empty cube + ] +] +delta_edit_1 = [ nodebug [ gridpower (+ $arg1 $gridpower) ] ] +delta_edit_2 = [ editfacewentpush $arg1 0 ] // push face/corners selected +delta_edit_3 = [ editfacewentpush $arg1 2 ] // push corner pointed at by cursor +delta_edit_4 = [ if $blendpaintmode [rotateblendbrush $arg1] [editrotate $arg1] ] // rotate 90 degrees +delta_edit_5 = [ entproperty 0 $arg1 ] // and the others +delta_edit_6 = [ edittex $arg1 ] // change textures +delta_edit_9 = [ selectbrush $arg1 ] // change heightmap brushes +delta_edit_10 = [ entautoview $arg1 ] + +editbind 1 [ domodifier 11 ] +editbind 2 [ domodifier 12 ] +editbind 3 [ domodifier 13 ] +editbind 4 [ domodifier 14 ] + +delta_edit_11 = [ entproperty 0 (* $arg1 $multiplier) ] +delta_edit_12 = [ entproperty 1 (* $arg1 $multiplier) ] +delta_edit_13 = [ entproperty 2 (* $arg1 $multiplier) ] +delta_edit_14 = [ entproperty 3 (* $arg1 $multiplier) ] + +delta_edit_15 = [ vdelta [voffset (* $arg1 $multiplier2) 0] ] // vSlot: offset H +delta_edit_16 = [ vdelta [voffset 0 (* $arg1 $multiplier2)] ] // vSlot: offset V +delta_edit_17 = [ vdelta [vrotate $arg1] ] // vSlot: rotate +delta_edit_18 = [ vdelta [vscale (if (< $arg1 0) 0.5 2)] ] // vSlot: scale + +//editbind LALT [multiplier = 10;onrelease [multiplier = 1]] +//editbind RALT [multiplier2 = 32;onrelease [multiplier2 = 16]] +multiplier = 1 +multiplier2 = 16 + +//Blendmap Painting +editbind KP0 [setblendpaintmode 0] +editbind KP1 [setblendpaintmode 1] +editbind KP2 [setblendpaintmode 2] +editbind KP3 [setblendpaintmode 3] +editbind KP4 [setblendpaintmode 4] +editbind KP5 [setblendpaintmode 5] + +editbind KP8 [scrollblendbrush -1] +editbind KP9 [scrollblendbrush 1] + diff --git a/data/font.cfg b/data/font.cfg new file mode 100644 index 0000000..64723ea --- /dev/null +++ b/data/font.cfg @@ -0,0 +1,3 @@ +exec "packages/fonts/default.cfg" +exec "packages/hud/digit_font.cfg" + diff --git a/data/game_fps.cfg b/data/game_fps.cfg new file mode 100644 index 0000000..87fdcd3 --- /dev/null +++ b/data/game_fps.cfg @@ -0,0 +1,73 @@ +// fps specific cfg stuff goes here + +togglezoom = [ zoom (if (= $zoom 1) -1 1) ] +sayteamcommand = [inputcommand (if (>= $numargs 1) [result $arg1] [result ""]) [sayteam $commandbuf] "[team]"] + +mapcomplete = [ complete $arg1 packages/base ogz ] +mapcomplete map + +modenames = "ffa coop teamplay insta instateam effic efficteam tac tacteam capture regencapture ctf instactf protect instaprotect hold instahold efficctf efficprotect effichold collect instacollect efficcollect" +loop i (listlen $modenames) [ + mname = (at $modenames $i) + alias $mname [ if (mode @i) [if (> $numargs 0) [map $arg1] [map]] ] + mapcomplete $mname +] + +spmodenames = "sp dmsp" +loop i (listlen $spmodenames) [ + mname = (at $spmodenames $i) + alias $mname [ if (mode (- @i 3)) [if (> $numargs 0) [map $arg1] [map]] ] + mapcomplete $mname +] + +complete importcube packages/cube cgz + +demo = [ stopdemo; if (mode -1) [if (> $numargs 0) [map $arg1] [map]] ] +varcomplete demo demodir dmo + +speditlock = 1 +allowspedit = [ speditlock = 0; onrelease [speditlock = 1] ] + +allowedittoggle = [ + if (&& (m_sp (getmode)) $speditlock) [ + error "you must hold" (prettylist (searchbinds "allowspedit") "or") "to toggle editing in single player modes" + result 0 + ] [ + result 1 + ] +] + +playermodelnum = 5 + +playermodeldir0 = "mrfixit" +playermodelicon0 = "mrfixit" +playermodelname0 = "Mr. Fixit" +playermodelstory0 = [Which orc do you choose when the mission calls for an all-purpose wrecking machine? Who do you call when the odds are stacked against you? Mr. Fixit, that's who. Gifted with the ability to perform deconstructive surgery with any weapon, this orc gets the job done fast and with extreme prejudice.] + +playermodeldir1 = "snoutx10k" +playermodelicon1 = "snoutx10k" +playermodelname1 = "IronSnout X10K" +playermodelstory1 = [IronSnout X10K is a hybrid model of the IronSnout series. Bred in the bowels of a top secret underground facility, this walking fragging machine is for one purpose: to annihilate the opposition. Part pig, part machine, IronSnout X10K knows no fear and fears no fragger.] + +playermodeldir2 = "ogro2" +playermodelicon2 = "ogro" +playermodelname2 = "Ogro" +playermodelstory2 = [Ogro is smaller than a normal ogre, but just as fat and only slightly less stupid. As opposed to common belief, he is not an evil creature, only killing as is absolutely necessary.] + +playermodeldir3 = "inky" +playermodelicon3 = "inky" +playermodelname3 = "Inky" +playermodelstory3 = [Inky is the aspiring younger sibling of an infamous transdimensional celebrity. Often teased as being only the "Lesser Evil", Inky searches the battlefields for infamy of his own, claiming it one fragger at a time.] + +playermodeldir4 = "captaincannon" +playermodelicon4 = "captaincannon" +playermodelname4 = "Captain Cannon" +playermodelstory4 = [Cannon Jones dared to imbibe the old imported beer can that had languished at the bottom of his refrigerator. Unbeknownst to Cannon, it had been bombarded with stray gamma radiation. After some serious indigestion, the mild-mannered Cannon Jones became the mighty Captain Cannon! Captain Cannon now has only one known weakness: his overbearingly righteous sense of justice.] + +playermodeldir = [getalias (concatword "playermodeldir" (if (> $numargs 0) [result $arg1] [result $playermodel]))] +playermodelicon = [getalias (concatword "playermodelicon" (if (> $numargs 0) [result $arg1] [result $playermodel]))] +playermodelname = [getalias (concatword "playermodelname" (if (> $numargs 0) [result $arg1] [result $playermodel]))] +playermodelstory = [getalias (concatword "playermodelstory" (if (> $numargs 0) [result $arg1] [result $playermodel]))] + +playsong = [ music (concatword "fanatic/" (+ 1 (rnd 8)) ".ogg") playsong ] + diff --git a/data/glsl.cfg b/data/glsl.cfg new file mode 100644 index 0000000..5726392 --- /dev/null +++ b/data/glsl.cfg @@ -0,0 +1,2802 @@ +// standard shader definitions + +lazyshader = [ + defershader $arg1 $arg2 [ + shader @arg1 @arg2 [@@arg3] [@@arg4] + ] +] + +lmcoordscale = (divf 1 32767) + +shader 0 "null" [ + attribute vec4 vvertex; + void main(void) + { + gl_Position = vvertex; + } +] [ + void main(void) + { + gl_FragColor = vec4(1.0, 0.0, 1.0, 1.0); + } +] + +/////////////////////////////////////////////////// +// +// used for rendering to the HUD +// +/////////////////////////////////////////////////// + +screentexcoord = [ + result [ + uniform vec4 screentexcoord@arg1; + #define vtexcoord@arg1 (vvertex.xy * screentexcoord@arg1.xy + screentexcoord@arg1.zw) + ] +] + +shader 0 "hud" [ + attribute vec4 vvertex, vcolor; + attribute vec2 vtexcoord0; + uniform mat4 hudmatrix; + varying vec2 texcoord0; + varying vec4 color; + void main(void) + { + gl_Position = hudmatrix * vvertex; + texcoord0 = vtexcoord0; + color = vcolor; + } +] [ + varying vec2 texcoord0; + varying vec4 color; + uniform sampler2D tex0; + void main(void) + { + gl_FragColor = color * texture2D(tex0, texcoord0); + } +] + +shader 0 "hudnotexture" [ + attribute vec4 vvertex, vcolor; + uniform mat4 hudmatrix; + varying vec4 color; + void main(void) + { + gl_Position = hudmatrix * vvertex; + color = vcolor; + } +] [ + varying vec4 color; + void main(void) + { + gl_FragColor = color; + } +] + +shader 0 "hudrgb" [ + attribute vec4 vvertex, vcolor; + attribute vec2 vtexcoord0; + uniform mat4 hudmatrix; + varying vec2 texcoord0; + varying vec4 color; + void main(void) + { + gl_Position = hudmatrix * vvertex; + texcoord0 = vtexcoord0; + color = vcolor; + } +] [ + varying vec2 texcoord0; + varying vec4 color; + uniform sampler2D tex0; + void main(void) + { + gl_FragColor.rgb = color.rgb * texture2D(tex0, texcoord0).rgb; + gl_FragColor.a = color.a; + } +] + +/////////////////////////////////////////////////// +// +// miscellaneous default shaders +// +/////////////////////////////////////////////////// + +shader 0 "texture" [ + attribute vec4 vvertex, vcolor; + attribute vec2 vtexcoord0; + uniform mat4 camprojmatrix; + varying vec2 texcoord0; + varying vec4 color; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + texcoord0 = vtexcoord0; + color = vcolor; + } +] [ + varying vec2 texcoord0; + varying vec4 color; + uniform sampler2D tex0; + void main(void) + { + gl_FragColor = color * texture2D(tex0, texcoord0); + } +] + +shader 0 "notexture" [ + attribute vec4 vvertex, vcolor; + uniform mat4 camprojmatrix; + varying vec4 color; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + color = vcolor; + } +] [ + varying vec4 color; + void main(void) + { + gl_FragColor = color; + } +] + +shader 0 "cubemap" [ + attribute vec4 vvertex, vcolor; + attribute vec3 vtexcoord0; + varying vec3 texcoord0; + varying vec4 color; + void main(void) + { + gl_Position = vvertex; + texcoord0 = vtexcoord0; + color = vcolor; + } +] [ + varying vec3 texcoord0; + varying vec4 color; + uniform samplerCube tex0; + void main(void) + { + gl_FragColor = color * textureCube(tex0, texcoord0); + } +] + +////////////////////////////////////////////////////////////////////// +// +// fogged variants of default shaders +// +////////////////////////////////////////////////////////////////////// + +shader 0 "fogged" [ + //:fog + attribute vec4 vvertex, vcolor; + attribute vec2 vtexcoord0; + uniform mat4 camprojmatrix; + varying vec2 texcoord0; + varying vec4 color; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + texcoord0 = vtexcoord0; + color = vcolor; + } +] [ + varying vec2 texcoord0; + varying vec4 color; + uniform sampler2D tex0; + void main(void) + { + gl_FragColor = color * texture2D(tex0, texcoord0); + } +] + +shader 0 "foggednotexture" [ + //:fog + attribute vec4 vvertex, vcolor; + uniform mat4 camprojmatrix; + varying vec4 color; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + color = vcolor; + } +] [ + varying vec4 color; + void main(void) + { + gl_FragColor = color; + } +] + +shader 0 "fogoverlay" [ + attribute vec4 vvertex, vcolor; + varying vec4 color; + void main(void) + { + gl_Position = vvertex; + color = vcolor; + } +] [ + varying vec4 color; + void main(void) + { + gl_FragColor = color; + } +] + +////////////////////////////////////////////////////////////////////// +// +// for filling the z-buffer only (i.e. multi-pass rendering, OQ) +// +////////////////////////////////////////////////////////////////////// + +shader 0 "nocolor" [ + attribute vec4 vvertex; + uniform mat4 camprojmatrix; + void main() { gl_Position = camprojmatrix * vvertex; } +] [ + void main() {} +] + +shader 0 "bbquery" [ + attribute vec4 vvertex; + uniform mat4 camprojmatrix; + uniform vec3 bborigin, bbsize; + void main() { gl_Position = camprojmatrix * vec4(bborigin + vvertex.xyz*bbsize, vvertex.w); } +] [ + void main() {} +] + +//////////////////////////////////////////////////////// +// +// default lightmapped world shader.. does texcoord gen +// +/////////////////////////////////////////////////////// + +worldshader = [ + stype = 0 + if (>= (strstr $arg1 "env") 0) [stype = (+ $stype 2)] + shader $stype $arg1 [ + //:fog + //:water + @(if (>= $numargs 5) [result $arg5]) + attribute vec4 vvertex; + attribute vec3 vnormal; + attribute vec2 vtexcoord0, vtexcoord1; + uniform mat4 camprojmatrix; + uniform vec2 texgenscroll; + varying vec2 texcoord0, texcoord1; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + texcoord0 = vtexcoord0 + texgenscroll; + texcoord1 = vtexcoord1 * @lmcoordscale; + + @arg2 + + //:shadowmap + //:dynlight + } + ] [ + @(if (>= $numargs 5) [result $arg5]) + @(if (>= $numargs 6) [result $arg6]) + uniform vec4 colorparams; + varying vec2 texcoord0, texcoord1; + uniform sampler2D diffusemap, lightmap; + void main(void) + { + @(? (>= (strstr $arg1 "alpha") 0) [ + vec4 diffuse = texture2D(diffusemap, texcoord0); + diffuse.rgb *= diffuse.a; + //:fog fogcolor * diffuse.a + ] [ + vec4 diffuse = vec4(texture2D(diffusemap, texcoord0).rgb, 1.0); + ]) + vec4 lm = texture2D(lightmap, texcoord1); + + //:shadowmap lm + //:dynlight lm + + @arg3 + + diffuse *= colorparams; + @(if (|| (< $numargs 4) [=s $arg4 []]) [result [gl_FragColor = diffuse * lm;]] [result $arg4]) + } + ] +] + +glareworldshader = [ + variantshader (if (< (strstr $arg1 "env") 0) 4 6) $arg1 4 [ + //:fog + @(if (>= $numargs 4) [result $arg4]) + attribute vec4 vvertex; + attribute vec3 vnormal; + attribute vec2 vtexcoord0, vtexcoord1; + uniform mat4 camprojmatrix; + uniform vec2 texgenscroll; + varying vec2 texcoord0, texcoord1; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + texcoord0 = vtexcoord0 + texgenscroll; + texcoord1 = vtexcoord1 * @lmcoordscale; + + @arg2 + } + ] [ + @(if (>= $numargs 4) [result $arg4]) + @(if (>= $numargs 5) [result $arg5]) + uniform vec4 colorparams; + varying vec2 texcoord0, texcoord1; + void main(void) + { + @arg3 + } + ] +] + +worldshader "stdworld" [] [] +worldshader "alphaworld" [] [] + +defershader 0 "decalworld" [ + worldshader "decalworld" [] [ + vec4 diffuse2 = texture2D(decal, texcoord0); + diffuse.rgb = mix(diffuse.rgb, diffuse2.rgb, diffuse2.a); + ] [] [] [uniform sampler2D decal;] +] + +glowshader = [ + defershader 0 $arg1 [ + defuniformparam "glowcolor" 1 1 1 // glow color + worldshader @arg1 [] [] [ + vec3 glow = texture2D(glowmap, texcoord0).rgb; + glow *= glowcolor.rgb; + gl_FragColor = diffuse*lm + vec4(glow, 0.0); + ] [] [uniform sampler2D glowmap;] + glareworldshader @arg1 [] [ + vec3 glow = texture2D(glowmap, texcoord0).rgb; + glow *= glowcolor.rgb; + float k = max(glow.r, max(glow.g, glow.b)); + gl_FragColor.rgb = min(k*k*32.0, 1.0) * glow; + gl_FragColor.a = + //:variantoverride texture2D(lightmap, texcoord1).a + colorparams.a + ; + ] [] [ + uniform sampler2D glowmap; + //:variant uniform sampler2D lightmap; + ] + ] +] +glowshader "glowworld" +glowshader "glowalphaworld" + +defershader 0 "pulseworld" [ + defuniformparam "pulsespeed" 1 // pulse frequency (Hz) + worldshader "pulseworld" [ + pulse = abs(fract(millis * pulsespeed.x)*2.0 - 1.0); + ] [ + vec3 diffuse2 = texture2D(decal, texcoord0).rgb; + diffuse.rgb = mix(diffuse.rgb, diffuse2, pulse); + ] [] [uniform float millis; varying float pulse;] [uniform sampler2D decal;] +] + +pulseglowshader = [ + defershader 0 $arg1 [ + defuniformparam "glowcolor" 1 1 1 // glow color + defuniformparam "pulseglowspeed" 1 // pulse frequency (Hz) + defuniformparam "pulseglowcolor" 0 0 0 // pulse glow color + worldshader @arg1 [ + pulse = mix(glowcolor.rgb, pulseglowcolor.rgb, abs(fract(millis * pulseglowspeed.x)*2.0 - 1.0)); + ] [] [ + vec3 glow = texture2D(glowmap, texcoord0).rgb; + gl_FragColor = diffuse*lm + vec4(glow*pulse, 0.0); + ] [uniform float millis; varying vec3 pulse;] [uniform sampler2D glowmap;] + glareworldshader @arg1 [ + pulse = mix(glowcolor.rgb, pulseglowcolor.rgb, abs(fract(millis * pulseglowspeed.x)*2.0 - 1.0)); + ] [ + vec3 glow = texture2D(glowmap, texcoord0).rgb; + glow *= pulse; + float k = max(glow.r, max(glow.g, glow.b)); + gl_FragColor.rgb = min(k*k*32.0, 1.0) * glow; + gl_FragColor.a = + //:variantoverride texture2D(lightmap, texcoord1).a + colorparams.a + ; + ] [uniform float millis; varying vec3 pulse;] [ + uniform sampler2D glowmap; + //:variant uniform sampler2D lightmap; + ] + ] +] +pulseglowshader "pulseglowworld" +pulseglowshader "pulseglowalphaworld" + +shader 0 "fogworld" [ + //:water + attribute vec4 vvertex; + uniform mat4 camprojmatrix; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + } +] [ + uniform vec3 fogcolor; + void main(void) + { + gl_FragColor = vec4(fogcolor, 1.0); + } +] + +shader 0 "noglareworld" [ + attribute vec4 vvertex; + uniform mat4 camprojmatrix; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + } +] [ + void main(void) + { + gl_FragColor = vec4(0.0); + } +] + +shader 0 "noglareblendworld" [ + attribute vec4 vvertex; + attribute vec2 vtexcoord1; + uniform mat4 camprojmatrix; + varying vec2 texcoord0; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + texcoord0 = vtexcoord1 * @lmcoordscale; + } +] [ + varying vec2 texcoord0; + uniform sampler2D lightmap; + void main(void) + { + gl_FragColor.rgb = vec3(0.0); + gl_FragColor.a = texture2D(lightmap, texcoord0).a; + } +] + +shader 0 "noglarealphaworld" [ + attribute vec4 vvertex; + uniform mat4 camprojmatrix; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + } +] [ + uniform vec4 colorparams; + uniform sampler2D lightmap; + void main(void) + { + gl_FragColor.rgb = vec3(0.0); + gl_FragColor.a = colorparams.a; + } +] + +defershader 2 "envworld" [ + defuniformparam "envscale" 0.2 0.2 0.2 // reflectivity + worldshader "envworld" [ + normal = vnormal; + camvec = camera - vvertex.xyz; + ] [ + vec3 reflect = textureCube(envmap, 2.0*normal*dot(camvec, normal) - camvec).rgb; + ] [ + diffuse *= lm; + gl_FragColor.rgb = mix(diffuse.rgb, reflect, envscale.rgb); + gl_FragColor.a = diffuse.a; + ] [uniform vec3 camera; varying vec3 normal, camvec;] [uniform samplerCube envmap;] + + defuniformparam "envscale" 0.2 0.2 0.2 // reflectivity + worldshader "envworldfast" [ + vec3 camvec = camera - vvertex.xyz; + rvec = 2.0*vnormal*dot(camvec, vnormal) - camvec; + ] [ + vec3 reflect = textureCube(envmap, rvec).rgb; + ] [ + diffuse *= lm; + gl_FragColor.rgb = mix(diffuse.rgb, reflect, envscale.rgb); + gl_FragColor.a = diffuse.a; + ] [uniform vec3 camera; varying vec3 rvec;] [uniform samplerCube envmap;] + + defuniformparam "envscale" 0.2 0.2 0.2 // reflectivity + worldshader "envworldalt" [] [] + + altshader envworld envworldalt + fastshader envworld envworldfast 2 + fastshader envworld envworldalt 1 +] + +shader 0 "depthfxworld" [ + attribute vec4 vvertex; + uniform mat4 camprojmatrix; + uniform vec4 depthscale, depthoffsets; + varying vec4 depthranges; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + depthranges = depthoffsets + gl_Position.w*depthscale; + } +] [ + varying vec4 depthranges; + void main(void) + { + gl_FragColor = depthranges; + } +] + +shader 0 depthfxsplitworld [ + attribute vec4 vvertex; + uniform mat4 camprojmatrix; + uniform vec4 depthscale, depthoffsets; + varying vec4 depthranges; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + depthranges = depthoffsets + gl_Position.w*depthscale; + } +] [ + varying vec4 depthranges; + void main(void) + { + vec4 ranges = vec4(depthranges.x, fract(depthranges.yzw)); + ranges.xy -= ranges.yz*vec2(0.00390625, 0.00390625); + gl_FragColor = ranges; + } +] + +// bumptype: +// e -> reserve envmap texture slot +// o -> orthonormalize +// t -> tangent space cam +// r -> envmap reflection +// R -> modulate envmap reflection with spec map +// s -> spec +// S -> spec map +// p -> parallax +// P -> steep parallax (7 steps) +// g -> glow +// G -> pulse glow +// i -> glare intensity +// a -> alpha map + +btopt = [ >= (strstr $bumptype $arg1) 0 ] + +bumpvariantshader = [ + bumptype = $arg2 + stype = (? (btopt "e") 3 1) + if (! (btopt "i")) [ + if (btopt "G") [ + defuniformparam "glowcolor" 1 1 1 // glow color + defuniformparam "pulseglowspeed" 1 // pulse frequency (Hz) + defuniformparam "pulseglowcolor" 0 0 0 // pulse glow color + ] [if (btopt "g") [ + defuniformparam "glowcolor" 1 1 1 // glow color + ]] + if (btopt "S") [ + defuniformparam "specscale" 6 6 6 // spec map multiplier + ] [if (btopt "s") [ + defuniformparam "specscale" 1 1 1 // spec multiplier + ]] + if (|| (btopt "p") (btopt "P")) [ + defuniformparam "parallaxscale" 0.06 -0.03 // parallax scaling + ] + if (btopt "R") [ + defuniformparam "envscale" 1 1 1 // reflectivity map multiplier + ] [if (btopt "r") [ + defuniformparam "envscale" 0.2 0.2 0.2 // reflectivity + ]] + ] [ + if (btopt "s") [stype = (+ $stype 8)] + ] + variantshader $stype $arg1 (? (btopt "i") 4 -1) [ + //:fog + attribute vec4 vvertex; + attribute vec3 vnormal; + attribute vec2 vtexcoord0, vtexcoord1; + @(? (btopt "o") [attribute vec4 vtangent;]) + uniform mat4 camprojmatrix; + uniform vec2 texgenscroll; + varying vec2 texcoord0, texcoord1; + @(if (|| (btopt "t") (btopt "r")) [result [uniform vec3 camera; varying vec3 camvec;]]) + @(if (btopt "G") [result [uniform float millis; varying float pulse;]]) + @(if (btopt "r") [result [varying mat3 world;]]) + void main(void) + { + gl_Position = camprojmatrix * vvertex; + texcoord0 = vtexcoord0 + texgenscroll; + texcoord1 = vtexcoord1 * @lmcoordscale; + + @(if (btopt "o") [result [ + vec3 bitangent = cross(vnormal, vtangent.xyz) * vtangent.w; + @@(if (btopt "t") [result [ + // trans eye vector into TS + vec3 camobj = camera - vvertex.xyz; + camvec = vec3(dot(camobj, vtangent.xyz), dot(camobj, bitangent), dot(camobj, vnormal)); + ]]) + @@(if (btopt "r") [result [ + @@(if (! (btopt "t")) [result [ + camvec = camera - vvertex.xyz; + ]]) + // calculate tangent -> world transform + world = mat3(vtangent.xyz, bitangent, vnormal); + ]]) + ]]) + + @(if (btopt "G") [result [ + pulse = abs(fract(millis*pulseglowspeed.x)*2.0 - 1.0); + ]]) + + @(if (|| (! (btopt "i")) (btopt "s")) [result [ + //:dynlight + ]]) + @(if (! (btopt "i")) [result [ + //:shadowmap + //:water + ]]) + } + ] [ + uniform vec4 colorparams; + varying vec2 texcoord0, texcoord1; + uniform sampler2D diffusemap, lmcolor, lmdir; + @(if (|| (! (btopt "i")) (btopt "s") (btopt "p") (btopt "P")) [result [uniform sampler2D normalmap;]]) + @(if (|| (btopt "t") (btopt "r")) [result [varying vec3 camvec;]]) + @(if (btopt "g") [result [uniform sampler2D glowmap;]]) + @(if (btopt "G") [result [varying float pulse;]]) + @(if (btopt "r") [result [uniform samplerCube envmap; varying mat3 world;]]) + @(if (|| (! (btopt "i")) (btopt "s")) [result [uniform vec4 ambient;]]) + void main(void) + { + @(if (|| (! (btopt "i")) (btopt "s")) [result [ + vec4 lmc = texture2D(lmcolor, texcoord1); + gl_FragColor.a = colorparams.a * lmc.a; + vec3 lmlv = texture2D(lmdir, texcoord1).rgb*2.0 - 1.0; + ]]) + @(if (btopt "t") [result [vec3 camdir = normalize(camvec);]]) + @(if (btopt "p") [result [ + float height = texture2D(normalmap, texcoord0).a; + vec2 dtc = texcoord0 + camdir.xy*(height*parallaxscale.x + parallaxscale.y); + ]]) + @(if (btopt "P") [result [ + const float step = -1.0/7.0; + vec3 duv = vec3((step*parallaxscale.x/camdir.z)*camdir.xy, step); + vec3 htc = vec3(texcoord0 + duv.xy*parallaxscale.y, 1.0); + vec4 height = texture2D(normalmap, htc.xy); + @@(loopconcat i 7 [concatword [ + htc += height.w < htc.z ? duv : vec3(0.0); + height = texture2D(normalmap, htc.xy); + ]]) + #define dtc htc.xy + #define bump height.xyz + ]]) + @(if (|| (btopt "p") (btopt "P")) [] [result [#define dtc texcoord0]]) + + @(if (|| (! (btopt "i")) (btopt "S") (btopt "a")) [result [ + vec4 diffuse = texture2D(diffusemap, dtc); + @(if (&& (btopt "a") (! (btopt "S"))) [result [ + #define alpha diffuse.a + ]]) + ]]) + @(if (! (btopt "i")) [result [ + diffuse.rgb *= colorparams.rgb; + ]]) + @(if (|| (! (btopt "i")) (btopt "s") (btopt "a")) [result [ + @(if (! (btopt "P")) [ + if (&& (btopt "a") (btopt "S")) [result [ + vec4 normal = texture2D(normalmap, dtc); + #define alpha normal.a + #define bump normal.rgb + ]] [result [ + vec3 bump = texture2D(normalmap, dtc).rgb; + ]] + ]) + bump = bump*2.0 - 1.0; + ]]) + + @(if (btopt "s") [result [ + vec3 halfangle = normalize(camdir + lmlv); + float spec = pow(clamp(dot(halfangle, bump), 0.0, 1.0), @(? (btopt "i") "128.0" "32.0")); + @(if (btopt "i") [result [spec = min(spec*64.0, 1.0);]]) + @(if (btopt "S") [result [spec *= diffuse.a;]]) + @(if (btopt "i") [result [ + @(? (btopt "S") "diffuse.rgb" "vec3 diffuse") = specscale.xyz*spec; + ]] [result [ + diffuse.rgb += specscale.xyz*spec; + ]]) + ]]) + + @(if (|| (! (btopt "i")) (btopt "s")) [result [ + lmc.rgb = max(lmc.rgb*clamp(dot(lmlv, bump), 0.0, 1.0), ambient.xyz); + @(if (btopt "i") [result [ + //:dynlight lmc + + @(? (btopt "g") "diffuse.rgb" "gl_FragColor.rgb") = diffuse.rgb * lmc.rgb; + ]] [result [ + //:shadowmap lmc + //:dynlight lmc + + @(? (|| (btopt "g") (btopt "r")) "diffuse.rgb" "gl_FragColor.rgb") = diffuse.rgb * lmc.rgb; + ]]) + ]]) + + @(if (btopt "r") [result [ + vec3 rvec; + @(if (btopt "t") [result [ + vec3 rvects = 2.0*bump*dot(camvec, bump) - camvec; + rvec = world * rvects; + ]] [result [ + vec3 bumpw = world * bump; + rvec = 2.0*bumpw*dot(camvec, bumpw) - camvec; + ]]) + vec3 reflect = textureCube(envmap, rvec).rgb; + @@(if (btopt "R") [result [ + vec3 rmod = envscale.xyz*diffuse.a; + ]] [result [ + #define rmod envscale.xyz + ]]) + @(? (btopt "g") "diffuse.rgb" "gl_FragColor.rgb") = mix(diffuse.rgb, reflect, rmod); + ]]) + + @(if (btopt "a") [result [ + @(? (btopt "g") "diffuse.rgb" "gl_FragColor.rgb") *= alpha; + ]]) + + @(if (btopt "g") [result [ + vec3 glow = texture2D(glowmap, dtc).rgb; + @@(if (btopt "G") [result [ + vec3 pulsecol = mix(glowcolor.xyz, pulseglowcolor.xyz, pulse); + ]]) + @@(if (btopt "i") [result [ + glow *= @(? (btopt "G") "pulsecol" "glowcolor.xyz"); + float k = max(glow.r, max(glow.g, glow.b)); + k = min(k*k*32.0, 1.0); + @(if (btopt "s") [result [ + gl_FragColor.rgb = glow*k + diffuse.rgb; + ]] [result [ + gl_FragColor.rgb = glow*k; + gl_FragColor.a = + //:variantoverride texture2D(lmcolor, texcoord1).a + colorparams.a + ; + ]]) + ]] [result [ + gl_FragColor.rgb = glow * @(? (btopt "G") "pulsecol" "glowcolor.xyz") + diffuse.rgb; + ]]) + ]]) + + @(if (btopt "a") [result [ + gl_FragColor.a *= alpha; + //:fog fogcolor * alpha + ]]) + } + ] +] + +bumpshader = [ + defershader (? (>= (strstr $arg2 "e") 0) 3 1) $arg1 [ + bumpvariantshader @arg1 @arg2 + if (|| (btopt "g") (btopt "s")) [ + bumpvariantshader @@arg1 (strreplace (concatword @@arg2 "i") "r") + ] + ] +] + +bumpshader "bumpworld" "" +bumpshader "bumpspecworld" "ots" +fastshader bumpspecworld bumpworld 2 +altshader bumpspecworld bumpworld +bumpshader "bumpspecmapworld" "otsS" +fastshader bumpspecmapworld bumpworld 2 +altshader bumpspecmapworld bumpworld + +bumpshader "bumpalphaworld" "a" +bumpshader "bumpspecalphaworld" "otsa" +fastshader bumpspecalphaworld bumpalphaworld 1 +altshader bumpspecalphaworld bumpalphaworld +bumpshader "bumpspecmapalphaworld" "otsSa" +fastshader bumpspecmapalphaworld bumpalphaworld 1 +altshader bumpspecmapalphaworld bumpalphaworld + +bumpshader "bumpglowworld" "g" +bumpshader "bumpspecglowworld" "otsg" +altshader bumpspecglowworld bumpglowworld +bumpshader "bumpspecmapglowworld" "otsSg" +fastshader bumpspecmapglowworld bumpglowworld 2 +altshader bumpspecmapglowworld bumpglowworld + +bumpshader "bumppulseglowworld" "gG" +bumpshader "bumpspecpulseglowworld" "otsgG" +altshader bumpspecpulseglowworld bumppulseglowworld +bumpshader "bumpspecmappulseglowworld" "otsSgG" +fastshader bumpspecmappulseglowworld bumppulseglowworld 2 +altshader bumpspecmappulseglowworld bumppulseglowworld + +bumpshader "bumpparallaxworld" "pot" +fastshader bumpparallaxworld bumpworld 1 +altshader bumpparallaxworld bumpworld +bumpshader "bumpspecparallaxworld" "pots" +fastshader bumpspecparallaxworld bumpparallaxworld 2 +fastshader bumpspecparallaxworld bumpworld 1 +altshader bumpspecparallaxworld bumpworld +bumpshader "bumpspecmapparallaxworld" "potsS" +fastshader bumpspecmapparallaxworld bumpparallaxworld 2 +fastshader bumpspecmapparallaxworld bumpworld 1 +altshader bumpspecmapparallaxworld bumpworld + +bumpshader "bumpparallaxglowworld" "potg" +fastshader bumpparallaxglowworld bumpglowworld 1 +altshader bumpparallaxglowworld bumpglowworld +bumpshader "bumpspecparallaxglowworld" "potsg" +fastshader bumpspecparallaxglowworld bumpparallaxglowworld 2 +fastshader bumpspecparallaxglowworld bumpglowworld 1 +altshader bumpspecparallaxglowworld bumpglowworld +bumpshader "bumpspecmapparallaxglowworld" "potsSg" +fastshader bumpspecmapparallaxglowworld bumpparallaxglowworld 2 +fastshader bumpspecmapparallaxglowworld bumpglowworld 1 +altshader bumpspecmapparallaxglowworld bumpglowworld + +bumpshader "bumpparallaxpulseglowworld" "potgG" +fastshader bumpparallaxpulseglowworld bumppulseglowworld 1 +altshader bumpparallaxpulseglowworld bumppulseglowworld +bumpshader "bumpspecparallaxpulseglowworld" "potsgG" +fastshader bumpspecparallaxpulseglowworld bumpparallaxpulseglowworld 2 +fastshader bumpspecparallaxpulseglowworld bumppulseglowworld 1 +altshader bumpspecparallaxpulseglowworld bumppulseglowworld +bumpshader "bumpspecmapparallaxpulseglowworld" "potsSgG" +fastshader bumpspecmapparallaxpulseglowworld bumpparallaxpulseglowworld 2 +fastshader bumpspecmapparallaxpulseglowworld bumppulseglowworld 1 +altshader bumpspecmapparallaxpulseglowworld bumppulseglowworld + +bumpshader "bumpenvworldalt" "e" +bumpshader "bumpenvworld" "eor" +altshader bumpenvworld bumpenvworldalt +fastshader bumpenvworld bumpenvworldalt 2 +bumpshader "bumpenvspecworld" "eotsr" +altshader bumpenvspecworld bumpenvworldalt +fastshader bumpenvspecworld bumpenvworldalt 2 +bumpshader "bumpenvspecmapworld" "eotsSrR" +altshader bumpenvspecmapworld bumpenvworldalt +fastshader bumpenvspecmapworld bumpenvworldalt 2 + +bumpshader "bumpenvglowworldalt" "eg" +bumpshader "bumpenvglowworld" "eorg" +altshader bumpenvglowworld bumpenvglowworldalt +fastshader bumpenvglowworld bumpenvglowworldalt 2 +bumpshader "bumpenvspecglowworld" "eotsrg" +altshader bumpenvspecglowworld bumpenvglowworldalt +fastshader bumpenvspecglowworld bumpenvglowworldalt 2 +bumpshader "bumpenvspecmapglowworld" "eotsSrRg" +altshader bumpenvspecmapglowworld bumpenvglowworldalt +fastshader bumpenvspecmapglowworld bumpenvglowworldalt 2 + +bumpshader "bumpenvpulseglowworldalt" "egG" +bumpshader "bumpenvpulseglowworld" "eorgG" +altshader bumpenvpulseglowworld bumpenvpulseglowworldalt +fastshader bumpenvpulseglowworld bumpenvpulseglowworldalt 2 +bumpshader "bumpenvspecpulseglowworld" "eotsrgG" +altshader bumpenvspecpulseglowworld bumpenvpulseglowworldalt +fastshader bumpenvspecpulseglowworld bumpenvpulseglowworldalt 2 +bumpshader "bumpenvspecmappulseglowworld" "eotsSrRgG" +altshader bumpenvspecmappulseglowworld bumpenvpulseglowworldalt +fastshader bumpenvspecmappulseglowworld bumpenvpulseglowworldalt 2 + +bumpshader "bumpenvparallaxworldalt" "epot" +altshader bumpenvparallaxworldalt bumpenvworldalt +bumpshader "bumpenvparallaxworld" "epotr" +altshader bumpenvparallaxworld bumpenvparallaxworldalt +fastshader bumpenvparallaxworld bumpenvparallaxworldalt 2 +fastshader bumpenvparallaxworld bumpenvworldalt 1 +bumpshader "bumpenvspecparallaxworld" "epotsr" +altshader bumpenvspecparallaxworld bumpenvparallaxworldalt +fastshader bumpenvspecparallaxworld bumpenvparallaxworldalt 2 +fastshader bumpenvspecparallaxworld bumpenvworldalt 1 +bumpshader "bumpenvspecmapparallaxworld" "epotsSrR" +altshader bumpenvspecmapparallaxworld bumpenvparallaxworldalt +fastshader bumpenvspecmapparallaxworld bumpenvparallaxworldalt 2 +fastshader bumpenvspecmapparallaxworld bumpenvworldalt 1 + +bumpshader "bumpenvparallaxglowworldalt" "epotg" +altshader bumpenvparallaxglowworldalt bumpenvglowworldalt +bumpshader "bumpenvparallaxglowworld" "epotrg" +altshader bumpenvparallaxglowworld bumpenvparallaxglowworldalt +fastshader bumpenvparallaxglowworld bumpenvparallaxglowworldalt 2 +fastshader bumpenvparallaxglowworld bumpenvglowworldalt 1 +bumpshader "bumpenvspecparallaxglowworld" "epotsrg" +altshader bumpenvspecparallaxglowworld bumpenvparallaxglowworldalt +fastshader bumpenvspecparallaxglowworld bumpenvparallaxglowworldalt 2 +fastshader bumpenvspecparallaxglowworld bumpenvglowworldalt 1 +bumpshader "bumpenvspecmapparallaxglowworld" "epotsSrRg" +altshader bumpenvspecmapparallaxglowworld bumpenvparallaxglowworldalt +fastshader bumpenvspecmapparallaxglowworld bumpenvparallaxglowworldalt 2 +fastshader bumpenvspecmapparallaxglowworld bumpenvglowworldalt 1 + +bumpshader "bumpenvparallaxpulseglowworldalt" "epotgG" +altshader bumpenvparallaxpulseglowworldalt bumpenvpulseglowworldalt +bumpshader "bumpenvparallaxpulseglowworld" "epotrgG" +altshader bumpenvparallaxpulseglowworld bumpenvparallaxpulseglowpulseglowworldalt +fastshader bumpenvparallaxpulseglowworld bumpenvparallaxpulseglowpulseglowworldalt 2 +fastshader bumpenvparallaxpulseglowworld bumpenvpulseglowworldalt 1 +bumpshader "bumpenvspecparallaxpulseglowworld" "epotsrgG" +altshader bumpenvspecparallaxpulseglowworld bumpenvparallaxpulseglowworldalt +fastshader bumpenvspecparallaxpulseglowworld bumpenvparallaxpulseglowworldalt 2 +fastshader bumpenvspecparallaxpulseglowworld bumpenvpulseglowworldalt 1 +bumpshader "bumpenvspecmapparallaxpulseglowworld" "epotsSrRgG" +altshader bumpenvspecmapparallaxpulseglowworld bumpenvparallaxpulseglowworldalt +fastshader bumpenvspecmapparallaxpulseglowworld bumpenvparallaxpulseglowworldalt 2 +fastshader bumpenvspecmapparallaxpulseglowworld bumpenvpulseglowworldalt 1 + +//bumpshader "steepworld" "Pot" + +//////////////////////////////////////////////// +// +// model shaders +// +//////////////////////////////////////////////// + +// skeletal animation for dual quaternions + +qtangentdecode = [ + ? $arg1 [ + vec4 qxyz = mquat.xxyy*mquat.yzyz, qxzw = vec4(mquat.xzw, -mquat.w); + vec3 mtangent = (qxzw.yzw*mquat.zzy + qxyz.zxy)*vec3(-2.0, 2.0, 2.0) + vec3(1.0, 0.0, 0.0); + vec3 mnormal = (qxzw.zwx*mquat.yxx + qxyz.ywz)*vec3(2.0, 2.0, -2.0) + vec3(0.0, 0.0, 1.0); + // vec3 mtangent = cross(mquat.xyz, vec3(mquat.wz, -mquat.y))*2.0 + vec3(1.0, 0.0, 0.0); + // vec3 mnormal = cross(mquat.xyz, vec3(mquat.y, -mquat.x, mquat.w))*2.0 + vec3(0.0, 0.0, 1.0); + ] [ + vec3 mnormal = cross(mquat.xyz, vec3(mquat.y, -mquat.x, mquat.w))*2.0 + vec3(0.0, 0.0, 1.0); + ] +] + +skelanimdefs = [ + skelanimlength = (min (- $maxvsuniforms (+ $reservevpparams 10)) $maxskelanimdata) + result [ + attribute vec4 vboneweight; + attribute vec4 vboneindex; + //:uniform animdata + uniform vec4 animdata[@@skelanimlength]; + ] +] + +skelanim = [ + result [ + int index = int(vboneindex.x); + @(if (= $arg1 1) [result [ + vec4 dqreal = animdata[index]; + vec4 dqdual = animdata[index+1]; + ]] [result [ + vec4 dqreal = animdata[index] * vboneweight.x; + vec4 dqdual = animdata[index+1] * vboneweight.x; + index = int(vboneindex.y); + dqreal += animdata[index] * vboneweight.y; + dqdual += animdata[index+1] * vboneweight.y; + @(if (>= $arg1 3) [result [ + index = int(vboneindex.z); + dqreal += animdata[index] * vboneweight.z; + dqdual += animdata[index+1] * vboneweight.z; + ]]) + @(if (>= $arg1 4) [result [ + index = int(vboneindex.w); + dqreal += animdata[index] * vboneweight.w; + dqdual += animdata[index+1] * vboneweight.w; + ]]) + float len = length(dqreal); + dqreal /= len; + dqdual /= len; + ]]) + + vec4 mpos = vec4((cross(dqreal.xyz, cross(dqreal.xyz, vvertex.xyz) + vvertex.xyz*dqreal.w + dqdual.xyz) + dqdual.xyz*dqreal.w - dqreal.xyz*dqdual.w)*2.0 + vvertex.xyz, vvertex.w); + + @(if $arg2 [result [ + vec4 mquat = vec4(cross(dqreal.xyz, vtangent.xyz) + dqreal.xyz*vtangent.w + vtangent.xyz*dqreal.w, dqreal.w*vtangent.w - dot(dqreal.xyz, vtangent.xyz)); + @(qtangentdecode $arg3) + ]] [if (>= $numargs 2) [result [ + vec3 mnormal = cross(dqreal.xyz, cross(dqreal.xyz, vnormal) + vnormal*dqreal.w)*2.0 + vnormal; + ]]]) + ] +] + +// model shadowmapping + +shadowmapcastervertexshader = [ + result [ + @(if (>= $numargs 2) [result $arg1]) + attribute vec4 vvertex; + uniform mat4 modelmatrix; + uniform vec4 shadowintensity; + varying vec4 shadowmapvals; + void main(void) + { + @(if (>= $numargs 2) [result $arg2] [result [ + #define mpos vvertex + ]]) + gl_Position = modelmatrix * mpos; + shadowmapvals = vec4(1.0 - gl_Position.z, 1.0, 0.0, shadowintensity.x); + } + ] +] + +shader 0 shadowmapcaster (shadowmapcastervertexshader) [ + varying vec4 shadowmapvals; + void main(void) + { + gl_FragColor = shadowmapvals; + } +] +loop i 4 [ + variantshader 0 shadowmapcaster 0 (shadowmapcastervertexshader (skelanimdefs (+ $i 1)) (skelanim (+ $i 1))) [] +] + +shader 0 "shadowmapreceiver" [ + attribute vec4 vvertex; + uniform mat4 shadowmatrix; + uniform vec2 shadowmapbias; + varying vec4 shadowmapvals; + void main(void) + { + gl_Position = shadowmatrix * vvertex; + shadowmapvals = vec4(0.0, 0.0, shadowmapbias.y - gl_Position.z, 0.0); + } +] [ + varying vec4 shadowmapvals; + void main(void) + { + gl_FragColor = shadowmapvals; + } +] + +// model stenciling + +notexturemodelvertexshader = [ + result [ + attribute vec4 vvertex, vcolor; + uniform mat4 modelmatrix; + varying vec4 color; + @(if (>= $numargs 2) [result $arg1]) + //:fog + void main(void) + { + @(if (>= $numargs 2) [result $arg2] [result [ + #define mpos vvertex + ]]) + gl_Position = modelmatrix * mpos; + color = vcolor; + } + ] +] + +shader 0 notexturemodel (notexturemodelvertexshader) [ + varying vec4 color; + void main(void) + { + gl_FragColor = color; + } +] +loop i 4 [ + variantshader 0 notexturemodel 0 (notexturemodelvertexshader (skelanimdefs (+ $i 1)) (skelanim (+ $i 1))) [] +] + +// mdltype: +// e -> envmap +// n -> normalmap +// s -> spec +// m -> masks +// b -> dual-quat skeletal animation +// a -> alpha-tested +// q -> qtangents +// i -> glare intensity + +mdlopt = [ >= (strstr $modeltype $arg1) 0 ] + +modelvertexshader = [ + modeltype = $arg1 + result [ + @(if (mdlopt "b") [skelanimdefs $arg2 (mdlopt "q") (mdlopt "n")]) + //:fog + attribute vec4 vvertex, vcolor; + attribute vec2 vtexcoord0; + @(if (mdlopt "q") [result [ + attribute vec4 vtangent; + ]] [result [ + attribute vec3 vnormal; + ]]) + uniform mat4 modelmatrix; + uniform vec3 modelcamera, lightdir, lightscale; + uniform vec2 texscroll; + varying vec2 texcoord0; + varying vec4 color; + @(if (mdlopt "n") [result [ + @(if (mdlopt "e") [result [ + uniform mat3 modelworld; + varying vec3 camvec; + varying mat3 world; + ]] [result [ + varying vec3 lightvec, halfangle; + ]]) + ]] [result [ + @(if (mdlopt "s") [result [ + varying vec3 nvec, halfangle; + ]]) + @(if (mdlopt "e") [result [ + uniform mat3 modelworld; + uniform vec2 envmapscale; + varying vec3 rvec; + varying float rmod; + ]]) + ]]) + void main(void) + { + @(if (mdlopt "b") [result [ + @(skelanim $arg2 (mdlopt "q") (mdlopt "n")) + ]] [result [ + #define mpos vvertex + @(if (mdlopt "q") [result [ + #define mquat vtangent + @(qtangentdecode (mdlopt "n")) + ]] [result [ + #define mnormal vnormal + ]]) + ]]) + + gl_Position = modelmatrix * mpos; + + @(if (|| (mdlopt "n") (mdlopt "s") (mdlopt "i")) [result [ + color = vcolor; + ]]) + texcoord0 = vtexcoord0 + texscroll; + + @(if (|| (mdlopt "e") (mdlopt "s")) [result [ + vec3 camdir = normalize(modelcamera - mpos.xyz); + ]]) + + @(if (mdlopt "n") [ + if (mdlopt "e") [result [ + camvec = modelworld * camdir; + // composition of tangent -> object and object -> world transforms + // becomes tangent -> world + vec3 wnormal = modelworld * mnormal; + vec3 wtangent = modelworld * mtangent; + vec3 wbitangent = cross(wnormal, wtangent) * (vtangent.w < 0.0 ? -1.0 : 1.0); + world = mat3(wtangent, wbitangent, wnormal); + ]] [result [ + vec3 mbitangent = cross(mnormal, mtangent) * (vtangent.w < 0.0 ? -1.0 : 1.0); + lightvec = vec3(dot(lightdir, mtangent), dot(lightdir, mbitangent), dot(lightdir, mnormal)); + @(if (mdlopt "s") [result [ + vec3 halfdir = lightdir + camdir; + halfangle = vec3(dot(halfdir, mtangent), dot(halfdir, mbitangent), dot(halfdir, mnormal)); + ]]) + ]] + ] [result [ + @(if (mdlopt "s") [result [ + nvec = mnormal; + halfangle = lightdir + camdir; + ]] [if (! (mdlopt "i")) [result [ + float intensity = dot(mnormal, lightdir); + color = vec4(vcolor.rgb*clamp(intensity*(intensity*lightscale.x + lightscale.y) + lightscale.z, 0.0, 1.0), vcolor.a); + ]]]) + @(if (mdlopt "e") [result [ + float invfresnel = dot(camdir, mnormal); + rvec = modelworld * (2.0*invfresnel*mnormal - camdir); + rmod = envmapscale.x*max(invfresnel, 0.0) + envmapscale.y; + ]]) + ]]) + } + ] +] + +modelfragmentshader = [ + modeltype = $arg1 + result [ + varying vec2 texcoord0; + varying vec4 color; + @(if (mdlopt "n") [result [ + @(if (mdlopt "e") [result [ + #define lightvec lightdirworld + uniform vec3 lightdirworld; + uniform vec2 envmapscale; + varying vec3 camvec; + varying mat3 world; + ]] [result [ + varying vec3 lightvec, halfangle; + ]]) + ]] [result [ + @(if (mdlopt "s") [result [ + #define lightvec lightdir + uniform vec3 lightdir; + varying vec3 nvec, halfangle; + ]]) + @(if (mdlopt "e") [result [ + varying vec3 rvec; + varying float rmod; + ]]) + ]]) + @(if (&& (|| (mdlopt "s") (mdlopt "n")) (! (mdlopt "i"))) [result [uniform vec3 lightscale;]]) + @(if (|| (mdlopt "s") (mdlopt "m")) [result [uniform vec4 maskscale;]]) + uniform sampler2D tex0; + @(if (mdlopt "m") [result [uniform sampler2D tex1;]]) + @(if (mdlopt "e") [result [uniform samplerCube tex2;]]) + @(if (mdlopt "n") [result [uniform sampler2D tex3;]]) + @(? (mdlopt "a") [uniform float alphatest;]) + void main(void) + { + vec4 light = texture2D(tex0, texcoord0); + + @(? (mdlopt "a") [ + if(light.a <= alphatest) + discard; + ]) + + light.rgb *= 2.0; + + @(if (mdlopt "m") [result [ + vec3 masks = texture2D(tex1, texcoord0).rgb; + vec3 glow = light.rgb * maskscale.y; + ]]) + + @(if (mdlopt "n") [result [ + vec3 normal = texture2D(tex3, texcoord0).rgb - 0.5; + @(if (mdlopt "e") [result [ + normal = world * normal; + ]]) + normal = normalize(normal); + ]]) + + @(if (mdlopt "s") [result [ + @(if (mdlopt "n") [ + if (mdlopt "e") [result [ + vec3 halfangle = lightvec + camvec; + ]] + ] [result [ + vec3 normal = normalize(nvec); + ]]) + float spec = maskscale.x * pow(clamp(dot(normalize(halfangle), normal), 0.0, 1.0), @(? (mdlopt "i") "256.0" "128.0")); + @(if (mdlopt "m") [result [spec *= masks.r;]]) // specmap in red channel + ]]) + + @(if (mdlopt "i") [ + if (mdlopt "s") [result [ + spec *= maskscale.z; + @(? (mdlopt "m") "light.rgb" "gl_FragColor.rgb") = spec * color.rgb; + ]] [ + if (! (mdlopt "m")) [result [gl_FragColor.rgb = vec3(0.0);]] + ] + ] [result [ + @(if (|| (mdlopt "s") (mdlopt "n")) [result [ + float intensity = dot(normal, lightvec); + light.rgb *= clamp(intensity*(intensity*lightscale.x + lightscale.y) + lightscale.z, 0.0, 1.0); + ]]) + @(if (mdlopt "s") [result [ + light.rgb += spec; + ]]) + @(if (|| (mdlopt "m") (mdlopt "e")) [result [ + light.rgb *= color.rgb; + ]] [result [ + gl_FragColor = light * color; + ]]) + ]]) + + @(if (mdlopt "e") [result [ + @(if (mdlopt "n") [result [ + vec3 camn = normalize(camvec); + float invfresnel = dot(camn, normal); + vec3 rvec = 2.0*invfresnel*normal - camn; + float rmod = envmapscale.x*max(invfresnel, 0.0) + envmapscale.y; + ]]) + vec3 reflect = textureCube(tex2, rvec).rgb; + @(if (! (mdlopt "m")) [result [ + gl_FragColor.rgb = mix(light.rgb, reflect, rmod); + ]]) + ]]) + + @(if (mdlopt "m") [result [ + @(if (mdlopt "e") [result [ + light.rgb = mix(light.rgb, glow, masks.g); // glow mask in green channel + gl_FragColor.rgb = mix(light.rgb, reflect, rmod*masks.b); // envmap mask in blue channel + ]] [if (mdlopt "i") [result [ + float k = min(masks.g*masks.g*maskscale.w, 1.0); // glow mask in green channel + gl_FragColor.rgb = @(? (mdlopt "s") "glow*k + light.rgb" "glow*k"); + ]] [result [ + gl_FragColor.rgb = mix(light.rgb, glow, masks.g); // glow mask in green channel + ]]]) + ]]) + + @(if (|| (mdlopt "i") (mdlopt "m") (mdlopt "e")) [result [ + gl_FragColor.a = light.a * color.a; + ]]) + } + ] +] + +modelshader = [ + local shadername + shadername = (concatword model $arg1) + if (! (isshaderdefined $shadername)) [ + shader 0 $shadername (modelvertexshader $arg1) (modelfragmentshader $arg1) + loop i 4 [ + variantshader 0 $shadername 0 (modelvertexshader (concatword $arg1 "b") (+ $i 1)) [] + ] + glaremodeltype = (strreplace (concatword $arg1 "i") "e") + if (< (strstr $glaremodeltype "s") 0) [glaremodeltype = (strreplace $glaremodeltype "n")] + variantshader 0 $shadername 1 (modelvertexshader $glaremodeltype) (modelfragmentshader $glaremodeltype) + loop i 4 [ + variantshader 0 $shadername 1 (modelvertexshader (concatword $glaremodeltype "b") (+ $i 1)) 1 + ] + if (>= (strstr $arg1 "e") 0) [ + altshader $shadername (modelshader (strreplace $arg1 "e")) + ] + if (>= (strstr $arg1 "s") 0) [ + fastshader $shadername (modelshader (strreplace $arg1 "s")) 1 + ] + ] + result $shadername +] + +//////////////////////////////////////////////// +// +// separable blur with up to 7 taps +// +//////////////////////////////////////////////// + +blurshader = [ + shader 0 $arg1 [ + attribute vec4 vvertex; + @(screentexcoord 0) + uniform float offsets[8]; + varying vec2 texcoord0, texcoordp1, texcoordn1; + @(loopconcat i (min (- $arg2 1) 2) [result [ + varying vec2 texcoordp@(+ $i 2), texcoordn@(+ $i 2); + ]]) + void main(void) + { + gl_Position = vvertex; + texcoord0 = vtexcoord0; + vec2 tcp = vtexcoord0, tcn = vtexcoord0; + tcp.@arg3 += offsets[1]; + tcn.@arg3 -= offsets[1]; + texcoordp1 = tcp; + texcoordn1 = tcn; + @(loopconcat i (min (- $arg2 1) 2) [result [ + tcp.@arg3 = vtexcoord0.@arg3 + offsets[@@(+ $i 2)]; + tcn.@arg3 = vtexcoord0.@arg3 - offsets[@@(+ $i 2)]; + texcoordp@(+ $i 2) = tcp; + texcoordn@(+ $i 2) = tcn; + ]]) + } + ] [ + uniform float weights[8]; + uniform float offsets[8]; + varying vec2 texcoord0, texcoordp1, texcoordn1; + @(loopconcat i (min (- $arg2 1) 2) [result [ + varying vec2 texcoordp@(+ $i 2), texcoordn@(+ $i 2); + ]]) + uniform sampler2D tex0; + void main(void) + { + #define texval(coords) texture2D(tex0, (coords)) + vec4 val = texval(texcoord0) * weights[0]; + @(loopconcat i $arg2 [ + if (< $i 3) [result [ + val += weights[@@(+ $i 1)] * (texval(texcoordp@(+ $i 1)) + texval(texcoordn@(+ $i 1))); + ]] [result [ + val += weights[@@(+ $i 1)] * + @(if (=s $arg3 "x") [result [ + (texval(vec2(texcoord0.x + offsets[@@(+ $i 1)], texcoord0.y)) + + texval(vec2(texcoord0.x - offsets[@@(+ $i 1)], texcoord0.y))); + ]] [result [ + (texval(vec2(texcoord0.x, texcoord0.y + offsets[@@(+ $i 1)])) + + texval(vec2(texcoord0.x, texcoord0.y - offsets[@@(+ $i 1)]))); + ]]) + ]] + ]) + gl_FragColor = val; + } + ] +] + +loop i 7 [ + blurshader (format "blurx%1" (+ $i 1)) (+ $i 1) x + blurshader (format "blury%1" (+ $i 1)) (+ $i 1) y + if (> $i 0) [ + altshader (format "blurx%1" (+ $i 1)) (format "blurx%1" $i) + altshader (format "blury%1" (+ $i 1)) (format "blury%1" $i) + ] +] + +//////////////////////////////////////////////// +// +// full screen shaders: +// +//////////////////////////////////////////////// + +fsvs = [result [ + attribute vec4 vvertex; + @(screentexcoord 0) + uniform vec2 postfxscale; + varying vec2 texcoord0; + @arg2 + void main(void) + { + gl_Position = vvertex; // woohoo, no mvp :) + texcoord0 = vtexcoord0; + @arg1 + } +]] + +fsps = [result [ + uniform sampler2D tex0; + varying vec2 texcoord0; + @arg2 + void main(void) + { + vec4 color = texture2D(tex0, texcoord0); + @arg1 + } +]] + +fsvs4 = [ + fsvs [ + texcoord1 = vtexcoord0 + vec2(-1.5, -1.5)*postfxscale; + texcoord2 = vtexcoord0 + vec2( 1.5, -1.5)*postfxscale; + texcoord3 = vtexcoord0 + vec2(-1.5, 1.5)*postfxscale; + texcoord4 = vtexcoord0 + vec2( 1.5, 1.5)*postfxscale; + @arg1 + ] [ + varying vec2 texcoord1, texcoord2, texcoord3, texcoord4; + ] +] + +fsps4 = [ + fsps [ + vec4 s00 = texture2D(tex0, texcoord1); + vec4 s02 = texture2D(tex0, texcoord2); + vec4 s20 = texture2D(tex0, texcoord3); + vec4 s22 = texture2D(tex0, texcoord4); + @arg1 + ] [ + varying vec2 texcoord1, texcoord2, texcoord3, texcoord4; + ] +] + +// some simple ones that just do an effect on the RGB value... + +lazyshader 0 "invert" (fsvs) (fsps [gl_FragColor = 1.0 - color;]) +lazyshader 0 "gbr" (fsvs) (fsps [gl_FragColor = color.yzxw;]) +lazyshader 0 "bw" (fsvs) (fsps [gl_FragColor = vec4(dot(color.xyz, vec3(0.333)));]) + +// sobel + +lazyshader 0 "sobel" (fsvs4) (fsps4 [ + vec4 t = s00 + s20 - s02 - s22; + vec4 u = s00 + s02 - s20 - s22; + gl_FragColor = color + t*t + u*u; +]) + +// rotoscope + +lazyshader 0 "rotoscope" [ + attribute vec4 vvertex; + @(screentexcoord 0) + uniform vec2 postfxscale; + uniform vec4 params; + varying vec2 t11, t00, t12, t01, t20, t02, t21, t10, t22; + void main(void) + { + gl_Position = vvertex; + t11 = vtexcoord0; + vec2 scale = postfxscale*params.x; + t00 = vec2(-1.0, -1.0)*scale + vtexcoord0; + t12 = vec2( 0.0, 1.0)*scale + vtexcoord0; + t01 = vec2(-1.0, 0.0)*scale + vtexcoord0; + t20 = vec2( 1.0, -1.0)*scale + vtexcoord0; + t02 = vec2(-1.0, 1.0)*scale + vtexcoord0; + t21 = vec2( 1.0, 0.0)*scale + vtexcoord0; + t10 = vec2( 0.0, -1.0)*scale + vtexcoord0; + t22 = vec2( 1.0, 1.0)*scale + vtexcoord0; + } +] [ + uniform sampler2D tex0; + varying vec2 t11, t00, t12, t01, t20, t02, t21, t10, t22; + void main(void) + { + vec4 c00 = texture2D(tex0, t00); + vec4 c01 = texture2D(tex0, t01); + vec4 c02 = texture2D(tex0, t02); + vec4 c10 = texture2D(tex0, t10); + vec4 c11 = texture2D(tex0, t11); + vec4 c12 = texture2D(tex0, t12); + vec4 c20 = texture2D(tex0, t20); + vec4 c21 = texture2D(tex0, t21); + vec4 c22 = texture2D(tex0, t22); + + vec4 diag1 = c00 - c22; + vec4 diag2 = c02 - c20; + vec4 xedge = (c01 - c21)*2.0 + diag1 + diag2; + vec4 yedge = (c10 - c12)*2.0 + diag1 - diag2; + xedge *= xedge; + yedge *= yedge; + + vec4 xyedge = xedge + yedge; + float sobel = step(max(xyedge.x, max(xyedge.y, xyedge.z)), 0.1); + + float hue = dot(c11.xyz, vec3(1.0)); + c11 /= hue; + vec3 cc = step(vec3(0.2, 0.8, 1.5), vec3(hue)); + c11 *= dot(cc, vec3(0.5, 0.5, 1.5)); + + gl_FragColor = c11 * max(cc.z, sobel); + } +] + +blur3shader = [ + lazyshader 0 $arg1 [ + attribute vec4 vvertex; + @(screentexcoord 0) + uniform vec2 postfxscale; + varying vec2 texcoord0, texcoord1; + void main(void) + { + gl_Position = vvertex; + texcoord0 = vtexcoord0 + vec2(@(if $arg2 -0.5 0.0), @(if $arg3 -0.5 0.0))*postfxscale; + texcoord1 = vtexcoord0 + vec2(@(if $arg2 0.5 0.0), @(if $arg3 0.5 0.0))*postfxscale; + } + ] [ + varying vec2 texcoord0, texcoord1; + uniform sampler2D tex0; + void main(void) + { + gl_FragColor = 0.5*(texture2D(tex0, texcoord0) + texture2D(tex0, texcoord1)); + } + ] +] +blur3shader hblur3 1 0 +blur3shader vblur3 0 1 + +blur5shader = [ + lazyshader 0 $arg1 [ + attribute vec4 vvertex; + @(screentexcoord 0) + uniform vec2 postfxscale; + varying vec2 texcoord0, texcoord1, texcoord2; + void main(void) + { + gl_Position = vvertex; + texcoord0 = vtexcoord0; + texcoord1 = vtexcoord0 + vec2(@(? $arg2 -1.333 0.0), @(? $arg3 -1.333 0.0))*postfxscale; + texcoord2 = vtexcoord0 + vec2(@(? $arg2 1.333 0.0), @(? $arg3 1.333 0.0))*postfxscale; + } + ] [ + uniform sampler2D tex0; + varying vec2 texcoord0, texcoord1, texcoord2; + void main(void) + { + gl_FragColor = 0.4*texture2D(tex0, texcoord0) + 0.3*(texture2D(tex0, texcoord1) + texture2D(tex0, texcoord2)); + } + ] +] +blur5shader hblur5 1 0 +blur5shader vblur5 0 1 + +rotoscope = [ + clearpostfx + if (>= $numargs 1) [addpostfx rotoscope 0 0 0 $arg1] + if (>= $numargs 2) [ + if (= $arg2 1) [addpostfx hblur3; addpostfx vblur3] + if (= $arg2 2) [addpostfx hblur5; addpostfx vblur5] + ] +] + +shader 0 "screenrect" [ + attribute vec4 vvertex, vcolor; + @(screentexcoord 0) + varying vec2 texcoord0; + varying vec4 color; + void main(void) + { + gl_Position = vvertex; + texcoord0 = vtexcoord0; + color = vcolor; + } +] [ + varying vec2 texcoord0; + varying vec4 color; + uniform sampler2D tex0; + void main(void) + { + gl_FragColor = color * texture2D(tex0, texcoord0); + } +] + +// bloom-ish + +lazyshader 0 "bloom_scale" (fsvs4) (fsps4 [ + gl_FragColor = 0.2 * (s02 + s00 + s22 + s20 + color); +]) + +lazyshader 0 "bloom_init" (fsvs) (fsps [ + float t = max(color.r, max(color.g, color.b)); + gl_FragColor = t*t*color; +]) + +bloomshader = [ + defershader 0 $arg1 [ + forceshader "bloom_scale" + forceshader "bloom_init" + shader 0 @arg1 [ + attribute vec4 vvertex; + @(screentexcoord 0) + varying vec2 texcoord0; + void main(void) + { + gl_Position = vvertex; + texcoord0 = vtexcoord0; + } + ] [ + uniform vec4 params; + varying vec2 texcoord0; + uniform sampler2D tex0 @@(loopconcat i $arg2 [result [, tex@(+ $i 1)]]); + void main(void) + { + vec4 sample = texture2D(tex0, texcoord0); + @@(loopconcat i $arg2 [result [ + @(? $i "bloom +=" "vec4 bloom =") texture2D(tex@(+ $i 1), texcoord0); + ]]) + gl_FragColor = bloom*params.x + sample; + } + ] + ] +] + +bloomshader bloom1 1 +bloomshader bloom2 2 +bloomshader bloom3 3 +bloomshader bloom4 4 +bloomshader bloom5 5 +bloomshader bloom6 6 + +setupbloom = [ + addpostfx bloom_init 1 1 "+0" + loop i (- $arg1 1) [ + addpostfx bloom_scale (+ $i 2) (+ $i 2) (concatword "+" (+ $i 1)) + ] + addpostfx (concatword bloom $arg1) 0 0 (loopconcat i (+ $arg1 1) [result $i]) $arg2 +] + +bloom = [ + clearpostfx + if (>= $numargs 1) [setupbloom 6 $arg1] +] + +//////////////////////////////////////////////// +// +// miscellaneous effect shaders: +// +//////////////////////////////////////////////// + +// wobbles the vertices of an explosion sphere +// and generates all texcoords +// and blends the edge color +// and modulates the texture +explosionshader = [ + shader 0 $arg1 [ + //:fog + attribute vec4 vvertex, vcolor; + attribute vec2 vtexcoord0; + uniform mat4 explosionmatrix; + uniform vec3 center; + uniform float millis; + uniform vec3 texgenS, texgenT; + varying vec4 color; + varying vec2 texcoord0, texcoord1, texcoord2; + @(if (>= (strstr $arg1 "soft") 0) [result [uniform vec4 depthfxparams; varying vec4 texcoord3; ]]) + void main(void) + { + vec4 wobble = vec4(vvertex.xyz*(1.0 + 0.5*abs(fract(dot(vvertex.xyz, center) + millis*2.0) - 0.5)), vvertex.w); + @(if (>= (strstr $arg1 "soft") 0) [result [ + gl_Position = explosionmatrix * wobble; + + texcoord3 = vec4(0.5*(gl_Position.xy + gl_Position.w), gl_Position.w, depthfxparams.y + gl_Position.w*depthfxparams.x); + ]] [result [ + gl_Position = explosionmatrix * wobble; + ]]) + + color = vcolor; + + texcoord0 = vtexcoord0; + vec2 texgen = vec2(dot(texgenS, vvertex.xyz), dot(texgenT, vvertex.xyz)); + texcoord1 = texgen; + texcoord2 = 0.5*texgen - millis*0.5; + } + ] [ + @(if (>= (strstr $arg1 "soft") 0) [result [ + uniform sampler2D tex2; + ]]) + uniform sampler2D tex0, tex1; + uniform vec2 blendparams; + varying vec4 color; + varying vec2 texcoord0, texcoord1, texcoord2; + @(if (>= (strstr $arg1 "soft") 0) [result [uniform vec4 depthfxparams; varying vec4 texcoord3; ]]) + @(if (>= (strstr $arg1 "soft8") 0) [result [uniform vec4 depthfxselect;]]) + void main(void) + { + vec2 dtc = texcoord0 + texture2D(tex0, texcoord2).xy*0.1; // use color texture as noise to distort texcoords + vec4 diffuse = texture2D(tex0, dtc); + float blend = max(pow(clamp(1.0 - dot(texcoord1, texcoord1), 0.0, 1.0), blendparams.x), blendparams.y); + @(if (>= (strstr $arg1 "glare") 0) [result [ + float k = blend*blend; + diffuse.rgb *= k*8.0; + diffuse.a *= k; + diffuse.b += k*k; + ]] [result [ + diffuse *= blend*4.0; // dup alpha into RGB channels + intensify and over saturate + diffuse.b += 0.5 - blend*0.5; // blue tint + ]]) + + @(if (>= (strstr $arg1 "soft") 0) [result [ + gl_FragColor.rgb = diffuse.rgb * color.rgb; + + #define depthvals texture2DProj(tex2, texcoord3.xyz) + @(if (>= (strstr $arg1 "soft8") 0) [result [ + float depth = dot(depthvals, depthfxselect); + ]] [result [ + float depth = depthvals.x*depthfxparams.z; + ]]) + gl_FragColor.a = diffuse.a * max(clamp(depth - texcoord3.w, 0.0, 1.0) * color.a, depthfxparams.w); + ]] [result [ + gl_FragColor = diffuse * color; + ]]) + } + ] +] + +looplist i ["" "glare" "soft" "soft8"] [ + explosionshader [explosion@i] +] + +shader 0 "particlenotexture" [ + //:fog + attribute vec4 vvertex, vcolor; + uniform mat4 camprojmatrix; + uniform vec4 colorscale; + varying vec4 color; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + color = vcolor * colorscale; + } +] [ + varying vec4 color; + void main(void) + { + gl_FragColor = color; + } +] + +particleshader = [ + shader 0 $arg1 [ + //:fog + attribute vec4 vvertex, vcolor; + attribute vec2 vtexcoord0; + uniform mat4 camprojmatrix; + uniform vec4 colorscale; + varying vec2 texcoord0; + varying vec4 color; + @(if (>= (strstr $arg1 "soft") 0) [result [uniform vec4 depthfxparams; varying vec3 texcoord1, surface; ]]) + void main(void) + { + gl_Position = camprojmatrix * vvertex; + texcoord0 = vtexcoord0; + color = vcolor * colorscale; + + @(if (>= (strstr $arg1 "soft") 0) [result [ + texcoord1 = vec3(0.5*(gl_Position.xy + gl_Position.w), gl_Position.w); + + vec2 offset = vtexcoord0*2.82842712474619 - 1.4142135623731; + surface = vec3(offset, depthfxparams.y + gl_Position.w*depthfxparams.x); + ]]) + } + ] [ + @(if (>= (strstr $arg1 "soft") 0) [result [ + uniform sampler2D tex2; + ]]) + uniform sampler2D tex0; + varying vec2 texcoord0; + varying vec4 color; + @(if (>= (strstr $arg1 "soft") 0) [result [uniform vec4 depthfxparams; varying vec3 texcoord1, surface;]]) + @(if (>= (strstr $arg1 "soft8") 0) [result [uniform vec4 depthfxselect;]]) + void main(void) + { + vec4 diffuse = texture2D(tex0, texcoord0); + + @(if (>= (strstr $arg1 "soft") 0) [result [ + #define depthvals texture2DProj(tex2, texcoord1) + @(if (>= (strstr $arg1 "soft8") 0) [result [ + float depth = dot(depthvals, depthfxselect); + ]] [result [ + float depth = depthvals.x*depthfxparams.z; + ]]) + diffuse.a *= clamp(depth - dot(surface.xy, surface.xy) - surface.z, 0.0, 1.0); + ]]) + + gl_FragColor = diffuse * color; + } + ] +] + +looplist i ["" "soft" "soft8"] [ + particleshader [particle@i] +] + +shader 0 "blendbrush" [ + attribute vec4 vvertex, vcolor; + uniform mat4 camprojmatrix; + uniform vec4 texgenS, texgenT; + varying vec4 color; + varying vec2 texcoord0; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + color = vcolor; + texcoord0 = vec2(dot(texgenS, vvertex), dot(texgenT, vvertex)); + } +] [ + varying vec4 color; + varying vec2 texcoord0; + uniform sampler2D tex0; + void main(void) + { + gl_FragColor = texture2D(tex0, texcoord0).r * color; + } +] + +lazyshader 0 "prefab" [ + attribute vec4 vvertex, vcolor; + attribute vec3 vnormal; + uniform mat4 prefabmatrix; + uniform mat3 prefabworld; + varying vec4 color; + + void main(void) + { + gl_Position = prefabmatrix * vvertex; + color = vcolor; + color.rgb *= dot(prefabworld * vnormal, vec3(0.0, -0.447213595, 0.894427191)); + } +] [ + varying vec4 color; + void main(void) + { + gl_FragColor = color; + } +] + +lazyshader 0 "moviergb" [ + attribute vec4 vvertex; + @(screentexcoord 0) + varying vec2 texcoord0; + void main(void) + { + gl_Position = vvertex; + texcoord0 = vtexcoord0; + } +] [ + varying vec2 texcoord0; + uniform sampler2D tex0; + void main(void) + { + gl_FragColor = texture2D(tex0, texcoord0); + } +] + +lazyshader 0 "movieyuv" [ + attribute vec4 vvertex; + @(screentexcoord 0) + varying vec2 texcoord0; + void main(void) + { + gl_Position = vvertex; + texcoord0 = vtexcoord0; + } +] [ + varying vec2 texcoord0; + uniform sampler2D tex0; + void main(void) + { + vec3 sample = texture2D(tex0, texcoord0).rgb; + gl_FragColor = vec4(dot(sample, vec3(0.439216, -0.367788, -0.071427)) + 0.501961, + dot(sample, vec3(-0.148224, -0.290992, 0.439216)) + 0.501961, + dot(sample, vec3(0.256788, 0.504125, 0.097905)) + 0.062745, + 0.0); + } +] + +lazyshader 0 "moviey" [ + attribute vec4 vvertex; + @(screentexcoord 0) + uniform vec2 moviescale; + varying vec2 texcoord0, texcoord1, texcoord2, texcoord3; + void main(void) + { + gl_Position = vvertex; + texcoord0 = vtexcoord0 + vec2(-1.5, 0.0)*moviescale; + texcoord1 = vtexcoord0 + vec2(-0.5, 0.0)*moviescale; + texcoord2 = vtexcoord0 + vec2( 0.5, 0.0)*moviescale; + texcoord3 = vtexcoord0 + vec2( 1.5, 0.0)*moviescale; + } +] [ + varying vec2 texcoord0, texcoord1, texcoord2, texcoord3; + uniform sampler2D tex0; + void main(void) + { + vec3 sample1 = texture2D(tex0, texcoord0).rgb; + vec3 sample2 = texture2D(tex0, texcoord1).rgb; + vec3 sample3 = texture2D(tex0, texcoord2).rgb; + vec3 sample4 = texture2D(tex0, texcoord3).rgb; + gl_FragColor = vec4(dot(sample3, vec3(0.256788, 0.504125, 0.097905)) + 0.062745, + dot(sample2, vec3(0.256788, 0.504125, 0.097905)) + 0.062745, + dot(sample1, vec3(0.256788, 0.504125, 0.097905)) + 0.062745, + dot(sample4, vec3(0.256788, 0.504125, 0.097905)) + 0.062745); + } +] + +lazyshader 0 "movieu" [ + attribute vec4 vvertex; + @(screentexcoord 0) + uniform vec2 moviescale; + varying vec2 texcoord0, texcoord1, texcoord2, texcoord3; + void main(void) + { + gl_Position = vvertex; + texcoord0 = vtexcoord0 + vec2(-3.0, 0.0)*moviescale; + texcoord1 = vtexcoord0 + vec2(-1.0, 0.0)*moviescale; + texcoord2 = vtexcoord0 + vec2( 1.0, 0.0)*moviescale; + texcoord3 = vtexcoord0 + vec2( 3.0, 0.0)*moviescale; + } +] [ + varying vec2 texcoord0, texcoord1, texcoord2, texcoord3; + uniform sampler2D tex0; + void main(void) + { + vec3 sample1 = texture2D(tex0, texcoord0).rgb; + vec3 sample2 = texture2D(tex0, texcoord1).rgb; + vec3 sample3 = texture2D(tex0, texcoord2).rgb; + vec3 sample4 = texture2D(tex0, texcoord3).rgb; + gl_FragColor = vec4(dot(sample3, vec3(-0.148224, -0.290992, 0.43921)) + 0.501961, + dot(sample2, vec3(-0.148224, -0.290992, 0.43921)) + 0.501961, + dot(sample1, vec3(-0.148224, -0.290992, 0.43921)) + 0.501961, + dot(sample4, vec3(-0.148224, -0.290992, 0.43921)) + 0.501961); + } +] + +lazyshader 0 "moviev" [ + attribute vec4 vvertex; + @(screentexcoord 0) + uniform vec2 moviescale; + varying vec2 texcoord0, texcoord1, texcoord2, texcoord3; + void main(void) + { + gl_Position = vvertex; + texcoord0 = vtexcoord0 + vec2(-3.0, 0.0)*moviescale; + texcoord1 = vtexcoord0 + vec2(-1.0, 0.0)*moviescale; + texcoord2 = vtexcoord0 + vec2( 1.0, 0.0)*moviescale; + texcoord3 = vtexcoord0 + vec2( 3.0, 0.0)*moviescale; + } +] [ + varying vec2 texcoord0, texcoord1, texcoord2, texcoord3; + uniform sampler2D tex0; + void main(void) + { + vec3 sample1 = texture2D(tex0, texcoord0).rgb; + vec3 sample2 = texture2D(tex0, texcoord1).rgb; + vec3 sample3 = texture2D(tex0, texcoord2).rgb; + vec3 sample4 = texture2D(tex0, texcoord3).rgb; + gl_FragColor = vec4(dot(sample3, vec3(0.439216, -0.367788, -0.071427)) + 0.501961, + dot(sample2, vec3(0.439216, -0.367788, -0.071427)) + 0.501961, + dot(sample1, vec3(0.439216, -0.367788, -0.071427)) + 0.501961, + dot(sample4, vec3(0.439216, -0.367788, -0.071427)) + 0.501961); + } +] + +/////////////////////////////////////////////////// +// +// reflective/refractive water shaders: +// +/////////////////////////////////////////////////// + +watershader = [ + specular = $arg2 + rgbfog = $arg3 + distort = $arg4 + combine = $arg5 + lazyshader 0 $arg1 [ + attribute vec4 vvertex; + attribute vec3 vcolor; + uniform mat4 camprojmatrix; + uniform vec3 camera; + uniform mat4 watermatrix; + uniform float waterheight; + uniform float millis; + @(if $specular [result [uniform vec3 lightpos; varying vec3 lightdir;]]) + varying vec3 camdir, color; + varying vec4 texcoord0; + varying vec2 texcoord1, texcoord2; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + color = vcolor; + texcoord0 = watermatrix * vvertex; + @(if (>= (strstr $arg1 "underwater") 0) [result [ + texcoord0.z = waterheight - vvertex.z; + ]] [result [ + texcoord0.z = vvertex.z - waterheight; + ]]) + vec2 tc = vvertex.xy * 0.02; + texcoord1 = tc + millis*0.05; + texcoord2 = tc - millis*0.03; + camdir = camera - vvertex.xyz; + @(if $specular [result [ + lightdir = lightpos - vvertex.xyz; + ]]) + } + ] [ + @(if $rgbfog [result [ + //:fog + ]] [result [ + //:fogrgba vec4(vec3(0.0), 1.0) + ]]) + uniform vec2 depth; + @(if $specular [result [uniform vec3 lightcolor; uniform float lightradius; varying vec3 lightdir;]]) + varying vec3 camdir, color; + varying vec4 texcoord0; + varying vec2 texcoord1, texcoord2; + @(if (>= (strstr $arg1 "env") 0) [result [ + uniform samplerCube tex0; + ]] [result [ + uniform sampler2D tex0; + ]]) + uniform sampler2D tex1, tex2, tex3; + void main(void) + { + vec3 camvec = normalize(camdir); + @(if $specular [result [ + vec3 lightvec = normalize(lightdir); + vec3 halfangle = normalize(camvec + lightvec); + ]]) + + vec2 dudv = texture2D(tex2, texcoord1).xy*2.0 - 1.0; + + @distort + + @(if $specular [result [ + float spec = pow(clamp(dot(halfangle, bump), 0.0, 1.0), 96.0); + vec3 light = lightcolor * (1.0 - clamp(length(lightdir)/lightradius, 0.0, 1.0)); + ]]) + + @combine + } + ] +] + +watershader "waterglare" 1 1 [ + vec3 bump = texture2D(tex1, texcoord2 + 0.025*dudv).rgb*2.0 - 1.0; +] [ + gl_FragColor = vec4(light*spec*spec*32.0, 0.0); +] +lazyshader 0 "waterglarefast" [ + //:fog + attribute vec4 vvertex; + uniform mat4 camprojmatrix; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + } +] [ + void main(void) + { + gl_FragColor = vec4(0.0); + } +] +fastshader waterglare waterglarefast 2 +altshader waterglare waterglarefast + +lazyshader 0 "underwater" [ + attribute vec4 vvertex; + attribute vec3 vcolor; + uniform mat4 camprojmatrix; + varying vec3 color; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + color = vcolor; + } +] [ + //:fogrgba vec4(vec3(0.0), 1.0) + uniform vec2 depth; + varying vec3 color; + void main(void) + { + gl_FragColor.rgb = 0.8*depth.x*color; + gl_FragColor.a = 0.5*depth.y; + } +] + +watershader "underwaterrefract" 0 1 [ + dudv = texture2D(tex2, texcoord2 + 0.025*dudv).xy*2.0 - 1.0; + + gl_FragColor = texture2D(tex3, texcoord0.xy/texcoord0.w + 0.007*dudv); +] [] +watershader "underwaterrefractfast" 0 1 [ + gl_FragColor = texture2DProj(tex3, texcoord0 + vec4(0.3*dudv, 0.0, 0.0)); +] [] +fastshader underwaterrefract underwaterrefractfast 2 +altshader underwaterrefract underwaterrefractfast + +watershader "underwaterfade" 0 1 [ + dudv = texture2D(tex2, texcoord2 + 0.025*dudv).xy*2.0 - 1.0; + + vec2 projtc = texcoord0.xy/texcoord0.w; + float fade = texcoord0.z + 4.0*texture2D(tex3, projtc).a; + gl_FragColor.a = fade * clamp(gl_FragCoord.z, 0.0, 1.0); + gl_FragColor.rgb = texture2D(tex3, projtc + 0.007*dudv).rgb; +] [] +watershader "underwaterfadefast" 0 1 [ + gl_FragColor.rgb = texture2DProj(tex3, texcoord0 + vec4(0.3*dudv, 0.0, 0.0)).rgb; + gl_FragColor.a = texcoord0.z + 4.0*texture2DProj(tex3, texcoord0).a; +] [] +fastshader underwaterfade underwaterfadefast 2 +altshader underwaterfade underwaterfadefast + +watershader "water" 1 0 [ + vec3 bump = texture2D(tex1, texcoord2 + 0.025*dudv).rgb*2.0 - 1.0; +] [ + float invfresnel = clamp(dot(camvec, bump), 0.0, 1.0); + gl_FragColor.rgb = color*depth.x*mix(0.6, 1.0, invfresnel*0.5+0.5) + spec*light; + gl_FragColor.a = invfresnel*depth.y; +] +watershader "waterfast" 0 0 [ + vec3 bump = texture2D(tex1, texcoord2 + 0.025*dudv).rgb*2.0 - 1.0; +] [ + float invfresnel = clamp(dot(camvec, bump), 0.0, 1.0); + gl_FragColor.rgb = color*depth.x*mix(0.6, 1.0, invfresnel*0.5+0.5); + gl_FragColor.a = invfresnel*depth.y; +] +fastshader water waterfast 1 +altshader water waterfast + +watershader "waterreflect" 1 0 [ + vec3 reflect = texture2DProj(tex0, texcoord0 + vec4(0.3*dudv, 0.0, 0.0)).rgb; + vec3 bump = texture2D(tex1, texcoord2 + 0.025*dudv).rgb*2.0 - 1.0; +] [ + float invfresnel = clamp(dot(camvec, bump), 0.0, 1.0); + gl_FragColor.rgb = mix(reflect, color*depth.x, invfresnel*0.5+0.5) + spec*light; + gl_FragColor.a = invfresnel*depth.y; +] +watershader "waterreflectfast" 0 0 [ + vec3 reflect = texture2DProj(tex0, texcoord0 + vec4(0.3*dudv, 0.0, 0.0)).rgb; + vec3 bump = texture2D(tex1, texcoord2 + 0.025*dudv).rgb*2.0 - 1.0; +] [ + float invfresnel = clamp(dot(camvec, bump), 0.0, 1.0); + gl_FragColor.rgb = mix(reflect, color*depth.x, invfresnel*0.5+0.5); + gl_FragColor.a = invfresnel*depth.y; +] +fastshader waterreflect waterreflectfast 2 +altshader waterreflect waterreflectfast + +watershader "waterrefract" 1 1 [ + vec2 dtc = texcoord2 + 0.025*dudv; + vec3 bump = texture2D(tex1, dtc).rgb*2.0 - 1.0; + dudv = texture2D(tex2, dtc).xy*2.0 - 1.0; + + vec2 rtc = texcoord0.xy/texcoord0.w + 0.007*dudv; + vec3 reflect = texture2D(tex0, rtc).rgb; + vec3 refract = texture2D(tex3, rtc).rgb; +] [ + float invfresnel = clamp(dot(camvec, bump), 0.0, 1.0); + gl_FragColor = vec4(mix(reflect, refract, invfresnel*0.5+0.5) + spec*light, 0.0); +] +watershader "waterrefractfast" 0 1 [ + vec4 rtc = texcoord0 + vec4(0.3*dudv, 0.0, 0.0); + vec3 reflect = texture2DProj(tex0, rtc).rgb; + vec3 refract = texture2DProj(tex3, rtc).rgb; + vec3 bump = texture2D(tex1, texcoord2 + 0.025*dudv).rgb*2.0 - 1.0; +] [ + float invfresnel = clamp(dot(camvec, bump), 0.0, 1.0); + gl_FragColor = vec4(mix(reflect, refract, invfresnel*0.5+0.5), 0.0); +] +fastshader waterrefract waterrefractfast 2 +altshader waterrefract waterrefractfast + +watershader "waterfade" 1 1 [ + vec2 dtc = texcoord2 + 0.025*dudv; + vec3 bump = texture2D(tex1, dtc).rgb*2.0 - 1.0; + dudv = texture2D(tex2, dtc).xy*2.0 - 1.0; + + vec2 projtc = texcoord0.xy/texcoord0.w; + vec2 rtc = projtc + 0.007*dudv; + vec3 reflect = texture2D(tex0, rtc).rgb; + vec3 refract = texture2D(tex3, rtc).rgb; + float fade = texcoord0.z + 4.0*texture2D(tex3, projtc).a; + gl_FragColor.a = fade * clamp(gl_FragCoord.z, 0.0, 1.0); +] [ + float invfresnel = clamp(dot(camvec, bump), 0.0, 1.0); + gl_FragColor.rgb = mix(reflect, refract, invfresnel*0.5+0.5) + spec*light; +] +watershader "waterfadefast" 0 1 [ + vec4 rtc = texcoord0 + vec4(0.3*dudv, 0.0, 0.0); + vec3 reflect = texture2DProj(tex0, rtc).rgb; + vec3 refract = texture2DProj(tex3, rtc).rgb; + gl_FragColor.a = texcoord0.z + 4.0*texture2DProj(tex3, texcoord0).a; + vec3 bump = texture2D(tex1, texcoord2 + 0.025*dudv).rgb*2.0 - 1.0; +] [ + float invfresnel = clamp(dot(camvec, bump), 0.0, 1.0); + gl_FragColor.rgb = mix(reflect, refract, invfresnel*0.5+0.5); +] +fastshader waterfade waterfadefast 2 +altshader waterfade waterrefract + +watershader "waterenv" 1 0 [ + vec3 bump = texture2D(tex1, texcoord2 + 0.025*dudv).rgb*2.0 - 1.0; + float invfresnel = clamp(dot(camvec, bump), 0.0, 1.0); + vec3 reflect = textureCube(tex0, camvec - 2.0*invfresnel*bump).rgb; +] [ + gl_FragColor.rgb = mix(reflect, color*depth.x, invfresnel*0.5+0.5) + spec*light; + gl_FragColor.a = invfresnel*depth.y; +] +watershader "waterenvfast" 0 0 [ + vec3 bump = texture2D(tex1, texcoord2 + 0.025*dudv).rgb*2.0 - 1.0; + float invfresnel = clamp(dot(camvec, bump), 0.0, 1.0); + vec3 reflect = textureCube(tex0, camvec - 2.0*invfresnel*bump).rgb; +] [ + gl_FragColor.rgb = mix(reflect, color*depth.x, invfresnel*0.5+0.5); + gl_FragColor.a = invfresnel*depth.y; +] +fastshader waterenv waterenvfast 2 +altshader waterenv waterenvfast + +watershader "waterenvrefract" 1 1 [ + vec2 dtc = texcoord2 + 0.025*dudv; + vec3 bump = texture2D(tex1, dtc).rgb*2.0 - 1.0; + dudv = texture2D(tex2, dtc).xy*2.0 - 1.0; + + vec3 refract = texture2D(tex3, texcoord0.xy/texcoord0.w + 0.007*dudv).rgb; + float invfresnel = clamp(dot(camvec, bump), 0.0, 1.0); + vec3 reflect = textureCube(tex0, camvec - 2.0*invfresnel*bump).rgb; +] [ + gl_FragColor = vec4(mix(reflect, refract, invfresnel*0.5+0.5) + spec*light, 0.0); +] +watershader "waterenvrefractfast" 0 1 [ + vec3 refract = texture2DProj(tex3, texcoord0 + vec4(0.3*dudv, 0.0, 0.0)).rgb; + vec3 bump = texture2D(tex1, texcoord2 + 0.025*dudv).rgb*2.0 - 1.0; + float invfresnel = clamp(dot(camvec, bump), 0.0, 1.0); + vec3 reflect = textureCube(tex0, camvec - 2.0*invfresnel*bump).rgb; +] [ + gl_FragColor = vec4(mix(reflect, refract, invfresnel*0.5+0.5), 0.0); +] +fastshader waterenvrefract waterenvrefractfast 2 +altshader waterenvrefract waterenvrefractfast + +watershader "waterenvfade" 1 1 [ + vec2 dtc = texcoord2 + 0.025*dudv; + vec3 bump = texture2D(tex1, dtc).rgb*2.0 - 1.0; + dudv = texture2D(tex2, dtc).xy*2.0 - 1.0; + + vec2 projtc = texcoord0.xy/texcoord0.w; + vec3 refract = texture2D(tex3, projtc + 0.007*dudv).rgb; + float fade = texcoord0.z + 4.0*texture2D(tex3, projtc).a; + gl_FragColor.a = fade * clamp(gl_FragCoord.z, 0.0, 1.0); + + float invfresnel = clamp(dot(camvec, bump), 0.0, 1.0); + vec3 reflect = textureCube(tex0, camvec - 2.0*invfresnel*bump).rgb; +] [ + gl_FragColor.rgb = mix(reflect, refract, invfresnel*0.5+0.5) + spec*light; +] +watershader "waterenvfadefast" 0 1 [ + vec3 refract = texture2DProj(tex3, texcoord0 + vec4(0.3*dudv, 0.0, 0.0)).rgb; + gl_FragColor.a = texcoord0.z + 4.0*texture2DProj(tex3, texcoord0).a; + vec3 bump = texture2D(tex1, texcoord2 + 0.025*dudv).rgb*2.0 - 1.0; + float invfresnel = clamp(dot(camvec, bump), 0.0, 1.0); + vec3 reflect = textureCube(tex0, camvec - 2.0*invfresnel*bump).rgb; +] [ + gl_FragColor.rgb = mix(reflect, refract, invfresnel*0.5+0.5); +] +fastshader waterenvfade waterenvfadefast 2 +altshader waterenvfade waterenvrefract + +causticshader = [ + lazyshader 0 $arg1 [ + attribute vec4 vvertex; + uniform mat4 camprojmatrix; + uniform vec3 texgenS, texgenT; + varying vec2 texcoord0; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + texcoord0 = vec2(dot(texgenS, vvertex.xyz), dot(texgenT, vvertex.xyz)); + } + ] [ + //:fog vec3(1.0) + uniform vec4 frameblend; + varying vec2 texcoord0; + uniform sampler2D tex0, tex1; + void main(void) + { + @arg2 + } + ] +] +causticshader caustic [ + gl_FragColor = vec4(vec3(frameblend.x*texture2D(tex0, texcoord0).r + frameblend.y*texture2D(tex1, texcoord0).r + frameblend.w), 1.0); +] + +lazyshader 0 "lava" [ + //:fog + attribute vec4 vvertex, vcolor; + attribute vec3 vnormal; + uniform mat4 camprojmatrix; + varying vec4 color; + uniform vec4 lavatexgen; + varying vec2 texcoord0; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + color = vcolor; + vec2 tc = mix(vvertex.xz, vvertex.yy, abs(vnormal.xz)); + texcoord0 = (tc + lavatexgen.zw) * lavatexgen.xy; + } +] [ + uniform sampler2D tex0; + varying vec4 color; + varying vec2 texcoord0; + void main(void) + { + gl_FragColor = color * texture2D(tex0, texcoord0) * 2.0; + } +] + +lazyshader 0 "lavaglare" [ + //:fog + attribute vec4 vvertex, vcolor; + attribute vec3 vnormal; + uniform mat4 camprojmatrix; + varying vec4 color; + uniform vec4 lavatexgen; + varying vec2 texcoord0; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + color = vec4(vcolor.rgb*2.0 - 1.0, vcolor.a); + vec2 tc = mix(vvertex.xz, vvertex.yy, abs(vnormal.xz)); + texcoord0 = (tc + lavatexgen.zw) * lavatexgen.xy; + } +] [ + uniform sampler2D tex0; + varying vec4 color; + varying vec2 texcoord0; + void main(void) + { + vec4 glow = texture2D(tex0, texcoord0) * color; + float k = max(glow.r, max(glow.g, glow.b)); + gl_FragColor = glow*k*k*32.0; + } +] + +lazyshader 0 "waterfall" [ + //:fog + attribute vec4 vvertex, vcolor; + attribute vec3 vnormal; + uniform mat4 camprojmatrix; + varying vec4 color; + uniform vec4 waterfalltexgen; + varying vec2 texcoord0; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + color = vcolor; + vec2 tc = mix(vvertex.xz, vvertex.yy, abs(vnormal.xz)); + texcoord0 = (tc + waterfalltexgen.zw) * waterfalltexgen.xy; + } +] [ + uniform sampler2D tex0; + varying vec4 color; + varying vec2 texcoord0; + void main(void) + { + gl_FragColor = color * texture2D(tex0, texcoord0); + } +] + +lazyshader 0 "waterfallrefract" [ + //:fog + attribute vec4 vvertex, vcolor; + attribute vec3 vnormal; + uniform mat4 camprojmatrix; + uniform mat4 watermatrix; + varying vec4 color; + uniform vec4 waterfalltexgen; + varying vec2 texcoord0; + varying vec4 texcoord1; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + color = vcolor; + vec2 tc = mix(vvertex.xz, vvertex.yy, abs(vnormal.xz)); + texcoord0 = (tc + waterfalltexgen.zw) * waterfalltexgen.xy; + texcoord1 = watermatrix * vvertex; + } +] [ + uniform vec2 dudvoffset; + uniform sampler2D tex0, tex2, tex4; + varying vec4 color; + varying vec2 texcoord0; + varying vec4 texcoord1; + void main(void) + { + vec4 diffuse = texture2D(tex0, texcoord0); + vec2 dudv = texture2D(tex2, texcoord0 + 0.2*diffuse.xy + dudvoffset).xy; + vec4 refract = texture2DProj(tex4, texcoord1 + vec4(4.0*dudv, 0.0, 0.0)); + gl_FragColor = mix(refract, color, diffuse); + } +] + +lazyshader 0 "waterfallenvrefract" [ + //:fog + attribute vec4 vvertex, vcolor; + attribute vec3 vnormal; + uniform mat4 camprojmatrix; + uniform mat4 watermatrix; + uniform vec3 camera; + varying vec4 color; + uniform vec4 waterfalltexgen; + varying vec2 texcoord0; + varying vec4 texcoord1; + varying vec3 camdir; + varying mat3 world; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + color = vcolor; + camdir = camera - vvertex.xyz; + vec3 absnorm = abs(vnormal); + world = mat3(absnorm.yzx, -absnorm.zxy, vnormal); + vec2 tc = mix(vvertex.xz, vvertex.yy, absnorm.xz); + texcoord0 = (tc + waterfalltexgen.zw) * waterfalltexgen.xy; + texcoord1 = watermatrix * vvertex; + } +] [ + uniform vec2 dudvoffset; + uniform sampler2D tex0, tex1, tex2, tex4; + uniform samplerCube tex3; + varying vec4 color; + varying vec2 texcoord0; + varying vec4 texcoord1; + varying vec3 camdir; + varying mat3 world; + void main(void) + { + vec4 diffuse = texture2D(tex0, texcoord0); + vec2 dudv = texture2D(tex2, texcoord0 + 0.2*diffuse.xy + dudvoffset).xy; + vec3 normal = world * (texture2D(tex1, texcoord0 + 0.1*dudv).rgb*2.0 - 1.0); + vec4 refract = texture2DProj(tex4, texcoord1 + vec4(4.0*dudv, 0.0, 0.0)); + vec3 camvec = normalize(camdir); + float invfresnel = dot(normal, camvec); + vec4 reflect = textureCube(tex3, 2.0*invfresnel*normal - camvec); + gl_FragColor = mix(mix(reflect, refract, 1.0 - 0.4*step(0.0, invfresnel)), color, diffuse); + } +] +altshader waterfallenvrefract waterfallrefract + +lazyshader 0 "waterfallenv" [ + //:fog + attribute vec4 vvertex; + attribute vec3 vcolor, vnormal; + uniform mat4 camprojmatrix; + uniform vec3 camera; + uniform vec4 waterfalltexgen; + varying vec2 texcoord0; + varying vec3 color, camdir; + varying mat3 world; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + color = vcolor; + camdir = camera - vvertex.xyz; + vec3 absnorm = abs(vnormal); + world = mat3(absnorm.yzx, -absnorm.zxy, vnormal); + vec2 tc = mix(vvertex.xz, vvertex.yy, absnorm.xz); + texcoord0 = (tc + waterfalltexgen.zw) * waterfalltexgen.xy; + } +] [ + uniform vec2 dudvoffset; + uniform sampler2D tex0, tex1, tex2; + uniform samplerCube tex3; + varying vec2 texcoord0; + varying vec3 color, camdir; + varying mat3 world; + void main(void) + { + vec4 diffuse = texture2D(tex0, texcoord0); + vec2 dudv = texture2D(tex2, texcoord0 + 0.2*diffuse.xy + dudvoffset).xy; + vec3 normal = world * (texture2D(tex1, texcoord0 + 0.1*dudv).rgb*2.0 - 1.0); + vec3 camvec = normalize(camdir); + vec4 reflect = textureCube(tex3, 2.0*dot(normal, camvec)*normal - camvec); + gl_FragColor.rgb = mix(reflect.rgb, color, diffuse.rgb); + gl_FragColor.a = 0.25 + 0.75*diffuse.r; + } +] + +lazyshader 0 "glass" [ + attribute vec4 vvertex; + attribute vec3 vcolor, vnormal; + uniform mat4 camprojmatrix; + uniform vec3 camera; + varying vec3 color, rvec, camdir, normal; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + color = vcolor; + normal = vnormal; + camdir = camera - vvertex.xyz; + rvec = 2.0*dot(camdir, vnormal) * vnormal - camdir; + } +] [ + //:fogrgba vec4(vec3(0.0), 1.0) + uniform samplerCube tex0; + varying vec3 color, rvec, camdir, normal; + void main(void) + { + vec3 camvec = normalize(camdir); + vec3 reflect = textureCube(tex0, rvec).rgb; + + float invfresnel = max(dot(camvec, normal), 0.70); + gl_FragColor.rgb = mix(reflect, color*0.05, invfresnel); + gl_FragColor.a = invfresnel * 0.95; + } +] +lazyshader 0 "glassfast" [ + attribute vec4 vvertex; + attribute vec3 vcolor, vnormal; + uniform mat4 camprojmatrix; + uniform vec3 camera; + varying vec3 color, rvec; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + color = vcolor; + vec3 camdir = camera - vvertex.xyz; + rvec = 2.0*dot(camdir, vnormal) * vnormal - camdir; + } +] [ + //:fogrgba vec4(vec3(0.0), 1.0) + uniform samplerCube tex0; + varying vec3 color, rvec; + void main(void) + { + vec3 reflect = textureCube(tex0, rvec).rgb; + const float invfresnel = 0.75; + gl_FragColor.rgb = mix(reflect, color*0.05, invfresnel); + gl_FragColor.a = invfresnel * 0.95; + } +] +fastshader glass glassfast 2 +altshader glass glassfast + +lazyshader 0 "grass" [ + attribute vec4 vvertex, vcolor; + attribute vec2 vtexcoord0, vtexcoord1; + attribute vec4 vtangent; + uniform mat4 camprojmatrix; + uniform vec3 camera; + uniform vec3 grassmargin; + varying vec4 color; + varying vec2 texcoord0, texcoord1; + varying vec2 bounds; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + color = vcolor; + texcoord0 = vtexcoord0; + texcoord1 = vtexcoord1 * @lmcoordscale; + vec2 camdir = (camera.xy - vvertex.xy) * grassmargin.y; + bounds = vec2(dot(camdir, vtangent.xy), dot(camdir, vtangent.zw)) + grassmargin.z; + } +] [ + //:fogrgba vec4(0.0) + varying vec4 color; + varying vec2 texcoord0, texcoord1; + varying vec2 bounds; + uniform sampler2D tex0, tex1; + void main(void) + { + vec4 diffuse = texture2D(tex0, texcoord0); + diffuse.rgb *= 2.0; + vec4 lm = texture2D(tex1, texcoord1) * color; + lm.rgb *= lm.a; + float margin = clamp(min(bounds.x, bounds.y), 0.0, 1.0); + gl_FragColor = diffuse * lm * margin; + } +] + +shader 0 "overbrightdecal" [ + attribute vec4 vvertex, vcolor; + attribute vec2 vtexcoord0; + uniform mat4 camprojmatrix; + varying vec4 color; + varying vec2 texcoord0; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + color = vcolor; + texcoord0 = vtexcoord0; + } +] [ + //:fog vec3(0.5) + varying vec4 color; + varying vec2 texcoord0; + uniform sampler2D tex0; + void main(void) + { + vec4 diffuse = texture2D(tex0, texcoord0); + gl_FragColor = mix(color, diffuse, color.a); + } +] + +shader 0 "saturatedecal" [ + //:fog + attribute vec4 vvertex, vcolor; + attribute vec2 vtexcoord0; + uniform mat4 camprojmatrix; + varying vec4 color; + varying vec2 texcoord0; + void main(void) + { + gl_Position = camprojmatrix * vvertex; + color = vcolor; + texcoord0 = vtexcoord0; + } +] [ + varying vec4 color; + varying vec2 texcoord0; + uniform sampler2D tex0; + void main(void) + { + vec4 diffuse = texture2D(tex0, texcoord0); + diffuse.rgb *= 2.0; + gl_FragColor = diffuse * color; + } +] + +shader 0 "skybox" [ + attribute vec4 vvertex, vcolor; + attribute vec2 vtexcoord0; + uniform mat4 skymatrix; + varying vec2 texcoord0; + varying vec4 color; + void main(void) + { + gl_Position = skymatrix * vvertex; + texcoord0 = vtexcoord0; + color = vcolor; + } +] [ + varying vec2 texcoord0; + varying vec4 color; + uniform sampler2D tex0; + void main(void) + { + gl_FragColor = color * texture2D(tex0, texcoord0); + } +] + +shader 0 "skyboxglare" [ + attribute vec4 vvertex, vcolor; + attribute vec2 vtexcoord0; + uniform mat4 skymatrix; + varying vec4 color; + varying vec2 texcoord0; + void main(void) + { + gl_Position = skymatrix * vvertex; + color = vcolor; + texcoord0 = vtexcoord0; + } +] [ + varying vec4 color; + varying vec2 texcoord0; + uniform sampler2D tex0; + void main(void) + { + vec4 glare = texture2D(tex0, texcoord0) * color; + gl_FragColor.rgb = vec3(dot(glare.rgb, vec3(10.56, 10.88, 10.56)) - 30.4); + gl_FragColor.a = glare.a; + } +] + +shader 0 "skyfog" [ + attribute vec4 vvertex, vcolor; + uniform mat4 skymatrix; + varying vec4 color; + void main(void) + { + gl_Position = skymatrix * vvertex; + color = vcolor; + } +] [ + varying vec4 color; + void main(void) + { + gl_FragColor = color; + } +] + +loop i 2 [ + lazyshader 0 (? $i "atmosphereglare" "atmosphere") [ + attribute vec4 vvertex; + uniform mat4 skymatrix; + varying vec3 camvec; + void main(void) + { + gl_Position = skymatrix * vvertex; + + camvec = vvertex.xyz; + } + ] [ + uniform vec4 sunlight; + uniform vec3 sundir; + uniform vec3 sunweight; + uniform vec3 sundiskcolor; + uniform vec2 sundiskparams; + uniform vec4 opticaldepthparams; + uniform vec3 mieparams; + uniform vec3 betarayleigh, betamie, betaozone; + varying vec3 camvec; + + void main(void) + { + vec3 camdir = normalize(camvec); + float costheta = dot(camdir, sundir); + + // sun disk + float edgeoffset = max(1.0 - (1.0 - max(costheta, 0.0)*costheta)*sundiskparams.x, 0.0); + // limb darken with distance to edge + float limbdarken = sqrt(edgeoffset); + // lighten edges for corona, but limit it to not interfere with limb darkening + float corona = min(edgeoffset * sundiskparams.y, 1.0); + corona = max(0.75 / (1.5 - corona * corona) - 0.5, 0.0); + // apply limb darkening and corona to clamped sunlight color + vec3 sundisk = sundiskcolor * limbdarken * corona; + + // optical depth along view ray + float offset = camdir.z*opticaldepthparams.w; + vec3 depth = sqrt(offset*offset + opticaldepthparams.xyz) - offset; + vec3 rayleighweight = betarayleigh * depth.x; + vec3 mieweight = betamie * depth.y; + vec3 ozoneweight = betaozone * (depth.z - depth.x); + + // extinction of light along view ray + vec3 viewweight = sunweight - (rayleighweight + mieweight + ozoneweight); + vec3 extinction = (exp2(viewweight) - 1.0) / viewweight; + + @(? $i [ + // only glare sundisk, excluding other scattering + // squared (by skipping gamma encode) to limit it + gl_FragColor = vec4(sundisk * extinction, sunlight.a); + ] [ + // calculate in-scattering + float rphase = (1.5 + 0.5*costheta*costheta) * (3.0 / (16.0 * 3.14159265)); + float mphase = inversesqrt(mieparams.x + mieparams.y*min(costheta, mieparams.z)); + vec3 scatter = rayleighweight * rphase + mieweight * (mphase * mphase * mphase); + + // combine scattering and extinction with sundisk + vec3 inscatter = (sunlight.rgb * scatter + sundisk) * extinction; + + // gamma encode + gl_FragColor = vec4(sqrt(inscatter), sunlight.a); + ]) + } + ] +] + diff --git a/data/guicursor.png b/data/guicursor.png new file mode 100644 index 0000000000000000000000000000000000000000..b392f2f75275006b250dc2e239dcf9f30f08ccf8 GIT binary patch literal 3052 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 S6r}=8nhc(c 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 Oa2<`a>iH+p*Z%`j7IBpT literal 0 HcmV?d00001 diff --git a/data/guislider.png b/data/guislider.png new file mode 100755 index 0000000000000000000000000000000000000000..14cf7bc9074f69bfa1626a4a01b08f8dbe608ca3 GIT binary patch literal 1339 zcmV-B1;qM^P)J9<2)2ScI^E0Cslz`KvMxLRA9l|@g6K$@)Rt10eA((j}WRDF`X$@+Jq*y zzm-iKyEA-u6{+sY^}Xkwb3;0v4$jWbpp?Sy?k-MGPcfZNadB~>2qC21ZX?Swb$xwJ zdc7X5uC8!*cLzcU&d<+5JDm;)ApihMDZ(%W=Nvi~iv<9nC<-X0pp*h31e8+T+}wb2 z&OrzPAp}xNlx2ysEYXZ4NsuH7f*>$JN-41Y{e3XTAf?1|xy1ebJ*LyC1Mu?lf;`WW z=Q$W-pp*gt*sou|FdPmcr9>1(7!HSEj5z>lnxfb1nV0FHtJMlhDF6T=1W^a}LegdKaihQc8hRx|RoV96MA70QTd@55ulJ&++*9=%sR&WoWfpsH)0tW0qxz zq6kt-Fvig9^}NH>YPHa6wGae>MP*iJol?rwqZzlix7ga+!fZA}6h&Vd=vmN3jN=$l z6gdFH;Shtt08tb{2=P^e=G)fI!p6o1Ha9oHIk&ISuabh}-oX$r=e$<$EU*NJBI`+fBLeQ?epg!lr`8E8QX zf&f7fH~@K`qbLeUDQ!j451QlaidYl{@;rwS0`;tEvu$;rH`}?6@;clEiZ7<#LJTa_Im> zQDnr_0?4xLYu{lEX_|VSNdxO?G^(t(4&7gEVa=G&=ZNDNRaMzM7>z~%U^&z8-@m;Z z3g;Yk-T(l7eSI~BOOgbKhle;gIQZ+1)aVYi6iEo-?E>co*5udlE8 z{QN{w6!tJR5BglGX|7fV-<^f6tt|`&1B78{>%n(5G0QTuU|G&o=Yelq*P*r2=|Xe% z*Ihw-X0t|YG#WW8j*mzW4-feG_;4j{GMQLJ+TY)YW@kN)j*c)MkI`c+*Fu#8MNDNwA*cW8hvl{ z6*0>)qlwlP>Z`6^_kF8weN(k~kR*vg6GC9ISa^Lw51HdkdUewo=x^kI0T>B>!R~lw}DiB`z;7@gJQwbV3CwXtV$T002ovPDHLkV1mLaU_}4` literal 0 HcmV?d00001 diff --git a/data/heightmap.cfg b/data/heightmap.cfg new file mode 100644 index 0000000..1bb72fb --- /dev/null +++ b/data/heightmap.cfg @@ -0,0 +1,138 @@ +// this config defines various heightmap brushes + +// a brush has two parts: the brushmap and the brushhandle + +// the brushmap is a 2D field that defines how the brush affects a heightmap + +// the brushhandle is a 2D vertex on the brushmap. +// this handle is a reference point on the brushmap which represents +// where the editing cursor is pointed at. + +// clearbrush : resets the brushmap +// brushvert : set a point on the brushmap +// brushx : the x coordinate of the brushhandle +// brushy : the y coordinate of the brushhandle + +brushhandle = [ + brushx $arg1 + brushy $arg2 +] + +brushindex = -1 +brushmax = -1 // make sure to bump this up if you add more brushes + +selectbrush = [ + brushindex = ( + $brushindex $arg1 ) + if (< $brushindex 0) [ brushindex = $brushmax ] + if (> $brushindex $brushmax) [ brushindex = 0 ] + do [brush_@brushindex] + echo "heightmap brush set to:" $brushname +] + +brushverts = [ + loop y (listlen $arg1) [ + bv = (at $arg1 $y) + loop x (listlen $bv) [ + brushvert $x $y (at $bv $x) + ] + ] +] + +newbrush = [ + brushmax = (+ $brushmax 1) + do [ + brush_@brushmax = [ + brushname = [@@@arg1] + clearbrush + @@(if (> $numargs 1) [result [brushhandle @arg2 @arg3; brushverts [@@arg4]]]) + ] + ] +] + +newbrush "Circle 1-0" 0 0 [1] +newbrush "Circle 2-1" 2 2 [ + "" + "0 0 1 " + "0 1 2 1 " + "0 0 1 " +] +newbrush "Circle 4-2-1" 2 2 [ + "0 0 1 " + "0 1 2 1 " + "1 2 4 2 1 " + "0 1 2 1 " + "0 0 1 " +] +newbrush "Square 3x3" 1 1 [ + "1 1 1 " + "1 1 1 " + "1 1 1 " +] +newbrush "Square 5x5" 2 2 [ + "1 1 1 1 1 " + "1 1 1 1 1 " + "1 1 1 1 1 " + "1 1 1 1 1 " + "1 1 1 1 1 " +] +newbrush "Square 7x7" 3 3 [ + "1 1 1 1 1 1 1 " + "1 1 1 1 1 1 1 " + "1 1 1 1 1 1 1 " + "1 1 1 1 1 1 1 " + "1 1 1 1 1 1 1 " + "1 1 1 1 1 1 1 " + "1 1 1 1 1 1 1 " +] + +newbrush "Smooth 3x3" 1 1 [ + "0 0 0 " + "0 " + "0 " +] +newbrush "Smooth 5x5" 2 2 [ + "0 0 0 0 0 " + "0 " + "0 " + "0 " + "0 " +] +newbrush "Smooth 7x7" 3 3 [ + "0 0 0 0 0 0 0" + "0 " + "0 " + "0 " + "0 " + "0 " + "0 " +] + +newbrush "Noise 25x25" 12 12 [ + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 " + "" + "0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 " + "0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 1 0 0 1 0 0 2 2 " + "0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 " + "0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 1 0 0 0 1 1 0 0 1 " + "0 0 1 0 0 0 1 0 1 1 0 0 0 0 1 0 0 1 0 0 0 0 2 " + "0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 2 " + "0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 " + "0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 " + "0 1 0 2 0 1 1 1 1 0 0 1 0 0 0 0 1 " + "0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 " + "1 0 1 0 0 0 0 0 1 0 0 0 1 0 1 " + "0 0 0 0 0 0 0 1 1 0 1 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 " + "0 1 1 1 0 3 0 2 0 0 0 1 1 0 0 0 1 1 " + "0 0 1 0 0 1 0 0 1 0 1 1 0 1 0 0 0 0 0 1 " + "0 0 1 1 0 0 0 0 2 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 " + "0 1 1 0 1 0 0 1 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 " + "1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 1 " + "0 0 0 1 0 0 1 0 1 1 0 0 0 0 0 0 0 1 " + "0 0 0 0 0 0 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 " + "0 0 0 0 1 0 1 1 0 2 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 " + "0 0 0 0 0 0 0 0 0 1 0 1 " + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 " +] + +do [ brush_2 ] // 421 + diff --git a/data/hit.png b/data/hit.png new file mode 100644 index 0000000000000000000000000000000000000000..3f590d8395574669f96b1c0e40571d48f72d115a GIT binary patch literal 252 zcmVJ6{?c^q- zM7erCfYZmE((_C7`#o5a67!2OKUiMR zRTZ#i`gp=HFJMP`ZFvBwOd!0q#=*QZ*{VI)27o{g0DwgTz%`}`whaJ20sydM1ppEV z0HAWuY|xj&{DJSTX5s|^e60UHSpNC4zL-WlZ*^^DygxWpSO9NRiRc|>NI+dl-oSr$ zui4m(ZRQL8Hfd3gGKGfEFG{ZsBF9v-HFsq2T;0DBr`qm(Y7*o;&0_k`SAITe3i1OF zNpGMBQjDCeLgbT^3&3@-g8-2JDHpc3l6}IDJ*r$mB-fX%c{9VibVnw8y3`wR`m_LmO4i=v}U0A zO{y~77(%UabL@$UDx9Yu&;rcxY5G^wR^*5c-t0a)peA-$ECYKmzp`cUqG61)%&4#Txpu;%F>pKrk0Rzd_od+L36%cK!9Y zV*6s4?bStLIS@0E3ug$~m>??)_J}KUPY8&-8Pzt4U7P07;o)C7mAkzN7_rAhxZ5IJSyr@Mo-97g4osSoJxvRu523v-L%}%zw~Ry4zRmP8QRgml zSG-*1#B2#YeS+)$#x~-$`y(oQFJr7$PkA{d>_+nGvph6>yAf3$g%XAz5YkRtemEz~ zvcqgg4sh0ps0l|my|gAjZPdWmqN8^7l1Zk!JadGtgAJ=}o%dXg_JnYoes+o`vupas zl}g(F9^v+R1B$4^s-g4=b7YtLA~Ys=i4REHc^x!d%WxuwK|MTr8v=}5e-SIxMLZlP zRi=0_@dBs)DjH|k-z2dndlhjhn+VMOteZbZ0<=bET>8*(n!(ykuf>2)$O~>Wj0n&J zaNMJ}yOl0Bui^Do+9-7ArNnRF>eWyUwN5P$`fvvt!S;gPHyZVyiM7yJ0{`(7035?- zOU4k+^2W7hsL3Hg^LOY?-!0;~-Nw&m62EuXDAVeQn^NdKMl+{HlX0kB|06R52>f7B zWaJLhNg&Aqv^n*Ax zec{wr^BXHx>j$N)&a(x=Thv*&eqs)K9z7qh(+EF{3J&CjH;ZCf5^@^2Xv>cx=T-q0{>Lr=kxPr6EX))T)NM-He zvit?W5YluN)MJ8Xv5~-0=u5LO!n65)WQ z_}X+Ij!x=cDqyweD@q}CL5F&P(0SNN`_8td)-L-|t$_McOTwnJ^NV92@vU1&!M56q zt>}7=BhA!3NY_Fh=3+!KEv#h9p+%0!j)++NOtMYcGrUrL z;{}4H6r1$|h<&ie1s8Uj-g~^s#wioEq%N=A=c#-4pM-YexOxfqfUE5RM{r#xY)ZMg z#J^3r_BC_s^%Ff*;sMHBU%$Q?7pAWl3v z8HrSgYoh|{d3Y7o6Dn|zww9)T7VBS9!g*1>N4iC}<|-)siDW+Vr#)w7WE~lXvqFSm z@?8wQQ?YUy8~CUWD^U~?%O8+sbMrmzj)dk`BmKp)evyG$7F5oH7Y2fzZnk8?^6v35lK zutQZ2UVkhd`mS%lLF)TxnU<$dQ^5@tU3({oV@Nk38> zU%}p9X=$;X8D=#fEc%mwl90+qFR$=MNMD>k?%@+yTA|Gci_KMq0-Q0ac+8B=*0|dy z%Y4Nzmjo@B6etoT6<>#BP)p7&`zkh+`4LYK>)XSF5C<%z@1&UB<5^U;X{;Q5w4eVI z+zlcp60i?VX1_@Xn4koilcB!yN3Zg^OLEuB=*R2O25bx?8|EU3KGyHOKua_Vd8~Y0 z9=H&*(uMt-2uqAb3&jPt54JfJ-oV*PKIiY}$hc_tJz#%M5Nc7jgRh_tucZ<=AU9aR z$Ayg?Vo@;i)n3SiPdDJ#PXL|CET0fq{Vkxe z0<~dG!l%BJCN?@##i)Is*iv57ny=952GVbm3Wj{&&|jh8#_nYU8LzgbAYwi@j4h_w zBJ=qKJ~UUU`S$=TRQ4~1U7F|Q0&-YAMU^}z4-A`h`YrAHG>op?0EEz<9{xX8d$qVwjc|?EN%|!y_f?#kSYJ`m)qvE zZ4i%Fz7AO%OyRTq6D@tDf5eyzMd83rz2_PGAj57h)h1 zoH4I+V&EBe1Ad0gi}{0P__0Su0e_IJn0i^F7_{4t(rWHfh1d&Z%x_XC3|7iDKWk9O zy8Z#Qf@?9x)M}R+LZZj-FQWt%au=K+LSY*SHrh`3+)khyqXj5mus_wjO^OU1k)xh> zNSD1BvOk|iagc(o?)H}cQ)?$26gz01Kp|@pzjzkKi1kM%qU2vy_=0d%i*Q7WO=$6r zDMvl=mDfk6!e=(t<@UHyT!ZH}Z_zkft3NQ^Zx(@i<>m2;yh^OpYoAGmJj7S;J6|Gb z8YGb%;D>%M`Ht-$!St2D6)l#U_Dx3O#X;Fm#h+{(31Zs_cp;^@C|JvOWb*kNgohC4kIn{+C)purx35A|{Vyh*~J+kdISsn<2d z=XYrJm`Y-bAa=$Wl!qan`HUx6TNZ2VF(`w?WEE=2vc3dd;g|ZNM;=GOF6n^$&pp zd`{W`KT#HR84vh=gc;?6gUy?}#d2geC*=9{N63co_29JJQ%XTYo>67;CaQY%$0Fev9qVgJ^8tb* zi`O?In0~dR>-tV=Ar4e_Za0NV)H2zA8FRt!1US4D(!}{}eC4qx$v3+JoK%_cgU)Gd zP~(3_opeB-U9|S<21h~2mJnszfMUQ_)Q;w6(F-D4P6NK4oTh=bjD6yNG{g;^9Z-*Z z|0$ubWQBE&rz-L9CmKpBSlk13!!=oih}FT@q>N-M#(ykoowS$;Or| z>xy+Ltus}_QpoGuO(FWGh*IC{ee+`p{6}n{wexmJx?zkHvRbgUsbfja{h5%rF6d!pH(@CI|CU@$FTbW+Jfce)^Qi|c zN-Sh7dM;jk-G&`0v*K3&AmNx7`x0#UW>Ea%+ubsjLV@ur9$!d`*lngw=zk0UMs&mr zN?CQi<};egos(n(8hn=+cgC(pNS|U$uT*Lk_{SDcx%VNm9vD74x!jRFnD*WJjkNsn zKWD$72N>MyGSFj3w%Z}Axb1?T!zs6)h>EFDTnu0ZYeNlsqG}i9s1aq)vfpKLYyAA6 z2l!1bgE&PI7$zMO!?3-yLpIBQB6(Qt-i8a@s-?g3Ns?L)vdoF0yB=i^Uxuc9pQ4Qb z`GhmI?`*N>NGiu*abO6B2cU=z`iOL`E)!Wt1~s1g*evIpwCmyxtLlj9tr zl*|%Lqwy_cYgh~yVUu0YZCT!3*)l2QVwBg#rZg2dv)VYENEC zBh4pNUxS!iwoIm7A{Oev9-pIBQ1Bc2Mt zWA#A6Mi~X8%ZG+qWwxli10vn1?XAYbq(^co#KS<7F2`klrILN%uMu-_dT{tuu5MF6@JvLuI%brShX7&30)FvuqBdxnEFv-d?fvJgENVrAbN`GR)3v+Sm93@R z#+!&6N-rMhH9R3ehU?=DC*%Ps!S`xPJ@|}u3oy#go^IDi2HcGxOjVWx6Mz%(c4w>T zhnKzmnS*7q!1Gt(J9qvHOd&9?R6o>(1g@4QWb9goREJkn9pws1l*it3Ks){uLs@4{MSN)jd7pq|s7=2^h_Dgs)B+`0Yd*3a?dmxRJ?UxM)f*&K-n2~s}mhV3| zS*oN|@?r%mqf9xRZb%G+Os!+}4l1ud;N6<%T#2-oKqqgT6;h7s2iEABKev9~q|DCi z=g_3p6zq|_P1?<(QR`Mu;z$$Iv`XVK5yC?y=nb9LzZ>0|;yhBv55!Ly8=%1|Q$3&T z@pgELGhTk_gO@vc1u-;plcT&Cn|Gv6Hkg~ERlw`Tm1XUI=`K60^&8}`E{Mqv*u?>t z<(Sil=peg=px7CaA=x?wR*5dt^F2(CW0y>!ryF2C_v={<8~!)H;bAeh@B6QnFT85x zbhgGt!z*YK9(;$JZVnp2#IGvACAU!74=}=wbOO=(UGkdRFdbf1V|sfF@j(WKCnJ`t z!ne)AhUsbZON!upszk3*HjzF72OkQjd~c!spo(_AAtWq2PBJ~tSSDTE&wL5ctR$BY@eNTDhO+3dF^w#NE3bnwN6!Y z;5$(St)S-%2$!)Vwu~W_ownGIp6JW6)JJcqXNbTZHJ>94DdBs!);nlV2Or2-G z&TVE#TQ|2?+y*8qh6h_qGI({MU_-A0pG;kiQUcpt>5Q7*`Vp-)6K(4A2Nx8cVC9?;k>dKUrQm3g!FGaO;z@zf!~;s^#CdP zl&pW$^7$KsW>z_6-N8z*@yFUjltyMQkz5(`^3p~>OjzA=i*e>Rb`$F3G@Ro}SEJLh zzDg*9ZDf?5I9W5yhyWR4_y!vfDh@q|?^VbD4LSf;b7&qpjLvgblE7Ly9yh<|60g(} zJx@WFe>LCFjUiv;e5qc0*Lj!Aum7lQJ$dtb{yg!ZHtQ2?I1rQFk}DrD<-f`%`aTp zoDcOObmy7j%xXjnzPp71(K(lMX=X?L08R%5hPj1A?r{ejbwKDxjjk(9XcB$T>Xx@d zf2;!+2JfR@U^hkpzEo!oaz4>^-ao|f{hzvGrIV&!(`=H*9BYUBJmK(ND&OTVWhNQ+)A13!LLrp-#KwiH)JOA3qFR+eu7EMs z#68d^cjx>BB@&H;LaXE2^YZ*HzUe0eI2!r*jwBR(>ky|8%3MF$gV5;i-dfV{za%zg zT9wSj^pcDRZU_0oy=YPxb3c?Ut(}kT2eVD-slYFzZp7u9$@3lM5F=Lnh_x>vOAU>? zxQHw?FfMilsP!e-p>YA@?ZB@!ou2ei!$*&gk~Aemr`QV$%QYiK>)I_Ixj*7AjQKYC zKJRi>QK*g8HXyySnN%U|=WM@l+V)BCg^aflZ? z{}rz@CR||NDRm0b(v9&-(`X)Y0zdDfM^ky={6k`b0 z{NFEwc6Fl?K&UzpBscn;XCJ|%vBB4W>&nzQHQdL<9zVLZbx7t-U~BcmThVZk$0Q`H z2NPCs)k)`THpOrWj%{7NVLt06f`54bU57NwbObPSKDWVD`~3S5b>_PEDsu9gdJLa( z_g#D&PvfdM?+Fqd(HHt0xFrsEfXkhNm?eW$n8r#h?O$?&t0)X?ieh^9nFh&dSc&Aw ztSHVm;2tnN1+Ro2|KX8&c0~i4cuo@?(ute_N@Le?8_OS%eIL-W=uzf|kj2Nvm7g^i zJ}l?Pt8d?rYRje>KN~@N>|&gbKA^WOD#xz<%Z*6B)P-|XhGftOqZ}7>UX3CLb#l@- zvm#a=?p!Pav)>wY|Y2zyHeT+=B992ei(UP2#z*xeXDDUYZOgM)y(Y!px$4vIHuxO@}S!P%Q(XvRTtHofsGZy;M zPb-N=&^HCb#}2$`p`XTeh{^>iInC&JJ24P&rW-T?r5dmJ`vA(ed)k{KEvP3U;O7P1 zx7-lIS(svO_t(V#;hGb}?5me>Uu3uW*fTueLip#<4qzRxmXPy=K|Xx>EusHs!ukkw z-xrm4*Gxqwl|#y?5Ph0TaA=<^5x{lKLWx(yNYOKqNKZa{l| z#<#d*O0R>SyqUECG82qt`wrB{=vA1h2(qeAg+*&HY)0<6I4_GaEuYo%W2I?0G>sT} zDSZI*r46V3%*xdW^u`}%Wju_p?2X4-?xs%#fwrdQj$}qIrY$VjkW_>bGd|$9s`o2B z2X3N0rLLYC8Rub>EIXL}lraG3SGoa=m4e8EEj#PCV#!Q9C_rzp!l}&5RZCEKG-+|U z(3<&-wV+OMv{?>e7|e)l8-P@q26RGyEs;jt<;0&NwgO@V=9EOD;0@`r9Mz36gnQ`2 z!85KKSIx3PIF5rbj6dA6$_Wof2k9D84DDn1iqM?n^m@*avl{SLc{c~?Y!?y8oh2c1 z4mBuH#Z7tusZX=B*M#H|nnDCsc|D0e@f;jg6QG}+CP0@E=DR1GbzM$bDL%Ygu$2r@ z-{H7#>WF)st=^Y23p)RlrPEt-CXPl*pk4=frsDNM@4iP%_^YY- zE2O!BiA74e|Ly3;StG;)g$H@DGNs2ZVl(CM7>*;R!d|6EEBQ*%(60~=cK#=%V?)F$ z{M77V`rpX@&!QK&q%TG&fjW~1Y04&;fD7Gk@G#glmV{ULhPjyK4YJt}`W9$qc8`l2 z$|B#3kNtCXcTt}Z7nR@38x}7heegsfD_5u&+ccKTm+uuy9ql!|cEH4j^VDgbJv^lA zJVd~jng3P%^A>BA(<}#kHAs4buwmfCM^n5ZbLMKB5bX_xjR)@g7%6#8bR=vLQon{f zgm`Le?pY?tyV?V<>^pPta>#j(!C|}&4=_RqA zV4tmmK$Hy$oz@=zOq>fIlnA!phmy3R7 z&2+ll4eH$QBdXr|=7}Sqt}d_;hcbDKHjn(S7XOB!t-yb}DT!=wriC|Xu2y>r)D#n~ zllKw!(>FJ?1E(7<|gjS;?D5EKsUg(k@?4AK3gaz;!I@ft?=(pAW>ScZ&PXNcnteXuBZ;a?~P zzrliS&#?J}_XRfwdCeOFsV7-%xouNfoxcBnEWkPAz4j?h4&9+!Dn!9_U}d)k z!cl>-)jhyKYM47O$FH6~j_&KHQg2dZC7pKX?rfI5{V@3+-R!MO9iSglrf3V}`fj0Y zIB?-Ou~8cc;dS#Y75RlZx|koVQ4|xMH$r}ef&Ti@a7%3-hI~~NXJx#2L8<0QyjLFE zPLYLUgFs;UyUe8$!pu@Jd-t(}EzsOoR7y@oBi>O@6(B7iot{xlNXoBPY$S7HX)l@$}VE|2iM}vpOQZN5Exd&u=2zL%~#`b6okOJ%T-lPhXk? zvfUc)13IL=#gGYsH@ULgnV*8_{Zcc&@Y8RuCAYAt2w}%n#g>!@^XcFJEH=hfC%{at7A58hR7of(Q5O0?e=s z@p9|0*cWEUU$+Gj&THP3$Q|(&@159pmayTUQ|?4(DX#^cR@K3QE|${QAy2tw9KCEJ z37k3)Lg*l&*`!$bmr3T0)XOrqZ~XL!FgXuk@QXsh_n!3dNg)MoE7Gpqm?)gLq#9*! z#XI>&srB`#ulBG=p zpFjd5NjV*1tbG2H^f3cngmNy?2+UDG_*aySX^!-}EakADprK!>_~7J)m$;8pYvZ|& zWaXskrhB{vD}}0mc#De!s|nUMtvnl+l6uEgX<+X}QEj?$A#B>YBVr_2^X~0~aUA3p zxa1HL$QtVVj>p4UE~kD86I{2MbvY0krVq{%iJmo#omF?@IUvXLyKEOIh8!zoA3X9e zwVgppt$~eRbW7sXu{Bl#h3zw%4T0J2@`Y^c#)V1r!#vkuQl!oRE(f+&ni&%)sVwA> z=4Ra2b0Dx#=vUGb*?>v3*)hou0pCwb?1}aT<$S050T*5TcoT1(Vns92iX){?+Ty^D z#%?H;eW^5^*RN~Gx#QhY9-=E0LR#kZ zf9?-C2@6DizX`VN>SM*O(TpT=BNdcaB2vmeJ4h64ztot-E%uUs6*;T2#+UE>t+R_T zlBf)&_3E9iP=|NC;egfpt*jh6UqW=D)|IG-Dd&E zr{JMH+=VFhI;{QO!D}_9^u1Z^92?uQKiCSYN@!FsO%Ch=lL^E&_76`mKd49a=w#5-Q68qboVKR| zEK?NiWnI+vdE_)@EqTu?e!WFJ!pkO>IsKs@1b+JbITcRVLSS zao>VUyb=~>+uL#3zf67|_;4|Mok>2;j**G_2mz`Nny-#jLFXf7mvhVt3JN&&*(_{A zclK~6O8(1vv$1xW!?(ZL<+T<#GP)mjfe5h`_uV47W{x9JP4BM#b?rZ=>Hm2^8M~iC z?3yRkA>I!4!%84~oZ#;o1YuRFraY&7*Uyua-a`^pn0Ec}{9-6?dS_YzcbIbEF?bng zQhD9Tk+__5=BJ$)8E{Ca7ElLkG&D7vAdeLMyz|Li=;HV@k^0zkO~lmq0a{AxSnWRZ z_(?}kTX&5DA{MmUXuAp@#GRjX!nWzPfArq*i?8>lg;Yd-ke0w_YUM{lp6qS^N}y_f z`e}37coDCoe)C@Y#gglKfI5THGi(y<|JI!hhMB4x{AZ1|Yco;4@qwhJ!uTnLdrT9* zvE(BSczS0taq}+d<`)Wvv7+f>W24P-WcpmlD$`r@xJkU!Z+PLRfFujuE$$g*lV-%^ z+^tE~KXS=M6lG(#Q<(|EDyl(fnCs%gqEl;bHPEFU41ZkFx%wmdu_*P@{rt3b$un}e zI&V_PcwHZ|o@jPT9Qr8OW~Zl%$cSVfi1XUfHOu^q}n3Urg2P7oHq4Q!=(XIwS=$zPzrp zAZ$!!Hf^J!dCSED<@rYaxf+^KY5zN~X+4eVlCs;#uwgvT2BGcoE4J*;_TZF+W(nWc zSF?#DD=jb%jtd>yZ{{m7y;dPr9G96;KY5tzT<~Vhj2yUX`7%E$bzS!Sd%Vk9%)+t2 zch3*pa|ZMaQ+(*BI?R|@gcw%E%teZ=u4->bD%rit_A;>hqL%dOP2lE%bevo{sz&Yy z8cT--?QeHb*OJYwl{~k0EYj*9`v=K-%(BS-cuzp3?(L1`n(tDgi7P7`Wy}X^3$#r_ z$K&&=mU%5?1rIOTDrvbKvm8xoNAU7F}O%Ey29Z zlJ%%1{yxy;P5}vo{n1xaBD5Ym_SF6baYQd!_?~3sb-U;$Q<~AcX%Rbh<$?10M_qL- zitM#VDOo?Kr_&0l{xy{4c88s_pp7)1l4(3sHPU-k-cv2=0wT!nKG&z%&bEZCps(}w7ywW- z6K@zyVB(evaw__L3-2l3T(jKE^h4NlH{g>apuVj>}Gvzy}xnkMRGxe zx$cdQgg4R$Hxv1o z=kBB3M8RIInT)wakcV`Yiqq&7$#bOPeis2RHkdE#LW#DCv}L z7Jkye7-=WzXzDENSz6cwD44F>Ykr}YdaKvMQn}fyCtQRw_I2Pkg|OK|6+7QEcs>VA z%eNHE-3VWCj{wQyF=FE*qpN5yL?ukwL)LbJZ4gaS^z)g3IW_8`Z`rH85Yvk1dB3$1 zy}D1&V>bd6)<$3MN;6)J)*7Gtp$?O-sS3+zc9Wk)ju523q%V6ivrOY=pPlAEOofmw z7`x{XTqerH(-Q1x{z{E)*?EG4u$%#%V~V||RP~vp<4^PtpPcb*vG0W6<|1=kh&IhJ z1$;>eK2`ZWozQtbT!7mAP7lYPZJYJr);q;|Eh?u7=)1Ws!Th4L|I7)h;;s%SJw+77 z0(}eGBeeX-cT%j7y2%B5UM7lxMP0qa5)Wi~G?wLWP_g(IyzC#BmQ|+su;WAqOLv)A z$C;PIxZ&F6+LyCIc0%RbJ9iWcf7GQkZ5|k&`%<7(af2D)@)0*pY>IU4= z!t04gl~QYV^zu346Lq0OLMAy;qg0w}{URC}zT*LKdwgQp2i`U)H^}e#t z@9LD?HUVcAFR$la>6i6#Z%gm8AD>LWDrdV%7^T|;_qitf=(*W)>$_!nicW8>imx8} z^~S?AWcAL%pX;=YTr7f)#BQ%T&19a)w=UZRXYXy1DA+K&y+l0sKqhd#n8!Y%DdvOU zbPt+M_0P3}odf5l{w21yMIoUM?<_UD>2)E!LASBhdWSz+oc&Rk?|#I>-X?E( zPD4%MYo0q3e{wC@EMCnU*vk}WND1QxMZY=zC^-9(JwGYUt_~LnB0hLQ@0JuK%0%~E z|Bx~44hFyXvs34cePa%tetK`5MOPet^I>q0%3C&Mo)s!oXJf^uf4Ii`D3Mf#_3^cU z_u(4`(^$_@;Ozm|^<(vDsX}3u>>2r9lAmA|0@31cJp0VTHM>V+^i)hoO3B~5bw;I9 zYu+^|`0?9(2B~RJC3A)7q= zru=D#iHFTj*^iQ+1p1y(EHtWubrA!;{rl{%1ei@}SRRkOF6&VRk5W_(-fN{@iggEv zCgkY+Yp0G!tkcd+(T=FP?y-+-K+Y77&Al!Rz3PTfsp(D|p8EPb_bdoh=(DgJRUT(A ztsb{3HIs}qN^}=eS@lFG)-(JLcOl#7PMF_%HVg@FB}L#LC7E*re}6Rik#rK;(|5%_ ztR8zd;AJa&@G6V8@O2~qpR!OZo^?do-WK?|@zdYOHCe+e35AiyvdedvqRYeaOeQu# zw&I5PV$REvLXIA08*3S@W<@L0E%Bm#U7z=OV258DysT_8qPG>X^t8j1c6$AaN2g#Y71Mij{Ll{DYoE^oKObSJmPH9Ud9}an)waE#oGEs#LWWJ z_;^V&Hhk`nS^UuC0j=q0L>sn2x}*B*kheSs?KVy^ViJ<`YiOupZBX0|S+a#{2wPEO zL&DXpF)`|QHQw{+Kj)41joH_df5L_0+nI1SM{sq3)V(Rd>ctfyEj0{%8Eya9`B?4Y zavdanQX77;QF|0>Us=SDb;~J~&pu)J5&k-t0#SCe>)wh1rPS)BBt}^;tOU{hzFJ&E z3x2_iPSYPepg2U^VkfKGeUOwYL!9Iawz5WEF=yPijJOQ&2b(%9snhVg2Qf6xrP@3gw@>%R##H-lyC8HEm*t0@!k4~W`Hc&x%4@#U ze;*%WeFf1~^x%c*Vy^Mji$&&XCX4;)-f2ZDnt;$L+OA z0<#{|ub|UR_k>NCos8x&z*0JF*noc16V+2FYgb1q{^KtL%x{XYt1`$VP_*Xy_Ue`% zE3F+P|FBSDzurHB2j?+=os@6fOKvS=*-wCS^br#S!4dOmg?@FwP(Q!GX8qfqFrDrq zvK;maNg)HXg*8$BK8eO)bK2M*uwBZpXTk&D%89Fbb1OS2Y;&W4;h8Eb7uFMiPoK&+ zi=sM%T{@K@KY4)~pjRs4&RD^HbDYg$7s>w4C!s_|5EYwK=#i>gnDkJ(q4-{`Z492( z{7k}iDCX==iqGUJ&$XcZHD8!4d@=blJPTnCx1okYt5I5q=B_t>;5H5zR>78eJ>j%+ zbLl{S38u`W5x@IMu=d4-p*`E;5&O=m)JZCW$v^I*{$EvP!x(BGn(Ho=z{r^9b-Ih!=$|XJftU&>J5)At(`e&Dkl`Oxpfj(JI#UWS63}-!$ zvRr;@v%N(}HSV(e(b3+HDTMsw1H`6O;*ovSM@rC9P?`Km%n!!nuSE~8GD{5dB@c`w zQ9Q{$@yG>^odqU|i%LO#e2Ee!wsM2Ar|rR&@036P#9UO+=c_=^1$_8b#OCk|OHQ); z_MG?NoTTkI@%ULz|0Sbs!%drTtM&$^at*{b&3_D7#EJMj83cxvL;Jlut7@UIP8^EL z?YgHr+a4-Vj zig3JM5Qa9%^%i6^V^A05m8kglU|-VjjZ=cW*0S-80y4TLHV+&T(ug;dqwGhTzTDJI zdguiBnruItD+_p%B74jU&us7!nScBxvZt^r-;#Dbs*MEk)$r3d3>v=k4z}q@(={hy z7eOWgeYeA+b|~v)rBkWdWDWS>8Gg8_*!cR#DN+yI9G)2byz-nO(g;NeI$;Ra0qRKq z?Xyj|w|kii0e?@@D&ONubuROUQ4v3od0Mf=7M-#;)dgfp+v^7p-T$T#z*FGO?AMq= zMm_XOe%UUb-lrHbfF`Y9CynarXvp|-Fa3wK)mT(OG+o0-hUIn9`daMrNg`8)q@%Sa z>Mug>nabo)k{HY?nB<2qqbGbLzSztm?ZP$X1|5RIM^zm}=d>UXO@9j#PE2NpK&N^E z_xU3+H`>@cjv31s28`3-b02K_f`IwaM0I%&<nU^cgp9F1yWgt6=}fzYY9X0W1)?~C zLN6qjdQ%AN=re#$xD%C*#L~~eEsTmU^4c-E)h!kw*FsxUzKLdQ+y@Gs?WlZ;yd6y! z9`kX`spv&o{Am2?pR&7Nn!}|UpbmKJ?I^)Z`*^2DJXSkqSZNpeS)k7)7rj6uA0a0f zOw=VpM)h$5oZ`NYAMN0~cHs~FU4Hzo?2j_d@N9|;ir2-KrW&$OYSZ={v0*iJ#fm`MUFOsvN0l#B0-)s_3sd@359cofwi;_3W~E6w1Z78KJp zCoVH8xm)^FS&z+l9}zoJ-NkAP4_m$odtaQYE1dAr&O8ISOC8)zz+{uf%dcE4E|?$T zX0v!Zc2<_z;5LS|t=(yNZZER_yp6fob}{%j&hOv!67g4N9L1k);}3i<>rcHPd5QYc64OkJFK==wm*GU1}D;Ia@z6 zIv=Z8JbwG%NP5x=wgGnih>%DmQ+A$)#BD_E;lShCy1v6!m3-HKAQaVYs8&U&`q33J z?0%F??C*+__JvpWO~^>??zr|n!x9=9948?5{oSZ8?)_Z;9ybgC zn-*Bpvj5=gBIl<{(bO6{FAzS)3Ys!DvkKEqyp)B4ZtOb`I!C|E{$5=Uo?1O|D6DIU z(|`2iPkZr=x9J7eEo(8j*A^6I^NzOf$*(lL%>zc-If-@0L!oYJKU=L=?f74z*Regp z&giOWjia+Cj~+YOW$Om;&DK@51s*w@^vbadNNYWiCxgqlM44l*3+-Z6ylGLy8@Huj zTbcR7ASiTR8^aWS_-^PPr+Ba;(2Z~+`QdC>4`mUjdbh8IhfsI;?>2xGyMJ*1h5QML zc^_d!f1O>?uH8GDa2-6=EZN5(NM0T&?Wpn%L9%tquiX)?Iet;)|&{R zM9(KagH3ERcar$#qRL&4w{8k|wlhnk4WHEqHkHfWSQThSjJAX@nC$Hgnz{a2@L_d_ z+j?r}?7()~zb7><*_L2JiWf&5cFvCAd&#tw60 zh0!x>>5qFqEB70BCN6rc*{8Je#PdhKL30cfr9_mOm7_!!By)ap=nv!45BQB_**({h7ptu{4Y;Ezeo~7&f(k{|fA{aop%o8Dl3_)Dq1(Ars=Z%yY0qUh|H(!x z;8(9#B(XR80EM10<*Z_!5e_C?**_(fM3!G$-8jXJ^fgbe(vdaA_Z3*MM0v-gl#UM_ z&_Z+uU6xd!^t^G}Z{sUA6Y1UWL4*_(VG2__K)KhRiL)MGe$vx0<>i|MNDKyV+}a=U zQ{_kuTrwhH4k8!s$Xl_HRet=|=-BU3uCsk)V5uFEjiT+s!PxbB^S2LcpeLkBdyXKO zjjIjCZXwla_ZR<|vkh;;$&xT|8F1so2CG;Ermd3(FUInf*%3Blg;$ zK_=pEp%EhNn{T%7Ay1*3ok937#XMOFw?;Qar|d8EY)XSTXZYiJERF38-Ji5K;SD7( z-ozd~DSl2ttVYE|L3~`!3+inoKJJo*x=#g!CJauVuQ_g#Js?$rc6J+lJ&C*!#yd*u z2KQ`!=pnN(QEYl1L1gpRkLTdpbzLFIy77ZC@+Sj#i$Rp zT%#JPee@uoKyh_` z40NdOW6}Enn-cek9LT>!Sc->iSdJ;T!xy>^E}~c+|5k6tG>DJS&aWw{72<=_5@yP1 zT#oZ7OUn~#jnKWkV&dDxo4*pW2}NIXxKe%FOc#1I4|V|`7u6AsgfTL8-#M%!>BtXv zSZnsG#Dp(um6(D)#=ePzZb2m-8S&wD7QcI9L55Bb`S22iEH0c)#RQR9O z3k?330SJxMn-f!dJ(!^Fx@9?@pPV^PK$SdS84@u{ZZPz(m4z@yQj@^eQ5R~EDE+M@ zTtWKl9P>r~8*f|eXOqJ&Oi{v8N{F7HQ+1>}?4L+TSN6>oGS7f{YzH>9P;xgCoi3|_zQ;v8laLmy(07dDev<5 zIsfHNNW{vU&U#$RggtTt5h2ewt7=!PKpUnnbY8SyoOpkI_Jdei=5dA32%xE!4+dS~f{vz3=T(Q8$9g+bH9zjiPRsG#N^oi#BGp0N*w&frCkwffptwxadBh+X~MQXi+n5iTbnLyBB zNlpD`(EP!pfI&RmhPkG@T=Q~`Hz=={Yg8<0#vZ+O{&8*@bS)hr<#f|&zOuIH00q%N zIl0iz5piHge*OKd1$EhBM~za_f-ev}@N!n1$~^6$0C0ya*LkNkp5Nsojh2``+dppn z>5}qCdVTfw0dPmR7I*0NDMmb?d5+zrm;7LhRKZjEpbo5A*Gn)m6heO_LSdrWzvBe{ z_Rb!2kNN+77r@7!7=nkjMwB}&7!Ow`=HMj%?EdxvGx?oJyPmg_^97w`0UE5MXS_`L zjay)$bTy>IzOzErd$QGP&@ik+6|(Qf7`9M{u;Pi~cF5+LDgDK_6Y|{&OpJ5ZjJ=Wu z5!&JE+-Fr&4X)l_7*&nn+X&fixz~zYeokQ8A*;&?DlqWy7Pf~x?*GUA z_KbD@-T=Ogz(;kLUn2-ftYUh?T`Wl-OYAFN`HbiAN1pEo2!qwnc#kz)DR!4n$->{_ zJsP53o0!UAlHGa$e2kDlC=iBxdvED)4B#XJx@NJu2dIx`yu)4@-9HJ%rJj z%7*6rOwSl$$6}2SjQt$&Tn2pqzA@Hg9#69~y2g6$5)kfif9vKts;Brf?(=P4;|YSY zN<18D8)10)eT1oQJ!8Vlm@YF>$H_TCcOUfv>3A5t7@Lwe5^|MHf6jZq&5(lXDhFhx zzegx6_e}8;*(%6LPt6@yp>(ojw;BLHvY%CR=4BOqx_CV{A{*?PV;;{#Io;#@5*{vZA zH_~)8jjVh{pjL;=o&mKpsXM5WB0gMwn}GN!>cXVX+;Y3W;Jw#?^{R;$zY7L{>ZeXM8rqOWrBLm(9fXQw>0DfqT@jHal76IU0F03v>>4|z@ zzd)D>=YzKYXv{*c=qDD(Q-EFde(MN|Dk}&Yf+~MGCr~M__{`kp`^GTA#k_2+Z^_t{ zvYtz*w~%!ZhB3*#*QB_22$V{stf8KiP+85Fyib{h0p220+qLr>nY%o(_@#Gos0B^~ z%P$co)46Pz9$E*yzbgi&hkQ-xf3>Ks|Kc-)XIZiB~`2!hYG6=T}x&vy_KCC`ohNbYIX zT)$2Pa6N*a<`O?gXzBC%w-tm@nCBL2d>29Wxr4fjvyusaN5;5e_jZ*m><}T7J+OP* zN4+HuwvCFj#|B7VqB2IvY=4N5z$y55{EdYWRtd<@$Od-|MEmw|IVRBdk_(*d=f(if z2@G)&^gFg-ULtfj>={^WASk%3bD{N6WlJ9!<2pmtWBVzA?JWe&K5zjJA_l0*ZgQ1J z#sIb7`v|pdC0$8%wu}+9@y52u_Xr+i17~HH1-2)=<~4+Fjss&_o~Zbg_hHA}OV#+j z%b&kOkgH#|b5= zYSUcfWXWy~0KS7Do%9OR0s9XO5WXY8?Q+4sO^{f(_?1dy{suuUMxga4gmyHU+SP#2 z?Xh8tPMUri9Im*a+_Sp~!F|Q8PAo2YY7B9S05~yrwa?ciYp?9{Hjk}ZxepO)BD<)I zkd9E5pllID;w)~C(Dk8#Mn0@*jC!GR$J}5Sez+uXzvOnx&I@e!2ylOG=eB7;DxF2e zdA%M{0C^Xor(5-n62NuE>14@nyyeD>6qAZ2n!2b@g;VprFN%&W;x4M9=^b;){=l!3 z$aQ>y(6p~(pQA1frNytJ-mb+R^(EK)kg+(`;A!y+7*`P{srg)vJyeCwV~d9l5RwY} z2nsG9r-S_tGTL4QfFomVs{sBjfd7*Z6%}S5+Wqsv<*FfkY4=bwNPdk_t^?lNKhyPH z<^yL7Au*)~gB}K-GFA(F0O@b}5rH+azGS!Byq&6JE+&i#t)Z?iTw451K&CR1WdsEm zWjp^w<`_%Cdqe(!pHr!gt0ybI_=4ceyYY_7Xvup~KHe@316jylRMVo$&QX z25Rc=P(ozg9vm)^I^lcUwm+}uQ;Cj}IQMuQ4O{w#-vwq$+??6{(8M`)%`EXXl_q_T zs#yIofzac8IqG9Dm${$Mc?=bHkL-c>9>I1WNfb5NEe1f9W(){GhYkPmg}Iy)V__qU z!)ZRQ4?NmOeMoqd_~y3=gTS}B{e`g-m8(2MD2QG~kf#!J-6Mz$x%f4(TwNIZ2wCAx zb0fVS?KuImWA|WUY%(6Gy+21`MW*T%TP*!s=8!;ZP)1W!U^iFd@-Ob^Xs93)G5Ez@9b@H z>L$5BRj2tDUF06Y%pYEgyDGV)877hq8}r=Nr<~aX>9MiX!~~PwIshCXbb_dl^}@hM z1Ha`u$*s&S4tQ*_FBLLR5Q?N>`)eAs^eOk*BP;rb=O*PDjhcKx;M(D9CyZkqa(l^7 zo$~vJu~T)btQw;_L_HZXu~HSZ zF+@s?B)h=?2y=}#5kxvYHm2U)@A%p#7uz{PCUprxur#+tT%x(r-vv_TzAhu^;Jrj> z83P&O5x=D1a>Vm}&U0KrkjFnlNO+XCpEGXrHbOUr*Yi10si)Z8+hYTcF@flU=d1^V z%7uEy5Z8^7PRup-fk!?AMDf`R1NE15lQ&V-RzBqGe@2kchXJeF=Ja4tJW^s0zvcIr z1ilXc4jDp8%qsW$brds3bS=q}-8hpNf&fr1vBv?I$Zl5X5?z|Bct~LRia_)XA(@hK zVO^qG-6Wofc1XbLn_GQ?5bT#g=_@X}9fa8zitnj_SX1Fv>}Mb(S+uZw2sLluH9R!1 z^U|P)yf>EyWc&QR$8+8!2(DXB-*9rIk4MMx!Ruq?1M*P5lX>4G&Yu6|?_aUl&=5#ky_o<=3{TR}4&*2m#t>f@mV$D#29X zspQ8l0YzgiRi1I5K(T`$&^j{KC^6M{j2TJY`IzS_!Go7P?h|wI`v`S)o)kGZU{E`q zT+1Ww>kwgZyW*=m1lycYNHarL$wK7r9vA>l z5aw1WQ+tYO(N8~z4~+F>2%-xfZ0WuAq|4>2fO`|6Pg=m) zvp8pAz$_L!v1|EfR2k#P2xUL-ASADjcpoa)FcGSO663>zli% zRwym1Q^t!X<~~WN^nxJz%3@gsLQ7bOtgeh)U;Vz$g(mP(?cPiKS#iBr2-#m129F6o za%(@~xo+^hyB3G+TKrOVkLMQW>KQO;C{y16Q6jFY$?F;TDf9f0Y--EEO6?%yiHJmC*{?>BhfL;kH)8>rHzLxgO5P9}QB z&mAQIOm{D91S>BUCKzV}x!IC3Kd}OGL&^KP#;F5M8k!Bsl-Qa zq2#ALb9;<1T>LKxETw(!CF%vpFL=G`(N(ETH)6+%y*}sPXPd`*X>Pt4U*GPfY7)gv zze1>~e3xK&grJnI7P)T`dViNuWr@MigpV&>G1h*P05I8Y0KjdFCy5p0=0axXHjRwI z2rzaDI`{bX96^C)7h%BpCV}A`_4+^oplkDW4G;@1{x0f+(8v6ow;HM5RO{mr-RY=LUeM2#KRD#?_>9E#+oquutr|ULXh<{3im`9>O3e$z+uV zx=KL2vbd-hV5=?B`+m<*i939QpmO~d&+#h+nJjSsPY^QP3V*C1$ar0%st>$_kg(DD zjvL~Z{*@9X$*wg3{%eGy-g9GtnYpC`g)=UG&ErsJc8?24b#SU@)9A&F;Ie~IU#A5u zH**#BLEoAXrJNGdZC;I9(|mJkM* zuMjZ4CBW@RELEBDBZT?E>wHk0k=3cC?S1Y~$~Ik#Hx5xB0PiJ4r2*h`R4sAG5i{(f zlFtIFe&IucqB>T-;R%I1?oyUDwokXfj<$*Ca90NR57-S+Q$|;SRrsfA!FPn_g&^*!KzL?xz7=zIy0)-XCZi;Z3V?UGpUsE~9$36gncr>H zWv1lzo^rc$zTUNcC~=|p?piEz#o}LbR|Nvn9#l`OnAADHBs!28gF7{MR~gp>1HD}W z{VTqHj3Cf($@5YF?l~FM9lMW9sEeKYxosm9g==)@g|SL${JlU`V)JJ{BwWr++Y0P= z5%m7_5ON{gdjS3wloGuc1mxl(sMhOwSNXR21i$*kVK+@LJVt00J1~&-&Is2!%y|FA)|3Fr4cHZXTQj!Tv14n% zk&D${&@KHlzk5~|(Ss^Oy@gHp=`mxwACi53jQWh|OYYwV9+u6mzOeXgEHDc@*93sc zuB~+u=1I6Pg8q5e>z&|2aHwMGY2n3E1 zW}paYCl+6w*aJonqQl6&7NZ;+V8YI;XXoP`H>(J0G5^TxQlWO=9u`MretQU$<Abwh-{SFh*m(dFA@Eb6~7j`WaVwS;Ow zw+0dE^F9vJ7p#|t9B?t}TzmZe9$h(s+1TQU0v2_vyn{+XrElkb#)T}=g%x9aIv)W} z*B%6=feH*%bNe0K?-oK<_k{c1HL#S<-=W1!ClP3tc0bOd2Z94lVF2pgA!X#&|B`>F ze~(H=t7kD#)mlCR@Gp6P&j9>ALWhpahxtRr&mm=hlidga{F4934>8@23uT3vBh0gLztTf&~JzX0?pcw$&y{m z7@*2IiiW4S7M0we+?b=cL#YQ>3vC%yFnxlmChb!$tosC`$F`7FkgY7MYUes!lur?| zvYT|pY8y;fbmG0Hz7*YSV?qBZ1IOv&D0ilJ+`deClt0hLEIkAbY{< z6TqF=-^jt%&wZ4ZS+eU6fYQ|4rE4i>=J6%<_ikJ4%3Z6k4Ip!i72csMyu#Ss7YIp& z3obY%E^^z)Dnjz&sWDD1UXRP2+WCr^#mX~28v}Mt0(kZMzCh@U-Y}*!iQ;K`07%4D zl3nT!k>tEwY=NMZvb}3VJ;)ojFTeLL+8Vpv-H0jrgGs;pL_fLmk9kaW@7zNWl|AL( z=79mAyoGxfZ#+hrw-V2NNdTDa#>4)sKiOv08eqq4TJ>3p}ChU#?Dlbtb*sI2s8%fek-^yrD^F6 zt{6Cb`;_A= z>keJ>?~Jui=pz3f^*Jvq1m**t^Dv49UPhpsEZL1Py>Sh9E+^j`}FiB?CNdqp};ZT$i9y#@E4H z>M$=5q^(pRsPdVyy>@1xcwr9|6-|3zwS-SM%q8yGIY``8>}rq4SfMLAKk{3zOUa+}u$C@+m@#SP!8KLac7t++Mkt zgUHo$b!Y*&*sgk%dpuSTp}kFsfN{hw_Ypc=)FUjWTo}-)ws6_llH{g*@c9Z^@%wz( z{DEvt`&XyQhsMeg#oO{07dS^CzEBOw@|z^F2H+>G8M1-W#GmhI4G7DS-zu-{%&J zP|M+q=rv8}du1T%b%zC}=RPM(cC7)hY={|&rEOaL>JmXAW*ebbcLUR9888<2PjrR1 zQI*APBFqqxJGyOP40EL=m!-0c1Jo6e)wR(#7td9k6_@nvq{=;BB4m3N{}NE#2k>tJ z{AYv=cgGg>2NpXNIE(cu%lZVNAX{#+%6NXuYyJ||;Bha2&KhESsu6UMLFD%O&n}dZ z*+a%VHYRp$D^VO+(r9AfV(IE;(Wrq3cI`e>IWEshmh9RBpu0(>u@fH?DfYI|2aZz;=L8@}e=F$}Fp9@MDBgoX;%|=mX2$HC8OJ zXY5G5#qK^A2JHVk&+%)7nZP@Y*R3H;o$GP&pP*hN_?dwoP<2)O8-z}b-y7?VyH*eZ zBJ5rlnC?U=FkLSQO!w*fpmx2ce(*8slK+`8W)F|t+Ex!H@kADwAt@>?L(qjdg;l3Ck-$e zmH%JqLVtmfEN~G0d%ETu##XoOIwuBrVx*_`H&SL<)9KbM_Nncc4dA*FOY;F$<0uqz ziJ;7*2gh0D-fBeX8vhQzN6-{Z3^3V^jRAU$r=)wUdbUke{iCYMlMGZrH}5Y|We{Hx z7!a|ItRYr4F@~vnzilpVm3|x{)YBdC*bh&qd*1Ts1YF@DJ4=GKgJB$8yie)OR{XSXzFmm4$5Z->97vn8&3IIBDko%-E zj2uD3PAn`pmUMthHt8dR(}^*XGP+r@dWzpfsiwSx&^G4td(~Q|!r^6G#7|H!Z`m=R zxIpN{7?@j}TZ~J+#z2)Ekr1ioahxJZ*Dn$H1Y(|*m6FPlF=nYW|H$Q9=4co}Y%dXBOKlQ6G44IJ|Fk8f1ic?x{EwRb3&+`aSr7hJpP-w)~qE)9e?E(a#2kD;3fcI z$KpyW2qi9;w#_O+8OJHXPE79(f$|ZV&JkT>*usv3@&)Ss#IT!p5A}ZAWrW!xdOfo^ z*whWDiCP*jRB4^Ev@A-#Wh~< zcbHCuVFn_2Cs?TdwOTHRK)pBdYLv-$DZ#OrAyi$c;^J6I@$=B7J0C5r4mCazguj`8bkRVvL9LM)l*qSbH5&-&4 z+AWK>>HQ6h$EnTi3FCeODb1D8T#yxn0%D*!I~W&UD;e=Qf8Vs2*PUqb3pk!|flIVN z*G_%O>2#9Z7~F+SBeYF0FCn{#uOOM6(VL`F*5SJej07GQ4W z42C!hpsoT6-xm}YWtrs_-1@fl^Ex29=shYIxcC0rjp_sMnmf2n0MyjC2MF_a`?e@R z_xA-t!LJ(k_sNvpHG{cM?rx1+Zt4YHPR-dBWAS#bF2VLYp6fDzUz2&hFxU6eVuQNY zRbw{Z_E#8C2n<&&E*d9p1fV&l=L~z{w3w7y>&`6^(>2grMG$Jp8~&Lls25gy|F+ne zwE4P`>+Iz~lJ9bXhc4<8S{-ARFaRu#F>98~(7;=OFMyU%?Zq56lt*m2TmaC@1wb^r zB8#~St1I7-OS%XcXLHWu$0#^&3om31G5s4;4&?>0-qG<9|B1grXzD+*3%n##`xTj5 zm!H|@>u1r;$T7b=z;EP`$9|h^Mco@cTYQ>Tv1ANQ5>MZeHELjz1`25ak`Hw18ha6N z^(_%IvVi~CKrc52CqO7c3z%|7c z!S8ih+N{~h8001BW zNklv?IHJns=fh@hedhY8d?!c_JiE{EQ7yPmC2hczIWhx4>zU zY}@sX%^l7fuJbYiOUZP-;{G=IvlMS8#tfGuSGZ|bh-abWu9ig;8ReX$%RJ!wA$yq1 z9}&2+pOA%>Z;%E5s7a6sUCNhS7=J@Bdundb8R`O};Aem^?{^JBGX2095G?-Y1BH61 z%W%1Z$%t(7k^r}1@ySD5*y{-LSeYeGK0uhUtK>s3Vs{?E?b+ zt)|_LSf(pp`+Q*^el#?&>qhswhybW#=g>!emdeQPYi^)9vY4OPEiBI1L0wte9}-2x z5G4h8*MdOuMjX}O{EHZn;F8Nhm z?i*7B+C{yUO~RK0f}yKCPf*XGb}Z?zfiUgt9aQBoC8`YVt7wt?T#L4UU>!rHH+@S= zjEtqJY$mfLg~zd!98o7lzu}*wKwbU1v{+f}mN}F2k)W9Y=md3fS+U~_bMHOzkVnTD zoBIefXVJS+%thC}gu3ouCrZF5!6U#wvGbYO11XDQn?2O$5ySpxvdGmxjuKBD)H_N1 zZ|xHQ{(luG&zjVxzwg3*orT;4E@;_rTlr48;5lBU{AV5rF2V?3Czcq;0Lvf24gW!0 zV3-T^7XMjaHL$bTZPEN%bv%s72%e+rCw`v*_AQeoFYO<`YXNib)POMvnA_?#a{{Yv zV;*M)4i082qZy-Kno~sAb`dSUZuCc#Ds~nDW~|4zWQ@t@`m$ zO^lU}q9lU0b+wxj>YYFRXi*+B=Guwaw99Mxxk)*EA7Lcv5OsO97*! zxiAk*$_3foB1~nG}tgrj%On;5VF^~eMW6% zUh>>A9zQLjc;o<~ENN`}&Ld`c z5xKg4JRc$ti!o-X4?lNsa%S2^U0Q3oAsI6&v^C7C%um8w@_D|@lN^sz> z33yKsLKPx6RvM-fktl8)KQLHR>fu%LLWUOoyxrbxaOHGy{ z&?}9d!OmBc;ySj!EQ;}oNyc$Xm@Dt|ixIiT+RudnvnRZCPw$!As+PH-fx3hq)=+Pm z6DTX2e2ID|Np9Ee^@{%YTx7v#GZFRXbYA5f1m;DrbJl}n(QD5z zzuxawSl1S=%1MAw#M*SD+ny+6i(xIH>I(Ucaln6%N={34b#l2>X#8us(I*6~Q~rEz z`&~oGcxr)aP`5L~CDhA46jSTlb)8s3K&Do=o-O7f>br3{#3p)77O)=c(2$S&q;imImwfmGs0Cs5LKaLh# z7h$?!J_F3=70X{GA@Vw`WL`0Hw%}`R=NIokpL6Ut+0l``27s1th{fI*0Q@cg$vYOj zE)nJc%XKOuSL?#uxjur5%nO9JC`r$2;L!ytMU)c*72WVV2#xhV#_|L~nR&nk>%*K* z5aw_!8MurMfCO$E#x#e4H7H-PFz02kN7l?|?A zX~*fK-rnZfYj@!Xb{_hEfiT2fL*dtq(e{k#N$0RMxp2 zvQAe_GkT?R9P8l4^Cnv~O`+rBlfan}}+GJbav)Lc%Z z?S~fU=~(02P|1q7hIdDvjb-|JtJ##xfQ|&c%y2c@<`(HZ|lgy1#c}#Z6e(#aBKd^YK z9tQgRmeKuLLcO@zV~!m@@HSBI-qHD=@O)k&h~=&!Na&9m7E&j2qubbEiN(7w77f^E z3$V1SxXs@uIq)WuH;XXZH{SM+hxsn_N8m2*t$$f_ntWxU@rYx^25wWy$ zgwB!!)Ky4I1G{4a@f~h|V2O|}>Jm{dR@ya&HAKDc55~;8nC`-GH`F^x#un@J7~`d} zK^0k#P%m7L6=PJ6B!F9u7-G-P(K}2syLZkC*APl#O4J9u$Gyb^``c(I zCdSh;9Ylg`qgwhuOTb!X@qT-}yo(B>&WjV4R{*f9EXE&8SMN=;z$TE- zu$YL%Rn)MrGQQwOB|#2s(FxS{5sH0vVH$3(g|NYxllK#Ae@oG#@7UrKXs#fP!t}{> zO>#ayveS!jm!ky6$lPen4pw3HiZQ>;k`qNk5Ic|Jb+NvmKNO0F#7UEYLD3TAFHu*I znY6?q-6cOaz#ota>j74x-pAae$>@n67dlu%n0oi||KHx5KS^>W$HAVNb@tuUJvU}? zaCgaFE=3b{P-frvgZ_G%$ta0SQKS|G7CVE%OwZBX(`R*EnW-Nt9M50W%dF}FKxqJs zS=(IQRau$u#fxzF@JNsswXA`8qRdrXv_!h^chzQoUtH{m#^*kyU-iGj>v#wv`w(vw zM?3CXDNNtIGo;-+_<^^uU}85AOFjxLEVS+*h;Y^YMfGI^1dIEQ+n^rvp;z9fBVR~5 zFpDfCFkDG#&hC#MmJJMYDR(tX)UFQSlBVQ{T0d!4=ugDLVOV5Hb;_Rh&+5Hk>93t5 zTW*2Q8ZxmO@%&#ub#Cf{8O>z3usn?E(!Mf;f%YY0mb-5F`uW$tPG;EFKG+n%n#$_7 z?0Qu%_6HLHe`9#gKUpBG5IQ27B70>SnD*GJ-PGI#24YjcK#*g+wNi_LjRef5WJ6uS z^Vo4Rl%RBmV75RB3Z03mO&r=aZpgoHBkp=AU2yaIy8^L%rgnja_@1}2_nTh_C^g|% z4D1ucb3%yGs*%G8>A~~0yH1b8r3?uQ`L|D88Ozr=wtGfL=o|MM>ju4_hp7KBzp@ti zXx*Q`4TMmC$ia^Ra1X)Ko*r=*E(23n6wL&P<=w%8JR$QsL2x`~@9e34ZP^BTgkWWL zfraei8^kWmLwWx#!K%&>oQAKkAZM6Wb?kbsCA*nOkYxb5u=g5D;P%}PK7e>1K{$-d z&-19<{o}vSuuP=PBqJP4dCKe4%y5PzVk$mcT3*$?P5>o(1bqb>F@;mY?}daKL^0 z`5i2T)mIV(FR*Z(mGksMe!!OkZ>T@Y1^HvYH6>`1wx-i~FI=-Bm&Geel!w9bfuEK0lUXFR&0J>zKu? zVPQA*71GV6D;tyDAMfnne~DNSe1=6A3a89v610Fo%5)GjrW7@A3+~5uuiCx$K7yu^ z-gny)ECv#gt`PV7YHM2N0;jeFYR8J+E5+{k-V?cR0|X|!kY}Pyw70w(A$C&sHdloN zD7DY;BJLoW3Dlsb3)_|f9^3uk{h{$GwWDp;^=*HDpG@KBjBvgC;|aF%78u{ElDPh{ z1U(-BnNeILW;7MB*Di?CWe<>mK}K;OF~d2w0IO0BVsnoX%uJ`Y>E0lSuo;|K&QdaS zZvVD#SmHV2K}K@{@E=&PJwx#5%Oz;`5nI=fCCjV?pX?!aRn}HImH!YQyhacl^WO9Y z%j-zc*0S2`=Tr~rO<8k?>jAM5L}z-@LTfWmbKGxH}}jMala< zW}5X+Ab7n`hP6rbmB5WsskaCFuWfTbL~txVMzEp!JHzL8 z5r!GD+}pI0_8t~4(cJh9E?O!cSqXiCV2Hq8)S(MhBo-KSE)Yl_8ZvP7XAiM;Rc+r- zBIgRrjIhVqsKaA`Re8}A@%#`K7L(*5-sUrKEobKv5DUZ>R;qby8k1Qg9?HaEb}nUj z$H5b9H@v{IHZZk8f6mta^|HQILGQb2{pufc031t};v1=(<_P482T@6e#!bkwn4tQF zl~RM*Dv?0IFTNvYvj^X~#p^ zaQf(wZrJxdLFn5(LLdT&iLvwKk1jLPiDo?uL|c-zQ08)M8+0Hz-#Oxzwyw)c`Uq|{ zm1H(7k7=jH_omqZ4~l`{X&KU{riEmLko%|iu8Vje66CYb+|PNpWi44t_srBZfzN~G zc7@oQtCUiI*Y4#D0RI~cIZR(Z^SogruG>`qK~4_)0E1$aNO_$Ok)PDB0*m<^FB0Vv z5;rl`JF7SM0YXDQiHSqO){YR|Q#!WUeq*ou8nH{W_RWqhK%Gh!Qc8f^m7t`fGyVKu zAQn7#B;ct1z3TgT4Jv#t5Rbg{M1yB{we(cS<0+Ph1L+VYxKg`D>^|fD1w9_CgO8?? z8S?d+)z(sW-;u2M8G?KgRrYhddhdJDgzKpYUd8>{8bR`h3dHq?5CDHE z7@1;Ph1*O@e{;5L-ta^o^3KlDf^$2HBpMIxA$E>qL)6dh*dGed1J^Ia-gA_G-p1`59+ zKRcDzzA$)T)BenRdL;Llh74PXjTcgxV21B*+4OS&ynO(KJ515=Y<}oxQGX}_@NW>t zS6(?xEJNCz*E=3F>v)3T*0PUajWxoe$CR7yfxRzT#n%=fQ(kbsj}-}Qa)N~zTCuHK zvdF@f_LU1nbIF$IC_^$s-IiG*&*aZ@m*J`Wgt%z#f_p7lD$DZ;mW9_k+)44!!eyzD z*Pmf|&^og`+LMj!cXiphK^QVmgWFvMr)bFGLM&Cah`@Sw@<0E2zW}(3)%8^X5H~LX z>$k6E-(wK`e;xzmhU&|P&_I!|xuA2&Ufv-vxf@uBn3+8c5hlbjJ9&m>J9BT9-gbIj z85Z~u!J)W=V6k;3IHV3(X9+wLJhGN+<(GDpj1h~(2Uuoc3&g_YLJo^kzNcw+g!dW* zV)qz-An9SyLF`bi{n0ar0rGlPV#MG-wdZzVum2js<%ZYr3(F8su|65{^RMp~B(oI( zGDEv-^(r^%pVV_ItmL5w;ByNYEN3gXX;kawna>^jIjbV(W#HNr6Q0_4DK_kc|b>A`^J^3)GAIKhROF(2N!;?c7;q_ zW>_P3w1$+i+NWH*Op|@YmAe*Zk7VEH0uPYnxImcC0))0k%7C^7`y0yhr-jzI;eh(N z?62~ zY{@36Ecm^(VEaoc`$ks!l4RJo0Qpo(#LQ(vo^@q=R%!3Ci&*r_&qyK#2<8pGPq*vJ zNd_QhL>&b8<%wigsflOofrkA2EP>Cc9xs=m)s>*kIqY9Rw!(5Wyg$!uw5V`#AuZu=teC+q!|RiKYKhW``s} z?ixmSD!9?iusUuAVpN}6z&VkdGO+R!R*F8x!s`zfc>cwL&s_wcIoM`;i9neA&R*vY z;+C(HaB%H1xT(wBv^RL3 zc>S6CcMnB$5R*O?Vj(s&R-HlIm7lBR`!4NS53rEG@E%gk4VMYNMzG*#7D{WhNkjIM z%3OX9h_~zJNCm$X8JRnLKD%X^j1|xDN0kAxi{jjZ7R%VVlr;yo5#AuUuxR<)6ReDx z0yjU+2=)N{1%i*=rDbdr+kC%~*B&?`z+*`@mSrOhwoeh}nrJ}kT972OOJmOs2NtWf zJ%i5#v3)!w`|%)i=`zTUT&E9oGk2XNL%N8&aJMUo)wbuY0Fwq0_M!_ z*<<^+Kgyw$OSZ>BNgo+*+n204w{>zQ<^Kn}F+PxAZNrgPWq_V=Y;%vv@P77MA4CTD zZ|%bo|J%0Buq!v1!DA>l81~@=47MNIBdRK5A&3rm?QwNeE_8cy!uE)$a zID(U`k$t_e4ZdZYS*04>)Fei35G?dNE|B@& z*}2QY=u=qAXCro}QXFPr&m; z+`RUECum3Xa3cDQjI0dZVPgdW>7m>C@Mso}Rh1ac{p1LPNWU>?hX z2?U?U%O4=C_$dX)d_`HxgRU#uMvg-Rfx?-Gs!kP zwkbF5HLoOKX+RrDsXUh8;=3t2ZgHrdu;*|&b(VpUE&ep_CQ4?NGAP!l_rELGr!!Tw z9g0MjcE<29U=Z84*LrQ=w~H`3U~HM(78XPm`=j~UZV<+$YPSeC)ewOtZvx$`pLj;t z)}i4Cclm5i$t}7Fbr26A<9g_$SxJEwxZ+1&0+R)PAz0QR0eW_2voR}~3xPnp`EARj z9!u%`HGp5+_ik9mFqA;c;PZO~-?`eITn_;Jt^Ll;%--NC>fUj9ma<+Rti+e~mEV@0tBvSF#e0SV(P#p95elTgejvu;&6GTmV#u zA)RqEmw-4FtlC3KDalfeX2XQ~#~1*gAarWb0P_^VKvahvQNXJKU=u-l!GY>e?BD3U z_mN;*-(b-Pd{+X&GXVdL<>5Moecyku%>@f?pJOo}_?c~7Vt*{tscU>~8=9r<0AXyW zmXoy0_vWM%`TU+)EgG;-4N7ywJ-7wpZj0IlR1Nx?4HmA<&RnKgB5r@{AU13$?KymD zhs*|oF)goaA7NP4j{Ti#0M1Vjd(n=H(glTgwuydWH~-XLpE8P( z1;x)0d*l5t!<-%<*ix~(6JMe%HS5OfpnvFK-ZA(Chu6 zu20!ib#*RXpe|kD(g||jMW;gCX4i2gd*%XVp2#@;2~NzB=CY|Nbd_a)bj>~$=t8x8 z)KWgTdw9nVn9A-aan-vLTrcdo9@_sCM^twgs^%r7(lDD(Cg2 z9m?rSP2>o%Il)}AIIlY_5+}KKsCYKH5~8OkS#?iJ*`9o9Hw!JRdWZ+mD>?E{_Wxwf zPwcrqLTs+EDVh3RyU(Zg|M%_RZv;#1%6;23h+{*ZIj_yTj>BcPsXuq+aOgP9vy=Ea z|8GS@23;h+@`mg>M_NkqK3}N=Eyr>fM^_GOJ;-ud7py8K4rU>~-Ka>)ZK7RKR&!g?z`}`wHqJ-a_3 zj49=Pn^@L(Za?=>o_isX2pWQme&*DDYYI$x;;ZTZn*tgde!uNpjoV;-O~Fqc#S2$u zbmgE^F?~OgNkXcmrl90MU;aJEmk%NU-cNw6nFHUogFwMrW&Q^f zY(Y^2Ih6%Bku0wxSV|>}ONGpE_p4428gOMRB&h0W&eTvUzmegdi^?K2kQR1-E)e%s zb3hXhhXcec|F#`Q&k@AYpIcztw10mj0htHffmI8o9WZK|K!T|W_tJY;v;-rx1gW+_ zwyGtpt?g{pbzqI}Z+idCmBgEfXFao%NpV|t4S92qT5!PGicHV{`}Zw|{vZP2Ul~r; zbTd>}rXNff_8rRhyNt7P z0W8%ks}dWy^0AB9#KF5(*OpnUlT76T>ZLuK2d-?~ZPPzl001BWNkl7dP#9`dtJAZrRp>jt@|EO1p&%^UunHw6An zNX5Ra6*b}L$@}YQQ&nxKEnRBQ)+;jJpHv3OPKHj)1vf1Oy;+rDKzyAMV$B_Y=7nWx z4{S5AbiH<%AWO2h7NEO^^>wk3z1*~<^~^H(x(^VBEYW;n&w}(2%Tg0Re?wW#Jqrd~ zi4yk0uJznyi@6J2e$m4*&#Fh%K$*KBQ8`v{hS)N{BZmy<`%W4TyAuHaVBcTL=K4$f z+@E9N@pxsQ@e?~h#=?|y&dMFT=T8x9GxzNOs+MxA2|H`stm_7}b=tz#9Xh_w|F6OV z{onh7on}HPZM({VQm-O$Zz?&AS7mn@()L(bGsFGhe-Z2-BuXlOax^WHDdO3^l`z2F z#EH!zMmxp^7YH&OUc;_rFR!G`-nZa+(r`Vwr2k`EJQo(MHtpxnWmEPM4>bYeI~~M_ zWFG@5>6LM1sk$W@js`3mu%01I!MnzCPcMWW1%h)+;ZF6;Wt4tCu%87{35!3od-c%n zAMsFivsO_26@b4-aM7k<`mgL>yfkd~E4iQFNY<+@k0iC;A(rJlkOMcBDWx`Ey+%O8 z3d}BFlhD9>2GVr`Uz>klM+mB}tic@w*;XdRM~zq(r3#Ko;=XwT1TC!aZE?@+Lk@sj z2;%1^dc02jp1Dn0yNB@_%l(BMvABhJc=x%(%7*eV*{*fRHrQJ%yN&qri5T9<1(;og z4i+HTeC;3zM&U9txPUbiypUKK@iPu~=b-ruDKF0vMsZFg2+^uOcPyrgT5F_7mga~B zu>-``T<3^WaaCdz){+_J=Hhz%n)49ZBE za_ak0jx@ls{t;Mq(_R&1R*@yEh>7pQ{5EA=`u82#hmgdiVc9AzRkHdjr)tPDQ?FI8fp^`e%+BQy z9f}HJ;NTU-r7s;>mATBYMB3q{Dd2sV*)7>E0_gv<0kA|czx0jxP3f~{B&C#c{4-?{ z-x#4$NJ^iY%2p$$^`|Z)q*F}kPCY+sSA!^Zds9a`6s|OXXB(9wXl9K%mqV{*8*$5< z1~@L}4Fm`3i3E_IJDpW>Qy}&(%(3h>*pX|}jod*jn1y|g=R(+|HnmDDeDC+E{rs;b zE4^!s{G|o0H&*KYz1>IRdz<$6O@lc;7hIS3;IX~VFD3BTh~0-~0zv3=A0RfDRak%n zp1d7=jdVNWItHz6I9iHS$XmW&pFiDmHe~$|9ND4PXy;fSeF+JE^IMd!?;G&yHU9sD z35Gi5D^HY2-rp{Fi-y2$2XRm9CW3%=ir^{NLENptvhj`u%ee$EzV?=Frm3)GZ3Cc{ zSsh6>QOSGP5~RPf|NE6=+Zc#c16W9q*EY7fe7;&rJq~goSxJ2EO4}PL`FnDmbN75I zx8U`C3I{>(*9!@Lb%Kn6V-4#BWbr2pdI!Sz|HiVz-y%3eKgL3)^dAMs-!C$-ug$ViPu*3yiQQ zhYQzR-@OM9*fSSgRUBQqgANU_$tq~;eY3w0wj?gF=(ZSHkeRiV5VhNgT(l2uF>{Vc zDU0!q1(d^v(qL*?z#YSsSl-@6=oKDW2{kkPuw!La*}|sk=lhjpD+6I8*%EhSo3pm- z=(-bFPurdZJavRtCmL_$&=EX`#<85ie2pM9r*rnm7CW=oNh0&r&JzE*nHl|81W~ze z^b)bGsdk%P0}W+9cjb^H{#V+4C}n|m=}6vy^QC?tBDk#UUK?O}w(lIlou`9%;MEMVjqIMlzgxNb8Q)dHr{JCb0*mU zU5mTM7P3_R#{PZBO0Jg(vY7&D`+OQb{L0>gR`Z({gkTxWp)H_u1be5xEAgieqstIn zo`JM!tGDehg?Zk#&vJm^R73g8u>}~~_Fvf{q2!91K6pH+u-Eu!EL-?1c8CU2C3m*NYE=9T)icHMVC;TeMwa z=~J_&^M>*mpb$4J_l}#{b0rZ*G6@B6i7mVwr7?g?kL~#Yd7gJr%4^S=<-) zn!8f2%@DV|^&Q#ZgIdRBQmQlT%IU5FQ~N#X#Byl&mKmeAM;+VOOZ$9Z+GqOQ4vdsg zy=-9iQ|zdg++{)ru5s?RSdR^H@eQQKSjacF` zmC|`jHvOgj+^#W*hqn1Xwy$5=?>AVqfPF3R{i&2kCkWa@P1$P(mI-<5E++w6VBuF-_xGTAo@kdWd+M+>!l%-vu+c`Ne+&WIMBa-IL6C=m@b(EDxe@E8YFNLc`By zE#KQ#LT4Xx06a)U`XEV#yU@3xLm%_URqAs)p*DaOw zCF^qws9#t)b|$C)r-lWxPx+6+QV)gXm^n6=9(Ke94-ku0E5vqHSp#ESA@;ee5j)Hb zT;_vBCN`7umA%nBa!^ov_}0Gmj4XPMcsP5Nz}dW;wVybr#0c3(LKA;N(2-tC`L5(o zC3x+g9X`8K`tfuBiv_H?!6Ijt>7PhebR!IMr-8W1TL_Aty~o%BG4bCmd$uHbjq;{#!EJZtAkvWwxntE!cNlgZ20M_T=kFn_s~e9Ad9~g=64|E$*!dRG%p~D!Kr4~vbd&F znsPGTA%K5_;69xhj`#w>t4_Qh6%bJ&A}{_UyN$RMy`Ih)rv| zat(zews=^Ua;;s-3iWvm6J={9B-|;M9bQtTOPye~u?F^c8|qu zF~UM@{0k|ut^_+AN!HDoF6^>+<5+8j8hk4qT*j{fl7YK#_nn`GTEJ6;wl3|?=?d$* zVb^xgZQPjz?rk}QHsothg3S!UrCc+^JP`oqiPD*P?;FH@#|*}sh&y+h`iK=f_4q2} zKpnUMr?Y63++dG5B~Ry;LC;*4TQmee|BTnk;Lt#ft@CS@aYR!O_IELoSXYJwwA+tm z1s04K>*Z}<&N$5!;@0XYAVYu4aeKEtZg4bpZ3n~ zjjtR=!it{A_vk%;jv#)&5xGj`V49wkp*?#p#P$?IL4wuRwL6ppc1x;|fnDPcmNk}n zA`qbg3oa5#gW_~O#DldiPDXhf=Nw?QUt`mI zq_WYKX0(N47LT1Q0BCRW)`!ck4w51&Vl5@m5D)yVZREb3zPqxim{soC>)zNxeJ7`+ zD&aFJg~x{V{e$6D=aSt`C9~N{;G4O_$so)jJ4Id~*nKHe3|GP`hLk68J~b)TW`Esu zud#5xJ{3mw#-3X)xKQEBsZ;wpuHzCCgUkCm#MJoi-iqsF zpQ&KI_B9u_usHkmtjLl4g2Bje(6Jl@I^nK#IAzt4S!l-%p^69gJlStcY>g#l>Btr` z{ntXCC}uacpS_RR8?i6MN7oKYX5cpx2sh+@ys+2aX~@Ks!PjYc`+^DbVCg5Iqf}Bb zbtG07vCEB@lhp~vy^DAvTrKzbMkF&$Y;S7qejmTq9Rturj(nGL`h7CcwF4l_NN(z@ zTTthIidA3mv(mALSF)&|i2Q)PxFZP!9Fjy!efFQuWV3pUtZONqe2JHue_G1*Fu=Y; z-1g>2W-4~ZVNe9-FC;*!FnWUJnH_Ui4p&YVLEppwj$r5jmtmgS>kvFYk*tUEj*-32 zfd!Q#xqqd@uyj0UCy}vs+@>4YA;xF3Edh*Dj@*@H7lMTm?}NJ!oKKRuAmyJQp_RJ` zGmWn-2yY>HQceUC@uGgsRJQC{9t+Dow13->wUFvof!xEHV16k^U-99&R3+^AVe8{N zdvA*WCy9d<4dp%e^_D;>)tV)5TfoR}5tP=k1^X_6@p}z`?3ZMF*s2>+NR~lTfWZ8o zY@%~}y&J)BsL$d&+IMn#sut_a{*8_e;csj4CIoIG0k17~iG@{jOcpnU#{~ zE`umshL<;#QB?wWs;x}zA&ADW5jrgP5&?^h=FqbDN5YiyvmYb$9hWU-onC9tg66>1 z69w74wkrga1|-&qvcpIA`F7==FtBHWOBM;Kiw-E7A@tZYs1e(HCsH4dP+)80jWFe@ z&Ye~5YK2rJT(@I1cL1%++}3Lbz&2;?CU=^3+V#F~_n8ccMY#-2T`7Z8dZVE%hM{B! zI?MK+EkFnKYzyYZy@P|$tA<>p4tui0& z2wSe1=F}Y|tAbqaPr0;#ya zBP{HONK@D+N_UP2a>{oEJG>S`fwLqIgk{#ra05F{=Ms3e^yRhvJ7c;jgnng<;+I$m zr0>ZlU4W0aR1AQ(mr z{^W!vK4MFk2=ytP4`Q&+YTvm1jPZYw9A_17;3aRA^|3*uY>NGN5T=r`)YM zjA|e8XbXsfATj%cyi{@UmH@>=+W^~w z5&5h}g~?sPWYp$pF8JL6;vwrSORpsBqYD2Kf+mkR&5jW}zs5oc{Y0+g%s$_5v6yzY zA=i8)+0+=p%(b))eT*RHO)aEc2nBY#a4v}Iy6EPjrTkY|n2eqyc18x$?%cjLk(+a9 z0e(-is=nRJsbzrI!q)rju0XSMbe>q`B++`7VeJdHnhA`cEpdboE(PPQB?FvF2@981 zX~ySqHQ%R8hM%pLeMi2uX~>v0&k(G>t`T&BT3vJykCxDbl7VtVf|OP=Gob=T9$es3x(YvIva$+nk}XjPSVy^+E^+ z;#zwah}k>+6tOvIjb$ON&%Ely2D(CU+U`ikyld~bpSTaqsP}~E(yo_H3#KGWly%*g zHK%5@8kp7jhCYMO5v-*6+K&?f6oSuwW~KCF338l|oMYKMq>=-yhvoUuwP3WgIx7<8 zY14Ez2Gk7~@an`tMyz$_Ubk*hZ~PG1;JOU4*GH}^ZFyf@FjL%sr^U5pKoi6x7<&Td z^Tto)H0I4_iON!$tz$EhY-~!l$nlXRDDEQ&p)U}`&ZS5IxTx>j^-hIhek%)Z+g|4t z!d%;0%B@`3w|@lizwLW|VOiz21aE#eS~_WIK{p#_rX|wG5v2sn9I=OB+o`A5S|zeU zUBsL~cgHsB0pj@^#3qT^=`eS0{En1(ev_nzWYL^~W#CML>M?@%UoB*hW^ofNYsT2l z$9d6edP{g?9}9su9j50lD^=G0uHBcH2%dmnAaop+Sni2tx6qb7-^cc|Um!L*fO{T2 zJJ{c0dC-03O4Fv^d#|$C5a>xeca&UH^9ho8qXwpT)gYw$I|RQv5wx-uq)L_ueyfNQ zv;@(0v&3&nkk7HORiX%V=Gb1IQoE8-kr_Lcjnv1olkZ3vV745w7npu~T>)#^jgkv% zN27up1ml2Q@Q%XaWr|V#0b$CPW-)BLdTyKS-(u0(uK=Q&4311i6d#!Tc-3e(dT6`m)}Y8)4cnIe+(nq~xrl zBH%xWgfRQXZ$>H{er+%Z-G%5fqeKU1 zDQkBP@yfgQ?A|(3%wv!c_L)$CmZVdMBQgn~__`zaqQr6+j-P-y6?kLjf-2m4sn=vx z*X;?uE%TbK@j9ut!TgqG@48lC86A6HSc;#^0v;hY>YTX?rDC6LYzq8lB5fH6%S?-W zmI-HqhcHulBBjX-`##RWxR#Bi;~-1<%50H7vrRz~V*j5QEz<< zy_B?{Oz~R@e!R|qK~Vo!Sf2Z;BPjO}W@sqZxhtj3|FqA$ZU1+K&^t^PP>llS4mb1S z;VMzm9ZCtlDT|010y_rYAU31$5)>rL&(!yp2=2=|lVn?Pw}F$`GzC5d*1Jegj~hF} zigKhrmJI~v309ccqvE5z6`QNT^01__J%93TYYWuVGjyssvur~hd8aM1 zf^FLj{REk?A#6I?<5U^qgG09BB(5aD)pEe~rDURA*;L9V6(wu-QAiN25}Cxgl!S9B zIeYH@t08Dt;F3BKsP?ej$67g@a*E}l=_4%0f&TvqOq%!W6MN2mTl+5%3#18`+_SZq zOSw%J`dCyEwUpJF{hv-O+`zKcScT)ElAY$%(B4e(vWYW}{Imc&*HAxBgrM=8L* zfb-lOv;d-pt~Pw<#sVI*(|@uP_*2R5QusybPEb90ITwTh_Y(135IO_vh|Dd7rhjgV zXI5JK#lt{Md}l0~%~S%w7{NxYYLHlDiE;@@ySR+y`*oTf%{(axJ`-4@BhQL$hmb&} zhag<0KXbTgEm`~&%Z@K(;~~tjpZ}rcTgvQIgDD*AJF-Lbvxd^{j#Uyv*S>u*R}{*%I`_A;A>4>usO2p zpnDFjyHdD?VoTgqy2)!HW**u?f8`iIB;*;XrgqhAQlhklcz8TZaAj7fiQh{JS}7Th zU%1+*JQlVdvTjt;Ge_DI4DJwC;v>bPcAU&a$&#mbaBjFmBA4v$odjCWhwivdNV~5M z1dVJ*GF|qTUkdg~vGWN+D;+hNWZt=UI|&G-lx#a+BgmvSdA&wfm$fj#*$Qb)Q-Ey> zeyI|uG)Y83RM$*Oypg;f=X*Rs?9Sq? z#47>3NA@|7?0w%^hQV@g$31Ap!b&M&XHwR5TsaQQpl6APPsm_~<-StS4&NZQzt7|l zs<7-_3@0&RM$^Hv5IO}|&n56M>tqm~VA(o~9+Z?Am5%ky5}!|>OX*nnlsso{huo*` z|M;2jSrB4Z#%W@6(kO%-NpD3}&_!(V|J2sNN5bgu+vihf98UM!mrCbM*5?$ji+CRcJckHfYwwNXDc$pR3Kfa6t1!U1iPizVwQ7k0dI)V56kIav|M^1 z*%%knE6ae0r?A)Z0YWR%TtIl5Bd`RWTJSuTEQE|D@t&TP5qAur?nrRuqU5x>nMfA; zLcH{`Y)Lf}HrY#8W)|?ivQ0o41Ls+=&-33PwzlWyJr=x5v(QRPKh8CIC}pshdUP%G zeuQ9=t|IW6TvsI}R96DAdH{A1TVKtPwoum$q>wV%FSwc8WNKM9ZvoqNHnQ)b)yg4d zagIcg@EP(qChbyF-a@i-?W28*xZgPwERYhPQnJ3D9gKGo3zT0XOrhgJd?N3qFbDDQ z4R`%hd9PaJQq#mi;&HxwMOnKlYg?5`rKBpU09`j^fvWSl28&ZS(-nf<*dthG-4Iu|f}BAeQ`m(Ap1^aZe=Sa74}@y{hQ zxRUofK=4J}6-;O*%rrA>iG7~&Q@Qvg54TK!X z1i)voQ1R=H1<)HQA4!-D1Z2Ok?|EaH>Pv){wNe7vm0*&0>>fODSz*tvV=SBJPZq2< zg=EMj$f`y$lZ;Dc9?TeNFshjh$sjrwe}mwd!(hKD_+=&8@+N{tZy?f%u4Isv1DHML z=Lwd&L3T4oY(PN4aF)m>b%D;MOjew+kL3w_bGe@dVmIwPkv-^jbrRX*9a&?PC-oB7 z+7aBl7RZAW1~+8AQ-yFTGNdgDq{RP7qz$la+g}OPaV9W9Y9LvY;CUU)aNUwPPrQDc zOa^OWf$LcL6C>wUxMdc%CTP{=;pYv-^qfW3afe`f$_-Q9Bznn#J+oTd7aXgYz4w}IUqEvD;`!0 zaYWz3j$~)^1b(F^s^nKjCn#vRJp)N1K{U! z|3;1|fn={8$=owJbOv@0ZxH&^C-RI7sSeKUXC7Ks_m$nV$B6sFYj^LsS7unA%&7NF zvq;UHvz9Drogi4RAYxVxW6#zIc0SPRGw#T9t{rPWZ#bB<1SFC)lvQWtiDgxHY;zD- zQ;)leWMstq82tD~*OF~ag?-!+7LwW0rUU~T4m?5ZyxWz<$EN>GpgSPmo}VA}|$p}V&EcwHo>NP691c~oku^x|`>9g7OdzOqCRzm4{ z++_wz*w8Fj%kA3XjHOcwl!@%Nl(kaI!9&)5TiE8AWab-^HC70n8;5dOWO9g>E}*M) z>!pyBkc#9$4jb=uK6h)bZV7%h*7qY^l_{pm3+N;pj{R6^8u2QnPL&=K9 zmKjzOpzp|gar0ct4al8*VuE-m`=%@wmQUv{xK0}$R%#w?PZoMlvM>(uIT0<`l?w!w zWZOe|jZYDb3ujB&NC$2GDJxy#NV$~eUdX0FZ-b^w# zT5-Lx_n_Y)?;#nPb@l5?Jo6Np&?v0kY#x^pOOfD*@Gg`_5cmlq@3!y|B{a48b0qQjf81 z=(%K*EJugJq)o8g4?D8OuqS0ViI8K2p+xLr>0^1Qk3Qt7lv#ArxJKMt$==RgDMfSH zKvkl=yO!)jNfOSo-9m8Tp34T@mVm4$_7#HLa$)#nPriq2G9T&-%M>?+xY`uViNTap z?J~h28T>v%Jhjg+;B5q>Sz6=IBoL3>qSiyHa?hl|vf*hZhu|FXWWSj!f7pv&N#Nx7 z_7S@q<#N#L;ml5-b2*$TgW0z=={s9C98tu!%NvKS=2&!}4DEL{(@+7lX2ZPR1BA|) zo@C~FzpkY!Dn-84apavB(f8c_zKsMXRkF4bB^lQ1EKxywN())LK-fuS>mI-EB=m&e zUU$cx0AnLJW`gDHi>8Y#UM?pT@w$-%?w{DtR`&Nk;)ZwM2kcKWxZmdp<_J5IK|XLy zo{kTkyPK~V;l$wws^3!FPv?2e9rHSslemn#zx6Hi5Bxrv2U+BJfJy)sG8XO1+P$%cF? zi}4jgR|I6UGvhm#O*ymiwMVEc&b8 zNjXi+F*?=^>=4_K1BF3(X#fA*{;w~Y@&V%3Ei##p5YOl!6HAN!p^yz1g8Ozvn$tx* zBr6ju?+K{1(;s^+cj_BZt14U3@C+_O5&GGkGps!nWU$O|E_KT)ST*b_~BO z`(#rv;JIWrY*wg5X`tOwo~SAXUV$YEbNPHTkpfL6iK*T9cx$$%;MF#5uWrEhQtf$q ze>*N2f-8q-5&)|PU106@(31S7gXIC(ep=QDv6wb@r$sIgX)5fgZ~4+;;IAYY^yIZt zdagR56N3Qv*9eZe1f+*@gLmZm75`I%fti%Snt@CmkUn!bQzoZ6gpuBmpgNJwyDequ zYp36PCBbS}Bt_~Mc!*#yF_#59Lhvf=TV~UD_#-=7&ZVr{l0|atN@=zWZp(FbgutR9 z#Zv^woq>B6Pn={$+YGrOKN5_skSuavbfH80zD>mQH|7G8Gn2`Musf5?y_EOdl0*C) zVFZKzQuci&(y)nJ{{t+%2DeO)s*G;oppMd!Et#ybt|L$?`8ne0x@OtFStCpz)CvWn z(wI9kL4(cM)&;8<9>#2KyhiLUowu;YSwm3E8?e46+;HkDuR4*@r9{!*Jflr89gW3I zSyMyG*}l6N1)V33n%)pe%~YZ}1La$U$#bP+YGzK?gO+SiZzMY+ZVP*K+TDb~2Vf-?;Tv z$>-6EMAvKKpd2MFse>K5ATbk&iCOqm_CsGPhfJWOF_vAan?`G9D_HtE5i6RU##1H- zDn!o{M4ToEO&DW^6@9~@cnEt=u+pyG_+6D&rDUJLHrMd(}S&y=F)R68!RvO34PE3&Ub0)u)$ zrfk4e2J{8u9%hd_1VM{N@Y~Pg-BVI7wFFrq3?I{V z0`@HHG?hORR&?aDw7!rcGdVFQNRNc96562D?2Ou#8h+tak}16q+=+6UU)Uxbxl^x6 zHh@G)q4)0?v0Yc@*s3jIigPTtooOIsm&%4P>SrRK$lU3^t|mx#QptW)aNBDv{f;tlyTBmCu}pv|mY<%+JBk43RrsNCwn1jO#w)xgO^T z4&Yku<(9!x!#a}yQHvZ#3B4=FZ2Lep#d5D|3jD9I+^?Hj&wjn8sxuz!;|8**aFtx1 z*bBL2+QgV=^85-R#B>;ZA?vG>eLZslDwnd}&rrUW(!3CYuSncez22UacFkoil}NX1 zqDgm1me-3@YsVH11VrBywh~g-JP@p6f-qk=w}m{COmRm7LrMw=$!FXS%Rt245? z?hHi(r%d`g3z)x^V56=oR|sQ1w~Rr)LhK93&A5Shq^B~v+E&PQ{aR!?CDJCZXn=-N z+O(8eMBO0%E#2Y0sy(bi^Dn>Ab2N85HDT9q*!aMe{}sa6*N$MRiXC3MpY1qo4pIpc z4%&3GoLUl~i5%D-R#3y(xr+^{ZkM_NxBT`QbrNZDmdL<#lGRKW)IiuNe$e|Og%~Hm z(Q_#=d$K92mc@`YEUcm>0Hsbv|7(JHGFL|khqnkrijV+yy*vO7)IPJJ6NGsbEMton z%3iU}Jb@*h3;xQCW>YfqBLt`G11V3pT`;?E&+0URT`9TMk&Qy9lfH;`|9~)$me2A~ z1isGN)JXu1O@QG+#qWGwV-9$92yRof9iNi5GHW-fIMZ!5Z-}B)XpbwS5n}6$lMn zAy_`qJeR$z%;?nFgdHXulCkcH+=PeZ3#aGXkib_Z?l&_*k}{jTNlmc8C;XIKBmx(}ogN4%xyAg8P1hri2wr!Bpgsux{pMhGtVC5J1 z2+RG-dCRE{$0ApWZ1CEG!pHLYr-&_@js^eQ6GpfrdO4aboZ0LA(SA;|;f|AH99a;% zM3^kMCm9um*q4@hT_Se=sTy#srb%HO$i?>>2nM=q0d8NIWV)`5gs>SpB?G%i-XNZd zObO2+;%R|C_>t+J3Zw2P>Sb%-d`PT`wlXn-qc8onOA*b z#Xd|z4xI+(*W-be`(V0g`C-V~k=;DCKQjZ^l@cdk z0_g|BYQ2^0uWg!ry+W$sS*nW`hOcfpy^6$VD-!pRfo41L-j$G3NA_7aBxv3j8B1SI zf9=rNmFL?Pf{b#g8lmO!4^D^GG~5~q8B~RIe`(h6417k-&IXl86^Z*nf4~D<%amnY zAavf)*RO+x_E0U*F70>Xh$MvAt@9W`yiErGT(V!RIOww#@JpRwgjdb@P}gj_5&^NG zx$7V;En6Af+56s+5_aZfF7pJ}px=`t9+d{e&^87zWm^|2&#d<8XaClSZBpg|bJj%CFUKZ%R7A+(#Jp zMdq8OAtg?`c0UeW0`S}pm}|s#X}fkv>?3XfSl3IhsY2+v>>Di#3gXZ^_PjQQpgT_x zaS$?yoI6(v~Y> z=a^w^3j;_0yU%Ph4dqm+5)ZyiWTa>yaB^23<%s~;MeOV{l@pm}un<{~&$@v1Ceqg} zxKHMSvr0GeL}`-?+^~b#?9&@s+&98OTZVwxDE65>mwj1m)CzJ+Alu0H9eHtThs7Jq zkoo=;C9}-jx97_?xG_TKN#1}1dpxUffl7VzN|yzzn{?qaX6+Knv8>_b<~~DcG1Q7> zQ?SGl7BgI4+UGwLY;;rJgADUnUiU(<<-Q!Usmi5j+2ASsyht1rS%ch)(xz>xen@iZ zI9kZQ9wBzjMuN-$mc0ZD7kJefs&eIj?lQo2g50Y6(u933&2Xp_;C|hL3#Q(L)$q&t_y0Cg`W2SlJ5t$KDPTXd)+3j;`%JV6-^&}Y zOrTxk<$FO3Auc$;n8(_dn(xA zjU5VnPV9w;1l9F^uE}zY|>`jtVIyo?tz%~** zux@}I=0cpn5oKyrpof&QzMhp{MclL{7;6j6J8Q@~fb{SY@4xRC>O`Xbx!mZFEGy_E z3`M_h|Mp7@j^7}3nA8F=dp5ORLo$FB1WQ}CmbHM!KKsO)l7*&u1!~2#DKNqvgc-m5 z*==Ftdm`)DMlAa6NoMD-c~>?sS<5el4W*TO?by3*Ii-CdD-b)9@E3)|I_p`xY*HGo z6xKU;*+lM2Cdl=68?evJRX}iuhgTX*g{{0m?1HV6@k%FgdSsvbP?+^=fgX5hd}^QT zwFH`xkW~!0SHiH55x0Y74P=t8OEq0(_IzQP?ipf-bozUC)+|A5xtD%jd!vH6t7tk2 z8BnVIvq(JaRY9(9DS^KgLIY_t!4w1K8>*X_POpwZQ&@xBG$xdaqK2Qwi@N>^siocw5RhgyYY$7Qs@ zDp>-jD;yl5ZX*8Kbmbnx1uid$&l3SMYp9Mi@FNlEp9*6-6s+_fg7$GL@*ie^AB(!; zOe!R1e;e|8%si=|oFSf`Sh?WN&ZfHp@tjI#U%G6~@7=!3s(ssPA@^EwS#@moGp6SW s=)$*;R<4ZhxOLTLQ|1rWWHt7G0QpU#@kKj|ssI2007*qoM6N<$g2$q>-~a#s literal 0 HcmV?d00001 diff --git a/data/license.txt b/data/license.txt new file mode 100644 index 0000000..067da9f --- /dev/null +++ b/data/license.txt @@ -0,0 +1,11 @@ +These files: + +guioverlay.png +guiskin.png +guislider.png + +have been licensed under the + +"Creative Commons Deed / Attribution Non-commercial Share-Alike ( at-nc-sa )" + +(c) 2006-2007 Markus "makkE" Bekel diff --git a/data/loading_bar.png b/data/loading_bar.png new file mode 100755 index 0000000000000000000000000000000000000000..e9d462620c1212605ac0495de3020a593e7b219b GIT binary patch literal 1001 zcmVz@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy32;bRa{vGf6951U69E94oEQKA00(qQO+^Rk1s4o4CzAY20RR94 zKS@MER9M4xS4)B=AqXRseYH8?9BS^BSqKu)?oIWxQ28W*!k@qYXrvinW;C;W#-A<$ zX3Tfk>&CLNaR%cFSU<3A*ZL5KxtJF*=;#112AX!{YrVIJ$6 zHO!lCOr?`jj`iby96p8_$qR`my@-c6Ny;6N%YDCt2D;B!-}ehx1dA|4b$YZ2gY7Sj zWJL)HMr}2puwcQd2@ODi%r2nqH}g4*hJdNJ%xOvW)V18rKm%a}n%ByA#Ck}9~C zU?^de{p<7C2t7Q^gksusvbvRC7uK=b0t9uW0h<~54u+&*(l=AS4>g49^8r$znqhdd z1M$K449i8sHbz`^0BX)bK>^;?f~Xx14-xJZM4rQx;!m4P78^24A zPa8!;$LQVJ+Zp}dt~N{YRR;`QQ;dtgyv1&PpSLN1jl~!Zx#ZTf4NC_+Vkq5xvn6|l z)IYZEc>vZ}fH8IdnVx7*qPMqgsliC}B=0`v$Z&$0jG50ee8Nw{ebUjKP%Mjs-XY zeo5VKov8^BrrfBP?92gFB}kUH5@Mu>)sE{+=rKC#7ZL6KWo7R#u5@OtuOquMfZM5d z@oQr8lJquP`55V12{1l}YFsL`w9a!zZGz#4ABurvKSk*DBI;0jfyke_b!FvhKo}pc zuWF!8U^13-fJh_PIbVB5`ij@=dgI{uS)4v&xrl+;kl0=t^g3$>`UF~7Ic1V>!?61g X^CjBco;R{+00000NkvXXu0mjf$&0m_ literal 0 HcmV?d00001 diff --git a/data/loading_frame.png b/data/loading_frame.png new file mode 100755 index 0000000000000000000000000000000000000000..2a3bfc1e6fa814efdcd50ca6fbc47965fc0d17ed GIT binary patch literal 433 zcmeAS@N?(olHy`uVBq!ia0y~yU;;8395~p3WX}Hc`+*c=age(cLqiJ#!!Mvv!wUw6QUeBtR|yOZRx=nF#0%!^3bX-A za29w(7Bet#3xhBt!>lWA}7%45_&F_QpcK1_J>X z$G$KB>nj6&wFEqh%oi`%^r}?bQ;#8G%571G12)<9AyaQNG(7wEA)k?<;UxEggCan$ z$p3%d4|E-y5YT}@I~W-lIDno4vVgu50J;#!Vj(0&qH=^KxJ>^s`)iTdbtVQe28IQ% knI=^HU~T|~AP(^338U;Xo{Y*6>H8oRp00i_>zopr0C8(mpa1{> literal 0 HcmV?d00001 diff --git a/data/logo.png b/data/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..b3cab10c83bba632f9dacab5a2bb2968eb4a1a7d GIT binary patch literal 33151 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 APyhe` literal 0 HcmV?d00001 diff --git a/data/mapshot_frame.png b/data/mapshot_frame.png new file mode 100755 index 0000000000000000000000000000000000000000..bf69dba03a9298bd24fb67e637e5a6de9df059c8 GIT binary patch literal 751 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&6|H(?D8gCb z5n0T@z%2~Ij105pNB{-dOFVsD*`Khm^6JPe+s;_Rz`#`F>EaktaqI03MZN|H0T#z; zcmD6USs^?m=?qA_2ywdV*_h}0qcX~^7a2g?qFnK zVGv+&05Pe>pq@!^7mXT8r4Vpnm_trHH=JKHy}VFt14F|!)(Jm8G_x{XsbF|^gpa|) TDM|&HG#NZy{an^LB{Ts572#57 literal 0 HcmV?d00001 diff --git a/data/menus.cfg b/data/menus.cfg new file mode 100644 index 0000000..7fbdf38 --- /dev/null +++ b/data/menus.cfg @@ -0,0 +1,2020 @@ +// standard menu definitions +// don't modify, add personal menus to autoexec.cfg instead + +// Only for testing. This will break stuff, delete config.cfg after use. +reui = [exec data/menus.cfg; echo "Menus Reinitialized"] + +togglemainmenu = [ + || (cleartexgui) [cleargui 1] [showgui main] +] + +bind ESCAPE [togglemainmenu] + +checkrolloveraction = [ + if (>= (strstr $guirolloveraction $arg1) 0) [ + if (>= $numargs 2) [arg2] [result $guirolloveraction] + ] +] + +chooseplayermodel = [guirolloveraction = (playermodelbutton $playermodel); showgui playermodel] + +newgui main [ + guilist [ + guiimage (concatword "packages/icons/" (playermodelicon) ".jpg") [chooseplayermodel] 1.15 + guistrut 0.25 + guilist [ + newname = (getname) + guifield newname 15 [name $newname] + guispring + guilist [ + guibutton (playermodelname) [chooseplayermodel] 0 + guistrut 1 + guiimage (getcrosshair) [showgui crosshair] 0.5 + ] + ] + ] + guibar + guibutton "server browser.." "showgui servers" + if (isconnected) [ + guibar + if (|| $editing (m_edit (getmode))) [ + guibutton "editing.." "showgui editing" + ] + guibutton "vote game mode / map.." "showgui gamemode" + // guibutton "lanconnect" + // guibutton "connect localhost" + guibutton "switch team" [if (strcmp (getteam) "good") [team evil] [team good]] + guibutton "toggle spectator" [spectator (! (isspectator (getclientnum)))] "spectator" + guibutton "master.." [showgui master] + guibar + guibutton "options.." "showgui options" + guibutton "disconnect" "disconnect" "exit" + ] [ + guibutton "bot match.." "showgui botmatch" + guibutton "campaign.." "showgui campaign" + guibar + guibutton "options.." "showgui options" + guibutton "about.." "showgui about" + guibutton "quit" "quit" "exit" + ] +] 0 + +newgui about [ + guitext "Cube 2: Sauerbraten" 0 + guitext [by Wouter "Aardappel" van Oortmerssen, Lee "eihrul" Salzman,] 0 + guitext [Mike "Gilt" Dysart, Robert "baby-rabbit" Pointon,] 0 + guitext [John "geartrooper" Siar, Quinton "Quin" Reeves, and others] 0 + guitext "(for a full list of contributors see the readme)" 0 + guitext "http://sauerbraten.org/" 0 +] + +genmapitems = [ + looplist curmap $arg1 [ + guibutton $curmap (concat map $curmap) "cube" + ] +] +//17 + +ffamaps1 = "aard3c abyss academy access albatross akaritori akimiski alithia alloy antel anubis aod aqueducts arbana asenatra asthma averas" +ffamaps2 = "awoken bvdm_01 carbide cartel castle_trap catacombs cavefire church51 clash collusion colony complex conflict corruption crypta curvedm curvy_castle" +ffamaps3 = "darkdeath deathtek depot dirtndust dispute DM_BS1 dock dopamine douze duel5 duel7 duel8 dune elegy exist exo fallen" +ffamaps4 = "fanatic_quake fdm6 ferguson force frag-lab frag2 fragplaza frostbyte frozen fubuki fury ghetto gorge gothic-df guacamole gubo hades" +ffamaps5 = "hashi hator haze hdm3 headroom helligsted hektik hillfort hog2 horus idyll3 imhotep industry infernal injustice insipid island" +ffamaps6 = "janela justice kalking1 kastro katrez_d kffa killfactory kmap5 konkuri-to ksauer1 legacy legazzo lost_soul lost_world lostinspace maple masdm" +ffamaps7 = "mbt2 mbt9 mbt10 memento memoria metl2 metl3 metl4 mood moonlite neondevastation neonpanic nessus nmp8 nmp10 nucleus oasis" +ffamaps8 = "oddworld ognjen ogrosupply oldschool orbe orion osiris ot outpost paradigm pariah park pgdm phosgene phrantic pitch_black powerplant" +ffamaps9 = "purgatory refuge renegade rm1 rm5 roughinery ruby ruine saffier sandstorm sauerowalk sauerstruck sdm1 shadowed shindou shinmei1 shiva" +ffamaps10 = "simplicity skrdm1 skycastle-r slingshot souls spcr2 stahlbox stemple stronghold suburb suisei tartech teahupoo tejen thetowers thor torment" +ffamaps11 = "toxicity tumwalk turbine turmoil unworld unworld2 ventania waltz wake5 wdcd zamak zavial zdm2 ztn" +capturemaps1 = "aastha abbey access akimiski akroseum alithia anubis aod arabic asenatra asgard asteroids averas bklyn c_egypt c_lone c_valley" +capturemaps2 = "campo capture_night caribbean casa collide collusion core_refuge core_transfer corruption croma cwcastle damnation destiny dirtndust disc disruption donya" +capturemaps3 = "duomo dust2 earthstation eris eternal_valley evilness face-capture fallen fb_capture fc3 fc4 fc5 forge fragnostic frostbyte fusion genesis" +capturemaps4 = "ghetto gorge gothic-df hades hallo harbor haste hidden imhotep infamy infernal killcore3 kopenhagen laucin lostinspace luna mbt12" +capturemaps5 = "mc-lab meltdown2 mercury metro monastery nevil_c new_energy nitro nmp4 nmp9 nucleus ogrosupply overdrive ow pandora paradigm pariah" +capturemaps6 = "ph-capture pul1ctf reissen relic risk river_c river_keep ruby ruebli rust serenity skycastle-r snapper_rocks spcr stadium stronghold subterra" +capturemaps7 = "suburb surge tempest tortuga triforts turbulence turmoil twinforts urban_c valhalla venice waltz xenon zamak" +ctfmaps1 = "aastha abbey akimiski akroseum arbana asgard authentic autumn bad_moon berlin_wall bklyn breakout bt_falls campo capture_night casa catch22" +ctfmaps2 = "collide core_refuge core_transfer croma ctf_suite daemex damnation desecration destiny disc disruption divine duomo dust2 earthsea earthstation enigma" +ctfmaps3 = "eris eternal_valley europium evilness face-capture fire_keep flagstone forge forgotten fortress fragnostic fusion garden hallo harbor haste hidden" +ctfmaps4 = "idris infamy kiryu kopenhagen l_ctf laucin luna mach2 mbt1 mbt4 mbt12 mc-lab meltdown2 mercury metro mill new_energy" +ctfmaps5 = "nitro nucleus overdrive ow pandora pul1ctf ra recovery redemption regal reissen risk river_keep ruebli rust sacrifice shellshock2" +ctfmaps6 = "shipwreck siberia snapper_rocks spcr stadium stronghold subterra suburb surge tatooine tectonic tejen tempest tortuga triforts tubes turbulence" +ctfmaps7 = "twinforts unworld3 urban_c valhalla warlock wdcd xenon" +conceptmaps = "box_demo canyon door_demo firstevermap ladder platform_demo sauerbraten secondevermap spiralz" +spmaps = "mpsp6a mpsp6b mpsp6c mpsp9a mpsp9b mpsp9c mpsp10 lost level9 skrsp1 crnsp1" +rpgmaps = "k_rpg1 rpg_01" +allffamaps = (concat $ffamaps1 $ffamaps2 $ffamaps3 $ffamaps4 $ffamaps5 $ffamaps6 $ffamaps7 $ffamaps8 $ffamaps9 $ffamaps10 $ffamaps11) +allcapturemaps = (concat $capturemaps1 $capturemaps2 $capturemaps3 $capturemaps4 $capturemaps5 $capturemaps6 $capturemaps7) +allctfmaps = (concat $ctfmaps1 $ctfmaps2 $ctfmaps3 $ctfmaps4 $ctfmaps5 $ctfmaps6 $ctfmaps7) +allmaps = (concat $allffamaps $allcapturemaps $allctfmaps $conceptmaps $spmaps $rpgmaps) + +guirollovername = "" +guirolloveraction = "" +guirolloverimgpath = "" +guirolloverimgaction = "" +guirolloverpreviewname = "" +guirolloverpreviewaction = "" + +showmapshot = [ + guibar + mname = (checkrolloveraction "map " [if (> $numargs 0) [result $arg1] [at $guirollovername 0]]) + guilist [ + guiimage (concatword "packages/base/" $mname ".jpg") (checkrolloveraction "map ") 4 1 "data/cube.png" $mname + ] +] + +newgui maps [ + guilist [ + guistrut 17 1 + guilist [ guistrut 15 1; genmapitems $ffamaps1 ] + guilist [ guistrut 15 1; genmapitems $ffamaps2 ] + guilist [ guistrut 15 1; genmapitems $ffamaps3 ] + showmapshot + ] + guitab 2 + guilist [ + guistrut 17 1 + guilist [ guistrut 15 1; genmapitems $ffamaps4 ] + guilist [ guistrut 15 1; genmapitems $ffamaps5 ] + guilist [ guistrut 15 1; genmapitems $ffamaps6 ] + showmapshot + ] + guitab 3 + guilist [ + guistrut 17 1 + guilist [ guistrut 15 1; genmapitems $ffamaps7 ] + guilist [ guistrut 15 1; genmapitems $ffamaps8 ] + guilist [ guistrut 15 1; genmapitems $ffamaps9 ] + showmapshot + ] + guitab 4 + guilist [ + guistrut 17 1 + guilist [ guistrut 15 1; genmapitems $ffamaps10 ] + guilist [ guistrut 15 1; genmapitems $ffamaps11 ] + guilist [ guistrut 15 1 ] + showmapshot + ] + guitab capture + guilist [ + guistrut 17 1 + guilist [ guistrut 15 1; genmapitems $capturemaps1 ] + guilist [ guistrut 15 1; genmapitems $capturemaps2 ] + guilist [ guistrut 15 1; genmapitems $capturemaps3 ] + showmapshot + ] + guitab 2 + guilist [ + guistrut 17 1 + guilist [ guistrut 15 1; genmapitems $capturemaps4 ] + guilist [ guistrut 15 1; genmapitems $capturemaps5 ] + guilist [ guistrut 15 1; genmapitems $capturemaps6 ] + showmapshot + ] + guitab 3 + guilist [ + guistrut 17 1 + guilist [ guistrut 15 1; genmapitems $capturemaps7 ] + guilist [ guistrut 15 1 ] + guilist [ guistrut 15 1 ] + showmapshot + ] + guitab ctf + guilist [ + guistrut 17 1 + guilist [ guistrut 15 1; genmapitems $ctfmaps1 ] + guilist [ guistrut 15 1; genmapitems $ctfmaps2 ] + guilist [ guistrut 15 1; genmapitems $ctfmaps3 ] + showmapshot + ] + guitab 2 + guilist [ + guistrut 17 1 + guilist [ guistrut 15 1; genmapitems $ctfmaps4 ] + guilist [ guistrut 15 1; genmapitems $ctfmaps5 ] + guilist [ guistrut 15 1; genmapitems $ctfmaps6 ] + showmapshot + ] + guitab 3 + guilist [ + guistrut 17 1 + guilist [ guistrut 15 1; genmapitems $ctfmaps7 ] + guilist [ guistrut 15 1 ] + guilist [ guistrut 15 1 ] + showmapshot + ] + + guitab concept + guilist [ + guistrut 17 1 + guilist [ guistrut 15 1; genmapitems $conceptmaps ] + guilist [ guistrut 15 1 ] + guilist [ guistrut 15 1 ] + showmapshot + ] +] + +newgui capturemaps [ + guilist [ + guistrut 17 1 + guilist [ guistrut 15 1; genmapitems $capturemaps1 ] + guilist [ guistrut 15 1; genmapitems $capturemaps2 ] + guilist [ guistrut 15 1; genmapitems $capturemaps3 ] + showmapshot + ] + guitab 2 + guilist [ + guistrut 17 1 + guilist [ guistrut 15 1; genmapitems $capturemaps4 ] + guilist [ guistrut 15 1; genmapitems $capturemaps5 ] + guilist [ guistrut 15 1; genmapitems $capturemaps6 ] + showmapshot + ] + guitab 3 + guilist [ + guistrut 17 1 + guilist [ guistrut 15 1; genmapitems $capturemaps7 ] + guilist [ guistrut 15 1 ] + guilist [ guistrut 15 1 ] + showmapshot + ] +] "capture maps" + +newgui ctfmaps [ + guilist [ + guistrut 17 1 + guilist [ guistrut 15 1; genmapitems $ctfmaps1 ] + guilist [ guistrut 15 1; genmapitems $ctfmaps2 ] + guilist [ guistrut 15 1; genmapitems $ctfmaps3 ] + showmapshot + ] + guitab 2 + guilist [ + guistrut 17 1 + guilist [ guistrut 15 1; genmapitems $ctfmaps4 ] + guilist [ guistrut 15 1; genmapitems $ctfmaps5 ] + guilist [ guistrut 15 1; genmapitems $ctfmaps6 ] + showmapshot + ] + guitab 3 + guilist [ + guistrut 17 1 + guilist [ guistrut 15 1; genmapitems $ctfmaps7 ] + guilist [ guistrut 15 1 ] + guilist [ guistrut 15 1 ] + showmapshot + ] +] "ctf maps" + +custommaps = "" +newgui custommaps [ + looplist curmap $custommaps [ + guibutton $curmap (concat map $curmap) "cube" + ] +] "custom maps" +showcustommaps = [ + custommaps = "" + loopfiles curmap "packages/base" "ogz" [ + if (< (indexof $allmaps $curmap) 0) [ + custommaps = (concat $custommaps (escape $curmap)) + ] + ] + custommaps = (sortlist $custommaps x y [naturalsort $x $y]) + showgui custommaps +] +macro playermodelbutton [cleargui 1; playermodel %1] + +newgui playermodel [ + guilist [ + guilist [ + loop i $playermodelnum [ + guibutton (playermodelname $i) (playermodelbutton $i) (playermodelicon $i) + ] + ] + guibar + pmidx = (substr $guirolloveraction (strlen (playermodelbutton ""))) + pmidx = (max 0 (min (- $playermodelnum 1) $pmidx)) + guilist [ + guilist [ + guispring + guiplayerpreview $pmidx 0 6 (checkrolloveraction "playermodel ") 4 1 (playermodelname $pmidx) + guispring + ] + guitextbox (playermodelstory $pmidx) 40 9 + ] + ] +] + +crosshairs = [ +"data/crosshair.png data/crosshair_hit.png" +"packages/crosshairs/crosshair_0.png packages/crosshairs/crosshair_hit_0.png" +"packages/crosshairs/crosshair_1.png packages/crosshairs/crosshair_hit_1.png" +"packages/crosshairs/crosshair_2.png packages/crosshairs/crosshair_hit_2.png" +"packages/crosshairs/crosshair_3.png packages/crosshairs/crosshair_hit_3.png" +"packages/crosshairs/crosshair_4.png packages/crosshairs/crosshair_hit_4.png" +"packages/crosshairs/crosshair_5.png packages/crosshairs/crosshair_hit_5.png" +"packages/crosshairs/crosshair_6.png packages/crosshairs/crosshair_hit_6.png" +"packages/crosshairs/crosshair_7.png packages/crosshairs/crosshair_hit_7.png" +"packages/crosshairs/crosshair_8.png packages/crosshairs/crosshair_hit_8.png" +"packages/crosshairs/crosshair_9.png packages/crosshairs/crosshair_hit_9.png" +"packages/crosshairs/crosshair_10.png packages/crosshairs/crosshair_hit_10.png" +"packages/crosshairs/crosshair_11.png packages/crosshairs/crosshair_hit_11.png" +"packages/crosshairs/crosshair_12.png packages/crosshairs/crosshair_hit_12.png" +"packages/crosshairs/crosshair_13.png packages/crosshairs/crosshair_hit_13.png" +"packages/crosshairs/crosshair_14.png packages/crosshairs/crosshair_hit_14.png" +"packages/crosshairs/crosshair_15.png packages/crosshairs/crosshair_hit_15.png" +"packages/crosshairs/crosshair_16.png packages/crosshairs/crosshair_hit_16.png" +"packages/crosshairs/crosshair_17.png packages/crosshairs/crosshair_hit_17.png" +"packages/crosshairs/crosshair_18.png packages/crosshairs/crosshair_hit_18.png" +"packages/crosshairs/crosshair_19.png packages/crosshairs/crosshair_hit_19.png" +"packages/crosshairs/crosshair_20.png packages/crosshairs/crosshair_hit_20.png" +"packages/crosshairs/crosshair_21.png packages/crosshairs/crosshair_hit_21.png" +"packages/crosshairs/crosshair_22.png packages/crosshairs/crosshair_hit_22.png" +"packages/crosshairs/crosshair_23.png packages/crosshairs/crosshair_hit_23.png" +"packages/crosshairs/crosshair_24.png packages/crosshairs/crosshair_hit_24.png" +"packages/crosshairs/crosshair_25.png packages/crosshairs/crosshair_hit_25.png" +"packages/crosshairs/crosshair_26.png packages/crosshairs/crosshair_hit_26.png" +] + +newgui crosshair [ + guitext "crosshair size" + guislider crosshairsize + loop row (div (+ (listlen $crosshairs) 6) 7) [ + guilist [ + loop col 7 [ + ch = (at $crosshairs (+ (* $row 7) $col)) + if (!=s $ch "") [ + guiimage (at $ch 0) [ + cleargui 1 + loadcrosshair @(at $ch 0) 0 + loadcrosshair @(at $ch (if (> (listlen $ch) 1) 1 0)) 2 + ] 0.5 + ] + ] + ] + ] +] + +newgui master [ + guistayopen [ + if (ismaster (getclientnum)) [ + guibutton "relinquish master" "setmaster 0" + ] [ + guibutton "claim master" "setmaster 1" + ] + guilist [ + guitext "mastermode: " + mm = (getmastermode) + guiradio "open (0) " mm 0 "mastermode 0" + guiradio "veto (1) " mm 1 "mastermode 1" + guiradio "locked (2) " mm 2 "mastermode 2" + guiradio "private (3) " mm 3 "mastermode 3" + ] + guibar + looplist cn (listclients 0 0) [ + guilist [ + guitext (concatword (getclientname $cn) ": ") (getclienticon $cn) + guibutton "kick " [kick @cn] + guibutton "toggle spectator " [spectator @(= (isspectator $cn) 0) @cn] + if (m_teammode (getmode)) [ + guibutton "switch team " [setteam @cn @(? (=s (getclientteam $cn) "good") "evil" "good")] + ] + if (ismaster $cn) [ + guibutton "take master" [setmaster 0 @cn] + ] [ + guibutton "give master" [setmaster 1 @cn] + ] + ] + ] + ] +] + +botmatchcount = 5 +botmatchminskill = 50 +botmatchmaxskill = 100 + +startbotmatch = [ + if (isconnected 0 0) [ + echo "You must disconnect from the current multiplayer game before starting a bot match." + ] [ + loop i $botmatchcount [addbot (rnd (+ $botmatchmaxskill 1) $botmatchminskill)] + ] +] + +newgui botmatch [ + guitext "bot amount" + guislider botmatchcount 0 32 + guitext "bot minimum skill" + guislider botmatchminskill 50 101 [if (< $botmatchmaxskill $botmatchminskill) [botmatchmaxskill = $botmatchminskill]] + guitext "bot maximum skill" + guislider botmatchmaxskill 50 101 [if (> $botmatchminskill $botmatchmaxskill) [botmatchminskill = $botmatchmaxskill]] + guibutton "start match.." [guionclear [startbotmatch]; showgui gamemode] +] "bot match" + +newgui campaign [ + guibutton "start Private Stan Sauer" "showgui privatestansauer" + guibutton "start An Army Of One" "showgui armyofone" + guibutton "start Lost" "sp lost" "cube" + guibutton "start Meltdown" "sp skrsp1" "cube" + guibutton "start Missile Pass" "sp crnsp1" "cube" + guibutton "start Level 9" "sp level9" "cube" + guibar + guibutton "start DMSP map.." "mode -2; showgui maps" + guicheckbox "slow motion" "slowmosp" + guitext "skill (default: 3)" + guislider skill +] + +newgui armyofone [ + guilist [ + guilist [ + guibutton "Part I" "sp mpsp6a" "cube" + guibutton "Part II" "sp mpsp6b" "cube" + guibutton "Part III" "sp mpsp6c" "cube" + ] + showmapshot (substr $guirolloveraction 3) + ] +] "An Army Of One" + +newgui privatestansauer [ + guilist [ + guilist [ + guibutton "Run N' Gun Part I" "sp mpsp9a" "cube" + guibutton "Run N' Gun Part II" "sp mpsp9b" "cube" + guibutton "Run N' Gun Part III" "sp mpsp9c" "cube" + guibutton "THE SERIOUSLY BIG VALLEY" "sp mpsp10" "cube" + ] + showmapshot (substr $guirolloveraction 3) + ] +] "Private Stan Sauer" + +newgui servers [ + guistayopen [ + guiservers [ + guilist [ + guibutton "update from master server" "updatefrommaster" + guibar + guicheckbox "search LAN" searchlan + guibar + guicheckbox "auto-update" autoupdateservers + guibar + guicheckbox "auto-sort" autosortservers + if (= $autosortservers 0) [ + guibar + guibutton "sort" "sortservers" + ] + ] + guibar + ] 17 + ] +] "" [initservers] + +newgui gamemode [ + guilist [ + guilist [ + guibutton "ffa" "mode 0; showgui maps" + guibutton "coop-edit" "mode 1; showgui maps" + guibutton "teamplay" "mode 2; showgui maps" + guibutton "instagib" "mode 3; showgui maps" + guibutton "instagib team" "mode 4; showgui maps" + guibutton "efficiency" "mode 5; showgui maps" + guibutton "efficiency team" "mode 6; showgui maps" + guibutton "tactics" "mode 7; showgui maps" + guibutton "tactics team" "mode 8; showgui maps" + guibutton "capture" "mode 9; showgui capturemaps" + guibutton "regen capture" "mode 10; showgui capturemaps" + ] + guibar + guilist [ + guibutton "ctf" "mode 11; showgui ctfmaps" + guibutton "insta ctf" "mode 12; showgui ctfmaps" + guibutton "efficiency ctf" "mode 17; showgui ctfmaps" + guibutton "protect" "mode 13; showgui ctfmaps" + guibutton "insta protect" "mode 14; showgui ctfmaps" + guibutton "efficiency protect" "mode 18; showgui ctfmaps" + guibutton "hold" "mode 15; showgui capturemaps" + guibutton "insta hold" "mode 16; showgui capturemaps" + guibutton "efficiency hold" "mode 19; showgui capturemaps" + guibutton "collect" "mode 20; showgui ctfmaps" + guibutton "insta collect" "mode 21; showgui ctfmaps" + guibutton "efficiency collect" "mode 22; showgui ctfmaps" + ] + ] +] + +showfileeditor = [ + guinoautotab [ + guieditor $arg1 $arg2 $arg3 + textinit $arg1 $arg1 + guistayopen [ + guilist [ + guibutton "load" [textfocus @arg1; textload @arg1] + guibar + guibutton "save" [textfocus @arg1; textsave @arg1] + guibar + guibutton "exec" [textfocus @arg1; textexec] + guibar + guibutton "copy" [textfocus @arg1; textcopy] + guibar + guibutton "paste" [textfocus @arg1; textpaste] + guibar + guibutton "select" [textfocus @arg1; textselectall] + guibar + guibutton "clear" [textfocus @arg1; textclear] + ] + ] + ] +] + +notepadfile = "untitled.txt" + +newgui notepad [ + guifield notepadfile -30 + showfileeditor $notepadfile -80 20 +] + +notepad = [ + if (> $numargs 0) [notepadfile = $arg1] + showgui notepad +] + +newgui pastebuffer [ + guinoautotab [ + guieditor "#pastebuffer" -80 20 + guistayopen [ + guilist [ + guibutton "exec" [textfocus "#pastebuffer"; textexec] + guibar + guibutton "clear" [textfocus "#pastebuffer"; textclear] + ] + ] + ] +] + +pastebuffer = [showgui pastebuffer] + +newgui scratchpad [ + guinoautotab [ + guieditor "#scratchpad" -80 20 + guistayopen [ + guilist [ + guibutton "exec" [textfocus "#scratchpad"; textexec] + guibar + guibutton "copy" [textfocus "#scratchpad"; textcopy] + guibar + guibutton "paste" [textfocus "#scratchpad"; textpaste] + guibar + guibutton "select" [textfocus "#scratchpad"; textselectall] + guibar + guibutton "clear" [textfocus "#scratchpad"; textclear] + ] + ] + ] +] + +scratchpad = [showgui scratchpad] + +newmapsize = 12 +savemap_name = temp + +newgui "editing" [ //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guikeeptab 1 + + guibutton "toggle edit mode^t^t^f2[E]" "edittoggle" + guibar //------------------------------------------------------------------------- + guilist [ + guilist [ + guitext "select^t^t^t^t^f2[mouse-left *drag]^t" + guitext "extend selection^t^t^f2[mouse-right]" + guitext "move selection^t^t^t^f2[mouse-right *drag]" + guitext "deselect^t^t^t^t^f2[SPACE]" + guitext "select all ents in box^t^f2[keypad-ENTER]" + ] + guilist [ + guitext "select corners^t^t^t^f2[mouse-middle *drag]" + guitext "reorient^t^t^t^t^f2[mouse-right]" + guitext "passthrough^t^t^t^f2[LCTRL *hold]" + guitext "center view on ent^t^t^f2[COMMA + mousewheel]" + guitext "select all ents matching^t^f2[N]" + ] + ] + guibar //------------------------------------------------------------------------- + guilist [ + guilist [ + guitext "push/pull selection^t^t^f2[mousewheel]^t^t" + guitext "change gridsize^t^t^f2[G + mousewheel]" + guitext "mirror on selected axis^t^f2[X]" + ] + guilist [ + guitext "push cube face^t^t^f2[F + mousewheel]" + guitext "push corner with cursor^t^f2[Q + mousewheel]" + guitext "rotate^t^t^t^t^f2[R + mousewheel]" + ] + ] + guibar //------------------------------------------------------------------------- + guilist [ + guilist [ + guitext "undo^t^t^t^t^t^f2[U] [Z]^t^t^t" + guitext "copy^t^t^t^t^t^f2[C]" + guitext "delete^t^t^t^t^f2[DELETE]" + ] + guilist [ + guitext "redo^t^t^t^t^t^f2[I]" + guitext "paste^t^t^t^t^f2[V]" + ] + ] + guibar //------------------------------------------------------------------------- + guilist [ + guilist [ + guitext "change textures^t^t^f2[Y + mousewheel]^t" + guicheckbox "texture all faces^t^t^f2[0]" "allfaces" + guicheckbox "toggle outline^t^t^t^f2[7]" "outline" + ] + guilist [ + guibutton "texture palette..^t^t^f2[F2]" "showtexgui" + guibutton "materials.." "showgui materials" + guicheckbox "toggle wireframe^t^t^f2[8]" "wireframe" + ] + ] + +guitab "ents" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guilist [ + guilist [ + guibutton "edit selected ent..^t^t^f2[F3]^t^t^t" "showentgui" + guicheckbox "entity snap-to-grid^t^t^f2[6]" "entselsnap" + ] + guilist [ + guibutton "edit selected entity in console^t^f2[PERIOD]" "selentedit" + guicheckbox "entity selection" "entediting" + ] + ] + guibar //------------------------------------------------------------------------- + guitext "drop entities" + guilist [ + guilist [ + guiradio "at selection^t^t^t^t^t^t" entdrop 2 + guiradio "at selection & to the floor" entdrop 3 + ] + guilist [ + guiradio "at current position" entdrop 0 + guiradio "at current position & to the floor" entdrop 1 + ] + ] + guibar //------------------------------------------------------------------------- + guitext "newent *" + guilist [ + guilist [ + guibutton "light..^t^t^t^t^t" "resetlight;showgui newlight" + guibutton "playerstart" "newent playerstart" + guibutton "base" "newent base" + guibutton "trigger.." "showgui triggers" + ] + guilist [ + guibutton "mapmodel..^t^t^f2[F4]^t^t" "showgui mapmodels" + guibutton "playerstart team-1" "newent playerstart 1" + guibutton "flag team-1" "newent flag 1" + guibutton "monster.." "showgui monsters" + ] + guilist [ + guibutton "teleport.." "showgui newteleport" + guibutton "playerstart team-2" "newent playerstart 2" + guibutton "flag team-2" "newent flag 2" + ] + ] + guitext "pickup entities:" + guilist [ + guilist [ + guibutton "shells^t^t^t^t^t^t^t" "newent shells" + guibutton "bullets" "newent bullets" + guibutton "rockets" "newent rockets" + guibutton "riflerounds" "newent riflerounds" + guibutton "grenades" "newent grenades" + guibutton "cartridges" "newent cartridges" + ] + guilist [ + guibutton "health" "newent health" + guibutton "healthboost" "newent healthboost" + guibutton "greenarmour" "newent greenarmour" + guibutton "yellowarmour" "newent yellowarmour" + guibutton "quaddamage" "newent quaddamage" + guibutton "select all pickup ents ^f2/findpickupents" "findpickupents" + ] + ] + +guitab "lighting" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guibutton "maplighting.. ^f2/maplighting" "showgui _maplighting" + guibar //------------------------------------------------------------------------- + lightingstuff + +guitab "skybox" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guilist [ + guistayopen [ + guilist [ genskyitems $skies1 ] + guilist [ genskyitems $skies2 ] + guilist [ genskyitems $skies3 ] + showskyshot + ] + ] + +guitab "sky" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + _skyboxcolour_r = (& (>> $skyboxcolour 16) 0xFF) + _skyboxcolour_g = (& (>> $skyboxcolour 8) 0xFF) + _skyboxcolour_b = (& (>> $skyboxcolour 0) 0xFF) + guilist [ + guitext "skyboxcolour " + guicolor $skyboxcolour + ] + guislider _skyboxcolour_r 0 255 [skyboxcolour $_skyboxcolour_r $_skyboxcolour_g $_skyboxcolour_b] + guislider _skyboxcolour_g 0 255 [skyboxcolour $_skyboxcolour_r $_skyboxcolour_g $_skyboxcolour_b] + guislider _skyboxcolour_b 0 255 [skyboxcolour $_skyboxcolour_r $_skyboxcolour_g $_skyboxcolour_b] + guibar //------------------------------------------------------------------------- + guilist [ + guitext "spinsky " + guifield spinsky 5 + guistayopen [ guibutton "- " [spinsky (+fround $spinsky -0.1)] ] + guistayopen [ guibutton "+" [spinsky (+fround $spinsky 0.1)] ] + ] + guibar //------------------------------------------------------------------------- + guitext "yawsky" + guislider yawsky + + +guitab "cloudlayer" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guistayopen [ + guilist [ + guilist [ + guitext "cloudlayer^t^t^t^t^t^t" + guibutton "skyboxes/clouds01.png" [cloudlayer "skyboxes/clouds01.png"] + guibutton "skyboxes/clouds02.png" [cloudlayer "skyboxes/clouds02.png"] + guibutton "skyboxes/clouds03.png" [cloudlayer "skyboxes/clouds03.png"] + guibutton "skyboxes/white_bk.jpg" [cloudlayer "skyboxes/white_bk.jpg"] + ] + guilist [ + guibutton "*no clouds*" [cloudlayer ""] + guibutton "blindabuser/blindaclouds.png" [cloudlayer "blindabuser/blindaclouds.png"] + guibutton "skyboxes/cloud_ring.png" [cloudlayer "skyboxes/cloud_ring.png"] + guibutton "textures/razgriz/cloud03.png" [cloudlayer "textures/razgriz/cloud03.png"] + guibutton "textures/razgriz/cloud04.png" [cloudlayer "textures/razgriz/cloud04.png"] + ] + ] + ] + guibar //------------------------------------------------------------------------- + _cloudcolour_r = (& (>> $cloudcolour 16) 0xFF) + _cloudcolour_g = (& (>> $cloudcolour 8) 0xFF) + _cloudcolour_b = (& (>> $cloudcolour 0) 0xFF) + guilist [ + guitext "cloudcolour " + guicolor $cloudcolour + ] + guislider _cloudcolour_r 0 255 [cloudcolour $_cloudcolour_r $_cloudcolour_g $_cloudcolour_b] + guislider _cloudcolour_g 0 255 [cloudcolour $_cloudcolour_r $_cloudcolour_g $_cloudcolour_b] + guislider _cloudcolour_b 0 255 [cloudcolour $_cloudcolour_r $_cloudcolour_g $_cloudcolour_b] + guibar //------------------------------------------------------------------------- + guilist [ + guilist [ + guilist [ + guitext "cloudalpha^t" + guifield cloudalpha 5 + guistayopen [ guibutton "- " [cloudalpha (+fround $cloudalpha -0.05)] ] + guistayopen [ guibutton "+^t^t" [cloudalpha (+fround $cloudalpha 0.05)] ] + ] + + guilist [ + guitext "cloudfade^t^t" + guifield cloudfade 5 + guistayopen [ guibutton "- " [cloudfade (+fround $cloudfade -0.05)] ] + guistayopen [ guibutton "+^t^t" [cloudfade (+fround $cloudfade 0.05)] ] + ] + ] + guilist [ + guilist [ + guitext "cloudheight^t" + guifield cloudheight 5 + guistayopen [ guibutton "- " [cloudheight (+fround $cloudheight -0.01)] ] + guistayopen [ guibutton "+^t^t" [cloudheight (+fround $cloudheight 0.01)] ] + ] + + guilist [ + guitext "cloudscale^t^t" + guifield cloudscale 5 + guistayopen [ guibutton "- " [cloudscale (+fround $cloudscale -0.0625)] ] + guistayopen [ guibutton "+^t^t" [cloudscale (+fround $cloudscale 0.0625)] ] + ] + ] + ] + guibar //------------------------------------------------------------------------- + guilist [ + guilist [ + guilist [ + guitext "cloudoffsetx^t" + guifield cloudoffsetx 5 + guistayopen [ guibutton "- " [cloudoffsetx (+fround $cloudoffsetx -0.01)] ] + guistayopen [ guibutton "+^t^t" [cloudoffsetx (+fround $cloudoffsetx 0.01)] ] + ] + guilist [ + guitext "cloudoffsety^t" + guifield cloudoffsety 5 + guistayopen [ guibutton "- " [cloudoffsety (+fround $cloudoffsety -0.01)] ] + guistayopen [ guibutton "+" [cloudoffsety (+fround $cloudoffsety 0.01)] ] + ] + ] + guilist [ + guilist [ + guitext "cloudscrollx^t" + guifield cloudscrollx 5 + guistayopen [ guibutton "- " [cloudscrollx (+fround $cloudscrollx -0.01)] ] + guistayopen [ guibutton "+^t^t" [cloudscrollx (+fround $cloudscrollx 0.01)] ] + ] + guilist [ + guitext "cloudscrolly^t" + guifield cloudscrolly 5 + guistayopen [ guibutton "- " [cloudscrolly (+fround $cloudscrolly -0.01)] ] + guistayopen [ guibutton "+" [cloudscrolly (+fround $cloudscrolly 0.01)] ] + ] + guilist [ + guitext "spincloudlayer^t" + guifield spincloudlayer 5 + guistayopen [ guibutton "- " [spincloudlayer (+fround $spincloudlayer -0.1)] ] + guistayopen [ guibutton "+" [spincloudlayer (+fround $spincloudlayer 0.1)] ] + ] + ] + ] + +guitab "fog" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guitext "fog" + guislider fog 128 8192 + _fogcolour_r = (& (>> $fogcolour 16) 0xFF) + _fogcolour_g = (& (>> $fogcolour 8) 0xFF) + _fogcolour_b = (& (>> $fogcolour 0) 0xFF) + guilist [ + guitext "fogcolour " + guicolor $fogcolour + ] + guislider _fogcolour_r 0 255 [fogcolour $_fogcolour_r $_fogcolour_g $_fogcolour_b] + guislider _fogcolour_g 0 255 [fogcolour $_fogcolour_r $_fogcolour_g $_fogcolour_b] + guislider _fogcolour_b 0 255 [fogcolour $_fogcolour_r $_fogcolour_g $_fogcolour_b] + guibar //------------------------------------------------------------------------- + _fogdomecolour_r = (& (>> $fogdomecolour 16) 0xFF) + _fogdomecolour_g = (& (>> $fogdomecolour 8) 0xFF) + _fogdomecolour_b = (& (>> $fogdomecolour 0) 0xFF) + guilist [ + guitext "fogdomecolour (0 = use fogcolour) " + guicolor $fogdomecolour + ] + guislider _fogdomecolour_r 0 255 [fogdomecolour $_fogdomecolour_r $_fogdomecolour_g $_fogdomecolour_b] + guislider _fogdomecolour_g 0 255 [fogdomecolour $_fogdomecolour_r $_fogdomecolour_g $_fogdomecolour_b] + guislider _fogdomecolour_b 0 255 [fogdomecolour $_fogdomecolour_r $_fogdomecolour_g $_fogdomecolour_b] + guilist [ + guilist [ + guilist [ + guitext "fogdomemax^t" + guifield fogdomemax 5 + guistayopen [ guibutton "- " [fogdomemax (+fround $fogdomemax -0.01)] ] + guistayopen [ guibutton "+^t^t" [fogdomemax (+fround $fogdomemax 0.01)] ] + ] + guilist [ + guitext "fogdomemin^t" + guifield fogdomemin 5 + guistayopen [ guibutton "- " [fogdomemin (+fround $fogdomemin -0.01)] ] + guistayopen [ guibutton "+" [fogdomemin (+fround $fogdomemin 0.01)] ] + ] + ] + guilist [ + guilist [ + guitext "fogdomeclip^t" + guifield fogdomeclip 5 + guistayopen [ guibutton "- " [fogdomeclip (+fround $fogdomeclip -0.01)] ] + guistayopen [ guibutton "+" [fogdomeclip (+fround $fogdomeclip 0.01)] ] + ] + + guilist [ + guitext "fogdomeheight^t" + guifield fogdomeheight 5 + guistayopen [ guibutton "- " [fogdomeheight (+fround $fogdomeheight -0.01)] ] + guistayopen [ guibutton "+" [fogdomeheight (+fround $fogdomeheight 0.01)] ] + ] + ] + ] + guilist [ + guicheckbox "fogdomecap^t^t^t^t^t^t" "fogdomecap" + guicheckbox "fogdomeclouds" "fogdomeclouds" + ] + +guitab "height&blendmap" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guilist [ + guilist [ + guitext "toggle heightmap mode^t^t^f2[H]^t^t^t" + guitext "push/pull heightmap^t^t^t^f2[mousewheel]" + ] + guilist [ + guitext "select heightmap brush^t^f2[B + mousewheel]" + ] + ] + guibar //------------------------------------------------------------------------- + guitext "blend paint mode" + guilist [ + guilist [ + guiradio "off^t^t^t^t^t^t^f2[keypad 0]^t" blendpaintmode 0 + guiradio "dig^t^t^t^t^t^t^f2[keypad 2]" blendpaintmode 2 + guiradio "inverted dig^t^t^t^t^f2[keypad 4]" blendpaintmode 4 + ] + guilist [ + guiradio "replace^t^t^t^t^f2[keypad 1]" blendpaintmode 1 + guiradio "fill^t^t^t^t^t^f2[keypad 3]" blendpaintmode 3 + guiradio "inverted fill^t^t^t^f2[keypad 5]" blendpaintmode 5 + ] + ] + guitext "paint blendmap^t^t^t^f2[mouse-left]" + guibutton "change blend brush^t^t^t^f2[mousewheel]" "nextblendbrush" + guibutton "rotate blend brush^t^t^t^f2[mouse-right]" "rotateblendbrush" + guibutton "clear entire blendmap^t^t^f2/clearblendmap" "clearblendmap" + guibutton "clear blendmap in selection^t^f2/clearblendmapsel" "clearblendmapsel" + +guitab "map" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guitext "save map:" + guifield savemap_name 20 [ savemap $savemap_name ] + guibutton [load @savemap_name map] "map $savemap_name" + guibutton "newmap (default size: 12)" "newmap $newmapsize" + guislider "newmapsize" 10 16 + guibutton "increase mapsize (2x)" "mapenlarge" + guitext "max undo size (default: 8 MB)" + guislider "undomegs" 1 20 + guibutton "optimize geometry" "remip" + guibutton "set map title/author" "saycommand [/maptitle @maptitle]" + guibutton "show custom maps" "showcustommaps" + +guitab "cfg" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guitext (mapcfgname) + showfileeditor (mapcfgname) -80 17 +] + +skies1 = [ + aftas/sky/orbe + blindabuser/blindasky + blindabuser/blindasky2 + darc/forge + dash/moon + hazel/green + humus/meadow + ik2k/env/iklake + jon/prarie + mayhem/duomo + mayhem/eclipse + meister/uzze + penguins/arid + penguins/arid2 + penguins/cocoa + penguins/divine + penguins/harmony + penguins/mellow + penguins/mystic +] +skies2 = [ + penguins/violence + penguins/wrath + penguins/yonder + penguins/zeus + ratboy/skyboxes/coward + shmutzwurst/london + skyboxes/black + skyboxes/bbk/d + skyboxes/bbk/dark2 + skyboxes/bbk/n1 + skyboxes/bbk/t + skyboxes/clearsky052 + skyboxes/darkness + skyboxes/evilsky + skyboxes/morning + skyboxes/remus/sky01 + skyboxes/turbulent + skyboxes/ulukai/corona + skyboxes/white +] +skies3 = [ + socksky/barren + socksky/desert + socksky/devpun + socksky/emerald + socksky/frozen + socksky/frozendusk + socksky/grave + socksky/mars + socksky/nightball + socksky/stratosphere + socksky/valley + staffy/staffy +] + +genskyitems = [ + looplist cursky $arg1 [ + guibutton $cursky (concat skybox $cursky) //"cube" + ] +] + +showskyshot = [ + guibar + skyshotname = (checkrolloveraction "skybox " [if (> $numargs 0) [result $arg1] [at $guirollovername 0]]) + guiimage (concatword "packages/" $skyshotname "_ft") (checkrolloveraction "skybox ") 4 1 "data/cube.png" (chopstr $skyshotname -16 "..") +] + +lightingstuff = [ + guitext "lightprecision" + guilistslider lightprecision "8 16 32 48 64 128 256" + guitext "lightlod (>= use lightprecision, < use lightprecision/2)" + guislider lightlod + guitext "lighterror" + guislider lighterror + guitext "lightthreads" + guislider lightthreads + guilist [ + guitext "blurskylight^t" + guiradio "0 " blurskylight 0 + guiradio "1 " blurskylight 1 + guiradio "2 " blurskylight 2 + ] + guilist [ + guitext "blurlightmaps^t" + guiradio "0 " blurlms 0 + guiradio "1 " blurlms 1 + guiradio "2 " blurlms 2 + ] + guibar //------------------------------------------------------------------------- + guibutton "calclight 1 (slow: 8xAA)" "calclight 1" + guibutton "calclight -1 (quick: no AA, no model shadows)" "calclight -1" + guicheckbox "fullbright ^f2[L]" fullbright +] + +maplighting = [showgui _maplighting] +newgui _maplighting [ //////////////////////////////////////////////////////////////////////////////////////////////////////////// + _sunlight_r = (& (>> $sunlight 16) 0xFF) + _sunlight_g = (& (>> $sunlight 8) 0xFF) + _sunlight_b = (& (>> $sunlight 0) 0xFF) + guilist [ + guitext "sunlight^t^t^t^t^t^t^t^t" + guicolor $sunlight + ] + guislider _sunlight_r 0 255 [sunlight $_sunlight_r $_sunlight_g $_sunlight_b] + guislider _sunlight_g 0 255 [sunlight $_sunlight_r $_sunlight_g $_sunlight_b] + guislider _sunlight_b 0 255 [sunlight $_sunlight_r $_sunlight_g $_sunlight_b] + + guilist [ + guitext "sunlightscale " + guifield sunlightscale 8 + ] + guitext "sunlightpitch " + guislider sunlightpitch + guitext "sunlightyaw " + guislider sunlightyaw + guibutton "Get sun pitch & yaw from camera. ^f2/getsundir" "getsundir" + + guibar //------------------------------------------------------------------------- + + _skylight_r = (& (>> $skylight 16) 0xFF) + _skylight_g = (& (>> $skylight 8) 0xFF) + _skylight_b = (& (>> $skylight 0) 0xFF) + guilist [ + guitext "skylight^t^t^t^t^t^t^t^t" + guicolor $skylight + ] + guislider _skylight_r 0 255 [skylight $_skylight_r $_skylight_g $_skylight_b] + guislider _skylight_g 0 255 [skylight $_skylight_r $_skylight_g $_skylight_b] + guislider _skylight_b 0 255 [skylight $_skylight_r $_skylight_g $_skylight_b] + + guibar //------------------------------------------------------------------------- + + _ambient_r = (& (>> $ambient 16) 0xFF) + _ambient_g = (& (>> $ambient 8) 0xFF) + _ambient_b = (& (>> $ambient 0) 0xFF) + guilist [ + guitext "ambient^t^t^t^t^t^t^t^t" + guicolor $ambient + ] + guislider _ambient_r 0 255 [ambient $_ambient_r $_ambient_g $_ambient_b] + guislider _ambient_g 0 255 [ambient $_ambient_r $_ambient_g $_ambient_b] + guislider _ambient_b 0 255 [ambient $_ambient_r $_ambient_g $_ambient_b] + +guitab "settings" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + lightingstuff + +] "maplighting" + +newgui materials [ + guibutton "air" "editmat air" + guibutton "water" "editmat water" + guibutton "lava" "editmat lava" + guibutton "clip" "editmat clip" + guibutton "glass" "editmat glass" + guibutton "noclip" "editmat noclip" + guibutton "gameclip" "editmat gameclip" + guibutton "death" "editmat death" + guibutton "alpha" "editmat alpha" + + guicheckbox "show material volumes" showmat + + //guibutton "waterlod very high (3)" "waterlod 3" + //guibutton "waterlod high (2)" "waterlod 2" + //guibutton "waterlod default (1)" "waterlod 1" + //guibutton "waterlod low (0)" "waterlod 0" + + //guibutton "watersubdiv very fine (0)" "watersubdiv 0" + //guibutton "watersubdiv fine (1)" "watersubdiv 1" + //guibutton "watersubdiv default (2)" "watersubdiv 2" + //guibutton "watersubdiv coarse (3)" "watersubdiv 3" + + //guibutton "water waves on" "waterwaves 1" + //guibutton "water waves off" "waterwaves 0" +] + +newgui triggers [ + guibutton [invisible] [BTmm = -1; showgui trigger2] + guibutton [a carrot] [BTmm = 23; showgui trigger2] + guibutton [switch #1] [BTmm = 24; showgui trigger2] + guibutton [switch #2] [BTmm = 25; showgui trigger2] + guibutton [door #1] [BTmm = 26; showgui trigger2] + guibutton [door #2] [BTmm = 27; showgui trigger2] + guibutton [door #3] [BTmm = 28; showgui trigger2] +] + +newgui trigger2 [ + guibutton [animation loop] [BTtt = 0; showgui trigger3] + guibutton [trigger once (popback)] [BTtt = 1; showgui trigger3] + guibutton [trigger once (popback & rumble)] [BTtt = 2; showgui trigger3] + guibutton [trigger once] [BTtt = 3; showgui trigger3] + guibutton [trigger once (rumble)] [BTtt = 4; showgui trigger3] + guibutton [trigger multiple (popback)] [BTtt = 5; showgui trigger3] + guibutton [trigger multiple (popback & rumble)] [BTtt = 6; showgui trigger3] + guibutton [trigger multiple] [BTtt = 7; showgui trigger3] + guibutton [trigger multiple (rumble)] [BTtt = 8; showgui trigger3] + guibutton [door (open once)] [BTtt = 9; showgui trigger3] + guibutton [door (auto close)] [BTtt = 10; showgui trigger3] + guibutton [door (locked)] [BTtt = 11; showgui trigger3] + guibutton [vanishing trigger] [BTtt = 12; showgui trigger3] + guibutton [vanishing trigger (rumble)] [BTtt = 13; showgui trigger3] + guibutton [End Of Level Trigger] [BTtt = 29; showgui trigger3] +] + +build_trigger = [newent mapmodel $BTmm $BTtt $BTti] + +newgui trigger3 [ + loop i 9 [ + tjt = (concat tag (concatword # $i)) + tjc = (concat BTti "=" $i ";" "build_trigger") + guibutton $tjt $tjc + ] +] + +resetlight = [ + lightcolour = 0 + lightbright = 1 + lightset 255 255 255 + lightradius = 128 +] + +lightset = [ + lightr = $arg1 + lightg = $arg2 + lightb = $arg3 + if (= $lightbright 0) lightscale +] + +lightscale = [ + if (= $lightbright 0) [ + lightr = (div $lightr 2); lightg = (div $lightg 2); lightb = (div $lightb 2) + ] [ + lightr = (min 255 (* $lightr 2)); lightg = (min 255 (* $lightg 2)); lightb = (min 255 (* $lightb 2)) + ] +] + +lightcmd = [ + result (concat newent light $lightradius $lightr $lightg $lightb) +] + +newgui newlight [ + guibutton (lightcmd) + guibar + guitext "color:" + guicolor (+ (* (+ (* $lightr 256) $lightg) 256) $lightb) + guislider lightr 0 255 + guislider lightg 0 255 + guislider lightb 0 255 + guilist [ + guicheckbox "bright" lightbright 1 0 [lightscale] + guibar + guiradio "white" lightcolour 0 [lightset 255 255 255] + guiradio "blue" lightcolour 1 [lightset 192 192 255] + guiradio "red" lightcolour 2 [lightset 255 192 192] + guiradio "green" lightcolour 3 [lightset 192 255 192] + guiradio "yellow" lightcolour 4 [lightset 255 255 192] + guiradio "purple" lightcolour 5 [lightset 255 192 255] + guiradio "turquoise" lightcolour 6 [lightset 192 255 255] + ] + guitext "radius:" + guislider lightradius 0 512 +] + +newgui newteleport [ + guibutton "newent teleport 1" + guibutton "newent teledest 1" + guibutton "newent teleport 2" + guibutton "newent teledest 2" + guibutton "newent teleport 3" + guibutton "newent teledest 3" + guibutton "newent teleport 4" + guibutton "newent teledest 4" +] + +getmapmodels = [ + loopconcat i $nummapmodels [ + if $arg2 [ if (mapmodelloaded $i) [ $arg1 $i ] ] [ $arg1 $i ] + ] +] + +mmguiwidth = 7 +mmguiheight = 4 + +newgui mapmodels [ + guikeeptab 1 + + local mmarea mmid + + mmguiarea = (* $mmguiwidth $mmguiheight) + + guinoautotab [ + loop n (div (+ $nummapmodels (- $mmguiarea 1)) $mmguiarea) [ + if $n [guitab (+ $n 1)] + if (= $guitabnum (+ $n 1)) [ + loop y $mmguiheight [ + guilist [ + loop x $mmguiwidth [ + mmid = (+ (* $n $mmguiarea) (+ (* $y $mmguiwidth) $x)) + guimodelpreview (mapmodelname $mmid) "mapmodel" [newent mapmodel @mmid] 3 1 $mmid 1 + ] + ] + ] + guistrut 0.2 + guititle (concatword "^f7" (strreplace (strreplace $guirolloverpreviewname "\" "/") "/" "^fc/^f7")) + ] + ] + ] +] + +newgui monsters [ + guibutton "ogro / fireball" "newent monster 0" + guibutton "rhino / chaingun" "newent monster 1" + guibutton "ratamahatta / shotgun" "newent monster 2" + guibutton "slith / rifle" "newent monster 3" + guibutton "bauul / RL" "newent monster 4" + guibutton "hellpig / bite" "newent monster 5" + guibutton "knight / iceball" "newent monster 6" + guibutton "goblin / slimeball" "newent monster 7" + guibutton "spider / grenade" "newent monster 8" +] + +newgui postfx [ + guibutton "(effect OFF)" "clearpostfx" + guibutton "bloom (subtle: 30%)" "bloom 0.3" + guibutton "bloom (bright: 55%)" "bloom 0.55" + guibutton "bloom (intense: 80%)" "bloom 0.8" + guibutton "rotoscope" "rotoscope 1" + guibutton "rotoscope + blur3" "rotoscope 1 1" + guibutton "rotoscope + blur5" "rotoscope 1 2" + guibutton "sobel" "setpostfx sobel" + guibutton "invert" "setpostfx invert" + guibutton "gbr" "setpostfx gbr" + guibutton "bw" "setpostfx bw" + guibutton "blur3" "setpostfx hblur3; addpostfx vblur3" + guibutton "blur5" "setpostfx hblur5; addpostfx vblur5" +] + +macro resbutton [ + guibutton "%1x%2" "screenres %1 %2" (if (&& (= $scr_w %1) (= $scr_h %2)) [result "radio_on"] [result "radio_off"]) +] + +newgui options [ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + guilist [ + guicheckbox "2D menus" gui2d + guibar + guicheckbox "click tab" guiclicktab + guibar + guicheckbox "menu fade in" guifadein + ] + guicheckbox "show scoreboard at death" deathscore + guicheckbox "blood" blood + guilist [ + guicheckbox "ragdoll deaths" ragdoll + if $ragdoll [ + guibar + guicheckbox "keep after respawn" ragdollmillis 10000 + ] + guibar + guicheckbox "hide dead players" hidedead + ] + guitext "ragdoll velocity multiplier" + guislider deadpush + guilist [ + guicheckbox "fullbright player models" fullbrightmodels 60 0 + if $fullbrightmodels [ + guibar + guiradio "subtle" fullbrightmodels 60 + guibar + guiradio "bright" fullbrightmodels 100 + guibar + guiradio "overbright" fullbrightmodels 150 + guibar + guiradio "max" fullbrightmodels 200 + ] + ] + guilist [ + guicheckbox "force matching player models" forceplayermodels + guibar + guicheckbox "always use team skins" teamskins + ] + guicheckbox "hit sound" hitsound + guibar + guibutton "restore defaults (clears ALL settings)" "exec restore.cfg" + + guitab "hud" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guicheckbox "show FPS" showfps + guilist [ + guicheckbox "wall clock" wallclock + if $wallclock [ + guibar + guicheckbox "24 hour" wallclock24 + guibar + guicheckbox "seconds" wallclocksecs + ] + ] + guilist [ + guicheckbox "damage screen" damagescreen + guibar + guicheckbox "damage compass" damagecompass + ] + guilist [ + guicheckbox "hudguns" hudgun + if $hudgun [ + guibar + guicheckbox "sway" hudgunsway + guibar + guicheckbox "muzzle flash" muzzleflash + guibar + guicheckbox "muzzle light" muzzlelight + ] + ] + guilist [ + guicheckbox "crosshair effects" crosshairfx + if $crosshairfx [ + guibar + guicheckbox "health colors" crosshaircolors + guibar + guicheckbox "teammates" teamcrosshair + guibar + guicheckbox "hits" hitcrosshair 425 + ] + ] + guilist [ + guicheckbox "outline capture meters" outlinemeters + guibar + guicheckbox "numbered capture bases" basenumbers + guibar + guicheckbox "show teammates" radarteammates 1 + ] + guibar + guilist [ + guicheckbox "ammobar^t^t" ammobar + guibutton "adjust ammobar" [showgui ammobar] + ] + guilist [ + guicheckbox "gameclock^t" gameclock + guibutton "adjust gameclock" [showgui gameclock] + ] + guilist [ + guicheckbox "hudscore^t^t" hudscore + guibutton "adjust hudscore" [showgui hudscore] + ] + + guitab "gfx" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guitext "performance key: ^f0fast^f~, ^f2moderate^f~, ^f3slow and pretty^f~" + guibar + guilist [ + guitext "shaders^t^t" + guibar + guiradio "^f0low detail" shaderdetail 1 + guibar + guiradio "^f2high detail" shaderdetail 3 + ] + guilist [ + guitext "water^t^t" + guibar + guicheckbox "^f2refraction" waterrefract + guibar + guicheckbox "^f3reflection" waterreflect + guibar + guicheckbox "^f0caustics" caustics + guibar + guicheckbox "^f2animation" vertwater + ] + guilist [ + guitext "waterfalls^t^t" + guibar + guicheckbox "^f2refraction" waterfallrefract + guibar + guicheckbox "^f0reflection" waterfallenv + ] + guilist [ + guicheckbox "^f3soft shadows^t" shadowmap + if $shadowmap [ + guibar + guiradio "^f2medium quality" shadowmapsize 9 [blurshadowmap 1] + guibar + guiradio "^f3high quality" shadowmapsize 10 [blurshadowmap 2] + ] [ + guibar + guicheckbox "^f2blob shadows" blobs + ] + ] + if $glare [ + glarepreset = 0 + if (= $glarescale 1) [ + if (= $blurglare 4) [glarepreset = 1] + if (= $blurglare 7) [glarepreset = 3] + ] + if (= $glarescale 2) [ + if (= $blurglare 3) [glarepreset = 2] + if (= $blurglare 7) [glarepreset = 4] + ] + guilist [ + guicheckbox "^f3glare^t^t^t" glare + guibar + guiradio "^f2subtle" glarepreset 1 [blurglare 4; glarescale 1] + guibar + guiradio "^f2glowy" glarepreset 2 [blurglare 3; glarescale 2] + guibar + guiradio "^f3soft" glarepreset 3 [blurglare 7; glarescale 1] + guibar + guiradio "^f3intense" glarepreset 4 [blurglare 7; glarescale 2] + ] + ] [ + guicheckbox "^f3glare" glare + ] + guilist [ + guicheckbox "^f3motion blur^t" motionblur + if $motionblur [ + guibar + guiradio "^f3subtle" motionblurscale 0.5 + guibar + guiradio "^f3moderate" motionblurscale 0.65 + guibar + guiradio "^f3intense" motionblurscale 0.8 + ] + ] + guilist [ + guicheckbox "^f3grass^t^t^t" grass + if $grass [ + guibar + guiradio "^f2quick fade" grassdist 128 + guibar + guiradio "^f2moderate fade" grassdist 256 + guibar + guiradio "^f3slow fade" grassdist 512 + ] + ] + guilist [ + guicheckbox "^f0dynamic lights^t" maxdynlights 3 0 + if $maxdynlights [ + guibar + guiradio "^f0medium quality" maxdynlights 3 + guibar + guiradio "^f2high quality" maxdynlights 5 + ] + ] + guilist [ + guicheckbox "^f0soft particles^t" depthfx + if $depthfx [ + guibar + guiradio "^f0low quality" depthfxsize 7 [blurdepthfx 1] + guibar + guiradio "^f2medium quality" depthfxsize 10 [blurdepthfx 0] + guibar + guiradio "^f3high quality" depthfxsize 12 [blurdepthfx 0] + ] + ] + guicheckbox "^f0glass reflection" glassenv + guilist [ + guicheckbox "^f0decals^t^t" decals + if $decals [ + guibar + guiradio "^f0quick fade" decalfade 10000 [maxdecaltris 1024] + guibar + guiradio "^f2slow fade" decalfade 60000 [maxdecaltris 4096] + ] + ] + guilist [ + guitext "textures^t^t" + guibar + guiradio "^f0low quality" maxtexsize 256 + guibar + guiradio "^f0medium quality" maxtexsize 512 + guibar + guiradio "^f2high quality" maxtexsize 0 + ] + guilist [ + guitext "models^t^t" + guibar + guicheckbox "^f0reflection" envmapmodels + guibar + guicheckbox "^f2bumpmap" bumpmodels + ] + + guitab "display" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guitext "field of view (default: 100)" + guislider fov + guicheckbox "v-sync" vsync 1 0 + guicheckbox "fullscreen" fullscreen + guitext "gamma (default: 100)" + guislider gamma + guitext "full-scene anti-aliasing (default: -1)" + guilistslider fsaa "-1 0 2 4 8 16" + guitext "z-buffer depth (default: 0)" + guilistslider depthbits "0 16 24 32" + guitext "anisotropic filtering (default: 0)" + guilistslider aniso "0 2 4 8 16" + guilist [ + guicheckbox "bilinear filtering" bilinear + guibar + guicheckbox "trilinear filtering (mipmaps)" trilinear + ] + + guitab "res" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guistayopen [ + guilist [ + guilist [ + guitext "4:3" + @@@@(resbutton 320 240) + @@@@(resbutton 640 480) + @@@@(resbutton 800 600) + @@@@(resbutton 1024 768) + @@@@(resbutton 1152 864) + @@@@(resbutton 1280 960) + @@@@(resbutton 1400 1050) + @@@@(resbutton 1600 1200) + @@@@(resbutton 1792 1344) + @@@@(resbutton 1856 1392) + @@@@(resbutton 1920 1440) + @@@@(resbutton 2048 1536) + @@@@(resbutton 2800 2100) + @@@@(resbutton 3200 2400) + ] + guibar + guilist [ + guitext "16:10" + @@@@(resbutton 320 200) + @@@@(resbutton 640 400) + @@@@(resbutton 1024 640) + @@@@(resbutton 1280 800) + @@@@(resbutton 1440 900) + @@@@(resbutton 1600 1000) + @@@@(resbutton 1680 1050) + @@@@(resbutton 1920 1200) + @@@@(resbutton 2048 1280) + @@@@(resbutton 2560 1600) + @@@@(resbutton 2880 1800) + @@@@(resbutton 3200 2000) + @@@@(resbutton 3840 2400) + ] + guibar + guilist [ + guitext "16:9" + @@@@(resbutton 1024 600) + @@@@(resbutton 1280 720) + @@@@(resbutton 1366 768) + @@@@(resbutton 1600 900) + @@@@(resbutton 1920 1080) + @@@@(resbutton 2048 1152) + @@@@(resbutton 2560 1440) + @@@@(resbutton 2880 1620) + @@@@(resbutton 3200 1800) + @@@@(resbutton 3840 2160) + ] + guibar + guilist [ + guitext "5:4" + @@@@(resbutton 600 480) + @@@@(resbutton 1280 1024) + @@@@(resbutton 1600 1280) + @@@@(resbutton 2560 2048) + ] + guibar + guilist [ + guitext "5:3" + @@@@(resbutton 800 480) + @@@@(resbutton 1280 768) + + guibar + guitext "Custom" + guilist [ + customw = $scr_w + customh = $scr_h + guifield customw 4 [scr_w $customw] + guifield customh 4 [scr_h $customh] + ] + ] + ] + ] + + guitab "sound" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guitext "sound volume" + guislider soundvol + guitext "music volume" + guislider musicvol + guitext "sound channels" + guislider soundchans + guitext "sound frequency" + guilistslider soundfreq "11025 22050 44100" + guitext "sound buffer length" + guislider soundbufferlen + guicheckbox "Mumble positional audio" mumble + + guitab "mouse" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guicheckbox "invert mouse" invmouse + + guilist [ + guitext "mouse sensitivity: " + newsens = $sensitivity + guifield newsens 8 [sensitivity $newsens] + ] + + guilist [ + guitext "mouse UI sensitivity: " + newguisens = $guisens + guifield newguisens 8 [guisens $newguisens] + ] + + guilist [ + guibutton "crosshair: " [showgui crosshair] + guiimage (getcrosshair) [showgui crosshair] 0.5 + ] + guitext "crosshair size" + guislider crosshairsize + + guitab "keys" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guitext "(basic keybinds, for anything more use the 'bind' command)" + guitext "select action to bind and press desired keys (ESC when done):" + + bindidx = 0 + guilistsplit n 2 $bindactions [ + guilist [ + guitext (tabify (concatword $n ": ") 4) + [newbinds@bindidx] = (searchbinds $n) + guikeyfield [newbinds@bindidx] -12 [ + oldbinds = (searchbinds [@@n]) + looplist j $oldbinds [bind $j ""] + looplist j $[newbinds@@bindidx] [bind $j [@@@n]] + ] + bindidx = (+ $bindidx 1) + ] + ] [guibar] + + guitab "console" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guicheckbox "chat console" miniconfilter 0x300 0 + guitext "console size (lines)" + guislider consize + guitext "console filter:" + guilist [ + guilist [ + guibitfield "important information" confilter 0x11 + guibitfield "warnings" confilter 0x02 + guibitfield "errors" confilter 0x04 + guibitfield "script messages" confilter 0x20 + ] + guibar + guilist [ + guibitfield "chat" confilter 0x100 + guibitfield "team chat" confilter 0x200 + guibitfield "game events" confilter 0x400 + ] + guibar + guilist [ + guibitfield "self frags" confilter 0x800 + guibitfield "other player frags" confilter 0x1000 + guibitfield "team kills" confilter 0x2000 + ] + ] + guitext "full console size (percent of screen)" + guislider fullconsize + guitext "full console filter:" + guilist [ + guilist [ + guibitfield "important information" fullconfilter 0x11 + guibitfield "warnings" fullconfilter 0x02 + guibitfield "errors" fullconfilter 0x04 + guibitfield "script messages" fullconfilter 0x20 + ] + guibar + guilist [ + guibitfield "chat" fullconfilter 0x100 + guibitfield "team chat" fullconfilter 0x200 + guibitfield "game events" fullconfilter 0x400 + ] + guibar + guilist [ + guibitfield "self frags" fullconfilter 0x800 + guibitfield "other player frags" fullconfilter 0x1000 + guibitfield "team kills" fullconfilter 0x2000 + ] + ] + + guitab "cfg" //////////////////////////////////////////////////////////////////////////////////////////////////////////// + guitext "autoexec.cfg" + showfileeditor "autoexec.cfg" -64 13 +] "game" + ++fround = [round (+f $arg1 $arg2) (absf $arg2)] + +newgui ammobar [ + guicheckbox "AmmoBar" ammobar + guibar + guilist [ + guitext "AmmoBarAlign:^t^t^t" + guiradio "-1 " ammobaralign -1 + guiradio "0 " ammobaralign 0 + guiradio "1" ammobaralign 1 + ] + + guicheckbox "AmmoBarHorizontal" ammobarhorizontal + + guicheckbox "AmmoBarFlip" ammobarflip + + guicheckbox "AmmoBarHideEmpty" ammobarhideempty + + guitext "AmmoBarSep:" + guislider ammobarsep + + guitext "AmmoBarCountSep:" + guislider ammobarcountsep + + guilist [ + guitext "AmmoBarCountScale:^t" + guifield ammobarcountscale 5 + guistayopen [ guibutton "- " [ammobarcountscale (+fround $ammobarcountscale -0.1)] ] + guistayopen [ guibutton "+" [ammobarcountscale (+fround $ammobarcountscale 0.1)] ] + ] + + guilist [ + guitext "AmmoBarScale:^t^t^t" + guifield ammobarscale 5 + guistayopen [ guibutton "- " [ammobarscale (+fround $ammobarscale -0.01)] ] + guistayopen [ guibutton "+" [ammobarscale (+fround $ammobarscale 0.01)] ] + ] + + guilist [ + guitext "AmmoBarX:^t^t^t" + guifield ammobarx 5 + guistayopen [ guibutton "- " [ammobarx (+fround $ammobarx -0.01)] ] + guistayopen [ guibutton "+" [ammobarx (+fround $ammobarx 0.01)] ] + ] + guilist [ + guitext "AmmoBarY:^t^t^t" + guifield ammobary 5 + guistayopen [ guibutton "- " [ammobary (+fround $ammobary -0.01)] ] + guistayopen [ guibutton "+" [ammobary (+fround $ammobary 0.01)] ] + ] +] "AmmoBar" + + +newgui gameclock [ + guicheckbox "GameClock" gameclock + guibar + guilist [ + guitext "GameClockAlign:^t" + guiradio "-1 " gameclockalign -1 + guiradio "0 " gameclockalign 0 + guiradio "1" gameclockalign 1 + ] + + guitext "GameClockAlpha:" + guislider gameclockalpha + + // gameclockcolour 0 - 0xFFFFFF + // gameclocklowcolour 0 - 0xFFFFFF + + guilist [ + guitext "GameClockScale:^t" + guifield gameclockscale 5 + guistayopen [ guibutton "- " [gameclockscale (+fround $gameclockscale -0.01)] ] + guistayopen [ guibutton "+" [gameclockscale (+fround $gameclockscale 0.01)] ] + ] + + guilist [ + guitext "GameClockX:^t^t" + guifield gameclockx 5 + guistayopen [ guibutton "- " [gameclockx (+fround $gameclockx -0.01)] ] + guistayopen [ guibutton "+" [gameclockx (+fround $gameclockx 0.01)] ] + ] + guilist [ + guitext "GameClockY:^t^t" + guifield gameclocky 5 + guistayopen [ guibutton "- " [gameclocky (+fround $gameclocky -0.01)] ] + guistayopen [ guibutton "+" [gameclocky (+fround $gameclocky 0.01)] ] + ] +] "GameClock" + + +newgui hudscore [ + guicheckbox "HUDScore" hudscore + guibar + guilist [ + guitext "HUDScoreAlign:^t^t" + guiradio "-1 " hudscorealign -1 + guiradio "0 " hudscorealign 0 + guiradio "1" hudscorealign 1 + ] + + guitext "HUDScoreAlpha:" + guislider hudscorealpha + + // hudscoreenemycolour 0 - 0xFFFFFF + // hudscoreplayercolour 0 - 0xFFFFFF + + guitext "HUDScoreSep:" + guislider hudscoresep + + guilist [ + guitext "HUDScoreScale:^t^t" + guifield hudscorescale 5 + guistayopen [ guibutton "- " [hudscorescale (+fround $hudscorescale -0.01)] ] + guistayopen [ guibutton "+" [hudscorescale (+fround $hudscorescale 0.01)] ] + ] + + guilist [ + guitext "HUDScoreX:^t^t" + guifield hudscorex 5 + guistayopen [ guibutton "- " [hudscorex (+fround $hudscorex -0.01)] ] + guistayopen [ guibutton "+" [hudscorex (+fround $hudscorex 0.01)] ] + ] + guilist [ + guitext "HUDScoreY:^t^t" + guifield hudscorey 5 + guistayopen [ guibutton "- " [hudscorey (+fround $hudscorey -0.01)] ] + guistayopen [ guibutton "+" [hudscorey (+fround $hudscorey 0.01)] ] + ] +] "HUDScore" + + +bindactions = [forward backward left right jump attack togglezoom saycommand sayteamcommand showscores toggleconsole screenshot edittoggle "setweapon FI" "setweapon SG" "setweapon CG" "setweapon RL" "setweapon RI" "setweapon GL" "setweapon PI" "weapon" "universaldelta 1" "universaldelta -1" dropflag addbot delbot] + +entupdate = [ entset $entguitype $entguiattr0 $entguiattr1 $entguiattr2 $entguiattr3 $entguiattr4 ] + +initentgui = [ + entguitype = (enttype) + @(loopconcat i 5 [result [ + entguiattr@i = (entattr @i) + ]]) +] + +genentattributes = [ + entattributes = (loopconcat i (listlen $arg2) [ + entattribname = (at $arg2 $i) + entattriblimits = (at $arg3 (* 2 $i)) + entattriblimits2 = (at $arg3 (+ 1 (* 2 $i))) + if (=s (at $entattriblimits 0) $entattriblimits) [ + result [ + guitext @entattribname + guislider entguiattr@i @entattriblimits @entattriblimits2 entupdate + ] + ] [ + result [ + guitext @entattribname + guinameslider entguiattr@i [@@entattriblimits] [@@entattriblimits2] entupdate + ] + ] + ]) +] + +guilistsplit = [ + guilist [ + z = (div (+ (listlen $arg3) (- $arg2 1)) $arg2) + loop a $arg2 [ + guilist [ + if (>= $numargs 6) [arg6] + loopsublist $arg1 $arg3 (* $a $z) $z [ + arg4 + ] + ] + if (&& (>= $numargs 5) (< (+ $a 1) $arg2)) [arg5] + ] + ] +] + +quickeditmenu = [ + guitext "Quick Commands:" + guibar + guifield savemap_name 10 [ savemap $savemap_name ] + guibutton "quick light" "calclight -1" + guibutton "optimize map" "remip" + guibutton "new entity" "newent shells" + guibar + guibutton newmap + guibar + guibutton help "showgui editing" +] + +matmenu = [ + guibutton "air" "editmat air" + guibutton "water" "editmat water" + guibutton "lava" "editmat lava" + guibutton "clip" "editmat clip" + guibutton "glass" "editmat glass" + guibutton "noclip" "editmat noclip" + guibutton "gameclip" "editmat gameclip" + guibutton "death" "editmat death" + guibutton "alpha" "editmat alpha" + guicheckbox "show material volumes" showmat +] + +brushmenu = [ + guilist [ // diamonds + guiimage "packages/icons/brush_1c.png" brush_0 + guiimage "packages/icons/brush_21c.png" brush_1 + guiimage "packages/icons/brush_421c.png" brush_2 + ] + guilist [ // squares + guiimage "packages/icons/brush_3s.png" brush_3 + guiimage "packages/icons/brush_5s.png" brush_4 + guiimage "packages/icons/brush_7s.png" brush_5 + ] + guititle smooth + guilist [ // smooth + guiimage "packages/icons/brush_3s.png" brush_6 + guiimage "packages/icons/brush_5s.png" brush_7 + guiimage "packages/icons/brush_7s.png" brush_8 + ] +] + +newentgui = [ + genentattributes $arg1 $arg2 $arg3 + newgui $arg1 [ + guitext $entguitype + guibar + @entattributes + guitab type + guilistsplit n 2 $enttypelist [ + guibutton $n [ entset @n ] + ] + guitab misc + @quickeditmenu + ] "" [initentgui] +] + +looplist i $enttypelist [ + newentgui $i "" "" +] + +newgui materials [ + @matmenu + guitab misc + @quickeditmenu +] + +newgui brushes [ + @brushmenu + guitab misc + @quickeditmenu +] + +newgui quickedit [ + @quickeditmenu + guitab materials + @matmenu +] + +newentgui light "radius red green blue" "1 400 0 255 0 255 0 255" +newentgui spotlight "radius" "0 200" +newentgui playerstart "direction" "0 360" +newentgui teleport "tag" "0 20" +newentgui teledest "direction tag" "0 360 0 20" +newentgui monster "direction type" "0 360 0 7" +newentgui mapmodel "direction model" "0 360 0 372" +newentgui envmap "radius" "0 512" +newentgui jumppad "Z Y X" "-128 128 -128 127 -128 127" +newentgui sound "type radius size" "0 20 0 500 0 500" +newentgui particles "type" "0 13" + +contexteditgui = [ + if $hmapedit [showgui brushes] [ + if (enthavesel) [ + showgui (enttype) + ] [showgui (? (havesel) materials quickedit)] + ] +] + +showentgui = [ contexteditgui ] // legacy bind + +newgui seltexinfo [ + guitext (concatword "Slot: " (getseltex)) + guilist [ loop x 5 [ + texname = (gettexname (getseltex) $x) + texname = (substr $texname (+ (strstr $texname ">") 1)) // chop off any leading commands + guiimage (concatword "packages/" $texname) "" 1 1 + ]] + loop x 5 [ tex = (gettexname (getseltex) $x); if (strcmp $tex "") [] [guitext $tex]] +] diff --git a/data/rightup.png b/data/rightup.png new file mode 100644 index 0000000000000000000000000000000000000000..38faa32b48218e46574ce3b139911491ddfd70fc GIT binary patch literal 50967 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 $arg1 -1 ) [ result $arg2 ] [ result $arg3 ] ) ] +ent_action_shells = [ ent_action_cycle $arg1 bullets quaddamage ] +ent_action_bullets = [ ent_action_cycle $arg1 rockets shells ] +ent_action_rockets = [ ent_action_cycle $arg1 riflerounds bullets ] +ent_action_riflerounds = [ ent_action_cycle $arg1 grenades rockets ] +ent_action_grenades = [ ent_action_cycle $arg1 cartridges riflerounds ] +ent_action_cartridges = [ ent_action_cycle $arg1 quaddamage grenades ] +ent_action_quaddamage = [ ent_action_cycle $arg1 shells cartridges ] +ent_action_health = [ ent_action_cycle $arg1 healthboost yellowarmour ] +ent_action_healthboost = [ ent_action_cycle $arg1 greenarmour health ] +ent_action_greenarmour = [ ent_action_cycle $arg1 yellowarmour healthboost ] +ent_action_yellowarmour = [ ent_action_cycle $arg1 health greenarmour ] +ent_action_monster = [ entproperty 1 ( * $arg1 1 ) ] +ent_action_box = [ entproperty 1 ( * $arg1 1 ) ] +ent_action_barrel = [ entproperty 1 ( * $arg1 1 ) ] +ent_action_platform = [ entproperty 1 ( * $arg1 1 ) ] +ent_action_elevator = [ entproperty 1 ( * $arg1 1 ) ] + +//////// Copy and Paste ////////////// + +// 3 types of copying and pasting +// 1. select only cubes -> paste only cubes +// 2. select cubes and ents -> paste cubes and ents. same relative positions +// 3. select only ents -> paste last selected ent. if ents are selected, replace attrs as paste + +opaquepaste = 1 +entcopybuf = "" + +entreplace = [ + do [ + if (enthavesel) [] [ newent @entcopybuf ] + entset @entcopybuf + ] +] + +editcopy = [ + if (|| [havesel] [! (enthavesel)]) [ + entcopybuf = "" + entcopy + copy + ] [ + entcopybuf = (entget) + ] +] + +editpaste = [ + cancelpaste = (! (|| [enthavesel] [havesel])); + if (strcmp "" $entcopybuf) [ + pastehilite + reorient // temp; real fix will be in octaedit + onrelease [ + if $opaquepaste delcube + paste + entpaste + if $cancelpaste [ cancelsel ] + ] + ] [ + entreplace + if $cancelpaste [ cancelsel ] + ] +] + +/////// Selection /////////////// + +// select ents with given properties +// '*' is wildcard +entfind = [ + if (= $numargs 0) [ + entselect 1 + ] [ + entselect (concat [ && [=enttype @@arg1] ] (loopconcat i (- $numargs 1) [ + result [ [=entattr @@i @@[arg@(+ $i 2)]] ] + ])) + ] +] + +entfindinsel = [ + if (= $numargs 0) [ + entselect [ insel ] + ] [ + entselect (concat [ && [insel] [=enttype @@arg1] ] (loopconcat i (- $numargs 1) [ + result [ [=entattr @@i @@[arg@(+ $i 2)]] ] + ])) + ] +] + +lse = [ + line = "" + count = 0 + entloop [ + line = ( concatword $line (entget) " " ) + count = ( + $count 1 ) + if (> $count 4) [ + echo $line + line = "" + count = 0 + ] + ] + if (> $count 0 ) [ echo $line ] + echo (enthavesel) entities selected +] + +drag = [ dragging 1; onrelease [ dragging 0 ] ] +corners = [ selectcorners 1; dragging 1; onrelease [ selectcorners 0; dragging 0 ] ] +editmove = [ moving 1; onrelease [ moving 0 ]; result $moving ] +entdrag = [ entmoving 1; onrelease [entmoving 0]; result $entmoving ] +editdrag = [ cancelsel; || [entdrag] [ drag ] ] +selcorners = [ if $hmapedit [ hmapselect ] [ cancelsel; || [entdrag] [ corners ] ] ] +editextend = [ || [entdrag] [ selextend; reorient; editmove ] ] + +editmovewith = [ + if (havesel) [ + || [editmove] [ @arg1 ] + onrelease [ moving 0; dragging 0 ] + ] [ + @arg1 + ] +] + +editmovecorner = [ editmovewith selcorners ] +editmovedrag = [ editmovewith editdrag ] + +////// Other Editing commands ///////// + +editfacewentpush = [ + + if (|| [havesel] [! (enthavesel)] ) [ + if $moving [ + pushsel $arg1 + ] [ + entcancel + editface $arg1 $arg2 + ] + ] [ + if $entmoving [ entpush $arg1 ] [ ent_action_@(enttype) $arg1 ] + ] +] + +entswithdirection = "playerstart teledest mapmodel flag monster box barrel platform elevator" + +entdirection = [ + if ( && [enthavesel] [ = (havesel) 0 ] ) [ + if (>= (indexof $entswithdirection (enttype)) 0) [ + if (> $arg1 0) [ + entproperty 0 $arg2 + if (> (entattr 0) 360) [ entproperty 0 -360 ] + ] [ + entproperty 0 (- 0 $arg2) + if (< (entattr 0) 0) [ entproperty 0 360 ] + ] + ] + result 1 + ] [ + result 0 + ] +] + +editdel = [ if (! (enthavesel)) [delcube]; delent ] +editflip = [ flip; entflip ] + +editrotate = [ + || [ entdirection $arg1 15 ] [ + rotate $arg1 + entrotate $arg1 + ] +] + +editcut = [ + if (moving 1) [ + if (= $moving 1) [selsave] + onrelease [ + moving 0 + if (selmoved) [ + selswap + copy; entcopy + delcube; delent + selrestore + paste; entpaste + ] + ] + ] +] + +edithud = [ + format "%6^f7%7^f7gridpower ^f2%1 %2 %3 %4 %5" $gridpower ( + if $allfaces [format "^f2allfaces"][format "^f4allfaces"] + )( + if $entediting [format "^f2entediting"][format "^f4entediting"] + )( + if $entselsnap [format "^f2entselsnap"][format "^f4entselsnap"] + )( + if $dropwaypoints [format "^f0dropwaypoints"][] + )( + if $hmapedit [format "brush^f2 %1 ^f7:^f2 %2^n" $brushindex $brushname] [ + if $blendpaintmode [ + format "blendpaint mode: ^f2%1^f7^nblend brush: ^f2%2^n" (at $blendpaintmodes $blendpaintmode) (getblendbrushname (curblendbrush)) + ] [if (! (enthavesel)) [ + texnum = (? (>= $texguinum 0) $texguinum (getseltex)) + format "^f2%1 ^f7:^f2 %2^n" (max 0 $texnum) (gettexname $texnum) + ]] + ] + )( + if (enthavesel) [concat (entget) ":^f2" (enthavesel) "^f7selected^n"] + ) +] + +entcomplete = [ listcomplete $arg1 $enttypelist ] +entcomplete newent +entcomplete entfind +entcomplete clearents + +listcomplete editmat "air water clip glass noclip lava gameclip death alpha" +air = [ editmat air $arg1 ] +loop i 4 [ + [water@(? $i (+ $i 1))] = [ editmat water@(? $i (+ $i 1)) $arg1 ] + [lava@(? $i (+ $i 1))] = [ editmat lava@(? $i (+ $i 1)) $arg1 ] + [glass@(? $i (+ $i 1))] = [ editmat glass@(? $i (+ $i 1)) $arg1 ] +] +clip = [ editmat clip $arg1 ] +noclip = [ editmat noclip $arg1 ] +gameclip = [ editmat gameclip $arg1 ] +death = [ editmat death $arg1 ] +alpha = [ editmat alpha $arg1 ] + +blendpaintmodes = ["off" "replace" "dig" "fill" "inverted dig" "inverted fill"] +setblendpaintmode = [ + if (> $numargs 0) [blendpaintmode $arg1] [blendpaintmode 0] + echo "blend paint mode set to:" (at $blendpaintmodes $blendpaintmode) +] +scrollblendbrush = [ + if (> $numargs 0) [nextblendbrush $arg1] [nextblendbrush] + echo "blend brush set to:" (getblendbrushname (curblendbrush)) +] + +minimaphere = [minimapheight (at (getcampos) 2)] + +getsundir = [sunlightyaw (getcamyaw); sunlightpitch (getcampitch)] + +echovcolor = [echo ***vcolor (getvcolor $getseltex)] +echovrotate = [echo ***vrotate (getvrotate $getseltex)] +echovoffset = [echo ***voffset (getvoffset $getseltex)] +echovscroll = [echo ***vscroll (getvscroll $getseltex)] +echovscale = [echo ***vscale (getvscale $getseltex)] +echovlayer = [echo ***vlayer (getvlayer $getseltex)] +echovalpha = [echo ***valpha (getvalpha $getseltex)] + +// echovshaderparamname = [echo (getvshaderparamnames $getseltex)] // Echoes the name of altered vshaderparam, if used. Only works with vshaderparam, not params set in map.cfg +echovshaderparam = [echo ***vshaderparam (getvshaderparamnames $getseltex) (getvshaderparam $getseltex (getvshaderparamnames $getseltex))] // Only works with vshaderparam, not params set in map.cfg +// echovshaderparamenvscale = [echo ***shaderparam envscale (getvshaderparam $getseltex envscale)] +// echovshaderparamglowcolor = [echo ***shaderparam glowcolor (getvshaderparam $getseltex glowcolor)] +// echovshaderparamparallaxscale = [echo ***shaderparam parallaxscale (getvshaderparam $getseltex parallaxscale)] +// echovshaderparampulseglowcolor = [echo ***shaderparam pulseglowcolor (getvshaderparam $getseltex pulseglowcolor)] +// echovshaderparampulseglowspeed = [echo ***shaderparam pulseglowspeed (getvshaderparam $getseltex pulseglowspeed)] +// echovshaderparampulsespeed = [echo ***shaderparam pulsespeed (getvshaderparam $getseltex pulsespeed)] +// echovshaderparamspecscale = [echo ***shaderparam specscale (getvshaderparam $getseltex specscale)] + +findpickupents = [entfind shells;entfind bullets;entfind rockets;entfind riflerounds;entfind grenades;entfind cartridges;entfind greenarmour;entfind yellowarmour;entfind health;entfind healthboost;entfind quaddamage;] + +prettysky = [ + skybox "skyboxes/remus/sky01" + ambient 25 21 23 + skylight 148 153 163 + blurskylight 2 + sunlight 255 252 250 + sunlightscale 1.3 + sunlightpitch 43 + sunlightyaw 53 +] + diff --git a/data/stdlib.cfg b/data/stdlib.cfg new file mode 100644 index 0000000..46e2517 --- /dev/null +++ b/data/stdlib.cfg @@ -0,0 +1,59 @@ +// console language standard library + +// creates a macro whose body is a format string +// i.e. macro greet [ say Hi, %1! ] +macro = [ + $arg1 = (concat [format [@@arg2]] (loopconcat i $numargs [concatword " $arg" (+ $i 1)])) +] + +// binds a key so that it will toggle a variable +// i.e. bindvar 9 thirdperson +togglevar = [ + set $arg1 (= $$arg1 0) + if (= $$arg1 0) [echo $arg1 OFF] [echo $arg1 ON] +] +bindvar = [ + if (>= $numargs 3) [ + bind $arg1 [if (@arg3) [togglevar @@arg2]] + ] [ + bind $arg1 [togglevar @arg2] + ] +] +bindvarquiet = [ + bind $arg1 [set @arg2 (= $@arg2 0)] +] + +// same as above, but only binds for edit mode +editbindvar = [ + if (>= $numargs 3) [ + editbind $arg1 [if (@arg3) [togglevar @@arg2]] + ] [ + editbind $arg1 [togglevar @arg2] + ] +] +editbindvarquiet = [ + editbind $arg1 [set @arg2 (= $@arg2 0)] +] + +// binds a key so that it will set a modifier while held down +bindmod = [ + bind $arg1 [set @arg2 1; onrelease [set @@arg2 0]] +] + +// same as above, but only binds for edit mode +editbindmod = [ + editbind $arg1 [set @arg2 1; onrelease [set @@arg2 0]] +] + +quine = [ echo (format "quine = [%1]" $quine) ] + +loadsky = [ + skybox $arg1 + if (> $numargs 1) [ + spinsky $arg2 + ] [ + if (!=f $spinsky 0) [spinsky 0] + ] +] + +mapmsg = [ maptitle $arg1 ] diff --git a/data/teammate.png b/data/teammate.png new file mode 100644 index 0000000000000000000000000000000000000000..d2961b1e9a9780a88815f3b6ca601d96b06459ae GIT binary patch literal 1450 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I0wfs{c7_5;g=CK)Uj~LMH3o);76yi2K%s^g z3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tW7n^p7WWWqGntb$`_#GTEAjTTi42%A4XY_jl3FUOTj zVmePhsXkab&vwg|sdabwr9HR(n>VZa-}CZ+^Oyhs%zjE^anFBikA3}VYn)n`8+tNl zY|NT)$H1T6#o$IquR+HPgPggFa>jj5Op3lG^NZ(i?i5lw$iM1$0arcW`M?>)PkyYG zH`~ycsT8?tZ|&T6{=SoUoIE7m_20b=c_5>w?4#oCJF7juV%?hLxZ1@GZEjU3%rEGx zKRM#CfBn^9#<_7Gk^GNVe%PA#N#>Jj5SwG|=ePzF>-8*8Sdx3ro{!!8B75o@1*Si< zL_at)bfkRU8n@TN{%DvLgy;5oy-mC=)HLN?)!qr&w#lE1t(+J*6pl=FUZ5(zDS3Ww!)Y&%eUFP*9q3{9 zP+BrWtSQj?{jI&1dES`pE(@QKFlBmo_>r_{;nnBsO8=am^7-kJ^Y*d74CUs;OuQj? zWW&Ov?5%eq&Tt=HbA9%awi7)Xu}1n+u2ijEqVz5$<-LQ>+OJZ35?BR|iD z+4k9X^JTZB^Q$?ZR5{+P`1IiV!wW}}RcB25DJ}S~w*7YO^#jFKYr{hw4%&W6lu>M* zeteNx$2oO=y_)~Ooi~}BezN6^)&!o@la1GT8SkzAeCg|r7f-ql_$e#6_M5Ue6#&fe^rBp@0B=T*LA!ncCj~@ zb;Ou1EnCjHeoC_bkPNC{|6kfX=@=y34L8#S2|qBwM~we(J7C0meb88Z%eyU6vquEg)-p$+U&b zx;q}puzi?Qp~I^iU;n0{<>`%Ij%M>B!!NWg-;){syM4awJpZEZ;8QBUK6qSqUE`Ik;?1@~TIL+_vyZS;e zPL`ZGdBvjG_)B(Pp~qi&nXZOi1`*8~ME_V>X+}O=G3Mom1?^dCqq{ zIr58F{jTN~Q)-m5ZMur}I8_w{~@m)@hOex+AWpsCz=+3CxZI6H(+23^1O zS@XkT{fP+~t_k-Q7F-sv*Hd;<>7MYclg(MXRAfxSy}SpKIFEhJKOgKSnfhn@NB(txS2d^9riK7ZCe;$xh?11V zl2ohYqEsNoU}Ruqs%v1XYh)Z^XlP| literal 0 HcmV?d00001 -- 2.39.5