From bae0b66e2d9faf7242a5ebf07f5eb173cfe11082 Mon Sep 17 00:00:00 2001 From: Artjoms_D Date: Wed, 25 Feb 2026 09:50:27 +0200 Subject: [PATCH] da --- images/knight-named.zip | Bin 19584 -> 0 bytes images/knight-named/roll1.png | Bin 0 -> 308 bytes images/knight-named/roll2.png | Bin 0 -> 317 bytes images/knight-named/roll3.png | Bin 0 -> 312 bytes images/knight-named/sprite-1-1.png | Bin 0 -> 345 bytes images/knight-named/sprite-1-2.png | Bin 0 -> 334 bytes images/knight-named/sprite-1-4.png | Bin 0 -> 334 bytes images/knight-named/sprite-2-1.png | Bin 0 -> 342 bytes images/knight-named/sprite-2-3.png | Bin 0 -> 337 bytes images/knight-named/sprite-2-5.png | Bin 0 -> 351 bytes images/knight-named/sprite-2-6.png | Bin 0 -> 342 bytes images/knight-named/sprite-2-7.png | Bin 0 -> 337 bytes images/knight-named/sprite-2-8.png | Bin 0 -> 340 bytes images/knight-named/sprite-3-1.png | Bin 0 -> 341 bytes images/knight-named/sprite-3-2.png | Bin 0 -> 342 bytes images/knight-named/sprite-3-3.png | Bin 0 -> 337 bytes images/knight-named/sprite-3-4.png | Bin 0 -> 334 bytes images/knight-named/sprite-3-5.png | Bin 0 -> 351 bytes images/knight-named/sprite-3-6.png | Bin 0 -> 342 bytes images/knight-named/sprite-3-7.png | Bin 0 -> 337 bytes images/knight-named/sprite-3-8.png | Bin 0 -> 334 bytes images/knight-named/sprite-4-1.png | Bin 0 -> 345 bytes images/knight-named/sprite-4-2.png | Bin 0 -> 341 bytes images/knight-named/sprite-4-3.png | Bin 0 -> 312 bytes images/knight-named/sprite-4-7.png | Bin 0 -> 317 bytes images/knight-named/sprite-4-8.png | Bin 0 -> 334 bytes images/knight-named/sprite-5-1.png | Bin 0 -> 345 bytes images/knight-named/sprite-5-2.png | Bin 0 -> 332 bytes images/knight-named/sprite-5-3.png | Bin 0 -> 292 bytes images/knight-named/sprite-5-4.png | Bin 0 -> 332 bytes images/knight-named/sprite-6-1.png | Bin 0 -> 345 bytes images/knight-named/sprite-6-2.png | Bin 0 -> 332 bytes images/knight-named/sprite-6-3.png | Bin 0 -> 333 bytes images/knight-named/sprite-6-4.png | Bin 0 -> 309 bytes images/knight-named/stand.png | Bin 0 -> 337 bytes images/knight-named/walkleft.png | Bin 0 -> 340 bytes images/knight-named/walkright.png | Bin 0 -> 342 bytes main.py | 50 +++++++++++++++++++++++------ 38 files changed, 41 insertions(+), 9 deletions(-) delete mode 100644 images/knight-named.zip create mode 100644 images/knight-named/roll1.png create mode 100644 images/knight-named/roll2.png create mode 100644 images/knight-named/roll3.png create mode 100644 images/knight-named/sprite-1-1.png create mode 100644 images/knight-named/sprite-1-2.png create mode 100644 images/knight-named/sprite-1-4.png create mode 100644 images/knight-named/sprite-2-1.png create mode 100644 images/knight-named/sprite-2-3.png create mode 100644 images/knight-named/sprite-2-5.png create mode 100644 images/knight-named/sprite-2-6.png create mode 100644 images/knight-named/sprite-2-7.png create mode 100644 images/knight-named/sprite-2-8.png create mode 100644 images/knight-named/sprite-3-1.png create mode 100644 images/knight-named/sprite-3-2.png create mode 100644 images/knight-named/sprite-3-3.png create mode 100644 images/knight-named/sprite-3-4.png create mode 100644 images/knight-named/sprite-3-5.png create mode 100644 images/knight-named/sprite-3-6.png create mode 100644 images/knight-named/sprite-3-7.png create mode 100644 images/knight-named/sprite-3-8.png create mode 100644 images/knight-named/sprite-4-1.png create mode 100644 images/knight-named/sprite-4-2.png create mode 100644 images/knight-named/sprite-4-3.png create mode 100644 images/knight-named/sprite-4-7.png create mode 100644 images/knight-named/sprite-4-8.png create mode 100644 images/knight-named/sprite-5-1.png create mode 100644 images/knight-named/sprite-5-2.png create mode 100644 images/knight-named/sprite-5-3.png create mode 100644 images/knight-named/sprite-5-4.png create mode 100644 images/knight-named/sprite-6-1.png create mode 100644 images/knight-named/sprite-6-2.png create mode 100644 images/knight-named/sprite-6-3.png create mode 100644 images/knight-named/sprite-6-4.png create mode 100644 images/knight-named/stand.png create mode 100644 images/knight-named/walkleft.png create mode 100644 images/knight-named/walkright.png diff --git a/images/knight-named.zip b/images/knight-named.zip deleted file mode 100644 index 65ebf431984db9798be3a8f3d8dd64b9d8edd5cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19584 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 E1LulN1poj5 diff --git a/images/knight-named/roll1.png b/images/knight-named/roll1.png new file mode 100644 index 0000000000000000000000000000000000000000..aa2fb86b9c7fa0f412fac8ed3968a0b8a832c763 GIT binary patch literal 308 zcmV-40n7f0P)`uyD4zB_%1@pBi?M@%bp{X>9`PO~Y%O;#9kOpoL|5;<)iZi!H4*>)i_!9w} z7%WzdQaH0dn@()HYE)j9tKAywHQj&>w^0G}?`T$Icyn1JhCv!+s6D#Drdlju@j zGCMlg>TwGSB57IB?G8Qs00030|9um!VgLXD21!IgR09AYlZ!KsqT+7=0000d7S7T^J4BZ%ff~1VJ?EMiSvb;XI9H}CmBU|aqms~uXgh2Op^wywPL}Y z${YS_hPd2&*UKT)XHv*qv_YxM;)mlIx%2K#KY~M6hu!#jsOyK?GM8!n?YgNdT92$_ zyq>m61oX1UHXSv7{^U+#0rT#+>M;|oepWu{+p+#ymGbp8>jxbTv7!&t7VJFzjMFP* zozh&Z^}qf;3Q^)X_+`I~#i9g7p4w;mKu`bwe|k;B3m}6HA%jTZ{@Ye&g3@ogdGfTo;JJi68I2m;*j!u7U!VTVE=by=#5QgV&e>FF`xz#ODD=0KneuP3L5`}~xLn0zUrST^eG@=nT1*JrTQiA6sv)Mh) z@exnv%*^}l?9Of=k6+?Dar5zLKm7y5ROdhcVnbc~oE0+(apAZZ&<2q@(Z-mfV%M2z z3Ks}Y=hGLEY}PY@zv);e<&v}-)fi~NOyZ!VGev=RcO*7wm>4s)dqe7G8WUkW=tvX< zF%t!aX^Z7bDz&C5X(Vx)5YzPGH2K6@_nLSPM0TWROl*XNZ4tSDAM}lh!?l(aW!wK1 z7wCAWp@~A2RQ(_}+V`3eeEdZqe#gs6EC%wqtbkrDH0|;iQM4J2Y*X{lA>700000NkvXXu0mjfJ|~Yr literal 0 HcmV?d00001 diff --git a/images/knight-named/sprite-1-2.png b/images/knight-named/sprite-1-2.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe7b1689ea1e05997055f19a066337b7829f4c3 GIT binary patch literal 334 zcmV-U0kQsxP)nIQ3>czr?~Pk^>gX2bnIQ3>czr?~Pk^>gX2bU6oAkB+h5CDZzcm~tA)vjFqotaiVs6c3X{c`FtErXGXtZtU{v&+oL|@FqMpt@ ze;%iMiRAG~{3dQ89wSddMFgtzzm)h;w?1b>MG}O4fo!M&e1uCA- zryroOS2a&XD!iURHKNPL)M^NZN-4e9AtHp6((5f=ttM2ZGm z7t57YYE3O!BngTL41@@ZA;Ib&MefC*AF0J6FGYb@Byyh+^dkfyxz^HRZ2SN64(9mH zb)yYabjj2Y;zOTBDw4SD@|QUE|2cMF6&ZBFViPfhiVXRfz+<`aVDus`3M2;kH|_uc o0RR7T%T6``000I_L_t&o0LFO4ot};!?*IS*07*qoM6N<$f*T%=?*IS* literal 0 HcmV?d00001 diff --git a/images/knight-named/sprite-2-3.png b/images/knight-named/sprite-2-3.png new file mode 100644 index 0000000000000000000000000000000000000000..0aaa0202b0e31b9d1a1fa4fd24ba94c72fdde1db GIT binary patch literal 337 zcmV-X0j~auP)eVoG9~~c^UHM6QNuGLfGL@J7p-W}s0M2^{t-f$VZFi+W9Zon{O)5HnFImZ}2%;Y>p4GcjiBkEYah8WUkY z8Hfi#%tXOp+Ge|xMysnOi!2gNh-s#gXi5`XJ=Mg2APOTjHE|*=I4vUkPlLXiNS>{{ z7{~FyB!P~LptqbwNTGd^5Yy-+CRoA8k2m5}eu&2#lX9IDZi6*q4#qt)S3Qc?g9{Bnk-+Ln0zUrSTF98qtWFf>NSEDIwp){JAa{ z$(Olv<{XoIiRAW4d?qd-ZkD^EK?11LuV3*&w>f7+gERzk`>g=Ifo^BF#z8mm?95h! zFVNuOc=!N>)p8>6GakyQSdd1odWit$WEpfr{ z5JWWCI-4(~RH>_El_nS@fFVRM7z&vFGRVC!`V}n>@=^%AB9;4uU>*?wnsen(jCJ>0 zo`H|wTsN8-(dECo6CdU*(jbk?CVPro|DR*`)gVR}Qf#6c*-To%dJSUoF$0eU?n5z) xxG2yV^zXO=00960gvZnC00006Nkl4S?62jmH)hu&JyGg6_4W`-MbsHODJ{gD$f|!Yh!M4qI zCyiEDTNWvTCd3Sr2%3__)=xC?ABg-&PfeT%1*b*i`;%aE5>pBFCoxz5%j`R z_~hCb@iC2VVuLl@`1OrAl^?DznCm8l1}Z*_$iYClRMaa)57dOng#kYdNfxY o0RR8=Nx1<4000I_L_t&o02zs+jbpS!!vFvP07*qoM6N<$f@EBi_y7O^ literal 0 HcmV?d00001 diff --git a/images/knight-named/sprite-2-7.png b/images/knight-named/sprite-2-7.png new file mode 100644 index 0000000000000000000000000000000000000000..0aaa0202b0e31b9d1a1fa4fd24ba94c72fdde1db GIT binary patch literal 337 zcmV-X0j~auP)eVoG9~~c^UHM6QNuGLfGL@J7p-W}s0M2^{t-f$VZFi+W9Zon{O)5HnFImZ}2%;Y>p4GcjiBkEYah8WUkY z8Hfi#%tXOp+Ge|xMysnOi!2gNh-s#gXi5`XJ=Mg2APOTjHE|*=I4vUkPlLXiNS>{{ z7{~FyB!P~LptqbwNTGd^5Yy-+CRoA8k2m5}eu&2#lX9IDZi6*q4#qX~VABpuwWaA7L= zOgE9hZo3fpnNMX_tw^U;_do-liAFY87U=dT62hE~o~b(+)7Ncmgz2a!E(kmm4TEi~ z^+sxqwze!%L`{eprV%xziLIY%;y)0Dk)E135eiO=$oHqgTumhR#-AAb;kU#<$3@T! zOA+$lJV}UYbQ2q_;l{Ub#G!a|ebHPuAv93&S;S%??_DK&pe95v41g0P^797u6954J m{~e7G&;S4c21!IgR09CjI-`x4H&QeJ00003>GFI!eEjzC_W4&DNGh$!oVVn%nXdmf>F`$4S?62jmH)hu&JyGg6_4W`-MbsHODJ{gD$f|!Yh!M4qI zCyiEDTNWvTCd3Sr2%3__)=xC?ABg-&PfeT%1*b*i`;%aE5>pBFCoxz5%j`R z_~hCb@iC2VVuLl@`1OrAl^?DznCm8l1}Z*_$iYClRMaa)57dOng#kYdNfxY o0RR8=Nx1<4000I_L_t&o02zs+jbpS!!vFvP07*qoM6N<$f@EBi_y7O^ literal 0 HcmV?d00001 diff --git a/images/knight-named/sprite-3-3.png b/images/knight-named/sprite-3-3.png new file mode 100644 index 0000000000000000000000000000000000000000..0aaa0202b0e31b9d1a1fa4fd24ba94c72fdde1db GIT binary patch literal 337 zcmV-X0j~auP)eVoG9~~c^UHM6QNuGLfGL@J7p-W}s0M2^{t-f$VZFi+W9Zon{O)5HnFImZ}2%;Y>p4GcjiBkEYah8WUkY z8Hfi#%tXOp+Ge|xMysnOi!2gNh-s#gXi5`XJ=Mg2APOTjHE|*=I4vUkPlLXiNS>{{ z7{~FyB!P~LptqbwNTGd^5Yy-+CRoA8k2m5}eu&2#lX9IDZi6*q4#qnIQ3>czr?~Pk^>gX2bt)S3Qc?g9{Bnk-+Ln0zUrSTF98qtWFf>NSEDIwp){JAa{ z$(Olv<{XoIiRAW4d?qd-ZkD^EK?11LuV3*&w>f7+gERzk`>g=Ifo^BF#z8mm?95h! zFVNuOc=!N>)p8>6GakyQSdd1odWit$WEpfr{ z5JWWCI-4(~RH>_El_nS@fFVRM7z&vFGRVC!`V}n>@=^%AB9;4uU>*?wnsen(jCJ>0 zo`H|wTsN8-(dECo6CdU*(jbk?CVPro|DR*`)gVR}Qf#6c*-To%dJSUoF$0eU?n5z) xxG2yV^zXO=00960gvZnC00006Nkl4S?62jmH)hu&JyGg6_4W`-MbsHODJ{gD$f|!Yh!M4qI zCyiEDTNWvTCd3Sr2%3__)=xC?ABg-&PfeT%1*b*i`;%aE5>pBFCoxz5%j`R z_~hCb@iC2VVuLl@`1OrAl^?DznCm8l1}Z*_$iYClRMaa)57dOng#kYdNfxY o0RR8=Nx1<4000I_L_t&o02zs+jbpS!!vFvP07*qoM6N<$f@EBi_y7O^ literal 0 HcmV?d00001 diff --git a/images/knight-named/sprite-3-7.png b/images/knight-named/sprite-3-7.png new file mode 100644 index 0000000000000000000000000000000000000000..0aaa0202b0e31b9d1a1fa4fd24ba94c72fdde1db GIT binary patch literal 337 zcmV-X0j~auP)eVoG9~~c^UHM6QNuGLfGL@J7p-W}s0M2^{t-f$VZFi+W9Zon{O)5HnFImZ}2%;Y>p4GcjiBkEYah8WUkY z8Hfi#%tXOp+Ge|xMysnOi!2gNh-s#gXi5`XJ=Mg2APOTjHE|*=I4vUkPlLXiNS>{{ z7{~FyB!P~LptqbwNTGd^5Yy-+CRoA8k2m5}eu&2#lX9IDZi6*q4#qnIQ3>czr?~Pk^>gX2b#5QgV&e>FF`xz#ODD=0KneuP3L5`}~xLn0zUrST^eG@=nT1*JrTQiA6sv)Mh) z@exnv%*^}l?9Of=k6+?Dar5zLKm7y5ROdhcVnbc~oE0+(apAZZ&<2q@(Z-mfV%M2z z3Ks}Y=hGLEY}PY@zv);e<&v}-)fi~NOyZ!VGev=RcO*7wm>4s)dqe7G8WUkW=tvX< zF%t!aX^Z7bDz&C5X(Vx)5YzPGH2K6@_nLSPM0TWROl*XNZ4tSDAM}lh!?l(aW!wK1 z7wCAWp@~A2RQ(_}+V`3eeEdZqe#gs6EC%wqtbkrDH0|;iQM4J2Y*X{lA>700000NkvXXu0mjfJ|~Yr literal 0 HcmV?d00001 diff --git a/images/knight-named/sprite-4-2.png b/images/knight-named/sprite-4-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c90d0457d220d4a664deecb6d85bfc9fb57a7df4 GIT binary patch literal 341 zcmV-b0jmCqP)H@>@Lc-8zV!$+<%&F@%Cc<(y z5*Gvk69t25yZu30oxYYVvWPSxrWr@1DNby4HL*DgY@7(}BPvo;6Un=i7a-^T0}Cta#9F-**dfoi3!r^D*LsnETN3j*Gs$VVaC`U?O6 n|NrZrtJDAh00v1!K~w_(=7Wok?R#!c00000NkvXXu0mjf?x~7} literal 0 HcmV?d00001 diff --git a/images/knight-named/sprite-4-3.png b/images/knight-named/sprite-4-3.png new file mode 100644 index 0000000000000000000000000000000000000000..40a0da82985d01e1e8ce90311c0af33cefa4897a GIT binary patch literal 312 zcmV-80muG{P)fO{oyD* zf21TGSvXBJQ%pmd*e4B~f%p$)qUr5d1;~MOxFT9?VxeLGY0&dyV%lY1qGsI@cZSH1 z5Sy;emuM(v5u0j*yO?0&!Hq)$21!IgR09AL7KPWcCTFAo0000< KMNUMnLSTZwtbgbL literal 0 HcmV?d00001 diff --git a/images/knight-named/sprite-4-7.png b/images/knight-named/sprite-4-7.png new file mode 100644 index 0000000000000000000000000000000000000000..541cfe88f7c7427762f213307722b2a1df162212 GIT binary patch literal 317 zcmV-D0mA-?P)ZPg{ZV#+7xqBjaH|0vfQ?KmzqfTfmvFBo2Khnn@(!%$5W*jfvncCK3ig#6&@1 z+Wv5qo;@-pjU=fi#5A)oCiaPdGZ6n_Oo-lgRe&{cj|NpqiyOaO`00v1!K~w_(a(RWogLl43Q9m z!nDnHCyiFuNLpDqLzvn0;SBlAs+$mpL*U?4;2f@sW4=0_<4^h<2gMo6XXub~B!%(h$5gQELKb40<)%6R07*qoM6N<$f-UHfGXMYp literal 0 HcmV?d00001 diff --git a/images/knight-named/sprite-5-1.png b/images/knight-named/sprite-5-1.png new file mode 100644 index 0000000000000000000000000000000000000000..3555836f97de7634824bca45c89ab6b91467438a GIT binary patch literal 345 zcmV-f0jB#5QgV&e>FF`xz#ODD=0KneuP3L5`}~xLn0zUrST^eG@=nT1*JrTQiA6sv)Mh) z@exnv%*^}l?9Of=k6+?Dar5zLKm7y5ROdhcVnbc~oE0+(apAZZ&<2q@(Z-mfV%M2z z3Ks}Y=hGLEY}PY@zv);e<&v}-)fi~NOyZ!VGev=RcO*7wm>4s)dqe7G8WUkW=tvX< zF%t!aX^Z7bDz&C5X(Vx)5YzPGH2K6@_nLSPM0TWROl*XNZ4tSDAM}lh!?l(aW!wK1 z7wCAWp@~A2RQ(_}+V`3eeEdZqe#gs6EC%wqtbkrDH0|;iQM4J2Y*X{lA>700000NkvXXu0mjfJ|~Yr literal 0 HcmV?d00001 diff --git a/images/knight-named/sprite-5-2.png b/images/knight-named/sprite-5-2.png new file mode 100644 index 0000000000000000000000000000000000000000..3df1cf6b0d689c88cb81c77d2af1b00d97d8f7b0 GIT binary patch literal 332 zcmV-S0ki&zP)nIQ3>czr?~Pk^>gX2b$MfOkMW&^E?B$1*y!d+~39j3x|QTb(TK}s_wN6e7>&AeynM2;QP*_#frC{8$`w&dW-OX0p9lG_4Iw;p*k zTkTz=Mwo^1N7slKcdm$CnAzDT`=3$P{!m8KhZU-s_e>N!P8K{^&gsazSW}L@u($a? n&~N|$w*<_S12Wh^o@8ctajy5S$MuhMfFcZ@u6{1-oD!MnIQ3>czr?~Pk^>gX2b#5QgV&e>FF`xz#ODD=0KneuP3L5`}~xLn0zUrST^eG@=nT1*JrTQiA6sv)Mh) z@exnv%*^}l?9Of=k6+?Dar5zLKm7y5ROdhcVnbc~oE0+(apAZZ&<2q@(Z-mfV%M2z z3Ks}Y=hGLEY}PY@zv);e<&v}-)fi~NOyZ!VGev=RcO*7wm>4s)dqe7G8WUkW=tvX< zF%t!aX^Z7bDz&C5X(Vx)5YzPGH2K6@_nLSPM0TWROl*XNZ4tSDAM}lh!?l(aW!wK1 z7wCAWp@~A2RQ(_}+V`3eeEdZqe#gs6EC%wqtbkrDH0|;iQM4J2Y*X{lA>700000NkvXXu0mjfJ|~Yr literal 0 HcmV?d00001 diff --git a/images/knight-named/sprite-6-2.png b/images/knight-named/sprite-6-2.png new file mode 100644 index 0000000000000000000000000000000000000000..056f45de730c70394efd50534b9e13976f25f96a GIT binary patch literal 332 zcmV-S0ki&zP)nIQ3>czr?~Pk^>gX2bLl43Q9m!nDnH zCyiFuNV>9dhA`9g;SBlAs(VBH2d4OnWS4(B{rogWJxOYK0{{U3|6!Mqf&c&j e21!IgR09A^tCzJmhGnz>0000A literal 0 HcmV?d00001 diff --git a/images/knight-named/sprite-6-3.png b/images/knight-named/sprite-6-3.png new file mode 100644 index 0000000000000000000000000000000000000000..cd085865d9396e10c750e9d838927735502612f9 GIT binary patch literal 333 zcmV-T0kZyyP))vaw;we z5+)i3+YZN*^af*XS)@ocA!e9Gswqos{Y(?@fyj^a)WjE|;A;_i{w$cQiR3e=ig8_( zBn@<21ij@HKDFUPe9-Vzx`|V7&9@i~!MzdG=!k0aPo!qZI~vs1{{a91|Nqabj4l8G f00v1!K~w_(R3e%y?$-Ln00000NkvXXu0mjf6#|ca literal 0 HcmV?d00001 diff --git a/images/knight-named/sprite-6-4.png b/images/knight-named/sprite-6-4.png new file mode 100644 index 0000000000000000000000000000000000000000..d037bf5688a76f982a5f26f4afc1e9b2ddc1e280 GIT binary patch literal 309 zcmV-50m}Y~P)rFk3B5euTj!O$-u#OeG=`OkMm51B+P1%)ltIlu<&SlboczT1}pw zulK$=_vXdQ100000NkvXX Hu0mjfgCKjS literal 0 HcmV?d00001 diff --git a/images/knight-named/stand.png b/images/knight-named/stand.png new file mode 100644 index 0000000000000000000000000000000000000000..0aaa0202b0e31b9d1a1fa4fd24ba94c72fdde1db GIT binary patch literal 337 zcmV-X0j~auP)eVoG9~~c^UHM6QNuGLfGL@J7p-W}s0M2^{t-f$VZFi+W9Zon{O)5HnFImZ}2%;Y>p4GcjiBkEYah8WUkY z8Hfi#%tXOp+Ge|xMysnOi!2gNh-s#gXi5`XJ=Mg2APOTjHE|*=I4vUkPlLXiNS>{{ z7{~FyB!P~LptqbwNTGd^5Yy-+CRoA8k2m5}eu&2#lX9IDZi6*q4#qX~VABpuwWaA7L= zOgE9hZo3fpnNMX_tw^U;_do-liAFY87U=dT62hE~o~b(+)7Ncmgz2a!E(kmm4TEi~ z^+sxqwze!%L`{eprV%xziLIY%;y)0Dk)E135eiO=$oHqgTumhR#-AAb;kU#<$3@T! zOA+$lJV}UYbQ2q_;l{Ub#G!a|ebHPuAv93&S;S%??_DK&pe95v41g0P^797u6954J m{~e7G&;S4c21!IgR09CjI-`x4H&QeJ00004S?62jmH)hu&JyGg6_4W`-MbsHODJ{gD$f|!Yh!M4qI zCyiEDTNWvTCd3Sr2%3__)=xC?ABg-&PfeT%1*b*i`;%aE5>pBFCoxz5%j`R z_~hCb@iC2VVuLl@`1OrAl^?DznCm8l1}Z*_$iYClRMaa)57dOng#kYdNfxY o0RR8=Nx1<4000I_L_t&o02zs+jbpS!!vFvP07*qoM6N<$f@EBi_y7O^ literal 0 HcmV?d00001 diff --git a/main.py b/main.py index a286a99..9809719 100644 --- a/main.py +++ b/main.py @@ -58,17 +58,34 @@ class Player: self.anim_counter = 0 self.ANIM_SPEED = 8 - self.stand = pygame.image.load(sprites["stand"]).convert_alpha() self.walk_left = pygame.image.load(sprites["walk_left"]).convert_alpha() self.walk_right = pygame.image.load(sprites["walk_right"]).convert_alpha() - self.jump_img = pygame.image.load(sprites["jump"]).convert_alpha() - + # support three-stage jump: + # - sprites["jump"] can be a list/tuple of 3 paths [start, mid, end] + # - or provide explicit keys "jump_start", "jump_mid", "jump_end" + # - otherwise fallback to a single jump image (same for all stages) + jump_entry = sprites.get("jump") + if isinstance(jump_entry, (list, tuple)) and len(jump_entry) == 3: + self.jump_start = pygame.image.load(jump_entry[0]).convert_alpha() + self.jump_mid = pygame.image.load(jump_entry[1]).convert_alpha() + self.jump_end = pygame.image.load(jump_entry[2]).convert_alpha() + elif all(k in sprites for k in ("jump_start", "jump_mid", "jump_end")): + self.jump_start = pygame.image.load(sprites["jump_start"]).convert_alpha() + self.jump_mid = pygame.image.load(sprites["jump_mid"]).convert_alpha() + self.jump_end = pygame.image.load(sprites["jump_end"]).convert_alpha() + else: + single_path = jump_entry if isinstance(jump_entry, str) else sprites.get("jump", sprites["stand"]) + single = pygame.image.load(single_path).convert_alpha() + self.jump_start = self.jump_mid = self.jump_end = single + self.stand = pygame.transform.scale(self.stand, (int(self.stand.get_width() * scale), int(self.stand.get_height() * scale))) self.walk_left = pygame.transform.scale(self.walk_left, (int(self.walk_left.get_width() * scale), int(self.walk_left.get_height() * scale))) self.walk_right = pygame.transform.scale(self.walk_right, (int(self.walk_right.get_width() * scale), int(self.walk_right.get_height() * scale))) - self.jump_img = pygame.transform.scale(self.jump_img, (int(self.jump_img.get_width() * scale), int(self.jump_img.get_height() * scale))) + self.jump_start = pygame.transform.scale(self.jump_start, (int(self.jump_start.get_width() * scale), int(self.jump_start.get_height() * scale))) + self.jump_mid = pygame.transform.scale(self.jump_mid, (int(self.jump_mid.get_width() * scale), int(self.jump_mid.get_height() * scale))) + self.jump_end = pygame.transform.scale(self.jump_end, (int(self.jump_end.get_width() * scale), int(self.jump_end.get_height() * scale))) self.surface = self.stand self.rect = self.surface.get_rect(midbottom=(self.x, self.y)) @@ -121,7 +138,18 @@ class Player: def update_animation(self): if self.jumping: - self.surface = self.jump_img + # choose jump stage by vertical velocity: + # - strong negative: start (ascending) + # - near zero: mid (apex) + # - positive: end (descending) + up_thresh = -self.jump_power * 0.4 + down_thresh = self.jump_power * 0.4 + if self.y_velocity < up_thresh: + self.surface = self.jump_start + elif self.y_velocity > down_thresh: + self.surface = self.jump_end + else: + self.surface = self.jump_mid elif self.moving: self.anim_counter += 1 frame = (self.anim_counter // self.ANIM_SPEED) % 2 @@ -160,10 +188,14 @@ goblin = Player( knight = Player( 500, GROUND_Y, { - "stand": "images/sprites/knight.png", - "walk_left": "images/sprites/knight.png", - "walk_right": "images/sprites/knight.png", - "jump": "images/sprites/knight.png" + "stand": "images/knight-named/stand.png", + "walk_left": "images/knight-named/walkleft.png", + "walk_right": "images/knight-named/walkright.png", + "jump": [ + "images/knight-named/roll1.png", + "images/knight-named/roll2.png", + "images/knight-named/roll3.png" + ] }, 3, {