From 153ca3341eb96e223befaf43c736a90d77e64014 Mon Sep 17 00:00:00 2001 From: MaikelChan Date: Sun, 25 Aug 2024 21:27:21 +0200 Subject: [PATCH 01/21] Detect Perfect Dark GBC Rom, emulating Transfer Pak functionality. --- port/include/romdata.h | 2 ++ port/src/main.c | 1 + port/src/romdata.c | 45 ++++++++++++++++++++++++++++++++++++++++++ src/game/pak.c | 8 ++++++++ src/include/bss.h | 3 +++ 5 files changed, 59 insertions(+) diff --git a/port/include/romdata.h b/port/include/romdata.h index d1d411f1e..d72c411ed 100644 --- a/port/include/romdata.h +++ b/port/include/romdata.h @@ -22,4 +22,6 @@ u8 *romdataSegGetData(const char *segName); u8 *romdataSegGetDataEnd(const char *segName); u32 romdataSegGetSize(const char *segName); +void gbcRomCheck(void); + #endif diff --git a/port/src/main.c b/port/src/main.c index e31e090a2..fb225e6f6 100644 --- a/port/src/main.c +++ b/port/src/main.c @@ -107,6 +107,7 @@ int main(int argc, const char **argv) inputInit(); audioInit(); romdataInit(); + gbcRomCheck(); gameInit(); diff --git a/port/src/romdata.c b/port/src/romdata.c index effc67e65..20fc55557 100644 --- a/port/src/romdata.c +++ b/port/src/romdata.c @@ -11,6 +11,9 @@ #include "system.h" #include "preprocess.h" #include "platform.h" +#ifndef PLATFORM_N64 +#include "bss.h" +#endif /** * asset files and ROM segments can be replaced by optional external files, @@ -51,6 +54,9 @@ #define ROMDATA_MAX_FILES 2048 +#define GBC_ROM_NAME "pd.gbc" +#define GBC_ROM_SIZE 4194304 + u8 *g_RomFile; u32 g_RomFileSize; @@ -386,6 +392,45 @@ s32 romdataInit(void) return 0; } +void gbcRomCheck(void) +{ + u32 gbcRomSize; + u8* gbcRomFile = fsFileLoad(GBC_ROM_NAME, &gbcRomSize); + + if (!gbcRomFile) { + return; + } + + if (gbcRomSize != GBC_ROM_SIZE) { + free(gbcRomFile); + return; + } + + // ROM title + + if (memcmp(gbcRomFile + 0x134, "PerfDark VPDE", 15) != 0) { + free(gbcRomFile); + return; + } + + // Licensee code + + if (memcmp(gbcRomFile + 0x144, "4Y", 2) != 0) { + free(gbcRomFile); + return; + } + + // Header and global checksums + + if (gbcRomFile[0x14D] != 0xA1 || gbcRomFile[0x14E] != 0xAD || gbcRomFile[0x14F] != 0x0F) { + free(gbcRomFile); + return; + } + + g_validGbcRomFound = true; + free(gbcRomFile); +} + s32 romdataFileGetSize(s32 fileNum) { if (fileNum < 1 || fileNum >= ROMDATA_MAX_FILES) { diff --git a/src/game/pak.c b/src/game/pak.c index c58b59de3..09c2fef7d 100644 --- a/src/game/pak.c +++ b/src/game/pak.c @@ -329,6 +329,10 @@ u8 g_PaksPlugged = 0; bool var80075d14 = true; #endif +#ifndef PLATFORM_N64 +bool g_validGbcRomFound = false; +#endif + u32 pakGetBlockSize(s8 device) { return device == SAVEDEVICE_GAMEPAK ? 0x10 : 0x20; @@ -5982,6 +5986,7 @@ s32 pak0f11e750(s8 device) bool gbpakIsAnyPerfectDark(void) { +#ifdef PLATFORM_N64 s8 i; for (i = 0; i < MAX_PLAYERS; i++) { @@ -5991,6 +5996,9 @@ bool gbpakIsAnyPerfectDark(void) } return false; +#else + return g_validGbcRomFound; +#endif } /** diff --git a/src/include/bss.h b/src/include/bss.h index e07a9d931..a322a9a50 100644 --- a/src/include/bss.h +++ b/src/include/bss.h @@ -293,5 +293,8 @@ extern struct bossfile g_BossFile; extern struct chrdata *g_MpBotChrPtrs[MAX_BOTS]; extern s32 g_JpnMaxCacheItems; extern s32 var8009d370jf; +#ifndef PLATFORM_N64 +extern bool g_validGbcRomFound; +#endif #endif From 8865130c3594228c7ab61d1f5d9c51fe708f5122 Mon Sep 17 00:00:00 2001 From: MaikelChan Date: Sun, 25 Aug 2024 21:42:54 +0200 Subject: [PATCH 02/21] Added some instructions to README. --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 045a7824a..71a0242d6 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ There are minor graphics- and gameplay-related issues, and possibly occasional c * experimental high framerate support (up to 240 FPS): * set `Game.TickRateDivisor` to `0` in `pd.ini` to activate; * in practice the game will have issues running faster than ~165 FPS, so use VSync or `Video.FramerateLimit` to cap it. +* emulate the Transfer Pak functionality the game has on the Nintendo 64 to unlock some cheats automatically. Currently only 32-bit platforms are supported, namely x86 Windows and Linux. Note that 32-bit binaries will still work on 64-bit versions of those platforms, @@ -58,6 +59,8 @@ If you want to use a PAL or JPN ROM instead, put them into the `data` directory * PAL: ROM name `pd.pal-final.z64`, EXE name `pd.pal.exe`. * JPN: ROM name `pd.jpn-final.z64`, EXE name `pd.jpn.exe`. +Optionally, you can also put your Perfect Dark for GameBoy Color ROM named `pd.gbc` in the `data` directory if you want to emulate having the Nintendo 64's Transfer Pak and unlock some cheats automatically. + Additional information can be found in the [wiki](https://github.com/fgsfdsfgs/perfect_dark/wiki). A GPU supporting OpenGL 3.0 or above is required to run the port. From 28bdccd3228c0af83bfe385c53d8e080d9b19d11 Mon Sep 17 00:00:00 2001 From: Florian Piesche Date: Fri, 30 Aug 2024 01:29:08 +0100 Subject: [PATCH 03/21] Add Flatpak build --- .github/workflows/c-cpp.yml | 20 ++++ .../io.github.fgsfdsfgs.perfect_dark.desktop | 9 ++ ...github.fgsfdsfgs.perfect_dark.metainfo.xml | 45 +++++++++ .../io.github.fgsfdsfgs.perfect_dark.png | Bin 0 -> 34728 bytes .../linux/io.github.fgsfdsfgs.perfect_dark.py | 15 +++ .../io.github.fgsfdsfgs.perfect_dark.yaml | 93 ++++++++++++++++++ 6 files changed, 182 insertions(+) create mode 100755 dist/linux/io.github.fgsfdsfgs.perfect_dark.desktop create mode 100644 dist/linux/io.github.fgsfdsfgs.perfect_dark.metainfo.xml create mode 100644 dist/linux/io.github.fgsfdsfgs.perfect_dark.png create mode 100644 dist/linux/io.github.fgsfdsfgs.perfect_dark.py create mode 100644 dist/linux/io.github.fgsfdsfgs.perfect_dark.yaml diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 3515c9d3b..ed71837a4 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -101,3 +101,23 @@ jobs: git tag --force ci-dev-build port git push --force origin ci-dev-build gh release upload --clobber ci-dev-build ci-release/* + + build-flatpak-bundle: + name: "Build flatpak bundle" + runs-on: ubuntu-latest + container: + image: bilelmoussaoui/flatpak-github-actions:gnome-44 + options: --privileged + steps: + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 + with: + name: pd-i686-linux + path: bin/ + - uses: flatpak/flatpak-github-actions/flatpak-builder@v6 + with: + build-bundle: true + bundle: io.github.fgsfdsfgs.perfect_dark.flatpak + manifest-path: dist/linux/io.github.fgsfdsfgs.perfect_dark.yml + cache-key: flatpak-builder-${{ github.sha }} + upload-artifact: true diff --git a/dist/linux/io.github.fgsfdsfgs.perfect_dark.desktop b/dist/linux/io.github.fgsfdsfgs.perfect_dark.desktop new file mode 100755 index 000000000..663933b7e --- /dev/null +++ b/dist/linux/io.github.fgsfdsfgs.perfect_dark.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Perfect Dark +Comment=Modern source port of Perfect Dark +Exec=pd +Icon=io.github.fgsfdsfgs.perfect_dark +Terminal=false +Type=Application +Categories=Game;ActionGame; +StartupNotify=false diff --git a/dist/linux/io.github.fgsfdsfgs.perfect_dark.metainfo.xml b/dist/linux/io.github.fgsfdsfgs.perfect_dark.metainfo.xml new file mode 100644 index 000000000..10a2f92ee --- /dev/null +++ b/dist/linux/io.github.fgsfdsfgs.perfect_dark.metainfo.xml @@ -0,0 +1,45 @@ + + + io.github.fgsfdsfgs.perfect_dark + Perfect Dark + + Perfect Dark Contributors + https://github.com/fgsfdsfgs/perfect_dark/graphs/contributors + + io.github.fgsfdsfgs.perfect_dark.desktop + Modern cross-platform port of Perfect Dark + CC0-1.0 + MIT + https://github.com/fgsfdsfgs/perfect_dark/ + +

This is a port of Ryan Dywer's decompilation of classic N64 shooter Perfect Dark to modern systems.

