From 4297e6998c39547dfcda6e56290644e69a5bcef6 Mon Sep 17 00:00:00 2001 From: oc Date: Mon, 4 Dec 2017 01:35:38 +0800 Subject: [PATCH] First Commit --- .gitignore | 52 + .idea/inspectionProfiles/Project_Default.xml | 13 + .../inspectionProfiles/profiles_settings.xml | 9 + .idea/modules.xml | 8 + .idea/mota-js.iml | 12 + .idea/vcs.xml | 6 + .idea/watcherTasks.xml | 24 + fonts/number.ttf | Bin 0 -> 4312 bytes images/animates.png | Bin 0 -> 14550 bytes images/atk.png | Bin 0 -> 207 bytes images/bg.png | Bin 0 -> 15859 bytes images/book.png | Bin 0 -> 464 bytes images/def.png | Bin 0 -> 276 bytes images/enemys.png | Bin 0 -> 37814 bytes images/experience.png | Bin 0 -> 508 bytes images/floor.png | Bin 0 -> 995 bytes images/fly.png | Bin 0 -> 854 bytes images/ground.png | Bin 0 -> 600 bytes images/heros.png | Bin 0 -> 4855 bytes images/hp.png | Bin 0 -> 479 bytes images/items.png | Bin 0 -> 28604 bytes images/load.png | Bin 0 -> 1404 bytes images/mdef.png | Bin 0 -> 478 bytes images/meaning.txt | 83 + images/money.png | Bin 0 -> 291 bytes images/npcs.png | Bin 0 -> 6534 bytes images/save.png | Bin 0 -> 1408 bytes images/settings.png | Bin 0 -> 1620 bytes images/shop.png | Bin 0 -> 2394 bytes images/terrains.png | Bin 0 -> 9871 bytes images/toolbox.png | Bin 0 -> 3041 bytes index.html | 93 + libs/core.js | 3120 +++++++++++++++++ libs/core.min.js | 1 + libs/data.js | 126 + libs/data.min.js | 1 + libs/enemys.js | 229 ++ libs/enemys.min.js | 1 + libs/events.js | 606 ++++ libs/events.min.js | 1 + libs/floors/MT0.js | 30 + libs/floors/MT1.js | 30 + libs/floors/template.js | 30 + libs/icons.js | 186 + libs/icons.min.js | 1 + libs/items.js | 292 ++ libs/items.min.js | 1 + libs/maps.js | 633 ++++ libs/maps.min.js | 1 + libs/npcs.js | 71 + libs/npcs.min.js | 1 + libs/ui.js | 712 ++++ libs/ui.min.js | 1 + main.js | 313 ++ main.min.js | 1 + map_generator.exe | Bin 0 -> 15360 bytes sounds/attack.ogg | Bin 0 -> 9491 bytes sounds/bgm.mp3 | Bin 0 -> 77463 bytes sounds/door.ogg | Bin 0 -> 11974 bytes sounds/floor.mp3 | Bin 0 -> 1879 bytes sounds/item.ogg | Bin 0 -> 11126 bytes styles.css | 235 ++ 62 files changed, 6923 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/mota-js.iml create mode 100644 .idea/vcs.xml create mode 100644 .idea/watcherTasks.xml create mode 100644 fonts/number.ttf create mode 100644 images/animates.png create mode 100644 images/atk.png create mode 100644 images/bg.png create mode 100644 images/book.png create mode 100644 images/def.png create mode 100644 images/enemys.png create mode 100644 images/experience.png create mode 100644 images/floor.png create mode 100644 images/fly.png create mode 100644 images/ground.png create mode 100644 images/heros.png create mode 100644 images/hp.png create mode 100644 images/items.png create mode 100644 images/load.png create mode 100644 images/mdef.png create mode 100644 images/meaning.txt create mode 100644 images/money.png create mode 100644 images/npcs.png create mode 100644 images/save.png create mode 100644 images/settings.png create mode 100644 images/shop.png create mode 100644 images/terrains.png create mode 100644 images/toolbox.png create mode 100644 index.html create mode 100644 libs/core.js create mode 100644 libs/core.min.js create mode 100644 libs/data.js create mode 100644 libs/data.min.js create mode 100644 libs/enemys.js create mode 100644 libs/enemys.min.js create mode 100644 libs/events.js create mode 100644 libs/events.min.js create mode 100644 libs/floors/MT0.js create mode 100644 libs/floors/MT1.js create mode 100644 libs/floors/template.js create mode 100644 libs/icons.js create mode 100644 libs/icons.min.js create mode 100644 libs/items.js create mode 100644 libs/items.min.js create mode 100644 libs/maps.js create mode 100644 libs/maps.min.js create mode 100644 libs/npcs.js create mode 100644 libs/npcs.min.js create mode 100644 libs/ui.js create mode 100644 libs/ui.min.js create mode 100644 main.js create mode 100644 main.min.js create mode 100644 map_generator.exe create mode 100644 sounds/attack.ogg create mode 100644 sounds/bgm.mp3 create mode 100644 sounds/door.ogg create mode 100644 sounds/floor.mp3 create mode 100644 sounds/item.ogg create mode 100644 styles.css diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..7ae4cf2d --- /dev/null +++ b/.gitignore @@ -0,0 +1,52 @@ +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff: +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/dictionaries + +# Sensitive or high-churn files: +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.xml +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml + +# Gradle: +.idea/**/gradle.xml +.idea/**/libraries + +# CMake +cmake-build-debug/ + +# Mongo Explorer plugin: +.idea/**/mongoSettings.xml + +## File-based project format: +*.iws + +## Plugin-specific files: + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + + + diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 00000000..7f0771f3 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 00000000..17b6b9a1 --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..f7251ba2 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/mota-js.iml b/.idea/mota-js.iml new file mode 100644 index 00000000..24643cc3 --- /dev/null +++ b/.idea/mota-js.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..94a25f7f --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml new file mode 100644 index 00000000..157a5562 --- /dev/null +++ b/.idea/watcherTasks.xml @@ -0,0 +1,24 @@ + + + + + + + + \ No newline at end of file diff --git a/fonts/number.ttf b/fonts/number.ttf new file mode 100644 index 0000000000000000000000000000000000000000..bcf90fae15a92f26dae9f2bf31c86319c458ea77 GIT binary patch literal 4312 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 HN@xNAWNuR{ literal 0 HcmV?d00001 diff --git a/images/bg.png b/images/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..d235379c11490670f61b5aa405870c124a75b47e GIT binary patch literal 15859 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�GV1Z{f56LD6? z957%W-g*Q8%rPEh{4sDQj68?8R5#}JD*iA!>JwUoUQD5LCp-Ab1Vs)%4`k?*Sj@;s zrbGUNuWAe>TprGrXSm(w_Tu=vtMJxWwBK~b!D3FvdRI!WVYd`TNm%7>b%ZBDOSrbl zEwZ>$h<(L&s;XuOG=!(@73@?muWQY~G>V#+glo-_ zvM)tc6RgLZlcp(on^kZ%#I)daywlS*5AUht`T@y{Me8?~#z-CD9>Qx|!qjFrplI_1 NI(cdQz1hF<{|oOET`B+o literal 0 HcmV?d00001 diff --git a/images/book.png b/images/book.png new file mode 100644 index 0000000000000000000000000000000000000000..b42b205f4ce775896056817aeb5ad56f2223afbe GIT binary patch literal 464 zcmV;>0WbcEP)2+^)*MPnO1+F@q@$!`Wn(lpG)qfM2n-0^R%G4W z-JEGcN=-^+W@KtOiTy}2!w`&LP0{-&;Qob|4LCx00an}Z99kvL_?|;cc*PF_rK&)BO3v@*#H^9U+>LO z@Zs4I`G=f8X7>IemncPX7^D=%#ki~R=T5nPdGdGrC8bn;xQ3u8o?5QWph@pbn|Up% zWZ^GFr0=I97DE8{>ir1MB8<4;`47Lye!{>gd|=HB@JcMnet>}cdt{uqjQ(gWxBiW; z_(`pAjI9C_(M=G1W&|9<;7*%zk@|TXm}Fm)A=ti$f;8jxXx?0Kh9CrI?XI)~-=^|l z*hA<-s7_UQZoCh|Pr^lbcO4R}Bf=Y}uRchr2ggEOmKduOD9e2VZiOSv^Bfl>%B?Yj zZ~Iz-BfQ)DT0uI^wIZ)^;QuKxDz25N_O+t=I{1-?XYvc0eHk=mGq1$}0000{D literal 0 HcmV?d00001 diff --git a/images/def.png b/images/def.png new file mode 100644 index 0000000000000000000000000000000000000000..306f84c6682eda2f5259fc3766a2232710a5ee89 GIT binary patch literal 276 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 N002ovPDHLkV1is^{xbjo literal 0 HcmV?d00001 diff --git a/images/experience.png b/images/experience.png new file mode 100644 index 0000000000000000000000000000000000000000..8317a8dd51eba6e8f3b3deb2a760d64d4f6c92ef GIT binary patch literal 508 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 literal 0 HcmV?d00001 diff --git a/images/hp.png b/images/hp.png new file mode 100644 index 0000000000000000000000000000000000000000..49c16e74071744f5859ccf3dab1f26cbc1822ff4 GIT binary patch literal 479 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 z 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%0A{dzE}m| zbW3UpxZf!PU9g@J6seKJ3jcpv6L=%U`%V^U@PF1Jq%CM@UMQ)|2WRAQe7{fAxNApo8I6NPSS+cC3LtG3L#wjQ!-8-y7sE$0brgA2!l1V+H{G4 zBQ0_|>bKB^?f!`%*8``2ZA;DV6_yWnDBTxz) z`X2y^R3V{gMY{qVk@a}^=dLEiou7f38Ua*zrwJslv|>kofndQ?#ZC!a{agQCH@!5v zwT1^neEY`$A`m}=S&61o7SfP>yEpob590cVvmpBHf^A`p4xTTdQ`PoxV_y%NfT z8>lHLgg=>8&@P)6j+kMIuTq58*d1or$Z!Fkl)Zgl?oB~ZpBZWFXgn~F{R?MSL5hsT5% zdp;Q?IhiWI#|7xN9I)Uv6G4XLhQM1twa?E<^Rmy4GWC%kc3^jZgF;Eos-fxyer*Cj)Ib6f25>xYoFn%^a!&*6?D?f#cj z^1_I`mx?f^e1goi53!;F8+Tv0>9TlI=NT8C-wH9(R;Gi>EX4c&b?l)HfXp=DAmDNg z@Q{mB_pbX#uWCs5*p)>WUbU9`XL^}gc6U)%l1ELtsb+h@b&_MMJ;IpR+imKPbtvuv zB`y!mQqLnJ8uV+TFcu{dGb?bgwC94+DT!))^l0wLCo|gpIdw?8OrJayKk4`F9$P0g^>+z@aY^-d4-*8rwCrL8mslV)r zv<4sL85eEsv7f1Lcw8#IdbJAGplZs`ub$%yS<^8X697vnWggxqL^Sn>ZfP z3*eFjv$CFaKvGDIJD1!0G00T!@bvo#^^08cXGBQ%e$>qFSWfVyK%M!I%@dN1bdyi{ zw>91WeA;G?Wi2Ohznr{-_|~$s`MR6&Z|vg%fKzB=2A0V2MN1R-JtFc}Wnx6j5u&Lm z&GZw`{Fh&d^@)EDD?h-!-E4F+a(qSBQjrCt2)2U|F4oqq$^dA2M|_k*Kd^s=NyalG z`~9$jFX;GTI}lZ1K1P=}7WtyT3gcXfU z{K2c#+#WBwmk#UB!A_ZOqFR3vN9rH$>ZrEJBZis*>AL>%+{+Ie0Qgf?R#z&1Xdd|g E0IFr7!~g&Q literal 0 HcmV?d00001 diff --git a/images/load.png b/images/load.png new file mode 100644 index 0000000000000000000000000000000000000000..26243925e3c10d0a2ef1b5323242a47d3aa8373b GIT binary patch literal 1404 zcmV-?1%vvDP)2%etd(Zcs$36F4VMMVnFI!=A^LGhMy2}=abp)+B z0!~9+j<_%_F8kEwZQc1-V-&q|QQ-ZxYdp1G1`nxA6$f1MALIlE#>~AX#%sajJ=MGa z{CPN^E$5EEBDsFS(JbsEN`@w1By=If_EaUS;=SmB@sY8 z)7h-xod{eox4Mbm-0unPfq%m?OXV#UodEFp7@JKp7cN!A(OL_sq&b+biBo^mUcWjS zBH-=PbE;ei;GGzotu7t-0?}F`?g{H@+8_h!7D@FUzu7fS!w& z5CZXhJ>U>dFNdInAgKqtHhHjqI0kTImqO$~XjHRI&tnKc^-6U8QyJTQ+-Ilp-(R@| zH#k~rV`s)tB}Ui=fUJ(TWLr~>$0d31|_i5p%fw0CEKed2(Aw;kF)4Xu%}4xCL;)v<1> zJ7X7{6psM1eOn}+(ruo?y!dmGEM|&SGXenaOiDOZ`bu54da9%+#z7beflO>e*4&mY zmfXGti+dGta4gFe@G~F6xdQ_sK%o1_N(h3v9E^c=0Hjed0B*$v$6LQI2^_%MM+?VAd$AnX!WsS2I=*BAw2xhMilQ_wU^O7# zUOEBo7JH!2+h=3o2(X$s6l+Q62=ix%Dk}jv{p)9(op}Qh8A`&{8y;ZAmA3%UX`QAL zwTlV#@=a%AuxW_4N@Pf6xD7`oG>;QiR^pbjYV9^wt=(4GNI2k@A{x_b93`nN0>0n@ z_vu(f_u)JSAW0XW8(!tDichG7arCLx7ysy>> z?28HAw@u0|g+#{Yp@4wod2sp09l(wP+lQq+dyF-e{1oaZ(9BqwS+nB26YGsM!a-gG z9+lXTqzmnMkU;%CX6g&^>?=CtMXUF6{`u6AcUgP+ASr8=@iYsuioPoMpFEcx$6u5; zxbTCx#01Tb&HwW_cIi5HZ8BB=MFI4t&d-?d&8RuLqOgJeS7ME%mwe*>QZiNl1^PN7 zEq9+W_zpnIDOxMuLQ4Xlt>T?tSf|U4q}LJk2*_5N>fCEs9Y886T5An9CYLHM*ldE& zXW(XbG7U`0Bfs^m8`$)E^Zen+;_W>Wr9f0`Bc(-()IVW&Bf@MI??ydvT<=KkJ2lfk zulQo}d1bu?c~g368ysFV$a`u>N&zXS*}obhj=SKd zcsIg3ab|H&(u^*!CmyfeSOmVP2L`3|Y0)_xTDGmTxhz*nF08&B#TPRTEdk`Qs4WK)MBFmv6Anf4az(S4#kP{)<4oFBy z;6TsUgt8T>4j^P66TWOlsRKyLrr5F>%o21AR+p9r!35M1olw!U8G1rP!9a`ucXWU; z%n`USN!b*eBQSggvm6AF9D&RCB$W{)IRFV$#Q_5z1p}T42Rs`NR6#^CplVS(>VU!E z0LH=K0LD=V3|Nzl63eO5C?&^osy53h@jX>KCX_gWDqS;j9YLkeDFef{+qvu~ZrAhO zxKS^4<3_XkjT`Nz*KW7j-?-E2cz$w{+Rx+rBQR2o`>BtLUL1lyEBp6o^Y4Z+N~A(J2r!1QdtDFj7t! zKidU?0lphjwWfLlzheTB#9_n`f?Ml?pwbToTBm>mQ~_wBr(n1>a~8A!mJGN7ygd*C z(0d9(0j%GFApouV<30!l(A)!DPq>dF2GHCCUEarkDw*n2M+QFSu-!eE=K&?4A7H3cLUS002ovPDHLkV1i|edPD#K literal 0 HcmV?d00001 diff --git a/images/npcs.png b/images/npcs.png new file mode 100644 index 0000000000000000000000000000000000000000..3df2b21df239bbd6be32d75db346c38e4ba2ee45 GIT binary patch literal 6534 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 literal 0 HcmV?d00001 diff --git a/images/save.png b/images/save.png new file mode 100644 index 0000000000000000000000000000000000000000..325e36dc9e76d957cc23647c172404a1c551fde8 GIT binary patch literal 1408 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 literal 0 HcmV?d00001 diff --git a/images/toolbox.png b/images/toolbox.png new file mode 100644 index 0000000000000000000000000000000000000000..7122eeeafc41b34f630ecb703c5b36ae6dcdc7eb GIT binary patch literal 3041 zcmZ8jc|6qJ8vj|clQr?GnGhmo#x{&JVeH!wWeqdN7|W0u$=I^56^iJs>}!_S+Ge?B zUk4G&o-LHrShC*nzW4LF-TOJ8=RBYDe3$1r=dTlwHq+>fZNajWl7KA<6vW< z?<5L^Mo-LmEmJK3sJhR&?{eZ8#2Q$d0sut{0PaKqz%IRXXBhzep#ZSr3;>7>01)!X09@j zA>UG$uh{xI$6!W2M_oaLHlymR;W4GEj%T-}9&9)?_o(C7YqnQf;F%6kYc%M!fBlxa zeo*D+QDxoM5a=)~c4B2|O(1q^>#3ETRqW&ZyP|11i255MVxc_*>l4-(k(-lZqkWyD z8c_{nQ@7`<r@oXl3$L`)QA~v z!K)>B#Uk29wyKjoFlLoDH)p&fMRrVd5|C?gKRne?oM< z8+Xds2$EXopKBr1G>uBSsl~kfBx#7TOsryW7d62UMHsAgBl#PpcT$%_6!g-u0~PB+ zq_=6vCr5*?gtw;lX4$%TTJR~-_ghLj*4ygMd88NXD%*!N7pwhhFG^Gi8a9`kADYaBNs6kL^k8SkT=ccQU-l{QMZIBt z;Di1;TRpkSf{l>(&Gw6))bTV@#?yfN!Ct##k#&m|7AUPqkd?m-1FPtj&;J_vP+GeF z(m2A|pzTgZIh)9eN>BeTk1Gb=snxwbts5}AaPx)Qo|fpr(%K>9vTv?>NXM69ZJXvp zmMnXR0sE;jCnefwXo8JhOVDy6a`VUZK~bHd-O*n!zvayA#dT)aF2MbFh)`}c%711z zqjOKs{LBE*D0H5TVYsj9&{jC_K2C6E1<1)Pd^QgEdKJW4KAwwNfsZ2( zWy{?f{O35Pl97rrD7^l>ag`m0|xY2gBx zh|j@=6BtnZW!{kZ9!1J(=3}!WVaIe&+KEApS~0NDX2Y$|xYm1Ukpr>!(oL=5kWyt;B&i(52LnNgKgrjbzJ2QI)c33vO|c~8QqFdKy1Qp=;? z;Z`QMq~tZzB%OaA%}FmcwNQkI+Ok*yP``%Uz0~<27JD2&AWm6pw6{wdFxZaxh?LEzM zbKRC%^?W}6)a5nuj0>hb5iWG9V#=B19ZAj)KiuNQf@(}m&&Rzk|L#+e&4pU$jb9~5 zIM(&|P-qLL@{=hUY*Lc$ggDtT)J{1zMu0Wl#xZN@9jCEaFjaW`m1k7+uRxyOC0eDz z&BGOHN!-9=F{w8lid%m{>-535t+YO0DRv(#4Ii3qw0E>6oly$%e!oe2)Hd|9eRu{; zsTC{RR8~}R3p`4B-s`yInShDxo|nX*pB<_@L9FopzS6HSsUNkW|FEPnqBZ>Ki+-CX znC7I}tQ#JIs}7Ut?vnT-ZO2V=NOI=aO^QH)d0JWcMhx;~*E}ZX_cttRub+?D3(CvdrouwCX&;NN^ktlZfE1?TN7&Hqa5Xz@g@PmUCC zXz{knh$k2@a~HEH>nZbCnJ0A@2A-4~Cpt7!<73a}hONnz=LKLq^uKKG&g(`L=!l=i zjP-~3+5_FGG8;ioM-F>W8h5r61$7$=8LXn6#pALql2P^1MQmgePAce*=}(64Up|A% z=^OD#?DQd%S6KzR+;pg`&~~kCXhoAc`$6P!+LO~P9_ni6U$VV@u(`hqKgHBlGH)Q5IZ{H05~X#)YLn>LMsA(u0f_ zIKT5a^#8DnF4)C?83uu~LY@Q_Dpb{!a*aORzIPb0kT{(`?%`6tuy5YfVoVJaPQuk> zv~Hex$Rlt@$bLYyds%qlZjEsFa}8NOxoX$&i;%TU>ID9*MljUsk4<@7{LJPQ&$W(b zRM2$f7|Cfd91Bq#s+Zxp<0fxe(U*+>!|J)tMAMS>yFQTb#t;JQZSEPMHzJBb8?jbG zK2tAsoNW5x-Mp0+cG?}32j!aB7}Q9;KM^!B@yf@cP&93f|IgvIuUXSqk^AmH=Em2{ zP0B)R)YQ%j@bNQCIP*tlIvI8r9=)XO=1f;6*gJ2GSGEafAz!R@DNC=XSY zhrz92>Ij%BLP_l(f!774e7eB&xC6<@jU3?OhXV|~UGO+l7d!#$35F{`6=3qJU<;Tk z__ms=ld3Y9Zl)>^Ri~SQ-N|HM1OyTg5THOf7SV$)Qtidt(p? zln>V58%HD~5NJA;1i*@p-a!73^LJ|m!T?9WyORM$71b{-C=ohG_&1;baIO%1~6$KyL*Y>YAY{w4EdV4WL(t ANdN!< literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 00000000..a08f5712 --- /dev/null +++ b/index.html @@ -0,0 +1,93 @@ + + + + + + + + + 魔塔样板 - HTML5魔塔 + + + + + + + + + + + +

+ + + \ No newline at end of file diff --git a/libs/core.js b/libs/core.js new file mode 100644 index 00000000..c8874175 --- /dev/null +++ b/libs/core.js @@ -0,0 +1,3120 @@ +/** + * 初始化 start + */ + +function core() { + this.dom = {}; + this.statusBar = {}; + this.canvas = {}; + this.images = []; + this.sounds = {}; + this.firstData = {}; + this.material = { + 'images': {}, + 'sounds': {}, + 'ground': null, + 'items': {}, + 'enemys': {}, + 'icons': {}, + 'events': {}, + 'npcs': {} + } + this.timeout = { + 'getItemTipTimeout': null + } + this.interval = { + 'twoAnimate': null, + 'fourAnimate': null, + 'boxAnimate': null, + 'heroMoveTriggerInterval': null, + 'heroMoveInterval': null, + 'heroAutoMoveScan': null, + "tipAnimate": null, + 'openDoorAnimate': null + } + this.musicStatus = { + 'isIOS': false, + 'loaded': false, + 'bgmStatus': false, + 'soundStatus': true, + 'playedSound': null, + 'playedBgm': null, + } + // 各元素位置、大小信息 + this.position = { + 'gameGroup': {}, + 'canvas': {}, + 'statusBar': {}, + 'toolBar': {}, + 'items': {}, + 'scale': 1.0, + 'screenMode': 'bigScreen', + } + this.initStatus = { + 'played': false, + + // 勇士属性 + 'hero': { + 'id': '', + 'name': '', + 'hp': 0, + 'atk': 0, + 'def': 0, + 'mdef': 0, + 'money': 0, + 'experience': 0, + 'loc': {'direction': 'down', 'x': 0, 'y': 0}, + 'flyRange': [], + 'items': [], + }, + + // 当前地图 + 'floorId': null, + 'thisMap': null, + 'maps': null, + + // 勇士状态;自动寻路相关 + 'heroMoving': false, + 'heroStop': true, + 'lockControl': false, + 'autoHeroMove': false, + 'automaticRouting': false, + 'automaticRouted': false, + 'autoStep': 0, + 'movedStep': 0, + 'destStep': 0, + 'automaticRoutingTemp': {'destX': 0, 'destY': 0, 'moveStep': []}, + 'autoStepRoutes': [], + 'holdingPath': 0, + 'stepPostfix': [], + 'mouseOutCheck': 1, + 'moveStepBeforeStop': [], + + // event事件 + 'savePage': null, + 'shops': {}, + 'npcs': {}, + 'event': { + 'id': null, + 'data': null + }, + 'openingDoor': null, + + // 动画 + 'twoAnimateObjs': [], + 'fourAnimateObjs': [], + 'boxAnimateObjs': [], + }; + this.status = {}; + this.flags = {}; +} + +/////////// 系统事件相关 /////////// + +core.prototype.init = function (dom, statusBar, canvas, images, sounds, coreData) { + core.dom = dom; + core.statusBar = statusBar; + core.canvas = canvas; + core.images = images; + core.sounds = sounds; + for (var key in coreData) { + core[key] = coreData[key]; + } + core.firstData = core.data.getFirstData(); + core.initStatus.shops = core.firstData.shops; + core.initStatus.npcs = core.firstData.npcs; + core.dom.versionLabel.innerHTML = core.firstData.version; + core.dom.logoLabel.innerHTML = core.firstData.title; + core.material.items = core.items.getItems(); + // core.status.maps = core.maps.getMaps(); + core.initStatus.maps = core.maps.getMaps(); + core.material.enemys = core.clone(core.enemys.getEnemys()); + core.material.icons = core.icons.getIcons(); + core.material.events = core.events.getEvents(); + core.material.npcs = core.npcs.getNpcs(); + core.flags = core.data.flags; + + // test if iOS + core.musicStatus.soundStatus = core.getLocalStorage('soundStatus', true); + var userAgent = navigator.userAgent; + + if (userAgent.indexOf('iPhone') > -1 || userAgent.indexOf('iPad') > -1) { + console.log("你的设备为iphone,不自动播放音乐!"); + core.musicStatus.isIOS = true; + core.musicStatus.soundStatus = false; + } + + core.material.ground = new Image(); + core.material.ground.src = "images/ground.png"; + + core.loader(function () { + console.log(core.material); + // core.playGame(); + core.showStartAnimate(function() {}); + }); +} + +core.prototype.showStartAnimate = function (callback) { + core.dom.startPanel.style.opacity=1; + core.dom.startPanel.style.display="block"; + core.dom.startTop.style.opacity=1; + core.dom.startTop.style.display="block"; + core.dom.startButtonGroup.style.display = 'none'; + core.dom.startButtons.style.display = 'block'; + core.dom.levelChooseButtons.style.display = 'none'; + core.status.played = false; + core.clearStatus(); + core.clearMap('all'); + + var opacityVal = 1; + var startAnimate = window.setInterval(function () { + opacityVal -= 0.03; + if (opacityVal < 0) { + clearInterval(startAnimate); + core.dom.startTop.style.display = 'none'; + // core.playGame(); + core.dom.startButtonGroup.style.display = 'block'; + if (core.isset(callback)) callback(); + } + core.dom.startTop.style.opacity = opacityVal; + }, 20); +} + +core.prototype.hideStartAnimate = function (callback) { + var opacityVal = 1; + var startAnimate = window.setInterval(function () { + opacityVal -= 0.03; + if (opacityVal < 0) { + clearInterval(startAnimate); + core.dom.startPanel.style.display = 'none'; + callback(); + } + core.dom.startPanel.style.opacity = opacityVal; + }, 20); +} + +core.prototype.setStartProgressVal = function (val) { + core.dom.startTopProgress.style.width = val + '%'; +} + +core.prototype.setStartLoadTipText = function (text) { + core.dom.startTopLoadTips.innerHTML = text; +} + +core.prototype.loader = function (callback) { + var loadedImageNum = 0, allImageNum = 0, loadSoundNum = 0, allSoundNum = 0; + allImageNum = core.images.length; + for (var key in core.sounds) { + allSoundNum += core.sounds[key].length; + } + for (var i = 0; i < core.images.length; i++) { + core.loadImage(core.images[i], function (imgName, image) { + core.setStartLoadTipText('正在加载图片 ' + imgName + "..."); + imgName = imgName.split('-'); + imgName = imgName[0]; + core.material.images[imgName] = image; + loadedImageNum++; + core.setStartLoadTipText(imgName + ' 加载完毕...'); + core.setStartProgressVal(loadedImageNum * (100 / allImageNum)); + if (loadedImageNum == allImageNum) { + // 加载音频 + for (var key in core.sounds) { + for (var i = 0; i < core.sounds[key].length; i++) { + var soundName=core.sounds[key][i]; + soundName = soundName.split('-'); + var sound = new Audio(); + sound.preload = 'none'; + sound.src = 'sounds/' + soundName[0] + '.' + key; + if (soundName[1] == 'loop') { + sound.loop = 'loop'; + } + + if (!core.isset(core.material.sounds[key])) + core.material.sounds[key] = {}; + core.material.sounds[key][soundName[0]] = sound; + } + } + callback(); + } + }); + } +} + +core.prototype.loadImage = function (imgName, callback) { + try { + core.setStartLoadTipText('加载图片 ' + imgName + ' 中...'); + var image = new Image(); + image.src = 'images/' + imgName + '.png'; + if (image.complete) { + callback(imgName, image); + return; + } + image.onload = function () { + callback(imgName, image); + } + } + catch (e) { + alert(e); + } +} + +core.prototype.loadSound = function() { + if (!core.isset(core.material.sounds.mp3)) return; + if (core.musicStatus.isIOS) return; + if (core.musicStatus.loaded) return; + core.musicStatus.loaded=true; + console.log("加载音乐"); + + var toLoadList = []; + + for (var key in core.material.sounds) { + for (var name in core.material.sounds[key]) { + toLoadList.push(core.material.sounds[key][name]); + } + } + core.loadSoundItem(toLoadList); +} + +core.prototype.loadSoundItem = function (toLoadList) { + if (toLoadList.length==0) { + // if (core.musicStatus.bgmStatus==0) core.musicStatus.bgmStatus=-1; + if (core.musicStatus.bgmStatus>0) return; + core.musicStatus.bgmStatus=1; + if (core.musicStatus.soundStatus) + core.playBgm('bgm', 'mp3'); + return; + } + var item = toLoadList.shift(); + item.oncanplay = function() { + core.loadSoundItem(toLoadList); + } + item.load(); +} + +core.prototype.isPlaying = function() { + if (core.isset(core.status.played) && core.status.played) + return true; + return false; +} + + +core.prototype.clearStatus = function() { + // 停止各个Timeout和Interval + for (var i in core.interval) { + clearInterval(core.interval[i]); + } + core.status = {}; + core.clearStatusBar(); + core.resize(main.dom.body.clientWidth, main.dom.body.clientHeight); +} + +core.prototype.resetStatus = function(hero, hard, floorId, maps) { + + // 停止各个Timeout和Interval + for (var i in core.interval) { + clearInterval(core.interval[i]); + } + + // 初始化status + core.status = core.clone(core.initStatus); + core.status.played = true; + // 初始化maps + core.status.floorId = floorId; + core.status.maps = core.clone(maps); + // 初始化怪物 + core.material.enemys = core.clone(core.enemys.getEnemys()); + // 初始化人物属性 + core.status.hero = core.clone(hero); + core.status.hard = hard; + // 保存页面 + core.status.savePage = core.getLocalStorage('savePage', 0); + + core.resize(main.dom.body.clientWidth, main.dom.body.clientHeight); + +} + +core.prototype.startGame = function (hard, callback) { + console.log('开始游戏'); + + core.resetStatus(core.firstData.hero, hard, core.firstData.floorId, + core.initStatus.maps); + + core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, function() { + core.setHeroMoveTriggerInterval(); + if (core.isset(callback)) callback(); + }); +} + + +core.prototype.restart = function() { + + /* + core.resetStatus(core.firstData.hero, core.firstData.hard, core.firstData.floorId, + core.initStatus.maps); + + core.changeFloor(core.firstData.floorId, null, core.firstData.hero.loc, function() { + core.drawTip('重新开始游戏'); + core.setHeroMoveTriggerInterval(); + }); + + */ + core.showStartAnimate(); +} + +/////////// 系统事件相关 END /////////// + + + + +/////////// 键盘、鼠标事件相关 /////////// + +core.prototype.keyDown = function(e) { + if(!core.status.played) { + return; + } + if(core.status.automaticRouting || core.status.automaticRouted) { + core.stopAutomaticRoute(); + } + if (core.status.lockControl) { + if (core.status.event.id == 'book') { + if (e.keyCode==37) core.ui.drawEnemyBook(core.status.event.data - 1); + else if (e.keyCode==39) core.ui.drawEnemyBook(core.status.event.data + 1); + return; + } + if (core.status.event.id == 'fly') { + if (e.keyCode==38) core.ui.drawFly(core.status.event.data+1); + else if (e.keyCode==40) core.ui.drawFly(core.status.event.data-1); + return; + } + if (core.status.event.id == 'save' || core.status.event.id == 'load') { + if (e.keyCode==37) core.ui.drawSLPanel(core.status.event.data-1); + else if (e.keyCode==39) core.ui.drawSLPanel(core.status.event.data+1); + return; + } + return; + } + switch(e.keyCode) { + case 37: + core.moveHero('left'); + break; + case 38: + core.moveHero('up'); + break; + case 39: + core.moveHero('right'); + break; + case 40: + core.moveHero('down'); + break; + } +} + +core.prototype.keyUp = function(e) { + if(!core.status.played) { + return; + } + + if (core.status.lockControl) { + if (core.status.event.id == 'book' && (e.keyCode==27 || e.keyCode==88)) + core.ui.closePanel(true); + if (core.status.event.id == 'fly' && (e.keyCode==71 || e.keyCode==27)) + core.ui.closePanel(); + if (core.status.event.id == 'fly' && e.keyCode==13) { + var index=core.status.hero.flyRange.indexOf(core.status.floorId); + var stair=core.status.event.datamax){ + index=ii; + max=directionDistance[ii]; + } + } + pos=[{'x':0,'y':1},{'x':-1,'y':0},{'x':0,'y':-1},{'x':1,'y':0},false][index] + if(pos){ + pos.x+=pos0.x; + pos.y+=pos0.y; + core.status.stepPostfix.push(pos); + core.fillPosWithPoint(pos); + } +} + +core.prototype.onup = function () { + core.status.holdingPath=0; + if(core.status.stepPostfix.length>0){ + var stepPostfix = []; + var direction={'0':{'1':'down','-1':'up'},'-1':{'0':'left'},'1':{'0':'right'}}; + for(var ii=1;ii12 || y>12) return; + + // 寻路 + if (!core.status.lockControl) { + core.setAutomaticRoute(x, y, stepPostfix); + return; + } + + // 怪物手册 + if (core.status.event.id == 'book') { + core.events.clickBook(x,y); + return; + } + + // 楼层飞行器 + if (core.status.event.id == 'fly') { + core.events.clickFly(x,y); + return; + } + + // 设置 + if (core.status.event.id == 'settings') { + core.events.clickSettings(x,y); + return; + } + + // 商店 + if (core.status.event.id == 'shop') { + core.events.clickShop(x,y); + return; + } + + // 快捷商店 + if (core.status.event.id == 'selectShop') { + core.events.clickSelectShop(x,y); + return; + } + + // 工具栏 + if (core.status.event.id == 'toolbox') { + core.events.clickToolbox(x,y); + return; + } + + // 存读档 + if (core.status.event.id == 'save' || core.status.event.id == 'load') { + core.events.clickSL(x,y); + return; + } + + // 选项 + if (core.status.event.id == 'confirmBox') { + if ((x == 4 || x == 5) && y == 7 && core.isset(core.status.event.data.yes)) + core.status.event.data.yes(); + if ((x == 7 || x == 8) && y == 7 && core.isset(core.status.event.data.no)) + core.status.event.data.no(); + return; + } + + // 关于 + if (core.status.event.id == 'about') { + if (core.isPlaying()) + core.ui.closePanel(false); + else + core.showStartAnimate(); + return; + } + + // 纯文本 + if (core.status.event.id == 'text') { + core.drawText(); + return; + } + + // NPC + if (core.status.event.id == 'npc') { + core.events.clickNPC(x,y); + return; + } + + // 同步存档 + if (core.status.event.id == 'syncSave') { + if (x>=4 && x<=8) { + if (y==5) { + core.ui.drawConfirmBox("你确定要将本地存档同步到服务器吗?", function(){ + // console.log("同步存档..."); + core.ui.drawWaiting("正在同步,请稍后..."); + + var formData = new FormData(); + formData.append('type', 'save'); + var saves = []; + for (var i=1;i<=180;i++) { + var data = core.getLocalStorage("save"+i, null); + if (core.isset(data)) { + saves.push(data); + } + } + var save_text = JSON.stringify(saves); + formData.append('data', save_text); + + // send + var xhr = new XMLHttpRequest(); + xhr.open("POST", "../sync.php"); + xhr.timeout = 1000; + xhr.onload = function(e) { + if (xhr.status==200) { + // console.log("同步成功。"); + var response = JSON.parse(xhr.response); + if (response.code<0) { + core.drawText("出错啦!\n无法同步存档到服务器。"); + } + else { + core.drawText("同步成功!\n\n您的存档编号: "+response.code+"\n您的存档密码: "+response.msg+"\n\n请牢记以上两个信息(如截图等),在从服务器\n同步存档时使用。") + } + } + else { + core.drawText("出错啦!\n无法同步存档到服务器。"); + } + }; + xhr.ontimeout = function(e) { + console.log(e); + core.drawText("出错啦!\n无法同步存档到服务器。"); + } + xhr.onerror = function(e) { + console.log(e); + core.drawText("出错啦!\n无法同步存档到服务器。"); + } + xhr.send(formData); + }, function() { + core.ui.drawSyncSave(); + }) + } + if (y==6) { + core.ui.drawConfirmBox("你确定要从服务器加载存档吗?\n该操作将覆盖所有本地存档且不可逆!", function(){ + var id = prompt("请输入存档编号:"); + if (id==null || id=="") { + core.ui.drawSyncSave(); return; + } + var password = prompt("请输入存档密码:"); + if (password==null || password=="") { + core.ui.drawSyncSave(); return; + } + core.ui.drawWaiting("正在同步,请稍后..."); + + var formData = new FormData(); + formData.append('type', 'load'); + formData.append('id', id); + formData.append('password', password); + + // send + var xhr = new XMLHttpRequest(); + xhr.open("POST", "../sync.php"); + xhr.timeout = 1000; + xhr.onload = function(e) { + if (xhr.status==200) { + // console.log("同步成功。"); + var response = JSON.parse(xhr.response); + switch (response.code) { + case 0: + // 成功 + var data=JSON.parse(response.msg); + // console.log(data); + for (var i=1;i<=180;i++) { + if (i<=data.length) { + core.setLocalStorage("save"+i, data[i-1]); + } + else { + core.removeLocalStorage("save"+i); + } + } + core.drawText("同步成功!\n你的本地所有存档均已被覆盖。"); + break; + case -1: + core.drawText("出错啦!\n存档编号"+id+"不存在!"); + break; + case -2: + core.drawText("出错啦!\n存档密码错误!"); + break; + default: + core.drawText("出错啦!\n无法从服务器同步存档。"); + break; + } + + } + else { + core.drawText("出错啦!\n无法从服务器同步存档。"); + } + }; + xhr.ontimeout = function(e) { + console.log(e); + core.drawText("出错啦!\n无法从服务器同步存档。"); + } + xhr.onerror = function(e) { + console.log(e); + core.drawText("出错啦!\n无法从服务器同步存档。"); + } + xhr.send(formData); + }, function() { + core.ui.drawSyncSave(); + }) + } + } + if (x>=5 && x<=7 && y==7) { + core.ui.drawSettings(false); + } + } + +} + +core.prototype.onmousewheel = function (direct) { + // 楼层飞行器 + if (core.status.lockControl && core.status.event.id == 'fly') { + if (direct==-1) core.ui.drawFly(core.status.event.data-1); + if (direct==1) core.ui.drawFly(core.status.event.data+1); + return; + } +} + +/////////// 键盘、鼠标事件相关 END /////////// + + + + +/////////// 寻路代码相关 /////////// + +core.prototype.clearAutomaticRouteNode = function (x, y) { + core.canvas.ui.clearRect(x * 32 + 5, y * 32 + 5, 27, 27); +} + +core.prototype.stopAutomaticRoute = function () { + if (!core.status.played) { + return; + } + core.stopAutoHeroMove(); + core.status.automaticRouting = false; + core.status.automaticRouted = false; + core.status.autoStepRoutes = []; + core.status.automaticRoutingTemp = {'destX': 0, 'destY': 0, 'moveStep': []}; + if (core.status.moveStepBeforeStop.length==0) + core.canvas.ui.clearRect(0, 0, 416, 416); +} + +core.prototype.continueAutomaticRoute = function () { + //此函数只应由events.afterOpenDoor和events.afterBattle调用 + var moveStep = core.status.moveStepBeforeStop; + core.status.moveStepBeforeStop = []; + if(moveStep.length===0)return; + if(moveStep.length===1 && moveStep[0].step===1)return; + core.status.automaticRouting = true; + core.setAutoHeroMove(moveStep); +} + +core.prototype.clearContinueAutomaticRoute = function () { + core.canvas.ui.clearRect(0, 0, 416, 416); + core.status.moveStepBeforeStop=[]; +} + +core.prototype.setAutomaticRoute = function (destX, destY, stepPostfix) { + if (!core.status.played || core.status.lockControl) { + return; + } + else if (core.status.automaticRouting) { + core.stopAutomaticRoute(); + return; + } + if (destX == core.status.hero.loc.x && destY == core.status.hero.loc.y) { + core.turnHero(); + return; + } + // 直接移动 + /* + if(core.status.automaticRoutingTemp.moveStep.length != 0 && core.status.automaticRoutingTemp.destX == destX && core.status.automaticRoutingTemp.destY == destY) { + core.status.automaticRouting = true; + core.setAutoHeroMove(core.status.automaticRoutingTemp.moveStep); + core.status.automaticRoutingTemp = {'destX': 0, 'destY': 0, 'moveStep': []}; + return; + } + */ + var step = 0; + var tempStep = null; + var moveStep; + core.status.automaticRoutingTemp = {'destX': 0, 'destY': 0, 'moveStep': []}; + if (!(moveStep = core.automaticRoute(destX, destY))) { + core.canvas.ui.clearRect(0, 0, 416, 416); + return false; + } + moveStep=moveStep.concat(stepPostfix); + core.status.automaticRoutingTemp.destX = destX; + core.status.automaticRoutingTemp.destY = destY; + core.canvas.ui.save(); + core.canvas.ui.clearRect(0, 0, 416, 416); + core.canvas.ui.fillStyle = '#bfbfbf'; + core.canvas.ui.strokeStyle = '#bfbfbf'; + core.canvas.ui.lineWidth = 8; + for (var m = 0; m < moveStep.length; m++) { + if (tempStep == null) { + step++; + tempStep = moveStep[m].direction; + } + else if (tempStep == moveStep[m].direction) { + step++; + } + else { + core.status.automaticRoutingTemp.moveStep.push({'direction': tempStep, 'step': step}); + step = 1; + tempStep = moveStep[m].direction; + } + if (m == moveStep.length - 1) { + core.status.automaticRoutingTemp.moveStep.push({'direction': tempStep, 'step': step}); + core.canvas.ui.fillRect(moveStep[m].x * 32 + 10, moveStep[m].y * 32 + 10, 12, 12); + } + else { + core.canvas.ui.beginPath(); + if (core.isset(moveStep[m + 1]) && tempStep != moveStep[m + 1].direction) { + if (tempStep == 'up' && moveStep[m + 1].direction == 'left' || tempStep == 'right' && moveStep[m + 1].direction == 'down') { + core.canvas.ui.moveTo(moveStep[m].x * 32 + 5, moveStep[m].y * 32 + 16); + core.canvas.ui.lineTo(moveStep[m].x * 32 + 16, moveStep[m].y * 32 + 16); + core.canvas.ui.lineTo(moveStep[m].x * 32 + 16, moveStep[m].y * 32 + 27); + } + else if (tempStep == 'up' && moveStep[m + 1].direction == 'right' || tempStep == 'left' && moveStep[m + 1].direction == 'down') { + core.canvas.ui.moveTo(moveStep[m].x * 32 + 27, moveStep[m].y * 32 + 16); + core.canvas.ui.lineTo(moveStep[m].x * 32 + 16, moveStep[m].y * 32 + 16); + core.canvas.ui.lineTo(moveStep[m].x * 32 + 16, moveStep[m].y * 32 + 27); + } + else if (tempStep == 'left' && moveStep[m + 1].direction == 'up' || tempStep == 'down' && moveStep[m + 1].direction == 'right') { + core.canvas.ui.moveTo(moveStep[m].x * 32 + 27, moveStep[m].y * 32 + 16); + core.canvas.ui.lineTo(moveStep[m].x * 32 + 16, moveStep[m].y * 32 + 16); + core.canvas.ui.lineTo(moveStep[m].x * 32 + 16, moveStep[m].y * 32 + 5); + } + else if (tempStep == 'right' && moveStep[m + 1].direction == 'up' || tempStep == 'down' && moveStep[m + 1].direction == 'left') { + core.canvas.ui.moveTo(moveStep[m].x * 32 + 5, moveStep[m].y * 32 + 16); + core.canvas.ui.lineTo(moveStep[m].x * 32 + 16, moveStep[m].y * 32 + 16); + core.canvas.ui.lineTo(moveStep[m].x * 32 + 16, moveStep[m].y * 32 + 5); + } + core.canvas.ui.stroke(); + continue; + } + switch (tempStep) { + case 'up': + case 'down': + core.canvas.ui.beginPath(); + core.canvas.ui.moveTo(moveStep[m].x * 32 + 16, moveStep[m].y * 32 + 5); + core.canvas.ui.lineTo(moveStep[m].x * 32 + 16, moveStep[m].y * 32 + 27); + core.canvas.ui.stroke(); + break; + case 'left': + case 'right': + core.canvas.ui.beginPath(); + core.canvas.ui.moveTo(moveStep[m].x * 32 + 5, moveStep[m].y * 32 + 16); + core.canvas.ui.lineTo(moveStep[m].x * 32 + 27, moveStep[m].y * 32 + 16); + core.canvas.ui.stroke(); + break; + } + } + } + core.canvas.ui.restore(); + core.status.automaticRouted = true; + + // 立刻移动 + core.status.automaticRouting = true; + // core.setAutoHeroMove(core.status.automaticRoutingTemp.moveStep); + core.setAutoHeroMove(core.status.automaticRoutingTemp.moveStep); + core.status.automaticRoutingTemp = {'destX': 0, 'destY': 0, 'moveStep': []}; + +} +// BFS +core.prototype.automaticRoute = function (destX, destY) { + var startX = core.getHeroLoc('x'); + var startY = core.getHeroLoc('y'); + var nowX = startX; + var nowY = startY; + var scanItem = {'x': 0, 'y': 0}; + var scan = { + 'up': {'x': 0, 'y': -1}, + 'left': {'x': -1, 'y': 0}, + 'down': {'x': 0, 'y': 1}, + 'right': {'x': 1, 'y': 0} + }; + var queue = []; + var nowDeep = 0; + var route = []; + var ans = [] + + if (destX == startX && destY == startY) return false; + queue.push(13 * startX + startY); + queue.push(-1); + route[13 * startX + startY] = ''; + + while (queue.length != 1) { + var f = queue.shift(); + if (f===-1) {nowDeep+=1;queue.push(-1);continue;} + var deep = ~~(f/169); + if (deep!==nowDeep) {queue.push(f);continue;} + f=f%169; + var nowX = parseInt(f / 13), nowY = f % 13; + + for (var direction in scan) { + + var nx = nowX + scan[direction].x; + var ny = nowY + scan[direction].y; + if (nx<0 || nx>12 || ny<0 || ny>12) continue; + var nid = 13 * nx + ny; + + if (core.isset(route[nid])) continue; + + if (nx == destX && ny == destY) { + route[nid] = direction; + break; + } + if (core.noPassExists(nx, ny)) + continue; + var deepAdd=1; + if (core.idEndWith(nx,ny,'lavaNet')) deepAdd=100; + // 自动绕过血瓶 + if (!core.flags.potionWhileRouting && core.idEndWith(nx,ny,'Potion')) deepAdd=20; + route[nid] = direction; + queue.push(169*(nowDeep+deepAdd)+nid); + } + if (core.isset(route[13 * destX + destY])) break; + } + + if (!core.isset(route[13 * destX + destY])) { + return false; + } + + var nowX = destX, nowY = destY; + while (nowX != startX || nowY != startY) { + var dir = route[13 * nowX + nowY]; + ans.push({'direction': dir, 'x': nowX, 'y': nowY}); + nowX -= scan[dir].x; + nowY -= scan[dir].y; + } + + ans.reverse(); + return ans; +} + +core.prototype.fillPosWithPoint = function (pos) { + core.fillRect('ui', pos.x*32+12,pos.y*32+12,8,8, '#bfbfbf'); +} + +core.prototype.clearStepPostfix = function () { + if(core.status.mouseOutCheck >0){ + core.status.mouseOutCheck--; + window.setTimeout(core.clearStepPostfix,1000); + return; + } + core.status.holdingPath=0; + if(core.status.stepPostfix.length>0){ + core.status.stepPostfix=[]; + core.canvas.ui.clearRect(0, 0, 416,416); + core.canvas.ui.restore(); + } +} + +/////////// 寻路代码相关 END /////////// + + + +/////////// 自动行走 & 行走控制 /////////// + +core.prototype.stopAutoHeroMove = function () { + core.status.autoHeroMove = false; + core.status.automaticRouting = false; + core.status.automaticRouted = false; + core.status.autoStep = 0; + core.status.destStep = 0; + core.status.movedStep = 0; + core.status.autoStepRoutes = []; + core.stopHero(); + clearInterval(core.interval.heroAutoMoveScan); +} + +core.prototype.setAutoHeroMove = function (steps, start) { + if (steps.length == 0) { + return; + } + core.status.autoStepRoutes = steps; + core.status.autoStep = 0; + clearInterval(core.interval.heroAutoMoveScan); + core.interval.heroAutoMoveScan = window.setInterval(function () { + if (!core.status.autoHeroMove) { + if (core.status.autoStep == core.status.autoStepRoutes.length) { + core.stopAutoHeroMove(); + return; + } + core.autoHeroMove(core.status.autoStepRoutes[core.status.autoStep].direction, core.status.autoStepRoutes[core.status.autoStep].step); + core.status.autoStep++; + } + }, 80); +} + +core.prototype.autoHeroMove = function (direction, step) { + core.status.autoHeroMove = true; + core.status.destStep = step; + core.moveHero(direction); +} + +core.prototype.setHeroMoveInterval = function (direction, x, y, callback) { + if (core.status.heroMoving) { + return; + } + core.status.heroMoving = true; + var moveStep = 0; + core.interval.heroMoveInterval = window.setInterval(function () { + switch (direction) { + case 'up': + moveStep -= 4; + if (moveStep == -4 || moveStep == -8 || moveStep == -12 || moveStep == -16) { + core.drawHero(direction, x, y, 'leftFoot', 0, moveStep); + } + else if (moveStep == -20 || moveStep == -24 || moveStep == -28 || moveStep == -32) { + core.drawHero(direction, x, y, 'rightFoot', 0, moveStep); + } + if (moveStep == -32) { + core.setHeroLoc('y', '--'); + core.moveOneStep(); + if (core.status.heroStop) { + core.drawHero(direction, x, y - 1, 'stop'); + } + if (core.isset(callback)) { + callback(); + } + } + break; + case 'left': + moveStep -= 4; + if (moveStep == -4 || moveStep == -8 || moveStep == -12 || moveStep == -16) { + core.drawHero(direction, x, y, 'leftFoot', moveStep); + } + else if (moveStep == -20 || moveStep == -24 || moveStep == -28 || moveStep == -32) { + core.drawHero(direction, x, y, 'rightFoot', moveStep); + } + if (moveStep == -32) { + core.setHeroLoc('x', '--'); + core.moveOneStep(); + if (core.status.heroStop) { + core.drawHero(direction, x - 1, y, 'stop'); + } + if (core.isset(callback)) { + callback(); + } + } + break; + case 'down': + moveStep+=4; + if(moveStep == 4 || moveStep == 8 || moveStep == 12 || moveStep == 16) { + core.drawHero(direction, x, y, 'leftFoot', 0, moveStep); + } + else if(moveStep == 20 || moveStep == 24 ||moveStep == 28 || moveStep == 32) { + core.drawHero(direction, x, y, 'rightFoot', 0, moveStep); + } + if (moveStep == 32) { + core.setHeroLoc('y', '++'); + core.moveOneStep(); + if (core.status.heroStop) { + core.drawHero(direction, x, y + 1, 'stop'); + } + if (core.isset(callback)) { + callback(); + } + } + break; + case 'right': + moveStep+=4; + if(moveStep == 4 || moveStep == 8 || moveStep == 12 || moveStep == 16) { + core.drawHero(direction, x, y, 'leftFoot', moveStep); + } + else if(moveStep == 20 || moveStep == 24 ||moveStep == 28 || moveStep == 32) { + core.drawHero(direction, x, y, 'rightFoot', moveStep); + } + if (moveStep == 32) { + core.setHeroLoc('x', '++'); + core.moveOneStep(); + if (core.status.heroStop) { + core.drawHero(direction, x + 1, y, 'stop'); + } + if (core.isset(callback)) { + callback(); + } + } + break; + } + }, 10); +} + +core.prototype.setHeroMoveTriggerInterval = function () { + var direction, x, y; + var scan = { + 'up': {'x': 0, 'y': -1}, + 'left': {'x': -1, 'y': 0}, + 'down': {'x': 0, 'y': 1}, + 'right': {'x': 1, 'y': 0} + }; + core.interval.heroMoveTriggerInterval = window.setInterval(function () { + if (!core.status.heroStop) { + direction = core.getHeroLoc('direction'); + x = core.getHeroLoc('x'); + y = core.getHeroLoc('y'); + var noPass; + noPass = core.noPass(x + scan[direction].x, y + scan[direction].y); + if (noPass) { + core.trigger(x + scan[direction].x, y + scan[direction].y); + core.drawHero(direction, x, y, 'stop'); + if (core.status.autoHeroMove) { + core.status.movedStep++; + if (core.status.destStep == core.status.movedStep) { + core.status.autoHeroMove = false; + core.status.destStep = 0; + core.status.movedStep = 0; + // core.stopHero(); + core.status.moveStepBeforeStop=[]; + core.stopAutomaticRoute(); + } + } + else { + core.status.heroStop = true; + } + return; + } + core.setHeroMoveInterval(direction, x, y, function () { + if (core.status.autoHeroMove) { + core.status.movedStep++; + if (core.status.destStep == core.status.movedStep) { + core.status.autoHeroMove = false; + core.status.destStep = 0; + core.status.movedStep = 0; + core.stopHero(); + core.drawHero(core.getHeroLoc('direction'), core.getHeroLoc('x'), core.getHeroLoc('y'), 'stop'); + } + } + else if (core.status.heroStop) { + core.drawHero(core.getHeroLoc('direction'), core.getHeroLoc('x'), core.getHeroLoc('y'), 'stop'); + } + core.trigger(core.getHeroLoc('x'), core.getHeroLoc('y')); + clearInterval(core.interval.heroMoveInterval); + core.status.heroMoving = false; + }); + } + }, 50); +} + +core.prototype.turnHero = function(direction) { + if (core.isset(direction)) { + core.status.hero.loc.direction = direction; + } + else if (core.status.hero.loc.direction == 'up') core.status.hero.loc.direction = 'right'; + else if (core.status.hero.loc.direction == 'right') core.status.hero.loc.direction = 'down'; + else if (core.status.hero.loc.direction == 'down') core.status.hero.loc.direction = 'left'; + else if (core.status.hero.loc.direction == 'left') core.status.hero.loc.direction = 'up'; + core.drawHero(core.status.hero.loc.direction, core.status.hero.loc.x, core.status.hero.loc.y, 'stop', 0, 0); + core.status.automaticRoutingTemp = {'destX': 0, 'destY': 0, 'moveStep': []}; + core.canvas.ui.clearRect(0, 0, 416, 416); +} + +core.prototype.moveHero = function (direction) { + core.setHeroLoc('direction', direction); + core.status.heroStop = false; +} + +core.prototype.moveOneStep = function() { + core.status.hero.steps++; +} + +core.prototype.waitHeroToStop = function(callback) { + core.stopAutomaticRoute(); + if (core.isset(callback)) { + core.lockControl(); + setTimeout(function(){callback()}, 30); + } +} + +core.prototype.stopHero = function () { + core.status.heroStop = true; +} + +core.prototype.drawHero = function (direction, x, y, status, offsetX, offsetY) { + offsetX = offsetX || 0; + offsetY = offsetY || 0; + core.clearAutomaticRouteNode(x, y); + var heroIcon = core.material.icons.heros[core.status.hero.id][direction]; + x = x * heroIcon.size; + y = y * heroIcon.size; + core.canvas.hero.clearRect(x - 32, y - 32, 96, 96); + core.canvas.hero.drawImage(core.material.images.heros, heroIcon.loc[status] * heroIcon.size, heroIcon.loc.iconLoc * heroIcon.size, heroIcon.size, heroIcon.size, x + offsetX, y + offsetY, heroIcon.size, heroIcon.size); +} + +/////////// 自动行走 & 行走控制 END /////////// + + + +/////////// 地图处理 /////////// + +// 开门 +core.prototype.openDoor = function (id, x, y, needKey, callback) { + // 是否存在门 + if (!core.terrainExists(x, y, id)) return; + // core.lockControl(); + if (core.status.moveStepBeforeStop.length==0) { + core.status.moveStepBeforeStop=core.status.autoStepRoutes.slice(core.status.autoStep-1,core.status.autoStepRoutes.length); + if (core.status.moveStepBeforeStop.length>=1)core.status.moveStepBeforeStop[0].step-=core.status.movedStep; + } + core.stopHero(); + core.stopAutomaticRoute(); + if (needKey) { + var key = id.replace("Door", "Key"); + if (!core.useKey(key)) { + if (key != "specialKey") + core.drawTip("你没有" + core.material.items[key].name + "!", "normal"); + else core.drawTip("无法开启此门。"); + core.clearContinueAutomaticRoute(); + return; + } + } + // open + core.playSound("door", "ogg"); + var state = 0; + var door = core.material.icons.animates[id]; + core.interval.openDoorAnimate = window.setInterval(function () { + state++; + if (state == 4) { + clearInterval(core.interval.openDoorAnimate); + core.removeBlock('event', x, y); + core.events.afterOpenDoor(id); + if (core.isset(callback)) callback(); + return; + } + core.canvas.event.clearRect(32 * x, 32 * y, 32, 32); + core.canvas.event.drawImage(core.material.images.animates, 32 * state, 32 * door.loc, 32, 32, 32 * x, 32 * y, 32, 32); + }, 30) +} + +// 战斗 +core.prototype.battle = function (id, x, y, callback) { + if (typeof(core.status.moveStepBeforeStop)=="undefined" || core.status.moveStepBeforeStop.length==0) { + core.status.moveStepBeforeStop=core.status.autoStepRoutes.slice(core.status.autoStep-1,core.status.autoStepRoutes.length); + if (core.status.moveStepBeforeStop.length>=1)core.status.moveStepBeforeStop[0].step-=core.status.movedStep; + } + core.stopHero(); + core.stopAutomaticRoute(); + + var damage = core.enemys.getDamage(id); + if (damage >= core.status.hero.hp) { + core.drawTip("你打不过此怪物!"); + core.clearContinueAutomaticRoute(); + return; + } + core.playSound('attack', 'ogg'); + core.status.hero.hp -= damage; + var money = core.material.enemys[id].money; + if (core.hasItem('coin')) + core.status.hero.money += core.material.enemys[id].money; + core.status.hero.money += money; + core.status.hero.experience += core.material.enemys[id].experience; + core.updateStatusBar(); + core.removeBlock('event', x, y); + core.canvas.event.clearRect(32 * x, 32 * y, 32, 32); + core.updateFg(); + var hint = "打败 " + core.material.enemys[id].name + ",金币+" + money; + if (core.flags.enableExperience) + hint += ",经验+" + core.material.enemys[id].experience; + core.drawTip(hint); + + // 打完怪物,触发事件 + core.events.afterBattle(id); + if (core.isset(callback)) + callback(); +} + +// 楼层切换 +core.prototype.changeFloor = function (floorId, stair, heroLoc, callback) { + core.lockControl(); + core.stopHero(); + core.stopAutomaticRoute(); + core.dom.floorNameLabel.innerHTML = core.status.maps[floorId].title; + if (core.isset(stair)) { + // find heroLoc + heroLoc = core.status.hero.loc; + var blocks = core.status.maps[floorId].blocks; + for (var i in blocks) { + if (core.isset(blocks[i].event) && blocks[i].event.id === stair) { + heroLoc.x = blocks[i].x; + heroLoc.y = blocks[i].y; + } + } + if (core.status.maps[floorId].canFlyTo && core.status.hero.flyRange.indexOf(floorId)<0) { + if (stair=='upFloor') core.status.hero.flyRange.unshift(floorId); + if (stair=='downFloor') core.status.hero.flyRange.push(floorId); + } + } + + window.setTimeout(function () { + // console.log('地图切换到' + floorId); + core.playSound('floor', 'mp3'); + core.mapChangeAnimate('show', function () { + core.statusBar.floor.innerHTML = core.status.maps[floorId].name; + core.updateStatusBar(); + core.drawMap(floorId, function () { + core.hide(core.dom.floorMsgGroup, 10, function () { + core.unLockControl(); + core.events.afterChangeFloor(floorId); + if (core.isset(callback)) callback(); + }); + core.setHeroLoc('direction', heroLoc.direction); + core.setHeroLoc('x', heroLoc.x); + core.setHeroLoc('y', heroLoc.y); + core.drawHero(core.getHeroLoc('direction'), core.getHeroLoc('x'), core.getHeroLoc('y'), 'stop'); + core.updateFg(); + }); + }); + }, 50); +} + +// 地图切换 +core.prototype.mapChangeAnimate = function (mode, callback) { + if (mode == 'show') { + core.show(core.dom.floorMsgGroup, 15, function () { + callback(); + }); + } + else { + core.hide(core.dom.floorMsgGroup, 20, function () { + callback(); + }); + } +} + +core.prototype.clearMap = function (map, x, y, width, height) { + if (map == 'all') { + for (var m in core.canvas) { + core.canvas[m].clearRect(0, 0, 416, 416); + } + } + else { + core.canvas[map].clearRect(x, y, width, height); + } +} + +core.prototype.fillText = function (map, text, x, y, style, font) { + if (core.isset(style)) { + core.setFillStyle(map, style); + } + if (core.isset(font)) { + core.setFont(map, font); + } + core.canvas[map].fillText(text, x, y); +} + +core.prototype.fillRect = function (map, x, y, width, height, style) { + if (core.isset(style)) { + core.setFillStyle(map, style); + } + core.canvas[map].fillRect(x, y, width, height); +} + +core.prototype.strokeRect = function (map, x, y, width, height, style, lineWidth) { + if (core.isset(style)) { + core.setStrokeStyle(map, style); + } + if (core.isset(lineWidth)) { + core.setLineWidth(map, lineWidth); + } + core.canvas[map].strokeRect(x, y, width, height); +} + +core.prototype.drawBlock = function (map, image, cutX, cutY, x, y, size, zoom, clear) { + zoom = zoom || 1; + if (core.isset(clear) && clear == true) { + core.canvas[map].clearRect(x * size, y * size, size, size); + } + core.canvas[map].drawImage(core.material.images[image], cutX * size, cutY * size, size, size, x * size, y * size, size * zoom, size * zoom); +} + +core.prototype.setFont = function (map, font) { + core.canvas[map].font = font; +} + +core.prototype.setLineWidth = function (map, lineWidth) { + if (map == 'all') { + for (var m in core.canvas) { + core.canvas[m].lineWidth = lineWidth; + } + } + core.canvas[map].lineWidth = lineWidth; +} + +core.prototype.saveCanvas = function (map) { + core.canvas[map].save(); +} + +core.prototype.loadCanvas = function (map) { + core.canvas[map].restore(); +} + +core.prototype.setOpacity = function (map, opacity) { + if (map == 'all') { + for (var m in core.canvas) { + core.canvas[m].globalAlpha = opacity; + } + } + core.canvas[map].globalAlpha = opacity; +} + +core.prototype.setStrokeStyle = function (map, style) { + if (map == 'all') { + for (var m in core.canvas) { + core.canvas[m].strokeStyle = style; + } + } + else { + core.canvas[map].strokeStyle = style; + } +} + +core.prototype.setAlpha = function (map, alpha) { + if (map == 'all') { + for (var m in core.canvas) { + core.canvas[m].globalAlpha = alpha; + } + } + else core.canvas[map].globalAlpha = alpha; +} + +core.prototype.setOpacity = function (map, opacity) { + if (map == 'all') { + for (var m in core.canvas) { + core.canvas[m].canvas.style.opacity = opacity; + } + } + else core.canvas[map].canvas.style.opacity = opacity; +} + +core.prototype.setFillStyle = function (map, style) { + if (map == 'all') { + for (var m in core.canvas) { + core.canvas[m].fillStyle = style; + } + } + else { + core.canvas[map].fillStyle = style; + } +} + +/** + * 地图绘制 + * @param mapName 地图ID + * @param callback 绘制完毕后的回调函数 + */ +core.prototype.drawMap = function (mapName, callback) { + var mapData = core.status.maps[mapName]; + var mapBlocks = mapData.blocks; + core.status.floorId = mapName; + core.status.thisMap = mapData; + var x, y, blockIcon, blockImage; + core.clearMap('all'); + core.rmGlobalAnimate(null, null, true); + core.enabledAllTrigger(); + for (x = 0; x < 13; x++) { + for (y = 0; y < 13; y++) { + blockIcon = core.material.icons.terrains.ground; + blockImage = core.material.images.terrains; + core.canvas.bg.drawImage(blockImage, 0, blockIcon.loc * blockIcon.size, blockIcon.size, blockIcon.size, x * blockIcon.size, y * blockIcon.size, blockIcon.size, blockIcon.size); + } + } + x = 0; + y = 0; + for (var b = 0; b < mapBlocks.length; b++) { + if (core.isset(mapBlocks[b].bg)) { + blockIcon = core.material.icons[mapBlocks[b].bg.cls][mapBlocks[b].bg.id]; + blockImage = core.material.images[mapBlocks[b].bg.cls]; + x = mapBlocks[b].x * blockIcon.size; + y = mapBlocks[b].y * blockIcon.size; + if (mapBlocks[b].bg.cls != 'empty') { + core.canvas.bg.drawImage(blockImage, 0, blockIcon.loc * blockIcon.size, blockIcon.size, blockIcon.size, x, y, blockIcon.size, blockIcon.size); + core.addGlobalAnimate(mapBlocks[b].bg.animate, x, y, 'bg', blockIcon.loc, blockIcon.size, blockImage); + } + else { + core.canvas.bg.clearRect(x, y, blockIcon.size, blockIcon.size); + } + } + else { + blockIcon = core.material.icons.terrains.ground; + blockImage = core.material.images.terrains; + x = mapBlocks[b].x * blockIcon.size; + y = mapBlocks[b].y * blockIcon.size; + core.canvas.bg.drawImage(blockImage, 0, blockIcon.loc * blockIcon.size, blockIcon.size, blockIcon.size, x, y, blockIcon.size, blockIcon.size); + } + if (core.isset(mapBlocks[b].event)) { + blockIcon = core.material.icons[mapBlocks[b].event.cls][mapBlocks[b].event.id]; + blockImage = core.material.images[mapBlocks[b].event.cls]; + core.canvas.event.drawImage(core.material.images[mapBlocks[b].event.cls], 0, blockIcon.loc * blockIcon.size, blockIcon.size, blockIcon.size, x, y, blockIcon.size, blockIcon.size); + core.addGlobalAnimate(mapBlocks[b].event.animate, x, y, 'event', blockIcon.loc, blockIcon.size, blockImage); + } + } + core.setGlobalAnimate(core.firstData.animateSpeed); + if (core.isset(callback)) + callback(); +} + +/** + * 是否存在不可通行节点 + * @param x + * @param y + * @returns {boolean} + */ +core.prototype.noPassExists = function (x, y) { + var blocks = core.status.thisMap.blocks; + for (var n = 0; n < blocks.length; n++) { + if (blocks[n].x == x && blocks[n].y == y && core.isset(blocks[n].event) && core.isset(blocks[n].event.noPass) && blocks[n].event.noPass) { + return true; + } + } + return false; +} + +/** + * 是否存在NPC节点 + * @param x + * @param y + * @returns {boolean} + */ +core.prototype.npcExists = function (x, y) { + var blocks = core.status.thisMap.blocks; + for (var n = 0; n < blocks.length; n++) { + if (blocks[n].x == x && blocks[n].y == y && core.isset(blocks[n].event) && blocks[n].event.cls == 'npcs') { + return true; + } + } + return false; +} + +/** + * 是否存在地形 + * @param x + * @param y + * @param id + * @returns {boolean} + */ +core.prototype.terrainExists = function (x, y, id) { + if (x > 12 || y > 12 || x < 0 || y < 0) { + return true; + } + if (core.stairExists(x, y)) { + return false; + } + var blocks = core.status.thisMap.blocks; + for (var t = 0; t < blocks.length; t++) { + if (blocks[t].x == x && blocks[t].y == y) { + for (var map in core.canvas) { + if (core.isset(blocks[t][map]) && (blocks[t][map].cls == 'terrains' || (blocks[t][map].cls == 'animates' && core.isset(blocks[t][map].noPass) && blocks[t][map].noPass == true)) && ((core.isset(id) && core.isset(blocks[t][map].id)) ? blocks[t][map].id == id : true)) { + return true; + } + } + } + } + return false; +} + +/** + * 是否存在楼梯 + * @param x + * @param y + * @returns {boolean} + */ +core.prototype.stairExists = function (x, y) { + var blocks = core.status.thisMap.blocks; + for (var s = 0; s < blocks.length; s++) { + if (blocks[s].x == x && blocks[s].y == y && core.isset(blocks[s].event) && blocks[s].event.cls == 'terrains' && core.isset(blocks[s].event.id) && (blocks[s].event.id == 'upFloor' || blocks[s].event.id == 'downFloor')) { + return true; + } + } + return false; +} + +core.prototype.enemyExists = function (x, y, id) { + var blocks = core.status.thisMap.blocks; + for (var e = 0; e < blocks.length; e++) { + if (blocks[e].x == x && blocks[e].y == y && core.isset(blocks[e].event) && blocks[e].event.cls == 'enemys' && ((core.isset(id) && core.isset(blocks[e].event.id)) ? blocks[e].event.id == id : true)) { + return true; + } + } + return false; +} + +core.prototype.idEndWith = function (x, y, idStr) { + var blocks = core.status.thisMap.blocks; + for (var n = 0; n < blocks.length; n++) { + if (blocks[n].x == x && blocks[n].y == y && core.isset(blocks[n].event)) { + var id = blocks[n].event.id; + return id.substring(id.length-idStr.length)==idStr; + } + } + return false; +} + +core.prototype.removeBlock = function (map, x, y) { + var map = map.split(','); + var mapBlocks = core.status.thisMap.blocks; + var blockIcon; + for (var b = 0; b < mapBlocks.length; b++) { + if (mapBlocks[b].x == x && mapBlocks[b].y == y) { + core.rmGlobalAnimate(x, y); + for (var m = 0; m < map.length; m++) { + if (!core.isset(mapBlocks[b][map[m]])) { + continue; + } + blockIcon = core.material.icons[mapBlocks[b][map[m]].cls][mapBlocks[b][map[m]].id]; + core.canvas[map[m]].clearRect(x * blockIcon.size, y * blockIcon.size, blockIcon.size, blockIcon.size); + // delete core.status.thisMap.blocks[b][map[m]]; + } + core.status.thisMap.blocks.splice(b, 1); + break; + } + } +} + +core.prototype.removeBlockByIds = function (floorId, ids) { + ids.sort(function (a,b) {return b-a}).forEach(function (id) { + core.status.maps[floorId].blocks.splice(id, 1); + }); +} + +core.prototype.noPass = function (x, y) { + if (x > 12 || y > 12 || x < 0 || y < 0) { + return true; + } + var mapBlocks = core.status.thisMap.blocks; + var noPass; + for (var b = 0; b < mapBlocks.length; b++) { + if (mapBlocks[b].x == x && mapBlocks[b].y == y) { + return noPass = (mapBlocks[b].event && mapBlocks[b].event.noPass) || (mapBlocks[b].bg && mapBlocks[b].bg.noPass); + } + } +} + +core.prototype.trigger = function (x, y) { + var mapBlocks = core.status.thisMap.blocks; + var noPass; + for (var b = 0; b < mapBlocks.length; b++) { + if (mapBlocks[b].x == x && mapBlocks[b].y == y) { + noPass = (mapBlocks[b].event && mapBlocks[b].event.noPass) || (mapBlocks[b].bg && mapBlocks[b].bg.noPass); + if (noPass) { + core.clearAutomaticRouteNode(x, y); + } + /* + if(core.isset(mapBlocks[b].fg) && core.isset(mapBlocks[b].fg.trigger) && (core.isset(mapBlocks[b].fg.disabledTrigger) ? mapBlocks[b].fg.disabledTrigger == false : true)) { + core.material.events[mapBlocks[b].fg.trigger](mapBlocks[b], core, function(data) { + + }); + } + */ + if (core.isset(mapBlocks[b].event) && core.isset(mapBlocks[b].event.trigger) && (core.isset(mapBlocks[b].event.disabledTrigger) ? mapBlocks[b].event.disabledTrigger == false : true) + && !(core.isset(mapBlocks[b].event.noTriggerCross) && mapBlocks[b].event.noTriggerCross && (core.status.autoHeroMove || core.status.autoStep 0) { + var background = core.canvas.ui.createPattern(core.material.ground, "repeat"); + core.drawBoxAnimate(background); + core.interval.boxAnimate = setInterval(function () { + core.drawBoxAnimate(background); + }, speed); + } +} + +core.prototype.drawBoxAnimate = function (background) { + for (var a = 0; a < core.status.boxAnimateObjs.length; a++) { + var obj = core.status.boxAnimateObjs[a]; + obj.status = obj.status == 0 ? 1 : 0; + core.clearMap('ui', obj.bgx, obj.bgy, obj.bgsize, obj.bgsize); + core.fillRect('ui', obj.bgx, obj.bgy, obj.bgsize, obj.bgsize, background); + core.canvas.ui.drawImage(obj.image, obj.status * obj.icon.size, obj.icon.loc * obj.icon.size, + obj.icon.size, obj.icon.size, obj.x, obj.y, obj.icon.size, obj.icon.size); + } +} + +core.prototype.setHeroLoc = function (itemName, itemVal) { + if (itemVal == '++') { + core.status.hero.loc[itemName]++; + return; + } + else if (itemVal == '--') { + core.status.hero.loc[itemName]--; + return; + } + core.status.hero.loc[itemName] = itemVal; +} + +core.prototype.getHeroLoc = function (itemName) { + return core.status.hero.loc[itemName]; +} + +/** + * 更新显伤 + */ +core.prototype.updateFg = function () { + if (!core.isset(core.status.thisMap) || !core.isset(core.status.thisMap.blocks)) return; + // 更新显伤 + var mapBlocks = core.status.thisMap.blocks; + core.clearMap('fg', 0, 0, 416, 416); + // 没有怪物手册 + if (!core.hasItem('book')) return; + core.setFont('fg', "bold 11px Arial"); + var hero_hp = core.status.hero.hp; + for (var b = 0; b < mapBlocks.length; b++) { + var x = mapBlocks[b].x, y = mapBlocks[b].y; + if (core.isset(mapBlocks[b].event) && mapBlocks[b].event.cls == 'enemys') { + var id = mapBlocks[b].event.id; + + var damage = core.enemys.getDamage(id); + var color = "#000000"; + if (damage <= 0) color = '#00FF00'; + else if (damage < hero_hp / 3) color = '#FFFFFF'; + else if (damage < hero_hp * 2 / 3) color = '#FFFF00'; + else if (damage < hero_hp) color = '#FF7F00'; + else color = '#FF0000'; + + if (damage >= 999999999) damage = "???"; + else if (damage > 100000) damage = (damage / 10000).toFixed(1) + "w"; + + core.setFillStyle('fg', '#000000'); + core.canvas.fg.fillText(damage, 32 * x + 2, 32 * (y + 1) - 2); + core.canvas.fg.fillText(damage, 32 * x, 32 * (y + 1) - 2); + core.canvas.fg.fillText(damage, 32 * x + 2, 32 * (y + 1)); + core.canvas.fg.fillText(damage, 32 * x, 32 * (y + 1)); + + core.setFillStyle('fg', color); + core.canvas.fg.fillText(damage, 32 * x + 1, 32 * (y + 1) - 1); + + } + } +} + + + +/** + * 物品处理 start + */ +core.prototype.itemCount = function (itemId) { + if (!core.isset(itemId) || !core.isset(core.material.items[itemId])) return 0; + var itemCls = core.material.items[itemId].cls; + return core.isset(core.status.hero.items[itemCls][itemId]) ? core.status.hero.items[itemCls][itemId] : 0; +} + +core.prototype.hasItem = function (itemId) { + return core.itemCount(itemId) > 0; +} + +core.prototype.setItem = function (itemId, itemNum) { + var itemCls = core.material.items[itemId].cls; + if (itemCls == 'item') return; + if (!core.isset(core.status.hero.items[itemCls])) { + core.status.hero.items[itemCls] = {}; + } + core.status.hero.items[itemCls][itemId] = itemNum; +} + +core.prototype.useKey = function (itemId) { + if (!core.hasItem(itemId)) return false; + var itemCls = core.material.items[itemId].cls; + core.status.hero.items[itemCls][itemId]--; + core.updateStatusBar(); + return true; +} + +core.prototype.useItem = function (itemId) { + core.items.useItem(itemId); + return; +} + +core.prototype.canUseItem = function (itemId) { + return core.items.canUseItem(itemId); +} + +core.prototype.addItem = function (itemId, itemNum) { + var itemData = core.material.items[itemId]; + var itemCls = itemData.cls; + if (itemCls == 'item') return; + if (!core.isset(core.status.hero.items[itemCls])) { + core.status.hero.items[itemCls] = {}; + core.status.hero.items[itemCls][itemId] = 0; + } + else if (!core.isset(core.status.hero.items[itemCls][itemId])) { + core.status.hero.items[itemCls][itemId] = 0; + } + core.status.hero.items[itemCls][itemId] += itemNum; +} + +/* +core.prototype.removeBlock = function(itemX, itemY) { + var mapBlocks = core.status.thisMap.blocks; + for(var b = 0;b < mapBlocks.length;b++) { + if(mapBlocks[b].x == itemX && mapBlocks[b].y == itemY) { + // delete mapBlocks[b].event; + // mapBlocks[b] + core.status.thisMap.blocks.splice(b,1); + break; + } + } +} +*/ + +core.prototype.getItemEffect = function (itemId, itemNum) { + core.items.getItemEffect(itemId, itemNum); +} + +core.prototype.getItemEffectTip = function (itemId) { + return core.items.getItemEffectTip(itemId); +} + +core.prototype.getItem = function (itemId, itemNum, itemX, itemY, callback) { + // core.getItemAnimate(itemId, itemNum, itemX, itemY); + core.playSound('item', 'ogg'); + var itemCls = core.material.items[itemId].cls; + core.getItemEffect(itemId, itemNum); + core.removeBlock('event', itemX, itemY); + var text = '获得 ' + core.material.items[itemId].name; + if (itemNum > 1) text += "x" + itemNum; + if (itemCls === 'items') text += core.getItemEffectTip(itemId); + core.drawTip(text, 'image', core.material.icons.items[itemId]); + core.canvas.event.clearRect(itemX * 32, itemY * 32, 32, 32); + core.updateStatusBar(); + if (core.isset(callback)) callback(); +} + +core.prototype.drawTip = function (text, type, itemIcon) { + type = type || 'normal'; + var textX, textY, width, height, hide = false, opacityVal = 0; + clearInterval(core.interval.tipAnimate); + core.setFont('data', "16px Arial"); + core.saveCanvas('data'); + core.setOpacity('data', 0); + if (type == 'normal') { + textX = 16; + textY = 18; + width = textX + core.canvas.data.measureText(text).width + 16; + height = 42; + } + else if (type == 'image' && core.isset(itemIcon)) { + textX = 44; + textY = 18; + width = textX + core.canvas.data.measureText(text).width + 8; + height = 42; + } + else { + core.loadCanvas('data'); + return; + } + core.interval.tipAnimate = window.setInterval(function () { + if (hide) { + opacityVal -= 0.1; + } + else { + opacityVal += 0.1; + } + core.setOpacity('data', opacityVal); + core.clearMap('data', 5, 5, 400, height); + core.fillRect('data', 5, 5, width, height, '#000'); + if (core.isset(itemIcon)) { + core.canvas.data.drawImage(core.material.images.items, 0, itemIcon.loc * itemIcon.size, itemIcon.size, itemIcon.size, 10, 8, itemIcon.size, itemIcon.size); + } + core.fillText('data', text, textX + 5, textY + 15, '#fff'); + if (opacityVal > 0.6 || opacityVal < 0) { + if (hide) { + core.loadCanvas('data'); + core.clearMap('data', 5, 5, 400, height); + core.setOpacity('data', 1); + clearInterval(core.interval.tipAnimate); + return; + } + else { + if (!core.timeout.getItemTipTimeout) { + core.timeout.getItemTipTimeout = window.setTimeout(function () { + hide = true; + core.timeout.getItemTipTimeout = null; + }, 1000); + } + opacityVal = 0.6; + core.setOpacity('data', opacityVal); + } + } + }, 30); +} + +core.prototype.drawText = function (contents, callback) { + if (core.isset(contents)) { + if (typeof contents == 'string') { + contents = [{'content': contents}]; + } + else if (contents instanceof Object && core.isset(contents.content)) { + contents = [contents]; + } + else if (!(contents instanceof Array)) { + core.drawTip("出错了"); + console.log(contents); + return; + } + + core.status.event = {'id': 'text', 'data': {'list': contents, 'callback': callback}}; + core.lockControl(); + + // wait the hero to stop + core.stopAutomaticRoute(); + setTimeout(function() { + core.drawText(); + }, 30); + return; + } + + if (core.status.event.data.list.length==0) { + var callback = core.status.event.data.callback; + core.ui.closePanel(false); + if (core.isset(callback)) callback(); + return; + } + + var data=core.status.event.data.list.shift(); + if (typeof data == 'string') + core.ui.drawTextBox(data); + else + core.ui.drawTextBox(data.content, data.id); + // core.drawTextBox(content); +} + +/////////// 地图相关 END /////////// + +/* + * NPC事件 + */ +core.prototype.visitNpc = function (npcId, x, y, callback) { + + // 正在移动中... + if (!core.status.heroStop) { + setTimeout(function () { + core.visitNpc(npcId, x, y, callback); + }, 30); + return; + } + + if (!core.isset(core.status.npcs[npcId])) + core.status.npcs[npcId] = 0; + var times=core.status.npcs[npcId]; + + var list = core.npcs.getEffect(npcId, times); + if (list.length==0) return; + + core.status.event.data = {'x': x, 'y': y, 'id': npcId, 'list': list, 'callback': callback}; + core.status.event.id = 'npc'; + core.lockControl(); + + core.npcAction(); +} + +core.prototype.npcAction = function() { + + if (core.status.event.data.list.length==0) { + if (core.isset(core.status.event.data.callback)) + core.status.event.data.callback(); + core.ui.closePanel(false); + return; + } + + var data = core.status.event.data.list.shift(); + core.status.event.data.current = data; + + var id=core.status.event.data.id, x=core.status.event.data.x, y=core.status.event.data.y; + + // 对话 + if (data.action=='text') { + core.ui.drawTextBox(data.content, core.isset(data.isHero)&&data.isHero?'hero':data.id); + return; + } + // 显示选项 + if (data.action=='choices') { + var npc = core.material.npcs[data.id]; + + var background = core.canvas.ui.createPattern(core.material.ground, "repeat"); + + clearInterval(core.interval.tipAnimate); + core.clearMap('data', 0, 0, 416, 416); + core.setOpacity('data', 1); + + core.clearMap('ui', 0, 0, 416, 416); + core.setAlpha('ui', 1); + core.setFillStyle('ui', background); + + var left = 97, top = 64, right = 416 - 2 * left, bottom = 416 - 2 * top; + core.fillRect('ui', left, top, right, bottom, background); + core.strokeRect('ui', left - 1, top - 1, right + 1, bottom + 1, '#FFFFFF', 2); + + // 名称 + core.canvas.ui.textAlign = "center"; + core.fillText('ui', npc.name, left + 135, top + 34, '#FFFFFF', 'bold 19px Verdana'); + + // 动画 + core.strokeRect('ui', left + 15 - 1, top + 30 - 1, 34, 34, '#DDDDDD', 2); + core.status.boxAnimateObjs = []; + core.status.boxAnimateObjs.push({ + 'bgx': left + 15, 'bgy': top + 30, 'bgsize': 32, + 'image': core.material.images.npcs, + 'x': left + 15, 'y': top + 30, 'icon': core.material.icons.npcs[npc.icon] + }); + core.setBoxAnimate(core.firstData.animateSpeed); + + // 对话 + core.canvas.ui.textAlign = "left"; + var contents = data.hint.split('\n'); + for (var i=0;i0) { + setTimeout(function() {core.upload();}, delay); + return; + } + + core.updateTime(); + + var xmlHttp = new XMLHttpRequest(); + var parameters = "action=upload"; + parameters+="&starttime="+core.status.hero.time.starttime.getTime()/1000; + parameters+="&hard="+core.status.hard; + parameters+="&floor="+core.status.maps[core.status.floorId].name; + parameters+="&hp="+core.status.hero.hp+"&atk="+core.status.hero.atk+"&def="+core.status.hero.def+"&mdef="+core.status.hero.mdef+"&money="+core.status.hero.money; + parameters+="&yellow="+core.status.hero.items.keys.yellowKey+"&blue="+core.status.hero.items.keys.blueKey; + parameters+="&playtime="+core.status.hero.time.playtime+"&totaltime="+core.status.hero.time.totaltime+"&step="+core.status.hero.steps+"&ending="+(core.status.event.id=='win'?1:0); + + //xmlHttp.open("GET", "/service/mota/mota4.php?"+parameters, true); + //xmlHttp.send(); + } + catch (e) { + } + */ +} + +// 作弊 +core.prototype.debug = function() { + core.setStatus('hp', 999999); + core.setStatus('atk', 10000); + core.setStatus('def', 10000); + core.setStatus('mdef', 10000); + core.setStatus('money', 10000); + core.setStatus('experience', 10000); + core.setItem('yellowKey', 50); + core.setItem('blueKey', 50); + core.setItem('redKey', 50); + core.setItem('book', 1); + core.setItem('fly', 1); + for (var i in core.status.maps) + if (core.status.maps[i].canFlyTo && core.status.hero.flyRange.indexOf(i)<0) + core.status.hero.flyRange.push(i); + core.updateStatusBar(); + core.drawTip("作弊成功"); +} + + +core.prototype.checkStatus = function (name, need, item, clearData) { + if (need && core.status.event.id == name) { + core.ui.closePanel(clearData); + return false; + } + + if (need && core.status.lockControl) return false; + if (core.isset(item) && item && !core.hasItem(name)) { + core.drawTip("你没有" + core.material.items[name].name); + return false; + } + if (!core.status.heroStop) { + core.drawTip("请先停止勇士行动"); + return false; + } + + core.lockControl(); + core.status.automaticRoutingTemp = {'destX': 0, 'destY': 0, 'moveStep': []}; + core.status.event.id = name; + return true; +} + +core.prototype.openBook = function (need) { + if (!core.checkStatus('book', need, true, true)) + return; + core.useItem('book'); +} + +core.prototype.useFly = function (need) { + if (!core.checkStatus('fly', need, true)) + return; + if (!core.canUseItem('fly')) { + core.drawTip("楼层传送器好像失效了"); + core.unLockControl(); + core.status.event.data = null; + core.status.event.id = null; + return; + } + core.useItem('fly'); + return; +} + +core.prototype.openToolbox = function (need) { + if (!core.checkStatus('toolbox', need)) + return; + // core.drawTip("工具箱还未完成"); + core.ui.drawToolbox(); +} + +core.prototype.save = function(need) { + if (!core.checkStatus('save', need)) + return; + core.ui.drawSLPanel(core.status.savePage); +} + +core.prototype.load = function (need) { + + // 游戏开始前读档 + if (!core.isPlaying()) { + core.status.event = {'id': 'load', 'data': null}; + core.status.lockControl = true; + core.dom.startPanel.style.display = 'none'; + var page = core.getLocalStorage('savePage', 0); + core.ui.drawSLPanel(page); + return; + } + + if (!core.checkStatus('load', need)) + return; + core.ui.drawSLPanel(core.status.savePage); +} + +core.prototype.doSL = function (id, type) { + if (type=='save') { + if (core.saveData("save"+id)) { + core.ui.closePanel(); + core.drawTip('存档成功!'); + core.setLocalStorage('savePage', core.status.savePage); + } + else { + core.drawTip('存储空间不足,请覆盖已有的存档或在菜单栏中进行清理'); + } + return; + } + else if (type=='load') { + var data = core.getLocalStorage("save"+id, null); + if (!core.isset(data)) { + core.drawTip("无效的存档"); + return; + } + core.ui.closePanel(); + core.loadData(data, function() { + core.setLocalStorage('savePage', core.status.savePage); + core.drawTip("读档成功"); + }); + return; + } +} + +core.prototype.saveData = function(dataId) { + core.updateTime(); + var data = { + 'floorId': core.status.floorId, + 'hero': core.clone(core.status.hero), + 'hard': core.status.hard, + 'maps': core.maps.save(core.status.maps), + 'npcs': {}, + 'shops': {}, + 'version': core.firstData.version, + 'time': new Date().getTime() + }; + data.hero.time.starttime=core.status.hero.time.starttime.getTime(); + // set shop times + for (var shop in core.status.shops) { + data.shops[shop]={ + 'times': core.status.shops[shop].times, + 'visited': core.status.shops[shop].visited + } + } + // core.upload(); + core.events.beforeSaveData(data); + + return core.setLocalStorage(dataId, data); + // console.log(core.getLocalStorage(dataId)); +} + +core.prototype.loadData = function (data, callback) { + core.upload(); + + var totaltime=null, lasttime = null; + + if (core.isPlaying()) { + core.updateTime(); + var totaltime = core.status.hero.time.totaltime; + var lasttime = core.clone(core.status.hero.time.lasttime); + } + + core.resetStatus(data.hero, data.hard, data.floorId, + core.maps.load(data.maps)); + + // load shop times + for (var shop in core.status.shops) { + core.status.shops[shop].times = data.shops[shop].times; + core.status.shops[shop].visited = data.shops[shop].visited; + } + + core.status.hero.time.starttime = new Date(core.status.hero.time.starttime); + if (core.isset(totaltime) && totaltime>core.status.hero.time.totaltime) + core.status.hero.time.totaltime=totaltime; + if (core.isset(lasttime)) + core.status.hero.time.lasttime = lasttime; + else core.status.hero.time.lasttime = new Date(); + + core.events.afterLoadData(data); + + core.changeFloor(data.floorId, null, data.hero.loc, function() { + core.setHeroMoveTriggerInterval(); + if (core.isset(callback)) callback(); + }); + + core.upload(1500); +} + +core.prototype.setStatus = function (statusName, statusVal) { + if (core.isset(core.status.hero[statusName])) { + core.status.hero[statusName] = statusVal; + } +} + +core.prototype.getStatus = function (statusName) { + if (core.isset(core.status.hero[statusName])) { + return core.status.hero[statusName]; + } +} + +core.prototype.setFlag = function(flag, value) { + if (!core.isset(core.status.hero)) return; + core.status.hero.flags[flag]=value; +} + +core.prototype.getFlag = function(flag, defaultValue) { + if (!core.isset(core.status.hero)) return defaultValue; + var value = core.status.hero.flags[flag]; + if (core.isset(value)) return value; + return defaultValue; +} + +// 只有不为0或false时才会返回true +core.prototype.hasFlag = function(flag) { + if (core.getFlag(flag)) return true; + return false; +} + +core.prototype.lockControl = function () { + core.status.lockControl = true; +} + +core.prototype.unLockControl = function () { + core.status.lockControl = false; +} + +core.prototype.isset = function (val) { + if (val == undefined || val == null) { + return false; + } + return true +} + +core.prototype.playSound = function (soundName, soundType) { + if (!core.musicStatus.soundStatus || !core.musicStatus.loaded) { + return; + } + /* + if (core.isset(core.musicStatus.playedSound)) { + // core.musicStatus.playedSound.pause(); + } + */ + core.musicStatus.playedSound = core.material.sounds[soundType][soundName]; + core.musicStatus.playedSound.play(); +} + +core.prototype.playBgm = function (bgmName, bgmType) { + if (core.musicStatus.isIOS || !core.musicStatus.loaded) return; + if (core.isset(core.musicStatus.playedBgm)) { + core.musicStatus.playedBgm.pause(); + } + core.musicStatus.playedBgm = core.material.sounds[bgmType][bgmName]; + if (core.musicStatus.soundStatus) + core.musicStatus.playedBgm.play(); +} + +core.prototype.changeSoundStatus = function () { + if (core.musicStatus.soundStatus) { + main.core.disabledSound(); + } + else { + main.core.enabledSound(); + } +} + +core.prototype.enabledSound = function () { + // core.musicStatus.playedBgm.play(); + core.musicStatus.soundStatus = true; + core.playBgm('bgm', 'mp3'); + core.setLocalStorage('soundStatus', true); +} + +core.prototype.disabledSound = function () { + core.musicStatus.playedBgm.pause(); + core.musicStatus.soundStatus = false; + core.setLocalStorage('soundStatus', false); +} + +core.prototype.show = function (obj, speed, callback) { + if (!core.isset(speed)) { + obj.style.display = 'block'; + return; + } + obj.style.display = 'block'; + obj.style.opacity = 0; + var opacityVal = 0; + var showAnimate = window.setInterval(function () { + opacityVal += 0.03; + obj.style.opacity = opacityVal; + if (opacityVal > 1) { + clearInterval(showAnimate); + if (core.isset(callback)) { + callback(); + } + } + }, speed); +} + +core.prototype.hide = function (obj, speed, callback) { + if (!core.isset(speed)) { + obj.style.display = 'none'; + return; + } + var opacityVal = 1; + var hideAnimate = window.setInterval(function () { + opacityVal -= 0.03; + obj.style.opacity = opacityVal; + if (opacityVal < 0) { + obj.style.display = 'none'; + clearInterval(hideAnimate); + if (core.isset(callback)) { + callback(); + } + } + }, speed); +} + + +////// 状态栏相关 ////// + +core.prototype.clearStatusBar = function() { + var statusList = ['floor', 'hp', 'atk', 'def', /*'mdef',*/ 'money', 'experience', 'yellowKey', 'blueKey', 'redKey', 'hard']; + statusList.forEach(function (e) { + core.statusBar[e].innerHTML = ""; + }); + core.statusBar.image.book.style.opacity = 0.3; + core.statusBar.image.fly.style.opacity = 0.3; +} + +/** + * 更新状态栏 + */ +core.prototype.updateStatusBar = function () { + + // 上限999999 + if (core.flags.HPMAX>0) { + core.setStatus('hp', Math.min(core.flags.HPMAX, core.getStatus('hp'))); + } + + // core.statusBar.floor.innerHTML = core.maps.maps[core.status.floorId].name; + var statusList = ['hp', 'atk', 'def', 'mdef', 'money', 'experience']; + statusList.forEach(function (item) { + core.statusBar[item].innerHTML = core.getStatus(item); + }); + var keys = ['yellowKey', 'blueKey', 'redKey']; + keys.forEach(function (key) { + core.statusBar[key].innerHTML = core.setTwoDigits(core.status.hero.items.keys[key]); + }) + core.statusBar.poison.innerHTML = core.hasFlag('poison')?"毒":""; + core.statusBar.weak.innerHTML = core.hasFlag('weak')?"衰":""; + core.statusBar.curse.innerHTML = core.hasFlag('curse')?"咒":""; + core.statusBar.hard.innerHTML = core.status.hard; + if (core.hasItem('book')) { + core.statusBar.image.book.style.opacity = 1; + } else { + core.statusBar.image.book.style.opacity = 0.3; + } + if (core.hasItem('fly')) { + core.statusBar.image.fly.style.opacity = 1; + } else { + core.statusBar.image.fly.style.opacity = 0.3; + } + core.updateFg(); +} + +core.prototype.resize = function(clientWidth, clientHeight) { + + // 画布大小 + var canvasWidth = 416; + // 竖屏状态下,默认StatusBar高度(不计算边框) + var statusBarHeight = 83; + // 竖屏状态下,底端默认ToolBar高度(不计算边框) + var toolBarHeight = 49; + + // 横屏状态下,默认StatusBar宽度(不计算边框) + var statusBarWidth = 132; + + //适配宽度阈值, 6为两倍的边框宽度 + var ADAPT_WIDTH = canvasWidth + 6; + + var width = clientWidth; + var isHorizontal = false; + if(clientWidth > clientHeight && clientHeight < 422){ + isHorizontal = true; + width = clientHeight; + } + + // 移动端 + if (width < ADAPT_WIDTH) { + var zoom = (ADAPT_WIDTH - width) / 4.22; + var scale = 1 - zoom / 100; + + core.position.scale = scale; + canvasWidth = width - 6; + + if(!isHorizontal){ //竖屏 + core.position.screenMode = 'vertical'; + + statusBarHeight *= scale; + toolBarHeight *= scale; + + core.position.gameGroup = { + 'width': canvasWidth, + 'height': width+statusBarHeight+toolBarHeight, + 'top': (clientHeight-width-statusBarHeight-toolBarHeight)/2, + 'left': 3 + } + + // 这几项都是相对gameGroup的位置 + core.position.statusBar = { + 'width': canvasWidth, + 'height': statusBarHeight, + 'top': 0, + 'left': 0, + 'fontSize': 16 * scale + } + core.position.canvas = { + 'width': canvasWidth, + 'height': canvasWidth, + 'top': statusBarHeight, // 3px计算在内边框 + 'left': 0, + 'borderLeft': '', + 'borderTop': '3px #fff solid', + 'borderBottom': '3px #fff solid' + } + core.position.toolBar = { + 'display': 'block', + 'width': canvasWidth, 'height': toolBarHeight, + 'top': statusBarHeight + 3 + canvasWidth, + } + + var icon_firstline = 8 * scale, icon_secondline = 44 * scale; + var icon_toolline = core.position.toolBar.top + 13 * scale; + var icon_toolline_per = 46 * scale; + + var text_firstline = 14 * scale, text_secondline = 50 * scale, text_thirdline = 75 * scale; + var text_toolline = core.position.toolBar.top + 18 * scale; + + // 如果同时启用mdef和experience,则不显示当前层数 + if (core.flags.enableMDef && core.flags.enableExperience) { + core.position.items = { + 'image': { + 'size': 32*scale, + 'floor': {'top': 0, 'left': 0, 'display': 'none'}, + 'hp': {'top': icon_firstline, 'left': 8 * scale}, + 'atk': {'top': icon_firstline, 'left': 126 * scale}, + 'def': {'top': icon_firstline, 'left': 226 * scale}, + 'mdef': {'top': icon_secondline, 'left': 8 * scale, 'display': 'block'}, + 'money': {'top': icon_secondline, 'left': 108 * scale}, + 'experience': {'top': icon_secondline, 'left': 208 * scale, 'display': 'block'}, + 'book': {'top': icon_toolline, 'left': 8 * scale}, + 'fly': {'top': icon_toolline, 'left': 8 * scale + icon_toolline_per}, + 'toolbox': {'top': icon_toolline, 'left': 8 * scale + icon_toolline_per * 2}, + 'shop': {'top': icon_toolline, 'left': 8*scale+icon_toolline_per*3, 'display': 'block'}, + 'save': {'top': icon_toolline, 'left': 8 * scale + icon_toolline_per * 4}, + 'load': {'top': icon_toolline, 'left': 8 * scale + icon_toolline_per * 5}, + 'settings': {'top': icon_toolline, 'left': 8 * scale + icon_toolline_per * 6} + }, + 'floor': {'top': 0, 'left': 0, 'display': 'none'}, + 'hp': {'top': text_firstline, 'left': 42 * scale}, + 'atk': {'top': text_firstline, 'left': 160 * scale}, + 'def': {'top': text_firstline, 'left': 260 * scale}, + 'mdef': {'top': text_secondline, 'left': 42 * scale, 'display': 'block'}, + 'money': {'top': text_secondline, 'left': 144 * scale}, + 'experience': {'top': text_secondline, 'left': 242 * scale, 'display': 'block'}, + 'yellowKey': {'top': text_secondline, 'left': 308 * scale}, + 'blueKey': {'top': text_secondline, 'left': 342 * scale}, + 'redKey': {'top': text_secondline, 'left': 376 * scale}, + 'poison': {'top': text_firstline, 'left': 330* scale}, + 'weak': {'top': text_firstline, 'left': 355* scale}, + 'curse': {'top': text_firstline, 'left': 380*scale}, + 'hard': {'top': text_toolline, 'left': 320*scale} + } + } + + // 否则显示层数 + else { + core.position.items = { + 'image': { + 'size': 32*scale, + 'floor': {'top': icon_firstline, 'left': 8 * scale, 'display': 'block'}, + 'hp': {'top': icon_firstline, 'left': 90 * scale}, + 'atk': {'top': icon_firstline, 'left': 208 * scale}, + 'def': {'top': icon_firstline, 'left': 308 * scale}, + 'mdef': {'top': icon_secondline, 'left': 8 * scale, 'display': core.flags.enableMDef?'block':'none'}, + 'money': {'top': icon_secondline, 'left': (core.flags.enableMDef?108:8) * scale}, + 'experience': {'top': icon_secondline, 'left': 108 * scale, 'display': core.flags.enableExperience?'block':'none'}, + 'book': {'top': icon_toolline, 'left': 8 * scale}, + 'fly': {'top': icon_toolline, 'left': 8 * scale + icon_toolline_per}, + 'toolbox': {'top': icon_toolline, 'left': 8 * scale + icon_toolline_per * 2}, + 'shop': {'top': icon_toolline, 'left': 8*scale+icon_toolline_per*3, 'display': 'block'}, + 'save': {'top': icon_toolline, 'left': 8 * scale + icon_toolline_per * 4}, + 'load': {'top': icon_toolline, 'left': 8 * scale + icon_toolline_per * 5}, + 'settings': {'top': icon_toolline, 'left': 8 * scale + icon_toolline_per * 6} + }, + 'floor': {'top': text_firstline, 'left': 44 * scale}, + 'hp': {'top': text_firstline, 'left': 124 * scale}, + 'atk': {'top': text_firstline, 'left': 242 * scale}, + 'def': {'top': text_firstline, 'left': 342 * scale}, + 'mdef': {'top': text_secondline, 'left': 44*scale, 'display': core.flags.enableMDef?'block':'none'}, + 'money': {'top': text_secondline, 'left': (core.flags.enableMDef?144:44) * scale}, + 'experience': {'top': text_secondline, 'left': 142 * scale, 'display': core.flags.enableExperience?'block':'none'}, + 'yellowKey': {'top': text_secondline, 'left': 216 * scale}, + 'blueKey': {'top': text_secondline, 'left': 250 * scale}, + 'redKey': {'top': text_secondline, 'left': 284 * scale}, + 'poison': {'top': text_secondline, 'left': 330* scale}, + 'weak': {'top': text_secondline, 'left': 355* scale}, + 'curse': {'top': text_secondline, 'left': 380*scale}, + 'hard': {'top': text_toolline, 'left': 320*scale} + } + } + }else { //横屏 + core.position.screenMode = 'horizontal'; + statusBarWidth *= scale + + core.position.gameGroup = { + 'width': statusBarWidth + canvasWidth + 3, + 'height': canvasWidth, + 'top': 3, + 'left': (clientWidth - width - statusBarWidth)/2, + } + + // 这几项都是相对gameGroup的位置 + core.position.statusBar = { + 'top': 0, 'left': 0, + 'width': statusBarWidth, + 'height': canvasWidth, + 'fontSize': 16 * scale + } + core.position.canvas = { + 'borderTop': '', + 'borderLeft': '3px #fff solid', + 'borderBottom': '', + 'top': 0, + 'left': statusBarWidth, + 'width': canvasWidth, + 'height': canvasWidth + } + core.position.toolBar = { + 'display': 'none', 'top': 0, 'left': 0, 'width': 0, 'height': 0 + } + core.resizeIconHorizontal(scale); + } + + }else { //大屏设备 pc端 + core.position.scale = 1; + core.position.screenMode = 'bigScreen'; + + var totalWidth = statusBarWidth + 3 + canvasWidth; + + core.position.gameGroup = { + 'top': (clientHeight-canvasWidth)/2, + 'left': (width-totalWidth)/2, + 'width': totalWidth, 'height': canvasWidth + } + + // 这几项都是相对gameGroup的位置 + core.position.statusBar = { + 'top': 0, 'left': 0, + 'width': statusBarWidth, 'height': canvasWidth, + 'fontSize': 16 + } + core.position.canvas = { + 'borderTop': '', 'borderBottom': '', 'borderLeft': '3px #fff solid', + 'top': 0, 'left': statusBarWidth, 'width': canvasWidth, 'height': canvasWidth + } + core.position.toolBar = { + 'display': 'none', 'top': 0, 'left': 0, 'width': 0, 'height': 0 + } + core.resizeIconHorizontal(1); + } + core.resetSize(); +} + +core.prototype.resizeIconHorizontal = function(scale) { + var first_col = 8 * scale, second_col = 50 * scale, third_col = 92 * scale; + var first_icon_row = 20 * scale, first_text_row = 28 * scale, first_tool_row = 303 * scale; + var per_row = 36 * scale, tool_per_row = 40*scale; + + // 如果同时启用mdef和experience,则不显示当前层数 + if (core.flags.enableMDef && core.flags.enableExperience) { + core.position.items = { + 'image': { + 'size': 32*scale, + 'floor': {'top': 0, 'left': 0, 'display': 'none'}, + 'hp': {'top': first_icon_row , 'left': first_col}, + 'atk': {'top': first_icon_row + per_row, 'left': first_col}, + 'def': {'top': first_icon_row + per_row * 2, 'left': first_col}, + 'mdef': {'top': first_icon_row + per_row * 3, 'left': first_col, 'display': 'block'}, + 'money': {'top': first_icon_row + per_row * 4, 'left': first_col}, + 'experience': {'top': first_icon_row + per_row * 5, 'left': first_col, 'display': 'block'}, + 'book': {'top': first_tool_row, 'left': first_col}, + 'fly': {'top': first_tool_row, 'left': second_col}, + 'toolbox': {'top': first_tool_row, 'left': third_col}, + 'shop': {'top': 0, 'left': 0, 'display': 'none'}, + 'save': {'top': first_tool_row + tool_per_row, 'left': first_col}, + 'load': {'top': first_tool_row + tool_per_row, 'left': second_col}, + 'settings': {'top': first_tool_row + tool_per_row, 'left': third_col} + }, + 'floor': {'top': 0, 'left': 0, 'display': 'none'}, + 'hp': {'top': first_text_row, 'left': second_col}, + 'atk': {'top': first_text_row + per_row, 'left': second_col}, + 'def': {'top': first_text_row + per_row * 2, 'left': second_col}, + 'mdef': {'top': first_text_row + per_row * 3, 'left': second_col, 'display': 'block'}, + 'money': {'top': first_text_row + per_row * 4, 'left': second_col}, + 'experience': {'top': first_text_row + per_row * 5, 'left': second_col, 'display': 'block'}, + 'yellowKey': {'top': first_text_row + per_row * 6, 'left': first_col}, + 'blueKey':{'top': first_text_row + per_row * 6, 'left': second_col}, + 'redKey': {'top': first_text_row + per_row * 6, 'left': third_col}, + 'poison': {'top': first_text_row + per_row * 6.75, 'left': first_col+10 * scale}, + 'weak': {'top': first_text_row + per_row * 6.75, 'left': first_col + 35 * scale}, + 'curse': {'top': first_text_row + per_row * 6.75, 'left': first_col + 60 * scale}, + 'hard': {'top': 383*scale, 'left': 0} + } + } + // 否则显示层数 + else { + core.position.items = { + 'image': { + 'size': 32*scale, + 'floor': {'top': first_icon_row, 'left': first_col, 'display': 'block'}, + 'hp': {'top': first_icon_row + per_row, 'left': first_col}, + 'atk': {'top': first_icon_row + per_row * 2, 'left': first_col}, + 'def': {'top': first_icon_row + per_row * 3, 'left': first_col}, + 'mdef': {'top': first_icon_row + per_row * 4, 'left': first_col, 'display': core.flags.enableMDef?'block':'none'}, + 'money': {'top': first_icon_row + per_row * (core.flags.enableMDef?5:4), 'left': first_col}, + 'experience': {'top': first_icon_row + per_row * 5, 'left': first_col, 'display': core.flags.enableExperience?'block':'none'}, + 'book': {'top': first_tool_row, 'left': first_col}, + 'fly': {'top': first_tool_row, 'left': second_col}, + 'toolbox': {'top': first_tool_row, 'left': third_col}, + 'shop': {'top': 0, 'left': 0, 'display': 'none'}, + 'save': {'top': first_tool_row + tool_per_row, 'left': first_col}, + 'load': {'top': first_tool_row + tool_per_row, 'left': second_col}, + 'settings': {'top': first_tool_row + tool_per_row, 'left': third_col} + }, + 'floor': {'top': first_text_row, 'left': second_col, 'display': 'block'}, + 'hp': {'top': first_text_row + per_row, 'left': second_col}, + 'atk': {'top': first_text_row + per_row * 2, 'left': second_col}, + 'def': {'top': first_text_row + per_row * 3, 'left': second_col}, + 'mdef': {'top': first_text_row + per_row * 4, 'left': second_col, 'display': core.flags.enableMDef?'block':'none'}, + 'money': {'top': first_text_row + per_row * (core.flags.enableMDef?5:4), 'left': second_col}, + 'experience': {'top': first_text_row + per_row * 5, 'left': second_col, 'display': core.flags.enableExperience?'block':'none'}, + 'yellowKey': {'top': first_text_row + per_row * 6, 'left': first_col}, + 'blueKey':{'top': first_text_row + per_row * 6, 'left': second_col}, + 'redKey': {'top': first_text_row + per_row * 6, 'left': third_col}, + 'poison': {'top': first_text_row + per_row * 6.75, 'left': first_col+10 * scale}, + 'weak': {'top': first_text_row + per_row * 6.75, 'left': first_col + 35 * scale}, + 'curse': {'top': first_text_row + per_row * 6.75, 'left': first_col + 60 * scale}, + 'hard': {'top': 383*scale, 'left': 0} + } + } +} + +core.prototype.resetSize = function () { + + core.dom.gameGroup.style.left = core.position.gameGroup.left + "px"; + core.dom.gameGroup.style.top = core.position.gameGroup.top + "px"; + core.dom.gameGroup.style.width = core.position.gameGroup.width + "px"; + core.dom.gameGroup.style.height = core.position.gameGroup.height + "px"; + + core.dom.statusBar.style.width = core.position.statusBar.width + "px"; + core.dom.statusBar.style.height = core.position.statusBar.height + "px"; + core.dom.statusBar.style.fontSize = core.position.statusBar.fontSize + "px"; + + core.dom.toolBar.style.top = core.position.toolBar.top + "px"; + core.dom.toolBar.style.width = core.position.toolBar.width + "px"; + core.dom.toolBar.style.height = core.position.toolBar.height + "px"; + core.dom.toolBar.style.display = core.position.toolBar.display; + + core.dom.floorMsgGroup.style.width = core.position.canvas.width + "px"; + + for (var i = 0; i < core.dom.gameCanvas.length; i++) { + core.dom.gameCanvas[i].style.borderTop = core.position.canvas.borderTop; + core.dom.gameCanvas[i].style.borderLeft = core.position.canvas.borderLeft; + core.dom.gameCanvas[i].style.top = core.position.canvas.top + "px"; + core.dom.gameCanvas[i].style.left = core.position.canvas.left + "px"; + core.dom.gameCanvas[i].style.width = core.position.canvas.width + "px"; + core.dom.gameCanvas[i].style.height = core.position.canvas.height + "px"; + } + + // images + for (var item in core.statusBar.image) { + if (core.isset(core.position.items.image[item].display)) + core.statusBar.image[item].style.display = core.position.items.image[item].display; + else + core.statusBar.image[item].style.display = 'block'; + core.statusBar.image[item].style.width = core.position.items.image.size + "px"; + core.statusBar.image[item].style.height = core.position.items.image.size + "px"; + core.statusBar.image[item].style.top = core.position.items.image[item].top + "px"; + core.statusBar.image[item].style.left = core.position.items.image[item].left + "px"; + } + + // texts + for (var item in core.statusBar) { + if (item == 'image') continue; + if (core.isset(core.position.items[item].display)) + core.statusBar[item].style.display = core.position.items[item].display; + else + core.statusBar[item].style.display = 'block'; + core.statusBar[item].style.top = core.position.items[item].top + "px"; + core.statusBar[item].style.left = core.position.items[item].left + "px"; + } + +} + +/** + * 系统机制 end + */ + +var core = new core(); +main.instance.core = core; diff --git a/libs/core.min.js b/libs/core.min.js new file mode 100644 index 00000000..1e60e949 --- /dev/null +++ b/libs/core.min.js @@ -0,0 +1 @@ +function core(){this.dom={};this.statusBar={};this.canvas={};this.images=[];this.sounds={};this.firstData={};this.material={images:{},sounds:{},ground:null,items:{},enemys:{},icons:{},events:{},npcs:{}};this.timeout={getItemTipTimeout:null};this.interval={twoAnimate:null,fourAnimate:null,boxAnimate:null,heroMoveTriggerInterval:null,heroMoveInterval:null,heroAutoMoveScan:null,tipAnimate:null,openDoorAnimate:null};this.musicStatus={isIOS:false,loaded:false,bgmStatus:false,soundStatus:true,playedSound:null,playedBgm:null};this.position={gameGroup:{},canvas:{},statusBar:{},toolBar:{},items:{},scale:1,screenMode:"bigScreen"};this.initStatus={played:false,hero:{id:"",name:"",hp:0,atk:0,def:0,mdef:0,money:0,experience:0,loc:{direction:"down",x:0,y:0},flyRange:[],items:[]},floorId:null,thisMap:null,maps:null,heroMoving:false,heroStop:true,lockControl:false,autoHeroMove:false,automaticRouting:false,automaticRouted:false,autoStep:0,movedStep:0,destStep:0,automaticRoutingTemp:{destX:0,destY:0,moveStep:[]},autoStepRoutes:[],holdingPath:0,stepPostfix:[],mouseOutCheck:1,moveStepBeforeStop:[],savePage:null,shops:{},npcs:{},event:{id:null,data:null},openingDoor:null,twoAnimateObjs:[],fourAnimateObjs:[],boxAnimateObjs:[]};this.status={};this.flags={}}core.prototype.init=function(h,c,d,b,a,f){core.dom=h;core.statusBar=c;core.canvas=d;core.images=b;core.sounds=a;for(var e in f){core[e]=f[e]}core.firstData=core.data.getFirstData();core.initStatus.shops=core.firstData.shops;core.initStatus.npcs=core.firstData.npcs;core.dom.versionLabel.innerHTML=core.firstData.version;core.material.items=core.items.getItems();core.initStatus.maps=core.maps.getMaps();core.material.enemys=core.clone(core.enemys.getEnemys());core.material.icons=core.icons.getIcons();core.material.events=core.events.getEvents();core.material.npcs=core.npcs.getNpcs();core.flags=core.data.flags;core.musicStatus.soundStatus=core.getLocalStorage("soundStatus",true);var g=navigator.userAgent;if(g.indexOf("iPhone")>-1||g.indexOf("iPad")>-1){console.log("你的设备为iphone,不自动播放音乐!");core.musicStatus.isIOS=true;core.musicStatus.soundStatus=false}core.material.ground=new Image();core.material.ground.src="images/ground.png";core.loader(function(){console.log(core.material);core.showStartAnimate(function(){})})};core.prototype.showStartAnimate=function(c){core.dom.startPanel.style.opacity=1;core.dom.startPanel.style.display="block";core.dom.startTop.style.opacity=1;core.dom.startTop.style.display="block";core.dom.startButtonGroup.style.display="none";core.dom.startButtons.style.display="block";core.dom.levelChooseButtons.style.display="none";core.status.played=false;core.clearStatus();core.clearMap("all");var b=1;var a=window.setInterval(function(){b-=0.03;if(b<0){clearInterval(a);core.dom.startTop.style.display="none";core.dom.startButtonGroup.style.display="block";if(core.isset(c)){c()}}core.dom.startTop.style.opacity=b},20)};core.prototype.hideStartAnimate=function(c){var b=1;var a=window.setInterval(function(){b-=0.03;if(b<0){clearInterval(a);core.dom.startPanel.style.display="none";c()}core.dom.startPanel.style.opacity=b},20)};core.prototype.setStartProgressVal=function(a){core.dom.startTopProgress.style.width=a+"%"};core.prototype.setStartLoadTipText=function(a){core.dom.startTopLoadTips.innerHTML=a};core.prototype.loader=function(g){var e=0,a=0,f=0,d=0;a=core.images.length;for(var c in core.sounds){d+=core.sounds[c].length}for(var b=0;b0){return}core.musicStatus.bgmStatus=1;if(core.musicStatus.soundStatus){core.playBgm("bgm","mp3")}return}var a=b.shift();a.oncanplay=function(){core.loadSoundItem(b)};a.load()};core.prototype.isPlaying=function(){if(core.isset(core.status.played)&&core.status.played){return true}return false};core.prototype.clearStatus=function(){for(var a in core.interval){clearInterval(core.interval[a])}core.status={};core.clearStatusBar();core.resize(main.dom.body.clientWidth,main.dom.body.clientHeight)};core.prototype.resetStatus=function(c,e,b,d){for(var a in core.interval){clearInterval(core.interval[a])}core.status=core.clone(core.initStatus);core.status.played=true;core.status.floorId=b;core.status.maps=core.clone(d);core.material.enemys=core.clone(core.enemys.getEnemys());core.status.hero=core.clone(c);core.status.hard=e;core.status.savePage=core.getLocalStorage("savePage",0);core.resize(main.dom.body.clientWidth,main.dom.body.clientHeight)};core.prototype.startGame=function(b,a){console.log("开始游戏");core.resetStatus(core.firstData.hero,b,core.firstData.floorId,core.initStatus.maps);core.changeFloor(core.status.floorId,null,core.firstData.hero.loc,function(){core.setHeroMoveTriggerInterval();if(core.isset(a)){a()}})};core.prototype.restart=function(){core.showStartAnimate()};core.prototype.keyDown=function(a){if(!core.status.played){return}if(core.status.automaticRouting||core.status.automaticRouted){core.stopAutomaticRoute()}if(core.status.lockControl){if(core.status.event.id=="book"){if(a.keyCode==37){core.ui.drawEnemyBook(core.status.event.data-1)}else{if(a.keyCode==39){core.ui.drawEnemyBook(core.status.event.data+1)}}return}if(core.status.event.id=="fly"){if(a.keyCode==38){core.ui.drawFly(core.status.event.data+1)}else{if(a.keyCode==40){core.ui.drawFly(core.status.event.data-1)}}return}if(core.status.event.id=="save"||core.status.event.id=="load"){if(a.keyCode==37){core.ui.drawSLPanel(core.status.event.data-1)}else{if(a.keyCode==39){core.ui.drawSLPanel(core.status.event.data+1)}}return}return}switch(a.keyCode){case 37:core.moveHero("left");break;case 38:core.moveHero("up");break;case 39:core.moveHero("right");break;case 40:core.moveHero("down");break}};core.prototype.keyUp=function(d){if(!core.status.played){return}if(core.status.lockControl){if(core.status.event.id=="book"&&(d.keyCode==27||d.keyCode==88)){core.ui.closePanel(true)}if(core.status.event.id=="fly"&&(d.keyCode==71||d.keyCode==27)){core.ui.closePanel()}if(core.status.event.id=="fly"&&d.keyCode==13){var a=core.status.hero.flyRange.indexOf(core.status.floorId);var c=core.status.event.dataa){c=d;a=f[d]}}g=[{x:0,y:1},{x:-1,y:0},{x:0,y:-1},{x:1,y:0},false][c];if(g){g.x+=e.x;g.y+=e.y;core.status.stepPostfix.push(g);core.fillPosWithPoint(g)}};core.prototype.onup=function(){core.status.holdingPath=0;if(core.status.stepPostfix.length>0){var b=[];var e={"0":{"1":"down","-1":"up"},"-1":{"0":"left"},"1":{"0":"right"}};for(var c=1;c12||c>12){return}if(!core.status.lockControl){core.setAutomaticRoute(b,c,a);return}if(core.status.event.id=="book"){core.events.clickBook(b,c);return}if(core.status.event.id=="fly"){core.events.clickFly(b,c);return}if(core.status.event.id=="settings"){core.events.clickSettings(b,c);return}if(core.status.event.id=="shop"){core.events.clickShop(b,c);return}if(core.status.event.id=="selectShop"){core.events.clickSelectShop(b,c);return}if(core.status.event.id=="toolbox"){core.events.clickToolbox(b,c);return}if(core.status.event.id=="save"||core.status.event.id=="load"){core.events.clickSL(b,c);return}if(core.status.event.id=="confirmBox"){if((b==4||b==5)&&c==7&&core.isset(core.status.event.data.yes)){core.status.event.data.yes()}if((b==7||b==8)&&c==7&&core.isset(core.status.event.data.no)){core.status.event.data.no()}return}if(core.status.event.id=="about"){if(core.isPlaying()){core.ui.closePanel(false)}else{core.showStartAnimate()}return}if(core.status.event.id=="text"){core.drawText();return}if(core.status.event.id=="npc"){core.events.clickNPC(b,c);return}if(core.status.event.id=="syncSave"){if(b>=4&&b<=8){if(c==5){core.showConfirmBox("你确定要将本地存档同步到服务器吗?",function(){core.waiting("正在同步,请稍后...");var h=new FormData();h.append("type","save");var d=[];for(var e=1;e<=180;e++){var g=core.getLocalStorage("save"+e,null);if(core.isset(g)){d.push(g)}}var f=JSON.stringify(d);h.append("data",f);var j=new XMLHttpRequest();j.open("POST","../sync.php");j.timeout=1000;j.onload=function(k){if(j.status==200){var i=JSON.parse(j.response);if(i.code<0){core.drawText("出错啦!\n无法同步存档到服务器。")}else{core.drawText("同步成功!\n\n您的存档编号: "+i.code+"\n您的存档密码: "+i.msg+"\n\n请牢记以上两个信息(如截图等),在从服务器\n同步存档时使用。")}}else{core.drawText("出错啦!\n无法同步存档到服务器。")}};j.ontimeout=function(i){console.log(i);core.drawText("出错啦!\n无法同步存档到服务器。")};j.onerror=function(i){console.log(i);core.drawText("出错啦!\n无法同步存档到服务器。")};j.send(h)},function(){core.syncSave()})}if(c==6){core.showConfirmBox("你确定要从服务器加载存档吗?\n该操作将覆盖所有本地存档且不可逆!",function(){var g=prompt("请输入存档编号:");if(g==null||g==""){core.syncSave();return}var d=prompt("请输入存档密码:");if(d==null||d==""){core.syncSave();return}core.waiting("正在同步,请稍后...");var e=new FormData();e.append("type","load");e.append("id",g);e.append("password",d);var f=new XMLHttpRequest();f.open("POST","../sync.php");f.timeout=1000;f.onload=function(l){if(f.status==200){var h=JSON.parse(f.response);switch(h.code){case 0:var k=JSON.parse(h.msg);for(var j=1;j<=180;j++){if(j<=k.length){core.setLocalStorage("save"+j,k[j-1])}else{core.removeLocalStorage("save"+j)}}core.drawText("同步成功!\n你的本地所有存档均已被覆盖。");break;case -1:core.drawText("出错啦!\n存档编号"+g+"不存在!");break;case -2:core.drawText("出错啦!\n存档密码错误!");break;default:core.drawText("出错啦!\n无法从服务器同步存档。");break}}else{core.drawText("出错啦!\n无法从服务器同步存档。")}};f.ontimeout=function(h){console.log(h);core.drawText("出错啦!\n无法从服务器同步存档。")};f.onerror=function(h){console.log(h);core.drawText("出错啦!\n无法从服务器同步存档。")};f.send(e)},function(){core.syncSave()})}}if(b>=5&&b<=7&&c==7){core.ui.openSettings(false)}}};core.prototype.onmousewheel=function(a){if(core.status.lockControl&&core.status.event.id=="fly"){if(a==-1){core.ui.drawFly(core.status.event.data-1)}if(a==1){core.ui.drawFly(core.status.event.data+1)}return}};core.prototype.clearAutomaticRouteNode=function(a,b){core.canvas.ui.clearRect(a*32+5,b*32+5,27,27)};core.prototype.stopAutomaticRoute=function(){if(!core.status.played){return}core.stopAutoHeroMove();core.status.automaticRouting=false;core.status.automaticRouted=false;core.status.autoStepRoutes=[];core.status.automaticRoutingTemp={destX:0,destY:0,moveStep:[]};if(core.status.moveStepBeforeStop.length==0){core.canvas.ui.clearRect(0,0,416,416)}};core.prototype.continueAutomaticRoute=function(){var a=core.status.moveStepBeforeStop;core.status.moveStepBeforeStop=[];if(a.length===0){return}if(a.length===1&&a[0].step===1){return}core.status.automaticRouting=true;core.setAutoHeroMove(a)};core.prototype.clearContinueAutomaticRoute=function(){core.canvas.ui.clearRect(0,0,416,416);core.status.moveStepBeforeStop=[]};core.prototype.setAutomaticRoute=function(d,c,b){if(!core.status.played||core.status.lockControl){return}else{if(core.status.automaticRouting){core.stopAutomaticRoute();return}}if(d==core.status.hero.loc.x&&c==core.status.hero.loc.y){core.turnHero();return}var f=0;var g=null;var e;core.status.automaticRoutingTemp={destX:0,destY:0,moveStep:[]};if(!(e=core.automaticRoute(d,c))){core.canvas.ui.clearRect(0,0,416,416);return false}e=e.concat(b);core.status.automaticRoutingTemp.destX=d;core.status.automaticRoutingTemp.destY=c;core.canvas.ui.save();core.canvas.ui.clearRect(0,0,416,416);core.canvas.ui.fillStyle="#bfbfbf";core.canvas.ui.strokeStyle="#bfbfbf";core.canvas.ui.lineWidth=8;for(var a=0;a12||p<0||p>12){continue}var e=13*q+p;if(core.isset(s[e])){continue}if(q==u&&p==t){s[e]=r;break}if(core.noPassExists(q,p)){continue}var a=1;if(core.idEndWith(q,p,"lavaNet")){a=100}if(!core.flags.potionWhileRouting&&core.idEndWith(q,p,"Potion")){a=20}s[e]=r;k.push(169*(g+a)+e)}if(core.isset(s[13*u+t])){break}}if(!core.isset(s[13*u+t])){return false}var d=u,c=t;while(d!=o||c!=m){var i=s[13*d+c];j.push({direction:i,x:d,y:c});d-=h[i].x;c-=h[i].y}j.reverse();return j};core.prototype.fillPosWithPoint=function(a){core.fillRect("ui",a.x*32+12,a.y*32+12,8,8,"#bfbfbf")};core.prototype.clearStepPostfix=function(){if(core.status.mouseOutCheck>0){core.status.mouseOutCheck--;window.setTimeout(core.clearStepPostfix,1000);return}core.status.holdingPath=0;if(core.status.stepPostfix.length>0){core.status.stepPostfix=[];core.canvas.ui.clearRect(0,0,416,416);core.canvas.ui.restore()}};core.prototype.stopAutoHeroMove=function(){core.status.autoHeroMove=false;core.status.automaticRouting=false;core.status.automaticRouted=false;core.status.autoStep=0;core.status.destStep=0;core.status.movedStep=0;core.status.autoStepRoutes=[];core.stopHero();clearInterval(core.interval.heroAutoMoveScan)};core.prototype.setAutoHeroMove=function(a,b){if(a.length==0){return}core.status.autoStepRoutes=a;core.status.autoStep=0;clearInterval(core.interval.heroAutoMoveScan);core.interval.heroAutoMoveScan=window.setInterval(function(){if(!core.status.autoHeroMove){if(core.status.autoStep==core.status.autoStepRoutes.length){core.stopAutoHeroMove();return}core.autoHeroMove(core.status.autoStepRoutes[core.status.autoStep].direction,core.status.autoStepRoutes[core.status.autoStep].step);core.status.autoStep++}},80)};core.prototype.autoHeroMove=function(b,a){core.status.autoHeroMove=true;core.status.destStep=a;core.moveHero(b)};core.prototype.setHeroMoveInterval=function(c,a,e,d){if(core.status.heroMoving){return}core.status.heroMoving=true;var b=0;core.interval.heroMoveInterval=window.setInterval(function(){switch(c){case"up":b-=4;if(b==-4||b==-8||b==-12||b==-16){core.drawHero(c,a,e,"leftFoot",0,b)}else{if(b==-20||b==-24||b==-28||b==-32){core.drawHero(c,a,e,"rightFoot",0,b)}}if(b==-32){core.setHeroLoc("y","--");core.moveOneStep();if(core.status.heroStop){core.drawHero(c,a,e-1,"stop")}if(core.isset(d)){d()}}break;case"left":b-=4;if(b==-4||b==-8||b==-12||b==-16){core.drawHero(c,a,e,"leftFoot",b)}else{if(b==-20||b==-24||b==-28||b==-32){core.drawHero(c,a,e,"rightFoot",b)}}if(b==-32){core.setHeroLoc("x","--");core.moveOneStep();if(core.status.heroStop){core.drawHero(c,a-1,e,"stop")}if(core.isset(d)){d()}}break;case"down":b+=4;if(b==4||b==8||b==12||b==16){core.drawHero(c,a,e,"leftFoot",0,b)}else{if(b==20||b==24||b==28||b==32){core.drawHero(c,a,e,"rightFoot",0,b)}}if(b==32){core.setHeroLoc("y","++");core.moveOneStep();if(core.status.heroStop){core.drawHero(c,a,e+1,"stop")}if(core.isset(d)){d()}}break;case"right":b+=4;if(b==4||b==8||b==12||b==16){core.drawHero(c,a,e,"leftFoot",b)}else{if(b==20||b==24||b==28||b==32){core.drawHero(c,a,e,"rightFoot",b)}}if(b==32){core.setHeroLoc("x","++");core.moveOneStep();if(core.status.heroStop){core.drawHero(c,a+1,e,"stop")}if(core.isset(d)){d()}}break}},10)};core.prototype.setHeroMoveTriggerInterval=function(){var c,a,d;var b={up:{x:0,y:-1},left:{x:-1,y:0},down:{x:0,y:1},right:{x:1,y:0}};core.interval.heroMoveTriggerInterval=window.setInterval(function(){if(!core.status.heroStop){c=core.getHeroLoc("direction");a=core.getHeroLoc("x");d=core.getHeroLoc("y");var e;e=core.noPass(a+b[c].x,d+b[c].y);if(e){core.trigger(a+b[c].x,d+b[c].y);core.drawHero(c,a,d,"stop");if(core.status.autoHeroMove){core.status.movedStep++;if(core.status.destStep==core.status.movedStep){core.status.autoHeroMove=false;core.status.destStep=0;core.status.movedStep=0;core.status.moveStepBeforeStop=[];core.stopAutomaticRoute()}}else{core.status.heroStop=true}return}core.setHeroMoveInterval(c,a,d,function(){if(core.status.autoHeroMove){core.status.movedStep++;if(core.status.destStep==core.status.movedStep){core.status.autoHeroMove=false;core.status.destStep=0;core.status.movedStep=0;core.stopHero();core.drawHero(core.getHeroLoc("direction"),core.getHeroLoc("x"),core.getHeroLoc("y"),"stop")}}else{if(core.status.heroStop){core.drawHero(core.getHeroLoc("direction"),core.getHeroLoc("x"),core.getHeroLoc("y"),"stop")}}core.trigger(core.getHeroLoc("x"),core.getHeroLoc("y"));clearInterval(core.interval.heroMoveInterval);core.status.heroMoving=false})}},50)};core.prototype.turnHero=function(a){if(core.isset(a)){core.status.hero.loc.direction=a}else{if(core.status.hero.loc.direction=="up"){core.status.hero.loc.direction="right"}else{if(core.status.hero.loc.direction=="right"){core.status.hero.loc.direction="down"}else{if(core.status.hero.loc.direction=="down"){core.status.hero.loc.direction="left"}else{if(core.status.hero.loc.direction=="left"){core.status.hero.loc.direction="up"}}}}}core.drawHero(core.status.hero.loc.direction,core.status.hero.loc.x,core.status.hero.loc.y,"stop",0,0);core.status.automaticRoutingTemp={destX:0,destY:0,moveStep:[]};core.canvas.ui.clearRect(0,0,416,416)};core.prototype.moveHero=function(a){core.setHeroLoc("direction",a);core.status.heroStop=false};core.prototype.moveOneStep=function(){core.status.hero.steps++};core.prototype.waitHeroToStop=function(a){core.stopAutomaticRoute();if(core.isset(a)){core.lockControl();setTimeout(function(){a()},30)}};core.prototype.stopHero=function(){core.status.heroStop=true};core.prototype.drawHero=function(d,b,g,c,a,f){a=a||0;f=f||0;core.clearAutomaticRouteNode(b,g);var e=core.material.icons.heros[core.status.hero.id][d];b=b*e.size;g=g*e.size;core.canvas.hero.clearRect(b-32,g-32,96,96);core.canvas.hero.drawImage(core.material.images.heros,e.loc[c]*e.size,e.loc.iconLoc*e.size,e.size,e.size,b+a,g+f,e.size,e.size)};core.prototype.openDoor=function(h,b,g,a,f){if(!core.terrainExists(b,g,h)){return}if(core.status.moveStepBeforeStop.length==0){core.status.moveStepBeforeStop=core.status.autoStepRoutes.slice(core.status.autoStep-1,core.status.autoStepRoutes.length);if(core.status.moveStepBeforeStop.length>=1){core.status.moveStepBeforeStop[0].step-=core.status.movedStep}}core.stopHero();core.stopAutomaticRoute();if(a){var d=h.replace("Door","Key");if(!core.useKey(d)){if(d!="specialKey"){core.drawTip("你没有"+core.material.items[d].name+"!","normal")}else{core.drawTip("无法开启此门。")}core.clearContinueAutomaticRoute();return}}core.playSound("door","ogg");var e=0;var c=core.material.icons.animates[h];core.interval.openDoorAnimate=window.setInterval(function(){e++;if(e==4){clearInterval(core.interval.openDoorAnimate);core.removeBlock("event",b,g);core.events.afterOpenDoor(h);if(core.isset(f)){f()}return}core.canvas.event.clearRect(32*b,32*g,32,32);core.canvas.event.drawImage(core.material.images.animates,32*e,32*c.loc,32,32,32*b,32*g,32,32)},30)};core.prototype.battle=function(g,a,f,e){if(typeof(core.status.moveStepBeforeStop)=="undefined"||core.status.moveStepBeforeStop.length==0){core.status.moveStepBeforeStop=core.status.autoStepRoutes.slice(core.status.autoStep-1,core.status.autoStepRoutes.length);if(core.status.moveStepBeforeStop.length>=1){core.status.moveStepBeforeStop[0].step-=core.status.movedStep}}core.stopHero();core.stopAutomaticRoute();var c=core.enemys.getDamage(g);if(c>=core.status.hero.hp){core.drawTip("你打不过此怪物!");core.clearContinueAutomaticRoute();return}core.playSound("attack","ogg");core.status.hero.hp-=c;var b=core.material.enemys[g].money;if(core.hasItem("coin")){core.status.hero.money+=core.material.enemys[g].money}core.status.hero.money+=b;core.status.hero.experience+=core.material.enemys[g].experience;core.updateStatusBar();core.removeBlock("event",a,f);core.canvas.event.clearRect(32*a,32*f,32,32);core.updateFg();var d="打败 "+core.material.enemys[g].name+",金币+"+b;if(core.flags.enableExperience){d+=",经验+"+core.material.enemys[g].experience}core.drawTip(d);core.events.afterBattle(g);if(core.isset(e)){e()}};core.prototype.changeFloor=function(d,c,a,f){core.lockControl();core.stopHero();core.stopAutomaticRoute();core.dom.floorNameLabel.innerHTML=core.status.maps[d].title;if(core.isset(c)){a=core.status.hero.loc;var e=core.status.maps[d].blocks;for(var b in e){if(core.isset(e[b].event)&&e[b].event.id===c){a.x=e[b].x;a.y=e[b].y}}if(core.status.maps[d].canFlyTo&&core.status.hero.flyRange.indexOf(d)<0){if(c=="upFloor"){core.status.hero.flyRange.unshift(d)}if(c=="downFloor"){core.status.hero.flyRange.push(d)}}}window.setTimeout(function(){core.playSound("floor","mp3");core.mapChangeAnimate("show",function(){core.statusBar.floor.innerHTML=core.status.maps[d].name;core.updateStatusBar();core.drawMap(d,function(){core.hide(core.dom.floorMsgGroup,10,function(){core.unLockControl();core.events.afterChangeFloor(d);if(core.isset(f)){f()}});core.setHeroLoc("direction",a.direction);core.setHeroLoc("x",a.x);core.setHeroLoc("y",a.y);core.drawHero(core.getHeroLoc("direction"),core.getHeroLoc("x"),core.getHeroLoc("y"),"stop");core.updateFg()})})},50)};core.prototype.mapChangeAnimate=function(a,b){if(a=="show"){core.show(core.dom.floorMsgGroup,15,function(){b()})}else{core.hide(core.dom.floorMsgGroup,20,function(){b()})}};core.prototype.clearMap=function(e,c,f,d,b){if(e=="all"){for(var a in core.canvas){core.canvas[a].clearRect(0,0,416,416)}}else{core.canvas[e].clearRect(c,f,d,b)}};core.prototype.fillText=function(d,e,a,f,c,b){if(core.isset(c)){core.setFillStyle(d,c)}if(core.isset(b)){core.setFont(d,b)}core.canvas[d].fillText(e,a,f)};core.prototype.fillRect=function(e,b,f,d,a,c){if(core.isset(c)){core.setFillStyle(e,c)}core.canvas[e].fillRect(b,f,d,a)};core.prototype.strokeRect=function(f,c,g,e,b,d,a){if(core.isset(d)){core.setStrokeStyle(f,d)}if(core.isset(a)){core.setLineWidth(f,a)}core.canvas[f].strokeRect(c,g,e,b)};core.prototype.drawBlock=function(a,b,d,c,g,f,i,h,e){h=h||1;if(core.isset(e)&&e==true){core.canvas[a].clearRect(g*i,f*i,i,i)}core.canvas[a].drawImage(core.material.images[b],d*i,c*i,i,i,g*i,f*i,i*h,i*h)};core.prototype.setFont=function(b,a){core.canvas[b].font=a};core.prototype.setLineWidth=function(c,b){if(c=="all"){for(var a in core.canvas){core.canvas[a].lineWidth=b}}core.canvas[c].lineWidth=b};core.prototype.saveCanvas=function(a){core.canvas[a].save()};core.prototype.loadCanvas=function(a){core.canvas[a].restore()};core.prototype.setOpacity=function(c,b){if(c=="all"){for(var a in core.canvas){core.canvas[a].globalAlpha=b}}core.canvas[c].globalAlpha=b};core.prototype.setStrokeStyle=function(c,b){if(c=="all"){for(var a in core.canvas){core.canvas[a].strokeStyle=b}}else{core.canvas[c].strokeStyle=b}};core.prototype.setAlpha=function(c,b){if(c=="all"){for(var a in core.canvas){core.canvas[a].globalAlpha=b}}else{core.canvas[c].globalAlpha=b}};core.prototype.setOpacity=function(c,b){if(c=="all"){for(var a in core.canvas){core.canvas[a].canvas.style.opacity=b}}else{core.canvas[c].canvas.style.opacity=b}};core.prototype.setFillStyle=function(c,b){if(c=="all"){for(var a in core.canvas){core.canvas[a].fillStyle=b}}else{core.canvas[c].fillStyle=b}};core.prototype.drawMap=function(c,i){var j=core.status.maps[c];var g=j.blocks;core.status.floorId=c;core.status.thisMap=j;var h,f,a,d;core.clearMap("all");core.rmGlobalAnimate(null,null,true);core.enabledAllTrigger();for(h=0;h<13;h++){for(f=0;f<13;f++){a=core.material.icons.terrains.ground;d=core.material.images.terrains;core.canvas.bg.drawImage(d,0,a.loc*a.size,a.size,a.size,h*a.size,f*a.size,a.size,a.size)}}h=0;f=0;for(var e=0;e12||f>12||a<0||f<0){return true}if(core.stairExists(a,f)){return false}var d=core.status.thisMap.blocks;for(var b=0;b12||f>12||d<0||f<0){return true}var e=core.status.thisMap.blocks;var c;for(var a=0;a0){var a=core.canvas.ui.createPattern(core.material.ground,"repeat");core.drawBoxAnimate(a);core.interval.boxAnimate=setInterval(function(){core.drawBoxAnimate(a)},b)}};core.prototype.drawBoxAnimate=function(c){for(var b=0;b=999999999){f="???"}else{if(f>100000){f=(f/10000).toFixed(1)+"w"}}core.setFillStyle("fg","#000000");core.canvas.fg.fillText(f,32*a+2,32*(i+1)-2);core.canvas.fg.fillText(f,32*a,32*(i+1)-2);core.canvas.fg.fillText(f,32*a+2,32*(i+1));core.canvas.fg.fillText(f,32*a,32*(i+1));core.setFillStyle("fg",d);core.canvas.fg.fillText(f,32*a+1,32*(i+1)-1)}}};core.prototype.itemCount=function(b){if(!core.isset(b)||!core.isset(core.material.items[b])){return 0}var a=core.material.items[b].cls;return core.isset(core.status.hero.items[a][b])?core.status.hero.items[a][b]:0};core.prototype.hasItem=function(a){return core.itemCount(a)>0};core.prototype.setItem=function(c,b){var a=core.material.items[c].cls;if(a=="item"){return}if(!core.isset(core.status.hero.items[a])){core.status.hero.items[a]={}}core.status.hero.items[a][c]=b};core.prototype.useKey=function(b){if(!core.hasItem(b)){return false}var a=core.material.items[b].cls;core.status.hero.items[a][b]--;core.updateStatusBar();return true};core.prototype.useItem=function(a){core.items.useItem(a);return};core.prototype.canUseItem=function(a){return core.items.canUseItem(a)};core.prototype.addItem=function(d,c){var a=core.material.items[d];var b=a.cls;if(b=="item"){return}if(!core.isset(core.status.hero.items[b])){core.status.hero.items[b]={};core.status.hero.items[b][d]=0}else{if(!core.isset(core.status.hero.items[b][d])){core.status.hero.items[b][d]=0}}core.status.hero.items[b][d]+=c};core.prototype.getItemEffect=function(b,a){core.items.getItemEffect(b,a)};core.prototype.getItemEffectTip=function(a){return core.items.getItemEffectTip(a)};core.prototype.getItem=function(f,e,c,a,g){core.playSound("item","ogg");var b=core.material.items[f].cls;core.getItemEffect(f,e);core.removeBlock("event",c,a);var d="获得 "+core.material.items[f].name;if(e>1){d+="x"+e}if(b==="items"){d+=core.getItemEffectTip(f)}core.drawTip(d,"image",core.material.icons.items[f]);core.canvas.event.clearRect(c*32,a*32,32,32);core.updateStatusBar();if(core.isset(g)){g()}};core.prototype.drawTip=function(h,g,f){g=g||"normal";var d,c,b,i,e=false,a=0;clearInterval(core.interval.tipAnimate);core.setFont("data","16px Arial");core.saveCanvas("data");core.setOpacity("data",0);if(g=="normal"){d=16;c=18;b=d+core.canvas.data.measureText(h).width+16;i=42}else{if(g=="image"&&core.isset(f)){d=44;c=18;b=d+core.canvas.data.measureText(h).width+8;i=42}else{core.loadCanvas("data");return}}core.interval.tipAnimate=window.setInterval(function(){if(e){a-=0.1}else{a+=0.1}core.setOpacity("data",a);core.clearMap("data",5,5,400,i);core.fillRect("data",5,5,b,i,"#000");if(core.isset(f)){core.canvas.data.drawImage(core.material.images.items,0,f.loc*f.size,f.size,f.size,10,8,f.size,f.size)}core.fillText("data",h,d+5,c+15,"#fff");if(a>0.6||a<0){if(e){core.loadCanvas("data");core.clearMap("data",5,5,400,i);core.setOpacity("data",1);clearInterval(core.interval.tipAnimate);return}else{if(!core.timeout.getItemTipTimeout){core.timeout.getItemTipTimeout=window.setTimeout(function(){e=true;core.timeout.getItemTipTimeout=null},1000)}a=0.6;core.setOpacity("data",a)}}},30)};core.prototype.drawText=function(a,c){if(core.isset(a)){if(typeof a=="string"){a=[{content:a}]}else{if(a instanceof Object&&core.isset(a.content)){a=[a]}else{if(!(a instanceof Array)){core.drawTip("出错了");console.log(a);return}}}core.status.event={id:"text",data:{list:a,callback:c}};core.lockControl();core.stopAutomaticRoute();setTimeout(function(){core.drawText()},30);return}if(core.status.event.data.list.length==0){var c=core.status.event.data.callback;core.ui.closePanel(false);if(core.isset(c)){c()}return}var b=core.status.event.data.list.shift();if(typeof b=="string"){core.ui.drawTextBox(b)}else{core.ui.drawTextBox(b.content,b.id)}};core.prototype.visitNpc=function(b,a,f,e){if(!core.status.heroStop){setTimeout(function(){core.visitNpc(b,a,f,e)},30);return}if(!core.isset(core.status.npcs[b])){core.status.npcs[b]=0}var d=core.status.npcs[b];var c=core.npcs.getEffect(b,d);if(c.length==0){return}core.status.event.data={x:a,y:f,id:b,list:c,callback:e};core.status.event.id="npc";core.lockControl();core.npcAction()};core.prototype.npcAction=function(){if(core.status.event.data.list.length==0){if(core.isset(core.status.event.data.callback)){core.status.event.data.callback()}core.ui.closePanel(false);return}var g=core.status.event.data.list.shift();core.status.event.data.current=g;var c=core.status.event.data.id,l=core.status.event.data.x,j=core.status.event.data.y;if(g.action=="text"){core.ui.drawTextBox(g.content,core.isset(g.isHero)&&g.isHero?"hero":g.id);return}if(g.action=="choices"){var h=core.material.npcs[g.id];var b=core.canvas.ui.createPattern(core.material.ground,"repeat");clearInterval(core.interval.tipAnimate);core.clearMap("data",0,0,416,416);core.setOpacity("data",1);core.clearMap("ui",0,0,416,416);core.setAlpha("ui",1);core.setFillStyle("ui",b);var e=97,k=64,m=416-2*e,a=416-2*k;core.fillRect("ui",e,k,m,a,b);core.strokeRect("ui",e-1,k-1,m+1,a+1,"#FFFFFF",2);core.canvas.ui.textAlign="center";core.fillText("ui",h.name,e+135,k+34,"#FFFFFF","bold 19px Verdana");core.strokeRect("ui",e+15-1,k+30-1,34,34,"#DDDDDD",2);core.status.boxAnimateObjs=[];core.status.boxAnimateObjs.push({bgx:e+15,bgy:k+30,bgsize:32,image:core.material.images.npcs,x:e+15,y:k+30,icon:core.material.icons.npcs[h.icon]});core.setBoxAnimate(core.firstData.animateSpeed);core.canvas.ui.textAlign="left";var d=g.hint.split("\n");for(var f=0;fcore.status.hero.time.totaltime){core.status.hero.time.totaltime=d}if(core.isset(a)){core.status.hero.time.lasttime=a}else{core.status.hero.time.lasttime=new Date()}core.events.afterLoadData(b);core.changeFloor(b.floorId,null,b.hero.loc,function(){core.setHeroMoveTriggerInterval();if(core.isset(e)){e()}});core.upload(1500)};core.prototype.setStatus=function(a,b){if(core.isset(core.status.hero[a])){core.status.hero[a]=b}};core.prototype.getStatus=function(a){if(core.isset(core.status.hero[a])){return core.status.hero[a]}};core.prototype.lockControl=function(){core.status.lockControl=true};core.prototype.unLockControl=function(){core.status.lockControl=false};core.prototype.isset=function(a){if(a==undefined||a==null){return false}return true};core.prototype.playSound=function(b,a){if(!core.musicStatus.soundStatus||!core.musicStatus.loaded){return}core.musicStatus.playedSound=core.material.sounds[a][b];core.musicStatus.playedSound.play()};core.prototype.playBgm=function(a,b){if(core.musicStatus.isIOS||!core.musicStatus.loaded){return}if(core.isset(core.musicStatus.playedBgm)){core.musicStatus.playedBgm.pause()}core.musicStatus.playedBgm=core.material.sounds[b][a];if(core.musicStatus.soundStatus){core.musicStatus.playedBgm.play()}};core.prototype.changeSoundStatus=function(){if(core.musicStatus.soundStatus){main.core.disabledSound()}else{main.core.enabledSound()}};core.prototype.enabledSound=function(){core.musicStatus.soundStatus=true;core.playBgm("bgm","mp3");core.setLocalStorage("soundStatus",true)};core.prototype.disabledSound=function(){core.musicStatus.playedBgm.pause();core.musicStatus.soundStatus=false;core.setLocalStorage("soundStatus",false)};core.prototype.show=function(d,b,e){if(!core.isset(b)){d.style.display="block";return}d.style.display="block";d.style.opacity=0;var c=0;var a=window.setInterval(function(){c+=0.03;d.style.opacity=c;if(c>1){clearInterval(a);if(core.isset(e)){e()}}},b)};core.prototype.hide=function(d,b,e){if(!core.isset(b)){d.style.display="none";return}var c=1;var a=window.setInterval(function(){c-=0.03;d.style.opacity=c;if(c<0){d.style.display="none";clearInterval(a);if(core.isset(e)){e()}}},b)};core.prototype.clearStatusBar=function(){var a=["floor","hp","atk","def","money","experience","yellowKey","blueKey","redKey","hard"];a.forEach(function(b){core.statusBar[b].innerHTML=""});core.statusBar.image.book.style.opacity=0.3;core.statusBar.image.fly.style.opacity=0.3};core.prototype.updateStatusBar=function(){if(core.flags.HPMAX>0){core.setStatus("hp",Math.min(core.flags.HPMAX,core.getStatus("hp")))}var b=["hp","atk","def","money","experience"];b.forEach(function(c){core.statusBar[c].innerHTML=core.getStatus(c)});var a=["yellowKey","blueKey","redKey"];a.forEach(function(c){core.statusBar[c].innerHTML=core.setTwoDigits(core.status.hero.items.keys[c])});core.statusBar.hard.innerHTML="Lv"+core.status.hard;if(core.hasItem("book")){core.statusBar.image.book.style.opacity=1}else{core.statusBar.image.book.style.opacity=0.3}if(core.hasItem("fly")){core.statusBar.image.fly.style.opacity=1}else{core.statusBar.image.fly.style.opacity=0.3}core.updateFg()};core.prototype.resize=function(t,j){var v=416;var k=83;var x=49;var A=129;var m=v+6;var s=t;var n=false;if(t>j&&j<422){n=true;s=j}if(s=10 && x<=12 && y==12) { + core.ui.closePanel(true); + } + return; +} + +// 飞行器 +events.prototype.clickFly = function(x,y) { + if ((x==10 || x==11) && y==9) core.ui.drawFly(core.status.event.data-1); + if ((x==10 || x==11) && y==5) core.ui.drawFly(core.status.event.data+1); + if (x>=5 && x<=7 && y==12) core.ui.closePanel(); + if (x>=0 && x<=9 && y>=3 && y<=11) { + var index=core.status.hero.flyRange.indexOf(core.status.floorId); + var stair=core.status.event.data= 5 && x <= 7) { + if (y >= 5 && y <= 8) { + if (y >= 5 + core.status.event.data.choices.length) return; + + var money = core.getStatus('money'), experience = core.getStatus('experience'); + + var shop = core.status.event.data; + var times = shop.times, need = eval(shop.need); + var use = shop.use; + var use_text = use=='money'?"金币":"经验"; + + var choice = shop.choices[y-5]; + if (core.isset(choice.need)) + need = eval(choice.need); + + if (need > eval(use)) { + core.drawTip("你的"+use_text+"不足"); + return; + } + + eval(use+'-='+need); + core.setStatus('money', money); + core.setStatus('experience', experience); + core.updateStatusBar(); + + core.npcEffect(choice.effect); + + core.status.event.data.times++; + core.ui.openShop(core.status.event.data.id); + return; + } + + // 退出商店 + if (y == 9) { + core.status.event.data = null; + core.ui.closePanel(); + return; + } + } +} + +events.prototype.clickSelectShop = function(x,y) { + if (x >= 5 && x <= 7) { + var shopList = core.status.shops, keys = Object.keys(shopList); + var topIndex = 6 - parseInt((keys.length + 1) / 2); + var exitIndex = 6 + parseInt((keys.length + 1) / 2); + + if (y >= topIndex && y - topIndex < keys.length) { + var reason = core.events.canUseQuickShop(y-topIndex); + if (core.isset(reason)) { + core.drawText(reason); + return; + } + var shop=shopList[keys[y - topIndex]]; + if (!shop.visited) { + if (shop.times==0) core.drawTip('该商店尚未开启'); + else core.drawTip('该商店已失效'); + return; + } + core.ui.drawShop(keys[y - topIndex]); + } + if (y == exitIndex) { + core.ui.closePanel(); + } + } +} + +// 工具栏 +events.prototype.clickToolbox = function(x,y) { + + // 返回 + if (x>=10 && x<=12 && y==12) { + core.ui.closePanel(false); + return; + } + + var itemId = null; + var items = null; + + if (y>=4 && y<=7 && x!=12) + items = Object.keys(core.status.hero.items.tools).sort(); + + if (y>=9 && y<=12 && x!=12) + items = Object.keys(core.status.hero.items.constants).sort(); + + if (items==null) return; + var index=0; + if (y==4||y==5||y==9||y==10) index=parseInt(x/2); + else index=6+parseInt(x/2); + + if (index>=items.length) return; + itemId=items[index]; + + if (itemId==core.status.event.data) { + core.events.useItem(itemId); + } + else { + core.ui.drawToolbox(itemId); + } +} + +// 存读档 +events.prototype.clickSL = function(x,y) { + // 上一页 + if ((x == 3 || x == 4) && y == 12) { + core.ui.drawSLPanel(core.status.event.data - 1); + } + // 下一页 + if ((x == 8 || x == 9) && y == 12) { + core.ui.drawSLPanel(core.status.event.data + 1); + } + // 返回 + if (x>=10 && x<=12 && y==12) { + core.ui.closePanel(false); + if (!core.isPlaying()) { + core.showStartAnimate(); + } + return; + } + + var index=6*core.status.event.data+1; + if (y>=1 && y<=4) { + if (x>=1 && x<=3) core.doSL(index, core.status.event.id); + if (x>=5 && x<=7) core.doSL(index+1, core.status.event.id); + if (x>=9 && x<=11) core.doSL(index+2, core.status.event.id); + } + if (y>=7 && y<=10) { + if (x>=1 && x<=3) core.doSL(index+3, core.status.event.id); + if (x>=5 && x<=7) core.doSL(index+4, core.status.event.id); + if (x>=9 && x<=11) core.doSL(index+5, core.status.event.id); + } +} + +// 菜单栏 +events.prototype.clickSettings = function (x,y) { + if (x<5 || x>7) return; + if (y == 3) { + if (core.musicStatus.isIOS) { + core.drawTip("iOS设备不支持播放音乐"); + return; + } + core.changeSoundStatus(); + core.ui.drawSettings(false); + } + if (y == 4) core.ui.drawSelectShop(); + if (y == 5) this.decreaseHard(); + if (y == 6) { + core.ui.drawSyncSave(); + } + if (y == 7) { + core.ui.drawConfirmBox("你确定要重新开始吗?", function () { + core.ui.closePanel(); + core.restart(); + }, function () { + core.ui.drawSettings(false); + }); + } + if (y==8) { + core.ui.drawAbout(); + // core.debug(); + } + if (y == 9) core.ui.closePanel(); + return; +} + +events.prototype.clickNPC = function(x,y) { + + var data = core.status.event.data.current; + if (core.isset(data)) { + + // 对话,任意位置继续 + if (data.action == 'text') { + core.npcAction(); + return; + } + if (data.action == 'choices') { + if (x >= 5 && x <= 7) { + if (y >= 5 && y <= 8) { + if (y >= 5 + data.choices.length) return; + + var choice = data.choices[y - 5]; + if (core.isset(choice.need)) { + var able = true; + choice.need.split(';').forEach(function (e) { + var ones = e.split(','); + var type = ones[0], key = ones[1], value = ones[2]; + if (type == 'status') { + if (core.getStatus(key)=10&&a<=12&&b==12){core.ui.closePanel(true)}return};events.prototype.clickFly=function(a,e){if((a==10||a==11)&&e==9){core.ui.drawFly(core.status.event.data-1)}if((a==10||a==11)&&e==5){core.ui.drawFly(core.status.event.data+1)}if(a>=5&&a<=7&&e==12){core.ui.closePanel()}if(a>=0&&a<=9&&e>=3&&e<=11){var b=core.status.hero.flyRange.indexOf(core.status.floorId);var d=core.status.event.data=5&&x<=7){if(y>=5&&y<=8){if(y>=5+core.status.event.data.choices.length){return}var money=core.getStatus("money"),experience=core.getStatus("experience");var shop=core.status.event.data;var times=shop.times,need=eval(shop.need);var use=shop.use;var use_text=use=="money"?"金币":"经验";var choice=shop.choices[y-5];if(core.isset(choice.need)){need=eval(choice.need)}if(need>eval(use)){core.drawTip("你的"+use_text+"不足");return}eval(use+"-="+need);core.setStatus("money",money);core.setStatus("experience",experience);core.updateStatusBar();core.npcEffect(choice.effect);core.status.event.data.times++;core.ui.openShop(core.status.event.data.id);return}if(y==9){core.status.event.data=null;core.ui.closePanel();return}}};events.prototype.clickSelectShop=function(a,h){if(a>=5&&a<=7){var c=core.status.shops,e=Object.keys(c);var d=6-parseInt((e.length+1)/2);var b=6+parseInt((e.length+1)/2);if(h>=d&&h-d=10&&a<=12&&e==12){core.ui.closePanel(false);return}var d=null;var b=null;if(e>=4&&e<=7&&a!=12){b=Object.keys(core.status.hero.items.tools).sort()}if(e>=9&&e<=12&&a!=12){b=Object.keys(core.status.hero.items.constants).sort()}if(b==null){return}var c=0;if(e==4||e==5||e==9||e==10){c=parseInt(a/2)}else{c=6+parseInt(a/2)}if(c>=b.length){return}d=b[c];if(d==core.status.event.data){core.events.useItem(d)}else{core.ui.drawToolbox(d)}};events.prototype.clickSL=function(a,c){if((a==3||a==4)&&c==12){core.ui.drawSLPanel(core.status.event.data-1)}if((a==8||a==9)&&c==12){core.ui.drawSLPanel(core.status.event.data+1)}if(a>=10&&a<=12&&c==12){core.ui.closePanel(false);if(!core.isPlaying()){core.showStartAnimate()}return}var b=6*core.status.event.data+1;if(c>=1&&c<=4){if(a>=1&&a<=3){core.doSL(b,core.status.event.id)}if(a>=5&&a<=7){core.doSL(b+1,core.status.event.id)}if(a>=9&&a<=11){core.doSL(b+2,core.status.event.id)}}if(c>=7&&c<=10){if(a>=1&&a<=3){core.doSL(b+3,core.status.event.id)}if(a>=5&&a<=7){core.doSL(b+4,core.status.event.id)}if(a>=9&&a<=11){core.doSL(b+5,core.status.event.id)}}};events.prototype.clickSettings=function(a,b){if(a<5||a>7){return}if(b==3){if(core.musicStatus.isIOS){core.drawTip("iOS设备不支持播放音乐");return}core.changeSoundStatus();core.ui.openSettings(false)}if(b==4){core.ui.drawSelectShop()}if(b==5){this.decreaseHard()}if(b==6){core.ui.syncSave()}if(b==7){core.ui.showConfirmBox("你确定要重新开始吗?",function(){core.ui.closePanel();core.restart()},function(){core.ui.openSettings(false)})}if(b==8){core.ui.drawAbout()}if(b==9){core.ui.closePanel()}return};events.prototype.clickNPC=function(a,e){var d=core.status.event.data.current;if(core.isset(d)){if(d.action=="text"){core.npcAction();return}if(d.action=="choices"){if(a>=5&&a<=7){if(e>=5&&e<=8){if(e>=5+d.choices.length){return}var b=d.choices[e-5];if(core.isset(b.need)){var c=true;b.need.split(";").forEach(function(j){var h=j.split(",");var g=h[0],f=h[1],i=h[2];if(g=="status"){if(core.getStatus(f)=0; + if (itemId == 'pickaxe') { + // 破墙镐 + var ids = []; + for (var i in core.status.thisMap.blocks) { + var block = core.status.thisMap.blocks[i]; + if (core.isset(block.event) && block.event.id == 'yellowWall') { + + // 四个方向 + if (core.flags.pickaxeFourDirections) { + if (Math.abs(block.x-core.status.hero.loc.x)+Math.abs(block.y-core.status.hero.loc.y)<=1) { + ids.push(i); + } + } + else { + // 获得勇士的下一个位置 + var scan = { + 'up': {'x': 0, 'y': -1}, + 'left': {'x': -1, 'y': 0}, + 'down': {'x': 0, 'y': 1}, + 'right': {'x': 1, 'y': 0} + }; + if (block.x == core.status.hero.loc.x+scan[core.status.hero.loc.direction].x && block.y == core.status.hero.loc.y+scan[core.status.hero.loc.direction].y) { + ids.push(i); + } + } + } + } + if (ids.length>0) { + core.status.event.data = ids; + return true; + } + return false; + } + if (itemId == 'bomb') { + // 炸弹 + var ids = []; + for (var i in core.status.thisMap.blocks) { + var block = core.status.thisMap.blocks[i]; + if (core.isset(block.event) && block.event.cls == 'enemys' && Math.abs(block.x-core.status.hero.loc.x)+Math.abs(block.y-core.status.hero.loc.y)<=1) { + var enemy = core.material.enemys[block.event.id]; + if (core.isset(enemy.bomb) && !enemy.bomb) continue; + ids.push(i); + } + } + if (ids.length>0) { + core.status.event.data = ids; + return true; + } + return false; + } + if (itemId == 'earthquake') { + var ids = [] + for (var i in core.status.thisMap.blocks) { + var block = core.status.thisMap.blocks[i]; + if (core.isset(block.event) && (block.event.id == 'yellowWall' || block.event.id == 'blueWall' || block.event.id == 'whiteWall')) + ids.push(i); + } + if (ids.length>0) { + core.status.event.data = ids; + return true; + } + return false; + } + if (itemId == 'centerFly') { + // 中心对称 + var toX = 12 - core.getHeroLoc('x'), toY = 12-core.getHeroLoc('y'); + var blocks = core.status.thisMap.blocks; + for (var s = 0; s < blocks.length; s++) { + if (blocks[s].x == toX && blocks[s].y == toY) { + return false; + } + } + core.status.event.data = {'x': toX, 'y': toY}; + return true; + } + if (itemId == 'upFly') { + // 上楼器 + if (core.status.floorId == 'MT20' || core.status.floorId == 'MT21') // 禁用条件 + return false; + var toId = null, found = false; // 上楼后的楼层ID + for (var id in core.status.maps) { + if (found) {toId = id; break;} + if (id == core.status.floorId) found=true; + } + if (!found) return false; + // 检查是否存在block(不是空地) + var toX = core.getHeroLoc('x'), toY = core.getHeroLoc('y'); + var blocks = core.status.maps[toId].blocks; + for (var s = 0; s < blocks.length; s++) { + if (blocks[s].x == toX && blocks[s].y == toY) { + return false; + } + } + // 可以上楼,记录下位置信息,返回true + core.status.event.data = {'id': toId, 'x': toX, 'y': toY}; + return true; + } + if (itemId == 'downFly') { + // 下楼器 + if (core.status.floorId == 'MT0' || core.status.floorId == 'MT21') + return false; + var toId = null; + for (var id in core.status.maps) { + if (id == core.status.floorId) break; + toId = id; + } + if (toId == null) return false; + var toX = core.getHeroLoc('x'), toY = core.getHeroLoc('y'); + var blocks = core.status.maps[toId].blocks; + for (var s = 0; s < blocks.length; s++) { + if (blocks[s].x == toX && blocks[s].y == toY) { + return false; + } + } + core.status.event.data = {'id': toId, 'x': toX, 'y': toY}; + return true; + } + return false; +} + +items.prototype.getItemEffect = function(itemId, itemNum) { + var itemCls = core.material.items[itemId].cls; + // 消耗品 + if (itemCls === 'items') { + if (itemId === 'redJewel') core.status.hero.atk += 3; + if (itemId === 'blueJewel') core.status.hero.def += 3; + if (itemId === 'greenJewel') core.status.hero.mdef += 3; + // if (itemId == 'yellowJewel') core.status.hero.atk+=0; + if (itemId === 'redPotion') core.status.hero.hp += 200; + if (itemId === 'bluePotion') core.status.hero.hp += 500; + if (itemId === 'yellowPotion') core.status.hero.hp += 500; + if (itemId === 'greenPotion') core.status.hero.hp += 800; + if (itemId === 'sword1') core.status.hero.atk += 10; + if (itemId === 'sword2') core.status.hero.atk += 100; + if (itemId === 'sword5') core.status.hero.atk += 1000; + if (itemId === 'shield1') core.status.hero.def += 10; + if (itemId === 'shield2') core.status.hero.def += 100; + if (itemId === 'shield5') { + core.status.hero.def += 1000; + core.status.hero.flags.hasShield5 = true; + } + if (itemId === 'bigKey') { + core.status.hero.items.keys.yellowKey++; + core.status.hero.items.keys.blueKey++; + core.status.hero.items.keys.redKey++; + } + if (itemId == 'superPotion') core.status.hero.hp *= 2; + } + else { + core.addItem(itemId, itemNum); + } +} + +items.prototype.getItemEffectTip = function(itemId) { + if (itemId === 'redJewel') return ",攻击+3"; + if (itemId === 'blueJewel') return ",防御+3"; + if (itemId === 'greenJewel') return ",魔防+3"; + // if (itemId == 'yellowJewel') ; + if (itemId === 'redPotion') return ",生命+200"; + if (itemId === 'bluePotion') return ",生命+500"; + if (itemId === 'yellowPotion') return ",生命+500"; + if (itemId === 'greenPotion') return ",生命+800"; + if (itemId === 'sword1') return ",攻击+10"; + if (itemId === 'sword2') return ",攻击+100"; + if (itemId === 'sword5') return ",攻击+1000"; + if (itemId === 'shield1') return ",防御+10"; + if (itemId === 'shield2') return ",防御+100"; + if (itemId === 'shield5') return ",防御+1000"; + if (itemId === 'bigKey') return ",全钥匙+1"; + if (itemId === 'superPotion') return ",生命值翻倍"; + return ""; +} diff --git a/libs/items.min.js b/libs/items.min.js new file mode 100644 index 00000000..b90ddebb --- /dev/null +++ b/libs/items.min.js @@ -0,0 +1 @@ +function items(){}items.prototype.init=function(){this.items={yellowKey:{cls:"keys",name:"黄钥匙"},blueKey:{cls:"keys",name:"蓝钥匙"},redKey:{cls:"keys",name:"红钥匙"},redJewel:{cls:"items",name:"红宝石"},blueJewel:{cls:"items",name:"蓝宝石"},greenJewel:{cls:"items",name:"绿宝石"},yellowJewel:{cls:"items",name:"黄宝石"},redPotion:{cls:"items",name:"红血瓶"},bluePotion:{cls:"items",name:"蓝血瓶"},yellowPotion:{cls:"items",name:"黄血瓶"},greenPotion:{cls:"items",name:"绿血瓶"},sword1:{cls:"items",name:"铁剑"},sword2:{cls:"items",name:"银剑"},sword3:{cls:"items",name:"骑士剑"},sword4:{cls:"items",name:"圣剑"},sword5:{cls:"items",name:"神圣剑"},shield1:{cls:"items",name:"铁盾"},shield2:{cls:"items",name:"银盾"},shield3:{cls:"items",name:"骑士盾"},shield4:{cls:"items",name:"圣盾"},shield5:{cls:"items",name:"神圣盾"},superPotion:{cls:"items",name:"圣水"},bigKey:{cls:"items",name:"钥匙盒"},greenKey:{cls:"tools",name:"绿钥匙",text:"可以打开一扇绿门"},steelKey:{cls:"tools",name:"铁门钥匙",text:"可以打开一扇铁门"},book:{cls:"constants",name:"怪物手册",text:"可以查看当前楼层各怪物属性。"},fly:{cls:"constants",name:"楼层传送器",text:"可以自由往来去过的楼层。"},coin:{cls:"constants",name:"幸运金币",text:"持有时打败怪物可得双倍金币"},snow:{cls:"constants",name:"冰冻徽章",text:"可以将面前的一块熔岩变成平地"},cross:{cls:"constants",name:"十字架",text:"持有后无视怪物的无敌属性"},pickaxe:{cls:"tools",name:"破墙镐",text:"可以破坏勇士四周的墙。"},icePickaxe:{cls:"tools",name:"破冰稿",text:"可以破坏勇士面前的一堵冰墙。"},bomb:{cls:"tools",name:"炸弹",text:"可以炸掉勇士四周的怪物。"},centerFly:{cls:"tools",name:"中心对称飞行器",text:"可以飞向当前楼层中心对称的位置。"},upFly:{cls:"tools",name:"上楼器",text:"可以飞往楼上的相同位置。"},downFly:{cls:"tools",name:"下楼器",text:"可以飞往楼下的相同位置。"},earthquake:{cls:"tools",name:"地震卷轴",text:"可以破坏当前层的所有墙"}}};items.prototype.getItems=function(a){if(a==undefined){return this.items}return this.items[itemsName]};main.instance.items=new items();items.prototype.useItem=function(b){if(!this.canUseItem(b)){return}var a=core.material.items[b].cls;if(a=="constants"){if(b=="book"){core.ui.drawEnemyBook(1)}if(b=="fly"){core.ui.drawFly(core.status.hero.flyRange.indexOf(core.status.floorId))}}if(a=="tools"){core.status.hero.items[a][b]--;if(b=="earthquake"||b=="bomb"||b=="pickaxe"){core.removeBlockByIds(core.status.floorId,core.status.event.data);core.drawMap(core.status.floorId,function(){core.drawHero(core.getHeroLoc("direction"),core.getHeroLoc("x"),core.getHeroLoc("y"),"stop");core.updateFg();core.drawTip(core.material.items[b].name+"使用成功");if(b=="bomb"&&core.flags.bombTrigger){core.events.afterBattle()}})}if(b=="centerFly"){core.clearMap("hero",0,0,416,416);core.setHeroLoc("x",core.status.event.data.x);core.setHeroLoc("y",core.status.event.data.y);core.drawHero(core.getHeroLoc("direction"),core.getHeroLoc("x"),core.getHeroLoc("y"),"stop");core.drawTip(core.material.items[b].name+"使用成功")}if(b=="upFly"||b=="downFly"){core.changeFloor(core.status.event.data.id,null,{direction:core.status.hero.loc.direction,x:core.status.event.data.x,y:core.status.event.data.y},function(){core.drawTip(core.material.items[b].name+"使用成功")})}if(core.status.hero.items[a][b]==0){delete core.status.hero.items[a][b]}}};items.prototype.canUseItem=function(k){if(!core.hasItem(k)){return false}var e=core.material.items[k].cls;if(k=="book"){return true}if(k=="fly"){return core.status.hero.flyRange.indexOf(core.status.floorId)>=0}if(k=="pickaxe"){var b=[];for(var h in core.status.thisMap.blocks){var g=core.status.thisMap.blocks[h];if(core.isset(g.event)&&g.event.id=="yellowWall"){if(core.flags.picaxeFourDirections){if(Math.abs(g.x-core.status.hero.loc.x)+Math.abs(g.y-core.status.hero.loc.y)<=1){b.push(h)}}else{var o={up:{x:0,y:-1},left:{x:-1,y:0},down:{x:0,y:1},right:{x:1,y:0}};if(g.x==core.status.hero.loc.x+o[core.status.hero.loc.direction].x&&g.y==core.status.hero.loc.y+o[core.status.hero.loc.direction].y){b.push(h)}}}}if(b.length>0){core.status.event.data=b;return true}return false}if(k=="bomb"){var b=[];for(var h in core.status.thisMap.blocks){var g=core.status.thisMap.blocks[h];if(core.isset(g.event)&&g.event.cls=="enemys"&&Math.abs(g.x-core.status.hero.loc.x)+Math.abs(g.y-core.status.hero.loc.y)<=1){var f=core.material.enemys[g.event.id];if(core.isset(f.bomb)&&!f.bomb){continue}b.push(h)}}if(b.length>0){core.status.event.data=b;return true}return false}if(k=="earthquake"){var b=[];for(var h in core.status.thisMap.blocks){var g=core.status.thisMap.blocks[h];if(core.isset(g.event)&&(g.event.id=="yellowWall"||g.event.id=="blueWall"||g.event.id=="whiteWall")){b.push(h)}}if(b.length>0){core.status.event.data=b;return true}return false}if(k=="centerFly"){var l=12-core.getHeroLoc("x"),j=12-core.getHeroLoc("y");var a=core.status.thisMap.blocks;for(var n=0;n', 270, top+height-13, '#CCCCCC', '13px Verdana'); +} + +/** + * 绘制确认/取消警告 + * @param text + * @param yesCallback + * @param noCallback + */ +ui.prototype.drawConfirmBox = function (text, yesCallback, noCallback) { + core.status.event.id = 'confirmBox'; + core.status.event.data = {'yes': yesCallback, 'no': noCallback}; + + var background = core.canvas.ui.createPattern(core.material.ground, "repeat"); + core.clearMap('ui', 0, 0, 416, 416); + core.setAlpha('ui', 1); + core.setFillStyle('ui', background); + core.setFont('ui', "bold 19px Verdana"); + + var contents = text.split('\n'); + var lines = contents.length; + var max_length = 0; + for (var i in contents) { + max_length = Math.max(max_length, core.canvas.ui.measureText(contents[i]).width); + } + + var left = Math.min(208 - 40 - max_length / 2, 100); + var top = 140 - (lines-1)*30; + var right = 416 - 2 * left, bottom = 416 - 140 - top; + + core.fillRect('ui', left, top, right, bottom, background); + core.strokeRect('ui', left - 1, top - 1, right + 1, bottom + 1, '#FFFFFF', 2); + core.canvas.ui.textAlign = "center"; + for (var i in contents) { + core.fillText('ui', contents[i], 208, top + 50 + i*30, "#FFFFFF"); + } + + core.fillText('ui', "确定", 208 - 38, top + bottom - 35, "#FFFFFF", "bold 17px Verdana"); + core.fillText('ui', "取消", 208 + 38, top + bottom - 35); +} + +/** + * 绘制菜单栏 + * @param need + */ +ui.prototype.drawSettings = function (need) { + if (!core.checkStatus('settings', need)) + return; + + var background = core.canvas.ui.createPattern(core.material.ground, "repeat"); + core.clearMap('ui', 0, 0, 416, 416); + core.setAlpha('ui', 1); + core.setFillStyle('ui', background); + var left = 97, top = 64, right = 416 - 2 * left, bottom = 416 - 2 * top; + core.fillRect('ui', left, top, right, bottom, background); + core.strokeRect('ui', left - 1, top - 1, right + 1, bottom + 1, '#FFFFFF', 2); + + core.canvas.ui.textAlign = "center"; + core.fillText('ui', "音乐: " + (core.musicStatus.soundStatus ? "[ON]" : "[OFF]"), 208, top + 56, "#FFFFFF", "bold 17px Verdana"); + core.fillText('ui', "快捷商店", 208, top + 88, "#FFFFFF", "bold 17px Verdana"); + core.fillText('ui', "降低难度", 208, top + 120, "#FFFFFF", "bold 17px Verdana"); + core.fillText('ui', "同步存档", 208, top + 152, "#FFFFFF", "bold 17px Verdana"); + core.fillText('ui', "重新开始", 208, top + 184, "#FFFFFF", "bold 17px Verdana"); + core.fillText('ui', "关于本塔", 208, top + 216, "#FFFFFF", "bold 17px Verdana"); + core.fillText('ui', "返回游戏", 208, top + 248, "#FFFFFF", "bold 17px Verdana"); + +} + +/** + * 绘制“选择商店”窗口 + * @param need + */ +ui.prototype.drawSelectShop = function (need) { + + if (core.isset(need) && !core.checkStatus('selectShop', need)) + return; + + core.status.event.id = 'selectShop'; + var background = core.canvas.ui.createPattern(core.material.ground, "repeat"); + core.clearMap('ui', 0, 0, 416, 416); + core.setAlpha('ui', 1); + core.setFillStyle('ui', background); + + var shopList = core.status.shops, keys = Object.keys(shopList); + var len = keys.length + 1; + if (len % 2 == 0) len++; + + var left = 97, top = 208 - 32 - 16 * len, right = 416 - 2 * left, bottom = 416 - 2 * top; + core.fillRect('ui', left, top, right, bottom, background); + core.strokeRect('ui', left - 1, top - 1, right + 1, bottom + 1, '#FFFFFF', 2); + + core.canvas.ui.textAlign = "center"; + for (var i = 0; i < keys.length; i++) { + core.fillText('ui', shopList[keys[i]].name, 208, top + 56 + 32 * i, "#FFFFFF", "bold 17px Verdana"); + } + + core.fillText('ui', "返回游戏", 208, top + bottom - 40); + +} + +/** + * 绘制商店 + * @param id + */ +ui.prototype.drawShop = function (id) { + var shop = core.status.shops[id]; + // 正在移动中... + + if (!core.status.heroStop) { + setTimeout(function () { + core.ui.drawShop(id); + }, 30); + return; + } + + core.status.event.data = shop; + core.status.event.id = 'shop'; + core.lockControl(); + shop.visited = true; + + var background = core.canvas.ui.createPattern(core.material.ground, "repeat"); + + var times = shop.times, need = eval(shop.need); + + clearInterval(core.interval.tipAnimate); + core.clearMap('data', 0, 0, 416, 416); + core.setOpacity('data', 1); + + core.clearMap('ui', 0, 0, 416, 416); + core.setAlpha('ui', 1); + core.setFillStyle('ui', background); + + var left = 97, top = 64, right = 416 - 2 * left, bottom = 416 - 2 * top; + core.fillRect('ui', left, top, right, bottom, background); + core.strokeRect('ui', left - 1, top - 1, right + 1, bottom + 1, '#FFFFFF', 2); + + // 名称 + core.canvas.ui.textAlign = "center"; + core.fillText('ui', shop.title, left + 135, top + 34, '#FFFFFF', 'bold 19px Verdana'); + + // 动画 + core.strokeRect('ui', left + 15 - 1, top + 30 - 1, 34, 34, '#DDDDDD', 2); + core.status.boxAnimateObjs = []; + core.status.boxAnimateObjs.push({ + 'bgx': left + 15, 'bgy': top + 30, 'bgsize': 32, + 'image': core.material.images.npcs, + 'x': left + 15, 'y': top + 30, 'icon': core.material.icons.npcs[shop.icon] + }); + core.setBoxAnimate(core.firstData.animateSpeed); + + // 对话 + core.canvas.ui.textAlign = "left"; + if (need<0) need="若干"; + var use = shop.use=='experience'?"经验":"金币"; + core.fillText('ui', "勇敢的武士啊,给我" + need, left + 60, top + 65, '#FFFFFF', 'bold 14px Verdana'); + core.fillText('ui', use + "你就可以:", left + 60, top + 83); + + // 选项 + core.canvas.ui.textAlign = "center"; + for (var i = 0; i < shop.choices.length; i++) { + var choice = shop.choices[i]; + var text = choice.text; + if (core.isset(choice.need)) + text += "("+eval(choice.need)+use+")" + core.fillText('ui', text, 208, top + 120 + 32 * i, "#FFFFFF", "bold 17px Verdana"); + } + core.fillText('ui', "退出商店", 208, top + 248); + +} + + +/** + * 绘制“请等候...” + * @param text + */ +ui.prototype.drawWaiting = function(text) { + + core.lockControl(); + core.status.event.id = 'waiting'; + + var background = core.canvas.ui.createPattern(core.material.ground, "repeat"); + core.clearMap('ui', 0, 0, 416, 416); + core.setAlpha('ui', 1); + core.setFillStyle('ui', background); + + var left = 97, top = 208 - 32 - 16, right = 416 - 2 * left, bottom = 416 - 2 * top; + core.fillRect('ui', left, top, right, bottom, background); + core.strokeRect('ui', left - 1, top - 1, right + 1, bottom + 1, '#FFFFFF', 2); + + core.canvas.ui.textAlign = "center"; + core.fillText('ui', text, 208, top + 56, "#FFFFFF", "bold 17px Verdana"); + +} + +/** + * 绘制“存档同步”选项 + */ +ui.prototype.drawSyncSave = function () { + + core.status.event.id = 'syncSave'; + var background = core.canvas.ui.createPattern(core.material.ground, "repeat"); + core.clearMap('ui', 0, 0, 416, 416); + core.setAlpha('ui', 1); + core.setFillStyle('ui', background); + + var left = 97, top = 208 - 32 - 16 * 3, right = 416 - 2 * left, bottom = 416 - 2 * top; + core.fillRect('ui', left, top, right, bottom, background); + core.strokeRect('ui', left - 1, top - 1, right + 1, bottom + 1, '#FFFFFF', 2); + + core.canvas.ui.textAlign = "center"; + core.fillText('ui', "同步存档到服务器", 208, top + 56, "#FFFFFF", "bold 17px Verdana"); + core.fillText('ui', "从服务器加载存档", 208, top + 56 + 32, "#FFFFFF", "bold 17px Verdana"); + core.fillText('ui', "返回游戏", 208, top + bottom - 40); +} + +/** + * 绘制“分页” + * @param page + * @param totalPage + */ +ui.prototype.drawPagination = function (page, totalPage) { + + core.setFont('ui', 'bold 15px Verdana'); + core.setFillStyle('ui', '#DDDDDD'); + + var length = core.canvas.ui.measureText(page + " / " + page).width; + + core.canvas.ui.textAlign = 'left'; + core.fillText('ui', page + " / " + totalPage, (416 - length) / 2, 403); + + core.canvas.ui.textAlign = 'center'; + if (page > 1) + core.fillText('ui', '上一页', 208 - 80, 403); + if (page < totalPage) + core.fillText('ui', '下一页', 208 + 80, 403); + + // 退出 + core.fillText('ui', '返回游戏', 370, 403); + +} + +/** + * 绘制怪物手册 + * @param page 页数 + */ +ui.prototype.drawEnemyBook = function (page) { + + var enemys = core.enemys.getCurrentEnemys(); + var background = core.canvas.ui.createPattern(core.material.ground, "repeat"); + + clearInterval(core.interval.tipAnimate); + core.clearMap('data', 0, 0, 416, 416); + core.setOpacity('data', 1); + + core.clearMap('ui', 0, 0, 416, 416); + core.setAlpha('ui', 1); + core.setFillStyle('ui', background); + core.fillRect('ui', 0, 0, 416, 416); + + core.setAlpha('ui', 0.6); + core.setFillStyle('ui', '#000000'); + core.fillRect('ui', 0, 0, 416, 416); + + core.setAlpha('ui', 1); + core.canvas.ui.textAlign = 'left'; + core.setFont('ui', 'bold 15px Verdana'); + + if (enemys.length == 0) { + core.fillText('ui', "本层无怪物", 83, 222, '#999999', "bold 50px Verdana"); + // 退出 + core.canvas.ui.textAlign = 'center'; + core.fillText('ui', '返回游戏', 370, 403,'#DDDDDD', 'bold 15px Verdana'); + return; + } + + var perpage = 6; + var totalPage = parseInt((enemys.length - 1) / perpage) + 1; + if (page < 1) page = 1; + if (page > totalPage) page = totalPage; + core.status.event.data = page; + var start = (page - 1) * perpage, end = Math.min(page * perpage, enemys.length); + + enemys = enemys.slice(start, end); + core.status.boxAnimateObjs = []; + for (var i = 0; i < enemys.length; i++) { + // 边框 + var enemy = enemys[i]; + core.strokeRect('ui', 22, 62 * i + 22, 42, 42, '#DDDDDD', 2); + + // 怪物 + core.status.boxAnimateObjs.push({ + 'bgx': 22, 'bgy': 62 * i + 22, 'bgsize': 42, + 'image': core.material.images.enemys, + 'x': 27, 'y': 62 * i + 27, 'icon': core.material.icons.enemys[enemy.id] + }); + + // 数据 + core.canvas.ui.textAlign = "center"; + core.fillText('ui', enemy.name, 115, 62 * i + 47, '#DDDDDD', 'bold 17px Verdana'); + core.canvas.ui.textAlign = "left"; + core.fillText('ui', '生命', 165, 62 * i + 32, '#DDDDDD', '13px Verdana'); + core.fillText('ui', enemy.hp, 195, 62 * i + 32, '#DDDDDD', 'bold 13px Verdana'); + core.fillText('ui', '攻击', 255, 62 * i + 32, '#DDDDDD', '13px Verdana'); + core.fillText('ui', enemy.atk, 285, 62 * i + 32, '#DDDDDD', 'bold 13px Verdana'); + core.fillText('ui', '防御', 335, 62 * i + 32, '#DDDDDD', '13px Verdana'); + core.fillText('ui', enemy.def, 365, 62 * i + 32, '#DDDDDD', 'bold 13px Verdana'); + core.fillText('ui', '金币', 165, 62 * i + 50, '#DDDDDD', '13px Verdana'); + core.fillText('ui', enemy.money, 195, 62 * i + 50, '#DDDDDD', 'bold 13px Verdana'); + + var damage_offset = 326; + if (core.flags.enableExperience) { + core.canvas.ui.textAlign = "left"; + core.fillText('ui', '经验', 255, 62 * i + 50, '#DDDDDD', '13px Verdana'); + core.fillText('ui', enemy.experience, 285, 62 * i + 50, '#DDDDDD', 'bold 13px Verdana'); + damage_offset = 361; + } + + core.canvas.ui.textAlign = "center"; + var damage = enemy.damage; + var color = '#FFFF00'; + if (damage >= core.status.hero.hp) color = '#FF0000'; + if (damage == 0) color = '#00FF00'; + if (damage >= 999999999) damage = '无法战斗'; + var length = core.canvas.ui.measureText(damage).width; + core.fillText('ui', damage, damage_offset, 62 * i + 50, color, 'bold 13px Verdana'); + + core.canvas.ui.textAlign = "left"; + // 属性 + if (enemy.special != '') { + core.setFont('data', 'bold 12px Verdana'); + var length = core.canvas.data.measureText(enemy.special).width; + core.setAlpha('data', '0.4'); + core.fillRect('data', 64 - 4 - length, 62 * i + 46, length + 4, 17, '#000000'); + core.setAlpha('data', '1'); + core.fillText('data', enemy.special, 64 - 2 - length, 62 * i + 59, '#FF6A6A', 'bold 12px Verdana') + } + + core.fillText('ui', '临界', 165, 62 * i + 68, '#DDDDDD', '13px Verdana'); + core.fillText('ui', enemy.critical, 195, 62 * i + 68, '#DDDDDD', 'bold 13px Verdana'); + core.fillText('ui', '减伤', 255, 62 * i + 68, '#DDDDDD', '13px Verdana'); + core.fillText('ui', enemy.criticalDamage, 285, 62 * i + 68, '#DDDDDD', 'bold 13px Verdana'); + core.fillText('ui', '1防', 335, 62 * i + 68, '#DDDDDD', '13px Verdana'); + core.fillText('ui', enemy.defDamage, 365, 62 * i + 68, '#DDDDDD', 'bold 13px Verdana'); + + } + core.setBoxAnimate(core.firstData.animateSpeed); + this.drawPagination(page, totalPage); +} + +/** + * 绘制楼传器 + * @param page + */ +ui.prototype.drawFly = function(page) { + + if (page<0) page=0; + if (page>=core.status.hero.flyRange.length) page=core.status.hero.flyRange.length-1; + core.status.event.data = page; + + var floorId = core.status.hero.flyRange[page]; + var title = core.status.maps[floorId].title; + + core.clearMap('ui', 0, 0, 416, 416); + core.setAlpha('ui', 0.85); + core.fillRect('ui', 0, 0, 416, 416, '#000000'); + core.setAlpha('ui', 1); + core.canvas.ui.textAlign = 'center'; + core.fillText('ui', '楼层跳跃', 208, 60, '#FFFFFF', "bold 28px Verdana"); + core.fillText('ui', '返回游戏', 208, 403, '#FFFFFF', "bold 15px Verdana") + core.fillText('ui', title, 356, 247, '#FFFFFF', "bold 19px Verdana"); + if (page0) + core.fillText('ui', '▼', 356, 247+64, '#FFFFFF', "17px Verdana"); + core.strokeRect('ui', 20, 100, 273, 273, '#FFFFFF', 2); + this.drawThumbnail('ui', core.status.maps[floorId].blocks, 20, 100, 273); +} + +/** + * 绘制工具栏 + * @param selectId + */ +ui.prototype.drawToolbox = function(selectId) { + + if (!core.hasItem(selectId)) + selectId=null; + core.status.event.data=selectId; + + core.clearMap('ui', 0, 0, 416, 416); + core.setAlpha('ui', 0.85); + core.fillRect('ui', 0, 0, 416, 416, '#000000'); + core.setAlpha('ui', 1); + core.setFillStyle('ui', '#DDDDDD'); + core.setStrokeStyle('ui', '#DDDDDD'); + core.canvas.ui.lineWidth = 2; + core.canvas.ui.strokeWidth = 2; + + // 画线 + core.canvas.ui.beginPath(); + core.canvas.ui.moveTo(0, 130); + core.canvas.ui.lineTo(416, 130); + core.canvas.ui.stroke(); + core.canvas.ui.beginPath(); + core.canvas.ui.moveTo(0,129); + core.canvas.ui.lineTo(0,105); + core.canvas.ui.lineTo(72,105); + core.canvas.ui.lineTo(102,129); + core.canvas.ui.fill(); + + core.canvas.ui.beginPath(); + core.canvas.ui.moveTo(0, 290); + core.canvas.ui.lineTo(416, 290); + core.canvas.ui.stroke(); + core.canvas.ui.beginPath(); + core.canvas.ui.moveTo(0,289); + core.canvas.ui.lineTo(0,265); + core.canvas.ui.lineTo(72,265); + core.canvas.ui.lineTo(102,289); + core.canvas.ui.fill(); + + // 文字 + core.canvas.ui.textAlign = 'left'; + core.fillText('ui', "消耗道具", 5, 124, '#333333', "bold 16px Verdana"); + core.fillText('ui', "永久道具", 5, 284); + + // 描述 + if (core.isset(selectId)) { + var item=core.material.items[selectId]; + core.fillText('ui', item.name, 10, 32, '#FFD700', "bold 20px Verdana") + core.fillText('ui', item.text, 10, 62, '#FFFFFF', '17px Verdana'); + core.fillText('ui', '<继续点击该道具即可进行使用>', 10, 89, '#CCCCCC', '14px Verdana'); + } + + core.canvas.ui.textAlign = 'right'; + var images = core.material.images.items; + // 消耗道具 + var tools = Object.keys(core.status.hero.items.tools).sort(); + for (var i=0;i=30) page=29; + core.status.event.data = page; + core.status.savePage = page; + + core.clearMap('ui', 0, 0, 416, 416); + core.setAlpha('ui', 0.85); + core.fillRect('ui', 0, 0, 416, 416, '#000000'); + core.setAlpha('ui', 1); + core.canvas.ui.textAlign = 'center'; + + var u=416/6, size=117; + + var name=core.status.event.id=='save'?"存档":"读档"; + for (var i=0;i<6;i++) { + var id=6*page+i+1; + var data=core.getLocalStorage("save"+id,null); + + if (i<3) { + core.fillText('ui', name+id, (2*i+1)*u, 35, '#FFFFFF', "bold 17px Verdana"); + core.strokeRect('ui', (2*i+1)*u-size/2, 50, size, size, '#FFFFFF', 2); + if (core.isset(data) && core.isset(data.floorId)) { + this.drawThumbnail('ui', core.maps.load(data.maps, data.floorId).blocks, (2*i+1)*u-size/2, 50, size, data.hero.loc, data.hero.id); + core.fillText('ui', core.formatDate(new Date(data.time)), (2*i+1)*u, 65+size, '#FFFFFF', '10px Verdana'); + } + else { + core.fillRect('ui', (2*i+1)*u-size/2, 50, size, size, '#333333', 2); + core.fillText('ui', '空', (2*i+1)*u, 117, '#FFFFFF', 'bold 30px Verdana'); + } + } + else { + core.fillText('ui', name+id, (2*i-5)*u, 230, '#FFFFFF', "bold 17px Verdana"); + core.strokeRect('ui', (2*i-5)*u-size/2, 245, size, size, '#FFFFFF', 2); + if (core.isset(data) && core.isset(data.floorId)) { + this.drawThumbnail('ui', core.maps.load(data.maps, data.floorId).blocks, (2*i-5)*u-size/2, 245, size, data.hero.loc, data.hero.id); + core.fillText('ui', core.formatDate(new Date(data.time)), (2*i-5)*u, 260+size, '#FFFFFF', '10px Verdana'); + } + else { + core.fillRect('ui', (2*i-5)*u-size/2, 245, size, size, '#333333', 2); + core.fillText('ui', '空', (2*i-5)*u, 245+70, '#FFFFFF', 'bold 30px Verdana'); + } + } + } + this.drawPagination(page+1, 30); + +} + +/** + * 绘制缩略图 + * @param canvas + * @param blocks + * @param x + * @param y + * @param size + * @param heroLoc + * @param heroId + */ +ui.prototype.drawThumbnail = function(canvas, blocks, x, y, size, heroLoc, heroId) { + core.clearMap(canvas, x, y, size, size); + var persize = size/13; + for (var i=0;i<13;i++) { + for (var j=0;j<13;j++) { + var blockIcon = core.material.icons.terrains.ground; + var blockImage = core.material.images.terrains; + core.canvas[canvas].drawImage(blockImage, 0, blockIcon.loc * blockIcon.size, blockIcon.size, blockIcon.size, x + i * persize, y + j * persize, persize, persize); + } + } + for (var b in blocks) { + var block = blocks[b]; + if (core.isset(block.event)) { + var i = block.x, j = block.y; + var blockIcon = core.material.icons[block.event.cls][block.event.id]; + var blockImage = core.material.images[block.event.cls]; + //core.canvas[canvas].clearRect(x + i * persize, y + j * persize, persize, persize); + core.canvas[canvas].drawImage(blockImage, 0, blockIcon.loc * blockIcon.size, blockIcon.size, blockIcon.size, x + i * persize, y + j * persize, persize, persize); + } + } + if (core.isset(heroLoc)) { + var id = core.isset(heroId)?heroId:core.status.hero.id; + var heroIcon = core.material.icons.heros[id][heroLoc.direction]; + core.canvas[canvas].drawImage(core.material.images.heros, heroIcon.loc['stop'] * heroIcon.size, heroIcon.loc.iconLoc * heroIcon.size, heroIcon.size, heroIcon.size, x+persize*heroLoc.x, y+persize*heroLoc.y, persize, persize); + } +} + +/** + * 绘制"关于" + */ +ui.prototype.drawAbout = function() { + + if (!core.isPlaying()) { + core.status.event = {'id': null, 'data': null}; + core.dom.startPanel.style.display = 'none'; + } + core.lockControl(); + core.status.event.id = 'about'; + + core.clearMap('ui', 0, 0, 416, 416); + var left = 48, top = 36, right = 416 - 2 * left, bottom = 416 - 2 * top; + + core.setAlpha('ui', 0.85); + core.fillRect('ui', left, top, right, bottom, '#000000'); + core.setAlpha('ui', 1); + core.strokeRect('ui', left - 1, top - 1, right + 1, bottom + 1, '#FFFFFF', 2); + + var text_start = left + 24; + + // 名称 + core.canvas.ui.textAlign = "left"; + core.fillText('ui', "异空间", text_start, top+35, "#FFD700", "bold 22px Verdana"); + core.fillText('ui', "HTML5复刻版", text_start+75, top+37, "#DDDDDD", "bold 15px Verdana"); + core.fillText('ui', "作者: 艾之葵", text_start, top + 80, "#FFFFFF", "bold 17px Verdana"); + core.fillText('ui', "原作: ss433_2", text_start, top + 112, "#FFFFFF", "bold 17px Verdana"); + core.fillText('ui', "制作工具: WebStorm", text_start, top + 144, "#FFFFFF", "bold 17px Verdana"); + core.fillText('ui', "测试平台: Chrome/微信/iOS", text_start, top + 176, "#FFFFFF", "bold 17px Verdana"); + core.fillText('ui', '特别鸣谢: ss433_2', text_start, top+208); + var len = core.canvas.ui.measureText('特别鸣谢: ').width; + core.fillText('ui', 'iEcho', text_start+len, top+240); + core.fillText('ui', '打Dota的喵', text_start+len, top+272); + core.fillText('ui', 'HTML5魔塔交流群:539113091', text_start, top+304); +} \ No newline at end of file diff --git a/libs/ui.min.js b/libs/ui.min.js new file mode 100644 index 00000000..cae71961 --- /dev/null +++ b/libs/ui.min.js @@ -0,0 +1 @@ +function ui(){}ui.prototype.init=function(){};main.instance.ui=new ui();ui.prototype.closePanel=function(a){core.status.boxAnimateObjs=[];core.setBoxAnimate(core.firstData.animateSpeed);core.clearMap("ui",0,0,416,416);core.setAlpha("ui",1);if(core.isset(a)&&a){core.clearMap("data",0,0,416,416)}core.unLockControl();core.status.event.data=null;core.status.event.id=null};ui.prototype.drawTextBox=function(l,e){core.lockControl();if(core.status.event.id==null){core.status.event.id="text"}var c=core.canvas.ui.createPattern(core.material.ground,"repeat");var g=l.split("\n");core.clearMap("ui",0,0,416,416);var q=416-10-Math.min(416-24*(g.length+1)-65,250);var f=10,n=(416-q)/2,p=416-2*f,a=q;core.setAlpha("ui",0.85);core.fillRect("ui",f,n,p,a,"#000000");core.setAlpha("ui",1);core.strokeRect("ui",f-1,n-1,p+1,a+1,"#FFFFFF",2);core.canvas.ui.textAlign="left";var d=f+25,o=n+35;if(core.isset(e)){d=f+63;o=n+57;var b,h,r;core.strokeRect("ui",f+15-1,n+40-1,34,34,"#FFD700",2);if(e=="hero"){core.fillText("ui",core.status.hero.name,f+63,n+30,"#FFD700","bold 22px Verdana");core.status.boxAnimateObjs=[];core.setBoxAnimate(core.firstData.animateSpeed);core.clearMap("ui",f+15,n+40,32,32);core.fillRect("ui",f+15,n+40,32,32,c);var k=core.material.icons.heros[core.status.hero.id]["down"];core.canvas.ui.drawImage(core.material.images.heros,k.loc.stop*k.size,k.loc.iconLoc*k.size,k.size,k.size,f+15,n+40,32,32)}else{var b=null,h=null,m=null;if(core.material.npcs.hasOwnProperty(e)){b=core.material.npcs[e].name;h=core.material.images.npcs;m=core.material.icons.npcs[core.material.npcs[e].icon]}else{if(core.material.enemys.hasOwnProperty(e)){b=core.material.enemys[e].name;h=core.material.images.enemys;m=core.material.icons.enemys[e]}}if(b!=null){core.fillText("ui",b,f+63,n+30,"#FFD700","bold 22px Verdana");core.status.boxAnimateObjs=[];core.status.boxAnimateObjs.push({bgx:f+15,bgy:n+40,bgsize:32,image:h,x:f+15,y:n+40,icon:m});core.setBoxAnimate(core.firstData.animateSpeed)}}}for(var j=0;j",270,n+q-13,"#CCCCCC","13px Verdana")};ui.prototype.showConfirmBox=function(k,e,l){core.status.event.id="confirmBox";core.status.event.data={yes:e,no:l};var b=core.canvas.ui.createPattern(core.material.ground,"repeat");core.clearMap("ui",0,0,416,416);core.setAlpha("ui",1);core.setFillStyle("ui",b);core.setFont("ui","bold 19px Verdana");var d=k.split("\n");var m=d.length;var j=0;for(var f in d){j=Math.max(j,core.canvas.ui.measureText(d[f]).width)}var c=Math.min(208-40-j/2,100);var g=140-(m-1)*30;var h=416-2*c,a=416-140-g;core.fillRect("ui",c,g,h,a,b);core.strokeRect("ui",c-1,g-1,h+1,a+1,"#FFFFFF",2);core.canvas.ui.textAlign="center";for(var f in d){core.fillText("ui",d[f],208,g+50+f*30,"#FFFFFF")}core.fillText("ui","确定",208-38,g+a-35,"#FFFFFF","bold 17px Verdana");core.fillText("ui","取消",208+38,g+a-35)};ui.prototype.drawSettings=function(d){if(!core.checkStatus("settings",d)){return}var c=core.canvas.ui.createPattern(core.material.ground,"repeat");core.clearMap("ui",0,0,416,416);core.setAlpha("ui",1);core.setFillStyle("ui",c);var f=97,e=64,b=416-2*f,a=416-2*e;core.fillRect("ui",f,e,b,a,c);core.strokeRect("ui",f-1,e-1,b+1,a+1,"#FFFFFF",2);core.canvas.ui.textAlign="center";core.fillText("ui","音乐: "+(core.musicStatus.soundStatus?"[ON]":"[OFF]"),208,e+56,"#FFFFFF","bold 17px Verdana");core.fillText("ui","快捷商店",208,e+88,"#FFFFFF","bold 17px Verdana");core.fillText("ui","降低难度",208,e+120,"#FFFFFF","bold 17px Verdana");core.fillText("ui","同步存档",208,e+152,"#FFFFFF","bold 17px Verdana");core.fillText("ui","重新开始",208,e+184,"#FFFFFF","bold 17px Verdana");core.fillText("ui","关于本塔",208,e+216,"#FFFFFF","bold 17px Verdana");core.fillText("ui","返回游戏",208,e+248,"#FFFFFF","bold 17px Verdana")};ui.prototype.drawSelectShop=function(g){if(core.isset(g)&&!core.checkStatus("selectShop",g)){return}core.status.event.id="selectShop";var b=core.canvas.ui.createPattern(core.material.ground,"repeat");core.clearMap("ui",0,0,416,416);core.setAlpha("ui",1);core.setFillStyle("ui",b);var k=core.status.shops,j=Object.keys(k);var e=j.length+1;if(e%2==0){e++}var c=97,f=208-32-16*e,h=416-2*c,a=416-2*f;core.fillRect("ui",c,f,h,a,b);core.strokeRect("ui",c-1,f-1,h+1,a+1,"#FFFFFF",2);core.canvas.ui.textAlign="center";for(var d=0;d1){core.fillText("ui","上一页",208-80,403)}if(cj){k=j}core.status.event.data=k;var b=(k-1)*g,f=Math.min(k*g,m.length);m=m.slice(b,f);core.status.boxAnimateObjs=[];for(var h=0;h=core.status.hero.hp){e="#FF0000"}if(l==0){e="#00FF00"}if(l>=999999999){l="无法战斗"}var c=core.canvas.ui.measureText(l).width;core.fillText("ui",l,n,62*h+50,e,"bold 13px Verdana");core.canvas.ui.textAlign="left";if(d.special!=""){core.setFont("data","bold 12px Verdana");var c=core.canvas.data.measureText(d.special).width;core.setAlpha("data","0.4");core.fillRect("data",64-4-c,62*h+46,c+4,17,"#000000");core.setAlpha("data","1");core.fillText("data",d.special,64-2-c,62*h+59,"#FF6A6A","bold 12px Verdana")}core.fillText("ui","临界",165,62*h+68,"#DDDDDD","13px Verdana");core.fillText("ui",d.critical,195,62*h+68,"#DDDDDD","bold 13px Verdana");core.fillText("ui","减伤",255,62*h+68,"#DDDDDD","13px Verdana");core.fillText("ui",d.criticalDamage,285,62*h+68,"#DDDDDD","bold 13px Verdana");core.fillText("ui","1防",335,62*h+68,"#DDDDDD","13px Verdana");core.fillText("ui",d.defDamage,365,62*h+68,"#DDDDDD","bold 13px Verdana")}core.setBoxAnimate(core.firstData.animateSpeed);this.drawPagination(k,j)};ui.prototype.drawFly=function(b){if(b<0){b=0}if(b>=core.status.hero.flyRange.length){b=core.status.hero.flyRange.length-1}core.status.event.data=b;var a=core.status.hero.flyRange[b];var c=core.status.maps[a].title;core.clearMap("ui",0,0,416,416);core.setAlpha("ui",0.85);core.fillRect("ui",0,0,416,416,"#000000");core.setAlpha("ui",1);core.canvas.ui.textAlign="center";core.fillText("ui","楼层跳跃",208,60,"#FFFFFF","bold 28px Verdana");core.fillText("ui","返回游戏",208,403,"#FFFFFF","bold 15px Verdana");core.fillText("ui",c,356,247,"#FFFFFF","bold 19px Verdana");if(b0){core.fillText("ui","▼",356,247+64,"#FFFFFF","17px Verdana")}core.strokeRect("ui",20,100,273,273,"#FFFFFF",2);this.drawThumbnail("ui",core.status.maps[a].blocks,20,100,273)};ui.prototype.drawToolbox=function(a){if(!core.hasItem(a)){a=null}core.status.event.data=a;core.clearMap("ui",0,0,416,416);core.setAlpha("ui",0.85);core.fillRect("ui",0,0,416,416,"#000000");core.setAlpha("ui",1);core.setFillStyle("ui","#DDDDDD");core.setStrokeStyle("ui","#DDDDDD");core.canvas.ui.lineWidth=2;core.canvas.ui.strokeWidth=2;core.canvas.ui.beginPath();core.canvas.ui.moveTo(0,130);core.canvas.ui.lineTo(416,130);core.canvas.ui.stroke();core.canvas.ui.beginPath();core.canvas.ui.moveTo(0,129);core.canvas.ui.lineTo(0,105);core.canvas.ui.lineTo(72,105);core.canvas.ui.lineTo(102,129);core.canvas.ui.fill();core.canvas.ui.beginPath();core.canvas.ui.moveTo(0,290);core.canvas.ui.lineTo(416,290);core.canvas.ui.stroke();core.canvas.ui.beginPath();core.canvas.ui.moveTo(0,289);core.canvas.ui.lineTo(0,265);core.canvas.ui.lineTo(72,265);core.canvas.ui.lineTo(102,289);core.canvas.ui.fill();core.canvas.ui.textAlign="left";core.fillText("ui","消耗道具",5,124,"#333333","bold 16px Verdana");core.fillText("ui","永久道具",5,284);if(core.isset(a)){var h=core.material.items[a];core.fillText("ui",h.name,10,32,"#FFD700","bold 20px Verdana");core.fillText("ui",h.text,10,62,"#FFFFFF","17px Verdana");core.fillText("ui","<继续点击该道具即可进行使用>",10,89,"#CCCCCC","14px Verdana")}core.canvas.ui.textAlign="right";var f=core.material.images.items;var c=Object.keys(core.status.hero.items.tools).sort();for(var b=0;b=30){f=29}core.status.event.data=f;core.status.savePage=f;core.clearMap("ui",0,0,416,416);core.setAlpha("ui",0.85);core.fillRect("ui",0,0,416,416,"#000000");core.setAlpha("ui",1);core.canvas.ui.textAlign="center";var b=416/6,d=117;var a=core.status.event.id=="save"?"存档":"读档";for(var c=0;c<6;c++){var g=6*f+c+1;var e=core.getLocalStorage("save"+g,null);if(c<3){core.fillText("ui",a+g,(2*c+1)*b,35,"#FFFFFF","bold 17px Verdana");core.strokeRect("ui",(2*c+1)*b-d/2,50,d,d,"#FFFFFF",2);if(core.isset(e)&&core.isset(e.floorId)){this.drawThumbnail("ui",core.maps.load(e.maps,e.floorId).blocks,(2*c+1)*b-d/2,50,d,e.hero.loc,e.hero.id);core.fillText("ui",core.formatDate(new Date(e.time)),(2*c+1)*b,65+d,"#FFFFFF","10px Verdana")}else{core.fillRect("ui",(2*c+1)*b-d/2,50,d,d,"#333333",2);core.fillText("ui","空",(2*c+1)*b,117,"#FFFFFF","bold 30px Verdana")}}else{core.fillText("ui",a+g,(2*c-5)*b,230,"#FFFFFF","bold 17px Verdana");core.strokeRect("ui",(2*c-5)*b-d/2,245,d,d,"#FFFFFF",2);if(core.isset(e)&&core.isset(e.floorId)){this.drawThumbnail("ui",core.maps.load(e.maps,e.floorId).blocks,(2*c-5)*b-d/2,245,d,e.hero.loc,e.hero.id);core.fillText("ui",core.formatDate(new Date(e.time)),(2*c-5)*b,260+d,"#FFFFFF","10px Verdana")}else{core.fillRect("ui",(2*c-5)*b-d/2,245,d,d,"#333333",2);core.fillText("ui","空",(2*c-5)*b,245+70,"#FFFFFF","bold 30px Verdana")}}}this.drawPagination(f+1,30)};ui.prototype.drawThumbnail=function(d,a,r,o,s,e,p){core.clearMap(d,r,o,s,s);var q=s/13;for(var k=0;k<13;k++){for(var h=0;h<13;h++){var g=core.material.icons.terrains.ground;var m=core.material.images.terrains;core.canvas[d].drawImage(m,0,g.loc*g.size,g.size,g.size,r+k*q,o+h*q,q,q)}}for(var n in a){var f=a[n];if(core.isset(f.event)){var k=f.x,h=f.y;var g=core.material.icons[f.event.cls][f.event.id];var m=core.material.images[f.event.cls];core.canvas[d].drawImage(m,0,g.loc*g.size,g.size,g.size,r+k*q,o+h*q,q,q)}}if(core.isset(e)){var c=core.isset(p)?p:core.status.hero.id;var l=core.material.icons.heros[c][e.direction];core.canvas[d].drawImage(core.material.images.heros,l.loc.stop*l.size,l.loc.iconLoc*l.size,l.size,l.size,r+q*e.x,o+q*e.y,q,q)}};ui.prototype.drawAbout=function(){if(!core.isPlaying()){core.status.event={id:null,data:null};core.dom.startPanel.style.display="none"}core.lockControl();core.status.event.id="about";core.clearMap("ui",0,0,416,416);var f=48,e=36,c=416-2*f,b=416-2*e;core.setAlpha("ui",0.85);core.fillRect("ui",f,e,c,b,"#000000");core.setAlpha("ui",1);core.strokeRect("ui",f-1,e-1,c+1,b+1,"#FFFFFF",2);var d=f+24;core.canvas.ui.textAlign="left";core.fillText("ui","异空间",d,e+35,"#FFD700","bold 22px Verdana");core.fillText("ui","HTML5复刻版",d+75,e+37,"#DDDDDD","bold 15px Verdana");core.fillText("ui","作者: 艾之葵",d,e+80,"#FFFFFF","bold 17px Verdana");core.fillText("ui","原作: ss433_2",d,e+112,"#FFFFFF","bold 17px Verdana");core.fillText("ui","制作工具: WebStorm",d,e+144,"#FFFFFF","bold 17px Verdana");core.fillText("ui","测试平台: Chrome/微信/iOS",d,e+176,"#FFFFFF","bold 17px Verdana");core.fillText("ui","特别鸣谢: ss433_2",d,e+208);var a=core.canvas.ui.measureText("特别鸣谢: ").width;core.fillText("ui","iEcho",d+a,e+240);core.fillText("ui","打Dota的喵",d+a,e+272);core.fillText("ui","HTML5魔塔交流群:539113091",d,e+304)}; \ No newline at end of file diff --git a/main.js b/main.js new file mode 100644 index 00000000..fc41fef9 --- /dev/null +++ b/main.js @@ -0,0 +1,313 @@ +function main() { + this.dom = { + 'body': document.body, + 'gameGroup': document.getElementById('gameGroup'), + 'mainTips': document.getElementById('mainTips'), + 'musicBtn': document.getElementById('musicBtn'), + 'startPanel': document.getElementById('startPanel'), + 'startTop': document.getElementById('startTop'), + 'startTopProgressBar': document.getElementById('startTopProgressBar'), + 'startTopProgress': document.getElementById('startTopProgress'), + 'startTopLoadTips': document.getElementById('startTopLoadTips'), + 'startBackground': document.getElementById('startBackground'), + 'startButtonGroup': document.getElementById('startButtonGroup'), + 'floorMsgGroup': document.getElementById('floorMsgGroup'), + 'logoLabel': document.getElementById('logoLabel'), + 'versionLabel': document.getElementById('versionLabel'), + 'floorNameLabel': document.getElementById('floorNameLabel'), + 'statusBar': document.getElementById('statusBar'), + 'toolBar': document.getElementById('toolBar'), + 'gameCanvas': document.getElementsByClassName('gameCanvas'), + 'startButtons': document.getElementById('startButtons'), + 'playGame': document.getElementById('playGame'), + 'loadGame': document.getElementById('loadGame'), + 'aboutGame': document.getElementById('aboutGame'), + 'levelChooseButtons': document.getElementById('levelChooseButtons'), + 'easyLevel': document.getElementById('easyLevel'), + 'normalLevel': document.getElementById('normalLevel'), + 'hardLevel': document.getElementById('hardLevel'), + 'data': document.getElementById('data'), + 'statusLabels': document.getElementsByClassName('statusLabel') + }; + // console.log('加载游戏容器和开始界面dom对象完成 如下'); + // console.log(this.dom); + this.loadList = [ + 'items', 'icons', 'maps', 'enemys', 'events', + 'npcs', 'data', 'ui', 'core' + ]; + // console.log('加载js文件列表加载完成' + this.loadList); + this.images = [ + 'animates', 'enemys', 'heros', 'items', 'npcs', 'terrains' + ]; + this.sounds = { + 'mp3': ['bgm-loop', 'floor'], + 'ogg': ['attack', 'door', 'item'] + } + this.statusBar = { + 'image': { + 'floor': document.getElementById('img-floor'), + 'hp': document.getElementById("img-hp"), + 'atk': document.getElementById("img-atk"), + 'def': document.getElementById("img-def"), + 'mdef': document.getElementById("img-mdef"), + 'money': document.getElementById("img-money"), + 'experience': document.getElementById("img-experience"), + 'book': document.getElementById("img-book"), + 'fly': document.getElementById("img-fly"), + 'toolbox': document.getElementById("img-toolbox"), + 'shop': document.getElementById("img-shop"), + 'save': document.getElementById("img-save"), + 'load': document.getElementById("img-load"), + 'settings': document.getElementById("img-settings") + }, + 'floor': document.getElementById('floor'), + 'hp': document.getElementById('hp'), + 'atk': document.getElementById('atk'), + 'def': document.getElementById("def"), + 'mdef': document.getElementById('mdef'), + 'money': document.getElementById("money"), + 'experience': document.getElementById("experience"), + 'yellowKey': document.getElementById("yellowKey"), + 'blueKey': document.getElementById("blueKey"), + 'redKey': document.getElementById("redKey"), + 'poison': document.getElementById('poison'), + 'weak':document.getElementById('weak'), + 'curse': document.getElementById('curse'), + 'hard': document.getElementById("hard") + } + this.floorIds = [ + "MT1" + ] + this.floors = {} + this.instance = {}; + this.canvas = {}; +} + +main.prototype.init = function () { + for (var i = 0; i < main.dom.gameCanvas.length; i++) { + main.canvas[main.dom.gameCanvas[i].id] = main.dom.gameCanvas[i].getContext('2d'); + } + main.loader(function () { + var coreData = {}; + for (i = 0; i < main.loadList.length; i++) { + var name = main.loadList[i]; + // end with ".min" + if (name.indexOf(".min")==name.length-4) + name=name.substring(0, name.length-4); + if (name === 'core') { + continue; + } + main[name].init(main.dom); + coreData[name] = main[name]; + } + main.core.init(main.dom, main.statusBar, main.canvas, main.images, main.sounds, coreData); + main.core.resize(main.dom.body.clientWidth, main.dom.body.clientHeight); + }); +} + +main.prototype.loader = function (callback) { + var instanceNum = 0; + for (var i = 0; i < main.loadList.length; i++) { + main.loadMod(main.loadList[i], function (modName) { + instanceNum = 0; + main.setMainTipsText(modName + '.js 加载完毕'); + for (var key in main.instance) { + instanceNum++; + } + if (instanceNum === main.loadList.length) { + delete main.instance; + main.dom.mainTips.style.display = 'none'; + callback(); + } + }); + } +} + +main.prototype.loadMod = function (modName, callback) { + var script = document.createElement('script'); + var name = modName; + // end with ".min" + if (name.indexOf(".min")==name.length-4) + name=name.substring(0, name.length-4); + script.src = 'libs/' + modName + '.js'; + main.dom.body.appendChild(script); + script.onload = function () { + main[name] = main.instance[name]; + callback(name); + } +} + +main.prototype.setMainTipsText = function (text) { + main.dom.mainTips.innerHTML = text; +} + +var main = new main(); +main.init(); + +window.onresize = function () { + try { + main.core.resize(main.dom.body.clientWidth, main.dom.body.clientHeight); + }catch (e) {} +} + +main.dom.body.onkeydown = function(e) { + if (main.core.isPlaying()) + main.core.keyDown(e); +} + +main.dom.body.onkeyup = function(e) { + try { + if (main.core.isPlaying()) + main.core.keyUp(e); + } catch (e) {} +} + +main.dom.body.onselectstart = function () { + return false; +} + +document.onmousemove = function() { + try { + main.core.loadSound(); + }catch (e) {} +} + +document.ontouchstart = function() { + try { + main.core.loadSound(); + }catch (e) {} +} + +main.dom.data.onmousedown = function (e) { + try { + e.stopPropagation(); + var loc = main.core.getClickLoc(e.clientX, e.clientY); + if (loc == null) return; + var x = parseInt(loc.x / loc.size), y = parseInt(loc.y / loc.size); + main.core.ondown(x, y); + } catch (e) {} +} + +main.dom.data.onmousemove = function (e) { + try { + e.stopPropagation(); + var loc = main.core.getClickLoc(e.clientX, e.clientY); + if (loc == null) return; + var x = parseInt(loc.x / loc.size), y = parseInt(loc.y / loc.size); + main.core.onmove(x, y); + }catch (e) {} +} + +main.dom.data.onmouseup = function () { + try { + main.core.onup(); + }catch (e) {} +} + +main.dom.data.onmousewheel = function(e) { + try { + if (e.wheelDelta) + main.core.onmousewheel(Math.sign(e.wheelDelta)) + else if (e.detal) + main.core.onmousewheel(Math.sign(e.detail)); + } catch (ee) {} +} + +main.dom.data.ontouchstart = function (e) { + try { + e.preventDefault(); + var loc = main.core.getClickLoc(e.targetTouches[0].clientX, e.targetTouches[0].clientY); + if (loc == null) return; + var x = parseInt(loc.x / loc.size), y = parseInt(loc.y / loc.size); + //main.core.onclick(x, y, []); + main.core.ondown(x, y); + }catch (e) {} +} + +main.dom.data.ontouchmove = function (e) { + try { + e.preventDefault(); + var loc = main.core.getClickLoc(e.targetTouches[0].clientX, e.targetTouches[0].clientY); + if (loc == null) return; + var x = parseInt(loc.x / loc.size), y = parseInt(loc.y / loc.size); + main.core.onmove(x, y); + }catch (e) {} +} + +main.dom.data.ontouchend = function () { + try { + main.core.onup(); + } catch (e) { + } +} + +main.statusBar.image.book.onclick = function () { + if (main.core.isPlaying()) + main.core.openBook(true); +} + +main.statusBar.image.fly.onclick = function (e) { + if (main.core.isPlaying()) + main.core.useFly(true); +} + +main.statusBar.image.toolbox.onclick = function (e) { + if (main.core.isPlaying()) + main.core.openToolbox(true); +} + +main.statusBar.image.shop.onclick = function () { + if (main.core.isPlaying()) + main.core.ui.drawSelectShop(true); +} + +main.statusBar.image.save.onclick = function (e) { + if (main.core.isPlaying()) + main.core.save(true); +} + +main.statusBar.image.load.onclick = function (e) { + if (main.core.isPlaying()) + main.core.load(true); +} + +main.statusBar.image.settings.onclick = function (e) { + if (main.core.isPlaying()) + main.core.ui.drawSettings(true); +} + +main.dom.playGame.onclick = function () { + main.dom.startButtons.style.display='none'; + + /** + * 如果点击“开始游戏”直接开始游戏而不是进入难度选择页面,则将下面这个改成true + */ + var startGameNow = false; + + if (startGameNow) { + core.events.startGame(); + } + else { + main.dom.levelChooseButtons.style.display='block'; + } +} + +main.dom.loadGame.onclick = function() { + main.core.load(); +} + +main.dom.aboutGame.onclick = function () { + main.core.ui.drawAbout(); +} + +main.dom.easyLevel.onclick = function() { + core.events.startGame('Easy'); +} + +main.dom.normalLevel.onclick = function () { + core.events.startGame('Normal'); +} + +main.dom.hardLevel.onclick = function () { + core.events.startGame('Gard'); +} diff --git a/main.min.js b/main.min.js new file mode 100644 index 00000000..dc70826e --- /dev/null +++ b/main.min.js @@ -0,0 +1 @@ +function main(){this.dom={body:document.body,gameGroup:document.getElementById("gameGroup"),mainTips:document.getElementById("mainTips"),musicBtn:document.getElementById("musicBtn"),startPanel:document.getElementById("startPanel"),startTop:document.getElementById("startTop"),startTopProgressBar:document.getElementById("startTopProgressBar"),startTopProgress:document.getElementById("startTopProgress"),startTopLoadTips:document.getElementById("startTopLoadTips"),startBackground:document.getElementById("startBackground"),startButtonGroup:document.getElementById("startButtonGroup"),floorMsgGroup:document.getElementById("floorMsgGroup"),versionLabel:document.getElementById("versionLabel"),floorNameLabel:document.getElementById("floorNameLabel"),statusBar:document.getElementById("statusBar"),toolBar:document.getElementById("toolBar"),gameCanvas:document.getElementsByClassName("gameCanvas"),startButtons:document.getElementById("startButtons"),playGame:document.getElementById("playGame"),loadGame:document.getElementById("loadGame"),aboutGame:document.getElementById("aboutGame"),levelChooseButtons:document.getElementById("levelChooseButtons"),easyLevel:document.getElementById("easyLevel"),normalLevel:document.getElementById("normalLevel"),hardLevel:document.getElementById("hardLevel"),data:document.getElementById("data"),statusLabels:document.getElementsByClassName("statusLabel")};this.loadList=["items","icons","maps","enemys","events","npcs","data","ui","core"];this.images=["animates","enemys","heros","items","npcs","terrains"];this.sounds={mp3:["bgm-loop","floor"],ogg:["attack","door","item"]};this.statusBar={image:{floor:document.getElementById("img-floor"),hp:document.getElementById("img-hp"),atk:document.getElementById("img-atk"),def:document.getElementById("img-def"),money:document.getElementById("img-money"),experience:document.getElementById("img-experience"),book:document.getElementById("img-book"),fly:document.getElementById("img-fly"),toolbox:document.getElementById("img-toolbox"),shop:document.getElementById("img-shop"),save:document.getElementById("img-save"),load:document.getElementById("img-load"),settings:document.getElementById("img-settings")},floor:document.getElementById("floor"),hp:document.getElementById("hp"),atk:document.getElementById("atk"),def:document.getElementById("def"),money:document.getElementById("money"),experience:document.getElementById("experience"),yellowKey:document.getElementById("yellowKey"),blueKey:document.getElementById("blueKey"),redKey:document.getElementById("redKey"),hard:document.getElementById("hard")};this.instance={};this.canvas={}}main.prototype.init=function(){for(var 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 literal 0 HcmV?d00001 diff --git a/sounds/attack.ogg b/sounds/attack.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ec692100ea28378ee6fdec0a48ec90b6c069ec04 GIT binary patch literal 9491 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

F$Hk#?A6)-^|msw682pp|3J2p#fCrAMa>CGHTF z(ip7Mk$?bp(kw$``dWA;kqiyqHI`;)r(08fjb>;r5(ORy?T-3`OzEN2Zc&%brs#(jyrW?3iOpj zPDMmJ<+AYS_IH|iEvfw?cCzvDSdA!B@dzL$1g|*vI{o-vPRzcJUS@9Qi7|UwfC&n) zwjr2SjfsRriy(6$$aW0k4}DR~$;j*7JSXQAaKTt}H?6;Ya@X6+gJ;%t;92?DD*Qjr z{ol)y6Q*dD^$U0%9C4m!Qw{I2UsanXAk35TQ6`{jPQMKJ6 zzd<=GOx2suk*=Baxb8%KTI~2+vF10=EZak-h&f%BqYms@g9t&o`Lon2Cu`Fqju51~ z|DfJBPr#2K&shXVtcwexF!$+g`R|KPF_aR}N)zFlZE`qK_H++KjeLMs(usm+Pvxh? zR8`U2U)D=CJFFaG{r|Z2jpD@A7n9!{d%yeCQ*_2@Q5Co(uhG2tu&KlTiC@3Pt>X&P zaSqwoXJlx3B~mu64K<2oW3p;hnjkC*n-xb>coe4(g{W9$MhFwc|C}P_qtba|<{q<; z+TtR~j$ibudyA#46Yy#jFQm9k(squ=H2*MgZqn@yh(DDr6-47vI2?f0JiB$!*X`F- z^wWXrXtJ|`b>hG=*P`~Xj*g^WV~*2Oju&enP`5C;DFCA7Hbp}E1{t1LBs_5%!LcVG z`=F;4NY~Q$KVCUG^)C9a+oGf+GXX_y>JhcRwG<%{(wDk!i<#=s`b#$8{te*X4L;se z0OquzHyudFCK*&7BMq$kKKkSxpgr8y1T)h$#aD7D+Z*-ZN)&!D z^EGX^PeRD*AiAaL-+~(UXQNDCUr&HPzTW%_L|_)e0awX?k>bGdCJ<}EwOBlEEAN~= zB{0uE9zZTM=~J)w{%=2qzzTIPQ*^@j)R569w6fzLrEU)?Q!LC|@B6(NJSXI~@&7}v zzvS#`@kSis5CV+!^B{<#NfGkO+-L=Fd-E|%8%`8a=k_B*}CTSt0oWfRn)h&>( z=iFfC75q?d{6=2=^L<)b6Yd_Pt+4NWX`M-TvtYoL3OkbY#ck844Ek`w z7cx6+{~?aPAA0fCgTl%XSrG|~E(?{eq}q;kmyVy$>4Q{Nickd3a1Iu=(7Fw4*($9; zZww1tXzd_&$&gn6x)C28gZlMNb zBvd-7{O8q;E=>GxKoXG^J+lodib>?+NTeEgV7j)#8tc*ob2*U`s36p>1leV!5sKGi zOvLCR9AE8Th@hu)eE1SejzeyAiJ7XZZ&$gb27Iaw{s#{np1CpIZ()d?AU(6^zbRE_ z$Z0LV;(y>uee>3BvMg;z`#R0bkzzUBjH^^#u&h;ka8_S7T*AtH0%9f#gCLS${OWYtqWn=mgq}8Y>;1i7yA;Oq$j{e1-Q9Yju zIjmk_N+4-S-8gFERH|;NjulY%IaSI)Mkd~+EjThNdr5H_k|&UbO|@2Hhx$4!oXEZ( ziDXv``#G}dS@KjygtJ4CYF&80jVl@&Yk8rmIYsh-;=eMY%*s*{9czCxTIHPRN^oZ^ z^ndB*1gOsEtOU4^VE|>|Dm@%FembZ&Vi$aL0Z$vJikYjF7lk%)u3wF}IjKcBs|#xe z8o5g=bvRT$9Z$1Fj$_HXlc7?1zUbXW775b8@H5(ku_J}>P-9-kt1RL8T6cf6B5+{O z(Mx!qAQG7_ryqDZy~qJnSUu4r3?fRyc+x7bRJq?okYs=`{hii_&RDE&#g9_)Wez$s z>XaLyHO)Z6N}9!(e*PQSnX#LY??zyRGiX-b(qqxrGvn$e<1p8z%O<~hE>I|xRY>34hnIj$aHI0ltx?&595r3xzXOU zxa!irz6(37k*JOn??|`T<(m`a*Ly7S`6ooi#+h4z^-KZLpy}N!2}o<0db!PfC%81_~bc0zX#tTZBC{P@5roG_`~G6ZY;e1 zp7=~bwEx9g8uWDXsw+zdr=8Lhnw+p0o`1LU+cI_1B2PxzlA!AJQ-2-Z8I z|Bm*Wa2swpI$w)v(COOvQtp!NkzXRoMD|CVgS{$sVz&woJ9?eK1MW3=Pm=N9K@S1# zIn0JPEO~uYC%rV?(|mM}C9E<&G4ZcX_K2WcN#m$)i6k5DE{-_i(I$WHop-aGVx#VR zon2uzZR%PkJt;O@>KZ$pl2UV>jPzxl+4k1hWuRn&j)VUF=c#jgkte0Mr_edE?Pnhl zQsT^Rm|Mn{VP8RBMrnYfRzv*oh4J8$8+95S;(zA<3fJS)KE)mmSQn#x5xRD0W`q9g zhs>RHq89?C;7>r!Rd;K>k67n|#%p zVy%g@n{OrLx3ep-8%oat%JUR1^2hA#O=52__=3^GOD=tWonM_PK5_7360K}v7cmnC z8NKEmdd)2t9CY69r14_J3I7=WRYvfWKkgCFBf#?+Fq@E5W_4JbO-sysh*(uGgSr^; zIsY@aOw9d}<7rxD4e6|R7SWOfWlgm@t2lOMi0F;nj1oe0$y(SOa@l#0+Zjo&Niiq6 z*jli+UcF(=@VrPEif^SU=$>#)$}^D9H32l?!Jj%#$Pj(MgwcO9Gnp=qayn0S1W$lL zF*35Zea!mQ9~mgyU-fz+xd>lOz{#w+r%PgBn1tt{oI)pXt8Wp~J2s&GQNj|g59FN=q=X}^w&6@NbD_pK2bHd*v4faAHVBV?&v7q$!+)~jq4&N zrdgs&?w?7{W66k~Y~DZdc3+XM(Ing873udL%qTT=M)@ zBTcucuDqzm)?UL}>|5S74rwbSw*KgIZOiP)djdjVVNdXP-<$a+eWM&{e`Bua=@{5!rZpCyN`9!1RW|ZM;u~3_JvFG_ArQ7uw4DO## z=aARIpSEjjka8V@vMvj+uU^OTuE{M~oGe7Ba!B z#~8pjMo5t7=>bA7{0l8)0|C%yD7Z7|eXYa9WdfX|G6^0E>?r=vf(IyoT&Q^|RBb*8 z7TeexRsaJqdHqo&%!D0zL94g$f-9tQ%S1HfUklPa;7n_EfS)#}6#>Mx6u5DR$pJUP^#I362y*;I zWQrR<(7l<}G`O)BA79j<*eEJ|FVN-r@ZW0o|GtMBjqoP|1VPfPz~0^_TA5=;MfQHY z#!?r$_s4kSv?<+TM*|e;eh`rMUo#fK?Aysk>=5$G=>>woMomP zg^V1`Rpo6l6UG4c559-;LRrmx+~E>SGooLUcgJyxHr8Monx3l1nxO%W7NII%sN|E{ zY*7*lcWl9iYmz&(c5|#YXv(j-{6=MaLZjIJX-Dth1}_tuM1)*lXz=97Z%fGIlWO}N zH20V|$f@x75emyNLPnfJUjE7Imv$^j7W`}>^mzIY2!y*MbnE|>vmNE9hF6zsJawl2 zQ^@@=BCAT^>#CR)?g$p=y)m;UnQ+HCb2W2gh9c@DM-Z#*NX0i!PFDO8OZIa;->F9g zMuXlVDPzY^F0!~#3_f)IN%+IXk;`85>}&=qlb+MUUs_1UxZR_!bliM(m!+hCJ=ASw zqbs$x+H0=vRoDg;Hev7pe9~k1*?#eev&#p_*Io2n_Z#KT?h)1-ApoE!mxM3Cn@moP ze3vYqwr@g;aY~`|1BXXrOSZ}y8P5v{kK(H5caQ%dPf*bCg-8t@z*OIIGxhg;G6kV8rYqCU&K5gOxmpQL}$o1R+PH&ogNSo+Xs9|(~(_55!2m*)^Prtd$!UOKB3v;pQ8i)gY9V6>}| zdUb_BWfB0aE+!2CkN#1GTzR&T8|nIvc3OMu$d|p!KNJG4OD}^0Tm1VfWt&j z;da%XJJ63{KDr{mK1)mqJNag7%&kBR91!SEN5~+B8+6}c>Dnl8l%Wj_%SijX)xSro z5%4OF3sUi6R825(c766W6Rma6f_Z={Jx_GN4Boe8`|8-A$0x&mc_XJJ0YlbX!v^4j z_mMwBf+Z4Hz$t2Cfo&3ht76K3W9}Pod+7xf)y=r!#^}|2hF1ClhviTM18ITHPqrtm zcNcujz%l!l%&T(W7Vs0N7hu)_vi$S?hNrHUaUI0?5Vm~(I#1-=;)Reb@??Z3HMX3inH^$cGxT>L16&G>t5Z(&Y1LXkKsU z%_YH0;sD^7AArtyT^sil#XZizE9-$y%-Qk~Y;V{VUwtrtfZYHxE9YCI|1vJE4rgB; zR>JH*VldJhZT){-$MuZ2_K$v7X8ECh7^R%Vn5OgX`_!P2|KQvAI^Exj>9{nV<#^v~ zDJ@=ao=PueT!UBU`(Ql4Y}v+|qXhsUMgz|&I-k`wgg~!rbhV@28DCew%A3-Cuegz3 z{YM5r-Q(HUAnMhg0g(Tg64Gy@Hb&H4VV{oyt{($P%Fl!jmxZL+LT0kWQ^jsB12n^0 z2pUAq!*6&G7WTeM0|5eoZ1!F!ZHHeVpV9JegHEU=V=M<-+kUZntW)eLAOX~hllZPBreNyi2%KrDW7T`LHPeBYX zw~^pgvE+UsIm?R4 z7$Kj=(@V#2vOi<)uc)l5z49f_#qLcQ{pjjNZA<3;kH3oK2BnbKetZ0E(*#GyW3uT~ zirV?Ahjp?AwV19-@i)L?oxBgI`GrzLR{2R5BaLB=*bie1Ja|Ad?$VJt1^6l3%1lpF zSzq-Jv*fv|_>N}nXY5L8$Lv(9-NM^OG{4s#r_C1O#w*?r&ZKJLWp2Z&fhT!?L)La8 z(EeBLV`S959U;?ap7#PZ0@tXiB=)D6ZOn1J09taO_Bx#-Xd&03LhH-GTKvb#In@G~zF9#*P&> zWpier$*xD^u$N9vuZ4oErKJ3D6OiMWeP%>Lon;9LM&CAIStfOcEdDlP{7y*B^UqKl zaZuFiWs-Yqh0xv`LFODKK`L(RMmx&E=O<;EE>U)%WJp6R{t}NoHVPL@7I>VJP+G1! z*z`Rb?1Jm8HyH18`~20Iz2uD)xP{32xt$5sES-JdH}G`^a8FE56D-&M8g9DkHzf#3 zLbf0W)}YVK7@Q-_H@3}}m3QFIe&cEY`9H zWCSQ^Z6$Le9Z6tbBPUq*S>Z-yyZSrALF% z?q_2EqN>LIUo%-uYS51uzwsDKigcyEt?IaHn-uLErnsWd%F7DMI{Jit^S{{mSxm~x zIX6aF{&rAY*<}Apf+$2~C}i*lq#aE{Z1==&BrtSvb2~L=n#{N+E7V!4h`F7xsCds> zx|tpviam!^brvD(YVo59GrACmZim8>zt=?F?5`7Z`H*<%31T9*Q=3y(n+w>K419WX zo+p(^bUt8&7V$ktxCd{)g!v5E;H%RPl!SPpv*BpDpy_e`_iiwxA;g~pwpf3e{Z|xeD)(Y6oUMn>>C)SQc=FzGJmAE;Dp)2Yzy)n*-6sS()Bv#XN z7~`fWi3u%!sCbaC&>!<%FE?5_Dl+BQ7UFkopD&MbHfm&FfH*LG(WKSws3zze%N~pLQ7F?_y^R4CleH#8C&hY+F(r3N@7wlI_;k?+!%sJ3 zz0Vn&k6vZ7V3j}Lh z9Oa!OdEY$>cZv#ufl4TR6Yj2XEr`(7mYPh){IewKt6xj~+i8WFX87I-&&{o&#i1@ni>STWg9_PXU7~|XtI%AF3*H_nm zU2Ya7|HPk99GieKv@HWBh=OC`Mj5&#QO#bypy+TI!i>tr_gU`aZT)96oab?7{WVB~?t)^l)Z7W+$qP(^J&hrl7zf=a7KavmU1=@C1nh*F4?e zG4OJ9T7}BOQMR?|)s64rCZLVDncQq#r@za8oNQfHAu3#hM;iKlNUVMiQY7JYt7$w0 zSrLU0L9R&wyvP7Si~sW-!}dw&^vG$qOFj1UWx$tPc3KFLwPN ze+7o!beL0fINg>rXBlm@LAE6)KUf6QTwy#e$e7`HbOCzbrNcaO99!afXaC)|Jv6^M z*KfVJf?nZCf^AN7#XY`{Go^FJF>#!GNMil?E1_XvW%TtCd{Lt-wsb%E=|=PP2o{vN z(ByiS+coQyv>jw}E;MewQjIH8ljltn-K*B5g`@mw(~riCl!O}He3bZk+oE7D1I^=Q zYat2yqVaAi$;qj4;>Sq41Up0!C=pxvRero?V6n3f_aL+$O~U!A(KoRcJ+rY}HfHIM zXv-kaDq9dJd^@M|w4eNtIr{Ksl+3Ywg8nK>!)t=qguB@NaM&#{Hh$CVp4Pbz&UJ2` zIXY~1l_>V^M)&Y$?23ptM@ik+xgnR{Nlt_oAEhg-yuKsZP{DMT=K6Vp2!y_jj$mZ_ zA@AGlPJfWvQ$)f@FUkntD)Ef(8r}92ti#{F;LVmLfW&SydtEx5s@??t80YVw3uF%7 z3oafyyL!C=Cth$%xC@Xn)4a&l7`QtSo^Jp)e7jqR?ln;kJbZ?oR`ox{k3VI{I@!OMi+>+B_1)*Bkp!TPVkr#COSqwCU$X)m z)w^4)L5j^@e9UQ~PEL5ObmJDBN}9(`r7H8C=H7r3{86?!!=(t2gLON-gJkn9% zzrAzArA30m0BN}q6S!9$teXE!9TA~LBh~Zai}VQ1MFPGM_1+BPT!Cm=6GA*CgokKZ z^GYR`5zYRBi!4p}r-UF9*EV%`uqrXtnVXjDCFA(?I{gAm?R`X9zZIw~F4A3pPHGi` zigtEG9o*bhP%+8UW<1w*W5Tvnd0V<5b`_p~B zD4v_kSv-lIE8XkHgqI{Er5;r&LpEyNK(_M8nPR_~yLj9Yd{kBQ?Zb~3rqoheay+{) zx@^P#ZJ{MgBQJ^$Aqfp6*V^JDdWI%gyeo2wyKgY1U03T?-K$IAJo_4lu^D|2ifA{f z!ZQA#ia{c5e?_EsmB+|^$*>&WLd{x0}YA$?a=F< zt+d7{jq0BKp&7=N<$WmIeQb}YK3ncTXUdw<&85Mn*y?eM=1qa-8vSpVVu}^6(FEG7wbGHp11U*urzt2Zcq8x3NeC;u)345 z(eucc7h{QgdeB7DV_H_^$Y!+N!&kpt)z>)tJg$TP!8-=rFTT3(1T60Ng${!J9fpBO21Q}lh|$}oKn9!AD+&;Z#~2=XsE5yoVK zMH8JdW-F0Gh_gsqdu`FiW|>We(H(c=Yl%vY7KueGFW~sWSq|3LDK?r{T}DwY{b=~p zWlZjF*?cmU(5?Su% zcHC4B-S|dpjNIR<{BTk??63b77;S|7o(ZS@vm<-#|42hjd|l|hG(UBf?YYQwT4IiV z>PTV3hTA)+NT?r@(ZYU1!d8e8Z~vGpB$9B1R6MO|hS1^y@=c%U#fI0&($vPNbok42 z9MQ&Xc~J7Q+;3tVB?*PMMc>V0#ErUttPSMxOkwcId-gRoiyYyE1)`#seOcob7s?>Z z-S8^}_dRm9j-An7>M%w-WpJ4V$BEN?ftyQw??bAyf8Luw1Aiq73B8GGFa7+o;H33L zsv{P!ZI{1gM+JcmpNOH0UkbtM&67o^-9k{T}*AwyZWI}^4mTtuyh72Oli-Az8Ijr|tI4hk_cW2tEG}#0@ zAu1kGU&^LuwZ;CEEKPv%-7UnyX4--tJ8X)j4=3!)i?2o?Iub&wAMAX~N{w73xm1aM zzp_aatH`VwnOSF?6Xrvt|U*?Fp8Bp&T#2oCMG;v&2F&Y$&e3KR;@)Q2xRmwz$ zu8_7P#BU?_1)YzmvMu?hBUR&D;AD4-kFAlwvHZ(aUkLk)7M>!usp?tx819Xy z=o%&N(K6`0`9QX~-;zNF@@n~hRYTO^n1?{VKxQiMDPN_WSGz@$3u&nqV{q4Uqm+G-Ga@iPcwRy^Ga; zRm&l_KV(vP8`=P^eD7>=cg!BqNUwpIea`~G{Nmr*cFzhejl3nVQgt);5rT^n&l5K=VO2JTqc)y@s+{MC-P*E#}-suup2YUSbN~uA4&iERvn?lR&+JX zn-5mbrT)(`y{JjRV`TCt9Ym1ItYb%!GrMr=Tb_yc0D3?f z-tV8Y$KTc_Lv07~mAfv6W^2fi>OXw3@preVT4z0ju~o3DNIrCqf@Q8LY4OC*?3haw z(s^Z9NJKKyh8g1Hjz#y;KL>f-;|Occni;sTpeLiydMEIs?lw0gy5T#|jFDq#QZ6hX zt&^R$n-L$^jKrdLyZJhd;Dev?2}ksa@rkGR?6a>KnBRiBT4xju-)DF{o#dqG|CB18 z2(CA6ic3-KTSy=g){ZSD4P#~df=30bE2*`Q;m1((uJpB<6GIa&HI|%+v()4%r1o?JH9_tE833Lx|Qq!(jWi-Pa=%tpmu{r?C*xo)a~X03L(zkl0Mai zcwttzmK z7f+Lw$qVvYtPD0Ku+5ct6})|j=8s-j)um*}3LXf&&XW0C4(0D;d3^Qzub2(pjIBOO z8Pvy(Z7j&|8^OF$JnzeW0GcQrLLG$rjq%xUR4i+tW-{Y!3=8Uwacb6k@K^XKoTmVLYsvEO#0yjEUo`1FD4D!ia;Rq#arH zBfqjbri#yyYuG!vVi~#Vc94XW$MgV)`Bom<0HK?TZG741=rovBx&2I$VW*QKR=YVr zaC58)=Ig(iDrpKAcfaxV(^!GKOJ+lSu~mK>G^uCtPu{t~@7GV@JJA>N9t-*My!*6u z!S~Roi!&%9``u$gzcs4#G5Ct+riCC+5*WgrJ9TnbE!nk)J*~{U}elwCq_zUn&o#WltCtZ;`?=FS=zV@6* z+X10L4nIg!uc}ZT_!?uE z`J?IUC+j${X{5C2I221Q$Pc6n8EcF|D2n%tRJ!TF(BKH|8}RkSM>P zZO&oGR(0FdH&`WEnjcTc|L@s05MwQ>NJSCKe#A`CzHJld{v4^vcrmr$%Lxe2#1y$xNwi*yuEgc1D61RZHyDxLrO&IosF7kv3jA z8bKbU(#%b;fJpP|{j@CBa~yzPBZ!9 zMm|xZWWKU0$ot|Ek^cNWyn@dA1GETjT4QR0dHJhD7(mTW|LcLEVP*m~(=KNtPdr>FPE+GkHxTOB9Fd^n4=|$!e{u9?Dvh+0 zZl_dOS!QE5hBunji~|#RWz8+M(<{H0jM1S8g!rrbvE;dK)%t5Qww#QG&N3IL*u~Zk zefX=U5Lrk%Pgg6OW|lll>NSjr&_D=2y-{u6)uMsDf%h=Wn~g{>h=Io0-C zrxL@+(&C(D^_ld(+W2tU@!kA06XH+#awOY|{YBDykd_LdZObt68dsbCddWtmUKt)hfH zB5olD&o>5o85__KvYct;_#(>>FQgba3)5H2<5D{P zd^P-d9Iej6@RYgxQfA56O~2S%+}>zhzZ7DAoyVTzYv6bd?2!kb*#``}8?|Q$iQ4{s zM@AbhNq8cb-KRT7;;Rd-c5y$U9sBfnCZ{7bKpvjkRae?Dez|Dm(RMaud`7+oySsQY zczNEKa3Zn&A;W+MqjiyTx1^9ml6`e)&uIw^p8_QB5}RtecdGU?li7=Eaeu-Je*Bfn z_As2Fy}v_=9bP{R*yv28hS}ag+$|DGJvV_XFAM16ouj*b`i2v^1wd3NX%di=LwR|PscPB9wc7kUWZDzkXd<@Ujvosu_$Sg zmG0=FnW0j}QmkL3tt9cPezb&*{FDyEi3`j}B1AEB+qRLT(VO8an}&~LDIpc$C_IJSrN)~jSXoq4P zepbX27$19aw41{!@p6A7MR|mjM@>p=PdEKsl+$5|I8P^eGa66$U$+((d5GMg{g*uK zqJ1lD^?6)TCi(Um9(X^{J7!b{&QLK&m8Rg968LLoEq z!P?>g-kET4`H}bX*v-ezf2QZ+y6j4jU*;m#@wc5OHwm;mo2SZ?b7SXjFo~xlJLZM& zlPy!7lLwQYl0R1Y6lZ<~?Qp(hnX@{TP_Hqq3aB^HD$2GhRSnJ(U8luUF{_7gvTj6aynPgxPpBv$lF(vCUpsnXr3Z{j=ug z9o|9kDViu{Uf*9U+9tQ=O#T29K}SrsSFzr_8I3cr|)yu>~RnYq!Jbvge{TR@hLz}-~$8Ql@=22+7$Wfx=)X~_cqlAQ=l5Y32 zVx*IP7_diX7{>BxT5{! zry6r5C>b}id$Xt1{vxh1p3h0Emrl$sJ60HBa`oDX+cfH^(p477arRyuT^v>U#mULO zJR_}9`jGYx0&$ifD*e9bBI(35X5ZxA_JGyGuNWWuwS>c^sOnw3z?;iIG0D<&A^q%V z(urZJ2$r5yFN^SB(&z6%3L+Nacp{c!D~a76XT+T+7vZEcnP=mX3!$PQ__ykXj8N^B zt45|9lJc`z5O8S`KGCkJ{ygvOHC^IbX2voxnc}fb)*jO$DR=*WBwbZNoXrkhw79#w zySv-s?pE9>UZ4~yZpB@SdnxYjZi`!ShXMtP?p^-N1Fw_)lF3XmIp-9{;kCh#Sjh~l zZF`V+H?@5$%=ILVRkGp;!bOP+p*XZhpMUha)3l_XJTpX6QQ7>?YeligM~9B)+nHhY zK_p+y%_S-Ki13VEC{@?|%!n08m0jUQY3qS)0f>g_)P$knvXkeiG!sxJBe}IWdRa_> z;$C*XdVz9$&v1ym`*=fUD+z#(P3;R4Z{Jjx{f$s80(WF28^Y+lc--)MpjecGyTr?& zpDKjekH*b#(0H+j<5W}DhNa{3@=PFl?9iSsY7x{_E0A2AmQ75?Epd%26nv}sY0*B{ zQU;x`%&5>yuDo!lA(ALvS*bi-S&M^Dx&70eOX9b5O_f=V{u2%}eoc7U#q4y{IT_DX zHG&*=LJD2?n-s-4P7YonyEc(5L}7g3VNA}lMqU4niEdd0fIQ=?yHaRwYv#kD*y$;U*}2a1s&v6n?Jd|y!^Ycx zvf{i^;r)2zq_IN#!8bReQ5_W_tV7QlSO~>2Gdy4WiVRMuK53AV)<57Sg`aD%InrBx zOaD|@Pd$3?72ZMt9xrF;L6X>VMLnKWpWr2UL z`CB>i-8MEF2$Z)4g41z7+)G1Dg&v2OXf+oegB3a#uRY}Lc?6%jZbC;pK2vkPl7q7x zEL0X+Y(1AcbnT)y%}z=*kqlRtW;TTx-NR_>fmGv$iH44C173?QceKjm!CBS0prr42 z6v%MEv6x~(!Gb{? zloiq~2LN^WC9|9L?B&2j6HS*z|DNziOZ4fjHbboEDW#ka*R;=zOIUi(B3w=3^@k{u zK4s%|Js328Qjc2lbhOL7&pFqrgN)E}i!C6(@mN2Bin`Gt8I z3x@M-uV;{y{hwdzT3n51VG;UeKn$?z=ZGi(34J%~lJa#84*P8PL=LV-_mbeAXmdx-X2%6OjDtdxZtVG`|PVWrj~JgTK^@np%*Z&c&l zvUr*)!P!#_rHA3AV{K8My{nnIn|4M1jGOk509m9dHh^8F(-^>(#^FiiH6n4W?qjN+ zoGh99`E3;`muAkvrWVM9d7_b3V%k(B>!3J38Ik*WXJL_{_2BNGhlw>dpj#cT{=cS( zDo#ivIix94I%pRuqnv^4#egtA>61~HpgoD=N1ehFSrlqx(zlw&S-uQtB0(UHK=!a7 zRYp{d{lg&23@^2sGCy5Aa;a7=C!s*QGBmOU1Ep}_r+q1zatl7!Ul%F(Q0lscX zjnZS0cB`=bccnF+Z|8rYet$iEDFW`-kGW{T0sw$;FR*}0>x~Ail<5VX=q<iV=EOi&g2O?Yg`rH09bsgT%ub81o zajX+4VKKxemoZyGb3p^r*%CpH>pJdFW>+qT;Flf)$E;a2|NOz)OuVsn80>JA0R-rvLm&*nUDx6HPNWi)`F z5i5T{1vE`i{hgvb-1J}Rft4J!R*mXkK?s8%IcvXIYF5kdR>!@63sjLZ*CX`J-x z($wd5kyuW=#?EYJtgl3OW!C%IK}9UADSSTgal3%9_D+ozID5GRo*P1K=R5b6yY=au zW|mz=!+jU79hQUwu6zqULY9v`8Q-e7ykSo|61X+8U5j}wn#-${ej8gGM~<405{aUZ z5Gi5^{H*4-AWL5Tbs~bnr}gK2(1^%DWJ8!+>}?Q_+e2IH*OgoHkcEM^_f9y;q_M7- zim>w^!?_3CoZkBT<2u9g(Mb+{K5C)vf9JwI~1pzzmM-epknFc&U0nf>22t-N*AL zwMXB8Y$F;RR@G#MkMy_%mGxlImrOW~mU14Cek}5x2eZoZa$)cWv-W%lsJ?))QW+^K zUheCtd&oaCeAkzX8gL4(f%c}+aSa#@k%L z1|n)E@;+MU#E%VBD=DMnU?ojUEa}z)L;oGp(uw5+H9d)b8PYElyR}FtK{!be_+0P> zPkpyMurfZ#Ee!(zlS$h8k&0!p!xqt+l&-H?N`wtnqM9iMSnxi|LrMyZwv?}~4*01O z+AwnrziW8_NB&oao)rwzjbljGAR6FteMMmh&#>7}cUf6pEuU?QS8V?!eFZJ_TpSjr z_ykI;So40JI--SL^xI^MP~p!8jyqCL*G$>)DN=*4If!_gV*g>HdG77pr zKivEd0#;Rt4(KH=w$kizX*S){mW>s;-9klvQiFS>$VB3tNss#gW#8ez88DV*W81bQ zpX>4DuDWqaCN$|n5;ZImr0vKhum|qWEG&hwP;AY zKg`X|Mqw;4JXYA$!zI30yJ*nXJ@WkZR3??QSC1|`H9fI>bBmAeevuRKiPOVrkg9+F z!E7L1De;&wipLv+fubYV%>i|HmPJiBxtOF8sAb8O@bd0c7HU|o|G0BC3%75q#cH)Wo%{Sli>ZiySx9zw5c+j7M zFCD3BM@exuVm_Ey38583L!r}=V_K;XDxfQBs+=;BSf9613RsdwaZieke60fUe-#~p z6HFe^T;2vImgi0{K6!K@>O`H18VR4raAE@f<1Qqk@OWD_O-OWN8r=JmoiTy^9Za{D z92l|pAO&JxB>#u6?)<88+w!BMW*y;73DuEf+t@_U@VpL%s!^2TB678h1cV!-|Fy89 zwv5O85($E;h|=$2V5|n2eOd@uD=`M4CvN3d|UXM@cVthub-QL%Pjvfz=Sj_ASfzgN2%$2eE~qmFLn07KYpt8uGf|a zU9AuDZ}Q_{@xxc3y=Kv{ZYllTz1kBdMBigNzPc1tuS%vB5wE2tjncA!9ru;yrAbM1 zOpveN)mj1&DJf4Dv-f%WfoQ#-8HM#=((FABaOhzUe{VwuZ1M_D1Yji36&chJY`&o( z{=265F4*R|N~M8MtaOrdIHIKyEd{TonQKs=aqsKZ_Nmh*f9YX{HDTS)q#p`!+H zX}+F8!w^4Xd>FJ(kfDpFPNb6h+)XMmOq+k2ob~ZBiObo^J~vRW_JIXRmqGr@o_l^O z^iZCo?=S-tW-eY_E_(srmgYmQ3t({IQxc8eI=DD5T?tgglT;-Q0pHXe6at`}dWUx% z#SIdw+Ih#8ov52nwHRVss7}03Km3<>2&LV}?p2AD3ue<5aVhO?OwBYfC0N6ozyj2Q z$zN)jPL96z1Rh=Fye2*tO}nR$N91+ntF)~DOutJPFN7$K|MzF$*Yf3Ot+r)0IPC`j zrt(us8|v*r9R_lk2;K%}|NA=F_{orUBELJWV-*WLQLJ1T7@K273lU}N(bJCI_F-}K zOh$N2uK)h^TspOXDt?W>*?su$xk=_L(L(LR9hm=78uH$Kl6&M=3xUPRKlp+5%ARm1 z;hrmO_S_X!ZJE=D_8^?l5U>e_aQ_@c*nM)QJErE4v{-9Cu1vQn(ml!tP2sje@SZt@ zq-0r_2b#ro*PC={m(0iIE)aczs7L4DreR12o5XWe8=TBWs0>vb?mn1Iv4?<7t@%rA zXKcY=ssfDsC(eyv>`}#>V;=%|k00MKzvm)SA{1U8eGJW^=NSb+)h)WJ{V_-U-U|qo zpyY_S*zi^AH?ZE)M>l!DRFEo8`t`l7UpLh$IU(Xt!jh>Qk{o!XEj9<(*ZkWJm)o5y z7xDza4mp`I!47eibe{Kj=rt1?JAOfDdEvFNsGVDS9A9A5f+j;()gXX|(LS}vOEWy~ zo+GFlHKC9d!jzA}4xwi{>>5pUaBtpSXzE}?`9$6;-x+@0{XLbN4NniLiG^|FcOCAX zn9l50@lUX4w{ztZ-H+Dp4F~y}!U-eQV#S|$xXbRktx}HH>GX^@FbU0_Y``1kd$hb^ zg#s-Jt!6pZDvW9>vx=OQT7ARZS_zAWkTj^5Vb7-aYMUl%?6>`aIqP5#S!MxDtZWVem(CO{J6g?akk z%L1+gK3wS+0|77dxR#0kf|QuL|KP2E`m@@HiICE*j-WWZLEg4mGoiThXCJYmE3u?- zBKUD}y?o|$&F^pbPYgxi=j|1v11=)x?5oj=>11c{9T6CObY?hJWQ&~@zqlO8g3JC~ zu!wC$7(h~?Wm0Y$ve;&H`$Bl5Xlrv0n+M5~ zoMHm@#7yz$^N`)8`9Q02d=k!qaB>!{cuFEmJ52BVR*93W^n4fSgLR$JvA*|^9K)IG z1%BfOzja=8F|5o!SQ!RR(mv@(ZY7$WcT{4x%W-dvKX@tma^$N1ovbSe>*)6~y{00Sn3AHXzDkt!0yF_5Z%yhODd9&uVdQugDUJHu*?%YaG zFYI@s351{!As0pR=lj`a|8Zj$nWk*S9x565z3ahLvF>WKh!eEV8Z}3C4tvd_hT_{-F(DndLOXD7Z+RAHX6&N7waa+%>!u*+K8;tFJNF-%Y}5 z?_gRS(&c0w@hekPBt#rH`{JJb|4KR#m!LSHdCWpPihJ+t!H>23I>X>`r?B1LSTJ<*xBhW`i$`!Utj6efswgM)Da=dEa18n&S74Z# z|B~WPF}+F8nIDAcmeSN^dtYLe2_#Xy!Ak$$jw@A2lc$gCN9tegR{2QP#&== zBqYABX)NqWA%d^puRhzRWh}d~yn;?rY(bhdwJR1PyB~SFH7c;k?@~)>9r!hhFgnF$ zuR3rrH!B+V}pY{OK# zQDN`4p-{m*P4=kS0e(2c??rn(m*dHV{3V*6gkZ(OntCxT9q2}4fu9740a!8@3kC!y zzA~CamC@)54T}?*^-NyvV{5Nk^OeYkKq~Wq{QUOy&Ry>wNw5}ENuhhOcLsO!2~Bs& znLtPrjkV6JiD$GOcxiiC*7@Q7l<#fa*^crR&s*lT3IMHXzwS?Dp4f=0!~aW;BOD1r zC=LOeh&cU!;7%+A5RuxX^qDka7w;1if^%3aN{}54NFEg`l_UfjJ~Y@rm;&p^${#p= zf}J!NN+>Io)=4Z{sg-kzy)iq`7jl|O1S#*}%z`h?g(tT@%oOG!2-$gF6|m!WniaDA zQpf3J>*SLs_5?JCv39<|jCR{|U%%~=fF&PISoLlZY+FQIZi^il>WvFCo~H%l=UdO0 zT!Ml#Wb+@0J4<@Zm{^}h_I_<#EZbQ7=4+kKO0GIcX0DB~(otCWP{C>bnndxXBQy^R zufiM+8(5a%b92C>L_&q=hRxwjk;2Bvyt1@z#Onlfx$hZJ{wkD@4j}3t{A15uGYo0q zLgYGGI!-qr>LF0ozcy4gus^wHM=@Nhv-XbiXGM-?M7F98Mu~t{X*uiBT!19Jz6Y#n z4V50J9*#dc+S!V=1e_)tF}eJfflf(t`I^k0E?&x~-R3c@xoS4NKCitgd`q^bffk3OO@V^CM1ir3+JVp zrAmRQT`pmZe7$8R%jdJdhE2z>q`#0lMf0r>%mt{VINg&u0B8 z7G(bLB=oZ=yT&8jL2u&BQ1zP^7tw;op&`RkV^@M{HY?X-qMJSVZK5*l)g`YHWc>3R zFE3k*^5jlYXeJ+tvksE>wrzme?*DW-~skZo|+~sek zcQd=`{+P7lBCO@z=viKpv=+4gz|!*Th5H+;k2y{{+)7jJ zMK#6eYDFcMR8e-m&#l)Ap_1U@kX%C&bxguypF=7ZXa=wtw+bm)($`J@6s$ZctEA)V zB)A6j_>?#m*}LIx&*mR0I;9saWNG`LaEG)kNS6W}_}p^@erpRbsg$5$a=btIZ`}C< zCG!2MuCI=W)oAY51IYt29!?0{-?1@k=uprq*Te@5x3sC02Q zQM0M9*VQw`!pd?a!Y}?A86PpXU50KT7gnP}~F zS_$}p-~D(rt{l9{ z4;c`h-~~Lwu8@pS9Y3g~{$3_~XoMEY%Q`f!jWkRf$$AMk*m(XNxJJ>aRVtDGF<9i$ z%wlsz;&f%Ttdxl`AIs3b{T7*SMIx#b^m6p5RUB0SOLx_0WOgC-I!hQuqZ*~`E&-8_1he{A>IX{{8vO9~dB zxnbB?qRs0$>vAQU7bc)Y`+irkSCu4xf$h)7V;T7AnVZa+ofodLGJ0uK+DL_?h1*@( z3}wo>;fulFAx_?#2F>|;rCd&9A=G3SE7vLR=?#{ipHC4;mQAyOZ~svj!cvI9&-p;m zXKKHdqj*u+woXF#a_#>~MinDOWV4aIT*{?$*k}0aJU6e5tZ4 z&DdeyXYu}DFd6$|UGu;E&qM2XZypa@%e=!?*}UM_mKr%PVY(vQD-N2$)f>&*Gu?k9 z&)I^d&P~1u+5|_wSk>%t5s6UQe2lo}7XM0>=x+aIQd*JHqfzyy-7t1({ z#nyNF(mrv4Jj9z+Bi6v>$1Sh?Dm|T+t?QU&t}}wCVNsFA+V4t^*z%ZUG<%@&MW`P- zx}x`Qzl84}5_MEF7bh(gmIT(3hUPpekXLr@p(U*``m&^@`km---h+pkIt6coAELjL z>7NqO9?BO^{^%)wV<+?G)blve_0a+CN`W}A`t$m0)gid5v*6Fo^P(Bdzx8-=@;^Do zU#7U-K}&xZk75I|_?ORq2aM=?Kj3U5Y>co5!sJ!H5e1lWfj35b_AV>ee08;O(Hl$o zGibLnK)84=8a9AE21`A8=FuwENSR1o)v++iK!+tH*d9U z(JStVQ&U3l!1Q`VAysn`maEuZ-m%+DhVL_`644wnr~K$=h(NhSFD|nu-U{Sa0npLk zN7lbfPIPjir!EZHprzX*@y`qeZHN-WeD=l8p`*GMsmtj!q5g4hu5M5lRZ?anOv=aC zm6GWNY8JAH&njg+0lD$kE2Lw}N<322ZZt6snb&$Q zj?T);+=`3C@_$mky!F(qvaV37&m~g&k*eHC$3PQxSD_?nLKNS0S0CUi&jrNVD$aU+ zI=Nrfb894nJ%Pp==K8~hMkA0DMUb119n{7^H&{?!$MB1j{QdVZvBwfYz;t#1IwI)U zSXKf$7(bcpb~#$rMik`ox*FeMk!H)-xQe=p?xylq*TOT7GOJ{cWlwJSzn+<{U2tT6 zu3Fn7V~p@+H&4nI-^km5)I2FIIyNz01)QEIdZkyY0x}qQyV?mPq1ov%WiT9n_+tY(Z=aBaixpALC#EaF&%>l7?w7JCxpJU<2?>&AtK-q+mekjE|eDZHIr!P z*@SBXi4Y&tjee%k!@q3yxpf=T=6cLa3D-=6#RG{2HWxXQH29yV^Wy|fKi$1XJijTb z&S}LR=@A8gPuZbs880iFv}kBKzm`oIS-@xA<3q6mAJI@6_{ zs*KRwsiAiVZq(LxO*qu+5gudW;}B;JDP-x$O{$?hM3b3Vz9o%chFNi-(}!flWMa2(*VKy{Ma*)8O+75oDHtj_H8o*rwejfLt=0~=dOKGBwBQkrWQe4ZSnuheG0bf|*&Ur^JIRxh!F4 zg>5ZZdtq%oHH=%C?E zE%HiOp|f#3rBizIi5pnW8(^g=xvUS>o6i%Wj>!jcgZ(kf>?D|AoHA`DF_u@ssm zGBO(vuY@EaAOK;Nl6x?Ay6OYp3Ub0GMmzaKhjlbo=vN1OcH zEops)Wt`tCk!BlUra^y$Y~W`L$Kz)v8}|?~5-^*e|6h#|i4YanSuv5wyWd|yP#-Fc z57I2#OCb~T6n28>RQYKfmY#|5c+>w+zAtFMel94f9J$!m^=f=1)K_ht(=QpjtUuvb zvB#|$#;|^TCe@mfq!~}LNM;O>2TRq2ZZzb-LT<1My%56mnr@1g3>n_a!e#9yU9H%+ zpZB}Ep0ZS;4+R)QHmq}lE>?ld?M&ZIaH=z(&dWT#G4~|Y?z%fyCykxH{}_Oglf|c! zBg#hC`xu5-Z6`p+zPS?5L2pO)ZW}G_IaXttK@b2JB~$JYYJe%IQH_X7Y!JZ?$RJ+I zm|uglp*}>XH(hZk)!iasXmRTBeCKSmcOX`KSECkq3G@Q5AAob%?yex6_~a=`|9P(h zpbfqLm^`LHW1wzPNfV*`D`UTplgC)&tIHQ8>l7}}kP-$_M$Wu%WyX2KI#ie>(G2^Ce}SaY z4BC{gW7e9|I{4{lz$W0#u$>LM+r?)dU-h9+1r=XyS;QZ}&zBxPZPOjtsq~lQjEpBt zW~JNr=Pis?(A3$q<^mSb5w$6CiJ14QDI56k~|ZDDYz=LN2WTtMgb$Nx)ZF1 zb=}*C-gncGwk&w3D{D7uuo*+9Jg6F@4tC#;Kw=i7afvS>B&L2`h+eT$d-HA9q=Kod zM!&=G{*h=4B31AL&MKU~a|H3VeVrNa$e*-?zQb|x@wafAwY14{T43_$W6XAtFbEFe zk$M=3qB5|XwMU|O(>BBzcy}rz^@1h{KSLb~>c^8R31LEVf#eCn+AgOwt&%$*Ey%Q} zbN;ZNm!NWHBSJN7L9b2fRZ#v6)YQa_Hbo+;H?^0Qf5ofn^D_)pu!H1|xAr;5cSM+~ zLv#4FR8R}MUXO>Ar*g{wa-L4OpyuK)Mh`9u+PXE*uTwcAn_42FqqLstViRc9h(d+J zX?rK|+kv;lkj-%vRo{PLItFSH$b9{Z9e|`dp&mQwq*!I{uCTCg|Fx+*BcG8ro67D~ zPooyBVB-qb183qJ={>!jtX6+&4RCNcfk0-MDnZ3U<)XaD^VZ}*m?|rBBdU_0GYcld zg*9v4P55}ZL^F&uDa`?jvYRRG@w(6epVuWqM$B1$gy0XzT-@XUta1-*aw+8Sd*?G! zT8ysCEmj9~#1|LHNY1-#b_!Z6S%G}wc(u0p(-0^7!-|Iyx-a_C2XLQI5?Z}e*Qr_Y15h1?XQY5{B{Z7 z{3nO&fVmrYBoPvGa}-v%_;%MK3vURmTRScZb7BGy%SmEY2T$_|@L#ES4< z$^MtxdTfk}BO3p>X)k}*g-vKXKYV&W5i)@MCLc2cxa(8M%K2Gn_Bm>zMUDva;mSI$TWog zWtwrnq(CwTah%B08>{6iaPVmzsZ2NwzV5K`UqCvZEs}hg-mebF)_OyVwdbd(z=Jm6 zM{@z3`V-2JN2l-K8k+(IuMurRNhVEz0fE?CC63>9hb*6KBH>NoR$#9lrEh7b5k0SF zMLDBKXsHk6<$Ay-bQ2Y*9uxQ{5={Ck{ziBXK75#uK&&u>bjWdWls#L%T6u68z{Xbk z6_2+!&#ce=y&^zSD1}7gxYebtH(qVsn@n*4t=*=Cf<$DbA(C9yvi@>*>nuQCN^i;4v z?1ep=-9kEG(YMGw$N3oh#uSReT9((jMs8&CqSiX6!+1E6GSj1xw^bv>Mv6ze5^5t& zPwYzC`__trQ5y9KvfzhnaKG+Ou#QM@yc|0mdf?T$c2F{rmBk2mSz@&SvT{uFWicMG z^usWg%xyugmGf_9XlufAi|pXbjd#3sJ39Q4DWj^)he{)O;@A zMds0jE#`f{k-`X);5DLW{s8n`o*pnzLfaykQ1gUq*voj-^hx4r1pelUq#z;XnWVr% z$VeZSK|xGF5<`W79-j;OJ; zo`Yq{$-+fc+fLnmkMm1$$X`F5{NoxG&uOlQQ;~=hGTCyrqOxhnmy=sj^hrC4p_|8c zB4i-e<9>pQyoM~Fmv$ZqFKo_0NRJv`{S&aBPSDzuE-HgAYv#v<2dp6oCjPT=EG97hO!Ul}JqLXaR?e_z}kSA{;-q3oxJ!KjXB5alpcu zHgt3XQRm=&)8X+HT|y|jegLFWP-i5GlQLQDy}wEC$bNi*4uz7D`h$Y}u~pDQp`SwN z8&E>HPl8IZ5QWGtA{L7#1Rx>EBf@1aK?zUVR#gwIYoFm<;>%_knoLZcQcWIK)I=zZ zs+siRgJ3hQDWa#e`1q_eaz%>8%p|dKFn}~OtlVYsnSw?0){TuJMqId>{Fle9 zNr{z7=W$6!)IdDTDnrBB1;r680jE>1LYJnDQV3_sJh!kcosQg@9`G!q!tU|gpH*w9 zVw(IeNK+m%P|S>i2ccc~0RXbtEDW6)mB=Iqpp{VBmbiIZSKH6q+nvK({a~5p{7e8c zkFpEwtL6kIV3F;78y4Yd__Prc)_D8pG0?lCmCVi15xLpa0XQPwf!V1*E9NO38cU~rIO zr9(IYkyuuU{fiMO5saY-*a#DLlY&+_@Ecyikqp$25+-jdE)KHNO8!iS4D=*#v~j0G zi!R6 zD5#uvcCI&CDf_zLg++$DTue8HcsDqIQKN9)a$}InS%2VE$1tb*L_cbbF$Mzwz*RZI zL&J!EP@nB!U*z9t9IcjTJaJelsr6xB%xYo$v{`soD4a-Hq%L0?M~&Rug){dzSnGEa z5?KPnR*nDk0UOVp!*YGPeC@#enxj`qs{4fap-Ay_V|#6?VfFyI&qnLlG$2k0sjk{h z#?;t}a`Qf_;gZOu;8w~aEk9P$Sl8zDG-`f9A};Ju40Ij~;=cC}0FVHF9-TeNu((EKsqs%O!o&%Y?Tw z%QK}5-wM;uGi_v6aTxymzDD&GHCNfxQOicFxJ)x)X{=qRuvF5aCR5R;`k5rEb`Afj z22wggXv_I<;QtG3QC%+oB;ShN3LHxOXoUPB8z=i7U+aOLXoI5uR#((ni$@L=R5oBR7kJ29|X;?Iczgj8-xe!1Q?3hijc>Q(YqT88#D zaQHZFtK(T4edXJkTu5R~8bV(#bNw0PNN4#aGbW#jGl?e35Q|C{WOFrbUDj-sQO}d$ zBk?gbKFuBDFQ`;tpAk`J%pdS+jB&R^xbz4sMxymdDWpp!`yoIgDGj6mX=J} zyMw4{Jr1YMRwAKB(3dP!gLzboO;P9gW*Cd!Hth+kC#H@I4_OkuR_A7hr-bKK$)x;pFta)|GfVx(CzUR&CXQ2{(1OxutRxy zClRRYP>q4sJEU*Ww(G^v}QfKtPm zJ3fDtp#O7;A+oYcFx;*LmsSGbeRDhVHhak;Or~t8Zk;(r6IUaGmxHPBVX?=tf%||``?QlSW$dA zg$~4Ib~*OyZKhy`J{}0?%vS~$r-dWA;A2%STf^~l6kLP+I#HM8O4H@ToZmM9Xn@y!!e`TOMUtQkAQfS=z>ULZVG&ICMM-=^o&Tgi1>OtlB{K(w z{J_s%0fSLgr+h+bm#ve{n%e-;Sk_OZOpiN#F?MehUM{nhzSq(PUeq%X7_^ zbCzbpCcVICb9_j07yD?zbRB)U8i80YEa$?^5C=n znYOG~`%!t`2SF(rFHQfOZT1o6hTAGMC>i9Kd~?DQwpJ_6k0!q%Z)zhbt%My?xG-5W z6|meE0mt^iTptZtLZX*{DIh~j{lHk`Jf7Se zPYyWl4|JLO2H&H@zQMo%pfLsfHKYE;JQKza>aduWq@QX@vt=z-GM<{1WTnq)Wqyw9U?l1)Q=wwzb32=W?B(q2fr2Q6!V$4QaPv0EtN%G z42{bI0a6tVMB%sWR6U(zi)fkD6jBjej{Sl!;YZkT%XN($x+C1}|kC2j^9a zsg%4lOD8N%ry9}L0%evpiBFbzS#;SMT5E^WiM`#upaZU6A}KO2sK3w-7D^=V$2}W| z2jA#B=Ku;kvP7sp4U}PWHR7P=&OgB?YC3JdA7)xw=&cZQPr*G=r z%6XiuILKvWU(0xnN^Nqs=08Ocr6ANPe8U+l$tsLaiw0&Cw(X-+t>G-NW7Em2Sc8yD z!zZ*Tk}Kr#M(aSj9VMW4g~~=!*fdBLlyhcDkrHDuXaa-GI#_9V7uxeF?oxJ(NNxA!d1E_WW% z`HmloeRT_#p2&MmK(xoGrIE=)Y!kKh`?AA-r^97`;g}W(e*3E7BlM`-qj!GP^TPFV zbTND;&gs+BHFA6CYr6ChXf~)EXpz_i(4WBKYP@hisCf{z%;V?J_j;WXJ|3OL_^k}L zWS4w3a6hxuXWg`^JMrw8bG4V-ZR?7rKO?p?&5qN^+5o2*f%vQ?!1^Qo0+YxC*QB$y zMz`VdL36{#eFoeb$UV_BK?wGGnOW4ZVBpoSgljuDK}6chIVcHFFz$}!UB`sdQzEO$ z^~rx;bXYZ;xtU?!hO{NXx3@kITIsa)FZT9d7frqA-L}haZ9ChQ#>qC{or+9%Mh5|f z*+KQVOP34p&-D?t;r0h^LGkWXE-4g2MQxcCAR>Y{TJxHFY3yKY(^aT8*c_xFq++U+y2EsjW>n({flx`%P`@g&ER z)IBCjnfb+{>Xkzn+aDAj$z&EN2ZB146LzkAHnp=Q<1b6OM}L(d_8DSI+M@N7v07lq zag2`TYJO*R3a~EHp(@t$V|SP`(l=yq>n-?*%1+1Z1~-sMBn1<;!czY^)d*bT&$yIi zFQmNxL}Z&=1#H2=Fr+X903rZT5+9KOt+RE1)FsSx&~p> zFf>4kM6RAwjgI<(Zx<%@kX2l7<&*6aBUF;2OCF3Rms#VIMOT95siBb28cAfWrBTjh z1503|XdUcGInE^uLlar?xzoykWKINEm59p9S;$1Dz23a^kQSuQOw5%tx?zS_7+Z=sAwlGO2y@%c=aYkWb z3^(&B00c-9b5%ax3B3eJ6^`HhXc)>*Ne|x=asT=znB7E+Xl?Q zYR|KwQtaGThXpg>yv(?cn7AS{F!%}#K>~%$=z?pF@5FN~$$jj9hI2!>Yc)ZY{{R^B znC<`mW-Q9u9U7LA>8XSI3- zrgsR9m~h~bqnURJ1cTXnO0!PN$i;7F@4mo&j!BJtqtE}m^JZl4>|jYo-om?9*9Tfy z5cTXqH3unBt>cvQlDD^&f_uPO3~KoEI(PUq=tEhwX}Q4`h;nv$N=VlB#Vj#YwO|qN z5(r!>$~s3nO_}}x7AIH&yWckqjczA2=u}!0_BULtOTl|}Peu3zf(6o42T=Akxfk`k zaf*Y7Dr}f6sU8XG!KvWCG;H8|0`yIApdaa*<68}r%AIr1)$AH+Hnou$XVjYCG=seH)`$L3`#|7> zg1D1m&_=^L86I3ubJ*8wCxEO-C(~9?bgn8D94uO?yq=q7Uo+*vD{$fI>|Mq4WMixL zw|(aBUfhUR==57WSLQ1!c3zTT#q4)^=0B}cfyhX`3FF{55e_7I+0Qk-QAm;RPIto zTkv)0p0Ny|e9I~GCS|pW=CVpLYpo02&NP~GlpVc1PfRRZ{0=?Zy%bF4zLv^cLFIPo z|1{P14Wb5e{E}trw-h~HaXkB$4%)X4lfSDw{5eLS7{o-8MCs)H#vRJRvx?bE z-cJkh2r3VbC2*)I{~Pnr=MTWUkLwlG8rH4~WoYP_$qNJydDwML)eFs%^T;=gu^<`$JQZ`C(c`x%y z{o-{}{{TYby~s^6#B;%$WTzOv2Z>B{-q*n)nvfcU;4E4hC?&B1-2t}P#cv$vq9l$o z)eUdLWS_xzXqWa^GgmK4)7!~ce{ol-Bz&g7E0qu~>Ve7M#IL=YFD)oDSE55)v=%jG z%&v>x&`BOoD`?0fbH?TQ_3kPqLSf!>A`AnMcjHgf6#dEH`qC~32s+OIP;UeD;HEYb za5Yo-WP4Le3bFnN*GoqSKcUTrU+sA;5Y@!~9F9sBL&nr2OA5W7)4sY^mmvLsiYwzLX*$-QA6JcXxM7w@6DP(%p@ew19Mj zba%IO2}tL?=XZI(@B9P1XLfdWW_Ocjzw}qT(clYVPHy%|b);aD5%=Gl4!7pLw6->z zl(Q~||6_f_bo;Sz$H)+ z$u#o({c|aR{tHxCm;hmoLBk@6Krcjm9fu5$$#sy_QbCB_loHxFA)Dg$!gtmEaF>s_ z7RFPMH{hRl^9Yd4yoon{i^`5eUwEWT07wGlhyRTSK!UbjYEHZWiGLsvIlZw}7VcKg z^VDLgL)UJtFv(D}#CIMqRp50T65@5FUQsB%tFLj<4)fzy z%~n+aBt{Kj0z;Xr{~xzV|Cey*wI78?0DR=^J9t-y5)^moxghxKcNpDilC~ACumVPg zOFSp1FF{IqyBcfhjK6#gfyyzf`r4uXid}w{ziD~0`}>V|6I!LjySjp!<+dHY9%x`E zr@2#&F=%J{em^>|zB-F0@Jy8L4B*lQ--uJgLWHMc2>NBj((|ZK{Y`<%yjc>$D>l zd9=Nr2)2mi@$dp_RW_{8tW)tW)bzl=hS7XDcK?dl!NQK6?((Q!~;uP92RF1*R&tab^<^K?e^A%67U@KzsIkCID z55biCt9%A?=YILa<2oO{O>T|V6U;+ZH^Y$M5EVU)U8+Lk9+RYy1h!65x0e|x>X`X{ zF{_azKc8GhNIzfPmafS>kT#*A<#b|5pI4PAPenC;cIxgRZ9IGGQ&woZARsp*6GdNH zUw(d!C0pywdsHWn_Pf;ZCvz6{G(0`7L$lRY?{sG5{8PZWTSNE$dc!`zn4Se$9$(}Z;gj6}U%A}^YeuYvA9sx|<;BJ5fVH$lVQQvuoM zHwJ?P#Z;32#wU>68E^8N{5A53DwJqqepOG*lf`FKG?e{VgXgUGBPs4ME+Bgsohv7t zofBu+>csToIluy~GZ45q3ap%V=$<>cH0eGKXk#8lG$PcZkYmAWq)m#)mF@#5l?%;dtZ39>P^9BFf-TD z%4!Y{SoF@M69(IN<~ByZ3>LlCpnhzGuWXBiZZyc5(r}XU8~!(gNafrt5 zKWrd5KIi5*Zm&ZBs!e<}o0Nx}=6esp()@OAB&s9fC^$TjGY|k`@MMeSC5k?Ld2HE=t5=^T+I{EZfk|B|@(Ztt9s0Tn z^&NuK&2f>W(P0OId_(fKmDSWM6)ue$oFBH5aGK*NgVU=Xt5t~63Fbz_moUXJA4J+d zt$IEQeR2jSPM%nrtZ>0#S8F7~rISFYR|#{YvX%mXIG_MOLiOyqiHyM~TDNxjx~A_* zG!Mo}dliQJA8TQRT1UEkAfR5;o|W)oDnA6?wd3xpWe@g11luByh|}^wrAFHzhxa1< zazjk-`e(xGXt^c`3Z4hw7!y4uLNe>bkv);_aO1$V#vK7JI1%;l;iQ5B~S5k3LH zaG}{xQE6&MQ0Tqsts@r)wuA4T1VPmU#HcM?jou=6v_7936 zP!OY}4+QvuwQ7uWQOg?7KMw zKpV?ZdSRu?d5q_+6|PFQgu}{4XIGLH~YtbqEbKywq&zqH=Y?&`_XcatdY~(I8)h6KAkNv5!{jqgU z^xFfCIjdbbv8{sN06Y&NV z6y-(bie_>iC~F7x`mKdg?Xl5!6s@R;8{9!B!be?6R5?~`$&Vy@G*D4to@C3Aab+D@QKHmx zEBM21LzYR}kO9|%dNFCntLl4w1Vg60wz$=vz9GYH4rk?QVU&Ww;&JPo6^oWWT|E&e zjnA})z4}Q4ct#wDB{${7GTEJgrZB6lxFR{Lo-#_C&H%O2lv_RhvI0a)T~%t`S!-8b z<0IG?i6VmX*|?Z0J)M>(krKaGOx4UrxlbA`D1&nE5?*dP0;To!f7scLaL1vG3i|Al z{Ef|&u>W7HRwj?6GyygAQo#~si87;Bds* zijeX#Q|PoITM|W0gwLeZe1JM;(5)kR4<4tgQKNSLv(e9&w?v1^#?Ig+REwww$>FEYZoiv$uNQDLzOkx{(9R`wYIVQ(%s9c`rb7r*SOUAJ%Ksc<@e@mh%BuWAOs_qQ|6fIpuhO>#2;9D|{W#Im-DOac`)qt0_& zy|-!wyC&M4Sa_eH29U98-c3ypn1d3U;P|%ZFytJ zaP6FLSL2b$NEcyJOKm%|ogvYWDwz7+kg5Bvg(A{!NGq&G@+EX6U3=(Hz4Q(W-KrB{ zxRETtSN*YN)1;1T*4O6hl1oirWG;)i?u8ciV!ugP1P9mgGW0+(JZxBF5h3`iqUq@^ zv&ydWYZ}R{*>2dWC8#|M>wC_|F+AUod0qw`>nqO}{oQOPO$|@Lip_oJ?P2pxT>(?j zbjf+5K6=}S*Qs$RXH{pP4nS}8dZ3Q!@3+{y-Bf0U7l#)i<1aEa{(RK6BT`)f1s!)S z@_qUwh{&#lF*X#WluWhP|JP55^t~#V9uh1uGg8gtV~zj=rcs={$I}>;eBjrJ-f2ZI zFJDYQ+0DCeK^Z6S`q}n`(0=H^Pgo%Q(ftpL%0%ghv_}R7GKdJsEqi1aF-n~|nl9|p zZA4c;2OoAzY;CVRFBUU?xJ*`c|E@h_7dY;BZnbm`IS2$Uu>iP&^w6-z8khUPe>^Q2 zh1}gs;ootImz$C+Yak~InQ_Z))!vU?0Fbyqj%o2pnLWFdMx}hFCgu*uKI5FUEdQUo z#9yok81(61?=jzgWc&8Er79L(%51m4STbOx&c zmtt=T-_!FzZ(gu}n@FZYmmM4kfT4P@?JeQ@uSg~6zo*eGUC`hB@rngMzBro z-;VTi;H=A1tij{M&ch`YCxpuAs&gGRi`yooUC*iCzO|fiMb?FcXS93jbK~VYn6Z!E z)!9vv`|rf<3!d8Pcr;19vd+W{>)#od`46>tZzYzlN&bybkKy#*RNlrkCToAhOi3II zn2S?9;9j@sN}*8Fv`QZPaw_m2dWe96^8~5_s4na^31Ru0uJ)6-5HG91L1twarQfe}q#qjL;tP?OW5J zr43zX+#(s9jTj2a5Z+v4bB2xAIKS({{>hXPpTFy|kTtJfcz`vak*bT!Jig?MiMdK4 z5|%xx$7XFNYLKo#ed2%=>|={*c^aJ*DPcrFu*BGxvBj^YN}c;Ws7L5mBa~^FlVKk! zY8g_h!zt=s_E+y^d4327uZk-@>INRiaSObeS%Xmy~dpGWTV`xtIgKK>yR?5Wtjnz zw0H(jTcjbVa)OygBym=bPV*Y9&^QH0p-IIT5czkhe(nhXA0NW!Pc z_?^C=Mk3Sqw!mTF)%4$**C4_{!~AC2#5+`b%`o1G#CL61(lu}`C5LKujLKVMT?@?s>**s819 z;>o)-*?K@4%J46Q!hXqr(~>En&gk?;laQc#eER0uy}yDGe(z<6qo{y2^#X061s+)k z#)A#C`tsKH47h#EHxNf@cbut&(|nA^i#gi+vA-x?1++yLV27xC6aHu~9`40Dl3zZo zzbzgf^;epiTfl0Dyap>cfxkW-sH1sme}nL=_aJ9`GdN6z^6R1@_ZDlj_`9(QlLdsGNb?vRnI-Xuj{a zkLJFNb+&rZNDKX5QyymugO1i;CU4z$4OUVIsL#GCyd1MmYmeI4FGzCX!G+$gWSH=4 zpZb&}N%~D1s`T29pTqwmGBFD})S!uu)bg*?{*}7dC})^z;}Gl)mg+STnkg$LppeU9 zCC-{)#9S~N4aktAN=#L?^Zrh1=@eFRFO4CK2{Xk28; zs$3oP*ZB7qCVt~eZo~$S5$jjqBuZ4ATKxT8snjQS6KI3f(m5xP)~5N`ph zUjD#YX}85J*he5sNVhH$&QZJ;pNDRudDe8at+o!m>#ME1|Zt+162OXKG>DDd%xN*wQ@lx%&ee0<% zq*1KjnWv5}qA8!yM%uf1VAwXk6vsIMVRYfh|B_D~yT<`mfy-YHWD#7CUobM{nG*rr%N6ZmDf>bFkx+YAPc*^e=m z2)|!ugsak`u}(tX4!<>I6rWIC8ga%&+8eue=xLYuZC0R}ntsBcRJYQAs(NY`-)+Bw z8B-6(Sg0e3ghW;NK2H{=IPCT^KgO2*3~BN=#i9ViI`OJ#Z&`oS-n=K_**++uD8=3$n-U= z>5DipzQVDe8zS^l$p@bbn5$&c59WJP0&~A71dvYrl z{}Ki|Ofqcx{H?IAvwRqqtcr~Oy!mkyj;u1KhOzRLPkD?FCh5w%gso@_9trEt2?3_$P|{peFHo{c6I$g>k#=ni&V+LyFMRW&bW%5 z6;wUZ`=dA=Ei+xN8%RO$6de4FMFm4{XSa1UuhK z7l{glslC5W_n`RJv9LbX zL2u9T)drYU^QeQ+O=rs)BhybwW#;(d{pIb|sH$DYW%>K(hm>#_z0|;NpqP|_LF#+= ziKhu#f8XIC1qRI0O%wL|y-1h1m)nu^0pc6)_Ut8h#E1y-H#ZXBd}tcRfk)RL5s8Q$ zUL{$hDGY z{R*#h!=N#|8#U=yWLY%NPuEWQcvG*r#LuH;q+>WCdi|5ATcNVi{<{antN2I(`jSO- zR8DahMW6R*xnj#i_u-=iudxTQ;%#I~HNjO?YXd>t)0<{MHKni*<)mky@jWd5+CGDn zw1N(U{qD(XN=3NSOwDYAc|=QMuEJ_TYT4ZmOGfc0PyHAR0tG}yA3V3SKD)q76z!P2MiPBi1s=q0VF1%>R?rxCaj%4I}S zxY}@ny#Vz)8fV;NhrE1P%x;)RiLEPORu(xC3~7y*gcM!?;PAm8J~cX!*yr8|2Y;j< z{Er_x8c(OF)SA@HWqho##wI!0v1h#Roi%60KEkWh?F>)}z0Qq_ z`Uhr}u0cL12{DQ4C#-nb#~BCB5phd6soz|d9k!!7L4(N6YEx->n&^>}_Eg8&WPvB5 zV47m}0@M9@uU)hTE;oy_YqwO}LPc>yu4XaK^lo2BEp-9{T(#(=Ho_Lr*j?;Eks z0`yx~O?X%PW1`?K@C8I`k~g*R>D%t zb0g7DL}B-zvg0A$q&i!S+P#a9K)C4p)4Z_e$~9oht74!q;!ne3Tbh`wh_iY})~UIp83m#DeA1V4gZsPxL+;BJe~gZt=7f~}fR;2@^=czGwS#h{qCq5+R-6Zo zy^giPag|4s!cwPOnXgCd?9$Q(LOFG^fl`CI_F^M-m6m(D(c+KAST5|(D^yriPYGQ~ z4u#*S8}SljBWk-#U1+?4Bh;`6Mv%6{E+y3FdgXQe%4uu(Z2z{jaZ?7jP!Mzn%heAr8nSC*%Ya;*wt_%=^A2;|GPYvAJLVF0tf; zZ@K*9*c9|9422JoF_j5=Df{1d4`J{Xf)qX6cHDv(Krn*59<@6Uua1Dkaa}$Bs%5v8 zG}T?c07Hj@`(s!%!!Q%yhC(OnWM(;y4T1l+?;A~2dXog-V1Hg;M2(^m{I@TUI6Hsl zE=h<^^(K)z*QyV+efHftfu9d+i>E(NeI6kb^%sVl+?f^tBrq)y0$c@NJ6A4!vEQsZ zjrOw`KHu6U-OLOtax|9~vu@6H%?>!u!`mRYhd$a)EizH-bqRHo8CFFwavfNk+i2f& z+f$#Z)alpCbOl&E?X=uoIg_&V5X9oR(;&5flPJJWalU@RNqCJsFqE1;ov#1`5V?#~ z&4S-|$L82mWEy^&PjV1g;rG(d!te0{2s*vJd)UYWqydmE&ZqI!bd#Dh&yr^N5icgAHzmQ_nf^*ztO=&HA<^(SEO(x2RO{I3MXQ_I#kZ(8u3zBpYylR?l4;%{a}? zcPpH{<4-G@30=YAxlz(XB&m}BElr8FHl-#fc?=ty$^Of)Usw`#)NI+;N)x_+e*x0L zE6YNbl{y12Zqd`5;ab!L5cJ5_gs~r z*K9W``!C^@{85hW`^>+7D}ZT=O>fNRJFX^cshcG+ZP#vSra|$SUV~kxH%j>58uSMR5^%O-6yio{L5H|p0xfp zYtZ2C%S+z)jn_mrDp;J;if0Z1#^OUY^tS447otx^Uq2Rorv2|YA(whHsne%YTf`EV z^~3UrEdb|nruBvwnYYJt-S@>90C0FA^llzNWgvuqI&;yBueD4-%u!zNOd(M@Q-#zY z`MBU%ew9U8f4u7qS>T>3M+;5?&u-1Vl341vq!F>s-k$zAII9E1rs%fOJb3S6;`+nU zw($XFm`1kf!9UAzvcQuC01s!;9U{QtvpG6gd>0t~XCwYPH+Cw)fZDM6cy1kcJ<}*& zwY#Knp^!k7_PpKX$}&}WR>Qz89-8jUJn;{}kuy;Chu>*fMOmf>J*#`6eiT_7{qL8q zXvwm$Cb#L6tPyRimJ`MaUH77RguvJ(_)uxVz4DpcD)Zl{!cWTCimV!G&I4|JjX`ZXLB;)-VGE_XciKeD9CN zo>_?|ln9KMR+z()Ibvpt!7e&esVWBUEgrf={nn{AdmePE)|Al;kixGb0N7g6>9Kj< zO5cSCFsbX=SGzyGu`Q@ysNH<#m{rsyEU?a?hn#NM+2O6E9hdvg7-J_|E6X&3w41J1 z8-M-!$no}(>?7tQ&l%U?0Jj;6#Xn6DJ^O8ND8=hBOeuB)Md)YcgQR}BzAgBU62bv{ zh(eE~Pl*Hr1Ny=l5l?<9x%N#=vP=?#6rNOC`cokYAIE%>gE7%IMX~5XZmIU}<(Oa`ok7{4Q{aE?oL|agcp;>EzRX%u6Ex@tpvGJW~Kyq$<5@ zx?XfVb>Q~?B^%gmf}mFYwBcA>7_y3vd3gbQQ@*^cVisQPR+?`n#L$M$EzsIk9ll(M zv~ApXtofF13g7<3Jz7)bYbI2ZlYhz-RmI#1rA$5EEucCu|5geru51A~n#cNw5J(uN z07wOF5D1;ZLErc9L}z`hA?}CY8xsk&62DH!}3qr^WRv&Trq^!(gKQp z-~LfigWzGDuUA04p7$J8x0{MW5*isf!Ew+UNbNVih?GKO$?O)%y@j%fm%f#2d*90J zQt|tu(%5pUp)9=ZUh+9SSC=xxs;VUlk)oXL9pho@SnUDH>ZW!-;pvpBfHjNk*s7)h z&4zQc4$YF?)raE>eK+5)#**{&>}OuJbz?M{?Z{LpiUyZhQzxjC2)$ z7mp0$nluYz?M!oo%Tvr1<0Z@S(!RE(38~DVsNZY5 zV|cXZS4_KSA*;Oy3BTbphCeRq_XVxPh)}`hq$uV1%P5s@EPgAmG(1{8nqT6fCnUg9 z_y)p6fCO4xECU2j@S2C?~lh8DKacY8uZ*G*tX4a7o8=Y(C3bp@0?*l*hG z4h8b*5H_0v@qtAHl5+AScUI0c0Qia4!Ef&j4>QMQW$V9`?Gb&m`L?84QaY$wKu+sg z^eXiW2!!Gahp~8qRL-?n09;f~bG(j&MX2by3h{|*h|D)z>&P;T>Sczr$F@iwt9=Yr z^k6-Ubh?HRy(oEg12Mq%L*BWnxEJs!ked)8^I?L2{VR-(1Qu{ZxuATeGz#P1u<5^fZ$(!2cA?5b(ho+iSHdcR?}&;K^ALjd|RUWv|Zv(M;`Zy zQpE?lgr(@HRC_Cu1t6k(?s97o0CptPi^>($<%0F5SPj1UZXTI8=vF9m4m+V(G0}50 z**H~O5TIC3PjX2Ws*H~6w51fAgHfIqB=4B8rwS7E>qRVz^vbI;1_$heKrq;Es`Zce zoTvx`PSF;AT8T-pY*S9!yxM?(2p$!hAxL#*yN@G%#lQ|hU;TXLRIR_bc^lUU2tKNA z(dOL&|8@f}1OxwlB!fhVLa>j9+qNYPD@!Jtd8ITfkMh39qVf?Xi_XJ7iyr+1H&S&* zDI_KmW0g*W;3a%QV1K^`5kwv#fhN@16?afv94L$Nr}5E3q;iXoh#3-r+rV$srsqjH z55e{XVr9K#F7ljUzKlucg{M1aNHb}Gy;tf{bLGRYcWC<9-@5C@3GI>Ivwz$vxSz*F z&UAYlP-u|wZ`Dn@e!zvpyJ3Bx!%42O`;5wcNu<40xpvDbI(KeP%4}c%AzG^G?mXX7 zmFz9m<=#9m;}6FKzl@s{*FGjlRM z9eCFKP7+cAq;B|cJM*l}F0k8kjM=gQp8?7&I}eXroqAiocM{DhiCyq)@UpONu6 zNl~8zb3jUyz`|&OEH32#NZ1J)I7U?Zks5fvUt7ph9ClIhwN#Tq*aKh4UnoVN4*)d3 zk8vqf+@vuC-Ov`6d!T9JgU({8M&^NzG=PZ$1<3$lQ2_XeWhnkM%%6E5VP$N7f;Eo6KKQF3(qPqie)9?>ld4}C-yE1{-Sg&0#L zUg!1Iq0Mwq4Fi8(9gdc`vSdfZHj$w1W_zg!c=spoiv45$Y0ulIaEua0`?XGO-*bB) z%oe4ovX2XSLfJtRxZTjbs~l0Dn(#BK+1Y*$yzl>U&o$$5`j&@5DQWc7ea2wtGYIxg z``n`t8m|Y?+VW}xR8r2_iMw9ZzX1=&@X@GM^5dMTEuVzC1*7OsVKIBf^dcg6nm!OI z?A|jIX+~l_%9xSGyYcJXLv%-Z&o^!MYI_RaP@Di~z`mmBRrr)hY~{wMn9MNj+E~{( zpYiD_F7Bbh!}BX>D~-YK@UO35%}eyFjXm1EaK?;*IW$HdCwfQsYfs!j4`;FN1OS1n}t8^$D>#TZvTda+g+4A4C7j zXNuIL$)_!lo_{s?-|(&SNj;={7l_>~>dMw;8TruSUSTlgo~j)Rf_+Q)W}VmfviF8# zFEZjKDh>|gb#6H1mbjhgTdy*2$U?X)QrpLa;YUE+sDB#y z3Nlfs*=hQAFu0;~e4_ZU_({9#+s1AiM*h;*>S*Bk zSYrVw&7g*CK@1g4W`7>ftPZiOn^{g+{f48MELxWZ{^cd&i0Kpcchbj%(mMzK#UX{% zs@)20ZvWT2KuKJr)2Y%whGNM&6(BhUzeBP4GOVI%0njo_dRI>j5>*0drWk=s4c2F2 zm!SFg0B{OchAhCkQc;|XS07Ut>BkMnVrr{`$#R6ifHKU?*t;CsLGye9nh=<;vXE>CxBd^ut+rHy3m;(`k${|eql`SpN&qR;t(C-BY<%^-Cx|}zHncT zvN-s2kP61qgz_eP(?2%39o=@HtF#%QJ+*0FS8?)NVZRcvdUMOT=EOa(YXNzAkTsI#BmCNjfB1-_-woFhHM3xqs(# z^y^^{eV&K>dF`tZGOOrr>;DqRP*xqM2hopWxb?zj8Gy5^KPD4_n^JA11WMlnH91>> z0hebEE&YDwLyu4M4e`Ef;D^t=$4(l!rqI*!#i=BIcjmkBb^5={pFZ~RPUZ$rQh5Nd z1@yKSkR~vNmBnLT2=hjpFKj-aUF-(vZ#zH(P&W{G%3fS#USvY-ZZ^4`uG*ztyV`oY zX@0QSMC#FUkuJhjz`s`<89Yqec7K~iHc%;#^aGF!={>GT(l@vAlK9Gh62Zt6@){2) zNa4D!$j13VZ*_V!G0Y2COZN%1OeMcuVUdt}Yip~|>HI8q5qBHvi4uSmMRU?RelP73 z*{pev^^L=_K;fS_N%k(ua3B^e1&dMvch2Lt>`!(RMNio|avG`ppXN#Yg5Unf{{&B< z*n1qHiH%}>s%Gh*ujK7EA4a}j!75Cb)_bSL&%nQI&HW{O4s%S^_3IYv6;JKFikbnl zWI0lif1Zh^w&~68y`!QQa)ibttS8&|Gp1noZ889O zbBMbdy4AdP|8LT{y%s5m!{?$a!7D_{u2>~jECxrR3D?@?s5lb3PodQe`P{*DllPc- zRdDHoxIA;4Wz4Fvh0n;W%|fN*Udg@0g%M}W(qK+tB*%eF(abKvJUdPo^m?i*?58=W z(?!eofA#bkc5mVAD#&N;suPsW?tz zUNw6ZQqzlfv40?zA$0P)Kk)ZcHRe7b$K4rwX5a|d5^a#NRifa%+JKtG_h1~?XYy#n z{T+p^sMv$4uEvEC3D=iK<$blRl7lQq_aaT%33kb*XXmbsW-05*i@*2ke03k~mghVP zRI;$j&zzqf3Y-DW$C-ztd*SXtfOnESuRu5(hd4bupc9L}rQ_8G?}#g*n}%r z{>hn1K;BF7wDRe|jAWb3z^Fu1*aEF~`2rKk6G!@KryFD-zQButDsWk>9f@LZx9l2x zcJ0)}lG3o!2E^Q=kpJ5@q%P<~@5-MI#~)CJJS@eK0Vj}MW5l+oE~qc~853Os3PGTc z3M*jj2|Q7w1|hV$3}l-+b%jS-({lK>%fH+{x!elpR)eoLpdsTz9We18Q+h;%1p1`5 zYLAl~U07l_hbRjfYCftLz#F_2-8t{w2{PeUgm3hBM3-X(Fm?>(@2qpqkT}G3gsMnkg<@k)SEM zCAQHd?_*E-7|nQBUDQ48R>BlDT_uc@rR|zhH%e~7{|0%K)E&!ibRd<4l<|WLg180# z5~Fa;E&(wwt7PEGugLHMDajvUaH=!2lyIc|r4r#;NMRM^Vy;OW5SbD0!+>8A$L_9H ziQTv&x1qE>M_>OL9||~p+=2mu$8v_`0U-8F$R%>;&L(5NrTj@^SU3w@Rz(gu z4~7vOip*0+_2*)04Z-w-Pq#5WFhM|4fLPNDIuGu?Ci3ru#ua{{j+%Po^?V!Kmyju2 zhwb^<`3YwSFXxNN z%Lj_Qu?^!4s;ScF9)@UUNZ89&j(Tqm#5JriQrHG(R08NjTTiqqC^#6Grv`R@>PBWY z+^P}}cdnv}R$oL;71M(=TGm z(bV*o`mOFZ;xbCVT|@sEOE8p$dh#=8b5lXvYZ=qyFb&(>E~FK>_)PR;m&38j+T_Zv z>04A72ys&1GFLR|w`LyreyWFz8AOMuWisX2cvgSTrBco_nhc)(k$74o)>6u+#!ev4 zgK9gHPOxTW(oC`TDa#gT!_Ig$bc1lYfj>zpgCO{GvQ!iA8_+~{f`nh!@r-n`R1bEh z26Kg1AlOv3behB7Ni0OPy0C$o@6v}VvB_|5nDcd`Vv;cR?%++Sf$)pi%{&`CD`AJ~ zb7=H;q}=E`mGP`w&1EtQ+3cOkA9Yd`Qja81?zn>lTgijh@G>tSOn&vXzE&A!g0Iw=W_VW zsNH?b+ZxXJjs)(EtP#A@!>HTE@Z~a#YG#3q*Nw`I@7ufF{+@YrQS>t0p$Au>>jVSX2oH73edHnX?`6f$+FLkw-?%FFd&5=g}`Ml!n zXWp4wxNm+u3Si zfEnZ`n9Hfq=gkacZGWnj0f3mQFCi>mu@k6D(6{Bz5RclZ8pce+yA@HHE}UA_XUbRl zk`SC}Srm~DkM8~)YfB{b?C3cOB7g79kV3)0Y%UMR9WZ3k?CwLRBdT0I_0^?s=uNhv z#y4MbJ=8xiOo1Fy>QJuFH$BD6zwT3Rz89b0O}(bZ5Yn$U{tv28)`1Mo4;7zB4_&e1 z&#U5_#nW7K8f3fktU6`|ST1QAJqn!S)sKq9)KbYQ9<%2o#d_OCK_oi!52m4l?xj{QVYBL$!zrzXZN#HUWQ7Qs_BtVYw*l2f|Oh*5`QVN`|gCs zsFXLY=VJq-75w*4S@tE1r`#CVVAOV@6KzyCzd7t^8==_c796QEXEujt68Dekp(7qv zzud(u;0anI&BX>y5Mc1h&PrcxP0o2b`l`(VgFj$HSLpY9bn#ZB+TOTiuF8e1DdRq5 zAA_G$MlUW$(V@TE%}_j4|I~)=*Cp^2O@txB-QhsCxse^XB`~DF$a&c&69^7Ccplms zN}}z)FYY3yetN6{2*#QEH`%WN06XvWu!;m_&VGtgo!+Cuv~0h#i{062v$6U(%i$vM z;?Nbmb-1~6pfpMOnG1ou370ZtEg`iq!c{p_snxY^n31T3j(`OKRws_0_P^ATzu#~* z^xxFuuXgV*^()PdfR;E=zs9157Fx~mVlcF^B{8tUVx)Xuklw$Q7{tNVoB4q)#oizG z_ZXj)g@^ohfon;Tb0D7F+387_M4LeI&JUTlU+8yMcUFuE5FOoCu72rSKXudh_R`-^ z0!1`lzj2quRZ*(C5$lHE=F~E{B-_8zC^rem+b&umt-V~!-q!G`{Aoe&+~H!EOt~Ca z`)JMQ;{2oMcoWn7SktSmQCVVwp)wA7Ae~!~GDD zPg{mjR9asAUB?VZGizSRLd9e`ld5ypVSDoPh1psf2hAkU(?K%}aGl++)5sC{G4sm)~Kbgtsy(cjoqUZi=q<89FNk>^()cbX+YHmfpXH8|889HwzYL-!^5Jx z{Bk75;6g`>9DcPmA&q3oU(-l27;KCTefWGk>qIB>_o!-pCtFH_#hN=$mMNiJk0fx{ z^zQu|F%iyE`kyM<&KEBT;((LC?T@}hxK8V+wU;h%c4^qPW{v#{1$41|?rz-*bH*`c zdf{1>#a4@19wRjhWKWGhRe#oV+Hbw%s3kV+LweNEe=pMq}*5NZZD7ezwF@N)6GGC-9Dy3=SFnue`4ciYsci z9)i2OyG!r{4H{$u3_3_~5AK#B1PSi$t^>hg2o@j^+zFmQ0>MHE5S(*|RNcCDAMVTd z@<06NVa}OT(^Xx)d++Jp-FvOk(m-T8*yGx9`gxeRE!Q{sztv0jK2qFZ-HGh^5JBMY zjOc~!-d~l^MX&cr!SQ(uuJKML6|OrNu@Vr1FkEnZml@mqsB~Q8b2B%E{c~X#Fnh%g z-Yd!H*bcwZyjz5R_mPf^YyzlzmVF>**9m~jSL;u%t~GkbgC7uzkWmc1{75PZ8HD}` z|JWQz{OR7S6Wo9O;#0X_wi9P!sl6ZnK!s_ z9}bMi=MF!mzvOR?sbr)TI9BduI+oyc4pJuP+mdWWE2n4M@QW)op+s2PEhv=zVC=PO z@{e)hiA=nRc|p)}wv}?&UxE2XTZb4|gqa>ywNJY$dbgkT>v$}WKmMcb!y>J>3Pk-V zQIQc$HW;+x!nDH4R75d{tMZ|BR1QTH`eXJYJzWb5AZITmeT+~aI#V#g1Tu()_CD8I zm0&WaHBH5{(O@@Jc-fZQ+SNDP-hLu6ym?Y~^QSYw7>0G5HKAhg*u+UPx}0XFZe;qh z7LNhgyv<46JNt7YuF93GIaLIP{?#AfA>sB+)s-oDZ<1AH@dfK~wy|kI{RZy2HmTVB zhrgfIeUv7e^B~>&Q9JgSL!x0=pq#@^{}>N6_V}Y|chj|^2i-{6>nLUl0>F|i>Y{En zd6_zIWud?A*_lFSSHG8D_Egh66@BfEf-Z9^T73GmTIkbn@d=q982|HILJQ}|cowpvy?i4yKzvHh}_@-Q+MKiaefZm`-Ge4OL)1%W<<6*cgt-m#Z=l4y5X>SlZ><*Ie@;DnF+;E z1{*j)AGdw#<^NXj(?w%$J%+A{-B}yF5?l}_&=iC2=>L~1$lHO2?3^uMYt9Y+*YZxY z9JYDg=~Lh8t@pFq(1Z#CQDH+>(pA)>*g&AMHRlJAB{>_toEbzzx#`TT zAf34FRI5{nxUKff3gv~xjD!Z86fT+J_ATrsyFBlK#RUWLG2mr+O`0 zH8as<{bPOqUHebxf=k6F0@YII}D8{8XLF?NGPdY?_AjR zMnU551M&fh$;SOEvD_}G5xB+YUL7Vg=cd~PEPm0!En3%kqIb4 zr*Y8QO|IXvnH29*w;;yJ@`^;h*wTiT=QV6T=tj%2M)09$beJw-TRRPdp|WA+la7;o zg2?vr+|C~5jM~Tndz+46b^UAHS`RC``kJ}owNy)8)$@CU-fV?-UbH+Z39&3co_zfG6GpEM5q=>Lg;eEqiJ4J1rNs~`$4CEo6v5CdL;zGl1h%|i6W&NF#g4PMjbck_}uVS zCv(8o$B=87?30TnSZW1!QqrByd(#4o?P&~W-184&A3VR=1>6J~I|T*MW_YL*iGLO% z0u|Bs^d5)nx-ac~n^R{)k74ZN!zzEU8x^Z2K__73fP%BQL*lAE1Fp&4$LF}bERW+T zUK>{VB$ws~4N<4FEvT$37}K;&AjwG*lC^5LNx9L?pJO5=YzH*7ARz%7z}^kL*bKC| z%lO7z=K?;rl3MdQmH%lQgiB1q_*JbolYREBGN@EJP0r_(y(2J)b@*}w{Sh+NWKaZn5wI~)w!e=0!}qq&PNl-QFp?Z z7yOC?BC;rXYd>&J{ff2#?JKm8EHwH}TeyQnsDQg!#Ai|=H%#FEr|=w@1Oo}tsTs}5 zm)qr0)5Qz1tBc{4*r2}r#849Puf#yZbKv_$4jK9CkYLcfS!iUjRl^af(uZi!HN$Vo z3iDU7$$Xs2+%&~|p)?_ylNzvEwUTNdBK1VAg9J=iu)9$5sF)=!HJbihifdEala7Fh zUBZE_thdp0RjA<*d~TI>CHKX#!6Eso{S?lqatmVg;xknDpA>I(QLixjxP zySgbQE7Eg2IVQc%3iuB5h{xcFM@5!rab)@Ya=Y=A(&m%XK$o zjEE+O;^c({Rr?P~*E7dPX!9uTK`#q4aC2{7=P!P4zp1CRHt%&k5bkVyo3)y+t{QMv z5yIVP8Tmax?p#N99B4BL;y%{e;Y&O{7f7s=7ECi8+))5A@oWak{}Gi&<_UDx&nYn% z)aLqJD`1=JU12>+GNm>E_D8qJZD?u>`=>hxLBI;YpWtH)oA>Ve!=>)D#FEU!pl z6}q+83zVK0Txga9`+seN=Qro~%_tWjgz%8{N|G64P7*;e8JXt@I~2n$)-?3rU=E`7 z0ok6vQx{Ta=mI_u5h;jkdlU)Q?SO(>ZWTC{mlBBA%WzGj(Nf4Q$fl%suA;^u`jk_2%HI8HI%=94)wKIb>>G@b}gQJWR^(o1&A z-s=|C>uQE)?16FPbv$a+#F#=H^5i!$h?9Cy57 z4PKqhF5?ZS`iC)PWJ)7wlbdn?>B+~jm+HvSoiu)w*}q!(6mMQ$msDQZQgk(Ee@8H6 z4%`De*07tP`Xk5YigePdE|zvbwS7o_V5*HlN{tPKMH$!$y7=QUqU<0%X1<6VWk$Il9-r~sH}!T;J2-E_Jo%> zKca&?9&{sP;v=X)`Zb6%C8;b;5;4_b8RXV-2{HrUB(A}UZ(U7Z$fYheZt22yj^y1d z+zRGh5HWH~!6CqPFDyH=)#nao_yu9VuGx01p?R^YoNs0iCIPc?H)T{*V?ZW04!{QU zEflr&la;ne6v+d~N;{;MPdOAs#a3@m))`qMZ*!#e$GxYXz~8l0`7~ zMT#ud3ZpJ|v?DVjuUuu>s}r-Rc|Ra>uDVT%4fs@Kf}x{m;Ljf*exAQuui6Z3biGxpW~ChfX&{1#%t5#HH`k?k#sy)5Vj>l(}^)a%OHmEM58 zT4Dr%hW5W_-L};2LE%Hf%X@%pED?w{^ie#*RX>1Ey_w~+RaI)ewvq$8B3Cqf_rH!^ zdd^#lx?W_T*^Z*!F9(PbJ3bMC_NY=di%voo>J}$nG^t<8wy=IacY$e#eVH;8*O+r$ zjFcg4uIgNKxl$!(T5iFFn(^R=)`GrjYwc-7{+(|8>X}dHnHICM>X~bL{b4%WE;ri( zv(BQ|epcD25A@}MY)z^Rgwi zHNLPi!t4>yLU2mJm^0rHIJzw+nwE_kM@Oo5npdjA8NybmmdE8DZkVE8a$ef;RQ#qk zX~;R#^2#SSd-R*!O`@myn0HQIgxQjnuN)w_>AvHY{iU$MtNYVLbRrV0BZ#drUj~tT zTUqq-b78gFhN2$TeJ?(6oL6jf&^RC8bLJ8Ch(5MDUzHFunec>uO72zFLB?P9e=>@!cl-7{_g_D>UqpfsZ;}Qjd$H%?n zLQ}ozO)C=aplnb>K-8#eg50NIp<*lkuu@d z&lJXTp*VDJ9V*-D=*!9nKC7iDdG`mC@tJ_92POT;?lzwyQOnFL_2%_RVnX9_>U8~h z`t$c^1u z>#H_h0etIMMV6s#4W5orN=rLbPKjCveuw1h4Numq4=x=Z2KwUgV3*71Cl9(YGmVAy z$W6(EB<_IWq|M*?n_pmJv(GTtStzzHfUd3%U#Z$}#1cKQ+0@Lh$;l;DxgQ~TWXP)_ zCOdxVragwWI$Tl0Ur8xteJ;~4OU=(_hWI)LsF%9ec``yKBw|(+%4C7^Tb{@>K_B`C zi>OjR*X^ZNENT^E?l$NX-FVEqy3K3rD|Y=2;I`eV<;~CSI#_RFt?t9*<`dJSK$vU! zgBq0vjBf(LIro}Qf!51WoEeWns_lxZn|A2G*TK}xu5ub z&_6O^8EbRAFm75BESVLl^4uVO)LIPxgeNKZvWnd8mP|trD{5k69x<4_1J#HBW|d7* z=6RAGo&Pyd;7>^gdC@9P?&A!$ibj+Wl1&%eSLQs4m36qYQ2T%=QSseFbQ>&Ui@hk- zJmWg?fyBCH-CPmD!#jjN7L#UKu1NCAhQa7)9bBu4joYCKbz^Re>cQ5?iMcZf#Bza< zoRP)}+(w=F&lpMwtB$Qt8eJPaYv}%z@5k7wdX#(;;bln+=^40hvkw9bbM+7TL6_nj z^GOVxr@z};wTv9WolHudxjFQCSjg8Ow|bCt?QTM?IEWeOC?Qg#6$p0Xg~7P|_p|;& zX`xb0N2UGzm1_a86oxMl<`ip{@alHpM%5C8v-F2q;sZ85a(j=|jf)MBpyt63fI(sa z36Gab;gv4^T>A?P#=?Z@Ni8O(=;+_~J8dGdtvQI>BH&j@KvlK)BH!Zu&-8d-n!G7; zP0^@KkBQ)1&ok*SRi`BfS6ws>6Y_tG_M+e^ui5u&cM^hna`qwibw3cx`6X2I$bVu` zUpAZnK6R5rd4>a3yt|_1v>q4v!ZGXfcLbdKsewE+xWAA)RAfIJy;N8>pzDCL?o5Z? zdsHN4pixnB?Z{vvouv!AmxJBOt?s4unlD|8wX(7bUhOv+lhLPLJJ0X!m3U|_8msZ- zcA1+2#)qTUqEGHP-MDb?PM&@hQF&hk0uet_cyl88!qY_wcZ|PJ^@Iq0l~uGHHp3n?r5iU z3t5eG>5`y@Qi(EGak&r8RtKR(t=}Y#i{NBz^Q5a3Ll8->osj{X19U(h63?H0CW6CG zAru_NAp8vd87Pb@6r+W=;}M2KgfP^@rH@s!>Tyz4T_#z|&q?7JsIT7+yS9ytq6tr+ ze}o%SKOmCv^Te)}@Z{E&imj-qICHh>5r{_~3x(vtc`#TtkjyEGR4CwK3E%4UeQO&f z4PmyRoF*_$XVa9SrB{y@3`1fo0Q~~}9+>V;+I-6li+F54V7;tJemUxUdxTPU^DOLL zWYsJAF}~e213s=Cgu_g{Phq?@Lq*8OimhhltL)GU@o}y=0O!$;vsk^_j%M2{)tGz* zZp&0B+kv#W6-JFJ0shy&Pu-5oHflg5APLcQ9WjY%TUa+qhm1Icjm@VlmyGBeSc z`=4@O5=XeiZ>{n0__ih~FsKu?s_}fEQTpIMP<122B6`*MeR`LpTT^PfLKj>!pI|;x0jr#grj#z$jiR5w%jI?7qhhaYSpMh zA#XZBZ->~=M%0fkxMtsUU|Vj3>K_k&#YZto3r`ZjqYb6BW?%??xntXeTR!7keW0^a zcK~sgZFSu<)n=(c)wF-~6=Z~7fgXu!{n3h}ugRi4iOgcH9}QLD(TItP2mpvn?+ht@ z?}va${;l$~+^c~b=8;Ayv>Dl+oA4>hIY`4o z?^5Y*&S~=c@@AW&8Gc(jt-#VyQL{kLWI?KpMy$Bl^5)sw!?ASvX;bw z+6#_k&Xus)_+R>jRaq%fj>&^KXd;hW$%`klFUwh;_^p|593^BE4!=lGRb!j;bZ4i` zCPgJ5D|+J?-Z+JaH}5Z(+g;+NU~6iguFv|fko<_1jpP$BE)T*YI-o~%ar{IQ(fk=Q zdi}@joGAP6{ga^UY2g0l*AC%uqW71zS{tk+h5!xB`tGYA!i`c*OUGP8@{J!wN}%qV zbdZu!@8IN|)rr~sMIoK}I*@!Jh~1s62Kk*3lj_h+&K1NipJuVez1?wjmRVik!hIa8 z4(lk(JWE~vCU7rS;L3fR+rR+aN6=VdAo0pA`q0!(1AFcRUoM;20xm%R+LjD!v>9DN zXRdZJ3#(8qB>c=OTymJ%z9s3c-2T z5}4IWH!|KQookSXF zX|fEPAZt}>jdCkkpJzyaA)3@d;qBqmNphPYF6yb;4$9N_+uVxpCKRCggwH?9jyZlb zD=i;B*XEi1?pYX7)s)K~!S?-kW=g7jCQEd(2(Q}w)|c3Hk}HPDHcHlXZBNP!u^C)N zymK#+E?55MI{O1jfcn0z+XIIdCzW^`nr-uMMPPXw)@H6L4~lO+im*gAK5nR4y*w-m z_CYL<1#gglt?V_Sdwe-4DpCmCy6v3~sj}S7D9GxJiZ4`d=iawBuCJNGTGyU5dX9oQ zpO23(ii5$|BaX#sOOinAO9L9(*4RkLuAC^1j3cK2cK>)9R(*KweYwGrt<%oefTWqP zdZOur;45u?OnYO$^CDLZ>yWay{!jr(R3`=C!8n{B*7auv>_ zeO~WA|MkZ6pTx8Zhs8W1urAI5D25vETip^H@^6nBVdg;ILJIG*$u@;~r*??2T1E_S}O_*`6CXyutj3RfonLPJp;Wws-n(q#_VAAZ*sAr5DUC^I0cO zlGS1bg@gT^>(3jljjD$4Pb6TcQ9Cs5)7xpYb!B5`?STmej@?j>Qr6~@MEvBHefXcY zkc~<@k8#(C)tvb++d7la_J(QPydcgKO~dLe$%vgC$C|0bjh16Eab0`5J9=*e#kBRA zT^?c+9&`Qb8IX2PzSHA(B1B?k$jOcD;^E9St`~#KgVMyvM6rxh1=gA-q`ToN^iiHr zH`!evLIWg#KQy#HG=*4S(|nikOCYHCmA$~PU-q3=Q||l6uD^D0sG=)NsNNNFr5*QU zFob;Mj3-ml+UDP^Qc{?LDXI7V^kjF4R#W@=E*ytlfnCq1YwScQ)puqn_(Vs*zo=Xz z<13Qg0u7I((Oy!X6tn;I_suW`(^MZhN*@;5J6w#Fyo|A(gGOR;m1;YKm7Gi}Av(0z zC6?{dwF5u49uqjVX*LkRayypAVGn-&n6q|rrWaXc;5O_xSxiCexVURRrw1=`_bg{g`NDNwqrmd*Q=nrYp3$mD5Zp2Df_b9<;IN zVvu>V*fR9`SGLzVzvT{aO4&MLb!zG-wF)CG3^9IxMCJ8JXC?)N0-{36j~{8WVI2xb z#Otwt8%0r~!4|eKvG=C=rT!Kfz92(+HdH%=`HTY!Pk^B}zFvi7iLl&lk2A2nVzV!M zLp?1b^!LC(3O{pMOr$!Vuq0lyW$DEmC^m;J0*kh~5c2u}Opud=q_di&;ahjC#_(BL ze{rG9nP&o@4|9!J`mnH(k0Ihs1TEXK5FA5^yZJ1QE&EgB+lNXllxIXJ+S+T($D6@wDjcp=kO5+-{~k)5C9R#WNSibs^xFO~+gaISA9CekVS5 z|6{yR^nTap@aH4unELrr&dV8tC7$orjc2(6$*wmlA~(gvOf;JqB1A5dKQ%CimF<6- zTG!imT6}_{!&l+EX6$6H_yhHqY6Tx&_|JZ zj*d9fRt=LmB`-lj)H*+=?@Jtrb^pO7(bK0!Hf}@@)63d9krQFS&f_s)x2QFaM~eHS z+E8G7sMm%5h4?AhZ1zp6{;E_%P|!&l*)i=O_S&a->M0rCHCL-l+I=c2t^L=@L%mnP zsr8WDeN3aw>d1LA9Z0I-q0s7`*or4 z?!+Hoe)V$jg&BboYs0z{CyVR9WULrp8c7?)0Iu{fZPUaZljiZsmy8BGJFva|p3z77 z;#^4X+2-VjO{(pV>h7~msL?Q}f%i0^;B)>5{NCRiX`2-{?tD^m!vq`MCw6dn0$-8F zQz4OIN5^I?TW>48N4!nl32}ZZ8%k1}x}yq`?iRawmgIC1zH+|Z@Rb&h?}k*0-7EV~ zoVZh9YS~Z)|EvP8OLZ>I@7pD{P;)6jTBEnu~ z13?v~?Z1t`JG6)7eKcbpbfaLbBS5GWt2QS8pyw~wSBrB>L`Okilr;vErcoHlnGkMk zT-l$fE=6_#0Dy%>$&y5G5OU_RX zbu~UfF*on$;O7fRr=Qpm3~3QarJn_U8j}Z%`MMg*N=~Z-P&M9n4MO zM1u&Y2^1cgvpnd=$GS#P&uN^6vO5-6VW%S~KmC00(qW?sc^m<=euNk5bv97rdJOC~ zCjy$r`LO%aO+bVrX)!*yEJKsF{t(GI{OHx+I~TVsPGnJs{6GZaEDXV^s4(b0tM%cu zN!91s?>W1}g}bJt>L6M{IF#5d1n9c@00mms`@jK3Ken-eMcZ-)k2hKtf~FfYE1Pq3Cq-2={*f9@*FDJ2(FHG1s`zv z1J41jB3VMgLc3S|)PRMJJYCtil@}Nte8ZxVh!!oNj1%4o;=sx#6QHM8nwdERQzsA3 zWYd8;ARN6wtTYr&$n%qS2)@Vk;{oqTy!U$?5wD)GVVMr1*+u`+_Kev;U z{x&=GZ8qB99tPYNaB8IvL4phTNzaECHJ^c%MFgIRAkiLcYW~-ke{YZmkWPbbyGQj^W^WV1kU-t)F S|Nkzd_e}M{YyMwdz<&YLb2Xm; literal 0 HcmV?d00001 diff --git a/sounds/door.ogg b/sounds/door.ogg new file mode 100644 index 0000000000000000000000000000000000000000..65f75ce2832b20ccb646092b92e5eb5f626bcf5a GIT binary patch literal 11974 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 literal 0 HcmV?d00001 diff --git a/sounds/floor.mp3 b/sounds/floor.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..96dc4fa38ce4a6a09657a17b609a5432b7f423ba GIT binary patch literal 1879 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 PVt^U|Uu^-vO~U^L@XQvb literal 0 HcmV?d00001 diff --git a/styles.css b/styles.css new file mode 100644 index 00000000..cdace7a8 --- /dev/null +++ b/styles.css @@ -0,0 +1,235 @@ +html, body { + margin: 0; + padding: 0; + width: 100%; + height: 100%; + background-color: #000; + overflow: hidden; +} + +@font-face { + font-family: number; + src: url("fonts/number.ttf"); +} + +#gameGroup { + position: absolute; + outline: 3px #fff solid; + background-color: #000; +} + +#mainTips { + color: #fff; + font-size: 0.8rem; + position: fixed; + top: 10px; + left: 10px; + z-index: 12; +} + +#startPanel { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + background-color: #fff; + overflow: hidden; + z-index: 8; +} + +#startTop { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + background-color: #000; + z-index: 11; +} + +#startTopProgressBar { + width: 90%; + height: 5%; + margin: 0 5%; + position: absolute; + top: 5%; + background-color: #fff; + z-index: 12; +} + +#startTopProgress { + width: 0%; + height: 100%; + background-color: #666; +} + +#startTopLoadTips { + color: #fff; + font-size: 0.6rem; + position: absolute; + top: 8%; + left: 5%; + z-index: 12; +} + +#startBackground { + position:absolute; + top:50%; + left:50%; + height: 100%; + width: auto; + transform:translate(-50%,-50%); + z-index: 9; +} + +#startLogo { + position: absolute; + z-index: 9; + left: 0; + right: 0; + margin-left: auto; + margin-right: auto; + margin-top: 8%; + max-width: 100%; + text-align: center; + font: bold 4rem 华文行楷; +} + +#startTitle { + position: absolute; + z-index: 10; +} + +#startButtonGroup { + width: 100%; + position: absolute; + text-align: center; + font-size: 1.4rem; + background-color: #000; + opacity: 0.85; + display: none; + z-index: 9; + bottom: 0; + margin-bottom: 7%; +} + +#startButtons { + display: block; +} + +#levelChooseButtons { + display: none; +} + +.startButton { + width: 100%; + margin: 20px 0; + color: #fff; + font-weight: bold; + display: block; + cursor: pointer; +} + +.startButton:hover { + color: #ff0000; +} + +#floorMsgGroup { + width: 416px; + height: 100%; + position: absolute; + top: 0; + right: 0; + text-align: center; + display: none; + color: #fff; + background-color: #000; + z-index: 7; +} + +#logoLabel { + margin-top: 8%; + font: bold 3rem 华文行楷; + margin-left: auto; + margin-right: auto; +} + +#versionLabel { + margin-top: -3%; + font-size: 1.2rem; + font-weight: bold; +} + +#floorNameLabel { + margin-top: 30px; + font-size: 1.6rem; + font-weight: bold; +} + +#statusBar { + position: absolute; + background: url(images/ground.png) round; + z-index: 6; +} + +#toolBar { + position: absolute; + background: url(images/ground.png) round; + z-index: 5; + display: none; + left: 0px; + border-top: 3px #fff solid; +} + +#statusBar img { + position: absolute; + display: none; +} + +#statusBar p { + position: absolute; + color: white; + font: bold italic 1.1em Verdana; + margin: 0; +} + +#statusBar p#hard { + color: red; + font: bold normal 1.1em "Arial Black"; + text-align: center; + right: 0; +} + +p#poison, p#weak, p#curse { + font-style: normal; + font-size: 1em; +} + +.gameCanvas { + position: absolute; +} + +#bg { + z-index: 1; +} + +#event { + z-index: 2; +} + +#fg { + z-index: 3; +} + +#hero { + z-index: 4; +} + +#ui { + z-index: 5; +} + +#data { + z-index: 6; +}