🤍
|
@ -39,7 +39,7 @@
|
|||
border: 1px solid #ffffff21;
|
||||
backdrop-filter: blur(10px);
|
||||
transition: all 0.3s ease;
|
||||
width: 180px;
|
||||
width: 190px;
|
||||
height: 250px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
|
|
@ -1017,7 +1017,7 @@
|
|||
{
|
||||
"name": "Cookie Clicker",
|
||||
"directory": "cookieclicker/",
|
||||
"image": "img/perfectCookie.png"
|
||||
"image": "perfectCookie.png"
|
||||
},
|
||||
{
|
||||
"name": "Superhot",
|
||||
|
|
1
public/assets/g/assets/boxes/BoxNew00/BoxNew00.mdl.json
Normal file
1
public/assets/g/assets/boxes/BoxNew00/BoxNew05.anm.json
Normal file
BIN
public/assets/g/assets/boxes/BoxNew00/korob00.png.dxt.txt
Normal file
1
public/assets/g/assets/common/atlas.json
Normal file
BIN
public/assets/g/assets/common/atlas.png.dxt.txt
Normal file
1
public/assets/g/assets/common/digits.json
Normal file
|
@ -0,0 +1 @@
|
|||
{"pageWidth":512,"pageHeight":512,"lineHeight":205,"lineBase":174,"pages":{"digits1.png":{"10":{"x":0,"y":0,"w":0,"h":0,"xo":-8,"yo":0,"xa":-4},"32":{"x":0,"y":0,"w":0,"h":0,"xo":-8,"yo":0,"xa":45},"47":{"x":0,"y":0,"w":121,"h":177,"xo":-8,"yo":23,"xa":101,"k":{"48":-12,"54":-12,"56":-12,"57":-12,"120":-4}},"48":{"x":316,"y":177,"w":129,"h":152,"xo":-2,"yo":34,"xa":121,"k":{"47":-19,"51":-5}},"49":{"x":224,"y":331,"w":74,"h":148,"xo":0,"yo":37,"xa":70,"k":{"48":-3,"54":-3,"56":-3,"57":-3}},"50":{"x":216,"y":177,"w":100,"h":152,"xo":-2,"yo":34,"xa":89,"k":{"48":-3,"54":-3,"56":-3,"57":-3}},"51":{"x":0,"y":177,"w":106,"h":154,"xo":-7,"yo":34,"xa":91,"k":{"48":-3,"54":-3,"56":-3,"57":-3}},"52":{"x":104,"y":331,"w":120,"h":149,"xo":0,"yo":37,"xa":116,"k":{"48":-3,"54":-3,"56":-3,"57":-3}},"53":{"x":0,"y":331,"w":104,"h":151,"xo":-2,"yo":34,"xa":94,"k":{"48":-3,"52":-4,"54":-3,"55":-4,"56":-3,"57":-3}},"54":{"x":229,"y":0,"w":109,"h":158,"xo":-3,"yo":30,"xa":99,"k":{"47":-19,"51":-5}},"55":{"x":106,"y":177,"w":110,"h":153,"xo":-4,"yo":35,"xa":98,"k":{"48":-3,"54":-3,"56":-3,"57":-3}},"56":{"x":338,"y":0,"w":109,"h":155,"xo":-4,"yo":34,"xa":97,"k":{"47":-19,"51":-5}},"57":{"x":121,"y":0,"w":108,"h":159,"xo":-3,"yo":31,"xa":97,"k":{"47":-19,"51":-5}},"120":{"x":298,"y":331,"w":108,"h":123,"xo":-7,"yo":63,"xa":91,"k":{"48":-3,"54":-3,"56":-3,"57":-3}}}}}
|
1
public/assets/g/assets/common/effects.json
Normal file
1
public/assets/g/assets/common/font.json
Normal file
1
public/assets/g/assets/decors/Dog01/dogBone01.anm.json
Normal file
BIN
public/assets/g/assets/decors/Plavnik01/Plavnik01.png.dxt.txt
Normal file
1
public/assets/g/assets/general/animations.json
Normal file
BIN
public/assets/g/assets/general/asphaltTrail.png.dxt.txt
Normal file
BIN
public/assets/g/assets/general/bitumTrail.png.dxt.txt
Normal file
BIN
public/assets/g/assets/general/car.ogg
Normal file
1
public/assets/g/assets/general/effects.json
Normal file
1
public/assets/g/assets/general/models.json
Normal file
BIN
public/assets/g/assets/general/moped.ogg
Normal file
BIN
public/assets/g/assets/general/motorbike.ogg
Normal file
1
public/assets/g/assets/general/music.json
Normal file
|
@ -0,0 +1 @@
|
|||
{"music.wav":{"base.wav":{"s":0,"e":32},"menu.wav":{"s":32.099,"e":64.1}}}
|
BIN
public/assets/g/assets/general/music.ogg
Normal file
1
public/assets/g/assets/general/opacity.json
Normal file
|
@ -0,0 +1 @@
|
|||
{"opacity.png":{"w":512,"h":512,"rs":{"Coin01.png":{"x":202,"y":15,"w":100,"h":100},"CoinDuble01.png":{"x":332,"y":102,"w":100,"h":91},"Kanistra02.png":{"x":332,"y":195,"w":100,"h":100},"Magnit.png":{"x":454,"y":397,"w":54,"h":100},"Nitro01.png":{"x":304,"y":0,"w":100,"h":100},"PoliceCar002.png":{"x":0,"y":45,"w":200,"h":200},"Policeman02.png":{"x":252,"y":297,"w":200,"h":200},"Star01.png":{"x":0,"y":247,"w":250,"h":250},"vopros.png":{"x":202,"y":117,"w":128,"h":128}}}}
|
BIN
public/assets/g/assets/general/opacity.png.dxt.txt
Normal file
BIN
public/assets/g/assets/general/sandTrail.png.dxt.txt
Normal file
1
public/assets/g/assets/general/sounds.json
Normal file
|
@ -0,0 +1 @@
|
|||
{"sounds.wav":{"accel.wav":{"s":0,"e":2.315},"asphalt.wav":{"s":2.415,"e":4.946},"bitumen.wav":{"s":5.046,"e":7.029},"bonus.wav":{"s":7.129,"e":8.599},"brakes.wav":{"s":8.699,"e":9.63},"buy.wav":{"s":9.73,"e":10.294},"change.wav":{"s":10.394,"e":10.744},"click.wav":{"s":10.844,"e":10.901},"coin1.wav":{"s":11.001,"e":11.111},"coin10.wav":{"s":11.211,"e":11.321},"coin11.wav":{"s":11.421,"e":11.532},"coin12.wav":{"s":11.632,"e":11.742},"coin13.wav":{"s":11.842,"e":11.952},"coin2.wav":{"s":12.052,"e":12.162},"coin3.wav":{"s":12.262,"e":12.372},"coin4.wav":{"s":12.472,"e":12.581},"coin5.wav":{"s":12.681,"e":12.79},"coin6.wav":{"s":12.89,"e":13},"coin7.wav":{"s":13.1,"e":13.209},"coin8.wav":{"s":13.309,"e":13.419},"coin9.wav":{"s":13.519,"e":13.629},"coins.wav":{"s":13.729,"e":14.292},"congrats.wav":{"s":14.392,"e":16.452},"cop_end.wav":{"s":16.552,"e":18.684},"cop_idle1.wav":{"s":18.784,"e":20.727},"cop_idle2.wav":{"s":20.827,"e":22.589},"cop_idle3.wav":{"s":22.689,"e":24.486},"cop_start.wav":{"s":24.586,"e":26.41},"cop_turn1.wav":{"s":26.51,"e":27.688},"cop_turn2.wav":{"s":27.788,"e":28.98},"cop_turn3.wav":{"s":29.08,"e":30.359},"counter.wav":{"s":30.459,"e":30.508},"earth.wav":{"s":30.608,"e":31.403},"gates.wav":{"s":31.503,"e":32.949},"go.wav":{"s":33.049,"e":34.417},"hide_panel.wav":{"s":34.517,"e":34.643},"hit_metal.wav":{"s":34.743,"e":35.394},"hit_plast.wav":{"s":35.494,"e":35.686},"hit_stone.wav":{"s":35.786,"e":36.132},"hit_wood.wav":{"s":36.232,"e":36.566},"magnet.wav":{"s":36.666,"e":41.646},"ready.wav":{"s":41.746,"e":43.079},"sand.wav":{"s":43.179,"e":55.021},"show_panel.wav":{"s":55.121,"e":55.56},"to_kart.wav":{"s":55.66,"e":56.087},"tramplin.wav":{"s":56.187,"e":56.762}}}
|
BIN
public/assets/g/assets/general/sounds.ogg
Normal file
BIN
public/assets/g/assets/general/traktor.ogg
Normal file
1
public/assets/g/assets/general/transparent.json
Normal file
|
@ -0,0 +1 @@
|
|||
{"transparent.png":{"w":512,"h":512,"rs":{"bitum.png":{"x":0,"y":182,"w":128,"h":128},"deck.png":{"x":382,"y":196,"w":64,"h":64},"drops.png":{"x":202,"y":384,"w":128,"h":128},"dust.png":{"x":0,"y":52,"w":128,"h":128},"fire.png":{"x":130,"y":60,"w":120,"h":120},"grain.png":{"x":202,"y":360,"w":22,"h":22},"heart.png":{"x":448,"y":196,"w":64,"h":64},"lin.png":{"x":332,"y":384,"w":128,"h":128},"paper.png":{"x":130,"y":182,"w":128,"h":128},"part.png":{"x":252,"y":74,"w":64,"h":64},"point.png":{"x":318,"y":12,"w":60,"h":60},"point2.png":{"x":384,"y":134,"w":60,"h":60},"ring.png":{"x":260,"y":262,"w":120,"h":120},"smoke.png":{"x":0,"y":312,"w":200,"h":200},"smoke_w.png":{"x":260,"y":140,"w":120,"h":120},"spark.png":{"x":318,"y":74,"w":64,"h":64},"star.png":{"x":382,"y":262,"w":120,"h":120},"star1.png":{"x":0,"y":0,"w":50,"h":50},"trilist.png":{"x":252,"y":8,"w":64,"h":64}}}}
|
BIN
public/assets/g/assets/general/transparent.png.dxt.txt
Normal file
BIN
public/assets/g/assets/general/truck.ogg
Normal file
BIN
public/assets/g/assets/heroes/Boy/Boy01.png.dxt.txt
Normal file
1
public/assets/g/assets/heroes/Boy/Max01.mdl.json
Normal file
1
public/assets/g/assets/heroes/Boy/sounds.json
Normal file
|
@ -0,0 +1 @@
|
|||
{"sounds.wav":{"end.wav":{"s":0,"e":1.923},"enjoy1.wav":{"s":2.023,"e":3.149},"enjoy2.wav":{"s":3.249,"e":4.028},"hi.wav":{"s":4.128,"e":4.624},"joy1.wav":{"s":4.724,"e":5.337},"joy2.wav":{"s":5.437,"e":6.496},"jump.wav":{"s":6.596,"e":6.833},"start.wav":{"s":6.933,"e":9.226}}}
|
BIN
public/assets/g/assets/heroes/Boy/sounds.ogg
Normal file
1
public/assets/g/assets/karts/Kart01/Kart01.mdl.json
Normal file
BIN
public/assets/g/assets/karts/Kart01/Kart01.png.dxt.txt
Normal file
BIN
public/assets/g/assets/location/fog.png
Normal file
After Width: | Height: | Size: 143 KiB |
1
public/assets/g/assets/location/levels.json
Normal file
1
public/assets/g/assets/location/models.json
Normal file
1
public/assets/g/assets/location/music.json
Normal file
|
@ -0,0 +1 @@
|
|||
{"music.wav":{"amb.wav":{"s":0,"e":3.06},"gameplay.wav":{"s":3.159,"e":45.826},"tonnel.wav":{"s":45.926,"e":56.437}}}
|
BIN
public/assets/g/assets/location/music.ogg
Normal file
1
public/assets/g/assets/location/opacity.json
Normal file
|
@ -0,0 +1 @@
|
|||
{"opacity.png":{"w":2048,"h":2048,"rs":{"Bachok01.png":{"x":1764,"y":2,"w":128,"h":128},"BackHouses.png":{"x":1412,"y":458,"w":128,"h":128},"Ballonchik01.png":{"x":1234,"y":106,"w":128,"h":128},"Bochka01.png":{"x":1894,"y":11,"w":140,"h":140},"Doski01.png":{"x":1002,"y":4,"w":230,"h":230},"Fonar02.png":{"x":1764,"y":132,"w":59,"h":256},"Gazon01.png":{"x":802,"y":486,"w":256,"h":100},"House01.png":{"x":514,"y":44,"w":400,"h":400},"Konstruction01.png":{"x":1060,"y":236,"w":350,"h":350},"Konus01.png":{"x":0,"y":0,"w":64,"h":55},"Meshok01.png":{"x":1955,"y":230,"w":64,"h":94},"Meshok02.png":{"x":1542,"y":492,"w":64,"h":94},"Meshok03.png":{"x":1542,"y":396,"w":64,"h":94},"OgrDvij01.png":{"x":0,"y":57,"w":512,"h":387},"Ostanovka.png":{"x":1862,"y":1190,"w":181,"h":256},"Pandus01.png":{"x":1604,"y":1448,"w":422,"h":600},"RoadPark02.png":{"x":0,"y":1248,"w":800,"h":800},"Stol01.png":{"x":1644,"y":794,"w":200,"h":200},"Stolb01.png":{"x":916,"y":284,"w":109,"h":200},"Svetofor02.png":{"x":1644,"y":996,"w":210,"h":256},"Tunnel01.png":{"x":0,"y":446,"w":800,"h":800},"Vorota001.png":{"x":916,"y":26,"w":84,"h":256},"avtomat01.png":{"x":1825,"y":153,"w":128,"h":171},"chemodan.png":{"x":1846,"y":730,"w":200,"h":200},"chemodan02.png":{"x":1644,"y":592,"w":200,"h":200},"chemodan03.png":{"x":1846,"y":528,"w":200,"h":200},"parkzabor.png":{"x":1644,"y":390,"w":200,"h":200},"perehod02.png":{"x":802,"y":588,"w":840,"h":658},"reklRoad.png":{"x":1856,"y":932,"w":145,"h":256},"reklama02.png":{"x":1846,"y":326,"w":200,"h":200},"road00.png":{"x":802,"y":1248,"w":800,"h":800},"shlznak.png":{"x":1412,"y":38,"w":350,"h":350},"svetofor.png":{"x":1604,"y":1254,"w":256,"h":192}}},"opacity2.png":{"w":2048,"h":2048,"rs":{"Ballonchik02.png":{"x":0,"y":0,"w":128,"h":128},"Blok01.png":{"x":702,"y":1778,"w":256,"h":256},"Car0002.png":{"x":960,"y":1778,"w":256,"h":256},"Car0002_02.png":{"x":960,"y":1520,"w":256,"h":256},"Car001.png":{"x":702,"y":1520,"w":256,"h":256},"Car001_02.png":{"x":602,"y":774,"w":256,"h":256},"Elka01.png":{"x":130,"y":0,"w":128,"h":128},"Gidrant01.png":{"x":260,"y":0,"w":128,"h":128},"Hiway01.png":{"x":602,"y":516,"w":256,"h":256},"House010.png":{"x":860,"y":516,"w":256,"h":256},"House02_02.png":{"x":860,"y":258,"w":256,"h":256},"House03_02.png":{"x":908,"y":0,"w":256,"h":256},"House04.png":{"x":602,"y":258,"w":256,"h":256},"House05.png":{"x":650,"y":0,"w":256,"h":256},"House05_02.png":{"x":1118,"y":874,"w":256,"h":256},"House06.png":{"x":860,"y":774,"w":256,"h":256},"House07.png":{"x":904,"y":1132,"w":256,"h":256},"House08.png":{"x":1218,"y":1778,"w":256,"h":256},"House09.png":{"x":1218,"y":1520,"w":256,"h":256},"HouseLittle.png":{"x":1162,"y":1132,"w":256,"h":256},"Ink01.png":{"x":1476,"y":1778,"w":256,"h":256},"Klumba01.png":{"x":1476,"y":1520,"w":256,"h":256},"MagIn01.png":{"x":0,"y":732,"w":600,"h":600},"MagTile01.png":{"x":0,"y":130,"w":600,"h":600},"Meshok000.png":{"x":390,"y":0,"w":128,"h":128},"Musorka01.png":{"x":1118,"y":616,"w":256,"h":256},"Ogr01.png":{"x":1118,"y":358,"w":256,"h":256},"Poloska01.png":{"x":520,"y":0,"w":128,"h":128},"Pregrada01.png":{"x":1166,"y":100,"w":256,"h":256},"Proj01.png":{"x":702,"y":1390,"w":128,"h":128},"Pyatno01.png":{"x":832,"y":1390,"w":128,"h":128},"Reklschit01.png":{"x":1376,"y":874,"w":256,"h":256},"Rock01.png":{"x":602,"y":1032,"w":300,"h":300},"Statuya01.png":{"x":1420,"y":1132,"w":256,"h":256},"Telejka01.png":{"x":962,"y":1390,"w":128,"h":128},"Tramplin01.png":{"x":1734,"y":1778,"w":256,"h":256},"Tramplin02.png":{"x":0,"y":1334,"w":700,"h":700},"Tree02.png":{"x":1734,"y":1520,"w":256,"h":256},"Vorota002.png":{"x":1936,"y":1132,"w":84,"h":256},"Vorota003.png":{"x":1892,"y":874,"w":84,"h":256},"Zaborrr01.png":{"x":1092,"y":1390,"w":128,"h":128},"Znak01.png":{"x":1222,"y":1390,"w":128,"h":128},"Znak02.png":{"x":1352,"y":1390,"w":128,"h":128},"Znak03.png":{"x":1482,"y":1390,"w":128,"h":128},"bank.png":{"x":1612,"y":1390,"w":128,"h":128},"fonarMetro.png":{"x":1742,"y":1390,"w":128,"h":128},"garaj.png":{"x":1872,"y":1390,"w":128,"h":128},"house011.png":{"x":1376,"y":358,"w":256,"h":256},"house012.png":{"x":1424,"y":100,"w":256,"h":256},"house03.png":{"x":1376,"y":616,"w":256,"h":256},"klumbaroad.png":{"x":1892,"y":744,"w":128,"h":128},"ogr02.png":{"x":1884,"y":284,"w":128,"h":128},"parkTree.png":{"x":1634,"y":874,"w":256,"h":256},"parkkust.png":{"x":1884,"y":154,"w":128,"h":128},"parkskam.png":{"x":1682,"y":82,"w":128,"h":128},"roof_exit01.png":{"x":1678,"y":1132,"w":256,"h":256},"smoke_tube03.png":{"x":1634,"y":414,"w":200,"h":200},"tree03.png":{"x":1836,"y":414,"w":200,"h":200},"vagMetroYasch.png":{"x":1634,"y":616,"w":256,"h":256},"vent_tube02.png":{"x":1682,"y":212,"w":200,"h":200},"water_tower01.png":{"x":1812,"y":24,"w":128,"h":128}}}}
|
BIN
public/assets/g/assets/location/opacity.png.dxt.txt
Normal file
BIN
public/assets/g/assets/location/opacity2.png.dxt.txt
Normal file
1
public/assets/g/assets/location/sounds.json
Normal file
|
@ -0,0 +1 @@
|
|||
{"sounds.wav":{"car_horn1.wav":{"s":0,"e":0.541},"car_horn2.wav":{"s":0.641,"e":1.727},"car_loop.wav":{"s":1.827,"e":3.419},"crate.wav":{"s":3.519,"e":4.353},"hit_barrel.wav":{"s":4.453,"e":5.088},"hit_cart.wav":{"s":5.188,"e":6.498},"hit_suitcase.wav":{"s":6.598,"e":6.898},"hit_trash.wav":{"s":6.998,"e":7.833},"ink_loop.wav":{"s":7.933,"e":11.202},"tree.wav":{"s":11.302,"e":11.969},"truck_horn1.wav":{"s":12.069,"e":13.444},"truck_horn2.wav":{"s":13.544,"e":14.962},"truck_loop.wav":{"s":15.062,"e":17.369}}}
|
BIN
public/assets/g/assets/location/sounds.ogg
Normal file
1
public/assets/g/assets/preloader/atlas.json
Normal file
|
@ -0,0 +1 @@
|
|||
{"atlas.png":{"w":1024,"h":1024,"rs":{"back.png":{"x":0,"y":473,"w":1024,"h":512},"image.png":{"x":0,"y":49,"w":567,"h":422},"logo.png":{"x":569,"y":204,"w":207,"h":152},"progress_back.png":{"x":569,"y":358,"w":455,"h":113},"progress_bar.png":{"x":0,"y":0,"w":402,"h":47}}}}
|
BIN
public/assets/g/assets/preloader/atlas.png.dxt.txt
Normal file
1
public/assets/g/assets/tokens/Aptechka/Aptechka.mdl.json
Normal file
BIN
public/assets/g/assets/tokens/Aptechka/Aptechka.png.dxt.txt
Normal file
1
public/assets/g/assets/tokens/Cheese01/Cheese01.mdl.json
Normal file
|
@ -0,0 +1 @@
|
|||
{"geometry":{"attributes":{"position":[-0.522,-0.485,1.389,-0.991,-0.829,-0.477,-0.572,-1.232,-0.508,-0.103,-0.888,1.358,-1.347,-0.37,-0.495,-0.932,0.38,-0.738,0.205,-0.855,-0.796,-1.168,0.483,1.372,-0.48,0.758,1.149,-0.949,0.413,-0.717,-1.637,0.138,-0.493,-0.867,-0.018,1.412,-0.501,-0.466,1.403,-0.084,-0.867,1.372,0.361,-1.174,1.317,0.685,-0.502,1.111,-0.452,0.732,1.169,-1.137,0.453,1.394,-0.082,-1.55,-0.572,0.238,-0.876,-0.777,0.707,-0.531,1.088,0.387,-1.205,1.293,1.07,1.195,-1.393,1.153,1.19,-1.412,1.152,1.106,-1.397,1.651,1.56,0.464,1.181,1.216,-1.401,1.061,1.216,-1.371,1.53,1.56,0.494,1.632,1.458,0.511,1.633,1.542,0.495,1.55,1.548,0.515,1.181,1.216,-1.401,1.651,1.56,0.464,1.642,1.438,0.489,1.173,1.094,-1.376,-1.181,0.437,1.384,-1.651,0.093,-0.481,-1.359,-0.378,-0.467,-0.889,-0.034,1.398,-0.128,-1.56,-0.559,0.342,-1.216,1.306,0.361,-1.174,1.317,-0.084,-0.867,1.372,-1.137,0.453,1.394,-0.452,0.732,1.169,1.55,1.548,0.515,1.633,1.542,0.495,-0.501,-0.466,1.403,-0.867,-0.018,1.412,-1.137,0.453,1.394,-1.618,0.101,-0.514,-1.347,-0.37,-0.495,-1.618,0.101,-0.514,-0.932,0.38,-0.738,1.153,1.19,-1.412,1.152,1.106,-1.397,1.07,1.195,-1.393,1.153,1.19,-1.412,0.205,-0.855,-0.796,-0.981,-0.819,-0.504,-0.564,-1.219,-0.535,-0.119,-1.526,-0.591,-0.082,-1.55,-0.572,0.387,-1.205,1.293,-1.168,0.483,1.372,-1.637,0.138,-0.493,-0.119,-1.526,-0.591,-1.618,0.101,-0.514,-0.564,-1.219,-0.535,-0.981,-0.819,-0.504,-0.119,-1.526,-0.591],"uv":[0.7591,0.803505,0.7591,0.993336,0.848993,0.993352,0.848993,0.803491,0.946255,0.0910295,0.975557,0.187236,0.757877,0.050135,0.56311,0.752332,0.430959,0.751805,0.432483,0.988072,0.564809,0.988209,0.51828,0.0166324,0.347274,0.0399002,0.147604,0.104392,0.00848454,0.176624,0.190099,0.199337,0.740773,0.0594423,0.692858,0.00461304,0.018375,0.620233,0.211323,0.660779,0.187016,0.209003,0.00652452,0.18984,0.995101,0.287996,0.995829,0.315237,0.975595,0.294892,0.00611788,0.749456,0.00546479,0.989165,0.0247208,0.98853,0.0258328,0.749685,0.936165,0.335017,0.986856,0.340861,0.964988,0.311699,0.989667,0.779146,0.992773,0.358012,0.932477,0.351492,0.928252,0.77536,0.583872,0.803773,0.583872,0.993063,0.669207,0.99335,0.669207,0.803488,0.934328,0.993067,0.934328,0.803778,0.934264,0.799539,0.849098,0.800456,0.561611,0.744045,0.429864,0.743415,0.0259178,0.743314,0.00613368,0.743065,0.7591,0.800461,0.669102,0.800452,0.583936,0.799534,0.583936,0.997302,0.669102,0.996385,0.563271,0.994748,0.431328,0.994569,0.965691,0.79035,0.923146,0.787134,0.0246825,0.99576,0.00578511,0.99614,0.213296,0.669894,0.7591,0.99638,0.849097,0.996388,0.934263,0.997306,0.941208,0.993838,0.941209,0.803008,0.576991,0.803002,0.57699,0.993833,0.0208268,0.63551,0.988565,0.121744,0.782733,0.0131367,0.871303,0.0456923,0.717193,0.00408894]},"indices":[0,1,2,2,3,0,4,5,6,7,8,9,9,10,7,11,12,13,13,14,15,13,15,16,11,13,16,17,11,16,18,19,20,20,21,18,22,23,24,25,26,27,27,28,25,29,30,31,32,33,34,34,35,32,36,37,38,38,39,36,39,38,1,1,0,39,40,41,3,3,2,40,41,42,43,43,3,41,44,45,8,8,7,44,14,21,20,20,15,14,28,46,47,47,25,28,29,34,33,33,30,29,3,43,48,48,0,3,0,48,49,49,39,0,39,49,50,50,36,39,37,51,52,52,38,37,53,10,9,9,54,53,55,32,35,35,56,55,57,27,26,26,58,57,35,19,59,59,56,35,38,52,60,60,1,38,1,60,61,61,2,1,2,61,62,62,40,2,40,63,64,64,41,40,36,65,66,66,37,36,42,41,64,50,65,36,62,63,40,51,37,66,22,24,6,6,5,22,28,27,9,9,8,28,29,31,16,16,15,29,35,34,20,20,19,35,45,46,28,28,8,45,34,29,15,15,20,34,27,57,54,54,9,27,19,18,67,67,59,19,4,68,5,69,70,4,4,6,69,6,71,69],"bs":[0,0,0,2.318]},"diffuseMap":"cheese01.png"}
|
BIN
public/assets/g/assets/tokens/Cheese01/cheese01.png.dxt.txt
Normal file
1
public/assets/g/assets/tokens/Gradus01/Gradus01.mdl.json
Normal file
BIN
public/assets/g/assets/tokens/Gradus01/gradusnik01.png.dxt.txt
Normal file
1
public/assets/g/assets/tokens/Jezl01/Jezl01.mdl.json
Normal file
BIN
public/assets/g/assets/tokens/Jezl01/Jezl01.png.dxt.txt
Normal file
BIN
public/assets/g/assets/tokens/Kirpich01/kirpich011.png.dxt.txt
Normal file
BIN
public/assets/g/assets/tokens/Klakson01/klakson01.png.dxt.txt
Normal file
1
public/assets/g/assets/tokens/Magn01/Magn01.mdl.json
Normal file
BIN
public/assets/g/assets/tokens/Magn01/Magnitofon01.png.dxt.txt
Normal file
BIN
public/assets/g/assets/tokens/Ognetush01/ognetush01.png.dxt.txt
Normal file
1
public/assets/g/assets/tokens/Rasia01/Rasia01.mdl.json
Normal file
BIN
public/assets/g/assets/tokens/Rasia01/Rasiya01.png.dxt.txt
Normal file
1
public/assets/g/assets/tokens/Rul01/Rul01.mdl.json
Normal file
BIN
public/assets/g/assets/tokens/Rul01/Rul01.png.dxt.txt
Normal file
1
public/assets/g/assets/tokens/Shash01/Shash01.mdl.json
Normal file
BIN
public/assets/g/assets/tokens/Shash01/Shash01.png.dxt.txt
Normal file
BIN
public/assets/g/assets/tokens/Slitok01/Gold02.png.dxt.txt
Normal file
1
public/assets/g/assets/tokens/Slitok01/Slitok01.mdl.json
Normal file
BIN
public/assets/g/blackjack/icon.png
Normal file
After Width: | Height: | Size: 88 KiB |
193
public/assets/g/blackjack/index.html
Normal file
|
@ -0,0 +1,193 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Blackjack</title>
|
||||
<style>
|
||||
body {
|
||||
background: #0b3d91;
|
||||
color: white;
|
||||
font-family: Arial, sans-serif;
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
}
|
||||
button {
|
||||
margin: 10px;
|
||||
padding: 10px 20px;
|
||||
font-size: 16px;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
background: #4CAF50;
|
||||
color: white;
|
||||
cursor: pointer;
|
||||
}
|
||||
button:hover {
|
||||
background: #45a049;
|
||||
}
|
||||
#game {
|
||||
margin-top: 20px;
|
||||
}
|
||||
canvas {
|
||||
position: fixed;
|
||||
pointer-events: none;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 9999;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>Blackjack</h1>
|
||||
<div id="game">
|
||||
<div id="player"></div>
|
||||
<div id="dealer"></div>
|
||||
<div id="result"></div>
|
||||
|
||||
<button onclick="hit()">Hit</button>
|
||||
<button onclick="stand()">Stand</button>
|
||||
<button onclick="startGame()">Restart</button>
|
||||
</div>
|
||||
<canvas id="confetti-canvas"></canvas>
|
||||
|
||||
<script>
|
||||
let playerCards = [];
|
||||
let dealerCards = [];
|
||||
let isGameOver = false;
|
||||
const confettiCanvas = document.getElementById('confetti-canvas');
|
||||
const ctx = confettiCanvas.getContext('2d');
|
||||
let confetti = [];
|
||||
|
||||
function dealCard() {
|
||||
const cards = [2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11];
|
||||
return cards[Math.floor(Math.random() * cards.length)];
|
||||
}
|
||||
|
||||
function calculateScore(cards) {
|
||||
let score = cards.reduce((a, b) => a + b, 0);
|
||||
if (score > 21 && cards.includes(11)) {
|
||||
cards[cards.indexOf(11)] = 1;
|
||||
score = cards.reduce((a, b) => a + b, 0);
|
||||
}
|
||||
return score;
|
||||
}
|
||||
|
||||
function startGame() {
|
||||
playerCards = [dealCard(), dealCard()];
|
||||
dealerCards = [dealCard(), dealCard()];
|
||||
isGameOver = false;
|
||||
document.getElementById('result').innerText = "";
|
||||
confetti = [];
|
||||
updateUI();
|
||||
}
|
||||
|
||||
function hit() {
|
||||
if (!isGameOver) {
|
||||
playerCards.push(dealCard());
|
||||
updateUI();
|
||||
checkGameOver();
|
||||
}
|
||||
}
|
||||
|
||||
function stand() {
|
||||
if (!isGameOver) {
|
||||
while (calculateScore(dealerCards) < 17) {
|
||||
dealerCards.push(dealCard());
|
||||
}
|
||||
isGameOver = true;
|
||||
updateUI();
|
||||
determineWinner();
|
||||
}
|
||||
}
|
||||
|
||||
function updateUI() {
|
||||
document.getElementById('player').innerText = `Your cards: ${playerCards.join(', ')} (Score: ${calculateScore(playerCards)})`;
|
||||
if (isGameOver) {
|
||||
document.getElementById('dealer').innerText = `Dealer's cards: ${dealerCards.join(', ')} (Score: ${calculateScore(dealerCards)})`;
|
||||
} else {
|
||||
document.getElementById('dealer').innerText = `Dealer's first card: ${dealerCards[0]}`;
|
||||
}
|
||||
}
|
||||
|
||||
function checkGameOver() {
|
||||
if (calculateScore(playerCards) > 21) {
|
||||
isGameOver = true;
|
||||
determineWinner();
|
||||
}
|
||||
}
|
||||
|
||||
function determineWinner() {
|
||||
const playerScore = calculateScore(playerCards);
|
||||
const dealerScore = calculateScore(dealerCards);
|
||||
|
||||
if (playerScore > 21) {
|
||||
document.getElementById('result').innerText = "You busted! Dealer wins.";
|
||||
} else if (dealerScore > 21) {
|
||||
document.getElementById('result').innerText = "Dealer busted! You win!";
|
||||
launchConfetti();
|
||||
} else if (playerScore === dealerScore) {
|
||||
document.getElementById('result').innerText = "It's a draw!";
|
||||
} else if (playerScore > dealerScore) {
|
||||
document.getElementById('result').innerText = "You win!";
|
||||
launchConfetti();
|
||||
} else {
|
||||
document.getElementById('result').innerText = "Dealer wins.";
|
||||
}
|
||||
}
|
||||
|
||||
function launchConfetti() {
|
||||
for (let i = 0; i < 100; i++) {
|
||||
confetti.push({
|
||||
x: Math.random() * window.innerWidth,
|
||||
y: Math.random() * window.innerHeight - window.innerHeight,
|
||||
r: Math.random() * 6 + 4,
|
||||
d: Math.random() * 10 + 10,
|
||||
color: `hsl(${Math.random() * 360}, 100%, 50%)`,
|
||||
tilt: Math.random() * 10 - 10
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function drawConfetti() {
|
||||
ctx.clearRect(0, 0, confettiCanvas.width, confettiCanvas.height);
|
||||
confetti.forEach((c, i) => {
|
||||
ctx.beginPath();
|
||||
ctx.lineWidth = c.r;
|
||||
ctx.strokeStyle = c.color;
|
||||
ctx.moveTo(c.x + c.tilt + c.r / 2, c.y);
|
||||
ctx.lineTo(c.x + c.tilt, c.y + c.tilt + c.d / 2);
|
||||
ctx.stroke();
|
||||
|
||||
c.y += Math.cos(c.d) + 1 + c.r / 2;
|
||||
c.x += Math.sin(c.d);
|
||||
|
||||
if (c.y > window.innerHeight) {
|
||||
confetti[i] = {
|
||||
x: Math.random() * window.innerWidth,
|
||||
y: -10,
|
||||
r: c.r,
|
||||
d: c.d,
|
||||
color: c.color,
|
||||
tilt: c.tilt
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function resizeCanvas() {
|
||||
confettiCanvas.width = window.innerWidth;
|
||||
confettiCanvas.height = window.innerHeight;
|
||||
}
|
||||
|
||||
resizeCanvas();
|
||||
window.addEventListener('resize', resizeCanvas);
|
||||
setInterval(drawConfetti, 30);
|
||||
|
||||
startGame();
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,871 +0,0 @@
|
|||
/*
|
||||
Orteil's crappy dungeon generation library, 2013
|
||||
Unfinished and buggy, use at your own risk (please credit)
|
||||
http://orteil.dashnet.org
|
||||
|
||||
Rough process (might or might not be what actually happens) :
|
||||
1 make a room in the middle
|
||||
2 pick one of its walls (not corners)
|
||||
3 select a free tile on the other side of that wall
|
||||
4 iteratively expand the selection in one (corridors) or two (rooms) directions, stopping when we meet a wall or when we're above the size threshold
|
||||
5 compute that selection into a room
|
||||
6 add decorations to the room (pillars, water) but only on the center tiles, as to leave free passages (sprinkle destructible decorations anywhere)
|
||||
7 take a random floor tile in the room and repeat step 4, but don't stop at the walls of this room (this creates branching) - repeat about 5 times for interesting shapes
|
||||
8 add those branches to the room
|
||||
9 carve the room into the map, and set the initially selected wall as a door - set the new room's parent to the previous room, and add it to its parent's children
|
||||
10 repeat step 2 with any free wall on the map until the amount of tiles dug is above the desired fill ratio
|
||||
|
||||
Note : I should probably switch the rendering to canvas to allow stuff like occlusion shadows and lights
|
||||
*/
|
||||
|
||||
if (1==1 || undefined==Math.seedrandom)
|
||||
{
|
||||
//seeded random function, courtesy of http://davidbau.com/archives/2010/01/30/random_seeds_coded_hints_and_quintillions.html
|
||||
(function(a,b,c,d,e,f){function k(a){var b,c=a.length,e=this,f=0,g=e.i=e.j=0,h=e.S=[];for(c||(a=[c++]);d>f;)h[f]=f++;for(f=0;d>f;f++)h[f]=h[g=j&g+a[f%c]+(b=h[f])],h[g]=b;(e.g=function(a){for(var b,c=0,f=e.i,g=e.j,h=e.S;a--;)b=h[f=j&f+1],c=c*d+h[j&(h[f]=h[g=j&g+b])+(h[g]=b)];return e.i=f,e.j=g,c})(d)}function l(a,b){var e,c=[],d=(typeof a)[0];if(b&&"o"==d)for(e in a)try{c.push(l(a[e],b-1))}catch(f){}return c.length?c:"s"==d?a:a+"\0"}function m(a,b){for(var d,c=a+"",e=0;c.length>e;)b[j&e]=j&(d^=19*b[j&e])+c.charCodeAt(e++);return o(b)}function n(c){try{return a.crypto.getRandomValues(c=new Uint8Array(d)),o(c)}catch(e){return[+new Date,a,a.navigator.plugins,a.screen,o(b)]}}function o(a){return String.fromCharCode.apply(0,a)}var g=c.pow(d,e),h=c.pow(2,f),i=2*h,j=d-1;c.seedrandom=function(a,f){var j=[],p=m(l(f?[a,o(b)]:0 in arguments?a:n(),3),j),q=new k(j);return m(o(q.S),b),c.random=function(){for(var a=q.g(e),b=g,c=0;h>a;)a=(a+c)*d,b*=d,c=q.g(1);for(;a>=i;)a/=2,b/=2,c>>>=1;return(a+c)/b},p},m(c.random(),b)})(this,[],Math,256,6,52);
|
||||
}
|
||||
|
||||
if (1==1 || undefined==choose) {function choose(arr) {if (arr.length==0) return 0; else return arr[Math.floor(Math.random()*arr.length)];}}
|
||||
|
||||
|
||||
var DungeonGen=function()
|
||||
{
|
||||
var TILE_EMPTY=0;//solid
|
||||
var TILE_LIMIT=-100;//can't build anything here; edges of map
|
||||
var TILE_FLOOR_EDGE=100;
|
||||
var TILE_FLOOR_CENTER=110;
|
||||
var TILE_DOOR=200;
|
||||
var TILE_PILLAR=300;//not just pillars, could be any type of repetitive decoration
|
||||
var TILE_WATER=400;
|
||||
var TILE_WALL=500;
|
||||
var TILE_WALL_CORNER=510;
|
||||
var TILE_ENTRANCE=250;
|
||||
var TILE_EXIT=260;
|
||||
|
||||
var colors=[];
|
||||
colors[TILE_EMPTY]='000';
|
||||
colors[TILE_LIMIT]='900';
|
||||
colors[TILE_FLOOR_EDGE]='ffc';
|
||||
colors[TILE_FLOOR_CENTER]='ff9';
|
||||
colors[TILE_DOOR]='f9f';
|
||||
colors[TILE_PILLAR]='990';
|
||||
colors[TILE_WATER]='99f';
|
||||
colors[TILE_WALL]='960';
|
||||
colors[TILE_WALL_CORNER]='630';
|
||||
colors[TILE_ENTRANCE]='f9f';
|
||||
colors[TILE_EXIT]='f9f';
|
||||
|
||||
var rand=function(a,b){return Math.floor(Math.random()*(b-a+1)+a);}//return random value between a and b
|
||||
|
||||
var Patterns=[];
|
||||
this.Pattern=function(name,func)
|
||||
{
|
||||
this.name=name;
|
||||
this.func=func;
|
||||
Patterns.push(this);
|
||||
}
|
||||
new this.Pattern('Pillars',function(x,y,room)
|
||||
{
|
||||
if ((x+room.x)%2==0 && (y+room.y)%2==0 && Math.random()<0.8) return TILE_PILLAR;
|
||||
return 0;
|
||||
});
|
||||
new this.Pattern('Large pillars',function(x,y,room)
|
||||
{
|
||||
if ((x+room.x)%3<2 && (y+room.y)%3<2 && Math.random()<0.8) return TILE_PILLAR;
|
||||
return 0;
|
||||
});
|
||||
new this.Pattern('Sparse pillars',function(x,y,room)
|
||||
{
|
||||
if ((x+room.x)%3==0 && (y+room.y)%3==0 && Math.random()<0.8) return TILE_PILLAR;
|
||||
return 0;
|
||||
});
|
||||
new this.Pattern('Lines',function(x,y,room)
|
||||
{
|
||||
if (room.x%2==0) if ((x+room.x)%2==0 && Math.random()<0.98) return TILE_PILLAR;
|
||||
if (room.x%2==1) if ((y+room.y)%2==0 && Math.random()<0.98) return TILE_PILLAR;
|
||||
return 0;
|
||||
});
|
||||
|
||||
|
||||
var getRandomPattern=function()
|
||||
{return choose(Patterns);}
|
||||
|
||||
var defaultGenerator=function(me)
|
||||
{
|
||||
me.roomSize=10;
|
||||
me.corridorSize=5;
|
||||
me.fillRatio=1/3;
|
||||
me.corridorRatio=0.2;
|
||||
me.pillarRatio=0.2;
|
||||
me.waterRatio=0;
|
||||
me.branching=4;
|
||||
me.sizeVariance=0.2;
|
||||
|
||||
me.fillRatio=0.1+Math.random()*0.4;
|
||||
me.roomSize=Math.ceil(rand(5,15)*me.fillRatio*2);
|
||||
me.corridorSize=Math.ceil(rand(1,7)*me.fillRatio*2);
|
||||
me.corridorRatio=Math.random()*0.8+0.1;
|
||||
me.pillarRatio=Math.random()*0.5+0.5;
|
||||
me.waterRatio=Math.pow(Math.random(),2);
|
||||
me.branching=Math.floor(Math.random()*6);
|
||||
me.sizeVariance=Math.random();
|
||||
}
|
||||
|
||||
|
||||
this.Map=function(w,h,seed,params)
|
||||
{
|
||||
//create a new map
|
||||
//leave the seed out for a random seed
|
||||
//params is an object that contains custom parameters as defined in defaultGenerator
|
||||
//example : MyMap=new DungeonGen.Map(30,30,MySeed,{waterRatio:0.8}); (80 percent of the rooms will contain water)
|
||||
if (undefined!=seed) this.seed=seed; else {Math.seedrandom();this.seed=Math.random();}
|
||||
Math.seedrandom(this.seed);
|
||||
this.seedState=Math.random;
|
||||
this.w=w||20;
|
||||
this.h=h||20;
|
||||
|
||||
this.roomsAreHidden=0;
|
||||
|
||||
this.rooms=[];
|
||||
this.freeWalls=[];//all walls that would be a good spot for a door
|
||||
this.freeTiles=[];//all passable floor tiles
|
||||
this.doors=[];
|
||||
this.tiles=this.w*this.h;
|
||||
this.tilesDug=0;
|
||||
this.digs=0;//amount of digging steps
|
||||
this.stuck=0;//how many times we ran into a problem; stop digging if we get too many of these
|
||||
|
||||
this.data=[];//fill the map with 0
|
||||
for (var x=0;x<this.w;x++)
|
||||
{
|
||||
this.data[x]=[];
|
||||
for (var y=0;y<this.h;y++)
|
||||
{
|
||||
this.data[x][y]=[TILE_EMPTY,-1,0];//data is stored as [tile system type,room id,tile displayed type] (-1 is no room)
|
||||
if (x==0 || y==0 || x==this.w-1 || y==this.h-1) this.data[x][y]=[TILE_LIMIT,-1,0];
|
||||
}
|
||||
}
|
||||
|
||||
defaultGenerator(this);
|
||||
if (params)
|
||||
{
|
||||
for (var i in params)
|
||||
{
|
||||
this[i]=params[i];
|
||||
}
|
||||
}
|
||||
Math.seedrandom();
|
||||
|
||||
}
|
||||
|
||||
this.Map.prototype.getType=function(x,y){return this.data[x][y][0];}
|
||||
this.Map.prototype.getRoom=function(x,y){if (this.data[x][y][1]!=-1) return this.rooms[this.data[x][y][1]]; else return -1;}
|
||||
this.Map.prototype.getTile=function(x,y){return this.rooms[this.data[x][y][2]];}
|
||||
|
||||
this.Map.prototype.isWall=function(x,y)
|
||||
{
|
||||
var n=0;
|
||||
for (var i in this.freeWalls){if (this.freeWalls[i][0]==x && this.freeWalls[i][1]==y) return n; else n++;}
|
||||
return -1;
|
||||
}
|
||||
this.Map.prototype.isFloor=function(x,y)
|
||||
{
|
||||
var n=0;
|
||||
for (var i in this.freeTiles){if (this.freeTiles[i][0]==x && this.freeTiles[i][1]==y) return n; else n++;}
|
||||
return -1;
|
||||
}
|
||||
this.Map.prototype.removeFreeTile=function(x,y)
|
||||
{
|
||||
this.freeTiles.splice(this.isFloor(x,y),1);
|
||||
}
|
||||
|
||||
this.Map.prototype.fill=function(what)
|
||||
{
|
||||
//fill with something (either a set value, or a function that takes the map, a position X and a position Y as arguments)
|
||||
//NOTE : this also resets the rooms!
|
||||
//example : MyMap.fill(function(m,x,y){return Math.floor((Math.random());});
|
||||
//...will fill the map with 0s and 1s
|
||||
var func=0;
|
||||
if (typeof(what)=='function') func=1;
|
||||
for (var x=0;x<this.w;x++){for (var y=0;y<this.h;y++){
|
||||
if (func) this.data[x][y]=[what(this,x,y),-1,0]; else this.data[x][y]=[what,-1,0];
|
||||
}}
|
||||
this.rooms=[];
|
||||
}
|
||||
|
||||
this.Map.prototype.fillZone=function(X,Y,W,H,what)
|
||||
{
|
||||
//just plain fill a rectangle
|
||||
for (var x=X;x<X+W;x++){for (var y=Y;y<Y+H;y++){
|
||||
this.data[x][y][0]=what;
|
||||
}}
|
||||
}
|
||||
|
||||
this.Map.prototype.getRoomTile=function(room,x,y)
|
||||
{
|
||||
var n=0;
|
||||
for (var i in room.tiles) {if (room.tiles[i].x==x && room.tiles[i].y==y) return n; else n++;}
|
||||
return -1;
|
||||
}
|
||||
|
||||
this.Map.prototype.getFloorTileInRoom=function(room)
|
||||
{
|
||||
var tiles=[];
|
||||
for (var i in room.tiles) {if (room.tiles[i].type==TILE_FLOOR_EDGE || room.tiles[i].type==TILE_FLOOR_CENTER) tiles.push(room.tiles[i]);}
|
||||
return choose(tiles);
|
||||
}
|
||||
|
||||
this.Map.prototype.canPlaceRoom=function(rx,ry,rw,rh)
|
||||
{
|
||||
if (rx<2 || ry<2 || rx+rw>=this.w-1 || ry+rh>=this.h-1) return false;
|
||||
for (var x=rx;x<rx+rw;x++)
|
||||
{
|
||||
for (var y=ry;y<ry+rh;y++)
|
||||
{
|
||||
var tile=this.getType(x,y);
|
||||
var room=this.getRoom(x,y);
|
||||
if (tile==TILE_LIMIT) return false;
|
||||
if (room!=-1) return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
this.Map.prototype.setRoomTile=function(room,x,y,tile)
|
||||
{
|
||||
//var mapTile=this.getType(x,y);
|
||||
var oldTile=this.getRoomTile(room,x,y);
|
||||
var oldTileType=oldTile!=-1?room.tiles[oldTile].type:-1;
|
||||
if (oldTile!=-1 && (
|
||||
//(tile!=TILE_FLOOR_EDGE && tile!=TILE_FLOOR_CENTER) ||// && (oldTileType!=TILE_FLOOR_EDGE && oldTileType!=TILE_FLOOR_CENTER)) ||
|
||||
//(tile!=TILE_FLOOR_EDGE && tile!=TILE_FLOOR_CENTER && (oldTileType!=TILE_FLOOR_EDGE && oldTileType!=TILE_FLOOR_CENTER)) ||
|
||||
(tile==TILE_WALL || tile==TILE_WALL_CORNER) ||//don't place a wall over an existing room
|
||||
(tile==TILE_FLOOR_EDGE && oldTileType==TILE_FLOOR_CENTER)//don't place an edge floor over a center floor
|
||||
)) {return false;}
|
||||
else
|
||||
{
|
||||
if (oldTile!=-1) room.tiles.splice(oldTile,1);
|
||||
room.tiles.push({x:x,y:y,type:tile,score:0});
|
||||
if ((tile==TILE_FLOOR_EDGE || tile==TILE_FLOOR_CENTER) && (oldTileType!=TILE_FLOOR_EDGE && oldTileType!=TILE_FLOOR_CENTER)) room.freeTiles++;
|
||||
else if (tile!=TILE_FLOOR_EDGE && tile!=TILE_FLOOR_CENTER && (oldTileType==TILE_FLOOR_EDGE || oldTileType==TILE_FLOOR_CENTER)) room.freeTiles--;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
this.Map.prototype.expandRoom=function(room,rx,ry,rw,rh)
|
||||
{
|
||||
var x=0;var y=0;
|
||||
//floor
|
||||
for (var x=rx;x<rx+rw;x++){for (var y=ry;y<ry+rh;y++){
|
||||
this.setRoomTile(room,x,y,TILE_FLOOR_EDGE);
|
||||
}}
|
||||
for (var x=rx+1;x<rx+rw-1;x++){for (var y=ry+1;y<ry+rh-1;y++){
|
||||
this.setRoomTile(room,x,y,TILE_FLOOR_CENTER);
|
||||
}}
|
||||
//walls
|
||||
y=ry-1;
|
||||
for (var x=rx;x<rx+rw;x++){
|
||||
this.setRoomTile(room,x,y,TILE_WALL);
|
||||
}
|
||||
y=ry+rh;
|
||||
for (var x=rx;x<rx+rw;x++){
|
||||
this.setRoomTile(room,x,y,TILE_WALL);
|
||||
}
|
||||
x=rx-1;
|
||||
for (var y=ry;y<ry+rh;y++){
|
||||
this.setRoomTile(room,x,y,TILE_WALL);
|
||||
}
|
||||
x=rx+rw;
|
||||
for (var y=ry;y<ry+rh;y++){
|
||||
this.setRoomTile(room,x,y,TILE_WALL);
|
||||
}
|
||||
//corners
|
||||
x=rx-1;y=ry-1;
|
||||
this.setRoomTile(room,x,y,TILE_WALL_CORNER);
|
||||
x=rx+rw;y=ry-1;
|
||||
this.setRoomTile(room,x,y,TILE_WALL_CORNER);
|
||||
x=rx-1;y=ry+rh;
|
||||
this.setRoomTile(room,x,y,TILE_WALL_CORNER);
|
||||
x=rx+rw;y=ry+rh;
|
||||
this.setRoomTile(room,x,y,TILE_WALL_CORNER);
|
||||
|
||||
//decoration
|
||||
var water=Math.random()<this.waterRatio?1:0;
|
||||
var pattern=Math.random()<this.pillarRatio?getRandomPattern():0;
|
||||
for (var x=rx;x<rx+rw;x++){for (var y=ry;y<ry+rh;y++){
|
||||
if (room.tiles[this.getRoomTile(room,x,y)].type==TILE_FLOOR_CENTER)
|
||||
{
|
||||
var tile=0;
|
||||
if (water!=0) tile=TILE_WATER;
|
||||
if (pattern!=0)
|
||||
{
|
||||
tile=pattern.func(x,y,room)||tile;
|
||||
}
|
||||
if (tile!=0) this.setRoomTile(room,x,y,tile);
|
||||
}
|
||||
}}
|
||||
}
|
||||
|
||||
this.Map.prototype.newRoom=function(x,y,w,h,parent)
|
||||
{
|
||||
//create a new abstract room, ready to be carved
|
||||
var room={};
|
||||
room.id=this.rooms.length;
|
||||
room.w=w;//||rand(2,this.roomSize);
|
||||
room.h=h;//||rand(2,this.roomSize);
|
||||
room.x=x||rand(1,this.w-room.w-1);
|
||||
room.y=y||rand(1,this.h-room.h-1);
|
||||
room.tiles=[];
|
||||
room.freeTiles=0;
|
||||
room.parent=parent?parent:-1;
|
||||
room.children=[];
|
||||
room.gen=0;
|
||||
room.door=0;
|
||||
room.corridor=Math.random()<this.corridorRatio?1:0;
|
||||
room.hidden=this.roomsAreHidden;//if 1, don't draw
|
||||
//if (room.parent!=-1) room.corridor=!room.parent.corridor;//alternate rooms and corridors
|
||||
|
||||
return room;
|
||||
}
|
||||
this.Map.prototype.planRoom=function(room)
|
||||
{
|
||||
var branches=this.branching+1;
|
||||
var forcedExpansions=[];
|
||||
var w=room.w;
|
||||
var h=room.h;
|
||||
while (w>0 && h>0)
|
||||
{
|
||||
if (w>0) {forcedExpansions.push(1,3);w--;}
|
||||
if (h>0) {forcedExpansions.push(2,4);h--;}
|
||||
}
|
||||
|
||||
for (var i=0;i<branches;i++)
|
||||
{
|
||||
var steps=0;
|
||||
var expansions=[];
|
||||
if (!room.corridor)
|
||||
{
|
||||
expansions=[1,2,3,4];
|
||||
steps=this.roomSize;
|
||||
}
|
||||
else
|
||||
{
|
||||
expansions=choose([[1,3],[2,4]]);
|
||||
steps=this.corridorSize;
|
||||
}
|
||||
steps=Math.max(room.w+room.h,Math.ceil(steps*(1-Math.random()*this.sizeVariance)));
|
||||
if (room.tiles.length==0) {var rx=room.x;var ry=room.y;var rw=1;var rh=1;}
|
||||
else {var randomTile=this.getFloorTileInRoom(room);var rx=randomTile.x;var ry=randomTile.y;var rw=1;var rh=1;}
|
||||
for (var ii=0;ii<steps;ii++)
|
||||
{
|
||||
if (expansions.length==0) break;
|
||||
var xd=0;var yd=0;var wd=0;var hd=0;
|
||||
var side=choose(expansions);
|
||||
if (forcedExpansions.length>0) side=forcedExpansions[0];
|
||||
if (side==1) {xd=-1;wd=1;}
|
||||
else if (side==2) {yd=-1;hd=1;}
|
||||
else if (side==3) {wd=1;}
|
||||
else if (side==4) {hd=1;}
|
||||
if (this.canPlaceRoom(rx+xd,ry+yd,rw+wd,rh+hd)) {rx+=xd;ry+=yd;rw+=wd;rh+=hd;} else expansions.splice(expansions.indexOf(side),1);
|
||||
if (forcedExpansions.length>0) forcedExpansions.splice(0,1);
|
||||
}
|
||||
if (rw>1 || rh>1)
|
||||
{
|
||||
this.expandRoom(room,rx,ry,rw,rh);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.Map.prototype.carve=function(room)
|
||||
{
|
||||
//carve a room into the map
|
||||
for (var i in room.tiles)
|
||||
{
|
||||
var thisTile=room.tiles[i];
|
||||
var x=thisTile.x;var y=thisTile.y;
|
||||
var myType=this.data[x][y][0];
|
||||
var type=thisTile.type;
|
||||
|
||||
if ((type==TILE_WALL || type==TILE_WALL_CORNER) && this.isWall(x,y)!=-1) {this.freeWalls.splice(this.isWall(x,y),1);}
|
||||
|
||||
if (this.data[x][y][1]!=-1 && (type==TILE_WALL || type==TILE_WALL_CORNER)) {}
|
||||
else
|
||||
{
|
||||
if (this.data[x][y][1]==-1) this.tilesDug++;
|
||||
this.data[x][y]=[thisTile.type,room.id,0];
|
||||
if (x>1 && y>1 && x<this.w-2 && y<this.h-2 && type==TILE_WALL) this.freeWalls.push([x,y]);
|
||||
if (type==TILE_FLOOR_EDGE || type==TILE_FLOOR_CENTER) this.freeTiles.push([x,y]);
|
||||
}
|
||||
var pos=[x,y];
|
||||
}
|
||||
this.rooms[room.id]=room;
|
||||
}
|
||||
|
||||
this.Map.prototype.newRandomRoom=function(params)
|
||||
{
|
||||
var success=1;
|
||||
params=params||{};//params is an object such as {corridor:1}
|
||||
var door=choose(this.freeWalls);//select a free wall to use as a door
|
||||
if (!door) {success=0;}
|
||||
else
|
||||
{
|
||||
//this.data[door[0]][door[1]][0]=TILE_LIMIT;//not door
|
||||
var parentRoom=this.getRoom(door[0],door[1]);
|
||||
var sides=[];//select a free side of that door
|
||||
if (this.getType(door[0]-1,door[1])==TILE_EMPTY) sides.push([-1,0]);
|
||||
if (this.getType(door[0]+1,door[1])==TILE_EMPTY) sides.push([1,0]);
|
||||
if (this.getType(door[0],door[1]-1)==TILE_EMPTY) sides.push([0,-1]);
|
||||
if (this.getType(door[0],door[1]+1)==TILE_EMPTY) sides.push([0,1]);
|
||||
var side=choose(sides);
|
||||
if (!side) {success=0;this.freeWalls.splice(this.isWall(door[0],door[1]),1);}
|
||||
else
|
||||
{
|
||||
var room=this.newRoom(door[0]+side[0],door[1]+side[1],0,0,parentRoom);//try a new room from this spot
|
||||
for (var i in params)
|
||||
{
|
||||
room[i]=params[i];
|
||||
}
|
||||
this.planRoom(room);
|
||||
if (room.tiles.length>0 && room.freeTiles>0)//we got a decent room
|
||||
{
|
||||
this.carve(room);
|
||||
this.data[door[0]][door[1]][0]=TILE_DOOR;//place door
|
||||
room.door=[door[0],door[1]];
|
||||
this.data[door[0]][door[1]][1]=room.id;//set ID
|
||||
this.freeWalls.splice(this.isWall(door[0],door[1]),1);//the door isn't a wall anymore
|
||||
this.doors.push([door[0],door[1],room]);
|
||||
//remove free tiles on either side of the door
|
||||
if (this.isFloor(door[0]+side[0],door[1]+side[1])!=-1) this.removeFreeTile(door[0]+side[0],door[1]+side[1]);
|
||||
if (this.isFloor(door[0]-side[0],door[1]-side[1])!=-1) this.removeFreeTile(door[0]-side[0],door[1]-side[1]);
|
||||
room.parent=parentRoom;
|
||||
parentRoom.children.push(room);
|
||||
room.gen=parentRoom.gen+1;
|
||||
}
|
||||
else//not a good spot; remove this tile from the list of walls
|
||||
{
|
||||
this.freeWalls.splice(this.isWall(door[0],door[1]),1);
|
||||
success=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (success) return room;
|
||||
else return 0;
|
||||
}
|
||||
|
||||
this.Map.prototype.getRandomSpotInRoom=function(room)
|
||||
{
|
||||
var listOfTiles=[];
|
||||
for (var i in room.tiles)
|
||||
{
|
||||
if ((room.tiles[i].type==TILE_FLOOR_EDGE || room.tiles[i].type==TILE_FLOOR_CENTER) && this.isFloor(room.tiles[i].x,room.tiles[i].y)!=-1)
|
||||
{
|
||||
listOfTiles.push(room.tiles[i]);
|
||||
}
|
||||
}
|
||||
if (listOfTiles.length==0) return -1;
|
||||
return choose(listOfTiles);
|
||||
}
|
||||
this.Map.prototype.getBestSpotInRoom=function(room)
|
||||
{
|
||||
var highest=-1;
|
||||
var listOfHighest=[];
|
||||
for (var i in room.tiles)
|
||||
{
|
||||
if ((room.tiles[i].type==TILE_FLOOR_EDGE || room.tiles[i].type==TILE_FLOOR_CENTER) && this.isFloor(room.tiles[i].x,room.tiles[i].y)!=-1)
|
||||
{
|
||||
if (room.tiles[i].score>highest)
|
||||
{
|
||||
listOfHighest=[];
|
||||
highest=room.tiles[i].score;
|
||||
listOfHighest.push(room.tiles[i]);
|
||||
}
|
||||
else if (room.tiles[i].score==highest)
|
||||
{
|
||||
listOfHighest.push(room.tiles[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (listOfHighest.length==0) return -1;
|
||||
return choose(listOfHighest);
|
||||
}
|
||||
this.Map.prototype.getEarliestRoom=function()
|
||||
{
|
||||
return this.rooms[0];
|
||||
}
|
||||
this.Map.prototype.getDeepestRoom=function()
|
||||
{
|
||||
var deepest=0;
|
||||
var deepestRoom=this.rooms[0];
|
||||
for (var i in this.rooms)
|
||||
{
|
||||
if ((this.rooms[i].gen+Math.sqrt(this.rooms[i].freeTiles)*0.05)>=deepest && this.rooms[i].corridor==0 && this.rooms[i].freeTiles>4) {deepest=(this.rooms[i].gen+Math.sqrt(this.rooms[i].freeTiles)*0.05);deepestRoom=this.rooms[i];}
|
||||
}
|
||||
return deepestRoom;
|
||||
}
|
||||
|
||||
this.Map.prototype.dig=function()
|
||||
{
|
||||
//one step in which we try to carve new stuff
|
||||
//returns 0 when we couldn't dig this step, 1 when we could, and 2 when the digging is complete
|
||||
Math.random=this.seedState;
|
||||
|
||||
var badDig=0;
|
||||
|
||||
if (this.digs==0)//first dig : build a starting room in the middle of the map
|
||||
{
|
||||
var w=rand(3,7);
|
||||
var h=rand(3,7);
|
||||
var room=this.newRoom(Math.floor(this.w/2-w/2),Math.floor(this.h/2-h/2),w,h);
|
||||
room.corridor=0;
|
||||
this.planRoom(room);
|
||||
this.carve(room);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this.newRandomRoom()==0) badDig++;
|
||||
}
|
||||
if (badDig>0) this.stuck++;
|
||||
|
||||
this.digs++;
|
||||
|
||||
var finished=0;
|
||||
if (this.tilesDug>=this.tiles*this.fillRatio) finished=1;
|
||||
if (this.stuck>100) finished=1;
|
||||
|
||||
if (finished==1)//last touch : try to add a whole room at the end
|
||||
{
|
||||
for (var i=0;i<10;i++)
|
||||
{
|
||||
var newRoom=this.newRandomRoom({corridor:0,w:rand(3,7),h:rand(3,7)});
|
||||
if (newRoom!=0 && newRoom.freeTiles>15) break;
|
||||
}
|
||||
}
|
||||
|
||||
Math.seedrandom();
|
||||
if (finished==1) return 1; else if (badDig>0) return -1; else return 0;
|
||||
}
|
||||
|
||||
this.Map.prototype.finish=function()
|
||||
{
|
||||
//touch up the map : add pillars in corners etc
|
||||
/*
|
||||
//set paths
|
||||
for (var i in this.rooms)
|
||||
{
|
||||
var me=this.rooms[i];
|
||||
if (me.door!=0)
|
||||
{
|
||||
var doors=[];
|
||||
doors.push(me.door);
|
||||
for (var ii in me.children)
|
||||
{
|
||||
if (me.children[ii].door!=0) doors.push(me.children[ii].door);
|
||||
}
|
||||
for (var ii in doors)
|
||||
{
|
||||
this.data[doors[ii][0]][doors[ii][1]][0]=TILE_LIMIT;
|
||||
//ideally we should run agents that step from each door to the next
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
for (var i in this.rooms)
|
||||
{
|
||||
var pillars=Math.random()<this.pillarRatio;
|
||||
for (var ii in this.rooms[i].tiles)
|
||||
{
|
||||
var x=this.rooms[i].tiles[ii].x;
|
||||
var y=this.rooms[i].tiles[ii].y;
|
||||
var me=this.data[x][y][0];
|
||||
var x1=this.data[x-1][y][0];
|
||||
var x2=this.data[x+1][y][0];
|
||||
var y1=this.data[x][y-1][0];
|
||||
var y2=this.data[x][y+1][0];
|
||||
var xy1=this.data[x-1][y-1][0];
|
||||
var xy2=this.data[x+1][y-1][0];
|
||||
var xy3=this.data[x-1][y+1][0];
|
||||
var xy4=this.data[x+1][y+1][0];
|
||||
|
||||
var walls=0;
|
||||
if ((x1==TILE_WALL||x1==TILE_WALL_CORNER)) walls++;
|
||||
if ((y1==TILE_WALL||y1==TILE_WALL_CORNER)) walls++;
|
||||
if ((x2==TILE_WALL||x2==TILE_WALL_CORNER)) walls++;
|
||||
if ((y2==TILE_WALL||y2==TILE_WALL_CORNER)) walls++;
|
||||
if ((xy1==TILE_WALL||xy1==TILE_WALL_CORNER)) walls++;
|
||||
if ((xy2==TILE_WALL||xy2==TILE_WALL_CORNER)) walls++;
|
||||
if ((xy3==TILE_WALL||xy3==TILE_WALL_CORNER)) walls++;
|
||||
if ((xy4==TILE_WALL||xy4==TILE_WALL_CORNER)) walls++;
|
||||
|
||||
var floors=0;
|
||||
if ((x1==TILE_FLOOR_CENTER||x1==TILE_FLOOR_EDGE)) floors++;
|
||||
if ((y1==TILE_FLOOR_CENTER||y1==TILE_FLOOR_EDGE)) floors++;
|
||||
if ((x2==TILE_FLOOR_CENTER||x2==TILE_FLOOR_EDGE)) floors++;
|
||||
if ((y2==TILE_FLOOR_CENTER||y2==TILE_FLOOR_EDGE)) floors++;
|
||||
if ((xy1==TILE_FLOOR_CENTER||xy1==TILE_FLOOR_EDGE)) floors++;
|
||||
if ((xy2==TILE_FLOOR_CENTER||xy2==TILE_FLOOR_EDGE)) floors++;
|
||||
if ((xy3==TILE_FLOOR_CENTER||xy3==TILE_FLOOR_EDGE)) floors++;
|
||||
if ((xy4==TILE_FLOOR_CENTER||xy4==TILE_FLOOR_EDGE)) floors++;
|
||||
|
||||
var complete=0;
|
||||
if (walls+floors==8) complete=1;
|
||||
|
||||
var angle=0;
|
||||
if (complete)
|
||||
{
|
||||
var top=0;
|
||||
var left=0;
|
||||
var right=0;
|
||||
var bottom=0;
|
||||
if ((xy1==TILE_WALL||xy1==TILE_WALL_CORNER) && (y1==TILE_WALL||y1==TILE_WALL_CORNER) && (xy2==TILE_WALL||xy2==TILE_WALL_CORNER)) top=1;
|
||||
else if ((xy1==TILE_FLOOR_CENTER||xy1==TILE_FLOOR_EDGE) && (y1==TILE_FLOOR_CENTER||y1==TILE_FLOOR_EDGE) && (xy2==TILE_FLOOR_CENTER||xy2==TILE_FLOOR_EDGE)) top=-1;
|
||||
if ((xy2==TILE_WALL||xy2==TILE_WALL_CORNER) && (x2==TILE_WALL||x2==TILE_WALL_CORNER) && (xy4==TILE_WALL||xy4==TILE_WALL_CORNER)) right=1;
|
||||
else if ((xy2==TILE_FLOOR_CENTER||xy2==TILE_FLOOR_EDGE) && (x2==TILE_FLOOR_CENTER||x2==TILE_FLOOR_EDGE) && (xy4==TILE_FLOOR_CENTER||xy4==TILE_FLOOR_EDGE)) right=-1;
|
||||
if ((xy1==TILE_WALL||xy1==TILE_WALL_CORNER) && (x1==TILE_WALL||x1==TILE_WALL_CORNER) && (xy3==TILE_WALL||xy3==TILE_WALL_CORNER)) left=1;
|
||||
else if ((xy1==TILE_FLOOR_CENTER||xy1==TILE_FLOOR_EDGE) && (x1==TILE_FLOOR_CENTER||x1==TILE_FLOOR_EDGE) && (xy3==TILE_FLOOR_CENTER||xy3==TILE_FLOOR_EDGE)) left=-1;
|
||||
if ((xy3==TILE_WALL||xy3==TILE_WALL_CORNER) && (y2==TILE_WALL||y2==TILE_WALL_CORNER) && (xy4==TILE_WALL||xy4==TILE_WALL_CORNER)) bottom=1;
|
||||
else if ((xy3==TILE_FLOOR_CENTER||xy3==TILE_FLOOR_EDGE) && (y2==TILE_FLOOR_CENTER||y2==TILE_FLOOR_EDGE) && (xy4==TILE_FLOOR_CENTER||xy4==TILE_FLOOR_EDGE)) bottom=-1;
|
||||
if ((top==1 && bottom==-1) || (top==-1 && bottom==1) || (left==1 && right==-1) || (left==-1 && right==1)) angle=1;
|
||||
}
|
||||
|
||||
if (pillars && Math.random()<0.8 && this.rooms[i].freeTiles>4)
|
||||
{
|
||||
if ((angle==1 || (complete && walls==7)) && me==TILE_FLOOR_EDGE && x1!=TILE_DOOR && x2!=TILE_DOOR && y1!=TILE_DOOR && y2!=TILE_DOOR)
|
||||
{
|
||||
this.data[x][y][0]=TILE_PILLAR;
|
||||
me=TILE_PILLAR;
|
||||
this.removeFreeTile(x,y);
|
||||
this.rooms[i].freeTiles--;
|
||||
}
|
||||
}
|
||||
|
||||
//calculate score (for placing items and exits)
|
||||
if (top==1 || bottom==1 || left==1 || right==1)
|
||||
{
|
||||
this.rooms[i].tiles[ii].score+=2;
|
||||
}
|
||||
if (walls>5 || floors>5)
|
||||
{
|
||||
this.rooms[i].tiles[ii].score+=1;
|
||||
}
|
||||
if (walls==7 || floors==8)
|
||||
{
|
||||
this.rooms[i].tiles[ii].score+=5;
|
||||
}
|
||||
if ((me!=TILE_FLOOR_CENTER && me!=TILE_FLOOR_EDGE) || x1==TILE_DOOR || x2==TILE_DOOR || y1==TILE_DOOR || y2==TILE_DOOR) this.rooms[i].tiles[ii].score=-1;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//carve entrance and exit
|
||||
var entrance=this.getBestSpotInRoom(this.getEarliestRoom());
|
||||
this.data[entrance.x][entrance.y][0]=TILE_ENTRANCE;
|
||||
this.entrance=[entrance.x,entrance.y];
|
||||
entrance.score=0;
|
||||
this.removeFreeTile(entrance.x,entrance.y);
|
||||
var exit=this.getBestSpotInRoom(this.getDeepestRoom());
|
||||
this.data[exit.x][exit.y][0]=TILE_EXIT;
|
||||
this.exit=[exit.x,exit.y];
|
||||
this.removeFreeTile(exit.x,exit.y);
|
||||
exit.score=0;
|
||||
|
||||
/*
|
||||
for (var i in this.doors)//remove door tiles (to add later; replace the tiles by entities that delete themselves when opened)
|
||||
{
|
||||
this.data[this.doors[i][0]][this.doors[i][1]][0]=TILE_FLOOR_EDGE;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
this.Map.prototype.isObstacle=function(x,y)
|
||||
{
|
||||
var free=[TILE_FLOOR_EDGE,TILE_FLOOR_CENTER,TILE_DOOR,TILE_ENTRANCE,TILE_EXIT];
|
||||
for (var i in free)
|
||||
{
|
||||
if (this.data[x][y][0]==free[i]) return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
var joinTile=function(map,x,y,joinWith)
|
||||
{
|
||||
//for the tile at x,y, return 2 if it joins with its horizontal neighbors, 3 if it joins with its vertical neighbors, 1 if it joins with either both or neither.
|
||||
//joinWith contains the tile types that count as joinable, in addition to this tile. (don't add the tested tile to joinWith!)
|
||||
var p=1;
|
||||
var me=map.data[x][y][0];
|
||||
var x1=map.data[x-1][y][0];
|
||||
var x2=map.data[x+1][y][0];
|
||||
var y1=map.data[x][y-1][0];
|
||||
var y2=map.data[x][y+1][0];
|
||||
joinWith.push(me);
|
||||
var joinsX=0;
|
||||
for (var i in joinWith)
|
||||
{
|
||||
if (x1==joinWith[i]) joinsX++;
|
||||
if (x2==joinWith[i]) joinsX++;
|
||||
}
|
||||
var joinsY=0;
|
||||
for (var i in joinWith)
|
||||
{
|
||||
if (y1==joinWith[i]) joinsY++;
|
||||
if (y2==joinWith[i]) joinsY++;
|
||||
}
|
||||
if (joinsX==2 && joinsY==2) p=1;
|
||||
else if (joinsX==2) p=2;
|
||||
else if (joinsY==2) p=3;
|
||||
return p;
|
||||
}
|
||||
this.Map.prototype.getPic=function(x,y)
|
||||
{
|
||||
//return a position [x,y] in the tiles (as 0, 1, 2...) for the tile on the map at position x,y
|
||||
if (Tiles[this.data[x][y][2]])
|
||||
{
|
||||
if (Tiles[this.data[x][y][2]].joinType=='join')
|
||||
{
|
||||
var thisPic=Tiles[this.data[x][y][2]].pic;
|
||||
thisPic=[thisPic[0],thisPic[1]];//why is this even necessary?
|
||||
var joinWith=[];
|
||||
if (this.data[x][y][0]==TILE_WALL) joinWith.push(TILE_WALL_CORNER);
|
||||
else if (this.data[x][y][0]==TILE_DOOR) joinWith.push(TILE_WALL,TILE_WALL_CORNER);
|
||||
thisPic[0]+=joinTile(this,x,y,joinWith)-1;
|
||||
return thisPic;
|
||||
}
|
||||
else if (Tiles[this.data[x][y][2]].joinType=='random3')
|
||||
{
|
||||
var thisPic=Tiles[this.data[x][y][2]].pic;
|
||||
thisPic=[thisPic[0],thisPic[1]];
|
||||
thisPic[0]+=Math.floor(Math.random()*3);
|
||||
return thisPic;
|
||||
}
|
||||
return Tiles[this.data[x][y][2]].pic;
|
||||
}
|
||||
return [0,0];
|
||||
}
|
||||
|
||||
var Tiles=[];
|
||||
var TilesByName=[];
|
||||
this.Tile=function(name,pic,joinType)
|
||||
{
|
||||
this.name=name;
|
||||
this.pic=pic;
|
||||
this.joinType=joinType||'none';
|
||||
this.id=Tiles.length;
|
||||
Tiles[this.id]=this;
|
||||
TilesByName[this.name]=this;
|
||||
}
|
||||
new this.Tile('void',[0,0]);
|
||||
this.loadTiles=function(tiles)
|
||||
{
|
||||
for (var i in tiles)
|
||||
{
|
||||
var name=tiles[i][0];
|
||||
var pic=tiles[i][1];
|
||||
var joinType=tiles[i][2];
|
||||
new this.Tile(name,pic,joinType);
|
||||
}
|
||||
}
|
||||
|
||||
var computeTile=function(tile,tiles,value,name)
|
||||
{
|
||||
if (tile==value && tiles[name]) return TilesByName[tiles[name]];
|
||||
return 0;
|
||||
}
|
||||
this.Map.prototype.assignTiles=function(room,tiles)
|
||||
{
|
||||
//set the displayed tiles for this room
|
||||
for (var i in room.tiles)
|
||||
{
|
||||
var type=Tiles[0];
|
||||
var me=room.tiles[i];
|
||||
var tile=this.data[me.x][me.y][0];
|
||||
type=computeTile(tile,tiles,TILE_WALL_CORNER,'wall corner')||type;
|
||||
type=computeTile(tile,tiles,TILE_WALL,'wall')||type;
|
||||
type=computeTile(tile,tiles,TILE_FLOOR_EDGE,'floor edges')||type;
|
||||
type=computeTile(tile,tiles,TILE_FLOOR_CENTER,'floor')||type;
|
||||
type=computeTile(tile,tiles,TILE_PILLAR,'pillar')||type;
|
||||
type=computeTile(tile,tiles,TILE_DOOR,'door')||type;
|
||||
type=computeTile(tile,tiles,TILE_WATER,'water')||type;
|
||||
type=computeTile(tile,tiles,TILE_ENTRANCE,'entrance')||type;
|
||||
type=computeTile(tile,tiles,TILE_EXIT,'exit')||type;
|
||||
|
||||
this.data[me.x][me.y][2]=type.id;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.Map.prototype.draw=function(size)
|
||||
{
|
||||
//return a string containing a rough visual representation of the map
|
||||
var str='';
|
||||
var size=size||10;
|
||||
for (var y=0;y<this.h;y++){for (var x=0;x<this.w;x++){
|
||||
var text='';
|
||||
if (this.isFloor(x,y)!=-1) text='o';
|
||||
if (this.isWall(x,y)!=-1) text+='x';
|
||||
var room=this.getRoom(x,y);
|
||||
var opacity=Math.max(0.1,1-(this.getRoom(x,y).gen/10));
|
||||
var title=room.freeTiles;//this.data[x][y][0].toString();
|
||||
text='';
|
||||
str+='<div style="opacity:'+opacity+';width:'+size+'px;height:'+size+'px;position:absolute;left:'+(x*size)+'px;top:'+(y*size)+'px;display:block;padding:0px;margin:0px;background:#'+colors[this.data[x][y][0]]+';color:#999;" title="'+title+'">'+text+'</div>';
|
||||
}
|
||||
str+='<br>';
|
||||
}
|
||||
str='<div style="position:relative;width:'+(this.w*size)+'px;height:'+(this.h*size)+'px;background:#000;font-family:Courier;font-size:'+size+'px;float:left;margin:10px;">'+str+'</div>';
|
||||
return str;
|
||||
}
|
||||
|
||||
this.Map.prototype.drawDetailed=function()
|
||||
{
|
||||
//return a string containing a rough visual representation of the map (with graphics)
|
||||
var str='';
|
||||
var size=16;
|
||||
for (var y=0;y<this.h;y++){for (var x=0;x<this.w;x++){
|
||||
var room=this.getRoom(x,y);
|
||||
//var opacity=Math.max(0.1,room.tiles[this.getRoomTile(room,x,y)].score);
|
||||
var opacity=1;
|
||||
var title='void';
|
||||
if (room!=-1)
|
||||
{
|
||||
opacity=Math.max(0.1,1-room.gen/5);
|
||||
if (this.data[x][y][0]==TILE_ENTRANCE || this.data[x][y][0]==TILE_EXIT) opacity=1;
|
||||
title=(room.corridor?'corridor':'room')+' '+room.id+' | depth : '+room.gen+' | children : '+room.children.length;
|
||||
}
|
||||
var pic=this.getPic(x,y);
|
||||
str+='<div style="opacity:'+opacity+';width:'+size+'px;height:'+size+'px;position:absolute;left:'+(x*size)+'px;top:'+(y*size)+'px;display:block;padding:0px;margin:0px;background:#'+colors[this.data[x][y][0]]+' url(img/dungeonTiles.png) '+(-pic[0]*16)+'px '+(-pic[1]*16)+'px;color:#999;" title="'+title+'"></div>';
|
||||
}
|
||||
str+='<br>';
|
||||
}
|
||||
str='<div style="box-shadow:0px 0px 12px 6px #00061b;position:relative;width:'+(this.w*size)+'px;height:'+(this.h*size)+'px;background:#00061b;font-family:Courier;font-size:'+size+'px;float:left;margin:10px;">'+str+'</div>';
|
||||
return str;
|
||||
}
|
||||
|
||||
this.Map.prototype.getStr=function()
|
||||
{
|
||||
//return a string containing the map with tile graphics, ready to be pasted in a wrapper
|
||||
var str='';
|
||||
var size=16;
|
||||
for (var y=0;y<this.h;y++){for (var x=0;x<this.w;x++){
|
||||
var room=this.getRoom(x,y);
|
||||
//var opacity=Math.max(0.1,room.tiles[this.getRoomTile(room,x,y)].score);
|
||||
var opacity=1;
|
||||
var title='void';
|
||||
var pic=this.getPic(x,y);
|
||||
if (room!=-1)
|
||||
{
|
||||
/*
|
||||
opacity=Math.max(0.1,1-room.gen/5);
|
||||
if (room.hidden) opacity=0;
|
||||
if (this.data[x][y][0]==TILE_ENTRANCE || this.data[x][y][0]==TILE_EXIT) opacity=1;
|
||||
*/
|
||||
if (room.hidden) pic=[0,0];
|
||||
title=(room.corridor?'corridor':'room')+' '+room.id+' | depth : '+room.gen+' | children : '+room.children.length;
|
||||
}
|
||||
str+='<div style="opacity:'+opacity+';width:'+size+'px;height:'+size+'px;position:absolute;left:'+(x*size)+'px;top:'+(y*size)+'px;display:block;padding:0px;margin:0px;background:#'+colors[this.data[x][y][0]]+' url(img/dungeonTiles.png) '+(-pic[0]*16)+'px '+(-pic[1]*16)+'px;color:#999;" title="'+title+'"></div>';
|
||||
}
|
||||
str+='<br>';
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,54 +0,0 @@
|
|||
# cookieclicker
|
||||
|
||||
<img src="img/perfectCookie.png" width="128">
|
||||
|
||||
The original game can be found at http://orteil.dashnet.org/cookieclicker/
|
||||
|
||||
This mirror for, errrr, like, educational purpose, either to download for your own offline education or to be played online from http://ozh.github.io/cookieclicker/ if you cannot "educate" yourself on the original URL
|
||||
|
||||
### How to update
|
||||
|
||||
If the original game updates, here is how you can update the mirror:
|
||||
|
||||
#### 1. Fetch all new images :
|
||||
|
||||
From the root,
|
||||
|
||||
* `cd img/`
|
||||
* `wget --convert-links -O index.html http://orteil.dashnet.org/cookieclicker/img/`
|
||||
* `grep -v PARENTDIR index.html | grep '\[IMG' | grep -Po 'a href="\K.*?(?=")' | sed 's/\?.*//' > _imglist.txt`
|
||||
* `wget -N -i _imglist.txt -B http://orteil.dashnet.org/cookieclicker/img/`
|
||||
|
||||
#### 2. Fetch all new sounds :
|
||||
|
||||
Similarly, from the root :
|
||||
|
||||
* `cd snd/`
|
||||
* `wget --convert-links -O index.html http://orteil.dashnet.org/cookieclicker/snd/`
|
||||
* `grep -v PARENTDIR index.html | grep '\[SND' | grep -Po 'a href="\K.*?(?=")' | sed 's/\?.*//' > _sndlist.txt`
|
||||
* `wget -N -i _sndlist.txt -B http://orteil.dashnet.org/cookieclicker/snd/`
|
||||
|
||||
#### 3. Fetch all new translations :
|
||||
|
||||
Similarly, from the root :
|
||||
|
||||
* `cd loc/`
|
||||
* `wget --convert-links -O index.html http://orteil.dashnet.org/cookieclicker/loc/`
|
||||
* `grep -v PARENTDIR index.html | grep '\[ ' | grep -Po 'a href="\K.*?(?=")' | sed 's/\?.*//' > _loclist.txt`
|
||||
* `wget -N -i _loclist.txt -B http://orteil.dashnet.org/cookieclicker/loc/`
|
||||
|
||||
#### 4. Update `js` and `html` files :
|
||||
|
||||
From the root directory :
|
||||
|
||||
* Fetch the updated `index.html` file: `wget -O index.html http://orteil.dashnet.org/cookieclicker/`
|
||||
* Fetch the updated `style.css` file: `wget -O style.css http://orteil.dashnet.org/cookieclicker/style.css`
|
||||
* Fetch updated `js` files : `wget -N -i _jslist.txt -B http://orteil.dashnet.org/cookieclicker/`
|
||||
* Scan `index.html` for any new `<script src` and also `main.js` for any new local javascript (eg `Game.last.minigameUrl`). If there are new scripts, update the `_jslist.txt` accordingly.
|
||||
* In `main.js` there is a call to a remote script we need to modify:
|
||||
* Look for `ajax('/patreon/grab.php'` and replace it with `ajax('grab.txt'`
|
||||
* In the root: `wget -O grab.txt http://orteil.dashnet.org/patreon/grab.php`
|
||||
|
||||
#### 5. Report update here :)
|
||||
|
||||
If you happen to update, please make a pull request for others to benefit, thanks!
|
|
@ -1,11 +0,0 @@
|
|||
ajax.js
|
||||
showads.js
|
||||
base64.js
|
||||
DungeonGen.js
|
||||
dungeons.js
|
||||
excanvas.compiled.js
|
||||
main.js
|
||||
minigameGarden.js
|
||||
minigameGrimoire.js
|
||||
minigamePantheon.js
|
||||
minigameMarket.js
|
|
@ -1,6 +0,0 @@
|
|||
function ajax(url,callback){
|
||||
var ajaxRequest;
|
||||
try{ajaxRequest = new XMLHttpRequest();} catch (e){try{ajaxRequest=new ActiveXObject('Msxml2.XMLHTTP');} catch (e) {try{ajaxRequest=new ActiveXObject('Microsoft.XMLHTTP');} catch (e){alert("Something broke!");return false;}}}
|
||||
if (callback){ajaxRequest.onreadystatechange=function(){if(ajaxRequest.readyState==4){callback(ajaxRequest.responseText);}}}
|
||||
ajaxRequest.open('GET',url+'&nocache='+(new Date().getTime()),true);ajaxRequest.send(null);
|
||||
}
|
|
@ -1,142 +0,0 @@
|
|||
/**
|
||||
*
|
||||
* Base64 encode / decode
|
||||
* http://www.webtoolkit.info/
|
||||
*
|
||||
**/
|
||||
|
||||
var Base64 = {
|
||||
|
||||
// private property
|
||||
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
|
||||
|
||||
// public method for encoding
|
||||
encode : function (input) {
|
||||
var output = "";
|
||||
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
|
||||
var i = 0;
|
||||
|
||||
input = Base64._utf8_encode(input);
|
||||
|
||||
while (i < input.length) {
|
||||
|
||||
chr1 = input.charCodeAt(i++);
|
||||
chr2 = input.charCodeAt(i++);
|
||||
chr3 = input.charCodeAt(i++);
|
||||
|
||||
enc1 = chr1 >> 2;
|
||||
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
|
||||
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
|
||||
enc4 = chr3 & 63;
|
||||
|
||||
if (isNaN(chr2)) {
|
||||
enc3 = enc4 = 64;
|
||||
} else if (isNaN(chr3)) {
|
||||
enc4 = 64;
|
||||
}
|
||||
|
||||
output = output +
|
||||
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
|
||||
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
|
||||
|
||||
}
|
||||
|
||||
return output;
|
||||
},
|
||||
|
||||
// public method for decoding
|
||||
decode : function (input) {
|
||||
var output = "";
|
||||
var chr1, chr2, chr3;
|
||||
var enc1, enc2, enc3, enc4;
|
||||
var i = 0;
|
||||
|
||||
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
|
||||
|
||||
while (i < input.length) {
|
||||
|
||||
enc1 = this._keyStr.indexOf(input.charAt(i++));
|
||||
enc2 = this._keyStr.indexOf(input.charAt(i++));
|
||||
enc3 = this._keyStr.indexOf(input.charAt(i++));
|
||||
enc4 = this._keyStr.indexOf(input.charAt(i++));
|
||||
|
||||
chr1 = (enc1 << 2) | (enc2 >> 4);
|
||||
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
||||
chr3 = ((enc3 & 3) << 6) | enc4;
|
||||
|
||||
output = output + String.fromCharCode(chr1);
|
||||
|
||||
if (enc3 != 64) {
|
||||
output = output + String.fromCharCode(chr2);
|
||||
}
|
||||
if (enc4 != 64) {
|
||||
output = output + String.fromCharCode(chr3);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
output = Base64._utf8_decode(output);
|
||||
|
||||
return output;
|
||||
|
||||
},
|
||||
|
||||
// private method for UTF-8 encoding
|
||||
_utf8_encode : function (string) {
|
||||
string = string.replace(/\r\n/g,"\n");
|
||||
var utftext = "";
|
||||
|
||||
for (var n = 0; n < string.length; n++) {
|
||||
|
||||
var c = string.charCodeAt(n);
|
||||
|
||||
if (c < 128) {
|
||||
utftext += String.fromCharCode(c);
|
||||
}
|
||||
else if((c > 127) && (c < 2048)) {
|
||||
utftext += String.fromCharCode((c >> 6) | 192);
|
||||
utftext += String.fromCharCode((c & 63) | 128);
|
||||
}
|
||||
else {
|
||||
utftext += String.fromCharCode((c >> 12) | 224);
|
||||
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
|
||||
utftext += String.fromCharCode((c & 63) | 128);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return utftext;
|
||||
},
|
||||
|
||||
// private method for UTF-8 decoding
|
||||
_utf8_decode : function (utftext) {
|
||||
var string = "";
|
||||
var i = 0;
|
||||
var c = c1 = c2 = 0;
|
||||
|
||||
while ( i < utftext.length ) {
|
||||
|
||||
c = utftext.charCodeAt(i);
|
||||
|
||||
if (c < 128) {
|
||||
string += String.fromCharCode(c);
|
||||
i++;
|
||||
}
|
||||
else if((c > 191) && (c < 224)) {
|
||||
c2 = utftext.charCodeAt(i+1);
|
||||
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
|
||||
i += 2;
|
||||
}
|
||||
else {
|
||||
c2 = utftext.charCodeAt(i+1);
|
||||
c3 = utftext.charCodeAt(i+2);
|
||||
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
|
||||
i += 3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
// Copyright 2006 Google Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
document.createElement("canvas").getContext||(function(){var s=Math,j=s.round,F=s.sin,G=s.cos,V=s.abs,W=s.sqrt,k=10,v=k/2;function X(){return this.context_||(this.context_=new H(this))}var L=Array.prototype.slice;function Y(b,a){var c=L.call(arguments,2);return function(){return b.apply(a,c.concat(L.call(arguments)))}}var M={init:function(b){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var a=b||document;a.createElement("canvas");a.attachEvent("onreadystatechange",Y(this.init_,this,a))}},init_:function(b){b.namespaces.g_vml_||
|
||||
b.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML");b.namespaces.g_o_||b.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML");if(!b.styleSheets.ex_canvas_){var a=b.createStyleSheet();a.owningElement.id="ex_canvas_";a.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\:*{behavior:url(#default#VML)}g_o_\\:*{behavior:url(#default#VML)}"}var c=b.getElementsByTagName("canvas"),d=0;for(;d<c.length;d++)this.initElement(c[d])},
|
||||
initElement:function(b){if(!b.getContext){b.getContext=X;b.innerHTML="";b.attachEvent("onpropertychange",Z);b.attachEvent("onresize",$);var a=b.attributes;if(a.width&&a.width.specified)b.style.width=a.width.nodeValue+"px";else b.width=b.clientWidth;if(a.height&&a.height.specified)b.style.height=a.height.nodeValue+"px";else b.height=b.clientHeight}return b}};function Z(b){var a=b.srcElement;switch(b.propertyName){case "width":a.style.width=a.attributes.width.nodeValue+"px";a.getContext().clearRect();
|
||||
break;case "height":a.style.height=a.attributes.height.nodeValue+"px";a.getContext().clearRect();break}}function $(b){var a=b.srcElement;if(a.firstChild){a.firstChild.style.width=a.clientWidth+"px";a.firstChild.style.height=a.clientHeight+"px"}}M.init();var N=[],B=0;for(;B<16;B++){var C=0;for(;C<16;C++)N[B*16+C]=B.toString(16)+C.toString(16)}function I(){return[[1,0,0],[0,1,0],[0,0,1]]}function y(b,a){var c=I(),d=0;for(;d<3;d++){var f=0;for(;f<3;f++){var h=0,g=0;for(;g<3;g++)h+=b[d][g]*a[g][f];c[d][f]=
|
||||
h}}return c}function O(b,a){a.fillStyle=b.fillStyle;a.lineCap=b.lineCap;a.lineJoin=b.lineJoin;a.lineWidth=b.lineWidth;a.miterLimit=b.miterLimit;a.shadowBlur=b.shadowBlur;a.shadowColor=b.shadowColor;a.shadowOffsetX=b.shadowOffsetX;a.shadowOffsetY=b.shadowOffsetY;a.strokeStyle=b.strokeStyle;a.globalAlpha=b.globalAlpha;a.arcScaleX_=b.arcScaleX_;a.arcScaleY_=b.arcScaleY_;a.lineScale_=b.lineScale_}function P(b){var a,c=1;b=String(b);if(b.substring(0,3)=="rgb"){var d=b.indexOf("(",3),f=b.indexOf(")",d+
|
||||
1),h=b.substring(d+1,f).split(",");a="#";var g=0;for(;g<3;g++)a+=N[Number(h[g])];if(h.length==4&&b.substr(3,1)=="a")c=h[3]}else a=b;return{color:a,alpha:c}}function aa(b){switch(b){case "butt":return"flat";case "round":return"round";case "square":default:return"square"}}function H(b){this.m_=I();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.fillStyle=this.strokeStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=k*1;this.globalAlpha=1;this.canvas=b;
|
||||
var a=b.ownerDocument.createElement("div");a.style.width=b.clientWidth+"px";a.style.height=b.clientHeight+"px";a.style.overflow="hidden";a.style.position="absolute";b.appendChild(a);this.element_=a;this.lineScale_=this.arcScaleY_=this.arcScaleX_=1}var i=H.prototype;i.clearRect=function(){this.element_.innerHTML=""};i.beginPath=function(){this.currentPath_=[]};i.moveTo=function(b,a){var c=this.getCoords_(b,a);this.currentPath_.push({type:"moveTo",x:c.x,y:c.y});this.currentX_=c.x;this.currentY_=c.y};
|
||||
i.lineTo=function(b,a){var c=this.getCoords_(b,a);this.currentPath_.push({type:"lineTo",x:c.x,y:c.y});this.currentX_=c.x;this.currentY_=c.y};i.bezierCurveTo=function(b,a,c,d,f,h){var g=this.getCoords_(f,h),l=this.getCoords_(b,a),e=this.getCoords_(c,d);Q(this,l,e,g)};function Q(b,a,c,d){b.currentPath_.push({type:"bezierCurveTo",cp1x:a.x,cp1y:a.y,cp2x:c.x,cp2y:c.y,x:d.x,y:d.y});b.currentX_=d.x;b.currentY_=d.y}i.quadraticCurveTo=function(b,a,c,d){var f=this.getCoords_(b,a),h=this.getCoords_(c,d),g={x:this.currentX_+
|
||||
0.6666666666666666*(f.x-this.currentX_),y:this.currentY_+0.6666666666666666*(f.y-this.currentY_)};Q(this,g,{x:g.x+(h.x-this.currentX_)/3,y:g.y+(h.y-this.currentY_)/3},h)};i.arc=function(b,a,c,d,f,h){c*=k;var g=h?"at":"wa",l=b+G(d)*c-v,e=a+F(d)*c-v,m=b+G(f)*c-v,r=a+F(f)*c-v;if(l==m&&!h)l+=0.125;var n=this.getCoords_(b,a),o=this.getCoords_(l,e),q=this.getCoords_(m,r);this.currentPath_.push({type:g,x:n.x,y:n.y,radius:c,xStart:o.x,yStart:o.y,xEnd:q.x,yEnd:q.y})};i.rect=function(b,a,c,d){this.moveTo(b,
|
||||
a);this.lineTo(b+c,a);this.lineTo(b+c,a+d);this.lineTo(b,a+d);this.closePath()};i.strokeRect=function(b,a,c,d){var f=this.currentPath_;this.beginPath();this.moveTo(b,a);this.lineTo(b+c,a);this.lineTo(b+c,a+d);this.lineTo(b,a+d);this.closePath();this.stroke();this.currentPath_=f};i.fillRect=function(b,a,c,d){var f=this.currentPath_;this.beginPath();this.moveTo(b,a);this.lineTo(b+c,a);this.lineTo(b+c,a+d);this.lineTo(b,a+d);this.closePath();this.fill();this.currentPath_=f};i.createLinearGradient=function(b,
|
||||
a,c,d){var f=new D("gradient");f.x0_=b;f.y0_=a;f.x1_=c;f.y1_=d;return f};i.createRadialGradient=function(b,a,c,d,f,h){var g=new D("gradientradial");g.x0_=b;g.y0_=a;g.r0_=c;g.x1_=d;g.y1_=f;g.r1_=h;return g};i.drawImage=function(b){var a,c,d,f,h,g,l,e,m=b.runtimeStyle.width,r=b.runtimeStyle.height;b.runtimeStyle.width="auto";b.runtimeStyle.height="auto";var n=b.width,o=b.height;b.runtimeStyle.width=m;b.runtimeStyle.height=r;if(arguments.length==3){a=arguments[1];c=arguments[2];h=g=0;l=d=n;e=f=o}else if(arguments.length==
|
||||
5){a=arguments[1];c=arguments[2];d=arguments[3];f=arguments[4];h=g=0;l=n;e=o}else if(arguments.length==9){h=arguments[1];g=arguments[2];l=arguments[3];e=arguments[4];a=arguments[5];c=arguments[6];d=arguments[7];f=arguments[8]}else throw Error("Invalid number of arguments");var q=this.getCoords_(a,c),t=[];t.push(" <g_vml_:group",' coordsize="',k*10,",",k*10,'"',' coordorigin="0,0"',' style="width:',10,"px;height:",10,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]){var E=[];E.push("M11=",
|
||||
this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",j(q.x/k),",","Dy=",j(q.y/k),"");var p=q,z=this.getCoords_(a+d,c),w=this.getCoords_(a,c+f),x=this.getCoords_(a+d,c+f);p.x=s.max(p.x,z.x,w.x,x.x);p.y=s.max(p.y,z.y,w.y,x.y);t.push("padding:0 ",j(p.x/k),"px ",j(p.y/k),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",E.join(""),", sizingmethod='clip');")}else t.push("top:",j(q.y/k),"px;left:",j(q.x/k),"px;");t.push(' ">','<g_vml_:image src="',b.src,
|
||||
'"',' style="width:',k*d,"px;"," height:",k*f,'px;"',' cropleft="',h/n,'"',' croptop="',g/o,'"',' cropright="',(n-h-l)/n,'"',' cropbottom="',(o-g-e)/o,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",t.join(""))};i.stroke=function(b){var a=[],c=P(b?this.fillStyle:this.strokeStyle),d=c.color,f=c.alpha*this.globalAlpha;a.push("<g_vml_:shape",' filled="',!!b,'"',' style="position:absolute;width:',10,"px;height:",10,'px;"',' coordorigin="0 0" coordsize="',k*10," ",k*10,'"',' stroked="',
|
||||
!b,'"',' path="');var h={x:null,y:null},g={x:null,y:null},l=0;for(;l<this.currentPath_.length;l++){var e=this.currentPath_[l];switch(e.type){case "moveTo":a.push(" m ",j(e.x),",",j(e.y));break;case "lineTo":a.push(" l ",j(e.x),",",j(e.y));break;case "close":a.push(" x ");e=null;break;case "bezierCurveTo":a.push(" c ",j(e.cp1x),",",j(e.cp1y),",",j(e.cp2x),",",j(e.cp2y),",",j(e.x),",",j(e.y));break;case "at":case "wa":a.push(" ",e.type," ",j(e.x-this.arcScaleX_*e.radius),",",j(e.y-this.arcScaleY_*e.radius),
|
||||
" ",j(e.x+this.arcScaleX_*e.radius),",",j(e.y+this.arcScaleY_*e.radius)," ",j(e.xStart),",",j(e.yStart)," ",j(e.xEnd),",",j(e.yEnd));break}if(e){if(h.x==null||e.x<h.x)h.x=e.x;if(g.x==null||e.x>g.x)g.x=e.x;if(h.y==null||e.y<h.y)h.y=e.y;if(g.y==null||e.y>g.y)g.y=e.y}}a.push(' ">');if(b)if(typeof this.fillStyle=="object"){var m=this.fillStyle,r=0,n={x:0,y:0},o=0,q=1;if(m.type_=="gradient"){var t=m.x1_/this.arcScaleX_,E=m.y1_/this.arcScaleY_,p=this.getCoords_(m.x0_/this.arcScaleX_,m.y0_/this.arcScaleY_),
|
||||
z=this.getCoords_(t,E);r=Math.atan2(z.x-p.x,z.y-p.y)*180/Math.PI;if(r<0)r+=360;if(r<1.0E-6)r=0}else{var p=this.getCoords_(m.x0_,m.y0_),w=g.x-h.x,x=g.y-h.y;n={x:(p.x-h.x)/w,y:(p.y-h.y)/x};w/=this.arcScaleX_*k;x/=this.arcScaleY_*k;var R=s.max(w,x);o=2*m.r0_/R;q=2*m.r1_/R-o}var u=m.colors_;u.sort(function(ba,ca){return ba.offset-ca.offset});var J=u.length,da=u[0].color,ea=u[J-1].color,fa=u[0].alpha*this.globalAlpha,ga=u[J-1].alpha*this.globalAlpha,S=[],l=0;for(;l<J;l++){var T=u[l];S.push(T.offset*q+
|
||||
o+" "+T.color)}a.push('<g_vml_:fill type="',m.type_,'"',' method="none" focus="100%"',' color="',da,'"',' color2="',ea,'"',' colors="',S.join(","),'"',' opacity="',ga,'"',' g_o_:opacity2="',fa,'"',' angle="',r,'"',' focusposition="',n.x,",",n.y,'" />')}else a.push('<g_vml_:fill color="',d,'" opacity="',f,'" />');else{var K=this.lineScale_*this.lineWidth;if(K<1)f*=K;a.push("<g_vml_:stroke",' opacity="',f,'"',' joinstyle="',this.lineJoin,'"',' miterlimit="',this.miterLimit,'"',' endcap="',aa(this.lineCap),
|
||||
'"',' weight="',K,'px"',' color="',d,'" />')}a.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",a.join(""))};i.fill=function(){this.stroke(true)};i.closePath=function(){this.currentPath_.push({type:"close"})};i.getCoords_=function(b,a){var c=this.m_;return{x:k*(b*c[0][0]+a*c[1][0]+c[2][0])-v,y:k*(b*c[0][1]+a*c[1][1]+c[2][1])-v}};i.save=function(){var b={};O(this,b);this.aStack_.push(b);this.mStack_.push(this.m_);this.m_=y(I(),this.m_)};i.restore=function(){O(this.aStack_.pop(),
|
||||
this);this.m_=this.mStack_.pop()};function ha(b){var a=0;for(;a<3;a++){var c=0;for(;c<2;c++)if(!isFinite(b[a][c])||isNaN(b[a][c]))return false}return true}function A(b,a,c){if(!!ha(a)){b.m_=a;if(c)b.lineScale_=W(V(a[0][0]*a[1][1]-a[0][1]*a[1][0]))}}i.translate=function(b,a){A(this,y([[1,0,0],[0,1,0],[b,a,1]],this.m_),false)};i.rotate=function(b){var a=G(b),c=F(b);A(this,y([[a,c,0],[-c,a,0],[0,0,1]],this.m_),false)};i.scale=function(b,a){this.arcScaleX_*=b;this.arcScaleY_*=a;A(this,y([[b,0,0],[0,a,
|
||||
0],[0,0,1]],this.m_),true)};i.transform=function(b,a,c,d,f,h){A(this,y([[b,a,0],[c,d,0],[f,h,1]],this.m_),true)};i.setTransform=function(b,a,c,d,f,h){A(this,[[b,a,0],[c,d,0],[f,h,1]],true)};i.clip=function(){};i.arcTo=function(){};i.createPattern=function(){return new U};function D(b){this.type_=b;this.r1_=this.y1_=this.x1_=this.r0_=this.y0_=this.x0_=0;this.colors_=[]}D.prototype.addColorStop=function(b,a){a=P(a);this.colors_.push({offset:b,color:a.color,alpha:a.alpha})};function U(){}G_vmlCanvasManager=
|
||||
M;CanvasRenderingContext2D=H;CanvasGradient=D;CanvasPattern=U})();
|
|
@ -1 +0,0 @@
|
|||
{"herald":41,"grandma":"Patreona|Janice|Gabrielle|Grandma McGrandmaface|Charlie|\"egg\" Sr.|Jet-dayo|Natsuki|Ivy|Rose|Babayaga|Grandma #42|SneakySquid|Swad Plan|Meep Moop|Psychedelic Rapper Andrew JD|Telos|Moondoge|Lily Bowen|Mrs PoopyButthole|Mrs Sugai Kirin|Survivor of the Stale|Betty Ann Niemi|Tjien Nio|The First Baker|Mamichette|dQw4w9WgXcQ|Carmelina Calabrese|The GrandNut|La mere Michel|Aune Mummo|Jeff Junior|Her?|Rydh|Euphegenia Doubtfire|Bear|How did you find me, JUNESUK?|Ahtelo|Steve...?|Fanny|DAF Pvnk - Mother of trucks|Koisuru Fortune Grandma|Lieselotte|Izual Rebirth|Cosma-Tanti|Starco|Forgotten Abbey|Granny Rags|Mrs. Fizzwidget|Nakamoto|Zan Tart-izanne|The Roach Queen|Khookiesi, Grandmother of Dragonflights|Hey guys, Dexterfan99 here|Aryll|Ms. Chievous|Don't Stop Me Now|Dauna|Gerry|Erina Pendleton-Joestar|Stacy's Grandma|Benyboy|Rosie Beestinger|Tesco employee #65|Oda|Grandma Jones|Dan|Krieg|Chris|Kamilla|Tandy|Elisabeth|MinionMemer|Eanydo Erdman|Cookieatron4000|TechhX|Turtlenator|Carmelina|Shiny Blue Grandma|Anne|Penka|\"Hey guys, it's Nicole\"|Cora|Freya28|Kiwibajs|EEEEEE|Ms. Denis Gur Arie|Idling Vasha|?????|Tammie|Grandma Kara|Sanda Reiss|Alex|Mirle|Audrey|Ittle Dew|You're Killing Me Smols|Baker? I hardly know her!|A Duplicate Grandma|Betty Margaret Davis|Chlorophyte Grandma|Felpinhazinha|Satan's grandmother|Ruby Rose|Miyori Grandma|Geuser|Anneliese|Pielak|Swamper|Pikachi|Grackitz|Deborah Wright|BUT IT WAS ME, DIO!|Barbara|SERAS FAMO!!!|Audrey Porter|Benny Zhy|Doctergreen|Kage|Jarvis Fishwick|Elder Pledge 666x in a row...|Tell Cersei, it was me.|Kimahri|Henrietta Gertrude|Tyler Liddick|noisypineapples|Linda-Bea Dolvoy|DevilishWarrior|Exterminator|Matthue Loose|Caden|moist butterscotch lips|Alireah|Fey Yoshida|Aviators|Ashlee <3|He Had Boxing Gloves On|Falling Collin|Error 404: Name not Found|Groz|Granny Jonathan|Hanna Highmark|Nonmoving Osmond|The Worm Which Waits|Lurking Tealeaf|Ruby Wrinkle|Her|\"Eggy Grandma\"|Cookie maker 100|Addison Bennett|Nasus|Only 30 characters, huh? Fine.|Matt Was Here|ScartTheWaz|Tanyac Crimson|Ume Ito|VenMissa|Velma Francis|amdnarG|Leota Marie|Nikola|Grandmommy Celestine|Annuziatta|hosh...|E|Joe Grandmomma|Granny Grearest|Vivian|Vovó Dal|Baker of Steak Cookies|Aku daikan|SkeletonJoke|David loves Rachel! <3|Polar|Loremaster Rawlins|lickin my cookie|Fmaily Gyu funy momens #420|Ms. Cppkies|WillStreet|Ian's Mom|Grandma Divah|Betty BeardPuller|Mamie Cobol|200rassberris|ipm1234|Galadion|Olive Gardenia|Megan I. McIntosh|Lady Sweets|Rivne|Autosuffisant|BoShek|Brooke Chumbers|Cthulhu|ɐɯpuɐɹפ|binbinuser|Amma Jóna|the book was empty|Berit|DRIFTER1117|Yackemflam|Help me|YeOl'GrammityGram|Mason W|Peggy Hattenfels|majik|latte|amogus|Samuel Robertson|Anneliese Albina Emma|Barack Obama|Gramma Margaret|Tomato Pie|Tobi Kummerer|Ms Shelley|Harlow Diggs|Jaema|Claudia|Lukexzr's Grandma|Grandma Chara|I love my cookies|Typlo|joxer(ish)|Lisle|Gray Still Plays|Alyssa Cummings|The Wrinkler Spy|Carol|Gerladine|Alpa|Grannynator T-3000|SoeJul|Eleodora Consuelo|Grandma Jo"}
|
Before Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 25 KiB |
|
@ -1,309 +0,0 @@
|
|||
http://orteil.dashnet.org/cookieclicker/img/AQWorlds_CookieClicker_300x40.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/BGgarden.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/BGgrimoire.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/BGmarket.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/BGpantheon.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/alchemylab.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/alchemylabBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/alteredGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/alternateGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/antiGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/antimattercondenser.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/antimattercondenserBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/aqworldsbanner.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/ascendBox.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/ascendInfo.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/ascendSlot.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/ascendWisp.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/ascendedBakingPod.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/bank.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/bankBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/bankGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgBW.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgBlack.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgBlue.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgCandy.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgChoco.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgChocoDark.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgCoarse.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgFoil.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgGold.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgMint.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgMoney.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgMoneyChart.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgPaint.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgPink.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgPurple.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgRed.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgSilver.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgSky.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgSnowy.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgSpectrum.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgStars.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgWhite.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/bgYellowBlue.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/blackGradient.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/blackGradientLeft.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/blackGradientSmallTop.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/bracketPanelLeftS.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/bracketPanelRightS.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/brainyGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/brokenCookie.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/brokenCookieHalo.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/brownStripes.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/brownStripesLeftEdge.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/buildings.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/bunnies.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/bunnyGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/buttonTile.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/caramelWave.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/chancemaker.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/chancemakerBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/chocolateMilkWave.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/clayBG.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/cloneGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/contract.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/control.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/cookieShadow.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/cookieShower1.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/cookieShower2.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/cookieShower3.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/cortex.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/cortexBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/cosmicGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/cursor.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/darkNoise.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/darkNoise.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/darkNoiseTopBar.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/dashnetLogo.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/discord.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/dragon.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/dragonBG.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/dragonFrame.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/dungeonDot.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/dungeonFactory.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/dungeonFoes.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/dungeonHeroes.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/dungeonIcons.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/dungeonItems.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/dungeonMapFactory.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/dungeonOverlay.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/dungeonPictos.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/dungeonTiles.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/easterEggs.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/elfGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/empty.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/emptyFrame.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/factory.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/factoryBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/farm.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/farmBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/farmerGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/favicon.ico
|
||||
http://orteil.dashnet.org/cookieclicker/img/featherLeft.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/featherRight.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/filler.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/fractalEngine.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/fractalEngineBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/frameBorder.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/frostedReindeer.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/gardenPlants.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/gardenPlots.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/gardenTip.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/girlscoutChip.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/girlscoutCrumb.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/girlscoutDoe.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/girlscoutLucky.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/glint.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/glint.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/goldCookie.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/grandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/grandmaBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/grandmas1.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/grandmas2.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/grandmas3.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/grandmasGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/grimoireBG.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/heartStorm.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/hearts.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/heavenRing1.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/heavenRing2.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/heavenlyMoney.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/heraldFlag.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/icon.ico
|
||||
http://orteil.dashnet.org/cookieclicker/img/icon.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/icons.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/idleverse.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/idleverseBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/imperfectCookie.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/infoBG.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/infoBGfade.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/javascriptconsole.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/javascriptconsoleBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/levelUp.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/linkDash.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/linkPulse.gif
|
||||
http://orteil.dashnet.org/cookieclicker/img/linkPulse.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/lockOff.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/lockOn.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/luckyGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/mapBG.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/mapIcons.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/marbleBG.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/marshmallows.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/messageBG.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/metaGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milk.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkBanana.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkBlack.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkBlackcurrant.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkBlood.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkBlueFire.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkBlueberry.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkCaramel.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkCherry.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkChocolate.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkCoconut.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkCoffee.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkDragonfruit.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkFire.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkGold.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkGreenFire.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkHazelnut.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkHoney.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkLicorice.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkLime.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkMaple.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkMelon.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkMint.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkOrange.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkPeach.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkPlain.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkRaspberry.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkRose.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkSoy.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkSpiced.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkStars.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkStrawberry.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkTea.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkVanilla.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkWave.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/milkZebra.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/mine.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/mineBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/minerGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/money.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/mysticBG.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/nest.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/orangeWave.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/panelBG.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/panelGradientBottom.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/panelGradientLeft.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/panelGradientRight.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/panelGradientTop.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/panelHorizontal.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/panelMenu.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/panelMenu2.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/panelMenu3.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/panelVertical.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/pantheonBG.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/parade.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/patreon.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/perfectCookie.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/pieFill.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/playsaurusLogo.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/playsaurusbanner1.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/playsaurusbanner2.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/playsaurusbanner3.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/pointGlow.gif
|
||||
http://orteil.dashnet.org/cookieclicker/img/pointyLad.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/portal.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/portalBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/portraitChip.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/portraitCrumb.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/portraitDoe.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/portraitLucky.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/prestigeBar.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/prestigeBarCap.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/prism.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/prismBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/rainbowGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/raspberryWave.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/roundFrameBorder.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/roundedPanelBG.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/roundedPanelBGS.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/roundedPanelLeft.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/roundedPanelLeftS.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/roundedPanelRight.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/roundedPanelRightS.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/santa.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/scriptGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/selectTarget.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/sentientFurnace.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/shadedBorders.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/shadedBordersGold.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/shadedBordersRed.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/shadedBordersSoft.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/shimmeringVeil.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/shine.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/shineGold.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/shineRed.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/shineSpoke.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/shinyWinkler.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/shinyWrinkler.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/shinyWrinklerBits.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/shipment.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/shipmentBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/smallCookies.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/smallDollars.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/snow.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/snow2.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/sparkles.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/spellBG.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/spinnyBig.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/spinnySmall.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/spookyCookie.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/starbg.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/storeTile.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/sugarLump.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/temple.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/templeBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/templeGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/timemachine.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/timemachineBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/timerBars.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/tinyEyeEmpty.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/tinyEyeOff.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/tinyEyeOn.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/tinyglobe.gif
|
||||
http://orteil.dashnet.org/cookieclicker/img/tinyglobeSheet.gif
|
||||
http://orteil.dashnet.org/cookieclicker/img/transmutedGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/turnInto.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/upgradeFrame.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/upgradeFrameHeavenly.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/upgradeFrameOld.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/upgradeFrameShadowOld.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/upgradeHighlight.jpg
|
||||
http://orteil.dashnet.org/cookieclicker/img/upgradeHighlight.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/upgradeSelector.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/weeHoodie.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/winkler.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/winterFrame.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/winterWinkler.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/winterWrinkler.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/witchGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/wizardtower.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/wizardtowerBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/workerGrandma.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/wrathContract.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/wrathCookie.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/wrinkler.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/wrinklerBits.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/wrinklerBitsOld.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/wrinklerBlink.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/wrinklerGooglies.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/wrinklerShadow.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/you.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/youAddons.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/youBackground.png
|
||||
http://orteil.dashnet.org/cookieclicker/img/youLight.png
|
Before Width: | Height: | Size: 820 B |
Before Width: | Height: | Size: 472 B |
Before Width: | Height: | Size: 470 B |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 526 B |
Before Width: | Height: | Size: 666 B |
Before Width: | Height: | Size: 966 B |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 11 KiB |