+
+ + + Game + ActionGame + Shooter + + + n64 + scifi + cyberpunk + retro + sourceport + port + + + + + + moderate + mild + + https://github.com/fgsfdsfgs/perfect_dark/ +
diff --git a/dist/linux/io.github.fgsfdsfgs.perfect_dark.png b/dist/linux/io.github.fgsfdsfgs.perfect_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..24f45c18d8e5344c1786241c9b114c9cb385a14f GIT binary patch literal 34728 zcmXtfRajh2)9uXQ?iSn$PLSYk!65_-?k>S~1`F=N-66P3a3{D0cMlL;2bjbAo#)>- zy{~rnuC88Ht7>(Gnu;6->N`{b0D$pHURnbH0KUBf0mz7NgZ{TN%eMjERq~T2^4sHw zY#t5(Pys$kOK5r-o_3;i(0_5~=(M!#j#{&dm1XRVK(}ar;qu|eD z_a#~5-uge~7zsXo=%70w$t4-j<2Vq(3zmIR${HS^%iyQ_!0Yx=WPQ~iI(eP`^A1{N zbN{>rd;M|$iZPbT5w<^;N?y!ODWn;O?x!FGn+Z4|aE(fj`= zKtAvM+WlGyODQ?F>bPgzwwXSu(RE$J$+?Ue*1$7HQRD~dyUkoLc3y-|J@P_M*Y7SA zia~aNDygZD5dZfJwetFYm)@ldwhfy%8@U*H4t`kgZ+hw%RD%`h1KGF1ZJB^Y{f6V< zOum=31|nUtH-m8XKOVxy8*H1N7CSwq15S7QyHma*&W+Ad--<}!wgZd*!5y8PbQT)c z_?vx#Pf+9n) zY0dL@)9*5hqoWaB_RT^J>>bW825%M`5zwiIAKtV93y=3)F1;X8e7Jg*e@={hMfmYG z2Vi{rcVQ|2>Qt-Zc8c_)qZjn^+;hssTpxX^{$OKYP!HHb?ij&%x!z)WZZ3E~&Ffsu`MCHH_BVws)oqyS1h@TNs)5Jy3Tx)0 z9H7VLRl)ik%8dRoF3e{|%0w*m^(ra>;E867m$xRPc6I8aZi-LU^Bj=Z-Tj(9k;$Q_ z{jb14^5bs(7+(j?SV`BvET}*yR^yPRR^ZH#!ie>cxQLp)!@F(=&=$^qiB7re@EMbw zx_E#>@h0cT#pj*0A2R_WB$>m(9cE|2^FXB2mr;WwwHYdy%Ydtz_flR1Zn zr~)1cyf7Wc;ud^Ne(KUsO*#16+!qq7tx_&}<5M-mQfVN=5&Wa3gTIqGSI2WFePQV5 zFT)(aPJ`Iut|b+{BF*MXl*eS{pfJyr;_j19BNYd4vdt;LcS~R6c3qTyznNV{Xl{!$ z7|_P@4(%v10iq!XaA69y`g)o!ztz(yivaB0umbxZ7n8nPzkRAAXUC%>gtljpsQXA@ zZcYlEZLvHtZj&>#sz834`!{gel7`%$XIZTI(cv(cJ;~Ym;anf|NkbrrOvHt$2|(4C z_H)<*YnK-i`032X!VAkE@LDZvcI8y_>mLYpJ*74zbgK_-(P+t*x9g;{TLAl=a6*9b zPms+J)`K;v82Tg5b`uHJw%8p|jT127GwM^~8!vM~Gw#6??9D|su(hID(l z@j%yxVn`*Y&TvzvQNA|YmvOvcoU&(!#!9H4W>swj9*S#V^(FPSN1WWEw5bf@NtzU0rVxam zsTlCG9$V&xLKOb6(r>oln#dj)@)%Xe8fnL2H&3VXg{!zYenP73D2nQ!5 z*1=yEV3G?}bMmw=fefxkerl)Ctec}`Q>@lKB3tBG0k(Biq z0~2HXASosUU=}u#U`M8hQ#L|!r}A<~5%1CP$JU^ylRVk4GZv`^H)|iXhj3#t-WGmp z1RUu?08GuY7+V>wa|9pTyB|%{iaB+*SFc_MM9QOmhBz=%o5vTgp-(f||F`O+H6&wf z$p9buC`fkDk^ukQUIZCpsip2UsUpqAe4qDW_U$C=nCO;BmSxy}i3!`ddBxJ$7#Rh< zp!c21-bY&X8S?!=Wyp^#tiZ7qdV+Xd{vt~-+@)C- zH^bvouSmnYCTRl+0=OK=Kzoxt9}4$C*uJ0Z)Lijc298}Hqv%46@{qU?OFj^155}`; z1>Ogw-!DT`q_;++uBXIc(&vX=pe;wUtLw%!{3qj~Y-G0SoB%tb$1A2vc4A`sJp|)& ztgY}sWx%stlZLG}&cv++T6^WCxH^1~#17eM?p>`fjYEYRVc>Q5x5s^=EWZH~eaU0z zUWBPm)-lWOA9NRzjVRekQ+r}SjUFKNnGCZJc->LN-y~f)&e0w=SQ5B$ra{@W3y+(N zmawYX#sI+;MGjOVE%}Y+@-9NW3Z>SHwOGDqC}^X9Y<8X_q9+NSl&@neg-5yTADO-J zPD6iLKeO#Mi@kKXv6B-l8w=Bqr)mkrD+oDkrUgtKXuvxUY;AlwO_C_KG^G4}T_Jcl zSIarx1fU>MF=qfKI1NMGQE`x60VTsq}n(i2+OE}YPyhjxhJNNP@yZYaZt zG#kQFEa;&(7Ui#-S&SBP7t7R(&p=V2pvak6I^6}=VIIp!@S_AXAZ5=4WUhoWlBq*3}vckK1Bxt}%1)iqG0At<8fr z-mIf7^Tm1BB|aiUBrQCJ(ZyXt4CxejlXp?SL$;@My8`%)1+LV>Fv_UH7w0*8;2L?~r*AA5?D6Q?BDT7(gt@x-mkLLdl% zI0b-6+*Up}F$Y>__`vQYcdQpC&?QZ{;rVuFQc}#6!&)m>N4PV}e*ar!_ViAfICaLX z9`GqybP_;%uW3@*#?aA#mH&BI5>Gq`=y78Eb*LP_sBZ-$-Ez9?xoxT&!#P>4-A``Yz1aM_hl|uzWA;cC^%&UJh980`9NIKI(sYwe_t z%N07018i}B+KKIVx~K!tan2ltmLqnTe6_m7xpcR6LcWwiFGA_*%Ujjtxk8oxeT$ZvX6XB+0RndoNq-rB7y^nm%1m8Drb3~0!EtlW81&wY_AKmM!40T~fK<_U!gww$uF$ezcF<+maRS&Z8D5ky4ny8d=r`dC~*J%mXfnBAOyR8V;Y0#em6gfw?N zcwinS^gkj)W`Bbli$oe2Y-`6l(ih&nVNFlY%$+Bi*SQg_2X6W0E%iMWu&A15q)gN% z_gu4K%=OxF-5$Wpg=5jK4o-I?L7&oktaGwC97d+vgh%c&$^$N$Jl>u-F(n?yEn}VvuQl5$@cH!xugfA}7d z8Ue6OO&H2>T>>ZtWORL16dGz`kSw8 z{uIwHfu-JBd3yVCtTdy6$cEHcyOjPAg8@j3%OQG#!E70}bqF>Mg2#1YN+uQ=3e}Bp zU%+)#b}+P5SZVtgLNw#WMs9M+MY1A?2<+dm`>x^Jj_!v$_CbyWus6Xwub#g=pnzs3EA=@;bKF3i(la4pV4a8|XVyUDG`nT6> z^fPsb3v{0FOvWI{gSyx8nwY!=V@3DD%MEERQk~t{R@s5Xe={KD8z1Jp#Bnx!H*Bhs$bYHu_omu$CUU-BbYtn_~XUxv9@wT zO{P5f^xL5d0Y2D8T3m_+6?UuIDg3j#1D%EksZ6)WMv5mdA()4N=XB8{vl;4Q&BcSl z|9xwucLd9kq{90s*R}!wuoD*CCIB1!ABk(Mpl8MGTb;gX$?s~u4dxH|Y0TI&BkuOt zT=H$KH4$pJiml5YWsid(li!o%3;RV4Vrmk$VT>d+rxOZ;nRF_n@4Sj1>4)Wb%nn>^ zq6Rj@1tB-yqF67?!JDT!fFb~QSRs%Qve@n-Ej#~!;|l3GBtcYc6q~U$@n2qIGloy- z&O(k~rt7n0Wd`^t-K?UyBMa21e*OC>j)e16Y!9t1dSgFJ$PgizQf9XlexA9u(;JoR zkRg$%odJE~y~PYkfQvk_Fpv>{uPn=WEI>1&4Yi-^%|U_aZP%IN1N~eE-WcaZVb~&GcDx(1osTaAuq5-*cW5|r zZXUezA1nSlqPSa*`tOFGG~R@l-HGso3?z0oZ7hn)R5InNGf0i=zhRw+EJDWvd|;E| zkNjf!L&y_x;2J&*ct(i@XF4Kdl8W9P|FmKmNKT(e61pN?yMsL#9P-`ngEV{x22No} z2X!R67sNja5X{YtkJ>FfwgoowIsP8!wEPW4#nPw`q*ir>%{hfqE*|7Bq2Z)~=ay0s zrxovcPKQoD%FdLdw79RZ(w3!Y)uU1*q-G1Ga!=tS_qhG0W6>F4k1IVjm9ruHmh4h@ ze1Ca|p(brY3r7PEM<}>Iq>Y&(%AaQYV1)lUdJ%xB`giz7i|%6sSz%|i6nZpB-*p_`+%K`kKXSm`Os_$;X@F7S&26q2t;QI4-i^TfdVD)Zokc9H`=#(%@RpRQ{a0vx*>J1!33)R0 z4a)oL{+Gmp$qereY002_;^hc{d?~>P#bgc#-|1zDC6Bljysax$;u;TH__T`%5BW`u zq=MV0Qf1)oVGL5A#W?*Kki6gqOKU$b*=I>~Ehw0qMDq+UHhC|E^%~adeNFGQ(e7?{ ze6mvt^h1Kk0+`|Tt@Qs1oY%x(bj#n-%#7CPu*GAnU0Qiq_hH(&Q~vR6@ditm$EeT( zz8KJz`as`y(|^{tCTC4JHT(KuU}cg<9KU3DVL0>68WwGZsv30BiW33^Lz4i~7*X=g%h78v#NfDr$f1aBMDOF0MY4)QCMvpO-H<;a5FF z*0doWIL3;DVCe8WXIPhRhH2#lkPy!E-m`1&p`WG3?~?o1`1jcNI;<{q;<8{mA0fJL zlR}5h#UDR~JJ#jZZsxGi{OpviP)pod!{H)>M1Zwgzn>%FfGF?-GXapMNeMTxSyWvIJx(U@h{IhJ z=G5zk;(Ci7Q0s~-Tauy1OW7)q>-jW3zt@uE`?s9ql+Vm(Cl5EOXO?%)eP!h~i{%yN z^b6sf%2P{g1uc&{{Qd2SOf;_>ngTmOLt?h$H;&;bB?VHfITjT2aQ~Q?zAYRcY7>Dv z(uua5KGbTIs!6N~A8F~$AAFG>CU-y8H?0{Zh{VMqI%W(rgPT&CyV+<^6@6S^HmD@X9>H6IYMFCYGR*$hU@AP@N_@Ag>pWgV#D_s0!?hU4Kf!#+GC@r21$Ajp}0(N19@vEUGHaRi#o6dUi1nk~xyW z=tJ*imwZd)Fz^GTO8KOxuwa9hfj$rXx2dZyE`Rb8DQw2}nw0@pr-R5;H%Rhs;x_!H z9&JlJ$b1z;nw&pp%HKVEt+HG5U18xqutLuoR74+z4zpZ_J~`}PY9jJ35`G4RTIVJ4 zyNS!?tGQtZI!cuzh(E2+fNYeI;=BwFe&X_}y3thG&~U2jGA+e7KIY|j>oT%LouHo_ z3Lts+U8{Seof%hs6FU;{X~2=6(@i^plfP~XqU2c9$;^a4B_cDSTG$N!2(QY~7kn7s z?G1cz2#>@rrU^j{-9`PoKKK?B@n;BEKCMO{py4m1b+mig=<(4QZ&J$dHLFYEBW^Gj zprC35yWW5KQP>w_w!rDH=AST{XvT-upNS{%&k~>eLPK44d|qR zYRVwJr>`Y(mXH&iLdvA+a#j19WpYo=X(ZZ?Vn7AZA0Kz}UzU1a$UtT0koX$wjEu4V z1^LJHY`S$O%34icA^L%`bR!!j+g^B$g)Jzvkb_3dkP5Y z7KZL6Ih`@k3ayBL4c~V>g}X1~sAZCdFTih`hzc(5N{0TE8btt%5~3xqn3a5R=tRV) z1yTzJseB1XY_-XY!?NR1qY{gNbR?wFz+YPlkw+;qEckF(@lVb#N3_;R2Lw>KzappSJJ}KoR?9ULm>B*~-c!CCfA45>h2=j(cqV$F z`1RvbvSZ$fVJ+A2I68fjGYB9Ek8yVyyVxDVz&nm9=p~BKkh(Y5(>D&kubp*?{G(k(&HkVYiUf~XP(fO0nA;uGLU4dC@BB> zW9o%kA&T_aS~rP${&`=zRvYm0v@z@%`i9og>AnFxBMv+w7%QhRmG}BtUu*;m6D=t+l>|SiCsYe|5gLae@20oV?l&K z4oTQ2h6vO|PaK5gp>H)t4K#q~AD8X9xJ3`6t{0*mKp~bl=cQRv-%ZnM?PdtIrBfcYcu=@!N(N7r{yRR0!ij7g6cD{ z1~T)il(w!Y>Q*dJsF`B|h;h#K++v!iF6Gs!?MKVy)Q{w2JDuT!UVm`IRdu4ZAmKlO z;(XwmgH)R1!<^-{6LAB=IDa{dsjHJS@*X5Oq?kh&23p&JjNu`<=qXR7Wt>UxhWCvr zugz5wrD9lhEmjApBT>H_ZK*6ey2mPN-exMHpiGvJZCv+O8w+yD^!=DUu-55gR#Enx_aunH!s z2V|^S6_AQ1w`3{)0|~J_tb~J1M|jF4!IOI(QjG)1Ks6hBLEDHu(XrFUK2c?nJ;1Xb zp?pGg!xyIw=IW#*U{mX0ic}&*odcT2jr=Kg0vtXnp8> z4!tli$9W14&HBN585Z3EF9#Fn*Uu5_)kvEud0huxmO_`QMfmCXk2g5upHl_1 zhy`E6`304=837St93HO%*QN^TBu8_I(f?j3=1UM`ZG3a3?HR6EbXR|=0XvMb7`oVcuJV0^^VXElgd1wGD;go}NCb z(Dg8%^C3dSs&2fKKQqr1nz<8K6yKPde*qo7T>Gc^ z-<8-^KNg4X7wfCZ8D~Q>5UHi%f?|t4dT6Y5>ySyki2ZrX-Z|fwzXwD_02<-sgdq z_x0@>O|Mkcqj^AHGdcxz=VxZhOI#F#k#5{$xFhvgn_d&V-FNMFH3q)XPDjLf(^%3u z-Qu<<=#g|B)p&akvCy2X|H=WPfO-cT(1p_wfnyF|n=sXG%>P1EpJo912GGEoYb5 zU(6}=X8SJ59%cMcJlYiB2>urCm%-$1N*0i1`X_cnRq3F8iA*F`bY|>2auUYGTB4bZ zU95z0<WiM$8axP5aevZL+_tsysL9cCm<$C)4BNby4xu2KB|xWw^&b zR2-BQh_&HPE+xraQ07)cww!s@WZxpz09V-dudPvx@-x=jXLJc~8~84M5X{auK0KFs z&ZgvH8U+VvBqYO;2}mPZ#h``0lIu;7T>TgZ@mEaTRzkYmrx>r0uo#Sg(JKD1XadJZ zYcfUp!>?#h9}}JLGWg5Q7dG$?cn;mf~!Nh0VZiaWg(( z|5lfsZ9sjB6;qsiCsUFHMnyFiR&N|-LY5UcG#FwL5nKsb$5XyDpY7h6b1Qag67_yj zGF20>&}i9)ccrLhuKr8tMDe-Dh~u56xE9y-hR;> zXPSNM(kaXPril3D+-Si!O38Nya5{=?+~5tAKyH|!=tFleLP{~hxbqu3M-h;)9Ntoi z&6S3Q0YZSCBW`S@rv}{F-lfggFc@=0aBmyBhibF+Y&=f3#Rhb7UQYJaXDo$nj3~a& z3~?2H+G5}K($F;|F5+S6+X;DyRL95EFY4IVaO4e=2LaOW^)5LfuJ@|584S;W8vOmWSs>41p(`f5YF}>9E)(VZb7M3?k7PkX z?*s}ajCWJ*TcmpoAifi=?X2eZYS3BqhGb6`p_Qa(`1pf(10Uip^fe~HwQCwq)NGRw z8a85*(9;Ibk`sWbsZI4*6;39rCXI}bj|PvUX2yfK+PgdTYeGO?q({o^{T4t1n>1w+ zO>YBy`NUGq4^C+D(ZojR;Q=0rriUmADy{_qJoFapldhs{9yZE(-rM4)xw*YxH%sm3 zV?2-B!c@es{O}ggr$#@T4J_}abgyJYa;(>@GCawG z5_T1@GU)w4_QLv9jFlpGhOoulxsp!3jxQPTSOa7z=kg&MWH)sS8}B6W~|zr&rG7v$Oz^713!-((Z4Z>=CUSdKwQ`JG(tlzquMa z-k78bcp1rE1qUOsEc|Bi6t3M>MDn2Yig5jR_HbKWfK1kG1d)7AG8v2zGs_^%77i$N z=xuS9f5$#4E4LvJ4+OvGN$$?-{kkhQ{tXr#_TrjTiX|t^HdZfI85jNh`lsq^u5rb| zuRp7FIwoiqR2&}L@Q*xcqD4vm;}_x=JyxHF3$UX;($(f{nlnd6D(MxVn5jCev*GSf zW=p>SW%@Ebz**0QA}`rPurp^WafefN>q!h345IBVG?t`fBByS!kWWBg;5w3M7Tu`9 zWZQ7$=phjh%im5V*upMHh64jPf&X& z5B#UUAFt~yLh}4&6?}2#1e+qQ?s{4t{J>9W?8MwRG|qyYDcqQh$Lrt6eHRn*B0tyf zNc8h-K6b%e-A{ZC4pwRnIr#uTb#x4bE2DIEAE0rK3hV<%BV~_I0M2*fL^Hj+i$QC^ z+}26EWmo`m)ry*?d!TFeaTavgo#l^%_f{a%is9cD@ZxJ6T{8S;Z+D?i-Qc7I-SbtG zRd4-n4hd}np9gL9;rTSWI5Ely&U!(iiRXtqDSNX(6D+<}&=TJ$O?&5;);zvv!e*lbtOd?j2hq!%1 zf;fR^vRtdxU6NNlMQg9|Cb!2QrQl??21>KNPJSj=WK?L^e1Bt;v4#_!j_WASeG#R7 zf333QvIFLM)Pae9NO7v#brV3{j|#@0hW{jEnN*qJk)WP)A)ka%|IWYr*bzKzNfu2Y z4d?)C{e8Kw-t2hP#xl^8!xXwxHE#sBkp#A?8vT0*emqgS4tddJ_&~-~kSNrh(q)*U zFDpT9o*44 zvz|&fsw_mYROg>h@BHVfVX}I`Zd3l}CrYq_$8fl7v%FWq=WQ;jS{=m|T1PPi?#+s@Qx6Jvb(*?Ppvl9@~QhGlH{2b8yc6 zcRFF6a6%q__f3li_l?eAIbbuM+PTv!DKa_Yb;-;Xn#D4q`lmWQ>p+zG)z6P%H(KU{ z48H&dv;cUA;p<2oxZ5&j#I@D9z4Ke7{GIFbBkePl#J!KqBFT0hYb|hMYb{h+mqFYc zyPYt+bCCo}3B&1Nkj4`^ zf^w11n*l87UJF+ks6+}F*>R)#ccE1ESPq5V7F?3R*A%$&1 z`6c!SFNfJ!|JK^ou4;_BUrDTlVbPnx=mFeD!I*15xqG!!#uzJh=gqQ$^R@$!p;4yA z_nH^)Y~2JxVrJ-e-|B7x$c7Gva{S$RBJ*5cTmtt>W4-;K0drMMpl=*Rjk7ml9}WC( z?XJ_sJ~Zl8P1i*#1N>|gK&9T??GUECB}y80iQ*sh>piIO)GMD~m$HgoL=|J%@c_FF zXWy2_l_6c`m|B{QRPTRssDy=?f26x;H^4f3S`Ym*LGo76oz)k-CjfZK2_tSUx1cf) z=fcHThLgugI}-pW(;O1v&yBB?n0)+o;}A>q8Q;n7RDj@><3qhsz9E1AYI5AjIxyq9 zON!V$1yE{wD7K>p0r@dHU=^7)T~EAdY`c$nMOc(bgNz@J2_wmUWopF0R_`}6Qi4GMW2?WXDW9hk(NZyObnb5ttzWEMpTZoPFy}+X@9Nm^w^DH z(dvN4owt=bs0>O%I1H6PJI-$ZB0ajj(3Bn=CtO63kUv9Iwj0yKJ-C~Rk)}DUETov7WpV*U})=>3czPx*Al?>OD7GBlnUM!*;cH#FEc`d7%h2hHiss`tR}tSiY^Y* zr+jF)FSs_isg8xH884(!dHHxWDn0N~X`;wt{BTOCf93Fl=ka>Q8Ame4obo;$hWO&^M?HcI6tUTnX6Y%jMH~U%k3Y9{6y_~_j<#q94^+% z<(@o;p;s4J1oEPqW zss)fqeDu--LlOJk_lJ6WjfDNq`_J`8_9zCPluxuLFed}v0jiCO!nQnb?kVo=<$eCB zky4fihm?3;D5gwXdI`J({zKKLyXV*|t&%JuyM_0e^d6_zpZmv%w)f1OZWbk}BF|Sj zrUhu!Uq~AKR?=Ke!w7hIe}m6}NEy;7K$K{l7E7X(xL3pHwDx=uit5x6;z?xau?@c7 z+6=xANm$c&K(st8F@ZUYDJ^Kv+!KeoG{YCwHreB7ncpH@(ipcJ1+*QRvk+vlt*f<$ zuI!u)C+^*51^gg>17Y(^^KgyrH}0Gj;#Qq&6}64dN<)RmT~5~@p=x+J?T_WpVbv4% zrq(vGNk+vWn7;3QpHG}Xj92xWpYrwZ zH>9%T(RD<#Muu|jtP~(?Z>fJvW%m98TpDTb;%vS02 zW5ocfU&xBUeI2)o=x%ltJ&c~Cb8jAv&+uXla8d27SRXHeHO{j*t;QfiuCxW+TAfV& z=oBSg(v_+fG)p8EZZSMC+>p`eHl+t&CmY1ZT-HQQPPZ+%FME#+kU-rOC{sQSs^lHb zR(W`NpbH)-G?|Vf#*_ptI{k85y(iRrJ~Z&!I5_@uW29BFV3nVrx9IX-tu?OZFT<7D zei9Bz4F{2$Dk-{5w7Lco_0}tZkDaH&TE(x#OVnV8U*bG_ZkXzGzIGaxytAMd3j24m zLBRcQe|0?qeZnv6a&+HN#$)c24mlEg0y7nuM`LJTXpJb>#RQE!1b23niE_0vtNh8y zgj+^(ON@X`_87`$WmhrylQ>X=G{0s>LmD>bSz>n?uBeGnwR+hjX8~~2P7}sAWyn>b zFFb@f&d82e*5XEJ>x1SJLMut9OY>BgRWT&m=&9R+@rPeWH%8 z@_YE&aHA$%Ze$Qa(u%qQJ#Gf$^21rerK>O!hpP{6EH(lE2vzWCZOPWWtk>( z4e3A1SId!kkjv#hQForYogX0}=W{EYbuY7Z>u!F~Z3Vr8X=O!1eD4?$veH0`LskYY zWEwxoCvSy5p&#b1`&&SJ%_jxwQ$!R;}4+ zKl{3Bi&l={cXGCo-+6wWKJ2ttMKcvwGotcyTHz09y0rCjH$yrK8_4NB&96gHW~M3) zaiGIB5Q%-*>=P`FO#pD^3Zd;I4zQ!N#vIfuy7g#}>J}e&> zPL_)gSoidfm~95P9aCSM;splRX#LT2e7C{ZVZ8lC-}xA!d)}JwwM<#PN22fweI$=4 z7X|$|74=YJ!G*NwV9rJ}ElH7l4Q9H@{A@di;8+843Fl^bW$$81-l z^2+ixzoNbS4cHXl)h~Fxh0g$eN-fnj<^AHusQSp&MkO5pO$6<6v21wf3KBK~bv)sr zds-tkGxxrIkSGoun_qhAH2s@kQXCx}a~ArvOv+vKWEY`mDAHP?#7WbQfBX_|f$#|9G-yo+vj6Znb+t z(t?dLFPUzXoF$O}{DuWx{OGlSHv#zZ!|}n5)rVYzgU*lVBsW_u71Sr*h@GFQ{~6CB z{XV?P59*Pm=mX;h@_(w3_xtI|{FN|-Q+mvVaFO>*oA6DZg@f@)wD==4vy1oJc23(j z8LPs?W1o?+UWJks_Sb`b5xX0vX}X@CDyHm8CO8<`y=AGor;LAgflBl$B$;aVtc0R) z#I4Vhxa9GvLeLf{zQXUM7m$VL?wpykto2G8A@`l+z1>JM9uE&fT&DU)Wf(uTn!;O+W?_KB5ZZ$h@HiTYKb!R>VrB0y%aQJwDH*gJEIbrT~S9BNz9hxQfrOyh@ z7w;tEbrif(H9wwBp;;bJ6M&qZy@=mUFldgSe93a%)Ya8}{O#|1$F}rT?Y+;tSSr@=tyiF#a+>x&dZw(jsoHalT7 zdRzq94Urb)L!tN_ZtQ<4%0#N*7Xeq~8Ydt34N_B+asU(wOx4`l`UiuICJe7g1vrb9 zi|;Gk6Mm1AH%xJ6pCJ zjjO&Y9KI#LpEUU85kuruhUcuc%;M-b2o-sN%?58~NS!m>E{V;c-IfrGIhy~OQVjT@ zU1eUk?w2h`IT0?}7lfW0t*|^1awwm-<<;2#Rho(jC*E<7_B)fBm)weKV|lau1wmlg>@nZh-SYW^ zoJ`wW_3+`x=`-nTvSfiL*WLzF`Q~?g6G#!8;It(`L`?Fhc_F-Ttj?4v9nQN&e|!$+ zYdTqY&FmXi@it0CrcQv8l2YH&0K7N7y{n+J6X~kh-SBQL)xUm>mUZXnF(l`B4Y=EqM&HZR9ryXN`FZDG|4NOjJgFIamn6}l<3oOlS*&V03b2Ca?S7ut z*!&6<^b4s8Liz*U#PyB^WTQg1)6}r2gNYcjWm)kk} zBHe8|Z>ZO3vutj5)%`RNdnZ~iL6-z_Ss+l;brEc(c;#eHZT!)ZB2?wMQZk*<_nL(X z!j=Y%=GHN$_R&k?mAmXg#6(m;xP4%)b$LHRWcF_zSZzdFrp#s=G&52gLO=d%lA}M~ zV>+*H3WOQ>b&E8EPgRNZB0p|;?b^8Rx^B8nW>-;jsC>>YXXF%KhnvtWL06=|>lmk!SU*%X0&eq_QbnVIo~-}a?DQE{fObjF*bkg>;b$T^NopznEk1VjW| zi^*9>9g4ujsKfG{oB!(v@0Xo|-$$hp8fZQCRlr|RXq~WU>wv?%Gs^Xr={}!*JHyBE zwx>1i>pi428%<-FG$mKy85+xYd=`Jjz(i8F@tw{HuXk7s{Tu}o9nY%nHmt`muM@v4f>^-}w>QHd8uzn}4xr(;eR;nU z6A!-SPqiWyGz>FhsjiL-cCulga!@-6_Ka}B~!z^$9EL+Ar?eZ*V z5eOU2{5Er~iYbPgB()mt#TEa&px}Nz-IXtg<&qrRdbPsBVcnczq{56cS@L23jQUIj zBQLTBGuput^S;e8249F|8( z^%CSjo{UgEt(5>NbtKpnLDI^oExmL(EyS|nQD{zT?)>Xfl3%!;Q^y@UmT+B&Jo``s zxE{;$?{lp8!MC+x5BdWJ=|vuDhsp4TBUaY73G?{afjFDvXLEgf0elpB>VfG7Se+4?E=z0g*_DTJ0FsZ z0gZ#c?q)P5zt-d^Otp)fw!0x@jDFf;VN_EMI|%K4O#HpI65qb%mUaL9+8Q&47$x23 zM*#4l@9+ZaX<8Y|srZFI-9WcpIL{zXZC0%6Oa_c9*sbNggs`??Xr`%#Lg6t5+w4rd%| zXCS6~Ae%m+q6Qy}kH;VJ2^!;+zDt~xs-`3*`hizW2npR;S$qpK&3w>Dx=-v2&Xg!R zb_}(iWMY#E*HY3yi2XDwbcaUU&SVdYXN+~4lgpzUinRAasZ4Xu_NKiVOuZtQCM;4n zY#wXFeV7$EwpmNJcMI=jw`AqcJ9;W?Cojo}pFSSQ8r$BeTl2<0`;fPn%I+kJ8Nsq{ zos3u?&%2=iy5P)^0$9fCTfQ*g!SzvSY{JbQm#HI`8sL4EgJCXqhU~$9itZ7;Qu4{mvH2j&TX1&*by?5i1qAq|z0Bhe_mAob2tcJX$ zexa7N*P+;hvqNRItZ=fgn&`gne!rO^tVYT5mUG1}Mz(A$jj@Aqg8`Q+-k1LW0mVQ% zzcC|eiJesdP@moplOyba+oCbL@F#oYnDmHq7&%`bhQ9nef`zfXIb_)E^#aL6HqvGI53{T*ffr7 zvmL8B>ntubJl-Swu`0tqdGF8ms^Mw`J4{47p@XNfLXx9Y;TRz*zCn`ctL<0y{`6AQ z7!?rVb+(%rX%Gjx5bo#BMcPjVkV0d2n4YG@LowXfJbCb=Ns?SYxM%RY3vF^K-tyMB zoY81BzEQ1KPv_FmvhpxGy9_33_&PuwS>Vg*{c+KW$EO2zS<0s4KE6V3UqJ{$*-06x z2xu9{=qck7gOIKu8m5f-oI-RJX4=oC9hO5Ki*+rH0vsD$bN4lU+3xJE0Dv8YD?->0 z4hF^?jLxX>qj^Xr8E;RfNQCG7k=MaxQHofREC!TVqQQ=!^K=q|PTNg7y}k;7k{a_& zGsx8AsOM6z#9~1E<-Z^z;kI~`fbTzpbb2o|Ym?L#R!_)egwHH<%YM0kPyd34SQT%+ z>&@@T((GN;q#8d2;!s>1>>XW3O)!9_l&7*oNrT0$Ld@QrQ%D~Gl{c1Ep|7BAo%=+z z{K>2v9EdyebOqRzdl|Gc3&nJi0*gw|2HZ?h^O& z==Bju{1$$#=3oM?6b&M>m7{T<;iX`2AM?e{fhY)h%)289NIME*a0r2*T{%O=^++O@Dps4Z^4>-Kkf?|(bK zH<86M^#Hquae6hT)_1Tf>9t0a0VxA?Ifl#2|liLG&nUOl-*Q#>W(w=0I_OFhn-Z zs;@(DHVVzONg+S|aXT1a-}_&dSC)TdvE;w~?%PlFP5(!b!4`Wf7+_7zB``Qqfkuk- z)UdxudW04bM_xHk-=WQ~WY^H2ohwHN-1o=Jd}^XNleSQ<934nm(>~keGRL(=T!!4V z7}rBRncIrhk4uNB{}P~U1mNoHuD&pZ^otJMI(}LWzs8%u=yU=j(-rC-qfRC3{k4EY zCqTZ$gBgZ;DkP9f?XZp*`WoXqe=2Fk#y-XNcSX(c4Gj(-NJlCuzVk zn1n{!;;-tYLVoZy2kzF9{Ud+B*vEM9yz|bd&(-F>;1YL%?JGbMj?X&SJA(Hq9etDy zz1f(rw)?kjeX2h#E2_;%pbqKcep%A#%Q-TevZd|Z_rc;|n_2UfITkcp7vE2=uH@Ww z-cTP_Am|24jnWGMPAvJ?AN}ivna}<)frQEL98?kq!_x^2P3ri$cH|kG(W0NXBDgO= zc+~;(9@uWk*4~S{f2h;w#nk}iL`4DM&6v0-6tqVu#`{-R=b++i&}=m!ZKW&#-0Am2 z2kyPY`-i_khb;ncyyK16&bDUX?-F;uB|l#Az&OC*B#t()*Jmi{^FlzY=DO_hrKZ9N z4X<+(0TahL5y7Jt1c5qsY3Npk(-JXXZrVQAPFBp2E^B?*bxp5?k6xdn8@?aDhJw#i zew11Owrtr_`QE+X`#|E7yK#CP8XkImEZlvg2~43cqk>nei)nGgpG`2RfQ2zZYmNC8 zK`ucqNvQZj5(I7Pus!ayC>pKgU92d09ZJV14n}DN0e7ve%s`SM`BP}A_s6h5^WUv3 zue{>G!v{ukmtFvF{e@d!<1_zpaL^OTFC(Zs4x}(O2aq@(l;r!fH{MAIBH{~GndAr? z^5acuEpt6fr=ScOGR)ASke!Q)%hi^V-QHfFwt0Z}5RYep7EuZH!nqA>*W_JW!eDFH(@zU;hR&Tk!64(KYmcN)oNjEagXbBclAHq zzbNwGb=O_1W?D1&NiY16Dv_W60P0N-dxl#uIm^#4#7{2CebD{NJ;aR4R%xygRH022 zz&^haN5u}qAOvzew;GJnhj1Pfn1~58BIV63MJo_wNJ4b8olb$BihQ*o#<_D#ACF}rVQ{2?Q;KKC z_rm1xP7+B>yM5O#IB@Xb%tbGH(Z9wUDj!NM02WmlFD76K6VbIIgX8E(D%{8^HN9Pv zZJNRwj(|65I%@!Wy_k<2tg)$B5o~%ruX;XQ$G@O*MzUfauES@1KUDiKh81mw>WW6yLa0i&QBb#$ECA zZj?;CIV~!QO`m{91)P9WQ;)xv5j%p=R}e;mOti$I0%xjF$2pI0j|sP+<*rUZ?1{c0 zmBQ@!KA5K0r^PzMFC@*(&b|8Y|NaaA6wXsZbd3N+aAi=P#PTk3CWLx{*nvE36uEUo z@U-of&1m=dfsVmIG-)JiOw_(lO+B2y0CSccvaAWsnPF(njpdAv;9=*o<;z|&uygU` zzwOT3Hf600zs_?Uol5Ql^ZDq&Gz?GRn}UEQ`*egpGc!-lWiTy52pq(V_TbfQ#mX`f z827YC0<@KqQG1|}H6sE6N4Aa5Y$7sxqH^HJ(5%lC>j9@m|KiZTq3wmtlnz}c09?6| zczIjt6ut+d=Lp_G1Zb0<+3t_qq9ZUyHs3NCOZdldLXIuyNr1I|dzb(}#XUFr82AjQ z+VS)23J30Yd!OF>zJdD&X5tACkF8s`R=4ln{^2xD-{2~aU)U-4HCJ!J1G~nd(c*71 zwDHT7T3*nKnKxx-a?HsJgjX^Xcpo0)l9>e61(Ljf?4ylWUUdU6d;Cv3-nqdyI zv#~qzOhz6>7qNA!J?@l#u+(`w9Y~ zoks{c2QM1~ns+%I)P77S=*<*`07KqZ9ctryNd)pGLpaB6 zoq)DHctZ`)F5?AJJU`fV_;> zL7;juooV$=duxh@$uyg+y^bbwR^y)(( zvPoILNEAq&JE1+foh68=Iv;0`Ky+G{T8w=X2BFvmDhRwif%?oaj2+xoyhr>((l3q< zjDD=RqwMG^0U+9i8VVF8Sfy_F;!1oLi%$FTyxc}LX$!~cm4XFnek2En-<}t%5Luv= z2G36_C)Z+NTfaFo)RFu>Nzc_o{X;*>9k2l0cE@ecZ?qa;cZoZtLf-;l;lXDsw(lE- z#}14^g&Ni(Nb^D2v?y4b>9U+CckcxO2-hn110XnU;fQdEZnpuJp6*b`*xMUD_#o70 z$8vY-oO>7?{Kn|O=-)1?2ugyk5&%=r;sc@x5Qn5tc{%(HK|2jsRFj9cGw z>wjuxt@l)t$|-SjkAqe-g9r8v!NIW^sOa#u9ep_*Z1EiuHeq2otj?3>Py!*yXTwrh zP}s!P!W-MFNX|Ak_z=|R#&dP%z};Wztz0?0dwBmLZ@0wg8Uervn_l5mXaYoVFs*eP z9BJ4fJXU90*iMi%T<1b~vL;>D1fn+F^~}PMGh8*J`7WX-5a=~D57N0;pV$Lg+R#)1 z&bd#Va>6OMKk&cNC3WP9Q?=w!)H85oo z(lJ7j%mXc*ytoyQvgPr230(sM(iOvY>W`}wNvW# z#c(JBFqUkN4^|W6%lV=Oy`bKPp3oRJdgA&N)Ta;7Fq4G?HvEvB3w$26K7&^|Ae9@5|p|ccRn+faK@CHEsKA zC0MHKc(qoc3IR_{u`dKw-f^|_M;q7U?Fd{Wt#ODo1549^;s z!>)H|)h3}f+23YONPd^N8%GC5zcL2-cIe@7=bd++TA!$|9>R{khxd$z zF9dOpq9EnPpq+x&>*pwvTQSGYo5<{-#X{M%;c!AB^^w;C0#~D2gCL~iI-eQuhiM#f zF`c_OxyOV5z3~I%?{CXam!i}HK(BJ9is4^2##nJ&XZGtWCJL~cA^mF9bwuu7y}vbr zy!S6g0&ECkl;L=RZWbd7%~ZXXT35K798j>q+T?y{);fOk5GR!UGLnC>c6R$6w{Mus z=Kdy0lIMnO&y;YmS6 z@uY#ohX9p%q2R+dJY@otL)&3y@<48Kj{`SQtyVWJ<|8S$-+udv!(;o-|NLjay6Ad) zqEKo9;0S@``)G@_o&=K_dZ*Cl5GOTB^344exlkw!+`TW*k-fovsg?O5$GQ8lR z^de%A^g~gF<}xe@@nZS&DchI)-23T zALvAW>;U+u>T%T@hPMr)GAtPQj{cFEkvDqhKkU4#hWz0)-qgc=JBDFuuEn28FM4|{ z9-DVO$cFxbYx(v7Z4UeBBq6`NkJlsl6}a6VXt!I$^99T+7z`sV`D083fHsDopvP|{ z4DY=ceA+B__I+e^&+2#Y*|TTC?XDYMd&AFXY4-6}ZLZII|Eb(D^Z`}M>_uO+&z9;Z7c>Ue4Uo$*4{Qo=WUL3!W#M5O*CTej1&JnsA&h!h! zqkFN9082=--9`zA5e2R*&aBoOT_*gKTQJ~*Vv)rqge`t6GVMF(M>vNEihyRu_QBNX z9-d)oh0D1=9UU0GYoXssxbBYYR=5fGD#+lYKJmS2vr))>`A~8Jz*ksfb>T18xA}UD zwT56-QnmCGy*o7wq&Eo_p|d{DtGT+ip9)Hd*@&IQW08r^S01nXJS8kB!n7aFk-v);06i+nXD* z;*cZ0h=U}hA6*U}-#YksaQn3dft|$y)m(Ri%>XtT^*(f2+k(;s6gq7kOpWY<$)Ws{ zeBfZrIrr8pHeT_`g_8f)TW?)CF*flD0Jxq$?U<(YYIlq-%8XJAKzM(>c_WMZBWmee zBa@Jtpq40ZJvR&}O>?plH8xCdM58@2h}Vh+Dli@+x36fwaxFB7>G54qn;8;8i*U|u zb3N{+(LJM!p4_wLmMz!Lv}XP^Ns`m(4N6!H*e8+zJh*ENMkeZp{GpI6JFTzpyj}UL z$>H5FJ-R1f4-Up1xL1x1 zjQ#UM1$fJrEvqJK6F3v_TAf(ctkrVYE-Okc037=3#~G0CvC?TNRJtW7)o|FEn;U?8 z!mjA*?Qq|G%K_HztkEGl*{i0Z=hrjp?8ApiIGVAibq`dkl`Dt$3=b^USZ;dVO;@E^ z`gfJ2vO@b!u&nT29@;$#Ba;ofUZL~?N!xDD3aj3jAwQjGo=70>%X|BLMAE6CxBBqw{2W!bJTnKb=8l!T)~Ua;OjE+2Xl5a~(*(TvjjKDgLfWw+gS+p_Vw@!xEvtzS%BvLeH`0?GAeYAx6^ zREL=wKgNssC<*{Ww`$moutYQ4X|eM<9VP6?Usl%vp4j`E!TSam{3!L!x7>Vrnx&s}6}OhkMNBcR<+PG9287dyDmK%Bn`8?5REhIm|GNacE zz&H0aYli%7`1P>^i=S1tWy_Y{;pyRzIdHF`EXv0~@nN3XMh4sW*F`i<8}zUufUx%< zgq3YtG+|wC--h=2efpw~7`?F=bSS4bXkACNZ)pcr8`Yz#KDYld0-7G{hvB_HDSG{e z^X?FGadgJSF{2ytSzA^XaB*|d2Hb*ZKwGnGsQECCekU91PplKPy3FKx5 zvxnxep6Vggzw9UO3)?XP9Uq$kxZHUdP&*BSQWz)$bW`3$aZ<_5_q} zbMHNpM@V13<>fD$NoU^Yz+ES^9;i1PJDrAS00t-U)jZ}cIRQ3*h2>DRy4~zIoqbje z+JwP)`24A7IiYB89m2QZw_NDw)B2t?i ztBKR{GCRQb?Q%ZCJS3uP$9*oT!1VYYn3>pHIEK7of3;G5$zmp!D6YNX+6%H)_5}y- z=}LYCmeb(0gRvRwZHwfZC-0p|Z|_Bx>1f;YZ-t>C5_D-26;_tqeie#vR|UQnN-W3a zHsD#TIBRNBeEd==4D9$G)ThVtA-{9`z`;952Sz{HcFK9M<(4haYkjtb96J}@lU7QUTmVv;4vbS*@e4p|GE(VO?{-=8NTW;`NVcFV} z*&gcCnyg*cd@!;sh4H}$=}EG@U=TUKQ*o8I90~cay5Xvu(k%TG4?cd47s>Av7_TKT zS;Lol=oRP7t8AyA!=xdY^g?o~2hrnPL}0fo$wdTcwICQ4h0@AUEd^1*Psdd%FgrC2{g3<`q^*V}f0nr99cP_#*3T`*^WXTo z8{eBj_9^fEX*QpD>1GRH=Yb3+X5(Np3V?o?g~`9DiJVV3N*w{)Rd(D3m&0Iq5E z?r2F^4QgC=S&h!Nl4YCWEuA-PCd(w_2>8mv3{J-KQXes-Mcv$^WMK| z{J{9Pw{G1kXImIv`tp}Pt1;F1mUHged^OF4hv`NiOf;4;2Li{7_;#$)c!ey#3k<>-9P#Vqx(lY zoTweIeamZ4YRon6@|pktNC3$?_)1vJvvm)9hVYZ?*wt%Ck8l8h!c_v#WGydBEdV?U zz=cP>so0zfwQYcf&i@FBzNn8wV90;f^;bPR%hIo94xSx^N@z0OMDj1E4$KfvD=V!C z@R+7SXL2(->P9wgMNhRC`l=_unw2L| zC*aiV*kpZn`s{uC_ASii7@T{-1?RS!>36~V<(RLvPg@PWy*-rKvBnx``br1#cNq5T z$k-x-54CRg6_bTBV)9XtrbR;ir_#wPeK%MmvBd2B%!ML6=p8PNK!Vn5lQ6XJ0hk%b z$9Qvu+tt_C_tL@LgO4rrDzARytIwKi&3zU;oTKE|U%ZE*2@m+jfBZZ>TMriunGbe6 z;?`UQurvyA#Lyu?G%W8i&{7l$pVt7|OEnUOK(~c+Xf&Wn2{9Uo`?V=RH5_t~t9;q2 zB7#PE{OS|^nJ+wddZF{lE$;u}5AR#E=CpS?mwgc1K7;+NA$a~}$DIHtJo`Bs*n~WB z&NP2TwiegpaSTT?>rJTwI?Vy$oyN#`mLqR?5fNkEQY&cjFOah>wEP&jDJO~T$s z{)Il&VabnuE`7`Te*eI(1Ng+%f^gI8Z+c_1+58K9e**O{4)m;86`~RKSd32jTHv-05dd8}+!_)jRs=4Ec0YQ1 zOeaN6G{MLr)Qdy~d{j8&Vu1HK-2V`a4L(W}u1vOu!NL3Ae#hHCyioGL=}m81Jw7-7 zcL1>2d*5TpkJGBhW&!q(;czqyFo*i4&r@z*-#1~3g`7Z|mRkYJ-9ymE13k$%Jn#^V9o$|d|42{L^Rn@Q@egg?x^+RU6Y_u7gTETdk2k4z zisT=kbuciBcOlIIi3mt&r5w4~VwvYfxcum<2q2J-7CL)#hEP)2OKU`GK1297M|3%R zIISH9=3d*A6#coZha!zbezENJjJT!!j4aCe?P;qH13Ui>TFqMVfu0{!p?c>~|Iob) ztpI$4daO3~djN25I7YI9KYK?VOwIB86d0Hn&1?QwJ3QM*UCNKH5&*+M0vVGSSy)j5 zE4hORsAi}b2&^!u>k7i4eFJ(Cn*}xq-qSXwbxbfiy7xWn)}20_W!XCc;3T>T&U!mI zKwkB@Q=SEt-o6gk?nE%fLifco2qIQNZKV6JILRpcvDl$ad@1wdqL zJQS;U+gZ%Yi|!Htgc6!;1OL%K-DL=Fym`*s^NDgDbxQu&d1oVlVv~a_UQyt|F@v;g zKd^S~Gr#P8_BAU4v%?3VJ~;*_z2JPP^z>P!D&SCrN6fchEI$0sclTOucA`%~3}iZX zku)kC49SN}U}|hHj16w1O0Xfe1NWITPC4V&h0dM3xm%#E4xK5fnoZ437{GGz<+qFcdUAi10u>LPZHd4MT-M2xAp? z!IkCMV+M9-XL_c)j=rk8tE;NJj?8C#*LyFss(X57duFn>^S9emdAxj?`QG>azVChS zNc*+Mn!kSLv!3|_*>fRq8gF&2`j^()*J}WelsYmrnyJ@)1EEL8W4 zU4-tK1_w0_l0l|ya*pY00*Ij%{q&AFYjjF!RUnxRByC2q>8RuxdIc!B&bIrT>Fxb} z1ul!Lj5BA>^iQ5V`J?svdXgl#GLWSJ04_Y*y6`v&_A*{8B5|jMZiD#WKM=D1?gk=(Deb4Le zdBG?ieGHpRnir|5C~vJ*;$WY6LUcF%Cuklx1bv$HYLo`wNmibIGR1riFjXD^!Yiz7 z2XYq599w(!8N5p$N~$XQxYcL)^XvhnEWUaiJIV7^0)8ZPZEf+5QDnZy80hG2(Mll+ z)E{|(ho)W>D7icR;VH3hWFgaVo|&r*t{W;>DSIv_UueA2^LTgPpx1)+#>1ri2+6_U zWBm4bpP9raf7=;${^{h&lQ=K}kD0q)clWoC5?21y6B}A51ZvGd`ITxy4}i2=t$NTE zsK>)H5kleS!}MTk2mtk*b)ALC8v=FJMO?(DE^^9SarF`= zwEG=du(Ep#CHs0_JcqOell&(9(t}R0j8_{>0`PnQ^I!hnhJu3C&))~VrcRdG$$?nLBS2=(X#xxpqbfL)d=O??r$laAW1h)7IKw z3ao^{LVpNwex*bnfQM%kCIq$i;uoai0^$_}?8qKLI_me z=3(eImub-q5^DDsc>lYA^?(!a_@-g~Q2DZ#qy6;1Rs~zBRIcOmiixuxBU8!UfEUQ)#8)7yC7iLJkVnGq>^V$2?4OUv8t&8 zGgyhm&Cdv*HU~oJG2sAGXU&%o=0Qy1?mEFNA-pP3o#z0nt6$nQX6Dt#m|p-e!SZ8< zNC5vro#$3AemF$k-0ZKAg|?IFwZmfpDNq^sb~C0^H(M{`g2GjdhtO@EgJFL|ly85q zv9STe!H{Q@(z0?ftZYQE-YqF7Y1J~Q&ZR`84wdZa=}Ez}O#oCKT!2xOpVHwj?_<{@ z{*_AkR|1Xd7v?5NmuN^2ag68UkI5l-&VQ!Fi#ZUR(D0#>=^ zXtmDb=fvNA{P?Y_Nn-!ptxjnzbe3xn4+e1a^IpV)o+3_ue+N+xdV6xhkSN%K(*beJ zxRm7_k*27?pqGfwI7z_rqnp9*XS~Ib+UV&j;;)O!x$@u$$ z7!4F6Qxd>R7oBzDky>w&-`P)w@^Ybb21v$;Os)U?dQOpVdfF9fB2WP(Ih7rD+c*T_n-w4v^wq~M+f`!JrfP7O;mM1iu3x8EAnb#O&{PzZpfvxpbXgvCV(C@Ux z`m)0ED{|R5Vw3mvW#->MJVxaq3PHb`PIDFOh!Orxr~Fq2X!VDq1gdKl7>s!SKKXjY zLG1OpUpkI~%Jd&LA^b61o=)~Po*{(BUM1QM_7?d)*&E0^riK7m1p^a5!P<+OvQP#( z%bF>gPA8n!%eKGLou^Z(@qSwc+(VUxL8Qa7kQ=P6E&g+1 z7q&YaG$@7%QxsQ}Ruw!X1Aap;8@(nhm++Vp0cUHVyN+MuJ>`|=iU3#XjiA0@k+ZAF z`!LU#3J*YaF^#kfz>4d%IZ$l8io{V2KWS``r&>ILV*qvG0?#4!Ad*iiFTPh^v9dDX zXtk=Z0*HP!jF_O%H@^5FtUmDwjUt@n31k(T30FukC<{k~R91LCf+QZm=GtSh-DzA= z<;TTA=B|4d9KQaxK=IWb6U$G~pfOQ^_X1Lc5LkF}`Ni7HcGz4X40-?qn=I z+bz{=2ByX2^sDFCtMGY+UPb=VYAw98Qh{&6?-aU{iy~+*EkgAR{{wNKKcCHS$u7OV zKhr>_8Q{vB%K`Jk?!9LHbF^TmD^S&=eS?KkWe$$s_eN1S4^E(UBPit4(7T_8}s zfJ^|8+V?TH^Q9|M-G7V;a10<8>(A-v7&Cyh|M6w>{b{i2Y63{VJVPp1b(8c{rOPWL zTOwztoomLtz~W8d11SX;?Uwt6c}xDR{f-+j6Yu)vA1f=1kC#dnTyBiMq(R-IIA~}z zgvP1=B@)2kpuV6`9+iuKPuX^5fwSyN&|NHh@Y#9wX2|p$M>}~wr^<_8SIe4z(L%0VxF6c9kI7mDyFlybGV!zxTOTO&Nb`%_6MzrCAVm2c2XG94 z>RY{cr^Di^W`xx1v?{UKa=OrOr^!LYJ-CT;^W+#tyLHAGSAvuVxBnzS zbaxylEgVS~$0Pc-U2E|%SUPn-B*}<}#G=@QU4b|()}r!%3PuB*k-SIk4i)zjwvXQU zT$q`Adf*WTccfc;Bf&HfHUvUt*B$`v@7I2P?eh=1|FYZE9q6yK(nP?|f~XOg2IRgM zAZWw`g=dq)89Pe+e_SuKi^563Y)ovmU7y^S?!JaRvrIQe3T%4M3y%R^uB+y!XW z9|D`;<$F~AONNE=%u!N)6IEErsSdodhnomjmkya88uzFHVWdTj&*2^$-=&)$6V z&9CWp;qQ|qew7BblI|wdPCo!QJ?9P>4VR&}QM+=APq1+0_*cQ~k(;?kg1|lZyoD*o z27idR$JZ+jhy-{`LT!HqZuxyao^b~zAmkd&fenoh3g;O)msC}@u#ym5)LQypMR6;* zhBm{B(5N-Twbh)bfE!9L>21lC*4|B{_>a#1y!9LM+b@9bRV4)6JKr2z(5_CWB6@=TGM^Nvn?WY17 zjdTBa%Pr4Ai}_ms@ND-^Ndz!B1W>`DzWXx)Dk{&y^|yRI4M)~ty-wxHsuMNKBTU#% z4ap7_7q`8FbCb}MfZs=i>Byq+{haa8UA;e^*QTei)f6Dt^t7_F{LWgfP76FBs}8rC zuvvd-tXNSfRQddNa1f#7pgK;+c!#Q1kGu115mbCwbXX83ZEG7D8DIaNYG^dh{A0O1 zgWn=}F!gRo0{ufkzfTGlW)58s*WY{xbu+Si9tP&p!8%e(jl8RJ)BQ!MrS^DF(z?BH z=r4}|q<|i|{L;ne0(>~+SDFB^pA|^yzz>5LQpQ$`y|*taHhHbT?#k zx2-Or2vg`OOtSPOG=Vh%TY_}JnvvOKU0K0H_*=aYcOJ;bHu!P%A zfV>cS!4m-s6<*S#*UQI60ChhtB?kue`q|$vm&-3S2F|5k8cCo(2e8YS2%KMV^oElV zMYFu@7PX`KPnYs`iWMpx4cQIrP22G4W4?~Lu1KSa5R@=jnVGOQHydMc)mxf%H|W%%v-A)xHW@0h zx^O#L3T+Z7n`_N;dfa765Rnn9&&Rpq*{X25gNthQ@y`RyzI2QPu*U_1gJUFs!M+>d zx|_ZpqG%>iR8`gadjA)!%AP|^6#*b{(n`JF{BvvJyN!VsmuUpUtrm0|pQjaQCePwR5m2{Lgh7v~ zaL92-1Wteg%MlzSL6d94&V_@BM&pa~QDj~MVE%CI{V_N=!twj8B$Y!qz}$7Wv6Xkq zzLU}iuD|oTlz4+{q+Yl#eLas`e7u$(#4EcJy=MhEAG}Gpo!${S(AP^~G(r!6{|XP_ z3ZY(aeFDJX5Y_wi7C0HDv-AZR_Ew#X$Pru}-Q~M`#+v|HatJIT8XL)?G4kmFxtG@>bWf00KR< zx4h-`zW@L~YK&R&rD7oN_h5T{0Y<}Z>2Jrf%hrka&bV$c=E8)a9van+dSziAa@;Gm z)(<{~xAg!(-M)0dP8FWVX*k87SZC=jK~io_r-U#``6Zp!qiDYT zViuy{s^=Mfch_Zra|1Z|$AQ4232+sFu$OV)~EM2l*pL~Sm9ac!{z|jdWr;C6vX1|b!r^& ztLF)fVzm4m3>*&gJxFZoJ%A9^YV$+JM6U-hxGW8i&5rvpSUt@o;1pM_1S@o?+*;dY zJ*4KH1))Pq23``vv<1?r*Ux_D*s-~n0+@f$Gc;Ky9zcKf6vW*I73n1Fo;oI0T#v~` zqR3vc={zYhk~HVb)yVs_Lup*~2G*VxnXi`wso$L;ccpGXi~;x{V9^A)s;E|*A3SuZ z@*DtoKyQpBFkE>U;;l7NTdXc*=5%|Lg+|=^(2XQ;6{~QCX`Q=RU?R?(In%%Gw&(v4 z&L)f^=u#q_b{&;qw7CFrZ%GCL`TE$M5PTCsJ+!g(PSJxp77}oEDCY=l{^gv!M)sG| z1%G2;Zw6xk==yV0pzr{$I?kP2UNYwJD?<`M#O?EtAPEG5Hm=BlqKgozHPPDlDRz~H z0s$U;@WJ8QTK9*Nr1X8EhlcTixU&eO^~b3fXWW%fD?6PJlv=mN+^0xARCELrwYck) zhdiKo1e`v7ECoHM2&O(j0hqB+ObmRyz}~RB+WwCyg4f_kZVmj=G}_S?#2ZgQfEcxaz0V)DN6u|`T6ho5b&{UnpB zDCejLN$WHugZ3ENX300)ch;X9{cfM@O$k8iPwJMN`&@&e;-{2fPpH!{E&}Ql%B|(z zQ-r590Vt}~=IKETET*g;2xL)>{GgE8Ss+kC(0W+Hmw#I|68-7!DE zzCJfs{$6X%Pg$EJT#ifxwzCM(S&%jNWRj4KR@(0YfFHLOMp%~AoI)k;ZvbpA2ob9y`}34$(qA}oP;`{CRDE?y zo~hrA)%W@>N}kbmw;N`YmxA3R4io_>3Djz>*BWEq9hQ;lu7K&(d2KMQP~4cL@MFh- zx_kzMz9Rr6fdYHS@^a_T0HW^%fYW#tkpMN-IuLE12N>bPqq^E>p!m8S9&@B1v4yep zQmqrnAx#wYB>WN+H9LI}?=x*Ua0H;JR-11(Ci*o1kn!pUOur3Lr%EH$SO^3CCsCOE zAD&?X@E*W$SP;OaVtIMvV>2_eFS8cDr@&^ zFwq0hKwgkZsMmUU(y!ioif~{F09UlB)tc`BD8C{k0qA!iTAv5N5nQ3A$2NUJV?D?I za6EgK0I)f5>eLiTLQb%-uv(j$!B3W(52YRnKi$?|05ia~AbIs&r-LbrzC*JBk7vAu zRQ+ZNB2;iy?0^We)}Ho5qL>mKSOQSg>#GlzO6J>*fq!uat%az40SvjFYW2Ng$&x>U z2>_b`=mqdx@B){I#l^L1qp@*M6q#QOms-afFx>`3y(M0AP&Hp`WYT`9*lO`5o%82H z0>QhGE_=do*GXO+qfjq{(=pV0m>wK>0zfP-wjMrw_!$@%@WDYMfdw$VHIc8dJutqF zF24o}F_0-Q{AXh+WgCy^6FK;9LI;m4)e8C%OR~2IKi4 zfQ#VFnP&U;+wXW8K=kAIeNs(c>bIb@wF=k{CFU=1)qo^Wt2O_#RI*6Uo8gU3Jb+TS zCSMN9glwGZjt2=-NOC|bb+=s*aV^FY+O|?;HhoEgnlT&Ve#=eJ5Js(vVv-p(rZhB9}C21!0l_%#>xEdV#Bs zM;~437&CV_K=hl&KrjizK&8J1pEoA@bO9GdxFOT7PX+nLE&ik+pdNFn$pgS9 z0B+>J9Z(R!lLSsH#;+9{Q^J*oYL!Z{5>Otnw6wGgaQIGZ?Z>T6Y}h0yZ7qQr_9g`Y z0|Y*{MzXgC!X`IQ8ap=F-iXYzXO7`weGvD zHNTi7$%wu=NZ%L$fc_>xcX^^UABz*Xu>#}Y7f7X@vNA0QV4s1b)V}3g?tDuWjo#nw zc8l`O3D(xSzhg}K1=ia0PGQle^2-qI^3wR_z6V&_Ql24yYgDdg@r0` zps=yAeQsu^@{IuSN8B8cuD~RQxP1WK#CKf4n1sqYBgE02BmJ;NW3prQ5jc zu2;X!TKEHP4v^X=3BQ?_0wjYjM)USw zPC6`j3Q!P0fdT-qwFM76^O^8n0PxSD<+kwvh8v3zZ>{f<1hh+VI#3WmfdYavXP|%6 zP4GHn;JpCQ3kznn*?_nw(~5UQ82XCI8(43ipR{_BN>0}m08#N|@pod_}9DsrV z3KX~)Ha4L3w5P#c0Ps`cs?Y!lj5ezDN6mq0)Ba*fumT14hLsiQY;D1Nj3E*TmVL62 z^f$>H*y|jEJfUa;6ew^B==I=_%Vl^8K>96XYBP0Td{3nLrZg_25m$ zz;A_F^!tNLnmTYTQ4m0Z0#6dX9{h3?!P||224*!H#V{OB$MWz60Td{(59oH`UB7+-$DP Date: Fri, 30 Aug 2024 01:42:50 +0100 Subject: [PATCH 04/21] Add comments for missing features in launcher script --- .../linux/io.github.fgsfdsfgs.perfect_dark.py | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/dist/linux/io.github.fgsfdsfgs.perfect_dark.py b/dist/linux/io.github.fgsfdsfgs.perfect_dark.py index 47c752fee..ea4b9815d 100644 --- a/dist/linux/io.github.fgsfdsfgs.perfect_dark.py +++ b/dist/linux/io.github.fgsfdsfgs.perfect_dark.py @@ -2,14 +2,36 @@ import argparse import subprocess -parser = argparse.ArgumentParser() +xdg_data_home = os.environ["XDG_XATA_HOME"] +# Create data/saves/mods directories if needed for directory in ["data", "saves", "mods"]: - abs_dir = os.path.join(os.environ["XDG_DATA_HOME"], directory + abs_dir = os.path.join(xdg_data_home, directory) if not os.path.isdir(abs_dir): os.makedirs(abs_dir) -xdg_data_home = os.environ["XDG_XATA_HOME"] -default_args = ["--basedir", f"{xdg_data_home}/data", "--savedir", f"{xdg_data_home}/saves"] +parser = argparse.ArgumentParser() +# TODO: Implement ability to select game ROM and choose correct executable based on that choice +# - check for .z64 files in data path +# - if none found, exit with error message +# - if only one found: +# - check filename or md5sum and run appropriate executable +# - if no matches, exit with error message +# - for each rom: +# - if rom filename matches selected version, run game +# - else: +# - md5sum the roms one by one +# - if one matches the selected version: use that one +# - else error out + +# TODO: implement mod loading +# - if romdir parameter is relative, prefix with $XDG_DATA_HOME/mods +# - else use as is + +# TODO: implement arbitrary other parameters +# - get unmatched arguments from ArgumentParser +# - pass them through to executable + +default_args = ["--basedir", f"{xdg_data_home}/data", "--savedir", f"{xdg_data_home}/saves"] subprocess.run(["pd"] + default_args) From a6b516be15f53493ead22dcb22f574eb7c95842b Mon Sep 17 00:00:00 2001 From: Florian Piesche Date: Fri, 30 Aug 2024 01:47:13 +0100 Subject: [PATCH 05/21] Fix flatpak build step --- .github/workflows/c-cpp.yml | 41 +++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index ed71837a4..4548153e7 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -78,6 +78,27 @@ jobs: path: bin/ retention-days: 0 + build-flatpak-bundle: + name: "Build flatpak bundle" + runs-on: ubuntu-latest + needs: [build-i686-linux] + container: + image: bilelmoussaoui/flatpak-github-actions:gnome-44 + options: --privileged + steps: + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 + with: + name: pd-i686-linux + path: bin/ + - uses: flatpak/flatpak-github-actions/flatpak-builder@v6 + with: + build-bundle: true + bundle: io.github.fgsfdsfgs.perfect_dark.flatpak + manifest-path: dist/linux/io.github.fgsfdsfgs.perfect_dark.yml + cache-key: flatpak-builder-${{ github.sha }} + upload-artifact: true + publish-latest-build: runs-on: ubuntu-latest if: github.ref == 'refs/heads/port' @@ -101,23 +122,3 @@ jobs: git tag --force ci-dev-build port git push --force origin ci-dev-build gh release upload --clobber ci-dev-build ci-release/* - - build-flatpak-bundle: - name: "Build flatpak bundle" - runs-on: ubuntu-latest - container: - image: bilelmoussaoui/flatpak-github-actions:gnome-44 - options: --privileged - steps: - - uses: actions/checkout@v4 - - uses: actions/download-artifact@v4 - with: - name: pd-i686-linux - path: bin/ - - uses: flatpak/flatpak-github-actions/flatpak-builder@v6 - with: - build-bundle: true - bundle: io.github.fgsfdsfgs.perfect_dark.flatpak - manifest-path: dist/linux/io.github.fgsfdsfgs.perfect_dark.yml - cache-key: flatpak-builder-${{ github.sha }} - upload-artifact: true From b8348a45bc92d86a11ea5828a74a88f2abb465f0 Mon Sep 17 00:00:00 2001 From: Florian Piesche Date: Fri, 30 Aug 2024 01:58:53 +0100 Subject: [PATCH 06/21] Try and debug workflow setup --- .github/workflows/c-cpp.yml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 4548153e7..d0a0f0d71 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -91,18 +91,27 @@ jobs: with: name: pd-i686-linux path: bin/ + - run: | + ls -la + ls -la perfect_dark - uses: flatpak/flatpak-github-actions/flatpak-builder@v6 with: build-bundle: true bundle: io.github.fgsfdsfgs.perfect_dark.flatpak - manifest-path: dist/linux/io.github.fgsfdsfgs.perfect_dark.yml + manifest-path: perfect_dark/dist/linux/io.github.fgsfdsfgs.perfect_dark.yml cache-key: flatpak-builder-${{ github.sha }} - upload-artifact: true + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: io.github.fgsfdsfgs.perfect_dark.flatpak + path: io.github.fgsfdsfgs.perfect_dark.flatpak + retention-days: 0 + publish-latest-build: runs-on: ubuntu-latest if: github.ref == 'refs/heads/port' - needs: [build-i686-windows, build-i686-linux] + needs: [build-i686-windows, build-i686-linux, build-flatpak-bundle] permissions: contents: write steps: @@ -118,6 +127,7 @@ jobs: pushd ci-artifacts tar czf ../ci-release/pd-i686-linux.tar.gz pd-i686-linux zip -r ../ci-release/pd-i686-windows.zip pd-i686-windows + mv io.github.fgsfdsfgs.perfect_dark.flatpak ../ci-release/ popd git tag --force ci-dev-build port git push --force origin ci-dev-build From 538385a9917ca7ef144d39b3b8f33f58a0720266 Mon Sep 17 00:00:00 2001 From: Florian Piesche Date: Fri, 30 Aug 2024 02:13:07 +0100 Subject: [PATCH 07/21] Try workflow again --- .github/workflows/c-cpp.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index d0a0f0d71..54c2fd70e 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -91,14 +91,11 @@ jobs: with: name: pd-i686-linux path: bin/ - - run: | - ls -la - ls -la perfect_dark - uses: flatpak/flatpak-github-actions/flatpak-builder@v6 with: build-bundle: true bundle: io.github.fgsfdsfgs.perfect_dark.flatpak - manifest-path: perfect_dark/dist/linux/io.github.fgsfdsfgs.perfect_dark.yml + manifest-path: dist/linux/io.github.fgsfdsfgs.perfect_dark.yml cache-key: flatpak-builder-${{ github.sha }} - name: Upload artifact uses: actions/upload-artifact@v4 From ee8d7a6e898cf5fcf622676e0c4d6f559ed05b86 Mon Sep 17 00:00:00 2001 From: Florian Piesche Date: Fri, 30 Aug 2024 02:30:00 +0100 Subject: [PATCH 08/21] Build flatpak bundle manually --- .github/workflows/c-cpp.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 54c2fd70e..e6258830f 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -90,13 +90,13 @@ jobs: - uses: actions/download-artifact@v4 with: name: pd-i686-linux - path: bin/ - - uses: flatpak/flatpak-github-actions/flatpak-builder@v6 - with: - build-bundle: true - bundle: io.github.fgsfdsfgs.perfect_dark.flatpak - manifest-path: dist/linux/io.github.fgsfdsfgs.perfect_dark.yml - cache-key: flatpak-builder-${{ github.sha }} + path: dist/linux/bin/ + - name: Build Flatpak bundle + run: | + cd dist/linux/ + flatpak-builder build --force-clean io.github.fgsfdsfgs.perfect_dark.yml + flatpak build-export export build + flatpak build-bundle export io.github.fgsfdsfgs.perfect_dark.flatpak io.github.fgsfdsfgs.perfect_dark - name: Upload artifact uses: actions/upload-artifact@v4 with: From 096a8338384afac24b22f6d3e06102a2774c0471 Mon Sep 17 00:00:00 2001 From: Florian Piesche Date: Fri, 30 Aug 2024 02:37:56 +0100 Subject: [PATCH 09/21] debug --- .github/workflows/c-cpp.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index e6258830f..436e88caa 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -94,7 +94,9 @@ jobs: - name: Build Flatpak bundle run: | cd dist/linux/ - flatpak-builder build --force-clean io.github.fgsfdsfgs.perfect_dark.yml + ls -la + pwd + flatpak-builder build --force-clean ./io.github.fgsfdsfgs.perfect_dark.yml flatpak build-export export build flatpak build-bundle export io.github.fgsfdsfgs.perfect_dark.flatpak io.github.fgsfdsfgs.perfect_dark - name: Upload artifact From c224055ff7a6ee0e412458b4c094da6053010d36 Mon Sep 17 00:00:00 2001 From: Florian Piesche Date: Fri, 30 Aug 2024 12:25:51 +0100 Subject: [PATCH 10/21] Fix manifest file name. Duh. --- .github/workflows/c-cpp.yml | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 436e88caa..46a654f69 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -91,14 +91,21 @@ jobs: with: name: pd-i686-linux path: dist/linux/bin/ - - name: Build Flatpak bundle - run: | - cd dist/linux/ - ls -la - pwd - flatpak-builder build --force-clean ./io.github.fgsfdsfgs.perfect_dark.yml - flatpak build-export export build - flatpak build-bundle export io.github.fgsfdsfgs.perfect_dark.flatpak io.github.fgsfdsfgs.perfect_dark + + - uses: flatpak/flatpak-github-actions/flatpak-builder@v6 + with: + bundle: io.github.fgsfdsfgs.perfect_dark.flatpak + manifest-path: dist/linux/io.github.fgsfdsfgs.perfect_dark.yaml + cache-key: flatpak-builder-${{ github.sha }} + upload-artifact: true + + # - name: Build Flatpak bundle + # run: | + # cd dist/linux/ + # flatpak-builder build --force-clean io.github.fgsfdsfgs.perfect_dark.yaml + # flatpak build-export export build + # flatpak build-bundle export io.github.fgsfdsfgs.perfect_dark.flatpak io.github.fgsfdsfgs.perfect_dark + - name: Upload artifact uses: actions/upload-artifact@v4 with: From 35d263e15bcefee7fb2969f59a0cf71f4d3c0911 Mon Sep 17 00:00:00 2001 From: Florian Piesche Date: Fri, 30 Aug 2024 12:27:54 +0100 Subject: [PATCH 11/21] Use freedesktop container --- .github/workflows/c-cpp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 46a654f69..f581c51f2 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -83,7 +83,7 @@ jobs: runs-on: ubuntu-latest needs: [build-i686-linux] container: - image: bilelmoussaoui/flatpak-github-actions:gnome-44 + image: bilelmoussaoui/flatpak-github-actions:freedesktop options: --privileged steps: - uses: actions/checkout@v4 From b2657eb0c205438de995cc9ea41309dd5b80701d Mon Sep 17 00:00:00 2001 From: Florian Piesche Date: Fri, 30 Aug 2024 12:29:31 +0100 Subject: [PATCH 12/21] Use freedesktop 23.08 specifically --- .github/workflows/c-cpp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index f581c51f2..e0a1087a2 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -83,7 +83,7 @@ jobs: runs-on: ubuntu-latest needs: [build-i686-linux] container: - image: bilelmoussaoui/flatpak-github-actions:freedesktop + image: bilelmoussaoui/flatpak-github-actions:freedesktop-23.08 options: --privileged steps: - uses: actions/checkout@v4 From 6344cc8914211aed07024893ff03aa644b64deb4 Mon Sep 17 00:00:00 2001 From: Florian Piesche Date: Fri, 30 Aug 2024 12:52:14 +0100 Subject: [PATCH 13/21] Move actual flatpak bundle rather than parent directory --- .github/workflows/c-cpp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index e0a1087a2..f9507155f 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -133,7 +133,7 @@ jobs: pushd ci-artifacts tar czf ../ci-release/pd-i686-linux.tar.gz pd-i686-linux zip -r ../ci-release/pd-i686-windows.zip pd-i686-windows - mv io.github.fgsfdsfgs.perfect_dark.flatpak ../ci-release/ + mv io.github.fgsfdsfgs.perfect_dark.flatpak/io.github.fgsfdsfgs.perfect_dark.flatpak ../ci-release/ popd git tag --force ci-dev-build port git push --force origin ci-dev-build From cf13976db38b034e1f1ed7eae925a46ac8151474 Mon Sep 17 00:00:00 2001 From: Jonaeru Date: Sat, 31 Aug 2024 00:46:04 +0900 Subject: [PATCH 14/21] Add copy simulant mp menu --- src/game/mplayer/mplayer.c | 15 +++++++++++++++ src/game/mplayer/setup.c | 28 ++++++++++++++++++++++++++++ src/include/game/mplayer/mplayer.h | 3 +++ src/include/game/mplayer/setup.h | 3 +++ 4 files changed, 49 insertions(+) diff --git a/src/game/mplayer/mplayer.c b/src/game/mplayer/mplayer.c index 80b9a4c1f..142d94028 100644 --- a/src/game/mplayer/mplayer.c +++ b/src/game/mplayer/mplayer.c @@ -3146,6 +3146,21 @@ void mpRemoveSimulant(s32 index) mpGenerateBotNames(); } +#ifndef PLATFORM_N64 +void mpCopySimulant(s32 index) +{ + s32 dest = mpGetSlotForNewBot(); + + g_MpSetup.chrslots |= 1 << (dest + 4); + g_BotConfigsArray[dest].base.name[0] = g_BotConfigsArray[index].base.name[0]; + g_BotConfigsArray[dest].base.mpheadnum = g_BotConfigsArray[index].base.mpheadnum; + g_BotConfigsArray[dest].base.mpbodynum = g_BotConfigsArray[index].base.mpbodynum; + g_BotConfigsArray[dest].type = g_BotConfigsArray[index].type; + g_BotConfigsArray[dest].difficulty = g_BotConfigsArray[index].difficulty; + mpGenerateBotNames(); +} +#endif + bool mpHasSimulants(void) { if ((g_MpSetup.chrslots & 0xfff0) != 0) { diff --git a/src/game/mplayer/setup.c b/src/game/mplayer/setup.c index 44834bbfb..c9935c620 100644 --- a/src/game/mplayer/setup.c +++ b/src/game/mplayer/setup.c @@ -2933,6 +2933,24 @@ MenuItemHandlerResult menuhandlerMpDeleteSimulant(s32 operation, struct menuitem return 0; } +#ifndef PLATFORM_N64 +MenuItemHandlerResult menuhandlerMpCopySimulant(s32 operation, struct menuitem *item, union handlerdata *data) +{ + switch (operation) { + case MENUOP_SET: + mpCopySimulant(g_Menus[g_MpPlayerNum].mpsetup.slotindex); + menuPopDialog(); + break; + case MENUOP_CHECKDISABLED: + if (mpHasUnusedBotSlots() == 0) { + return true; + } + } + + return 0; +} +#endif + char *mpMenuTitleEditSimulant(struct menudialogdef *dialogdef) { sprintf(g_StringPointer, "%s", &g_BotConfigsArray[g_Menus[g_MpPlayerNum].mpsetup.slotindex].base.name); @@ -3151,6 +3169,16 @@ struct menuitem g_MpEditSimulantMenuItems[] = { 0, NULL, }, +#ifndef PLATFORM_N64 + { + MENUITEMTYPE_SELECTABLE, + 0, + MENUITEMFLAG_LOCKABLEMINOR | MENUITEMFLAG_LITERAL_TEXT, + (uintptr_t)"Copy Simulant\n", + 0, + menuhandlerMpCopySimulant, + }, +#endif { MENUITEMTYPE_SELECTABLE, 0, diff --git a/src/include/game/mplayer/mplayer.h b/src/include/game/mplayer/mplayer.h index bb4b17e56..b2ab42f95 100644 --- a/src/include/game/mplayer/mplayer.h +++ b/src/include/game/mplayer/mplayer.h @@ -90,6 +90,9 @@ void mpCreateBotFromProfile(s32 botnum, u8 difficulty); void mpSetBotDifficulty(s32 botnum, s32 difficulty); s32 mpGetSlotForNewBot(void); void mpRemoveSimulant(s32 index); +#ifndef PLATFORM_N64 +void mpCopySimulant(s32 index); +#endif bool mpHasSimulants(void); bool mpHasUnusedBotSlots(void); bool mpIsSimSlotEnabled(s32 slot); diff --git a/src/include/game/mplayer/setup.h b/src/include/game/mplayer/setup.h index ebb915747..b92f76c6e 100644 --- a/src/include/game/mplayer/setup.h +++ b/src/include/game/mplayer/setup.h @@ -144,6 +144,9 @@ MenuDialogHandlerResult menudialogMpSimulant(s32 operation, struct menudialogdef MenuItemHandlerResult menuhandlerMpSimulantHead(s32 operation, struct menuitem *item, union handlerdata *data); MenuItemHandlerResult menuhandlerMpSimulantBody(s32 operation, struct menuitem *item, union handlerdata *data); MenuItemHandlerResult menuhandlerMpDeleteSimulant(s32 operation, struct menuitem *item, union handlerdata *data); +#ifndef PLATFORM_N64 +MenuItemHandlerResult menuhandlerMpCopySimulant(s32 operation, struct menuitem *item, union handlerdata *data); +#endif MenuItemHandlerResult menuhandlerMpChangeSimulantType(s32 operation, struct menuitem *item, union handlerdata *data); MenuItemHandlerResult menuhandlerMpClearAllSimulants(s32 operation, struct menuitem *item, union handlerdata *data); MenuItemHandlerResult menuhandlerMpAddSimulant(s32 operation, struct menuitem *item, union handlerdata *data); From 2d51c0a60ab957ad211f428fa9d891b6273987ba Mon Sep 17 00:00:00 2001 From: Florian Piesche Date: Fri, 30 Aug 2024 18:03:00 +0100 Subject: [PATCH 15/21] Switch to shell script to launch --- .../linux/io.github.fgsfdsfgs.perfect_dark.py | 37 ------------------- .../linux/io.github.fgsfdsfgs.perfect_dark.sh | 26 +++++++++++++ .../io.github.fgsfdsfgs.perfect_dark.yaml | 6 +-- 3 files changed, 29 insertions(+), 40 deletions(-) delete mode 100644 dist/linux/io.github.fgsfdsfgs.perfect_dark.py create mode 100644 dist/linux/io.github.fgsfdsfgs.perfect_dark.sh diff --git a/dist/linux/io.github.fgsfdsfgs.perfect_dark.py b/dist/linux/io.github.fgsfdsfgs.perfect_dark.py deleted file mode 100644 index ea4b9815d..000000000 --- a/dist/linux/io.github.fgsfdsfgs.perfect_dark.py +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/python -import argparse -import subprocess - -xdg_data_home = os.environ["XDG_XATA_HOME"] - -# Create data/saves/mods directories if needed -for directory in ["data", "saves", "mods"]: - abs_dir = os.path.join(xdg_data_home, directory) - if not os.path.isdir(abs_dir): - os.makedirs(abs_dir) - -parser = argparse.ArgumentParser() - -# TODO: Implement ability to select game ROM and choose correct executable based on that choice -# - check for .z64 files in data path -# - if none found, exit with error message -# - if only one found: -# - check filename or md5sum and run appropriate executable -# - if no matches, exit with error message -# - for each rom: -# - if rom filename matches selected version, run game -# - else: -# - md5sum the roms one by one -# - if one matches the selected version: use that one -# - else error out - -# TODO: implement mod loading -# - if romdir parameter is relative, prefix with $XDG_DATA_HOME/mods -# - else use as is - -# TODO: implement arbitrary other parameters -# - get unmatched arguments from ArgumentParser -# - pass them through to executable - -default_args = ["--basedir", f"{xdg_data_home}/data", "--savedir", f"{xdg_data_home}/saves"] -subprocess.run(["pd"] + default_args) diff --git a/dist/linux/io.github.fgsfdsfgs.perfect_dark.sh b/dist/linux/io.github.fgsfdsfgs.perfect_dark.sh new file mode 100644 index 000000000..ca50d0a50 --- /dev/null +++ b/dist/linux/io.github.fgsfdsfgs.perfect_dark.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +# Create user data directories if necessary +userdirs=( roms saves mods ) +for path in "${userdirs[@]}"; do + if [[ ! -d "${XDG_DATA_HOME}/${path}" ]]; then + mkdir -p "${XDG_DATA_HOME}/${path}" + fi +done + +# If first parameter is one of the pd executables, execute that +# and pass the remaining parameters to it; otherwise default to +# pd and pass all arguments to it +case $1 in + "pd."*) + executable=$1 + params="${@:2}" + ;; + *) + executable=pd + params="$@" + ;; +esac + +# Run game +$executable --basedir ${XDG_DATA_HOME}/roms --savedir ${XDG_DATA_HOME}/saves $params diff --git a/dist/linux/io.github.fgsfdsfgs.perfect_dark.yaml b/dist/linux/io.github.fgsfdsfgs.perfect_dark.yaml index 91ea5877d..7ef407946 100644 --- a/dist/linux/io.github.fgsfdsfgs.perfect_dark.yaml +++ b/dist/linux/io.github.fgsfdsfgs.perfect_dark.yaml @@ -2,7 +2,7 @@ app-id: io.github.fgsfdsfgs.perfect_dark runtime: org.freedesktop.Platform runtime-version: &runtime-version '23.08' sdk: org.freedesktop.Sdk -command: io.github.fgsfdsfgs.perfect_dark.py +command: io.github.fgsfdsfgs.perfect_dark.sh finish-args: # multiarch is required for 32bit binaries @@ -71,7 +71,7 @@ modules: - type: file path: bin/pd.pal - type: file - path: io.github.fgsfdsfgs.perfect_dark.py + path: io.github.fgsfdsfgs.perfect_dark.sh - type: file path: io.github.fgsfdsfgs.perfect_dark.png - type: file @@ -87,7 +87,7 @@ modules: - mkdir -p /app/lib/i386-linux-gnu/dri/intel-vaapi-driver # port - install -Dm 755 -t /app/bin/ pd* - - install -Dm 644 ${FLATPAK_ID}.py /app/bin/${FLATPAK_ID}.py + - install -Dm 755 ${FLATPAK_ID}.sh /app/bin/${FLATPAK_ID}.sh - install -Dm 644 ${FLATPAK_ID}.desktop /app/share/applications/${FLATPAK_ID}.desktop - install -Dm 644 ${FLATPAK_ID}.metainfo.xml /app/share/metainfo/${FLATPAK_ID}.metainfo.xml - install -Dm 644 ${FLATPAK_ID}.png /app/share/icons/hicolor/256x256/apps/${FLATPAK_ID}.png From e9b946feb457c4b2c5d0e61182ae30d0d39411d1 Mon Sep 17 00:00:00 2001 From: Florian Piesche Date: Fri, 30 Aug 2024 18:45:55 +0100 Subject: [PATCH 16/21] Fix executable detection --- .../linux/io.github.fgsfdsfgs.perfect_dark.sh | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/dist/linux/io.github.fgsfdsfgs.perfect_dark.sh b/dist/linux/io.github.fgsfdsfgs.perfect_dark.sh index ca50d0a50..0e163c2a9 100644 --- a/dist/linux/io.github.fgsfdsfgs.perfect_dark.sh +++ b/dist/linux/io.github.fgsfdsfgs.perfect_dark.sh @@ -3,21 +3,33 @@ # Create user data directories if necessary userdirs=( roms saves mods ) for path in "${userdirs[@]}"; do - if [[ ! -d "${XDG_DATA_HOME}/${path}" ]]; then + if [ ! -d "${XDG_DATA_HOME}/${path}" ]; then mkdir -p "${XDG_DATA_HOME}/${path}" fi done -# If first parameter is one of the pd executables, execute that -# and pass the remaining parameters to it; otherwise default to -# pd and pass all arguments to it +# Default to pd as executable but switch to jpn/pal if the NTSC rom +# is missing but JPN/PAL are present. +executable="pd" +if [ -f ${XDG_DATA_HOME}/roms/pd.ntsc-final.z64 ] | \ + [ -f ${XDG_DATA_HOME}/roms/pd.ntsc-1.0.z64 ]; then + executable="pd" +elif [ -f ${XDG_DATA_HOME}/roms/pd.jpn-final.z64 ]; then + executable="pd.jpn" +elif [ -f ${XDG_DATA_HOME}/roms/pd.pal-final.z64 ]; then + executable="pd.pal" +fi + +# If first parameter passed to this script is one of the pd executables, +# run that regardless of ROM auto-detection above and pass the remaining +# parameters to it; otherwise pass all arguments to the executable selected +# above case $1 in "pd."*) executable=$1 params="${@:2}" ;; *) - executable=pd params="$@" ;; esac From 8f445d344fb96224a9f8b4bd2434f29a54dff127 Mon Sep 17 00:00:00 2001 From: Florian Piesche Date: Fri, 30 Aug 2024 18:46:08 +0100 Subject: [PATCH 17/21] Add .flatpak-builder to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 4aaf2032f..036ef12cf 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ *.exe pd.*.z64 build +.flatpak-builder extracted src/assets/*/*.bin src/assets/*/*.ctl From a3d2b56dd9e8c02646286b3ff0e5036f7e87bd61 Mon Sep 17 00:00:00 2001 From: fgsfds Date: Mon, 2 Sep 2024 10:26:11 +0200 Subject: [PATCH 18/21] port: flatpak: replace icon with the one suggested by NicNamSam in #238 --- .../io.github.fgsfdsfgs.perfect_dark.png | Bin 34728 -> 30899 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/dist/linux/io.github.fgsfdsfgs.perfect_dark.png b/dist/linux/io.github.fgsfdsfgs.perfect_dark.png index 24f45c18d8e5344c1786241c9b114c9cb385a14f..bd236a116796dc6e35f95285427a67699a813e75 100644 GIT binary patch literal 30899 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 X(Q{)aq`~2j00000NkvXXu0mjf|0qc9 literal 34728 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 Date: Mon, 2 Sep 2024 10:26:38 +0200 Subject: [PATCH 19/21] port: add windows program icon --- Makefile.port | 9 ++++++++- dist/windows/icon.ico | Bin 0 -> 131251 bytes dist/windows/icon.rc | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 dist/windows/icon.ico create mode 100644 dist/windows/icon.rc diff --git a/Makefile.port b/Makefile.port index 650f02474..f94f1f858 100644 --- a/Makefile.port +++ b/Makefile.port @@ -230,6 +230,10 @@ CXX_O_FILES := $(patsubst %.cpp, $(B_DIR)/%.o, $(CXX_FILES)) O_FILES := $(C_O_FILES) $(CXX_O_FILES) +ifneq (,$(findstring windows,$(TARGET_PLATFORM))) + O_FILES += $(B_DIR)/icon.res +endif + INCLUDES = \ -I include \ -I include/PR \ @@ -247,7 +251,7 @@ else LD := $(CC) endif -$(C_O_FILES): OPT_LVL := $(GCC_OPT_LVL) +$(O_FILES): OPT_LVL := $(GCC_OPT_LVL) COMMON_CFLAGS := $(C_DEFINES) -DAVOID_UB=1 $(INCLUDES) $(TARGET_CFLAGS) -g \ -fno-inline-functions \ @@ -322,6 +326,9 @@ $(B_DIR)/%.o: %.cpp $(JSON_HEADERS) @mkdir -p $(dir $@) $(CXX) -c $(CXXFLAGS) $(OPT_LVL) -o $@ $< +$(B_DIR)/%.res: dist/windows/%.rc + windres $< -O coff -o $@ + ################################################################################ # Clean rules diff --git a/dist/windows/icon.ico b/dist/windows/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c69fb2fee171c9498dca0dca56fa98762d8f8a7f GIT binary patch literal 131251 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 G2me2K-Eu_$ literal 0 HcmV?d00001 diff --git a/dist/windows/icon.rc b/dist/windows/icon.rc new file mode 100644 index 000000000..f2e2d4d79 --- /dev/null +++ b/dist/windows/icon.rc @@ -0,0 +1 @@ +id ICON icon.ico From 2550b5a6689d5ec3b706cd03c4588414b353e013 Mon Sep 17 00:00:00 2001 From: fgsfds Date: Mon, 2 Sep 2024 10:27:38 +0200 Subject: [PATCH 20/21] port: README: add icon credit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 71a0242d6..020f75025 100644 --- a/README.md +++ b/README.md @@ -137,5 +137,6 @@ It might be possible to build a 32-bit ARM executable, but this has not been tes * [Ship of Harkinian team](https://github.com/Kenix3/libultraship/tree/main/src/graphic/Fast3D), Emill and MaikelChan for the libultraship version of fast3d that this port uses; * lieff for [minimp3](https://github.com/lieff/minimp3); * Mouse Injector and 1964GEPD authors for some of the 60FPS- and mouselook-related fixes; +* NicNamSam for the icon; * everyone who has submitted pull requests and issues to this repository and tested the port; * probably more I'm forgetting. From 2a5c3a351eeb1772306567969fb8dc5b31eaf34e Mon Sep 17 00:00:00 2001 From: fgsfds Date: Mon, 2 Sep 2024 10:48:54 +0200 Subject: [PATCH 21/21] port: refactor gbcRomCheck a bit --- port/include/romdata.h | 2 +- port/src/main.c | 3 ++- port/src/romdata.c | 53 +++++++++++++++++++++++------------------- src/game/pak.c | 4 ++-- src/include/bss.h | 2 +- 5 files changed, 35 insertions(+), 29 deletions(-) diff --git a/port/include/romdata.h b/port/include/romdata.h index d72c411ed..07e83ee4e 100644 --- a/port/include/romdata.h +++ b/port/include/romdata.h @@ -22,6 +22,6 @@ u8 *romdataSegGetData(const char *segName); u8 *romdataSegGetDataEnd(const char *segName); u32 romdataSegGetSize(const char *segName); -void gbcRomCheck(void); +s32 romdataCheckGbcRom(void); #endif diff --git a/port/src/main.c b/port/src/main.c index fb225e6f6..5e404426d 100644 --- a/port/src/main.c +++ b/port/src/main.c @@ -107,7 +107,8 @@ int main(int argc, const char **argv) inputInit(); audioInit(); romdataInit(); - gbcRomCheck(); + + g_ValidGbcRomFound = romdataCheckGbcRom(); gameInit(); diff --git a/port/src/romdata.c b/port/src/romdata.c index 20fc55557..ade6a0f77 100644 --- a/port/src/romdata.c +++ b/port/src/romdata.c @@ -11,9 +11,6 @@ #include "system.h" #include "preprocess.h" #include "platform.h" -#ifndef PLATFORM_N64 -#include "bss.h" -#endif /** * asset files and ROM segments can be replaced by optional external files, @@ -392,43 +389,51 @@ s32 romdataInit(void) return 0; } -void gbcRomCheck(void) +static inline bool romdataCheckGbcRomContents(const u8 *gbcRomFile, const u32 gbcRomSize) { - u32 gbcRomSize; - u8* gbcRomFile = fsFileLoad(GBC_ROM_NAME, &gbcRomSize); - - if (!gbcRomFile) { - return; - } - if (gbcRomSize != GBC_ROM_SIZE) { - free(gbcRomFile); - return; + return false; } // ROM title - if (memcmp(gbcRomFile + 0x134, "PerfDark VPDE", 15) != 0) { - free(gbcRomFile); - return; + return false; } // Licensee code - if (memcmp(gbcRomFile + 0x144, "4Y", 2) != 0) { - free(gbcRomFile); - return; + return false; } // Header and global checksums - if (gbcRomFile[0x14D] != 0xA1 || gbcRomFile[0x14E] != 0xAD || gbcRomFile[0x14F] != 0x0F) { - free(gbcRomFile); - return; + return false; } - g_validGbcRomFound = true; - free(gbcRomFile); + return true; +} + +s32 romdataCheckGbcRom(void) +{ + if (fsFileSize(GBC_ROM_NAME) < 0) { + // bail early if it doesn't exist to avoid generating error messages + return false; + } + + u32 gbcRomSize = 0; + u8 *gbcRomFile = fsFileLoad(GBC_ROM_NAME, &gbcRomSize); + if (!gbcRomFile) { + return false; + } + + const bool ret = romdataCheckGbcRomContents(gbcRomFile, gbcRomSize); + sysMemFree(gbcRomFile); + + if (ret) { + sysLogPrintf(LOG_NOTE, "romdataCheckGbcRom: valid GBC rom found"); + } + + return ret; } s32 romdataFileGetSize(s32 fileNum) diff --git a/src/game/pak.c b/src/game/pak.c index 09c2fef7d..5747f74ee 100644 --- a/src/game/pak.c +++ b/src/game/pak.c @@ -330,7 +330,7 @@ bool var80075d14 = true; #endif #ifndef PLATFORM_N64 -bool g_validGbcRomFound = false; +bool g_ValidGbcRomFound = false; #endif u32 pakGetBlockSize(s8 device) @@ -5997,7 +5997,7 @@ bool gbpakIsAnyPerfectDark(void) return false; #else - return g_validGbcRomFound; + return g_ValidGbcRomFound; #endif } diff --git a/src/include/bss.h b/src/include/bss.h index a322a9a50..a5046aa05 100644 --- a/src/include/bss.h +++ b/src/include/bss.h @@ -294,7 +294,7 @@ extern struct chrdata *g_MpBotChrPtrs[MAX_BOTS]; extern s32 g_JpnMaxCacheItems; extern s32 var8009d370jf; #ifndef PLATFORM_N64 -extern bool g_validGbcRomFound; +extern bool g_ValidGbcRomFound; #endif #endif