From b0d3641de14f8144ccc8a31fc33d672522b087a0 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sat, 3 May 2025 20:03:50 +0800 Subject: [PATCH 01/59] Upgrade Eleventy to 3.1.0 beta --- bun.lockb | Bin 103243 -> 79928 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index 1311e76f935d29306e6bc8cd7411e5deb1d09f2a..09fde15f29e4e2bf7abb9179a1f2eed2468e41b8 100644 GIT binary patch delta 14797 zcmeHucUV+c_wLyvC}SL?Nk^KXqJY!^6$gwph++jX7Rm^tG#OA)31Gv9f?GW*SYnU8 zEB2l!HY~9u7BnWtSQFzXw%m7}nG^lKoA3U0?;rPhe&^wxb=KZ%uf6u#YwvSrv!;4Y z{k_jk%KUtshYYz;TOH7>X+X%W5xVS}vQrlqIiw|xiobiK?nK-k>vd`-&~-^Dk8e7t z;YEotepm@Ykv=^yRX03eD1w*`_zX~M&_19}pi!WfpceH6;WN;@WWNkua!%G5BcG9y zmy-^C8Ra#0g+36rgOEKaDIaTUptYclz+VI{TeR0$~l5{mTTNN{+1Vs5TBMHpe^M{4s&qpdIi zRy0O^Qr__4+8ja9X|-B)NU(4N<Pb!6;X`#_t5R)D&Keg#UyKMWn@#ucE% zC#Pw(Il8Pup%Q~9!R*8wy*5M;O2A{>MdeKd!JH^~@<&QmMqaKiU7ru0%10V$vR>~y zCM_|y*4EH&D0-n`CuL=&Cnf5&1?bQVe0GjbpD{u&q=2UZWM}Df({i0M(j&o<|8#oa z5&Eo5A;8F&^A`#`rEE?To{Va@_1~~{+n%fi|W=;_F+KkaOhhtEV@fW3lQsg#um)h|;_1p{PHbICo z(gnLy)3cHUE!F+^@4DqnL$nguTcAbpkza0W`0IuZgScU z^d<57#B8$ZGctl`2a9|K>KI9!*m)$7J-wVAoP zT%A_m+^EIE*Dz&TP;!5EVs4r**29=IU2+<1(CM{fwV-y8r{1>v8Kx^KIomfF3$Bm9 zL4On|xhN2nLO=m|xV^Bbq>W+z(m`o;JVi*;eCpE^_0++X0E3S#0}ZqvC@I(rN^`It zl!lj>lS3PkP#-)Ee`k=P{tenw{EW!U90_%THYX=D3p6_?2cLz4@B=!ei9ZZV%TW%f zHQ*_F$6zAqY87gb)9Z6|#AoO-b=iq}yTn(?8KTwt4%g-A zb7z1jgEMp)THll;p^)m)e^Gq6p}`lRG!k8A8rEyBK1G`?DIT7ql{}%%O-!YZa*c{d zf>QKkWaVV1Va<|as&|E&0Z<&gL3!V)Yvw!>p$%AUvJ71U!Ch3c7JQl{T}?`XAk+qM$;@l zOM9&gUVm{#>{sare%!WWBfqP%w>X$sbJtsY&QYaY*sHFh(L>wP6= z@b9NA=%o_pAK z?dFH?Yn_h0oIH}f;6)bpZvKpmL#h*B9zVJ2#rspMGh-GVQr~YlYxAvHr^-KT)WDZ- zwXh%d_J~!<$zfSb_NO`|SF%8KxVr1woNi}!j%sf4 zGBcKUv&?4mc$K9_d4>r>ESzS-nT=ZMs1Ssn;OY^_(s;g=hMnS7`1Ip-RvP6*JO{&2 zui(sDt=tE$gTx)RQY&ABLoibv+WPQ1YYiLD!)-Lmr6zK#Vk$puSZiK~ni-~o z&;@PGr8ZA^eiMz-yS^ZNjTh7C6HHtABA=lPBr)`wR) zV$j%rNHbj7M6Ikfae;?yO-BJRhIqc@;i?;C0R#WjhOl zQ|ohb-2|TRqA@*&vIMe0>5MHZN$S1WMa{nA;Y~HlpHY@6m0^lZ`(cr!NV0ozH(Zug zHpLcVXbF3iMc{g%4pRqjodp+f(BPL)tyR9Jz;17h(KyaN;e`~j< zkgW31C|972!cg+2=}mCy{JnKM)`jPLYLo?d#P&1jhW)R39m;xPb7DLTPqU2ya*$8h(Y+K4=J4j%wvaaK?=S-fE2( z0UC!iABu8!{-$LIc8`bqXp~VNvXi3h)QWr$-qxps={6L$!2X}k4Q*OYW(MjHvIx#F&CFS?ykM+DAX}>yN^joQuY+m0w{b?5#keC6NNZ8~2RMo{m=1r$ zHW!2-aESF_wQ3SLG5{NufC%!22VIrC%3s5t@H&5u%BzK8Rnt6Dlp8#pf>JWAAuqO7 zE0=<6XW$TlH+WTmM(KceBZ^x%2DAgWK&ZzOOXPJZ zTZ}UDCDdYzxCD;OX~3iW)Jj*pj&%WNSnfICXhj%ieJ41>9H38SeZRk-BG`(;K5{l{ z(-GjXxUjVx!d;|6ADsUI90e@2!!2Lpm5rRQ;71+8%)tD;rj+-<8O)$iXn}3LlO#wx zdj+^y+C`MV(H+XMV13lec34-W!9)t5+28`f8B9L{j%GlRI(9^bVLlL!isV4vwsQyN zF%*(Dg4Fy2IO-C9vs0UPM8pJ3oAYSgk+-CBV70%M2<4+JTk&jXr5WBgjjb`@6mZgmSh)&! zMxUbphu}yn#@0fubi;g*ZHBmu1xGHEIK{-ad|&Sl%IzpLx*nnQ931|PB0lZ-8;B%f z9U2{v$es(%Fs7pjqD$Zmqrm>AY=|LXCJd9J=+K_OiS3}wMj=*%(TGZL2Itcac3Twa0!j?wh)7h zDDhj3bQ>sLL`{HQfEjQQpo=KUA0mdw#Jlpx!|eIIczgI%5KaKp+bLpj{S&1P?KD7I z&Hw_x6>rA`J~**?A(fq@GF(K-f*N9Q5hdN1iNQsbaT>nJL zmYV>{{U9~x?-N}eNX>14E}|q>OAOyM&=ucr1mOWdjeZ8m$VUKOM2UY2Q2jH2w7mf6 z`X@?qze~0MOsW14V?C(Uzf?eGy)sr1Z3HMFO&yw0D_QzK6lZ?J-ek^huZk)^Sm zDBW5ad7`G^?N~BCrJMhIv;kB#HFhLXzA4$xi~Q(`QmSZXq+UkqZKTb2d_DLNMWP2p z{wLD^DZ=3xDf0g((*M7Ybcf+KZjrs;U9dd-_Ru1esK_U;@9*zw?y$UY#&_K>E?u>4 z)L`>xHIaw46!xcaAuO5}v6(yD@KGZH4vF!%Wm}+0Rut(79Zms;A ztv+}++cNg7PtT}dcGtFk)#9Mt1(sb`)cF1LN2!;#PMR}nlRwL9_@b`Umdy6<0llpk z{B-^Ju{W!}l@{NJ#vee3Qh*sRlc24UajUd?zsxt8>pEC8wpH{!YqoCahvJLva}I>3 zy&Bq~SAKQNeLp&!S1s`Ev182a=ogO5V$V+1s8^*|U%S31qm&{w1#IY1!j884UQ4+_)rmJ|wv}hbyOrI9VAA)-VPRGNi$MJl#>qZ!$Ges5o>&*#4!-;P@VDvZ>nDfNV}c2W(8&MP`3ag7 zlcIhxN%7YlDqb`@QZbW#?pXlTr(Mw#e3v|J1sw+NNv9uUxZs z>CM>*?$e*S^qhFnJhaWVbT{?->av{CReqn%%Nzc{)M07He#_eKj>QeU%$nc+bx4;w zK6u5jg3(Xz@q=ad{M?*qR=^#~;`rEdRpHLLFE*}7Y&UXMYURsGEv{b+s=Z}D;d!_B zn!V>XEi4J>{H^Xu&VkYui|Z}gd9ZK06W{;3cUGIVmv`1%XHlk_c(pj-6I%_Be1pLz z<}=ryxEfme#^Kz-=oxv*;TP^as`l8K6fiBY@0+NGr)SLR-fT&oZYsXlWDMLj{94`H zpR1qNuIgadOr3LW%rTciSvy?jy0OUO{Gea%l|CMKs>ZyZqVw*@ZFGd zyzQ8d%Sw{0eG2+)Il17;iYvP4^7EowuvMe##WpeLBQkrgu{w6zyw7TnfiZ_#jlHuf z=2WZwmD38wS!(za(Y{C3;Ii=KS4+|#R}Y`H_Eh=wy-9!G(A$;YEtyx6=Gt?5z~t|O z?=`F3cIk1|RnuFihd&YYnIos1KG(5wq<%-su44{-;;C}(UWt%jsNz#9qZ#Kl;LH}O zctJ%po6k>IAmqW7E{SF$zp(@%zZeT{X*65Jr!S4;_7zxg;3|0dvN--7xFyS?*%JOM zxUrR3aLc1(mVFvG!@mnT)!)nlm_K#@t(t+I3&S6Jy!Jc2zJ2xaEuEga zZFY9OI6uB}*~MQ~3oq1P9ADv3Fk!-A_H172HSV&+zQ?31Ayd{?RDU(Qd#miM=}*iO zr>1Ri?BC+zZ{Hq0HQ9OJjr;=Ntg6xpt`n^Gj6M0?ppo2l#)Zy#PUj=t6Ltj=FSoUMqVC8^;S7 zufJGt>Dy*`n}Xni(tu9oAM7rh#C&4RhEF|pCnSGizg^ZB{!D+D@y;dS+rW_RBFtb08@`$hPxy#mQ zwuwjW#*X*3s_H?QV{^{BFQPb`7{`{@@ zTGf^xw*Rtp!i)pQ5*E6x-xU+_M|pm=TlMds*eZV=B9l#4X7{T6?ZNIV-xRhOZxQY@ zf-hNNUwCb?;-_<;cZ^*ecGBlw{F;`w-U;qYvqPsIJFwx&%M%|aMR>Zlp0UzD!GGF| z_{U#u+wjIK$^6es*Oym4m;ZU=&X|RtShwv{Pc}MpZ&dfK4)dFAc~)f6VD~<+9#6h7 ze|e-y%8{p+=UarYHuLPRdmFUFq4ln?A?pggUp|@}o7ZdRWZyM&Og65xPIz6wV^-R8 z)4kDb2k*TX%VQN{U}ba+ebbXKld9D_2brE(b$HPHQK2il)J&cD%0m0yrpnkG^THN4 za9!>^*fyob{5$Itj=Y++?@ns;$XP4i9C#c&=dauK8VIf9&qVW0tL*v7ebG2{XH{5c zt5sZE70s&nHgNW9RD~z)!j^aI`|Hoet7GEqwtB9r{rs(s_m>y*!~1MqJ99+CyE^Bc zhqYTj-*m3sqRGd<>Ff6JUoZNEom+dp=fmcsQ$KW#|HM1{Wvf9=bUizH-&5Tfc6(uS zVeQD1rf&)>iiIgjsj*k)9`Cko$Kjs_?-|#@e6NF5y0YwA=gF>)3AfT+hw&lXU#xsx z-8?y^6c9p<|IalFMk6+gE>I_Bu7U3PW-{`9GF7xjzR zZ7-U+wn3*A)1I{-kiO*4K!+!be{A&is@rzEPP$%CtiR0PJ#^OeYY$3o+U8H0=+lL_ zdc3M%`GxEJ+&X(+dMKJ5=MD$3UcXVreBS-Ni~Zh;6`A%^^2QDvexPi8O6O7gZ+*A% z?25pn6E7v4ZFX`;mqz2_M{GX*(oH+yU*Es(Qk;Kh;U6(W(o@@ZirV~%cTNiY=Ai*R zY&|x*!_hI{erowc>w?|e-exX&bZA^nbvt(9p?ZF0-;jAf^m{TnE_QBBlCx^}*2K8@ z1E~+%^m-rp-u==7FS9lsdxko`8m({BHs>V2wceh0J`$}sE%1AX2k?a(u#%X!Y zLA;`DR29CRH8<@3*tAHG@7QM7)fc^g)H(R1JsMjvAtPk&UXO2MTCWcqKBC}I@8wrk zEZ*l+{q94XsN0UKrXIb0>-mZMnpWwb3`9N`paGaf1g$-C!ER6O67O_NAM=)}M;j{G zx>oy!o(z?=~%R)M&NIbol(lk9ZoyW9lu#h{Q1S7_%y2)JDy+crucvGVZ}b{cF_LbbSX<8J$Gc0d&b{NJ`wxdl#K2ksRDC$lF4-v5ZbV zD2B*@v&J$yG06kyqB=&WD=OT?QVFi}04X#F`T}%a0H~}nfKxi@A}>;z1%SgW$xu45 zqB2WhEI^%I0?1QV0KI`y-Bp0(tbqbYd{Cu)dSyl}aHU)o#9z#rmuS|Qbz{xM-i_HL z6+K~tfB+y+eA1Y89ZUx#Zh!|so_Yhk13mzM0n`%%rr>rePy$Q?=pgGC;34oUa3A;y z_z}1T8~}ESUt2Ki{^Z!}zzu+o93}(gC-MvVft*WDZvxl?c7Q!V6H61h4cHEB1<3iM zfsLYrCF@#9$2v}cGvER^0FHn?U-zy9m)8Je0G!MU8X!dw#D7^b%R)LRpzkr(fDK>^&~exc2+_G7tqPi+%Ro4g z2|NRy1GF020_^}C+Y0`GE84yS{R5yNvjKJh6elM^=}46hFDXWnVT6-4Q+m=@m2oJb zAejIZ0F!_+G96dzn^HWuE6xjh7F#oKMHHzf*OOZ}0|~$;pg*t-s00=O!+|n@LibBx z4lo;-ELz$!r$Xw8IwWhfz)%2I(Z2@hzrjKx0NaEiz%YR7X~&>?xKMH_%_z+*b(ITb z16e=@FcKI6qyedb4oC;ci>UJ!M&Tw0&;uk$0UnF+uJ;37~147-UBTmxPU;da!Ck1}jrMoheC!Dve8vJkg8 z!y-9pbJ0~X`_C?Ma}|FJ$Z4H9J-2QD8OJ* zg&5$1vF{V3L7e1-NV5&gruGQ_{8vd1l7jG7EQCOaoI&|Zi%t!duDk9@0vH_jGc&`? zq}6Vi;e`-JNn~i=h_?H1}2=r46!gP@}g$-*&ClDt&_cXX| zS;e)f55f#KP#?xnFpf#iNgZna;koVQo1TzEAW$gu73Uyi#NAC!rGA+nS&O3el)x|A?Yu-#o<3N}OFa5jtr(6&-m@R8G4&q05X64z;#*jWH zr;on;`|7$l%uQWaRqNN9nDiMpD!KiX^s0YR%XQ?iTuWq|OGv*G&)rMIw5x03V zTk*IDQ$zTLH?t8Ndot61yEo_(lRTLtGpheoR8m2X{n*;5^{pqg)`~#}OFpfJajCFT z>ie%|%!LgVUA(XmYQ&LVu>OHq-U3!tcrmq;oX}cQl)&D`5A=rZSbj9tNb!l6G)8xC zv@!PI%Ny30i2c2>kmO|BlGE|;JU!e0fugdqujVlEcd;gn;XicF;_T+k-bv1(JwAEEuHTe99i%>_nQ#@4Hiun5h>0zkL!q1y z_@K;u?ymZ^Q>Ct?U5RoAX(y8t-%vw48H|wAC8N`)@BQ)2t%1gxFzmxoN6g&`x)CbMU|YDDJKS^D%dYT?H3qe@OKzw^^GL zermq}ah(%$PLngH<#bQfLakpwpfKE+J1r-Eq9)WY`2TFof0}870k}<=;5H;!yx594 zDw?{Bk6U3fPK&0krHw4SHA{7tGpUzO-T(Qz_vUL9?5hyC2ZQtS5D&Cwfr=mx@p)_3 zLovuz?BI*omUFTjE~&jaxxxJ)X|w_4>u2I9Ul!ynCu2waab(*Wi;y&F&{7yGyu>3= z;Vh?T`}lWz_j-`c??wrP1v(qnp4n4p=6=l26jLQ!7Nh)_tutmq&eERy%b~FMkz1ak z9R+xhAeQ=JN1x@#oUuV$`m@v!IT`!Z*0Qo6ram=;D6MjIA*X96sZM`+;PcLVKh}&A z@t>t2Rwvf_V@W%S{%xT2d;oJ47vrOwoS_}rt6%V*64q9Tk1I?D;>u8Mm@ zdOv-d{jqJoKruE9+T~PpIdl1=4mlb9bm;_hJH^$p3WiQ8_Jo~5;!rur?+E!pP7C9pLx8P|>ji3lzJw#4lDt@GS#xI!bKba;7xY8fRHfLzi=@ zjo!e2IvxkFB6m-DedYLl|z(T|+IO*KsoD??74movRlB|SgHOgHS$ za+-ZuXYGoldUk^(m9#zuIT649L-(^W4I6Dk4ZXSrEYL6;6B>oMSi_n+$ocqk0=Xm> z0-uU|G%Q5%MY#A>!vgK(EPXkzT)`+R1H^3|n2Y#4607k*BnuAx-~IK~fA!Z_qyhe# zrxw#Sc!O^XEe`)}zNO8?4m(d9!$Zn}c0k&cod0VJAtyqd9mVW5aw31Ze?qDEu88oD zZ`yAo48IjnX0<={sQ2Ri(morAO`nx;??TGR>RgDCcS6Jq3Fob+C1mvXn!_r2r9 z@Q%!t#fbw!+7`Bw&UA{to3Z`f@z~yL=74XAIlZ4dQD>3T{f9;1t--GzIcVnau2IhM zb)*yDDAnTjj;y1~u$p}h$+vr6c4Sda&EXN4}`H#|xCVtHrg zSjWV-xG7{7A^BUjmL~&~&A|^kD^%ukEFsD6GuP|W&;-6_u z&w@mqj)kMQfQigQJgLKW|9e+xWh0o@T6?-KP5^23{i=rxjkj^#RPD8wz&@E-d0 zNVZF~%t6CgI63&J@XWGIjpHoD4DEJ(*9LGBC=`)d;FsRHP3M0o&V&-DU z0Z_hi5**<;9bYjnB(MhJq3Ns{M)Gw6^Aj_sGdm?MtPp7e0%kC4@y&GBi-n0_%wW;* z$buPckN9mq3SwrmM)k;?!84hcQd;i0`Po{rcqY13ltNmcf}N8JObMWf delta 28981 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 A;Q#;t diff --git a/package.json b/package.json index 520bed48..8019096b 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "@types/bun": "^1.2.11" }, "dependencies": { - "@11ty/eleventy": "^3.0.0", + "@11ty/eleventy": "^3.1.0-beta.1", "@11ty/eleventy-fetch": "^5.0.2", "@11ty/eleventy-navigation": "^1.0.4", "@11ty/eleventy-plugin-rss": "^2.0.3", From eeedd5d657c9163c91e9c30fe8c68be8e3e44f86 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sat, 3 May 2025 20:06:18 +0800 Subject: [PATCH 02/59] Install Eleventy plugin for Vento --- bun.lockb | Bin 79928 -> 83234 bytes eleventy.config.js | 7 +++++++ package.json | 1 + 3 files changed, 8 insertions(+) diff --git a/bun.lockb b/bun.lockb index 09fde15f29e4e2bf7abb9179a1f2eed2468e41b8..65661372db0a85f11a9627f9de0961fbe030faa9 100644 GIT binary patch delta 15263 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 delta 13490 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 Date: Sat, 3 May 2025 20:16:51 +0800 Subject: [PATCH 03/59] Add frontmatter data for exclusing an item from sitemap --- src/changelogs/logs/logs.11tydata.js | 3 ++- src/{robots.txt.njk => robots.txt.vto} | 0 src/sitemap.xml.njk | 15 --------------- src/sitemap.xml.vto | 17 +++++++++++++++++ src/src.11tydata.js | 6 ++++++ 5 files changed, 25 insertions(+), 16 deletions(-) rename src/{robots.txt.njk => robots.txt.vto} (100%) delete mode 100644 src/sitemap.xml.njk create mode 100644 src/sitemap.xml.vto create mode 100644 src/src.11tydata.js diff --git a/src/changelogs/logs/logs.11tydata.js b/src/changelogs/logs/logs.11tydata.js index afde825b..86edf055 100644 --- a/src/changelogs/logs/logs.11tydata.js +++ b/src/changelogs/logs/logs.11tydata.js @@ -1,9 +1,10 @@ export default { tags: ["changelogs", "feed items"], permalink: false, + excludeFromSitemap: true, eleventyComputed: { title: function(data) { return `Changelog: ${this.formatDate(data.date)}`; } } -} \ No newline at end of file +} diff --git a/src/robots.txt.njk b/src/robots.txt.vto similarity index 100% rename from src/robots.txt.njk rename to src/robots.txt.vto diff --git a/src/sitemap.xml.njk b/src/sitemap.xml.njk deleted file mode 100644 index 47a3a7fe..00000000 --- a/src/sitemap.xml.njk +++ /dev/null @@ -1,15 +0,0 @@ ---- -permalink: "{{ page.filePathStem }}" -eleventyExcludeFromCollections: true ---- - - - {%- for item in collections.all %} - - {{ sitemeta.siteUrl + item.url }} - {% if item.updated %}{{ item.updated.toISOString() }}{% else %}{{ item.date.toISOString() }}{% endif %} - {{ item.data.sitemap.changefreq | default("weekly") }} - {{ item.data.sitemap.priority | default(0.5) }} - - {%- endfor %} - \ No newline at end of file diff --git a/src/sitemap.xml.vto b/src/sitemap.xml.vto new file mode 100644 index 00000000..f41e5f33 --- /dev/null +++ b/src/sitemap.xml.vto @@ -0,0 +1,17 @@ +--- +permalink: "{{ page.filePathStem }}" +eleventyExcludeFromCollections: true +--- + + + {{ for item of collections.all }} + {{ if !item.data.excludeFromSitemap }} + + {{ sitemeta.siteUrl + item.url }} + {{ item.updated ? item.updated.toISOString() : item.date.toISOString() }} + {{ item.data.sitemap.changefreq }} + {{ item.data.sitemap.priority }} + + {{ /if }} + {{ /for }} + diff --git a/src/src.11tydata.js b/src/src.11tydata.js new file mode 100644 index 00000000..fc9d2f8c --- /dev/null +++ b/src/src.11tydata.js @@ -0,0 +1,6 @@ +export default { + sitemap: { + changefreq: "weekly", + priority: 0.5, + } +} From 8f6a6af70ef2d2cb3105846f0f54284cd68db275 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sat, 3 May 2025 20:23:10 +0800 Subject: [PATCH 04/59] Convert .htaccess template to Vento --- src/{.htaccess.njk => .htaccess.vto} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/{.htaccess.njk => .htaccess.vto} (100%) diff --git a/src/.htaccess.njk b/src/.htaccess.vto similarity index 100% rename from src/.htaccess.njk rename to src/.htaccess.vto From 788f9306228870d395c0785ceb8a4bc2e69c7954 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sat, 3 May 2025 20:41:33 +0800 Subject: [PATCH 05/59] Fix one of Bak Baan's photos in the Qingming post --- src/blog/posts/2025-04-06-my-2025-qingming.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blog/posts/2025-04-06-my-2025-qingming.md b/src/blog/posts/2025-04-06-my-2025-qingming.md index 9ed6eae7..f8c1790a 100644 --- a/src/blog/posts/2025-04-06-my-2025-qingming.md +++ b/src/blog/posts/2025-04-06-my-2025-qingming.md @@ -15,7 +15,7 @@ Sweeping tombs was not the only activity we did during this year's Qingming Fest On April 4, my parents and I visited our family's durian plantation, which is currently taken care of by one of my paternal uncles. My last visit to the plantation was during [this year's Lunar New Year](2025-02-06-my-2025-lunar-new-year.md), when I also met my uncle's dog, Bak Baan, for the first time. Since our last visit, I learned that Bak Baan has become pregnant, and my uncle estimated that she will give birth a month later. -![Photo of a pregnant mixed breed white female dog with brown spots on her forehead, ears, and tail, at the compound of a house, looking away from the camera while miling.](/assets/images/posts/my-2025-qingming/bak-baan-1.avif) +![Photo of a pregnant mixed breed white female dog with brown spots on her forehead, ears, and tail, at the compound of a house, looking away from the camera while smiling.](/assets/images/posts/my-2025-qingming/bak-baan-1.avif) ![Photo of a pregnant mixed breed white female dog with brown spots on her forehead, ears, and neck, standing in a grass field, and looking away from the camera while smiling.](/assets/images/posts/my-2025-qingming/bak-baan-2.avif) From fbf8f5df73d103be8004e71ea50fd91345fef693 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 20:28:42 +0800 Subject: [PATCH 06/59] Set up Vento templates --- src/{404.html => 404.vto} | 2 +- src/_config/filters.js | 5 +- src/_includes/asummersend/base.html | 19 --- src/_includes/asummersend/content.html | 7 -- src/_includes/asummersend/footer.html | 6 - src/_includes/asummersend/hero.html | 46 ------- src/_includes/asummersend/navbar.html | 11 -- src/_includes/asummersend/shrineinfo.html | 12 -- src/_includes/cassettebeasts/base.html | 19 --- src/_includes/cassettebeasts/content.html | 7 -- src/_includes/cassettebeasts/footer.html | 6 - src/_includes/cassettebeasts/hero.html | 40 ------ src/_includes/cassettebeasts/navbar.html | 11 -- src/_includes/cassettebeasts/shrineinfo.html | 14 --- .../aseplaylist.vto} | 12 +- .../macros.njk => components/functions.vto} | 22 ++-- .../my-button.vto} | 4 +- .../pagination-oldnew.vto} | 66 +++++----- .../statuscafe.vto} | 6 +- .../support-me.vto} | 4 +- .../webcliques.vto} | 6 +- src/_includes/global/baselayout.html | 53 -------- src/_includes/global/content.html | 115 ----------------- src/_includes/global/root.html | 29 ----- src/_includes/layouts/asummersend.vto | 84 +++++++++++++ src/_includes/layouts/base.vto | 53 ++++++++ src/_includes/layouts/cassettebeasts.vto | 82 ++++++++++++ src/_includes/layouts/content.vto | 118 ++++++++++++++++++ .../{main/links.html => layouts/links.vto} | 34 ++--- .../{main/hero.html => layouts/main.vto} | 60 +++++++-- src/_includes/layouts/pokemonoras.vto | 72 +++++++++++ src/_includes/layouts/root.vto | 27 ++++ src/_includes/layouts/slashpage.vto | 9 ++ src/_includes/layouts/starwarskotor.vto | 79 ++++++++++++ src/_includes/main/archive.html | 16 --- src/_includes/main/base.html | 5 - src/_includes/main/changelogs-list.html | 7 -- src/_includes/main/content.html | 5 - src/_includes/main/footer.html | 29 ----- src/_includes/main/navbar.html | 11 -- src/_includes/main/slashpage.html | 9 -- src/_includes/partials/archive.vto | 16 +++ src/_includes/partials/changelogs-list.vto | 7 ++ .../changelogs.vto} | 20 +-- .../content-nav.vto} | 14 +-- .../css-bundle.html => partials/css.vto} | 8 +- .../{global/feeds.html => partials/feeds.vto} | 0 .../{global/fonts.html => partials/fonts.vto} | 0 .../footer.html => partials/footer.vto} | 16 ++- .../h-card.html => partials/h-card.vto} | 0 .../{global/hero.html => partials/hero.vto} | 12 +- .../kotor-modlist.md} | 0 .../{global/meta.html => partials/meta.vto} | 6 +- .../navbar.html => partials/navbar.vto} | 24 ++-- .../shrineinfo.vto} | 8 +- .../{global/toc.html => partials/toc.vto} | 6 +- .../top-btn.html => partials/top-btn.vto} | 4 +- src/_includes/pokemonoras/base.html | 19 --- src/_includes/pokemonoras/content.html | 7 -- src/_includes/pokemonoras/footer.html | 6 - src/_includes/pokemonoras/hero.html | 34 ----- src/_includes/pokemonoras/navbar.html | 11 -- src/_includes/pokemonoras/shrineinfo.html | 10 -- src/_includes/starwarskotor/base.html | 19 --- src/_includes/starwarskotor/content.html | 7 -- src/_includes/starwarskotor/footer.html | 6 - src/_includes/starwarskotor/hero.html | 40 ------ src/_includes/starwarskotor/navbar.html | 11 -- src/_includes/starwarskotor/shrineinfo.html | 11 -- src/assets/css/{misc.css => root.css} | 0 src/{index.html => index.vto} | 24 ++-- .../linkgroups/{joined.njk => joined.vto} | 8 +- .../{websites.html => websites.vto} | 10 +- src/shrines/asummersend.md | 4 +- src/shrines/asummersend/gallery.md | 4 +- src/shrines/asummersend/playlists.md | 2 +- src/shrines/asummersend/trivia.md | 4 +- src/shrines/cassettebeasts.md | 4 +- src/shrines/cassettebeasts/articles.md | 4 +- .../articles/articles.11tydata.js | 4 +- src/shrines/cassettebeasts/facts.md | 2 +- src/shrines/cassettebeasts/featured.md | 2 +- src/shrines/cassettebeasts/gamelog.md | 2 +- src/shrines/cassettebeasts/resources.md | 2 +- src/shrines/pokemonoras.md | 4 +- src/shrines/starwarskotor.md | 4 +- src/shrines/starwarskotor/articles.md | 4 +- .../articles/articles.11tydata.js | 4 +- src/shrines/starwarskotor/guides.md | 4 +- .../starwarskotor/guides/guides.11tydata.js | 4 +- src/shrines/starwarskotor/resources.md | 4 +- .../resources/resources.11tydata.js | 4 +- src/shrines/starwarskotor/universes.md | 2 +- .../archive/{archive.html => archive.vto} | 4 +- .../{categories.html => categories.vto} | 8 +- src/slashes/archive/category.html | 19 --- src/slashes/archive/category.vto | 19 +++ .../{changelogs.html => changelogs.vto} | 14 +-- .../footerlinks/{sitemap.html => sitemap.vto} | 12 +- .../{adoptables.html => adoptables.vto} | 44 +++---- .../navbarlinks/{blog.html => blog.vto} | 22 ++-- .../{guestbook.html => guestbook.vto} | 12 +- .../navbarlinks/{links.html => links.vto} | 0 .../navbarlinks/{shrines.html => shrines.vto} | 16 +-- 104 files changed, 873 insertions(+), 951 deletions(-) rename src/{404.html => 404.vto} (93%) delete mode 100644 src/_includes/asummersend/base.html delete mode 100644 src/_includes/asummersend/content.html delete mode 100644 src/_includes/asummersend/footer.html delete mode 100644 src/_includes/asummersend/hero.html delete mode 100644 src/_includes/asummersend/navbar.html delete mode 100644 src/_includes/asummersend/shrineinfo.html delete mode 100644 src/_includes/cassettebeasts/base.html delete mode 100644 src/_includes/cassettebeasts/content.html delete mode 100644 src/_includes/cassettebeasts/footer.html delete mode 100644 src/_includes/cassettebeasts/hero.html delete mode 100644 src/_includes/cassettebeasts/navbar.html delete mode 100644 src/_includes/cassettebeasts/shrineinfo.html rename src/_includes/{asummersend/myplaylist.html => components/aseplaylist.vto} (87%) rename src/_includes/{global/macros.njk => components/functions.vto} (52%) rename src/_includes/{main/my-button.html => components/my-button.vto} (96%) rename src/_includes/{global/pagination-oldnew.html => components/pagination-oldnew.vto} (77%) rename src/_includes/{main/statuscafe.html => components/statuscafe.vto} (93%) rename src/_includes/{main/support-me.html => components/support-me.vto} (94%) rename src/_includes/{main/webcliques.html => components/webcliques.vto} (95%) delete mode 100644 src/_includes/global/baselayout.html delete mode 100644 src/_includes/global/content.html delete mode 100644 src/_includes/global/root.html create mode 100644 src/_includes/layouts/asummersend.vto create mode 100644 src/_includes/layouts/base.vto create mode 100644 src/_includes/layouts/cassettebeasts.vto create mode 100644 src/_includes/layouts/content.vto rename src/_includes/{main/links.html => layouts/links.vto} (56%) rename src/_includes/{main/hero.html => layouts/main.vto} (70%) create mode 100644 src/_includes/layouts/pokemonoras.vto create mode 100644 src/_includes/layouts/root.vto create mode 100644 src/_includes/layouts/slashpage.vto create mode 100644 src/_includes/layouts/starwarskotor.vto delete mode 100644 src/_includes/main/archive.html delete mode 100644 src/_includes/main/base.html delete mode 100644 src/_includes/main/changelogs-list.html delete mode 100644 src/_includes/main/content.html delete mode 100644 src/_includes/main/footer.html delete mode 100644 src/_includes/main/navbar.html delete mode 100644 src/_includes/main/slashpage.html create mode 100644 src/_includes/partials/archive.vto create mode 100644 src/_includes/partials/changelogs-list.vto rename src/_includes/{main/changelogs.html => partials/changelogs.vto} (80%) rename src/_includes/{main/content-nav.html => partials/content-nav.vto} (67%) rename src/_includes/{global/css-bundle.html => partials/css.vto} (75%) rename src/_includes/{global/feeds.html => partials/feeds.vto} (100%) rename src/_includes/{global/fonts.html => partials/fonts.vto} (100%) rename src/_includes/{global/footer.html => partials/footer.vto} (90%) rename src/_includes/{global/h-card.html => partials/h-card.vto} (100%) rename src/_includes/{global/hero.html => partials/hero.vto} (84%) rename src/_includes/{starwarskotor/modlist-info.md => partials/kotor-modlist.md} (100%) rename src/_includes/{global/meta.html => partials/meta.vto} (76%) rename src/_includes/{global/navbar.html => partials/navbar.vto} (84%) rename src/_includes/{global/shrineinfo.html => partials/shrineinfo.vto} (83%) rename src/_includes/{global/toc.html => partials/toc.vto} (94%) rename src/_includes/{global/top-btn.html => partials/top-btn.vto} (98%) delete mode 100644 src/_includes/pokemonoras/base.html delete mode 100644 src/_includes/pokemonoras/content.html delete mode 100644 src/_includes/pokemonoras/footer.html delete mode 100644 src/_includes/pokemonoras/hero.html delete mode 100644 src/_includes/pokemonoras/navbar.html delete mode 100644 src/_includes/pokemonoras/shrineinfo.html delete mode 100644 src/_includes/starwarskotor/base.html delete mode 100644 src/_includes/starwarskotor/content.html delete mode 100644 src/_includes/starwarskotor/footer.html delete mode 100644 src/_includes/starwarskotor/hero.html delete mode 100644 src/_includes/starwarskotor/navbar.html delete mode 100644 src/_includes/starwarskotor/shrineinfo.html rename src/assets/css/{misc.css => root.css} (100%) rename src/{index.html => index.vto} (95%) rename src/links/linkgroups/{joined.njk => joined.vto} (97%) rename src/links/linkgroups/{websites.html => websites.vto} (94%) rename src/slashes/archive/{archive.html => archive.vto} (61%) rename src/slashes/archive/{categories.html => categories.vto} (58%) delete mode 100644 src/slashes/archive/category.html create mode 100644 src/slashes/archive/category.vto rename src/slashes/footerlinks/{changelogs.html => changelogs.vto} (52%) rename src/slashes/footerlinks/{sitemap.html => sitemap.vto} (78%) rename src/slashes/navbarlinks/{adoptables.html => adoptables.vto} (88%) rename src/slashes/navbarlinks/{blog.html => blog.vto} (77%) rename src/slashes/navbarlinks/{guestbook.html => guestbook.vto} (84%) rename src/slashes/navbarlinks/{links.html => links.vto} (100%) rename src/slashes/navbarlinks/{shrines.html => shrines.vto} (75%) diff --git a/src/404.html b/src/404.vto similarity index 93% rename from src/404.html rename to src/404.vto index 1e9eda87..15135f58 100644 --- a/src/404.html +++ b/src/404.vto @@ -1,5 +1,5 @@ --- -layout: global/root +layout: layouts/root title: "404: Page Not Found" h1: "404: Page Not Found" eleventyExcludeFromCollections: true diff --git a/src/_config/filters.js b/src/_config/filters.js index d39765bf..a956fa97 100644 --- a/src/_config/filters.js +++ b/src/_config/filters.js @@ -25,8 +25,11 @@ export default function(eleventyConfig) { return array.slice(0, maximum); }); + // Filter: Collection item count + eleventyConfig.addFilter("itemCount", (array) => array.length() ); + // Filter: Thousands separator eleventyConfig.addFilter("thousands", function(num) { return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); }); -} \ No newline at end of file +} diff --git a/src/_includes/asummersend/base.html b/src/_includes/asummersend/base.html deleted file mode 100644 index 62384048..00000000 --- a/src/_includes/asummersend/base.html +++ /dev/null @@ -1,19 +0,0 @@ -{%- css %}{% include "src/assets/css/asummersend.css" %}{%- endcss %} - -{% extends "global/baselayout.html" %} - -{% block metaTitle %} - -{% endblock %} - -{% block pageTitle %} -{{ title + " | " if title }}A Summer’s End — Hong Kong 1986 Shrine | {{ sitemeta.siteName | safe }} -{% endblock %} - -{% block favicon %} - -{% endblock %} - -{% block hero %}{% include "asummersend/hero.html" %}{% endblock %} -{% block navbar %}{% include "asummersend/navbar.html" %}{% endblock %} -{% block footer %}{% include "asummersend/footer.html" %}{% endblock %} diff --git a/src/_includes/asummersend/content.html b/src/_includes/asummersend/content.html deleted file mode 100644 index c8908859..00000000 --- a/src/_includes/asummersend/content.html +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: asummersend/base ---- - -{% extends "global/content.html" %} - -{% block shrineInfo %}{% include "asummersend/shrineinfo.html" %}{% endblock %} diff --git a/src/_includes/asummersend/footer.html b/src/_includes/asummersend/footer.html deleted file mode 100644 index 86a60fe8..00000000 --- a/src/_includes/asummersend/footer.html +++ /dev/null @@ -1,6 +0,0 @@ -{% extends "global/footer.html" %} - -{% block footerContent %} -

Made with ♥ by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 16 February 2023

-{% endblock %} - diff --git a/src/_includes/asummersend/hero.html b/src/_includes/asummersend/hero.html deleted file mode 100644 index ccfb3355..00000000 --- a/src/_includes/asummersend/hero.html +++ /dev/null @@ -1,46 +0,0 @@ -{% extends "global/hero.html" %} - -{% block heroImg %} - - - Banner of A Summer’s End — Hong Kong 1986 Shrine - -{% endblock %} - -{% block eventScript %} -const todayEvent = getTodayEvent(); - -if (todayEvent) { - heroTopBarEl.classList.remove('hidden'); - heroTopBarEl.innerHTML = todayEvent; -} - -function getTodayEvent() { - const date = new Date(); - const month = date.getMonth() + 1; - const day = date.getDate(); - const year = date.getFullYear(); - - const aseReleaseDate = new Date("2020-04-23").getFullYear(); - const aseAnniversary = year - aseReleaseDate; - - if (month === 2 && day === 16) - return ` - Today is Michelle Cheung's birthday. Happy Birthday Michelle! - `; - else if (month === 4 && day === 23) - return ` - Today is the ${aseAnniversary}-year anniversary of the release of {% cite "A Summer’s End — Hong Kong 1986" %}! - `; - else if (month === 8 && day === 9) - return ` - Today is Cecelia Cortes' birthday. Happy Birthday Cecelia! - `; - else if (month === 12 && day === 28) - return ` - Today is Sam Wong's birthday. Happy Birthday Sam! - `; - else - return null; -} -{% endblock %} diff --git a/src/_includes/asummersend/navbar.html b/src/_includes/asummersend/navbar.html deleted file mode 100644 index f7926d45..00000000 --- a/src/_includes/asummersend/navbar.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends "global/navbar.html" %} -{% set shrineHomeUrl = "/shrines/asummersend/" %} - -{% block navbarLinks %} -{% set navPages = collections.all | eleventyNavigation("A Summer’s End Shrine") %} -{%- for entry in navPages %} -
  • - {{ entry.title }} -
  • -{%- endfor %} -{% endblock %} diff --git a/src/_includes/asummersend/shrineinfo.html b/src/_includes/asummersend/shrineinfo.html deleted file mode 100644 index c2209e89..00000000 --- a/src/_includes/asummersend/shrineinfo.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends "global/shrineinfo.html" %} - -{% block shrineAbout %} -

    Welcome to {{ sitemeta.siteAuthor.name }}'s shrine for {% cite "A Summer’s End — Hong Kong 1986" %}, an indie visual novel developed by Oracle and Bone. Set in 1980s Hong Kong, it tells of a love story between two women.

    -{% endblock %} - -{% block shrineLinks %} -
  • Official Website -
  • -
  • Steam
  • -
  • itch.io
  • -{% endblock %} diff --git a/src/_includes/cassettebeasts/base.html b/src/_includes/cassettebeasts/base.html deleted file mode 100644 index 61b2706c..00000000 --- a/src/_includes/cassettebeasts/base.html +++ /dev/null @@ -1,19 +0,0 @@ -{%- css %}{% include "src/assets/css/cassettebeasts.css" %}{%- endcss %} - -{% extends "global/baselayout.html" %} - -{% block metaTitle %} - -{% endblock %} - -{% block pageTitle %} -{{ title + " | " if title }}Cassette Beasts Shrine | {{ sitemeta.siteName | safe }} -{% endblock %} - -{% block favicon %} - -{% endblock %} - -{% block hero %}{% include "cassettebeasts/hero.html" %}{% endblock %} -{% block navbar %}{% include "cassettebeasts/navbar.html" %}{% endblock %} -{% block footer %}{% include "cassettebeasts/footer.html" %}{% endblock %} diff --git a/src/_includes/cassettebeasts/content.html b/src/_includes/cassettebeasts/content.html deleted file mode 100644 index d71db6d7..00000000 --- a/src/_includes/cassettebeasts/content.html +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: cassettebeasts/base ---- - -{% extends "global/content.html" %} - -{% block shrineInfo %}{% include "cassettebeasts/shrineinfo.html" %}{% endblock %} diff --git a/src/_includes/cassettebeasts/footer.html b/src/_includes/cassettebeasts/footer.html deleted file mode 100644 index f5cf6264..00000000 --- a/src/_includes/cassettebeasts/footer.html +++ /dev/null @@ -1,6 +0,0 @@ -{% extends "global/footer.html" %} - -{% block footerContent %} -

    Made with ♥ by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 3 August 2023

    -{% endblock %} - diff --git a/src/_includes/cassettebeasts/hero.html b/src/_includes/cassettebeasts/hero.html deleted file mode 100644 index 3350061e..00000000 --- a/src/_includes/cassettebeasts/hero.html +++ /dev/null @@ -1,40 +0,0 @@ -{% extends "global/hero.html" %} - -{% block heroImg %} - - - Banner of Cassette Beasts Shrine - -{% endblock %} - -{% block eventScript %} -const todayEvent = getTodayEvent(); - -if (todayEvent) { - heroTopBarEl.classList.remove('hidden'); - heroTopBarEl.innerHTML = todayEvent; -} - -function getTodayEvent() { - const date = new Date(); - const month = date.getMonth() + 1; - const day = date.getDate(); - const year = date.getFullYear(); - - const cbReleaseDate = new Date("2023-04-26").getFullYear(); - const pierReleaseDate = new Date("2023-10-04").getFullYear(); - const cbAnniversary = year - cbReleaseDate; - const pierAnniversary = year - pierReleaseDate; - - if (month === 4 && day === 26) - return ` - Today is the ${cbAnniversary}-year anniversary of the release of {% cite "Cassette Beasts" %}! - `; - else if (month === 10 && day === 4) - return ` - Today is the ${pierAnniversary}-year anniversary of the release of Pier of the Unknown, the first DLC expansion of {% cite "Cassette Beasts" %}! - `; - else - return null; -} -{% endblock %} diff --git a/src/_includes/cassettebeasts/navbar.html b/src/_includes/cassettebeasts/navbar.html deleted file mode 100644 index 568f05d0..00000000 --- a/src/_includes/cassettebeasts/navbar.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends "global/navbar.html" %} -{% set shrineHomeUrl = "/shrines/cassettebeasts/" %} - -{% block navbarLinks %} -{% set navPages = collections.all | eleventyNavigation("Cassette Beasts Shrine") %} -{%- for entry in navPages %} -
  • - {{ entry.title }} -
  • -{%- endfor %} -{% endblock %} diff --git a/src/_includes/cassettebeasts/shrineinfo.html b/src/_includes/cassettebeasts/shrineinfo.html deleted file mode 100644 index 8b22865b..00000000 --- a/src/_includes/cassettebeasts/shrineinfo.html +++ /dev/null @@ -1,14 +0,0 @@ -{% extends "global/shrineinfo.html" %} - -{% block shrineAbout %} -

    Welcome to {{ sitemeta.siteAuthor.name }}'s shrine for {% cite "Cassette Beasts" %}, an indie monster collecting turn-based open-world role-playing video game developed by Bytten Studio and published by Raw Fury.

    -{% endblock %} - -{% block shrineLinks %} -
  • Official Website -
  • -
  • Official Wiki
  • -
  • Steam
  • -
  • Bytten Studio
  • -
  • Cassette Beasts fanlisting
  • -{% endblock %} diff --git a/src/_includes/asummersend/myplaylist.html b/src/_includes/components/aseplaylist.vto similarity index 87% rename from src/_includes/asummersend/myplaylist.html rename to src/_includes/components/aseplaylist.vto index a7e1f06c..619254ba 100644 --- a/src/_includes/asummersend/myplaylist.html +++ b/src/_includes/components/aseplaylist.vto @@ -1,13 +1,13 @@ -{% macro myASEPlaylist(intro) %} -{% imgFigure "/assets/projects/playlists/My-Dear-Summer-Lover-cover.avif", "Cover image of A Summer’s End fanmix 'My Dear Summer Lover: A Sam x Michelle Fanmix'" %} +{{ export function myASEPlaylist(intro) }} +{{ imgFigure "/assets/projects/playlists/My-Dear-Summer-Lover-cover.avif", "Cover image of A Summer’s End fanmix 'My Dear Summer Lover: A Sam x Michelle Fanmix'" }} [Image description: Sam and Michelle from A Summer’s End almost kisses, with a play symbol and text on the top left corner, and the text "My Dear Summer Lover: A Sam x Michelle Fanmix" in a digital style font in front.] -{% endimgFigure %} +{{ /imgFigure }} -{{ intro }} [{% cite "A Summer’s End — Hong Kong 1986" %}](https://www.asummersend.com/home), dedicated to Sam and Michelle’s love story. +{{ intro }} [{{ cite "A Summer’s End — Hong Kong 1986" }}](https://www.asummersend.com/home), dedicated to Sam and Michelle’s love story. This mix contains mostly Cantonese and English songs, with one Mandarin song. Majority of these songs were performed by Hong Kong artists and released in the 80s, because A Summer’s End took place in Hong Kong and in the 80s. -I have carefully selected and arranged these tracks, so the lyrics would reflect Sam and Michelle’s relationship development throughout {% cite "A Summer’s End" %}. Therefore, the content of this mix could be considered spoilers if you have not played the visual novel. +I have carefully selected and arranged these tracks, so the lyrics would reflect Sam and Michelle’s relationship development throughout {{ cite "A Summer’s End" }}. Therefore, the content of this mix could be considered spoilers if you have not played the visual novel. Since Oracle and Bone has cited Anita Mui as a major inspiration for them and this visual novel, I have also included multiple songs performed by Anita Mui in this mix. Because A Summer’s End is a lesbian story, when I was choosing which songs to include in this mix, I also prioritize songs that were performed by women artists. @@ -28,4 +28,4 @@ Tracklist: [Listen on Spotify](https://open.spotify.com/playlist/3SIV7VjSKhspYwugVIQjug){.link-btn} -{% endmacro %} \ No newline at end of file +{{ /export }} diff --git a/src/_includes/global/macros.njk b/src/_includes/components/functions.vto similarity index 52% rename from src/_includes/global/macros.njk rename to src/_includes/components/functions.vto index c8c26fd6..f93e7f49 100644 --- a/src/_includes/global/macros.njk +++ b/src/_includes/components/functions.vto @@ -1,26 +1,26 @@ -{%- macro articleList(tag) -%} +{{ export function articleList(tag) }}
      - {%- for article in collections[tag] -%} + {{ for article of collections[tag] }}
    • {{ article.data.articleTitle }}

      - +
    • - {%- endfor -%} + {{ /for }}
    -{%- endmacro -%} +{{ /export }} -{%- macro modEntry(params) -%} -{% headingAnchor 3 %}{{ params.title }}{% endheadingAnchor %} +{{ export function modEntry(params) }} +{{ headingAnchor 3 }}{{ params.title }}{{ \/headingAnchor }}
    Banner of {{ params.title }} mod -

    {{ params.desc | safe }}

    +

    {{ params.desc }}

    Download the mod:

    - {%- for download in params.downloads -%} + {{ for download of params.downloads }} {{ download.site }} - {%- endfor -%} + {{ /for }}
    -{%- endmacro -%} +{{ /export }} diff --git a/src/_includes/main/my-button.html b/src/_includes/components/my-button.vto similarity index 96% rename from src/_includes/main/my-button.html rename to src/_includes/components/my-button.vto index c6a27631..80cc5359 100644 --- a/src/_includes/main/my-button.html +++ b/src/_includes/components/my-button.vto @@ -5,9 +5,9 @@ Leilukin's Hub website button with 200×40 pixel size -{%- css %} +{{- css }} .my-btn { align-items: center; margin-top: 1em; } -{% endcss %} \ No newline at end of file +{{ /css }} diff --git a/src/_includes/global/pagination-oldnew.html b/src/_includes/components/pagination-oldnew.vto similarity index 77% rename from src/_includes/global/pagination-oldnew.html rename to src/_includes/components/pagination-oldnew.vto index 14a6cfdd..2dde9dd1 100644 --- a/src/_includes/global/pagination-oldnew.html +++ b/src/_includes/components/pagination-oldnew.vto @@ -1,63 +1,63 @@ -{% set firstLabel %} +{{ set firstLabel }} -Newest{% endset %} +Newest{{ /set }} -{% set prevLabel %} +{{ set prevLabel }} -Newer{% endset %} +Newer{{ /set }} -{% set nextLabel %}Older +{{ set nextLabel }}Older -{% endset %} +{{ /set }} -{% set lastLabel %}Oldest +{{ set lastLabel }}Oldest -{% endset %} +{{ /set }} -{%- css %} +{{- css }} .pagination__wrapper { display: grid; place-content: center; @@ -95,4 +95,4 @@ Newer{% endset %} } .pagination li a:focus { outline: none; } -{% endcss %} +{{ /css }} diff --git a/src/_includes/main/statuscafe.html b/src/_includes/components/statuscafe.vto similarity index 93% rename from src/_includes/main/statuscafe.html rename to src/_includes/components/statuscafe.vto index 94f15aef..ee0038cd 100644 --- a/src/_includes/main/statuscafe.html +++ b/src/_includes/components/statuscafe.vto @@ -10,9 +10,9 @@

    View my statuses on status.cafe

    -{%- css %}#statuscafe-content { margin-bottom: 0.5em; }{% endcss %} +{{- css }}#statuscafe-content { margin-bottom: 0.5em; }{{ /css }} -{%- js %} +{{- js }} const statusCafeContent = document.getElementById("statuscafe-content"); statusCafeContent.innerHTML = `

    Fetching data from status.cafe...

    @@ -36,4 +36,4 @@ const fetchStatusCafe = async () => { } }; fetchStatusCafe(); -{% endjs %} +{{ /js }} diff --git a/src/_includes/main/support-me.html b/src/_includes/components/support-me.vto similarity index 94% rename from src/_includes/main/support-me.html rename to src/_includes/components/support-me.vto index 231409fd..7416773d 100644 --- a/src/_includes/main/support-me.html +++ b/src/_includes/components/support-me.vto @@ -4,7 +4,7 @@ Buy Me a Coffee at ko-fi.com -{%- css %} +{{- css }} .support-me { display: flex; flex-wrap: wrap; @@ -12,4 +12,4 @@ align-items: center; margin-top: 0.7em; } -{% endcss %} +{{ /css }} diff --git a/src/_includes/main/webcliques.html b/src/_includes/components/webcliques.vto similarity index 95% rename from src/_includes/main/webcliques.html rename to src/_includes/components/webcliques.vto index a2953a70..26643207 100644 --- a/src/_includes/main/webcliques.html +++ b/src/_includes/components/webcliques.vto @@ -1,8 +1,8 @@ -{%- css %}.color-bg { padding: 0.125em 0.3em; }{% endcss %} +{{- css }}.color-bg { padding: 0.125em 0.3em; }{{ /css }} -{%- macro webCliqueImg(file, width, height, alt="") -%} +{{ function webCliqueImg(file, width, height, alt="") -}} {{ alt }} -{%- endmacro -%} +{{ /function }}
    • diff --git a/src/_includes/global/baselayout.html b/src/_includes/global/baselayout.html deleted file mode 100644 index fd234d2c..00000000 --- a/src/_includes/global/baselayout.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - {# Open Graph Meta #} - {% block metaTitle %} - - {% endblock %} - {% include "global/meta.html" %} - {# Feeds #} - {% include "global/feeds.html" %} - {# Fonts #} - {% include "global/fonts.html" %} - {# CSS #} - {% include "global/css-bundle.html" %} - {% if hasTooltips %} - - {% endif %} - - {# Favicon #} - {% block favicon %}{% endblock %} - {# Verifications #} - - - - {# JavaScript #} - - {% if toc %} - - {% endif %} - {% if hasCodeBlock %} - - {% endif %} - {% if hasTooltips %} - - {% endif %} - - - {% block pageTitle %}{{ title + " | " if title }}{{ sitemeta.siteName | safe }}{% endblock %} - - - - - {% block hero %}{% include "global/hero.html" %}{% endblock %} - {% block navbar %}{% include "global/navbar.html" %}{% endblock %} -
      - {{ content | safe }} -
      - {% block footer %}{% include "global/footer.html" %}{% endblock %} - - diff --git a/src/_includes/global/content.html b/src/_includes/global/content.html deleted file mode 100644 index 392cde51..00000000 --- a/src/_includes/global/content.html +++ /dev/null @@ -1,115 +0,0 @@ -
      - {% if isArticle or hasBreadcrumbs %} - - {% endif %} - -

      {{ articleTitle or pageTitle or title }}

      - - {% if isArticle %} - - {% else %} - {% if desc %} -

      {{ desc }}

      - {% endif %} - {% endif %} -
      - - - {% if toc %} - {% include "global/toc.html" %} - {% endif %} - - {% set contentEl = "article" if isArticle or articleElement else "div" %} - - <{{contentEl}} class="content{{' content--divided' if isContentDivided }}"> - {{ content | safe }} - - {% if tags and tags.includes("posts") %} - {%- if collections.posts.length > 1 %} - - {%- endif %} - {% endif %} - - - {% if - tags and tags.includes("articles") - or tags and tags.includes("posts") - or page.url === "/articles/" - or tags and tags.includes("blog pages") - %} - {% include "main/content-nav.html" %} - {% endif %} - - {% block shrineInfo %}{% endblock %} - - -{%- css %} -.breadcrumbs { - margin-bottom: 0.7em; - display: flex; - gap: 0.5em; - flex-wrap: wrap; - justify-content: center; -} - -.blog__post--pagination { - padding-top: 1em; - margin-block-start: 2.5em; - border-top: 0.1em solid var(--clr-title-border); -} - -.blog__post--nextprev { - list-style-type: ""; - padding: 0; - margin: 0; - display: grid; - gap: 0.7em; - grid-template-columns: repeat(2, 1fr); - grid-template-areas: 'prev next'; -} - -.blog__post--prev { grid-area: prev; } -.blog__post--next { grid-area: next; } -{% endcss %} diff --git a/src/_includes/global/root.html b/src/_includes/global/root.html deleted file mode 100644 index ee357aee..00000000 --- a/src/_includes/global/root.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - {# Open Graph meta #} - - {% include "global/meta.html" %} - - {# Feeds #} - {% include "global/feeds.html" %} - - {# Style #} - {% include "global/fonts.html" %} - - - {% if title %} {{ title }} | {% endif %} {{ sitemeta.siteName }} - - -
      - {{ sitemeta.siteName }} website banner -

      {{ h1 }}

      - - {{ content | safe }} -
      - - diff --git a/src/_includes/layouts/asummersend.vto b/src/_includes/layouts/asummersend.vto new file mode 100644 index 00000000..bbfc55b0 --- /dev/null +++ b/src/_includes/layouts/asummersend.vto @@ -0,0 +1,84 @@ +--- +layout: layouts/content +sectionName: A Summer’s End — Hong Kong 1986 Shrine +--- +{{- css }}{{ include "src/assets/css/asummersend.css" }}{{- /css }} + +{{ set favicon }} + +{{ /set }} + +{{ layout "partials/hero.vto" }} +{{ set heroImg }} + + + Banner of A Summer’s End — Hong Kong 1986 Shrine + +{{ /set }} + +{{ set eventScript }} +const todayEvent = getTodayEvent(); + +if (todayEvent) { + heroTopBarEl.classList.remove('hidden'); + heroTopBarEl.innerHTML = todayEvent; +} + +function getTodayEvent() { + const date = new Date(); + const month = date.getMonth() + 1; + const day = date.getDate(); + const year = date.getFullYear(); + + const aseReleaseDate = new Date("2020-04-23").getFullYear(); + const aseAnniversary = year - aseReleaseDate; + + if (month === 2 && day === 16) + return ` + Today is Michelle Cheung's birthday. Happy Birthday Michelle! + `; + else if (month === 4 && day === 23) + return ` + Today is the ${aseAnniversary}-year anniversary of the release of {{ cite "A Summer’s End — Hong Kong 1986" }}! + `; + else if (month === 8 && day === 9) + return ` + Today is Cecelia Cortes' birthday. Happy Birthday Cecelia! + `; + else if (month === 12 && day === 28) + return ` + Today is Sam Wong's birthday. Happy Birthday Sam! + `; + else + return null; +} +{{ /set }} +{{ /layout }} + +{{ layout "partials/navbar.vto" }} +{{ set navbarLinks }} +{{ set navPages = collections.all |> eleventyNavigation("A Summer’s End Shrine") }} +{{- for entry of navPages }} +
    • + {{ entry.title }} +
    • +{{ /for }} +{{ /set }} +{{ /layout }} + +{{ layout "partials/shrineinfo.vto" }} +{{ set shrineAbout }} +

      Welcome to {{ sitemeta.siteAuthor.name }}'s shrine for {{ cite "A Summer’s End — Hong Kong 1986" }}, an indie visual novel developed by Oracle and Bone. Set in 1980s Hong Kong, it tells of a love story between two women.

      +{{ /set }} + +{{ set shrineLinks }} +
    • Official Website +
    • +
    • Steam
    • +
    • itch.io
    • +{{ /set }} +{{ /layout }} + +{{ layout "partials/footer.vto" }} +

      Made with ♥ by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 16 February 2023

      +{{ /layout }} diff --git a/src/_includes/layouts/base.vto b/src/_includes/layouts/base.vto new file mode 100644 index 00000000..1aeaf9f2 --- /dev/null +++ b/src/_includes/layouts/base.vto @@ -0,0 +1,53 @@ + + + + + + + + + {{ include "partials/meta.vto" }} + + {{ include "partials/feeds.vto" }} + + {{ include "partials/fonts.vto" }} + + {{ include "partials/css.vto" }} + {{ if hasTooltips }} + + {{ /if }} + + + {{ favicon }} + + + + + + + {{ if toc }} + + {{ /if }} + {{ if hasCodeBlock }} + + {{ /if }} + {{ if hasTooltips }} + + {{ /if }} + + + {{- title ? title + " | " : "" -}} + {{- sectionName ? sectionName + " | " : "" -}} + {{- sitemeta.siteName -}} + + + + + {{ include "partials/hero.vto" }} + {{ include "partials/navbar.vto" }} +
      + {{ content }} +
      + {{ include "partials/footer.vto" }} + + diff --git a/src/_includes/layouts/cassettebeasts.vto b/src/_includes/layouts/cassettebeasts.vto new file mode 100644 index 00000000..f0b446d2 --- /dev/null +++ b/src/_includes/layouts/cassettebeasts.vto @@ -0,0 +1,82 @@ +--- +layout: layouts/content +sectionName: Cassette Beasts Shrine +--- +{{- css }}{{ include "src/assets/css/cassettebeasts.css" }}{{- /css }} + +{{ set favicon }} + +{{ /set }} + +{{ layout "partials/hero.vto" }} +{{ set heroImg }} + + + Banner of Cassette Beasts Shrine + +{{ /set }} + +{{ set eventScript }} +const todayEvent = getTodayEvent(); + +if (todayEvent) { + heroTopBarEl.classList.remove('hidden'); + heroTopBarEl.innerHTML = todayEvent; +} + +function getTodayEvent() { + const date = new Date(); + const month = date.getMonth() + 1; + const day = date.getDate(); + const year = date.getFullYear(); + + const cbReleaseDate = new Date("2023-04-26").getFullYear(); + const pierReleaseDate = new Date("2023-10-04").getFullYear(); + const cbAnniversary = year - cbReleaseDate; + const pierAnniversary = year - pierReleaseDate; + + if (month === 4 && day === 26) + return ` + Today is the ${cbAnniversary}-year anniversary of the release of {{ cite "Cassette Beasts" }}! + `; + else if (month === 10 && day === 4) + return ` + Today is the ${pierAnniversary}-year anniversary of the release of Pier of the Unknown, the first DLC expansion of {{ cite "Cassette Beasts" }}! + `; + else + return null; +} +{{ /set }} +{{ /layout }} + +{{ layout "partials/navbar.vto" }} +{{ set shrineHomeUrl = "/shrines/cassettebeasts/" }} + +{{ set navbarLinks }} +{{ set navPages = collections.all | eleventyNavigation("Cassette Beasts Shrine") }} +{{ for entry of navPages }} +
    • + {{ entry.title }} +
    • +{{ /for }} +{{ /set }} +{{ /layout }} + +{{ layout "partials/shrineinfo.vto" }} +{{ set shrineAbout }} +

      Welcome to {{ sitemeta.siteAuthor.name }}'s shrine for {{ cite "Cassette Beasts" }}, an indie monster collecting turn-based open-world role-playing video game developed by Bytten Studio and published by Raw Fury.

      +{{ /set }} + +{{ set shrineLinks }} +
    • Official Website +
    • +
    • Official Wiki
    • +
    • Steam
    • +
    • Bytten Studio
    • +
    • Cassette Beasts fanlisting
    • +{{ /set }} +{{ /layout }} + +{{ layout "partials/footer.vto" }} +

      Made with ♥ by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 3 August 2023

      +{{ /layout }} diff --git a/src/_includes/layouts/content.vto b/src/_includes/layouts/content.vto new file mode 100644 index 00000000..b5f9870f --- /dev/null +++ b/src/_includes/layouts/content.vto @@ -0,0 +1,118 @@ +--- +layout: layouts/base +--- +
      + {{ if isArticle || hasBreadcrumbs }} + + {{ /if }} + +

      {{ articleTitle || pageTitle || title }}

      + + {{ if isArticle }} + + {{ else }} + {{ if desc }} +

      {{ desc }}

      + {{ /if }} + {{ /if }} +
      + + + {{ if toc }} + {{ include "partials/toc.vto" }} + {{ /if }} + + {{ set contentEl = (isArticle || articleElement) ? "article" : "div" }} + + <{{contentEl}} class="content{{ isContentDivided ? ' content--divided' : '' }}"> + {{ content }} + + {{ if tags && tags.includes("posts") }} + {{ if collections.posts.length > 1 }} + + {{ /if }} + {{ /if }} + + + {{ if + (tags && tags.includes("articles")) + || (tags && tags.includes("posts")) + || (page.url === "/articles/") + || (tags && tags.includes("blog pages")) + }} + {{ include "components/content-nav.vto" }} + {{ /if }} + + {{ shrineInfo }} + + +{{- css }} +.breadcrumbs { + margin-bottom: 0.7em; + display: flex; + gap: 0.5em; + flex-wrap: wrap; + justify-content: center; +} + +.blog__post--pagination { + padding-top: 1em; + margin-block-start: 2.5em; + border-top: 0.1em solid var(--clr-title-border); +} + +.blog__post--nextprev { + list-style-type: ""; + padding: 0; + margin: 0; + display: grid; + gap: 0.7em; + grid-template-columns: repeat(2, 1fr); + grid-template-areas: 'prev next'; +} + +.blog__post--prev { grid-area: prev; } +.blog__post--next { grid-area: next; } +{{ /css }} diff --git a/src/_includes/main/links.html b/src/_includes/layouts/links.vto similarity index 56% rename from src/_includes/main/links.html rename to src/_includes/layouts/links.vto index f723cb65..447a59f1 100644 --- a/src/_includes/main/links.html +++ b/src/_includes/layouts/links.vto @@ -1,13 +1,13 @@ --- -layout: main/content.html +layout: layouts/content articleElement: true isContentDivided: true --- -{% set linkGroups = collections["link groups"] %} +{{ set linkGroups = collections["link groups"] }}

      Link to My Website

      - {% include "main/my-button.html" %} + {{ include "components/my-button.vto" }}
      @@ -17,32 +17,32 @@ isContentDivided: true
      - {% for group in linkGroups %} -
      - {% headingAnchor 2 %}{{ group.data.title }}{% endheadingAnchor %} + {{ for group of linkGroups }} +
      + {{ headingAnchor 2 }}{{ group.data.title }}{{ /headingAnchor }} - {% if group.data.toc %} + {{ if group.data.toc }}

      Table of Contents

      - {{ group.content | toc | safe }} + {{ group.content |> toc }}
      - {% endif %} + {{ /if }} - {{ group.content | safe }} + {{ group.content }} - {% if group.data.updated %} -

      (This {{ group.data.title }} list was last updated on )

      - {% endif %} + {{ if group.data.updated }} +

      (This {{ group.data.title }} list was last updated on )

      + {{ /if }} Back to tabs
      - {%- endfor %} + {{ /for }}
      diff --git a/src/_includes/main/hero.html b/src/_includes/layouts/main.vto similarity index 70% rename from src/_includes/main/hero.html rename to src/_includes/layouts/main.vto index d41d9515..166ab08d 100644 --- a/src/_includes/main/hero.html +++ b/src/_includes/layouts/main.vto @@ -1,16 +1,16 @@ -{% extends "global/hero.html" %} +--- +layout: layouts/base +--- +{{ layout "partials/hero.vto" }} +{{ set heroImg }}Banner of Leilukin's Hub{{ /set }} -{% block heroImg %} -Banner of Leilukin's Hub -{% endblock %} - -{% set heroDropShadow %} +{{ set heroDropShadow }} drop-shadow(0.1rem 0.1rem 0.2rem black) drop-shadow(0.1rem 0.1rem 0.2rem rgba(30, 30, 30, 0.8)) -{% endset%} -{%- css %}.hero img { filter: {{ heroDropShadow }}; }{% endcss %} +{{ /set }} +{{- css }}.hero img { filter: {{ heroDropShadow }}; }{{ /css }} -{% block eventScript %} +{{ set eventScript }} const todayEvent = getTodayEvent(); if (todayEvent) { @@ -138,4 +138,44 @@ function getTodayEvent() { else return null; } -{% endblock %} +{{ /set }} +{{ /layout }} + +{{ layout "partials/navbar.vto" }} +{{ set navbarLinks }} +{{ set currentUrl = page.url }} +{{ set navPages = collections["navbar links"] |> eleventyNavigation }} +{{ for entry of navPages }} +
    • + {{ entry.title }} +
    • +{{ /for }} +{{ /set }} +{{ /layout }} + +{{ layout "partials/footer.vto" }} +

      Footer Navigation:

      +{{ set currentUrl = page.url }} + +

      Made with ♥ by {{ sitemeta.siteAuthor.name }} since 11 September 2022

      +{{ /layout }} diff --git a/src/_includes/layouts/pokemonoras.vto b/src/_includes/layouts/pokemonoras.vto new file mode 100644 index 00000000..658c5542 --- /dev/null +++ b/src/_includes/layouts/pokemonoras.vto @@ -0,0 +1,72 @@ +--- +layout: layouts/content +sectionName: Pokémon Omega Ruby and Alpha Sapphire Shrine +--- +{{- css }}{{ include "src/assets/css/pokemonoras.css" }}{{- /css }} + +{{ set favicon }} + +{{ /set }} + +{{ layout "partials/hero.vto" }} +{{ set heroImg }} + + + Banner of Pokémon Omega Ruby and Alpha Sapphire Shrine + +{{ /set }} + +{{ set eventScript }} +const todayEvent = getTodayEvent(); + +if (todayEvent) { + heroTopBarEl.classList.remove('hidden'); + heroTopBarEl.innerHTML = todayEvent; +} + +function getTodayEvent() { + const date = new Date(); + const month = date.getMonth() + 1; + const day = date.getDate(); + const year = date.getFullYear(); + + const orasReleaseDate = new Date("2014-11-21").getFullYear(); + const orasAnniversary = year - orasReleaseDate; + + if (month === 11 && day === 21) + return ` + Today is the ${orasAnniversary}-year anniversary of the release of Pokémon Omega Ruby" and Alpha Sapphire! + `; + else + return null; +} +{{ /set }} +{{ /layout }} + +{{ layout "partials/navbar.vto" }} +{{ set shrineHomeUrl = "/shrines/pokemonoras/" }} + +{{ set navbarLinks }} +{{ set navPages = collections.all |> eleventyNavigation("ORAS Shrine") }} +{{ for entry of navPages }} +
    • + {{ entry.title }} +
    • +{{ /for }} +{{ /set }} +{{ /layout }} + +{{ layout "partials/shrineinfo.vto" }} +{{ set shrineAbout }} +

      Welcome to {{ sitemeta.siteAuthor.name }}'s shrine for {{ cite "Pokémon Omega Ruby and Alpha Sapphire" }}, remakes of the 2002 Game Boy Advance role-playing video games {{ cite "Pokémon Ruby" }} and {{ cite "Pokémon Sapphire" }}. The games are part of the sixth generation of the {{ cite "Pokémon" }} main series of video games, developed by Game Freak and published by The Pokémon Company and Nintendo for the Nintendo 3DS.

      +{{ /set }} + +{{ set shrineLinks }} +
    • Bulbapedia
    • +
    • Pokémon Ruby, Sapphire, Omega Ruby and Alpha Sapphire fanlisting
    • +{{ /set }} +{{ /layout }} + +{{ layout "partials/footer.vto" }} +

      Made with ♥ by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 21 November 2024

      +{{ /layout }} diff --git a/src/_includes/layouts/root.vto b/src/_includes/layouts/root.vto new file mode 100644 index 00000000..651c0588 --- /dev/null +++ b/src/_includes/layouts/root.vto @@ -0,0 +1,27 @@ + + + + + + + + + + {{ include "partials/meta.vto" }} + + {{ include "partials/feeds.vto" }} + + {{ include "partials/fonts.vto" }} + + + {{ if title }} {{ title }} | {{ /if }} {{ sitemeta.siteName }} + + +
      + {{ sitemeta.siteName }} website banner +

      {{ h1 }}

      + + {{ content }} +
      + + diff --git a/src/_includes/layouts/slashpage.vto b/src/_includes/layouts/slashpage.vto new file mode 100644 index 00000000..3aa35328 --- /dev/null +++ b/src/_includes/layouts/slashpage.vto @@ -0,0 +1,9 @@ +--- +layout: layout/content +--- + +{{ content }} + +{{ if updated }} +

      (This {{ keyword ? keyword : "page" }} was last updated on )

      +{{ /if }} diff --git a/src/_includes/layouts/starwarskotor.vto b/src/_includes/layouts/starwarskotor.vto new file mode 100644 index 00000000..37d31d44 --- /dev/null +++ b/src/_includes/layouts/starwarskotor.vto @@ -0,0 +1,79 @@ +--- +layout: layouts/content +sectionName: "Star Wars: Knights of the Old Republic Shrine" +--- +{{- css }}{{ include "src/assets/css/starwarskotor.css" }}{{- /css }} + +{{ set favicon }} + +{{ /set }} + +{{ layout "partials/hero.vto" }} +{{ set heroImg }} + + + anner of Star Wars: Knights of the Old Republic Shrine + +{{ /set }} + +{{ set eventScript }} +const todayEvent = getTodayEvent(); + +if (todayEvent) { + heroTopBarEl.classList.remove('hidden'); + heroTopBarEl.innerHTML = todayEvent; +} + +function getTodayEvent() { + const date = new Date(); + const month = date.getMonth() + 1; + const day = date.getDate(); + const year = date.getFullYear(); + + const kotor1ReleaseDate = new Date("2003-07-15").getFullYear(); + const kotor2ReleaseDate = new Date("2004-12-06").getFullYear(); + const kotor1Anniversary = year - kotor1ReleaseDate; + const kotor2Anniversary = year - kotor2ReleaseDate; + + if (month === 7 && day === 15) + return ` + Today is the ${kotor1Anniversary}-year anniversary of the release of Star Wars: Knihgts of the Old Republic + `; + else if (month === 12 && day === 6) + return ` + Today is the ${kotor2Anniversary}-year anniversary of the release of Star Wars: Knights of the Old Republic II — The Sith Lords + `; + else + return null; +} +{{ /set }} +{{ /layout }} + +{{ layout "partials/navbar.vto" }} +{{ set shrineHomeUrl = "/shrines/starwarskotor/" }} + +{{ set navbarLinks }} +{{ set navPages = collections.all | eleventyNavigation("KotOR Shrine") }} +{{ for entry of navPages }} +
    • + {{ entry.title }} +
    • +{{ /for }} +{{ /set }} +{{ /layout }} + +{{ layout "partials/shrineinfo.vto" }} +{{ set shrineAbout }} +

      Welcome to {{ sitemeta.siteAuthor.name }}'s shrine for {{ cite "Star Wars: Knights of the Old Republic" }}, a series of role-playing video games set in the {{ cite "Star Wars" }} universe, taking place almost 4,000 years before the events of the Skywalker film saga.

      +{{ /set }} + +{{ set shrineLinks }} +
    • KOTOR Community Portal
    • +
    • Star Wars: KotOR fanlisting
    • +
    • Star Wars: KotOR II fanlisting
    • +{{ /set }} +{{ /layout }} + +{{ layout "partials/footer.vto" }} +

      Made with ♥ and the Force by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 17 February 2023

      +{{ /layout }} diff --git a/src/_includes/main/archive.html b/src/_includes/main/archive.html deleted file mode 100644 index 1c07d8bd..00000000 --- a/src/_includes/main/archive.html +++ /dev/null @@ -1,16 +0,0 @@ - \ No newline at end of file diff --git a/src/_includes/main/base.html b/src/_includes/main/base.html deleted file mode 100644 index 1a5c2c6c..00000000 --- a/src/_includes/main/base.html +++ /dev/null @@ -1,5 +0,0 @@ -{% extends "global/baselayout.html" %} - -{% block hero %}{% include "main/hero.html" %}{% endblock %} -{% block navbar %}{% include "main/navbar.html" %}{% endblock %} -{% block footer %}{% include "main/footer.html" %}{% endblock %} diff --git a/src/_includes/main/changelogs-list.html b/src/_includes/main/changelogs-list.html deleted file mode 100644 index e10d7277..00000000 --- a/src/_includes/main/changelogs-list.html +++ /dev/null @@ -1,7 +0,0 @@ -{% for log in changelogList | reverse %} -{% headingAnchor 2, log.fileSlug %} -{{ log.date | formatDate }} -{% endheadingAnchor %} - -{{ log.content | safe }} -{%- endfor %} diff --git a/src/_includes/main/content.html b/src/_includes/main/content.html deleted file mode 100644 index bcc19966..00000000 --- a/src/_includes/main/content.html +++ /dev/null @@ -1,5 +0,0 @@ ---- -layout: main/base ---- - -{% extends "global/content.html" %} diff --git a/src/_includes/main/footer.html b/src/_includes/main/footer.html deleted file mode 100644 index ac0f8f81..00000000 --- a/src/_includes/main/footer.html +++ /dev/null @@ -1,29 +0,0 @@ -{% extends "global/footer.html" %} - -{% block footerContent %} -

      Footer Navigation:

      -{% set currentUrl %}{{ page.url }}{% endset %} - -

      Made with ♥ by {{ sitemeta.siteAuthor.name }} since 11 September 2022

      -{% endblock %} - diff --git a/src/_includes/main/navbar.html b/src/_includes/main/navbar.html deleted file mode 100644 index 91a199c0..00000000 --- a/src/_includes/main/navbar.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends "global/navbar.html" %} - -{% block navbarLinks %} -{% set currentUrl %}{{ page.url }}{% endset %} -{% set navPages = collections["navbar links"] | eleventyNavigation %} -{%- for entry in navPages %} -
    • - {{ entry.title }} -
    • -{%- endfor %} -{% endblock %} diff --git a/src/_includes/main/slashpage.html b/src/_includes/main/slashpage.html deleted file mode 100644 index 2bb2fe5d..00000000 --- a/src/_includes/main/slashpage.html +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: main/content ---- - -{{ content | safe }} - -{% if updated %} -

      (This {{ keyword if keyword else "page" }} was last updated on )

      -{% endif %} diff --git a/src/_includes/partials/archive.vto b/src/_includes/partials/archive.vto new file mode 100644 index 00000000..c87f1adb --- /dev/null +++ b/src/_includes/partials/archive.vto @@ -0,0 +1,16 @@ + diff --git a/src/_includes/partials/changelogs-list.vto b/src/_includes/partials/changelogs-list.vto new file mode 100644 index 00000000..40c25326 --- /dev/null +++ b/src/_includes/partials/changelogs-list.vto @@ -0,0 +1,7 @@ +{{ for log of changelogList |> toReversed }} +{{ headingAnchor 2, log.fileSlug }} +{{ log.date |> formatDate }} +{{ \/headingAnchor }} + +{{ log.content }} +{{ /for }} diff --git a/src/_includes/main/changelogs.html b/src/_includes/partials/changelogs.vto similarity index 80% rename from src/_includes/main/changelogs.html rename to src/_includes/partials/changelogs.vto index 3e4da0f7..fb935f2c 100644 --- a/src/_includes/main/changelogs.html +++ b/src/_includes/partials/changelogs.vto @@ -1,32 +1,32 @@ --- -layout: main/content +layout: layouts/content articleElement: true --- -{% set currentUrl %}{{ page.url }}{% endset %} +{{ set currentUrl = page.url }}

      To get notified of the updates on this website, you can subscribe to its RSS feed, which contains new articles, blog posts and website changelogs.

      -{{ content | safe }} +{{ content }} -{%- css %} +{{- css }} .changelog__nav, .changelog__nav--links { display: flex; @@ -59,4 +59,4 @@ articleElement: true gap: 1em; } } -{% endcss %} +{{ /css }} diff --git a/src/_includes/main/content-nav.html b/src/_includes/partials/content-nav.vto similarity index 67% rename from src/_includes/main/content-nav.html rename to src/_includes/partials/content-nav.vto index 2823d4ed..17a510be 100644 --- a/src/_includes/main/content-nav.html +++ b/src/_includes/partials/content-nav.vto @@ -2,22 +2,22 @@ -{%- css %} +{{- css }} .content__nav { padding: 1.2em clamp(1em, 5%, 1.5em); background-color: var(--clr-content-bg); } .content__nav--title { font-size: 1.7rem; } -{% endcss %} +{{ /css }} diff --git a/src/_includes/global/css-bundle.html b/src/_includes/partials/css.vto similarity index 75% rename from src/_includes/global/css-bundle.html rename to src/_includes/partials/css.vto index b5cd78ac..b5430ad7 100644 --- a/src/_includes/global/css-bundle.html +++ b/src/_includes/partials/css.vto @@ -1,4 +1,4 @@ -{% set cssFiles = [ +{{ set cssFiles = [ "global", "a11y-syntax-highlighting-dark", "general", @@ -7,8 +7,8 @@ "components", "pridesymbols", "utility" -] %} +] }} -{%- for file in cssFiles -%} +{{ for file of cssFiles }} -{%- endfor -%} \ No newline at end of file +{{ /for }} diff --git a/src/_includes/global/feeds.html b/src/_includes/partials/feeds.vto similarity index 100% rename from src/_includes/global/feeds.html rename to src/_includes/partials/feeds.vto diff --git a/src/_includes/global/fonts.html b/src/_includes/partials/fonts.vto similarity index 100% rename from src/_includes/global/fonts.html rename to src/_includes/partials/fonts.vto diff --git a/src/_includes/global/footer.html b/src/_includes/partials/footer.vto similarity index 90% rename from src/_includes/global/footer.html rename to src/_includes/partials/footer.vto index 224f594c..689e8cc7 100644 --- a/src/_includes/global/footer.html +++ b/src/_includes/partials/footer.vto @@ -4,11 +4,9 @@ Contact me by email (plain text email encouraged)

      -{%- block footerContent %} -{{ footerContent }} -{% endblock -%} +{{ content }} -{%- if tags and tags.includes("shrine pages") %} +{{ if tags && tags.includes("shrine pages") }} -{%- endif -%} +{{ /if }}

      Support me on Ko-Fi

      - {%- include "global/h-card.html" -%} - {%- include "global/top-btn.html" %} + {{ include "partials/h-card.vto" }} + {{ include "partials/top-btn.vto" }} -{%- css %} +{{ css }} :root { --footer-gap: 0.5em; } .footer { @@ -50,4 +48,4 @@ .footer__links { justify-self: center; } .footer__shrines { align-self: center; } -{% endcss %} +{{ /css }} diff --git a/src/_includes/global/h-card.html b/src/_includes/partials/h-card.vto similarity index 100% rename from src/_includes/global/h-card.html rename to src/_includes/partials/h-card.vto diff --git a/src/_includes/global/hero.html b/src/_includes/partials/hero.vto similarity index 84% rename from src/_includes/global/hero.html rename to src/_includes/partials/hero.vto index 7971887e..8ecdc8a8 100644 --- a/src/_includes/global/hero.html +++ b/src/_includes/partials/hero.vto @@ -1,13 +1,11 @@
      - {% block heroImg %} {{ heroImg }} - {% endblock %}
      -{%- css %} +{{ css }} .hero { width: 100%; background-color: var(--clr-hero-bg); @@ -33,14 +31,12 @@ overflow: hidden; max-height: 16rem; } -{% endcss %} +{{ /css }} -{%- js %} +{{ js }} const hero = document.querySelector(".hero"); const heroTopBarEl = document.querySelector(".hero__top-bar"); const headerImgEl = document.querySelector(".hero__img"); -{% block eventScript %} {{ eventScript }} -{% endblock %} -{% endjs %} +{{ /js }} diff --git a/src/_includes/starwarskotor/modlist-info.md b/src/_includes/partials/kotor-modlist.md similarity index 100% rename from src/_includes/starwarskotor/modlist-info.md rename to src/_includes/partials/kotor-modlist.md diff --git a/src/_includes/global/meta.html b/src/_includes/partials/meta.vto similarity index 76% rename from src/_includes/global/meta.html rename to src/_includes/partials/meta.vto index 939ee95d..6c136a1b 100644 --- a/src/_includes/global/meta.html +++ b/src/_includes/partials/meta.vto @@ -3,10 +3,10 @@ - + - + - \ No newline at end of file + diff --git a/src/_includes/global/navbar.html b/src/_includes/partials/navbar.vto similarity index 84% rename from src/_includes/global/navbar.html rename to src/_includes/partials/navbar.vto index 817fbd6d..8fc3bee2 100644 --- a/src/_includes/global/navbar.html +++ b/src/_includes/partials/navbar.vto @@ -1,29 +1,29 @@ -{% set navLinksEl %} - {%- if tags and tags.includes("shrine pages") %} +{{ set navLinksEl }} + {{ if tags && tags.includes("shrine pages") }}
    • - Shrine Home + Shrine Home
    • - {%- endif -%} - {% block navbarLinks %}{% endblock %} - {%- if tags and tags.includes("shrine pages") %} + {{ /if }} + {{ navbarLinks }} + {{ if tags && tags.includes("shrine pages") }}
    • Shrine Directory
    • Main Site
    • - {%- endif -%} -{% endset %} + {{ /if }} +{{ /set }} -{%- css %} +{{ css }} .navbar { background: var(--clr-navbar-bg); width: 100%; @@ -102,4 +102,4 @@ .navbar__toggle, .navbar__popover { display: none; } .navbar__links { display: flex; } } -{% endcss %} +{{ /css }} diff --git a/src/_includes/global/shrineinfo.html b/src/_includes/partials/shrineinfo.vto similarity index 83% rename from src/_includes/global/shrineinfo.html rename to src/_includes/partials/shrineinfo.vto index c6fc0c93..3dd67bff 100644 --- a/src/_includes/global/shrineinfo.html +++ b/src/_includes/partials/shrineinfo.vto @@ -1,19 +1,15 @@ -{%- css %} +{{ css }} .right-sidebar { background-color: var(--clr-content-bg); font-size: clamp(0.9rem, 0.9rem + 3vw, 1rem); @@ -36,4 +32,4 @@ } .shrine__info ul { margin-top: 0.5em; } -{% endcss %} +{{ /css }} diff --git a/src/_includes/global/toc.html b/src/_includes/partials/toc.vto similarity index 94% rename from src/_includes/global/toc.html rename to src/_includes/partials/toc.vto index 1e53d10a..b47c9f93 100644 --- a/src/_includes/global/toc.html +++ b/src/_includes/partials/toc.vto @@ -4,12 +4,12 @@ Table of Contents - {{ content | toc | safe }} + {{ content |> toc }} -{%- css %} +{{- css }} .toc__wrapper { max-height: var(--ht-sticky-sidebar); overflow-x: auto; @@ -54,4 +54,4 @@ padding: 0; font-size: 1rem; } -{% endcss %} +{{ endcss }} diff --git a/src/_includes/global/top-btn.html b/src/_includes/partials/top-btn.vto similarity index 98% rename from src/_includes/global/top-btn.html rename to src/_includes/partials/top-btn.vto index 6a50d2b2..135921e4 100644 --- a/src/_includes/global/top-btn.html +++ b/src/_includes/partials/top-btn.vto @@ -5,7 +5,7 @@ Back to Top -{%- css %} +{{- css }} .top-btn, .top-btn:hover { color: var(--clr-top-btn-txt); @@ -40,4 +40,4 @@ stroke: currentColor; fill: currentColor; } -{% endcss %} +{{ /css }} diff --git a/src/_includes/pokemonoras/base.html b/src/_includes/pokemonoras/base.html deleted file mode 100644 index b338ca43..00000000 --- a/src/_includes/pokemonoras/base.html +++ /dev/null @@ -1,19 +0,0 @@ -{%- css %}{% include "src/assets/css/pokemonoras.css" %}{%- endcss %} - -{% extends "global/baselayout.html" %} - -{% block metaTitle %} - -{% endblock %} - -{% block pageTitle %} -{{ title + " | " if title }}Pokémon Omega Ruby and Alpha Sapphire Shrine | {{ sitemeta.siteName | safe }} -{% endblock %} - -{% block favicon %} - -{% endblock %} - -{% block hero %}{% include "pokemonoras/hero.html" %}{% endblock %} -{% block navbar %}{% include "pokemonoras/navbar.html" %}{% endblock %} -{% block footer %}{% include "pokemonoras/footer.html" %}{% endblock %} diff --git a/src/_includes/pokemonoras/content.html b/src/_includes/pokemonoras/content.html deleted file mode 100644 index c3a9a945..00000000 --- a/src/_includes/pokemonoras/content.html +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: pokemonoras/base ---- - -{% extends "global/content.html" %} - -{% block shrineInfo %}{% include "pokemonoras/shrineinfo.html" %}{% endblock %} diff --git a/src/_includes/pokemonoras/footer.html b/src/_includes/pokemonoras/footer.html deleted file mode 100644 index 7f513387..00000000 --- a/src/_includes/pokemonoras/footer.html +++ /dev/null @@ -1,6 +0,0 @@ -{% extends "global/footer.html" %} - -{% block footerContent %} -

      Made with ♥ by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 21 November 2024

      -{% endblock %} - diff --git a/src/_includes/pokemonoras/hero.html b/src/_includes/pokemonoras/hero.html deleted file mode 100644 index 5c367135..00000000 --- a/src/_includes/pokemonoras/hero.html +++ /dev/null @@ -1,34 +0,0 @@ -{% extends "global/hero.html" %} - -{% block heroImg %} - - - Banner of Pokémon Omega Ruby and Alpha Sapphire Shrine - -{% endblock %} - -{% block eventScript %} -const todayEvent = getTodayEvent(); - -if (todayEvent) { - heroTopBarEl.classList.remove('hidden'); - heroTopBarEl.innerHTML = todayEvent; -} - -function getTodayEvent() { - const date = new Date(); - const month = date.getMonth() + 1; - const day = date.getDate(); - const year = date.getFullYear(); - - const orasReleaseDate = new Date("2014-11-21").getFullYear(); - const orasAnniversary = year - orasReleaseDate; - - if (month === 11 && day === 21) - return ` - Today is the ${orasAnniversary}-year anniversary of the release of Pokémon Omega Ruby" and Alpha Sapphire! - `; - else - return null; -} -{% endblock %} diff --git a/src/_includes/pokemonoras/navbar.html b/src/_includes/pokemonoras/navbar.html deleted file mode 100644 index 2a1300e0..00000000 --- a/src/_includes/pokemonoras/navbar.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends "global/navbar.html" %} -{% set shrineHomeUrl = "/shrines/pokemonoras/" %} - -{% block navbarLinks %} -{% set navPages = collections.all | eleventyNavigation("ORAS Shrine") %} -{%- for entry in navPages %} -
    • - {{ entry.title }} -
    • -{%- endfor %} -{% endblock %} diff --git a/src/_includes/pokemonoras/shrineinfo.html b/src/_includes/pokemonoras/shrineinfo.html deleted file mode 100644 index 4e677f16..00000000 --- a/src/_includes/pokemonoras/shrineinfo.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "global/shrineinfo.html" %} - -{% block shrineAbout %} -

      Welcome to {{ sitemeta.siteAuthor.name }}'s shrine for {% cite "Pokémon Omega Ruby and Alpha Sapphire" %}, remakes of the 2002 Game Boy Advance role-playing video games {% cite "Pokémon Ruby" %} and {% cite "Pokémon Sapphire" %}. The games are part of the sixth generation of the {% cite "Pokémon" %} main series of video games, developed by Game Freak and published by The Pokémon Company and Nintendo for the Nintendo 3DS.

      -{% endblock %} - -{% block shrineLinks %} -
    • Bulbapedia
    • -
    • Pokémon Ruby, Sapphire, Omega Ruby and Alpha Sapphire fanlisting
    • -{% endblock %} diff --git a/src/_includes/starwarskotor/base.html b/src/_includes/starwarskotor/base.html deleted file mode 100644 index c5436efe..00000000 --- a/src/_includes/starwarskotor/base.html +++ /dev/null @@ -1,19 +0,0 @@ -{%- css %}{% include "src/assets/css/starwarskotor.css" %}{%- endcss %} - -{% extends "global/baselayout.html" %} - -{% block metaTitle %} - -{% endblock %} - -{% block pageTitle %} -{{ title + " | " if title }}Star Wars: Knights of the Old Republic Shrine | {{ sitemeta.siteName | safe }} -{% endblock %} - -{% block favicon %} - -{% endblock %} - -{% block hero %}{% include "starwarskotor/hero.html" %}{% endblock %} -{% block navbar %}{% include "starwarskotor/navbar.html" %}{% endblock %} -{% block footer %}{% include "starwarskotor/footer.html" %}{% endblock %} diff --git a/src/_includes/starwarskotor/content.html b/src/_includes/starwarskotor/content.html deleted file mode 100644 index 2c0fdd3d..00000000 --- a/src/_includes/starwarskotor/content.html +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: starwarskotor/base ---- - -{% extends "global/content.html" %} - -{% block shrineInfo %}{% include "starwarskotor/shrineinfo.html" %}{% endblock %} diff --git a/src/_includes/starwarskotor/footer.html b/src/_includes/starwarskotor/footer.html deleted file mode 100644 index 739eb5f3..00000000 --- a/src/_includes/starwarskotor/footer.html +++ /dev/null @@ -1,6 +0,0 @@ -{% extends "global/footer.html" %} - -{% block footerContent %} -

      Made with ♥ and the Force by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 17 February 2023

      -{% endblock %} - diff --git a/src/_includes/starwarskotor/hero.html b/src/_includes/starwarskotor/hero.html deleted file mode 100644 index 63cb6160..00000000 --- a/src/_includes/starwarskotor/hero.html +++ /dev/null @@ -1,40 +0,0 @@ -{% extends "global/hero.html" %} - -{% block heroImg %} - - - anner of Star Wars: Knights of the Old Republic Shrine - -{% endblock %} - -{% block eventScript %} -const todayEvent = getTodayEvent(); - -if (todayEvent) { - heroTopBarEl.classList.remove('hidden'); - heroTopBarEl.innerHTML = todayEvent; -} - -function getTodayEvent() { - const date = new Date(); - const month = date.getMonth() + 1; - const day = date.getDate(); - const year = date.getFullYear(); - - const kotor1ReleaseDate = new Date("2003-07-15").getFullYear(); - const kotor2ReleaseDate = new Date("2004-12-06").getFullYear(); - const kotor1Anniversary = year - kotor1ReleaseDate; - const kotor2Anniversary = year - kotor2ReleaseDate; - - if (month === 7 && day === 15) - return ` - Today is the ${kotor1Anniversary}-year anniversary of the release of Star Wars: Knihgts of the Old Republic - `; - else if (month === 12 && day === 6) - return ` - Today is the ${kotor2Anniversary}-year anniversary of the release of Star Wars: Knights of the Old Republic II — The Sith Lords - `; - else - return null; -} -{% endblock %} diff --git a/src/_includes/starwarskotor/navbar.html b/src/_includes/starwarskotor/navbar.html deleted file mode 100644 index f188f4c9..00000000 --- a/src/_includes/starwarskotor/navbar.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends "global/navbar.html" %} -{% set shrineHomeUrl = "/shrines/starwarskotor/" %} - -{% block navbarLinks %} -{% set navPages = collections.all | eleventyNavigation("KotOR Shrine") %} -{%- for entry in navPages %} -
    • - {{ entry.title }} -
    • -{%- endfor %} -{% endblock %} diff --git a/src/_includes/starwarskotor/shrineinfo.html b/src/_includes/starwarskotor/shrineinfo.html deleted file mode 100644 index 29fd48fd..00000000 --- a/src/_includes/starwarskotor/shrineinfo.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends "global/shrineinfo.html" %} - -{% block shrineAbout %} -

      Welcome to {{ sitemeta.siteAuthor.name }}'s shrine for {% cite "Star Wars: Knights of the Old Republic" %}, a series of role-playing video games set in the {% cite "Star Wars" %} universe, taking place almost 4,000 years before the events of the Skywalker film saga.

      -{% endblock %} - -{% block shrineLinks %} -
    • KOTOR Community Portal
    • -
    • Star Wars: KotOR fanlisting
    • -
    • Star Wars: KotOR II fanlisting
    • -{% endblock %} diff --git a/src/assets/css/misc.css b/src/assets/css/root.css similarity index 100% rename from src/assets/css/misc.css rename to src/assets/css/root.css diff --git a/src/index.html b/src/index.vto similarity index 95% rename from src/index.html rename to src/index.vto index 4199aed5..4d366641 100644 --- a/src/index.html +++ b/src/index.vto @@ -1,5 +1,5 @@ --- -layout: main/content +layout: layouts/content tags: navbar links metadata: title: Home @@ -9,9 +9,9 @@ eleventyNavigation: key: Home order: 1 eleventyComputed: - pageTitle: Welcome to {{ sitemeta.siteName | safe }}! + pageTitle: Welcome to {{ sitemeta.siteName }}! metadata: - desc: Home page of {{ sitemeta.siteName | safe }}. + desc: Home page of {{ sitemeta.siteName }}. ---
      @@ -37,7 +37,7 @@ eleventyComputed:

      Link to My Website

      - {% include "main/my-button.html" %} + {{ include "main/my-button.html" }}
      @@ -51,25 +51,25 @@ eleventyComputed:

      What is New?

      - {% for log in collections["changelogs"] | reverse | itemLimit(1) %} + {{ for log of collections["changelogs"] |> toReversed |> itemLimit(1) }}

      {{ log.data.title }}

      - {{ log.content | safe }} - {%- endfor %} + {{ log.content }} + {{ /for }}

      View all site changelogs

      You can subscribe to the {{ sitemeta.siteName }} RSS feed to get notified of the updates on this website, including new articles, blog posts and website changelogs.

      - {% include "main/statuscafe.html" %} + {{ include "main/statuscafe.html" }}

      Always Proud

      - {%- macro prideButton(file, alt, width=88, height=31) -%} + {{- macro prideButton(file, alt, width=88, height=31) -}}
    • {{ alt }}
    • - {%- endmacro -%} + {{- endmacro -}}
        {{ prideButton("progress", "Progress Flag by Daniel Quasar (2018)") }} {{ prideButton("9_stripe", "Nine-Stripe Rainbow Flag by Gilbert Baker (2017)") }} @@ -87,7 +87,7 @@ eleventyComputed:

        Web Cliques

        - {% include "main/webcliques.html" %} + {{ include "main/webcliques.html" }}
        @@ -210,5 +210,5 @@ eleventyComputed:

        Support Me

        - {% include "main/support-me.html" %} + {{ include "components/support-me.vto" }}
        diff --git a/src/links/linkgroups/joined.njk b/src/links/linkgroups/joined.vto similarity index 97% rename from src/links/linkgroups/joined.njk rename to src/links/linkgroups/joined.vto index 157dad63..ea90cdf8 100644 --- a/src/links/linkgroups/joined.njk +++ b/src/links/linkgroups/joined.vto @@ -4,13 +4,13 @@ date: 2023-01-29 toc: true --- -{% headingAnchor 3 %}Web Cliques{% endheadingAnchor %} -{% include "main/webcliques.html" %} +{{ headingAnchor 3 }}Web Cliques{{ \/headingAnchor }} +{{ include "components/webcliques.vto" }} -{% headingAnchor 3 %}Fanlistings{% endheadingAnchor %} +{{ headingAnchor 3 }}Fanlistings{{ \/headingAnchor }}

        Check out Beehive, my fanlisting collective to see all the fanlistings I own, have joined or have applied to join.

        -{% headingAnchor 3 %}Webrings{% endheadingAnchor %} +{{ headingAnchor 3 }}Webrings{{ \/headingAnchor }}
        • diff --git a/src/links/linkgroups/websites.html b/src/links/linkgroups/websites.vto similarity index 94% rename from src/links/linkgroups/websites.html rename to src/links/linkgroups/websites.vto index 2e093612..4a3f5059 100644 --- a/src/links/linkgroups/websites.html +++ b/src/links/linkgroups/websites.vto @@ -4,15 +4,15 @@ date: 2023-01-28 toc: true --- -{%- macro siteButton(url, file, alt, tooltip=alt, width=88, height=31) -%} +{{ function siteButton(url, file, alt, tooltip=alt, width=88, height=31) -}}
        • {{ alt }}
        • -{%- endmacro -%} +{{ /function }} -{% headingAnchor 3 %}Personal Sites I Enjoy{% endheadingAnchor %} +{{ headingAnchor 3 }}Personal Sites I Enjoy{{ /headingAnchor }}

          Websites with Buttons

          -{% headingAnchor 3 %}Web Directories{% endheadingAnchor %} +{{ headingAnchor 3 }}Web Directories{{ endheadingAnchor }}

          Directories with Site Buttons

            {{ siteButton("https://pinkvampyr.leprd.space/accessiblenet/", "directories/accessiblenet.png", "Accessibility Net Directory") }} @@ -75,7 +75,7 @@ toc: true
          • PersonalSit.es
          -{% headingAnchor 3 %}Communities{% endheadingAnchor %} +{{ headingAnchor 3 }}Communities{{ endheadingAnchor }}
            {{ siteButton("https://32bit.cafe/", "communities/32-bit-cafe.png", "32-Bit Cafe") }} {{ siteButton("https://zine.kalechips.net/index", "communities/saladmagazine.png", "Salad Magazine") }} diff --git a/src/shrines/asummersend.md b/src/shrines/asummersend.md index a72c9467..815203d5 100644 --- a/src/shrines/asummersend.md +++ b/src/shrines/asummersend.md @@ -1,5 +1,5 @@ --- -layout: asummersend/content +layout: layouts/asummersend pageTitle: A Summer’s End — Hong Kong 1986 Shrine tags: ["shrine home", "contents"] categories: ["shrines", "a summer's end"] @@ -62,4 +62,4 @@ I seriously cannot recommend {% cite "A Summer’s End" %} enough, especially fo * [Trust, Confidence, and Hope in A Summer’s End – Hong Kong 1986: A Reparative Reading](https://www.gamejournal.it/i11-02_poirier-poulin) by Samuel Poirier-Poulin You can find [articles and interviews that featured {% cite "A Summer’s End — Hong Kong 1986" %}](https://www.asummersend.com/press-kit-featured-articles) on the official {% cite "A Summer’s End" %} website. -{% endcontainer %} \ No newline at end of file +{% endcontainer %} diff --git a/src/shrines/asummersend/gallery.md b/src/shrines/asummersend/gallery.md index d0f4d84a..1c46d1e2 100644 --- a/src/shrines/asummersend/gallery.md +++ b/src/shrines/asummersend/gallery.md @@ -1,5 +1,5 @@ --- -layout: asummersend/content +layout: layouts/asummersend title: Gallery pageTitle: A Summer’s End — Hong Kong 1986 Gallery desc: My gallery for A Summer’s End — Hong Kong 1986. @@ -60,4 +60,4 @@ The sex scenes between Sam and Michelle added by the Passion Patch are easily th [![Sam naked on top of Michelle, who caresses Sam's bare breast](https://i.postimg.cc/Hs8jC9jc/HK1986-2021-02-06-16-17-03-633.avif){loading="lazy"}](https://postimg.cc/gndGVRVm) --> These screenshots of {% cite "A Summer’s End" %}'s Passion Patch can also be viewed on [my Postimages gallery](https://postimg.cc/gallery/YBhz5TbR), and are available in PNG and AVIF formats. -{% endcontentWarning %} \ No newline at end of file +{% endcontentWarning %} diff --git a/src/shrines/asummersend/playlists.md b/src/shrines/asummersend/playlists.md index 3dd869e8..908abcea 100644 --- a/src/shrines/asummersend/playlists.md +++ b/src/shrines/asummersend/playlists.md @@ -1,5 +1,5 @@ --- -layout: asummersend/content +layout: layouts/asummersend title: Playlists pageTitle: A Summer’s End — Hong Kong 1986 Playlists desc: List of A Summer’s End — Hong Kong 1986 playlists. diff --git a/src/shrines/asummersend/trivia.md b/src/shrines/asummersend/trivia.md index e0272720..7789e38b 100644 --- a/src/shrines/asummersend/trivia.md +++ b/src/shrines/asummersend/trivia.md @@ -1,5 +1,5 @@ --- -layout: asummersend/content +layout: layouts/asummersend title: Trivia pageTitle: A Summer’s End — Hong Kong 1986 Trivia desc: A collection of trivia about A Summer’s End — Hong Kong 1986. @@ -52,4 +52,4 @@ Michelle Cheung's Chinese name is [張鳳霞]{lang="zh"}, while Sam Wong's Chine ### Inspirations -* The character and fashion of Cecelia has been largely inspired by Anita Mui.^[Oracle and Bone's [art for Cecelia's birthday on 9 August 2021](https://oracleandbone.tumblr.com/post/659052064213696512/%E7%83%88%E7%84%B0%E7%B4%85%E5%94%87-august-9-is-cecilias-birthday-happy)] \ No newline at end of file +* The character and fashion of Cecelia has been largely inspired by Anita Mui.^[Oracle and Bone's [art for Cecelia's birthday on 9 August 2021](https://oracleandbone.tumblr.com/post/659052064213696512/%E7%83%88%E7%84%B0%E7%B4%85%E5%94%87-august-9-is-cecilias-birthday-happy)] diff --git a/src/shrines/cassettebeasts.md b/src/shrines/cassettebeasts.md index 23cb4c96..a8458349 100644 --- a/src/shrines/cassettebeasts.md +++ b/src/shrines/cassettebeasts.md @@ -1,5 +1,5 @@ --- -layout: cassettebeasts/content +layout: layouts/cassettebeasts pageTitle: Cassette Beasts Shrine tags: ["shrine home", "contents"] categories: ["shrines", "cassette beasts"] @@ -108,4 +108,4 @@ I created and am running [Land of Confusion](https://fan.leilukin.com/cassettebe On Tumblr, I run the [Cassette Beasts Source](https://cassettebeastssource.tumblr.com/), an unofficial {% cite "Cassette Beasts" %} fan site blog that I created on 25 February 2024. I decided to create a fan site blog on Tumblr due to the fact that Bytten Studio does not have an official Tumblr account, and I wanted a Tumblr blog dedicated to sharing and archiving {% cite "Cassette Beasts" %} news and fan works. I have also contributed to [{% cite "Cassette Beasts" %} TVTropes pages](https://tvtropes.org/pmwiki/pmwiki.php/VideoGame/CassetteBeasts) (I have had a TVTropes account since 18 February 2012), by editing the pages to add information about the game. I was the one who created the [Trivia page](https://tvtropes.org/pmwiki/pmwiki.php/Trivia/CassetteBeasts) for the game on TVTropes. -{% endcontainer %} \ No newline at end of file +{% endcontainer %} diff --git a/src/shrines/cassettebeasts/articles.md b/src/shrines/cassettebeasts/articles.md index 4eff0267..3c7ef07c 100644 --- a/src/shrines/cassettebeasts/articles.md +++ b/src/shrines/cassettebeasts/articles.md @@ -1,5 +1,5 @@ --- -layout: cassettebeasts/content +layout: layouts/cassettebeasts title: Articles pageTitle: Cassette Beasts Articles desc: List of articles written by me or other people that I recommend for Cassette Beasts. @@ -29,4 +29,4 @@ eleventyNavigation: * [A Case Of Autism: Meredith (Cassette Beasts)](https://www.youtube.com/watch?v=jFJ6tMeGsLg) by Optical Drop - A video analysis of Meredith's autistic coding.{.item-list__indent} \ No newline at end of file + A video analysis of Meredith's autistic coding.{.item-list__indent} diff --git a/src/shrines/cassettebeasts/articles/articles.11tydata.js b/src/shrines/cassettebeasts/articles/articles.11tydata.js index 35380a23..713fce9d 100644 --- a/src/shrines/cassettebeasts/articles/articles.11tydata.js +++ b/src/shrines/cassettebeasts/articles/articles.11tydata.js @@ -1,6 +1,6 @@ export default { tags: ["contents", "feed items", "cassette beasts articles"], - layout: "cassettebeasts/content", + layout: "layouts/cassettebeasts", isArticle: true, eleventyComputed: { title: (data) => `${data.articleTitle} | Articles`, @@ -9,4 +9,4 @@ export default { parent: "Cassette Beasts Articles" } } -} \ No newline at end of file +} diff --git a/src/shrines/cassettebeasts/facts.md b/src/shrines/cassettebeasts/facts.md index acbe4237..838b0dff 100644 --- a/src/shrines/cassettebeasts/facts.md +++ b/src/shrines/cassettebeasts/facts.md @@ -1,5 +1,5 @@ --- -layout: cassettebeasts/content +layout: layouts/cassettebeasts title: Facts pageTitle: Cassette Beasts Facts desc: A collection of facts and trivia about Cassette Beasts. diff --git a/src/shrines/cassettebeasts/featured.md b/src/shrines/cassettebeasts/featured.md index 16d81eca..c14a2fc3 100644 --- a/src/shrines/cassettebeasts/featured.md +++ b/src/shrines/cassettebeasts/featured.md @@ -1,5 +1,5 @@ --- -layout: cassettebeasts/content +layout: layouts/cassettebeasts title: Featured pageTitle: Cassette Beasts Featured Pieces desc: A collection of reviews, articles and commentary videos from other people about Cassette Beasts. diff --git a/src/shrines/cassettebeasts/gamelog.md b/src/shrines/cassettebeasts/gamelog.md index 9c7438cc..9cd3376e 100644 --- a/src/shrines/cassettebeasts/gamelog.md +++ b/src/shrines/cassettebeasts/gamelog.md @@ -1,5 +1,5 @@ --- -layout: cassettebeasts/content +layout: layouts/cassettebeasts title: Game Log pageTitle: Cassette Beasts Game Log desc: A catalogue of my Cassette Beasts characters and save profiles. diff --git a/src/shrines/cassettebeasts/resources.md b/src/shrines/cassettebeasts/resources.md index 15ed49d8..aaa66625 100644 --- a/src/shrines/cassettebeasts/resources.md +++ b/src/shrines/cassettebeasts/resources.md @@ -1,5 +1,5 @@ --- -layout: cassettebeasts/content +layout: layouts/cassettebeasts title: Resources pageTitle: Cassette Beasts Resources desc: A collection of resources for Cassette Beasts. diff --git a/src/shrines/pokemonoras.md b/src/shrines/pokemonoras.md index d9a7ad68..ad2541ea 100644 --- a/src/shrines/pokemonoras.md +++ b/src/shrines/pokemonoras.md @@ -1,5 +1,5 @@ --- -layout: pokemonoras/content +layout: layouts/pokemonoras pageTitle: Pokémon Omega Ruby and Alpha Sapphire Shrine tags: ["shrine home", "contents"] categories: ["shrines", "pokemon", "pokemon oras"] @@ -77,4 +77,4 @@ My taste in entertainment media, including video games, have changed a lot since How high my standards for monster collecting games were raised by {% cite "Cassette Beasts" %} cannot be overstated, due to me finding {% cite "Cassette Beasts" %} better than {% cite "Pokémon" %} in many ways. This sentiment only gets reinforced by the disappointing direction of the {% cite "Pokémon" %} franchise since the Nintendo Switch era, due to frequent releases and rushed development schedules taking their toll on the quality of recent {% cite "Pokémon" %} titles. Even though I still harbour nostalgia for the {% cite "Pokémon" %} franchise due to it being a huge part of my childhood and adolescence, I also firmly believe there is nothing inherently wrong with letting something newer and better replace your old favourite, which is what {% cite "Cassette Beasts" %} has done to {% cite "Pokémon" %} as my favourite monster collecting game, and {% cite "Omega Ruby" %} and {% cite "Alpha Sapphire" %} have done to {% cite "HeartGold" %} and {% cite "SoulSilver" %} as my favourite Pokémon games. This is also why the only Pokémon shrine I am making for my website is dedicated to {% cite "Omega Ruby" %} and {% cite "Alpha Sapphire" %} only, and not the franchise in general. -{% endcontainer %} \ No newline at end of file +{% endcontainer %} diff --git a/src/shrines/starwarskotor.md b/src/shrines/starwarskotor.md index 83ccdb20..a0568257 100644 --- a/src/shrines/starwarskotor.md +++ b/src/shrines/starwarskotor.md @@ -1,5 +1,5 @@ --- -layout: starwarskotor/content +layout: layouts/starwarskotor pageTitle: "Star Wars: Knights of the Old Republic Shrine" tags: ["shrine home", "contents"] categories: ["shrines", "star wars kotor", "star wars kotor 2"] @@ -48,4 +48,4 @@ Making same-gender romance mods for {% cite "KotOR 2" %} was the primary motivat I love modding the {% cite "KotOR" %} games, not only because the games are a special interest of mine, but also I love creating things for my interests. Modifying the games made me feel like I have the power to change the game to make them better and more enjoyable, and thus improve my experience with playing the games. You can check out all the {% cite "KotOR" %} mods I have created, including [{% cite "KotOR 1" %} mods](/projects/videogamemods/kotor1) and [{% cite "KotOR 2" %} mods](/projects/videogamemods/kotor2), on my main site's [Projects](/projects/#my-video-game-mods) pages. -{% endcontainer %} \ No newline at end of file +{% endcontainer %} diff --git a/src/shrines/starwarskotor/articles.md b/src/shrines/starwarskotor/articles.md index f016164a..a33b5fd2 100644 --- a/src/shrines/starwarskotor/articles.md +++ b/src/shrines/starwarskotor/articles.md @@ -1,5 +1,5 @@ --- -layout: starwarskotor/content +layout: layouts/starwarskotor title: Articles pageTitle: "Star Wars: Knights of the Old Republic Articles" desc: "List of articles written by me or other people that I recommend for the Star Wars: Knights of the Old Republic series." @@ -31,4 +31,4 @@ eleventyNavigation: * [In Defense of Peragus: it’s not just well-designed, it’s a uniquely good level too](https://www.reddit.com/r/kotor/comments/129co74/in_defense_of_peragus_its_not_just_welldesigned/) by Snigaroo on the KotOR Subreddit - An excellent essay that goes into detail in explaining why some of us actually find Peragus a good level. I am among the minority that genuinely enjoy Peragus, to the extent that I never even considered using any mod to skip the level, and I replay all the hologram recordings throughout Peragus and the Harbinger every time I replay {% cite "KotOR 2" %}.{.item-list__indent} \ No newline at end of file + An excellent essay that goes into detail in explaining why some of us actually find Peragus a good level. I am among the minority that genuinely enjoy Peragus, to the extent that I never even considered using any mod to skip the level, and I replay all the hologram recordings throughout Peragus and the Harbinger every time I replay {% cite "KotOR 2" %}.{.item-list__indent} diff --git a/src/shrines/starwarskotor/articles/articles.11tydata.js b/src/shrines/starwarskotor/articles/articles.11tydata.js index 877d015a..ac622184 100644 --- a/src/shrines/starwarskotor/articles/articles.11tydata.js +++ b/src/shrines/starwarskotor/articles/articles.11tydata.js @@ -1,6 +1,6 @@ export default { tags: ["contents", "feed items", "kotor articles"], - layout: "starwarskotor/content", + layout: "layouts/starwarskotor", isArticle: true, eleventyComputed: { title: (data) => `${data.articleTitle} | Articles`, @@ -9,4 +9,4 @@ export default { parent: "KotOR Articles" } } -} \ No newline at end of file +} diff --git a/src/shrines/starwarskotor/guides.md b/src/shrines/starwarskotor/guides.md index 3b75346a..0dc16367 100644 --- a/src/shrines/starwarskotor/guides.md +++ b/src/shrines/starwarskotor/guides.md @@ -1,5 +1,5 @@ --- -layout: starwarskotor/content +layout: layouts/starwarskotor title: Guides pageTitle: "Star Wars: Knights of the Old Republic Guides" desc: "List of guides for the Star Wars: Knights of the Old Republic series I have written or found useful. This page also includes lists of cheats." @@ -30,4 +30,4 @@ eleventyNavigation: ## KotOR Cheats * [KotOR1 Warp Code List](https://deadlystream.com/blogs/entry/414-blog-112-the-kotor1-warp-code-list/) by by Sith Holocron -* [TSL Warp Code List](https://deadlystream.com/blogs/entry/413-blog-111-the-tsl-warp-code-list/) by by Sith Holocron \ No newline at end of file +* [TSL Warp Code List](https://deadlystream.com/blogs/entry/413-blog-111-the-tsl-warp-code-list/) by by Sith Holocron diff --git a/src/shrines/starwarskotor/guides/guides.11tydata.js b/src/shrines/starwarskotor/guides/guides.11tydata.js index 7c3cbe74..4a374328 100644 --- a/src/shrines/starwarskotor/guides/guides.11tydata.js +++ b/src/shrines/starwarskotor/guides/guides.11tydata.js @@ -1,6 +1,6 @@ export default { tags: ["contents", "feed items", "kotor guides"], - layout: "starwarskotor/content", + layout: "layouts/starwarskotor", isArticle: true, eleventyComputed: { title: (data) => `${data.articleTitle} | Guides`, @@ -9,4 +9,4 @@ export default { parent: "KotOR Guides" } } -} \ No newline at end of file +} diff --git a/src/shrines/starwarskotor/resources.md b/src/shrines/starwarskotor/resources.md index 97ca6565..415e9a6e 100644 --- a/src/shrines/starwarskotor/resources.md +++ b/src/shrines/starwarskotor/resources.md @@ -1,5 +1,5 @@ --- -layout: starwarskotor/content +layout: layouts/starwarskotor title: Resources pageTitle: "Star Wars: Knights of the Old Republic Resources" desc: "List of Star Wars: Knights of the Old Republic resources I have created or compiled myself.." @@ -34,4 +34,4 @@ Here are the modifications for the KotOR series I have created. ## My Mod Builds Lists of modifications for the KotOR games I use for my own playthroughs. * [Star Wars: Knights of the Old Republic](./kotor1-mod-list) -* [Star Wars: Knights of the Old Republic II: The Sith Lords](./kotor2-mod-list) \ No newline at end of file +* [Star Wars: Knights of the Old Republic II: The Sith Lords](./kotor2-mod-list) diff --git a/src/shrines/starwarskotor/resources/resources.11tydata.js b/src/shrines/starwarskotor/resources/resources.11tydata.js index aaabff37..11f0875f 100644 --- a/src/shrines/starwarskotor/resources/resources.11tydata.js +++ b/src/shrines/starwarskotor/resources/resources.11tydata.js @@ -1,6 +1,6 @@ export default { tags: ["contents", "kotor resources"], - layout: "starwarskotor/content", + layout: "layouts/starwarskotor", hasBreadcrumbs: true, articleElement: true, eleventyComputed: { @@ -10,4 +10,4 @@ export default { parent: "KotOR Resources" } } -} \ No newline at end of file +} diff --git a/src/shrines/starwarskotor/universes.md b/src/shrines/starwarskotor/universes.md index 69707d6f..74b67e2c 100644 --- a/src/shrines/starwarskotor/universes.md +++ b/src/shrines/starwarskotor/universes.md @@ -1,5 +1,5 @@ --- -layout: starwarskotor/content +layout: layouts/starwarskotor title: Universes pageTitle: "Leilukin's Star Wars: Knights of the Old Republic Universes" desc: "My universes and headcanons for Star Wars: Knights of the Old Republic series." diff --git a/src/slashes/archive/archive.html b/src/slashes/archive/archive.vto similarity index 61% rename from src/slashes/archive/archive.html rename to src/slashes/archive/archive.vto index 10d17716..19e073bf 100644 --- a/src/slashes/archive/archive.html +++ b/src/slashes/archive/archive.vto @@ -6,5 +6,5 @@ eleventyNavigation: order: 11 --- -{% set contentList = collections.contents | reverse %} -{% include "main/archive.html" %} +{{ set contentList = collections.contents |> toReversed }} +{{ include "layouts/archive.vto" }} diff --git a/src/slashes/archive/categories.html b/src/slashes/archive/categories.vto similarity index 58% rename from src/slashes/archive/categories.html rename to src/slashes/archive/categories.vto index 512b692c..c6e17796 100644 --- a/src/slashes/archive/categories.html +++ b/src/slashes/archive/categories.vto @@ -7,11 +7,11 @@ eleventyNavigation: ---
              - {% for category in collections.categories %} - {% set categoryUrl %}/categories/{{ category | slugify }}/{% endset %} - {% set categoryPostCount = collections.contents | filterByCategory(category) | length %} + {{ for category of collections.categories }} + {{ set categoryUrl }}/categories/{{ category | slugify }}/{{ /set }} + {{ set categoryPostCount = collections.contents | filterByCategory(category) |> itemCount }}
            • {{ category }} ({{ categoryPostCount }})
            • - {% endfor %} + {{ /for }}

            See all contents on this website in the archive.

            diff --git a/src/slashes/archive/category.html b/src/slashes/archive/category.html deleted file mode 100644 index 014512c3..00000000 --- a/src/slashes/archive/category.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -pagination: - data: collections.categories - size: 1 - alias: category -permalink: /categories/{{ category | slugify }}/ -eleventyExcludeFromCollections: true -eleventyComputed: - title: 'Content Category: "{{ category | safe }}"' - desc: All contents under the "{{ category | safe }}" category on {{ sitemeta.siteName | safe }}. ---- - -{% set contentCount = collections.contents | filterByCategory(category) | length %} -

            {{ contentCount }} Contents Filed Under "{{ category }}"

            - -{% set contentList = collections.contents | filterByCategory(category) | reverse %} -{% include "main/archive.html" %} - -

            See all content categories.

            diff --git a/src/slashes/archive/category.vto b/src/slashes/archive/category.vto new file mode 100644 index 00000000..dde16ec0 --- /dev/null +++ b/src/slashes/archive/category.vto @@ -0,0 +1,19 @@ +--- +pagination: + data: collections.categories + size: 1 + alias: category +permalink: /categories/{{ category |> slugify }}/ +eleventyExcludeFromCollections: true +eleventyComputed: + title: 'Content Category: "{{ category }}"' + desc: All contents under the "{{ category }}" category on {{ sitemeta.siteName }}. +--- + +{{ set contentCount = collections.contents |> filterByCategory(category) |> itemCount }} +

            {{ contentCount }} Contents Filed Under "{{ category }}"

            + +{{ set contentList = collections.contents |> filterByCategory(category) |> toReversed }} +{{ include "layouts/archive.vto" }} + +

            See all content categories.

            diff --git a/src/slashes/footerlinks/changelogs.html b/src/slashes/footerlinks/changelogs.vto similarity index 52% rename from src/slashes/footerlinks/changelogs.html rename to src/slashes/footerlinks/changelogs.vto index 8be3bfe0..a415b517 100644 --- a/src/slashes/footerlinks/changelogs.html +++ b/src/slashes/footerlinks/changelogs.vto @@ -8,18 +8,18 @@ pagination: size: 20 alias: changelogs reverse: true -permalink: "/{{ page.fileSlug }}{% if pagination.pageNumber > 0 %}/page/{{ pagination.pageNumber + 1 }}{% endif %}/" +permalink: "/{{ page.fileSlug }}{{ if pagination.pageNumber > 0 }}/page/{{ pagination.pageNumber + 1 }}{{ /if }}/" eleventyNavigation: key: Changelogs order: 9 ---

            Latest Changelogs

            -{% for log in changelogs %} -

            -{{ log.content | safe }} -{%- endfor %} +{{ for log of changelogs }} +

            +{{ log.content }} +{{ /for }} -{% include "global/pagination-oldnew.html" %} +{{ include "components/pagination-oldnew.vto" }} -{%- css %}* + h2, * + h3 { margin-top: 1.5em; }{% endcss %} +{{- css }}* + h2, * + h3 { margin-top: 1.5em; }{{ /css }} diff --git a/src/slashes/footerlinks/sitemap.html b/src/slashes/footerlinks/sitemap.vto similarity index 78% rename from src/slashes/footerlinks/sitemap.html rename to src/slashes/footerlinks/sitemap.vto index 6aabf75f..911d78e1 100644 --- a/src/slashes/footerlinks/sitemap.html +++ b/src/slashes/footerlinks/sitemap.vto @@ -4,22 +4,22 @@ eleventyExcludeFromCollections: true navigationOptions: listClass: "sitemap" eleventyComputed: - desc: Site map of {{ sitemeta.siteName | safe }}. + desc: Site map of {{ sitemeta.siteName }}. ---

            Navigation for browsing {{ sitemeta.siteName }}.

            Subsites

              -{% for site in sitemeta.subsites %} +{{ for site of sitemeta.subsites }}
            • {{ site.siteName }}
            • -{% endfor %} +{{ endfor }}

            Main Site

            -{{ collections.all | eleventyNavigation | eleventyNavigationToHtml(navigationOptions) | safe }} +{{ collections.all |> eleventyNavigation |> eleventyNavigationToHtml(navigationOptions) }} -{%- css %} +{{- css }} main ul { display: grid; gap: 0.5rem; @@ -44,4 +44,4 @@ main ul { .sitemap ul li::marker { content: "★"; } .sitemap ul ul li::marker { content: "♥"; } .sitemap ul ul ul li::marker { content: "❣"; } -{% endcss %} +{{ /css }} diff --git a/src/slashes/navbarlinks/adoptables.html b/src/slashes/navbarlinks/adoptables.vto similarity index 88% rename from src/slashes/navbarlinks/adoptables.html rename to src/slashes/navbarlinks/adoptables.vto index 6e353256..928443f9 100644 --- a/src/slashes/navbarlinks/adoptables.html +++ b/src/slashes/navbarlinks/adoptables.vto @@ -9,48 +9,48 @@ eleventyNavigation: order: 8 --- -{%- macro virtualPet(url, img, alt, tooltip=alt) -%} +{{ function virtualPet(url, img, alt, tooltip=alt) -}}
          • {{ alt }}
          • -{%- endmacro -%} +{{ /function }} -{%- macro myPixelArt(file, alt, tooltip=alt) -%} +{{ function myPixelArt(file, alt, tooltip=alt) -}}
          • {{ alt }}
          • -{%- endmacro -%} +{{ /functioin }} -{%- macro adoptable(url, file, alt, tooltip=alt) -%} +{{ function adoptable(url, file, alt, tooltip=alt) }}
          • {{ alt }}
          • -{%- endmacro -%} +{{ /function }}

            (This page was last updated on )

            - {% headingAnchor 2 %}Virtual Pets{% endheadingAnchor %} + {{ headingAnchor 2 }}Virtual Pets{{ \/headingAnchor }} - {% headingAnchor 3 %}TamaNOTchi{% endheadingAnchor %} + {{ headingAnchor 3 }}TamaNOTchi{{ \/headingAnchor }}

            Feel free to check out my TamaNOTchi virtual pets and feed them!

              {{ virtualPet("https://tamanotchi.world/13150c", "https://tamanotchi.world/i2/13150", "Pix") }} {{ virtualPet("https://tamanotchi.world/14391c", "https://tamanotchi.world/i2/14391", "Neko") }}
            - {% headingAnchor 3 %}Pixel Cat's End{% endheadingAnchor %} + {{ headingAnchor 3 }}Pixel Cat's End{{ \/headingAnchor }}

            I play Pixel Cat's End, so feel free to check out my profile and my not-cats! You may send me a friend request too if you also play Pixel Cat's End.

            - {% headingAnchor 2 %}Personal Website Adoptables{% endheadingAnchor %} + {{ headingAnchor 2 }}Personal Website Adoptables{{ \/headingAnchor }}

            These are adopted from other personal websites.

              @@ -66,27 +66,27 @@ eleventyNavigation:
            - {% headingAnchor 2 %}Pixel Cliques{% endheadingAnchor %} + {{ headingAnchor 2 }}Pixel Cliques{{ \/headingAnchor }} - {% headingAnchor 3 %}The Apple{% endheadingAnchor %} + {{ headingAnchor 3 }}The Apple{{ \/headingAnchor }} The Apple pixel clique - {% headingAnchor 3 %}Made by a Girl{% endheadingAnchor %} + {{ headingAnchor 3 }}Made by a Girl{{ \/headingAnchor }} Made by a Girl pixel clique
            - {% headingAnchor 2 %}Kitty Friends Pixel Club{% endheadingAnchor %} + {{ headingAnchor 2 }}Kitty Friends Pixel Club{{ \/headingAnchor }}

            An old pixel club about cats, revived by Divergent Rays.

            - {% headingAnchor 3 %}My Kitty Friends{% endheadingAnchor %} + {{ headingAnchor 3 }}My Kitty Friends{{ \/headingAnchor }}
              {{ myPixelArt("kittyfriends/leilukin-blackkitty.png", "Leilukin's black kitty friend") }} {{ myPixelArt("kittyfriends/leilukin-purplekitty.png", "Leilukin's purple kitty friend") }}

            Created on 21 July 2024. If you want to adopt any of my kitty friends, please link back to my website and do not hotlink the images.

            - {% headingAnchor 3 %}Adopted Kitty Friends{% endheadingAnchor %} + {{ headingAnchor 3 }}Adopted Kitty Friends{{ \/headingAnchor }}
              {{ adoptable("https://artwork.neocities.org/cliques", "kittyfriends/artwork-bat.gif", "artwork's bat kitty") }} {{ adoptable("https://artwork.neocities.org/cliques", "kittyfriends/artwork-pumpkin.gif", "artwork's pumpkin kitty") }} @@ -103,17 +103,17 @@ eleventyNavigation:
            - {% headingAnchor 2 %}Pantson Color Club{% endheadingAnchor %} + {{ headingAnchor 2 }}Pantson Color Club{{ \/headingAnchor }}

            A pixel club created by Alexandra.

            Join the Pantson Color Club!
            - {% headingAnchor 3 %}My Colour Cards{% endheadingAnchor %} + {{ headingAnchor 3 }}My Colour Cards{{ \/headingAnchor }}
              {{ myPixelArt("pantson/leilukin-grape-juice.png", "Leilukin's GRAPE JUICE, colour number 19-3220 TPX") }}

            Created on 17 September 2024. If you are a member of the Pantson Color Club and you would like to exchange colour cards with me, feel free to ask on my guestbook!

            - {% headingAnchor 3 %}Exchanged Colour Cards{% endheadingAnchor %} + {{ headingAnchor 3 }}Exchanged Colour Cards{{ \/headingAnchor }}
              {{ adoptable("https://aetherbiome.neocities.org/", "pantson/anna-not-a-brick.png", "Anna's NOT A BRICK, colour number 7580U") }} {{ adoptable("https://aetherbiome.neocities.org/", "pantson/anna-kale.png", "Anna's KALE, colour number 18-0107") }} @@ -135,10 +135,10 @@ eleventyNavigation:
            - {% headingAnchor 2 %}Salad Magazine{% endheadingAnchor %} + {{ headingAnchor 2 }}Salad Magazine{{ \/headingAnchor }}

            Salad Magazine is a web-based zine for creative works run by Kalechips.

            - {% headingAnchor 3 %}Ink Snail and Sparkle Snail{% endheadingAnchor %} + {{ headingAnchor 3 }}Ink Snail and Sparkle Snail{{ \/headingAnchor }}
            Black ink snail pixel art by Semper Sparkle snail pixel art by Semper @@ -147,7 +147,7 @@ eleventyNavigation:
            - {% headingAnchor 2 %}32-Bit Cafe Code Jam: Destination Vacation{% endheadingAnchor %} + {{ headingAnchor 2 }}32-Bit Cafe Code Jam: Destination Vacation{{ \/headingAnchor }}

            Stuff I collected from 32-Bit Cafe's Community Code Jam #4: Destination Vacation in June 2024, including a passport with stamps from the code jam entries, and extra goodies from some of the participants.

            • diff --git a/src/slashes/navbarlinks/blog.html b/src/slashes/navbarlinks/blog.vto similarity index 77% rename from src/slashes/navbarlinks/blog.html rename to src/slashes/navbarlinks/blog.vto index b89f163c..0df12adc 100644 --- a/src/slashes/navbarlinks/blog.html +++ b/src/slashes/navbarlinks/blog.vto @@ -7,12 +7,12 @@ pagination: size: 10 alias: postList reverse: true -permalink: "/{{ page.fileSlug }}{% if pagination.pageNumber > 0 %}/page/{{ pagination.pageNumber + 1 }}{% endif %}/" +permalink: "/{{ page.fileSlug }}{{ if pagination.pageNumber > 0 }}/page/{{ pagination.pageNumber + 1 }}{{ /if }}/" isContentDivided: true eleventyNavigation: order: 4 eleventyComputed: - pageTitle: Welcome to {{ sitemeta.siteName | safe }} Blog! + pageTitle: Welcome to {{ sitemeta.siteName }} Blog! desc: Blog hosted on {{ sitemeta.siteAuthor.name }}'s pwesonal website. --- @@ -24,26 +24,26 @@ eleventyComputed:

              Blog Posts

              - {% include "global/pagination-oldnew.html" %} + {{ include "components/pagination-oldnew.vto" }}
              -{%- css %} +{{- css }} .blog__posts, .blog__post { display: grid; } .blog__posts { @@ -71,4 +71,4 @@ eleventyComputed: color: var(--clr-sub-heading); font-weight: 700; } -{% endcss %} +{{ /css }} diff --git a/src/slashes/navbarlinks/guestbook.html b/src/slashes/navbarlinks/guestbook.vto similarity index 84% rename from src/slashes/navbarlinks/guestbook.html rename to src/slashes/navbarlinks/guestbook.vto index 54e4afa2..a7e81242 100644 --- a/src/slashes/navbarlinks/guestbook.html +++ b/src/slashes/navbarlinks/guestbook.vto @@ -5,10 +5,10 @@ eleventyNavigation: eleventyComputed: desc: Leave a message for {{ sitemeta.siteAuthor.name }}. --- -{%- css %}{% include "src/_bundle/css/comments.css" %}{%- endcss %} -{%- js %}{% include "src/_bundle/js/svgIconControl.js" %}{%- endjs %} -{%- js %}{% include "src/_bundle/js/googleSheetsReaderGizmo.js" %}{%- endjs %} -{%- js %}{% include "src/_bundle/js/comments.js" %}{%- endjs %} +{{- css }}{{ include "src/_bundle/css/comments.css" }}{{- /css }} +{{- js }}{{ include "src/_bundle/js/svgIconControl.js" }}{{- /js }} +{{- js }}{{ include "src/_bundle/js/googleSheetsReaderGizmo.js" }}{{- /js }} +{{- js }}{{ include "src/_bundle/js/comments.js" }}{{- /js }}

              Guestbook Archive: 123Guestbook

              @@ -42,9 +42,9 @@ eleventyComputed: -{%- css %} +{{- css }} .gb__messages--title { text-align: center; margin-bottom: 0.5em; } -{% endcss %} +{{ /css }} diff --git a/src/slashes/navbarlinks/links.html b/src/slashes/navbarlinks/links.vto similarity index 100% rename from src/slashes/navbarlinks/links.html rename to src/slashes/navbarlinks/links.vto diff --git a/src/slashes/navbarlinks/shrines.html b/src/slashes/navbarlinks/shrines.vto similarity index 75% rename from src/slashes/navbarlinks/shrines.html rename to src/slashes/navbarlinks/shrines.vto index 7331f341..7f214686 100644 --- a/src/slashes/navbarlinks/shrines.html +++ b/src/slashes/navbarlinks/shrines.vto @@ -12,28 +12,28 @@ eleventyComputed: -{%- css %} +{{- css }} .shrine-index { display: grid; gap: 2em; @@ -46,4 +46,4 @@ eleventyComputed: display: grid; gap: 0.7em; } -{% endcss %} +{{ /css }} From 379e0d0854714dc12e572211d2933a3b6283cf09 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 20:30:07 +0800 Subject: [PATCH 07/59] Convert blog posts page to Vento --- src/blog/{posts.html => posts.vto} | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) rename src/blog/{posts.html => posts.vto} (62%) diff --git a/src/blog/posts.html b/src/blog/posts.vto similarity index 62% rename from src/blog/posts.html rename to src/blog/posts.vto index 7ff513b0..32d6c26e 100644 --- a/src/blog/posts.html +++ b/src/blog/posts.vto @@ -3,29 +3,29 @@ title: Blog Archive layout: main/content tags: blog pages eleventyComputed: - desc: Archive of blog posts on {{ sitemeta.siteName | safe }} + desc: Archive of blog posts on {{ sitemeta.siteName }} eleventyNavigation: key: Blog Archive parent: Blog --- -{%- css %} +{{- css }} .blog__postlist { display: grid; gap: 1em; @@ -37,4 +37,4 @@ eleventyNavigation: line-height: 1.3; margin-bottom: 0.2em; } -{% endcss %} +{{ /css }} From 345bf52436f2645b2bd135ffbfbfdec50a4fda6f Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 20:32:08 +0800 Subject: [PATCH 08/59] Convert yearly changelog archive to Vento --- src/changelogs/pages/{2022.html => 2022.vto} | 4 ++-- src/changelogs/pages/{2023.html => 2023.vto} | 4 ++-- src/changelogs/pages/{2024.html => 2024.vto} | 4 ++-- src/changelogs/pages/{2025.html => 2025.vto} | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) rename src/changelogs/pages/{2022.html => 2022.vto} (64%) rename src/changelogs/pages/{2023.html => 2023.vto} (64%) rename src/changelogs/pages/{2024.html => 2024.vto} (64%) rename src/changelogs/pages/{2025.html => 2025.vto} (64%) diff --git a/src/changelogs/pages/2022.html b/src/changelogs/pages/2022.vto similarity index 64% rename from src/changelogs/pages/2022.html rename to src/changelogs/pages/2022.vto index 52d98ae0..bb95105d 100644 --- a/src/changelogs/pages/2022.html +++ b/src/changelogs/pages/2022.vto @@ -7,5 +7,5 @@ eleventyNavigation: order: 2 --- -{% set changelogList = collections["changelog 2022"] %} -{% include "main/changelogs-list.html" %} +{{ set changelogList = collections["changelog 2022"] }} +{{ include "partials/changelogs-list.vto" }} diff --git a/src/changelogs/pages/2023.html b/src/changelogs/pages/2023.vto similarity index 64% rename from src/changelogs/pages/2023.html rename to src/changelogs/pages/2023.vto index ba60635c..6e9a8d9d 100644 --- a/src/changelogs/pages/2023.html +++ b/src/changelogs/pages/2023.vto @@ -7,5 +7,5 @@ eleventyNavigation: order: 3 --- -{% set changelogList = collections["changelog 2023"] %} -{% include "main/changelogs-list.html" %} +{{ set changelogList = collections["changelog 2023"] }} +{{ include "partials/changelogs-list.vto" }} diff --git a/src/changelogs/pages/2024.html b/src/changelogs/pages/2024.vto similarity index 64% rename from src/changelogs/pages/2024.html rename to src/changelogs/pages/2024.vto index a54d331d..5a2a202c 100644 --- a/src/changelogs/pages/2024.html +++ b/src/changelogs/pages/2024.vto @@ -7,5 +7,5 @@ eleventyNavigation: order: 4 --- -{% set changelogList = collections["changelog 2024"] %} -{% include "main/changelogs-list.html" %} +{{ set changelogList = collections["changelog 2024"] }} +{{ include "partials/changelogs-list.vto" }} diff --git a/src/changelogs/pages/2025.html b/src/changelogs/pages/2025.vto similarity index 64% rename from src/changelogs/pages/2025.html rename to src/changelogs/pages/2025.vto index 27273910..a3c0b8f1 100644 --- a/src/changelogs/pages/2025.html +++ b/src/changelogs/pages/2025.vto @@ -7,5 +7,5 @@ eleventyNavigation: order: 5 --- -{% set changelogList = collections["changelog 2025"] %} -{% include "main/changelogs-list.html" %} +{{ set changelogList = collections["changelog 2025"] }} +{{ include "partials/changelogs-list.html" }} From e072f381165a8d7f07c1e958d10e99ec38f6cffe Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 20:33:44 +0800 Subject: [PATCH 09/59] Rename content layout tempaltes --- src/articles/articles.11tydata.js | 4 ++-- src/blog/posts.vto | 2 +- src/blog/posts/posts.11tydata.js | 4 ++-- src/links/pages/pages.11tydata.js | 4 ++-- src/projects/projects.11tydata.js | 2 +- src/slashes/slashes.11tydata.js | 4 ++-- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/articles/articles.11tydata.js b/src/articles/articles.11tydata.js index 7dfcddea..39db2e9b 100644 --- a/src/articles/articles.11tydata.js +++ b/src/articles/articles.11tydata.js @@ -1,6 +1,6 @@ export default { tags: ["articles", "contents", "feed items"], - layout: "main/content", + layout: "layouts/content", permalink: "/articles/{{ page.fileSlug }}/", isArticle: true, eleventyComputed: { @@ -10,4 +10,4 @@ export default { parent: "Articles" } } -} \ No newline at end of file +} diff --git a/src/blog/posts.vto b/src/blog/posts.vto index 32d6c26e..7610743e 100644 --- a/src/blog/posts.vto +++ b/src/blog/posts.vto @@ -1,6 +1,6 @@ --- title: Blog Archive -layout: main/content +layout: layouts/content tags: blog pages eleventyComputed: desc: Archive of blog posts on {{ sitemeta.siteName }} diff --git a/src/blog/posts/posts.11tydata.js b/src/blog/posts/posts.11tydata.js index cc463039..d62c4fc3 100644 --- a/src/blog/posts/posts.11tydata.js +++ b/src/blog/posts/posts.11tydata.js @@ -1,5 +1,5 @@ export default { - layout: "main/content", + layout: "layouts/content", tags: ["posts", "contents", "feed items"], isArticle: true, eleventyComputed: { @@ -9,4 +9,4 @@ export default { parent: "Blog Archive" } } -} \ No newline at end of file +} diff --git a/src/links/pages/pages.11tydata.js b/src/links/pages/pages.11tydata.js index c882c1c4..5952266b 100644 --- a/src/links/pages/pages.11tydata.js +++ b/src/links/pages/pages.11tydata.js @@ -1,5 +1,5 @@ export default { - layout: "main/content", + layout: "layouts/content", permalink: "/links/{{ page.fileSlug }}/", hasBreadcrumbs: true, eleventyComputed: { @@ -9,4 +9,4 @@ export default { parent: "Links" } } -} \ No newline at end of file +} diff --git a/src/projects/projects.11tydata.js b/src/projects/projects.11tydata.js index 03b03918..f02e22b9 100644 --- a/src/projects/projects.11tydata.js +++ b/src/projects/projects.11tydata.js @@ -1,6 +1,6 @@ export default { tags: "project pages", - layout: "main/content.html", + layout: "layouts/content.html", hasBreadcrumbs: true, eleventyComputed: { eleventyNavigation: { diff --git a/src/slashes/slashes.11tydata.js b/src/slashes/slashes.11tydata.js index 5d9b1fe8..e16f53f1 100644 --- a/src/slashes/slashes.11tydata.js +++ b/src/slashes/slashes.11tydata.js @@ -1,10 +1,10 @@ export default { tags: "pages", - layout: "main/content", + layout: "layouts/content", permalink: "/{{ page.fileSlug }}/", eleventyComputed: { eleventyNavigation: { key: (data) => data.title } } -} \ No newline at end of file +} From 97970ee3f7dcf3b2d9b55ab09d7dd54919fa157c Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 20:34:50 +0800 Subject: [PATCH 10/59] Rename changelog partials --- src/changelogs/pages/2022.vto | 2 +- src/changelogs/pages/2023.vto | 2 +- src/changelogs/pages/2024.vto | 2 +- src/changelogs/pages/2025.vto | 2 +- src/changelogs/pages/layouts.md | 2 +- src/changelogs/pages/pages.11tydata.js | 4 ++-- src/slashes/footerlinks/changelogs.vto | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/changelogs/pages/2022.vto b/src/changelogs/pages/2022.vto index bb95105d..51c7bae7 100644 --- a/src/changelogs/pages/2022.vto +++ b/src/changelogs/pages/2022.vto @@ -1,5 +1,5 @@ --- -layout: main/changelogs +layout: partials/changelogs title: "Website Changelog Archive: 2022" desc: Changelog of my website during the year of 2022. changelogNav: "2022" diff --git a/src/changelogs/pages/2023.vto b/src/changelogs/pages/2023.vto index 6e9a8d9d..51382c0c 100644 --- a/src/changelogs/pages/2023.vto +++ b/src/changelogs/pages/2023.vto @@ -1,5 +1,5 @@ --- -layout: main/changelogs +layout: partials/changelogs title: "Website Changelog Archive: 2023" desc: Changelog of my website during the year of 2023. changelogNav: "2023" diff --git a/src/changelogs/pages/2024.vto b/src/changelogs/pages/2024.vto index 5a2a202c..1a3803ae 100644 --- a/src/changelogs/pages/2024.vto +++ b/src/changelogs/pages/2024.vto @@ -1,5 +1,5 @@ --- -layout: main/changelogs +layout: partials/changelogs title: "Website Changelog Archive: 2024" desc: Changelog of my website during the year of 2024. changelogNav: "2024" diff --git a/src/changelogs/pages/2025.vto b/src/changelogs/pages/2025.vto index a3c0b8f1..3275ec40 100644 --- a/src/changelogs/pages/2025.vto +++ b/src/changelogs/pages/2025.vto @@ -1,5 +1,5 @@ --- -layout: main/changelogs +layout: partials/changelogs title: "Website Changelog Archive: 2025" desc: Changelog of my website during the year of 2025. changelogNav: "2025" diff --git a/src/changelogs/pages/layouts.md b/src/changelogs/pages/layouts.md index b95dbc6a..cb1fda5f 100644 --- a/src/changelogs/pages/layouts.md +++ b/src/changelogs/pages/layouts.md @@ -1,5 +1,5 @@ --- -layout: main/changelogs +layout: partials/changelogs title: Website Layout Archive desc: An archive for the page layout designs mt website has used. changelogNav: Website Layouts diff --git a/src/changelogs/pages/pages.11tydata.js b/src/changelogs/pages/pages.11tydata.js index 11f72c4c..f175a1ce 100644 --- a/src/changelogs/pages/pages.11tydata.js +++ b/src/changelogs/pages/pages.11tydata.js @@ -1,6 +1,6 @@ export default { tags: "changelog pages", - layout: "main/changelogs", + layout: "partials/changelogs", permalink: "/changelogs/{{ page.fileSlug }}/", eleventyComputed: { eleventyNavigation: { @@ -8,4 +8,4 @@ export default { parent: "Changelogs" } } -} \ No newline at end of file +} diff --git a/src/slashes/footerlinks/changelogs.vto b/src/slashes/footerlinks/changelogs.vto index a415b517..58d6e30e 100644 --- a/src/slashes/footerlinks/changelogs.vto +++ b/src/slashes/footerlinks/changelogs.vto @@ -1,5 +1,5 @@ --- -layout: main/changelogs +layout: partials/changelogs title: Changelogs pageTitle: Website Changelogs desc: Changelogs of my website. From 0b483e0d08e1c77a495a89587534e064ed65a7d7 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 20:35:36 +0800 Subject: [PATCH 11/59] Rename slash page layout includes --- src/slashes/footerlinks/footerlinks.11tydata.js | 2 +- src/slashes/statements/statements.11tydata.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/slashes/footerlinks/footerlinks.11tydata.js b/src/slashes/footerlinks/footerlinks.11tydata.js index a9101fff..28c58594 100644 --- a/src/slashes/footerlinks/footerlinks.11tydata.js +++ b/src/slashes/footerlinks/footerlinks.11tydata.js @@ -1,4 +1,4 @@ export default { - layout: "main/slashpage", + layout: "layouts/slashpage", tags: "footer links" } diff --git a/src/slashes/statements/statements.11tydata.js b/src/slashes/statements/statements.11tydata.js index 3d49e2cb..5ccbe7e8 100644 --- a/src/slashes/statements/statements.11tydata.js +++ b/src/slashes/statements/statements.11tydata.js @@ -1,5 +1,5 @@ export default { - layout: "main/slashpage", + layout: "layouts/slashpage", tags: "statements", articleElement: true, eleventyComputed: { From 9e2680129c5a962f70e94d5657884b7f3d348791 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 20:36:40 +0800 Subject: [PATCH 12/59] Fix links layout includes --- src/slashes/navbarlinks/links.vto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slashes/navbarlinks/links.vto b/src/slashes/navbarlinks/links.vto index 0b2944e0..c26deab2 100644 --- a/src/slashes/navbarlinks/links.vto +++ b/src/slashes/navbarlinks/links.vto @@ -1,5 +1,5 @@ --- -layout: main/links +layout: layout/links title: Links desc: A curated collection of links. hasTooltips: true From 6b8d8fa3854d1aec662b537ef67651835f7148ba Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 20:37:20 +0800 Subject: [PATCH 13/59] Fix links layout includes --- src/slashes/navbarlinks/links.vto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slashes/navbarlinks/links.vto b/src/slashes/navbarlinks/links.vto index c26deab2..2d8c8183 100644 --- a/src/slashes/navbarlinks/links.vto +++ b/src/slashes/navbarlinks/links.vto @@ -1,5 +1,5 @@ --- -layout: layout/links +layout: layouts/links title: Links desc: A curated collection of links. hasTooltips: true From d17109609549c9fd5d4a126793fd0cbf08fd8375 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 20:38:02 +0800 Subject: [PATCH 14/59] Fix content layout includes --- src/_includes/layouts/slashpage.vto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_includes/layouts/slashpage.vto b/src/_includes/layouts/slashpage.vto index 3aa35328..1a2d2b0e 100644 --- a/src/_includes/layouts/slashpage.vto +++ b/src/_includes/layouts/slashpage.vto @@ -1,5 +1,5 @@ --- -layout: layout/content +layout: layouts/content --- {{ content }} From a14aa2ad3517ca41cb038c58dd229bb16f754b46 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 20:38:50 +0800 Subject: [PATCH 15/59] Remove layout file extension for content layout --- src/projects/projects.11tydata.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/projects/projects.11tydata.js b/src/projects/projects.11tydata.js index f02e22b9..25a8acc6 100644 --- a/src/projects/projects.11tydata.js +++ b/src/projects/projects.11tydata.js @@ -1,6 +1,6 @@ export default { tags: "project pages", - layout: "layouts/content.html", + layout: "layouts/content", hasBreadcrumbs: true, eleventyComputed: { eleventyNavigation: { From dc51da01f78f85dd959223869ad80fa6ca5f1ac3 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 20:39:50 +0800 Subject: [PATCH 16/59] FIx heading anchor shortcode escape --- src/_includes/components/functions.vto | 2 +- src/_includes/partials/changelogs-list.vto | 2 +- src/links/linkgroups/joined.vto | 6 ++-- src/slashes/navbarlinks/adoptables.vto | 32 +++++++++++----------- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/_includes/components/functions.vto b/src/_includes/components/functions.vto index f93e7f49..d4c75830 100644 --- a/src/_includes/components/functions.vto +++ b/src/_includes/components/functions.vto @@ -12,7 +12,7 @@ {{ /export }} {{ export function modEntry(params) }} -{{ headingAnchor 3 }}{{ params.title }}{{ \/headingAnchor }} +{{ headingAnchor 3 }}{{ params.title }}{{ /headingAnchor }}
              Banner of {{ params.title }} mod

              {{ params.desc }}

              diff --git a/src/_includes/partials/changelogs-list.vto b/src/_includes/partials/changelogs-list.vto index 40c25326..3bcc6454 100644 --- a/src/_includes/partials/changelogs-list.vto +++ b/src/_includes/partials/changelogs-list.vto @@ -1,7 +1,7 @@ {{ for log of changelogList |> toReversed }} {{ headingAnchor 2, log.fileSlug }} {{ log.date |> formatDate }} -{{ \/headingAnchor }} +{{ /headingAnchor }} {{ log.content }} {{ /for }} diff --git a/src/links/linkgroups/joined.vto b/src/links/linkgroups/joined.vto index ea90cdf8..809b5bb4 100644 --- a/src/links/linkgroups/joined.vto +++ b/src/links/linkgroups/joined.vto @@ -4,13 +4,13 @@ date: 2023-01-29 toc: true --- -{{ headingAnchor 3 }}Web Cliques{{ \/headingAnchor }} +{{ headingAnchor 3 }}Web Cliques{{ /headingAnchor }} {{ include "components/webcliques.vto" }} -{{ headingAnchor 3 }}Fanlistings{{ \/headingAnchor }} +{{ headingAnchor 3 }}Fanlistings{{ /headingAnchor }}

              Check out Beehive, my fanlisting collective to see all the fanlistings I own, have joined or have applied to join.

              -{{ headingAnchor 3 }}Webrings{{ \/headingAnchor }} +{{ headingAnchor 3 }}Webrings{{ /headingAnchor }}
              • diff --git a/src/slashes/navbarlinks/adoptables.vto b/src/slashes/navbarlinks/adoptables.vto index 928443f9..c6bd7bef 100644 --- a/src/slashes/navbarlinks/adoptables.vto +++ b/src/slashes/navbarlinks/adoptables.vto @@ -36,21 +36,21 @@ eleventyNavigation:
            - {{ headingAnchor 2 }}Virtual Pets{{ \/headingAnchor }} + {{ headingAnchor 2 }}Virtual Pets{{ /headingAnchor }} - {{ headingAnchor 3 }}TamaNOTchi{{ \/headingAnchor }} + {{ headingAnchor 3 }}TamaNOTchi{{ /headingAnchor }}

            Feel free to check out my TamaNOTchi virtual pets and feed them!

              {{ virtualPet("https://tamanotchi.world/13150c", "https://tamanotchi.world/i2/13150", "Pix") }} {{ virtualPet("https://tamanotchi.world/14391c", "https://tamanotchi.world/i2/14391", "Neko") }}
            - {{ headingAnchor 3 }}Pixel Cat's End{{ \/headingAnchor }} + {{ headingAnchor 3 }}Pixel Cat's End{{ /headingAnchor }}

            I play Pixel Cat's End, so feel free to check out my profile and my not-cats! You may send me a friend request too if you also play Pixel Cat's End.

            - {{ headingAnchor 2 }}Personal Website Adoptables{{ \/headingAnchor }} + {{ headingAnchor 2 }}Personal Website Adoptables{{ /headingAnchor }}

            These are adopted from other personal websites.

              @@ -66,27 +66,27 @@ eleventyNavigation:
            - {{ headingAnchor 2 }}Pixel Cliques{{ \/headingAnchor }} + {{ headingAnchor 2 }}Pixel Cliques{{ /headingAnchor }} - {{ headingAnchor 3 }}The Apple{{ \/headingAnchor }} + {{ headingAnchor 3 }}The Apple{{ /headingAnchor }} The Apple pixel clique - {{ headingAnchor 3 }}Made by a Girl{{ \/headingAnchor }} + {{ headingAnchor 3 }}Made by a Girl{{ /headingAnchor }} Made by a Girl pixel clique
            - {{ headingAnchor 2 }}Kitty Friends Pixel Club{{ \/headingAnchor }} + {{ headingAnchor 2 }}Kitty Friends Pixel Club{{ /headingAnchor }}

            An old pixel club about cats, revived by Divergent Rays.

            - {{ headingAnchor 3 }}My Kitty Friends{{ \/headingAnchor }} + {{ headingAnchor 3 }}My Kitty Friends{{ /headingAnchor }}
              {{ myPixelArt("kittyfriends/leilukin-blackkitty.png", "Leilukin's black kitty friend") }} {{ myPixelArt("kittyfriends/leilukin-purplekitty.png", "Leilukin's purple kitty friend") }}

            Created on 21 July 2024. If you want to adopt any of my kitty friends, please link back to my website and do not hotlink the images.

            - {{ headingAnchor 3 }}Adopted Kitty Friends{{ \/headingAnchor }} + {{ headingAnchor 3 }}Adopted Kitty Friends{{ /headingAnchor }}
              {{ adoptable("https://artwork.neocities.org/cliques", "kittyfriends/artwork-bat.gif", "artwork's bat kitty") }} {{ adoptable("https://artwork.neocities.org/cliques", "kittyfriends/artwork-pumpkin.gif", "artwork's pumpkin kitty") }} @@ -103,17 +103,17 @@ eleventyNavigation:
            - {{ headingAnchor 2 }}Pantson Color Club{{ \/headingAnchor }} + {{ headingAnchor 2 }}Pantson Color Club{{ /headingAnchor }}

            A pixel club created by Alexandra.

            Join the Pantson Color Club!
            - {{ headingAnchor 3 }}My Colour Cards{{ \/headingAnchor }} + {{ headingAnchor 3 }}My Colour Cards{{ /headingAnchor }}
              {{ myPixelArt("pantson/leilukin-grape-juice.png", "Leilukin's GRAPE JUICE, colour number 19-3220 TPX") }}

            Created on 17 September 2024. If you are a member of the Pantson Color Club and you would like to exchange colour cards with me, feel free to ask on my guestbook!

            - {{ headingAnchor 3 }}Exchanged Colour Cards{{ \/headingAnchor }} + {{ headingAnchor 3 }}Exchanged Colour Cards{{ /headingAnchor }}
              {{ adoptable("https://aetherbiome.neocities.org/", "pantson/anna-not-a-brick.png", "Anna's NOT A BRICK, colour number 7580U") }} {{ adoptable("https://aetherbiome.neocities.org/", "pantson/anna-kale.png", "Anna's KALE, colour number 18-0107") }} @@ -135,10 +135,10 @@ eleventyNavigation:
            - {{ headingAnchor 2 }}Salad Magazine{{ \/headingAnchor }} + {{ headingAnchor 2 }}Salad Magazine{{ /headingAnchor }}

            Salad Magazine is a web-based zine for creative works run by Kalechips.

            - {{ headingAnchor 3 }}Ink Snail and Sparkle Snail{{ \/headingAnchor }} + {{ headingAnchor 3 }}Ink Snail and Sparkle Snail{{ /headingAnchor }}
            Black ink snail pixel art by Semper Sparkle snail pixel art by Semper @@ -147,7 +147,7 @@ eleventyNavigation:
            - {{ headingAnchor 2 }}32-Bit Cafe Code Jam: Destination Vacation{{ \/headingAnchor }} + {{ headingAnchor 2 }}32-Bit Cafe Code Jam: Destination Vacation{{ /headingAnchor }}

            Stuff I collected from 32-Bit Cafe's Community Code Jam #4: Destination Vacation in June 2024, including a passport with stamps from the code jam entries, and extra goodies from some of the participants.

            • From 67ccdc5a570c717c743592da747eea0887113897 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 20:40:53 +0800 Subject: [PATCH 17/59] Change pride button macro to function --- src/index.vto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.vto b/src/index.vto index 4d366641..1b0feff1 100644 --- a/src/index.vto +++ b/src/index.vto @@ -65,11 +65,11 @@ eleventyComputed:

              Always Proud

              - {{- macro prideButton(file, alt, width=88, height=31) -}} + {{ function prideButton(file, alt, width=88, height=31) -}}
            • {{ alt }}
            • - {{- endmacro -}} + {{ /function }}
                {{ prideButton("progress", "Progress Flag by Daniel Quasar (2018)") }} {{ prideButton("9_stripe", "Nine-Stripe Rainbow Flag by Gilbert Baker (2017)") }} From 68d96d0d91cff9154e984c1193bf1fc523a574ae Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 20:41:48 +0800 Subject: [PATCH 18/59] Fix includes of my button compoennts --- src/index.vto | 2 +- src/slashes/navbarlinks/about.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.vto b/src/index.vto index 1b0feff1..290d866c 100644 --- a/src/index.vto +++ b/src/index.vto @@ -37,7 +37,7 @@ eleventyComputed:

                Link to My Website

                - {{ include "main/my-button.html" }} + {{ include "components/my-button.vto" }}
                diff --git a/src/slashes/navbarlinks/about.md b/src/slashes/navbarlinks/about.md index f60680a5..5cdd9328 100644 --- a/src/slashes/navbarlinks/about.md +++ b/src/slashes/navbarlinks/about.md @@ -33,7 +33,7 @@ More information about this site can be found on the following pages: ### Link to This Site -{% include "main/my-button.html" %} +{% include "components/my-button.vto" %} {% endcontainer %} {% container "article", "content__section" %} From 68b4d1a2468b9541a3eb206c4c23da8ce76d3056 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 20:42:47 +0800 Subject: [PATCH 19/59] Fix archive partial includes --- src/slashes/archive/archive.vto | 2 +- src/slashes/archive/category.vto | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/slashes/archive/archive.vto b/src/slashes/archive/archive.vto index 19e073bf..a664f9c6 100644 --- a/src/slashes/archive/archive.vto +++ b/src/slashes/archive/archive.vto @@ -7,4 +7,4 @@ eleventyNavigation: --- {{ set contentList = collections.contents |> toReversed }} -{{ include "layouts/archive.vto" }} +{{ include "partials/archive.vto" }} diff --git a/src/slashes/archive/category.vto b/src/slashes/archive/category.vto index dde16ec0..f8c482bb 100644 --- a/src/slashes/archive/category.vto +++ b/src/slashes/archive/category.vto @@ -14,6 +14,6 @@ eleventyComputed:

                {{ contentCount }} Contents Filed Under "{{ category }}"

                {{ set contentList = collections.contents |> filterByCategory(category) |> toReversed }} -{{ include "layouts/archive.vto" }} +{{ include "partials/archive.vto" }}

                See all content categories.

                From be37a6223e1266efd986ee2cd5408cf6337a6443 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 20:43:48 +0800 Subject: [PATCH 20/59] Fix fileredByCategory fileter pipe --- src/slashes/archive/categories.vto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slashes/archive/categories.vto b/src/slashes/archive/categories.vto index c6e17796..623de6c3 100644 --- a/src/slashes/archive/categories.vto +++ b/src/slashes/archive/categories.vto @@ -9,7 +9,7 @@ eleventyNavigation:
                  {{ for category of collections.categories }} {{ set categoryUrl }}/categories/{{ category | slugify }}/{{ /set }} - {{ set categoryPostCount = collections.contents | filterByCategory(category) |> itemCount }} + {{ set categoryPostCount = collections.contents |> filterByCategory(category) |> itemCount }}
                • {{ category }} ({{ categoryPostCount }})
                • {{ /for }}
                From f8278fea991651c0515c18fca85aee9ef24d7023 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 20:44:25 +0800 Subject: [PATCH 21/59] Fix slugify pipe --- src/slashes/archive/categories.vto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slashes/archive/categories.vto b/src/slashes/archive/categories.vto index 623de6c3..27aa3086 100644 --- a/src/slashes/archive/categories.vto +++ b/src/slashes/archive/categories.vto @@ -8,7 +8,7 @@ eleventyNavigation:
                  {{ for category of collections.categories }} - {{ set categoryUrl }}/categories/{{ category | slugify }}/{{ /set }} + {{ set categoryUrl }}/categories/{{ category |> slugify }}/{{ /set }} {{ set categoryPostCount = collections.contents |> filterByCategory(category) |> itemCount }}
                • {{ category }} ({{ categoryPostCount }})
                • {{ /for }} From e07a33af416559473ec704d4cba0d999cc8fdea3 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 20:46:41 +0800 Subject: [PATCH 22/59] Fix typo in closing function block --- src/_config/filters.js | 2 +- src/slashes/navbarlinks/adoptables.vto | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/_config/filters.js b/src/_config/filters.js index a956fa97..0fdebf16 100644 --- a/src/_config/filters.js +++ b/src/_config/filters.js @@ -26,7 +26,7 @@ export default function(eleventyConfig) { }); // Filter: Collection item count - eleventyConfig.addFilter("itemCount", (array) => array.length() ); + eleventyConfig.addFilter("itemCount", (array) => array.length ); // Filter: Thousands separator eleventyConfig.addFilter("thousands", function(num) { diff --git a/src/slashes/navbarlinks/adoptables.vto b/src/slashes/navbarlinks/adoptables.vto index c6bd7bef..fa46e20a 100644 --- a/src/slashes/navbarlinks/adoptables.vto +++ b/src/slashes/navbarlinks/adoptables.vto @@ -21,7 +21,7 @@ eleventyNavigation:
                • {{ alt }}
                • -{{ /functioin }} +{{ /function }} {{ function adoptable(url, file, alt, tooltip=alt) }}
                • From 82abf637e6cf197027b39176aaec32ee8ec5a7e9 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 21:16:06 +0800 Subject: [PATCH 23/59] Fix blog posts page for loop syntax --- src/slashes/navbarlinks/blog.vto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/slashes/navbarlinks/blog.vto b/src/slashes/navbarlinks/blog.vto index 0df12adc..d7192ca4 100644 --- a/src/slashes/navbarlinks/blog.vto +++ b/src/slashes/navbarlinks/blog.vto @@ -24,7 +24,7 @@ eleventyComputed:

                  Blog Posts

                  {{ include "components/pagination-oldnew.vto" }} From 7f5ad81ced1a00c8004d767103d1d6bd53893e96 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 21:19:56 +0800 Subject: [PATCH 24/59] Fix guestbook CSS and JavaScript bundle --- src/slashes/navbarlinks/guestbook.vto | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/slashes/navbarlinks/guestbook.vto b/src/slashes/navbarlinks/guestbook.vto index a7e81242..f96097cb 100644 --- a/src/slashes/navbarlinks/guestbook.vto +++ b/src/slashes/navbarlinks/guestbook.vto @@ -5,10 +5,10 @@ eleventyNavigation: eleventyComputed: desc: Leave a message for {{ sitemeta.siteAuthor.name }}. --- -{{- css }}{{ include "src/_bundle/css/comments.css" }}{{- /css }} -{{- js }}{{ include "src/_bundle/js/svgIconControl.js" }}{{- /js }} -{{- js }}{{ include "src/_bundle/js/googleSheetsReaderGizmo.js" }}{{- /js }} -{{- js }}{{ include "src/_bundle/js/comments.js" }}{{- /js }} +{{- css }}{{ include "../_bundle/css/comments.css" }}{{- /css }} +{{- js }}{{ include "../_bundle/js/svgIconControl.js" }}{{- /js }} +{{- js }}{{ include "../_bundle/js/googleSheetsReaderGizmo.js" }}{{- /js }} +{{- js }}{{ include "../_bundle/js/comments.js" }}{{- /js }}

                  Guestbook Archive: 123Guestbook

                  From 1d13df8abb010ae0b631971818f183d8ee44b135 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 21:22:21 +0800 Subject: [PATCH 25/59] Fix guestbook CSS and JavaScript bundle --- src/slashes/navbarlinks/guestbook.vto | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/slashes/navbarlinks/guestbook.vto b/src/slashes/navbarlinks/guestbook.vto index f96097cb..b5570699 100644 --- a/src/slashes/navbarlinks/guestbook.vto +++ b/src/slashes/navbarlinks/guestbook.vto @@ -5,10 +5,10 @@ eleventyNavigation: eleventyComputed: desc: Leave a message for {{ sitemeta.siteAuthor.name }}. --- -{{- css }}{{ include "../_bundle/css/comments.css" }}{{- /css }} -{{- js }}{{ include "../_bundle/js/svgIconControl.js" }}{{- /js }} -{{- js }}{{ include "../_bundle/js/googleSheetsReaderGizmo.js" }}{{- /js }} -{{- js }}{{ include "../_bundle/js/comments.js" }}{{- /js }} +{{- css }}{{ include "../../_bundle/css/comments.css" }}{{- /css }} +{{- js }}{{ include "../../_bundle/js/svgIconControl.js" }}{{- /js }} +{{- js }}{{ include "../../_bundle/js/googleSheetsReaderGizmo.js" }}{{- /js }} +{{- js }}{{ include "../../_bundle/js/comments.js" }}{{- /js }}

                  Guestbook Archive: 123Guestbook

                  From e941de52a73be5b29035f8e28edb7abc6cbecbc1 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 21:34:18 +0800 Subject: [PATCH 26/59] Temporariy comment out changelog content --- src/_includes/partials/changelogs-list.vto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_includes/partials/changelogs-list.vto b/src/_includes/partials/changelogs-list.vto index 3bcc6454..cb8f88a8 100644 --- a/src/_includes/partials/changelogs-list.vto +++ b/src/_includes/partials/changelogs-list.vto @@ -3,5 +3,5 @@ {{ log.date |> formatDate }} {{ /headingAnchor }} -{{ log.content }} +{{# {{ log.content }} #}} {{ /for }} From 1b0ffa78549f26264e67b1b548eaa1077a885b9f Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 21:35:13 +0800 Subject: [PATCH 27/59] Fix changelogs list partial includes --- src/changelogs/pages/2025.vto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/changelogs/pages/2025.vto b/src/changelogs/pages/2025.vto index 3275ec40..d0ddc3d5 100644 --- a/src/changelogs/pages/2025.vto +++ b/src/changelogs/pages/2025.vto @@ -8,4 +8,4 @@ eleventyNavigation: --- {{ set changelogList = collections["changelog 2025"] }} -{{ include "partials/changelogs-list.html" }} +{{ include "partials/changelogs-list.vto" }} From cb734426f967a1333716422652d466748101a886 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 21:40:24 +0800 Subject: [PATCH 28/59] Replace macro includes with functions --- src/projects/videogamemods/kotor1.md | 2 +- src/projects/videogamemods/kotor2.md | 2 +- src/shrines/cassettebeasts/articles.md | 2 +- src/shrines/starwarskotor/articles.md | 2 +- src/shrines/starwarskotor/guides.md | 2 +- src/slashes/navbarlinks/articles.md | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/projects/videogamemods/kotor1.md b/src/projects/videogamemods/kotor1.md index ba32b2fc..08569355 100644 --- a/src/projects/videogamemods/kotor1.md +++ b/src/projects/videogamemods/kotor1.md @@ -12,7 +12,7 @@ eleventyNavigation: If your issue is not addressed on my mod's page, ask for support or report issues with my mods on the mod's page on Deadly Stream, Nexus Mods or [send me an email]({{ sitemeta.siteAuthor.emailDecoyUrl }}){rel="nofollow, noindex"}. -{% from "global/macros.njk" import modEntry %} +{{ import { modEntry } from "components/functions.vto" }} ## Player & Party Members diff --git a/src/projects/videogamemods/kotor2.md b/src/projects/videogamemods/kotor2.md index 067c7a09..ad4963c4 100644 --- a/src/projects/videogamemods/kotor2.md +++ b/src/projects/videogamemods/kotor2.md @@ -12,7 +12,7 @@ eleventyNavigation: If your issue is not addressed on my mod's page, ask for support or report issues with my mods on the mod's page on Deadly Stream, Nexus Mods or [send me an email]({{ sitemeta.siteAuthor.emailDecoyUrl }}){rel="nofollow, noindex"}. -{% from "global/macros.njk" import modEntry %} +{{ import { modEntry } from "components/functions.vto" }} ## Important Note for Steam Users diff --git a/src/shrines/cassettebeasts/articles.md b/src/shrines/cassettebeasts/articles.md index 3c7ef07c..296c2aaa 100644 --- a/src/shrines/cassettebeasts/articles.md +++ b/src/shrines/cassettebeasts/articles.md @@ -12,7 +12,7 @@ eleventyNavigation: order: 1 --- -{% from "global/macros.njk" import articleList with context %} +{{ import { articlesList } from "components/functions.vto" }} ## My {% cite "Cassette Beasts" %} Articles {{ articleList("cassette beasts articles") }} diff --git a/src/shrines/starwarskotor/articles.md b/src/shrines/starwarskotor/articles.md index a33b5fd2..0c288d49 100644 --- a/src/shrines/starwarskotor/articles.md +++ b/src/shrines/starwarskotor/articles.md @@ -12,7 +12,7 @@ eleventyNavigation: order: 1 --- -{% from "global/macros.njk" import articleList with context %} +{{ import { articlesList } from "components/functions.vto" }} ## My Articles for Both Games {{ articleList("kotor both articles") }} diff --git a/src/shrines/starwarskotor/guides.md b/src/shrines/starwarskotor/guides.md index 0dc16367..7e93f7d3 100644 --- a/src/shrines/starwarskotor/guides.md +++ b/src/shrines/starwarskotor/guides.md @@ -12,7 +12,7 @@ eleventyNavigation: order: 2 --- -{% from "global/macros.njk" import articleList with context %} +{{ import { articlesList } from "components/functions.vto" }} ## My KotOR Guides {{ articleList("kotor guides") }} diff --git a/src/slashes/navbarlinks/articles.md b/src/slashes/navbarlinks/articles.md index 069bc233..10d6783f 100644 --- a/src/slashes/navbarlinks/articles.md +++ b/src/slashes/navbarlinks/articles.md @@ -6,7 +6,7 @@ eleventyNavigation: order: 5 --- -{% from "global/macros.njk" import articleList with context %} +{{ import { articlesList } from "components/functions.vto" }} ## My Articles Articles I have written. @@ -18,4 +18,4 @@ Articles I have written. ## Featured Articles Articles featuring other people's interview with me. -{{ articleList("featured articles") }} \ No newline at end of file +{{ articleList("featured articles") }} From 16b9ec6fc3a761c82180d023f3d0af5e13d5c1f0 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 21:41:34 +0800 Subject: [PATCH 29/59] Change Markdown and HTML template rendering to Vento --- eleventy.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eleventy.config.js b/eleventy.config.js index 2e504de8..5208fff9 100644 --- a/eleventy.config.js +++ b/eleventy.config.js @@ -56,8 +56,8 @@ export default function(eleventyConfig) { }); return { - markdownTemplateEngine: "njk", - htmlTemplateEngine: "njk", + markdownTemplateEngine: "vto", + htmlTemplateEngine: "vto", dir: { input: "src" } From 303c7046aa700d7991bcebdc5ca4d1b73149a3ac Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 21:43:25 +0800 Subject: [PATCH 30/59] Change for loop syntax to Vento --- src/links/linkgroups/resources.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/links/linkgroups/resources.md b/src/links/linkgroups/resources.md index 3bc8bd39..6830578a 100644 --- a/src/links/linkgroups/resources.md +++ b/src/links/linkgroups/resources.md @@ -24,11 +24,11 @@ toc: true #### Video Game Mods These are lists of video game mods I use for my own playthroughs. ### Images @@ -44,4 +44,4 @@ These are lists of video game mods I use for my own playthroughs. ### Web -* [Unplatform](https://unplatform.fromthesuperhighway.com/) by ajazz — Interactive guidebook, online library, and recommendations database for escaping social media and joining the indie web. \ No newline at end of file +* [Unplatform](https://unplatform.fromthesuperhighway.com/) by ajazz — Interactive guidebook, online library, and recommendations database for escaping social media and joining the indie web. From f4cca6dc33b39ff6ccbad64ee2e28cbe0f4f23db Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 21:44:11 +0800 Subject: [PATCH 31/59] Change for loop syntax to Vento --- src/links/linkgroups/resources.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/links/linkgroups/resources.md b/src/links/linkgroups/resources.md index 6830578a..56e4e258 100644 --- a/src/links/linkgroups/resources.md +++ b/src/links/linkgroups/resources.md @@ -24,7 +24,7 @@ toc: true #### Video Game Mods These are lists of video game mods I use for my own playthroughs.
                    - {{ for list in collections["mod lists"] }} + {{ for list of collections["mod lists"] }}
                  • {{ list.data.pageTitle || list.data.articleTitle }}
                  • From 46fda6a195427352eb00bb9ac969e3d68827bc84 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 21:50:32 +0800 Subject: [PATCH 32/59] Use Markdown markup for mod entry titles --- src/_includes/components/functions.vto | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/_includes/components/functions.vto b/src/_includes/components/functions.vto index d4c75830..bd3355b8 100644 --- a/src/_includes/components/functions.vto +++ b/src/_includes/components/functions.vto @@ -12,7 +12,8 @@ {{ /export }} {{ export function modEntry(params) }} -{{ headingAnchor 3 }}{{ params.title }}{{ /headingAnchor }} +{{# {{ headingAnchor 3 }}{{ params.title }}{{ /headingAnchor }} #}} +### {{ params.title }}
                    Banner of {{ params.title }} mod

                    {{ params.desc }}

                    From cd43ecfbb635b18593aedacb10c1984a616f212f Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 21:52:01 +0800 Subject: [PATCH 33/59] Replace macro with function in layout archive --- src/changelogs/pages/layouts.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/changelogs/pages/layouts.md b/src/changelogs/pages/layouts.md index cb1fda5f..3fa95f54 100644 --- a/src/changelogs/pages/layouts.md +++ b/src/changelogs/pages/layouts.md @@ -8,12 +8,12 @@ eleventyNavigation: order: 1 --- -{%- macro siteLayout(params) -%} +{{ function siteLayout(params) }} ## {{ params.title }} -{% for screenshot in params.screenshots %} +{{ for screenshot of params.screenshots }} {{ screenshot.imgAlt }} -{% endfor %} -{%- endmacro -%} +{{ /for }} +{{ /function }} {{ siteLayout({ title: "20 April 2024", From 21698cd729da5f3574974a72aefa87859a5cc97c Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 21:54:34 +0800 Subject: [PATCH 34/59] Replace macro with function for ASE playlist --- src/projects/playlists.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/projects/playlists.md b/src/projects/playlists.md index 2de9c6c9..4b273f25 100644 --- a/src/projects/playlists.md +++ b/src/projects/playlists.md @@ -7,14 +7,14 @@ eleventyNavigation: --- ## My Dear Summer Lover -{% from "asummersend/myplaylist.html" import myASEPlaylist %} +{{ import { myASEPlaylist } from "components/aseplaylist.vto" }} {{ myASEPlaylist("A fanmix for the visual novel") }} ## Mandopop LGBTQ+ Anthem [華語流行音樂同志國歌]{lang="zh"} -{% imgFigure "/assets/projects/playlists/Mandopop-LGBTQ+-Anthem-Cover.avif", "Cover of the Mandopop LGBTQ+ Anthem playlist" %} +{{ imgFigure "/assets/projects/playlists/Mandopop-LGBTQ+-Anthem-Cover.avif", "Cover of the Mandopop LGBTQ+ Anthem playlist" }} [Image description: A progress pride flag, with the Traditional Chinese words, [同志國歌]{lang="zh"}, meaning queer anthem on top.] -{% endimgFigure %} +{{ /imgFigure }} A collection of Mandarin queer anthems. From 3820730e42d362df3cb2d1abcaba3f90947f315c Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 22:06:56 +0800 Subject: [PATCH 35/59] Comment out image figure in ASE playlist --- src/_includes/components/aseplaylist.vto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/_includes/components/aseplaylist.vto b/src/_includes/components/aseplaylist.vto index 619254ba..75e26442 100644 --- a/src/_includes/components/aseplaylist.vto +++ b/src/_includes/components/aseplaylist.vto @@ -1,7 +1,7 @@ {{ export function myASEPlaylist(intro) }} -{{ imgFigure "/assets/projects/playlists/My-Dear-Summer-Lover-cover.avif", "Cover image of A Summer’s End fanmix 'My Dear Summer Lover: A Sam x Michelle Fanmix'" }} +{{# {{ imgFigure "/assets/projects/playlists/My-Dear-Summer-Lover-cover.avif", "Cover image of A Summer’s End fanmix 'My Dear Summer Lover: A Sam x Michelle Fanmix'" }} [Image description: Sam and Michelle from A Summer’s End almost kisses, with a play symbol and text on the top left corner, and the text "My Dear Summer Lover: A Sam x Michelle Fanmix" in a digital style font in front.] -{{ /imgFigure }} +{{ /imgFigure }} #}} {{ intro }} [{{ cite "A Summer’s End — Hong Kong 1986" }}](https://www.asummersend.com/home), dedicated to Sam and Michelle’s love story. From a93c4641b1e4657dd17b1222b330ac9c9739ef1b Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 22:08:47 +0800 Subject: [PATCH 36/59] Comment out ASE playlist include --- src/_includes/components/aseplaylist.vto | 4 ++-- src/projects/playlists.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/_includes/components/aseplaylist.vto b/src/_includes/components/aseplaylist.vto index 75e26442..619254ba 100644 --- a/src/_includes/components/aseplaylist.vto +++ b/src/_includes/components/aseplaylist.vto @@ -1,7 +1,7 @@ {{ export function myASEPlaylist(intro) }} -{{# {{ imgFigure "/assets/projects/playlists/My-Dear-Summer-Lover-cover.avif", "Cover image of A Summer’s End fanmix 'My Dear Summer Lover: A Sam x Michelle Fanmix'" }} +{{ imgFigure "/assets/projects/playlists/My-Dear-Summer-Lover-cover.avif", "Cover image of A Summer’s End fanmix 'My Dear Summer Lover: A Sam x Michelle Fanmix'" }} [Image description: Sam and Michelle from A Summer’s End almost kisses, with a play symbol and text on the top left corner, and the text "My Dear Summer Lover: A Sam x Michelle Fanmix" in a digital style font in front.] -{{ /imgFigure }} #}} +{{ /imgFigure }} {{ intro }} [{{ cite "A Summer’s End — Hong Kong 1986" }}](https://www.asummersend.com/home), dedicated to Sam and Michelle’s love story. diff --git a/src/projects/playlists.md b/src/projects/playlists.md index 4b273f25..942e5bf5 100644 --- a/src/projects/playlists.md +++ b/src/projects/playlists.md @@ -7,8 +7,8 @@ eleventyNavigation: --- ## My Dear Summer Lover -{{ import { myASEPlaylist } from "components/aseplaylist.vto" }} -{{ myASEPlaylist("A fanmix for the visual novel") }} +{{# {{ import { myASEPlaylist } from "components/aseplaylist.vto" }} +{{ myASEPlaylist("A fanmix for the visual novel") }} #}} ## Mandopop LGBTQ+ Anthem [華語流行音樂同志國歌]{lang="zh"} From ef79b0c3ff59b79f79a82bb2458d4585d40c66eb Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 22:10:09 +0800 Subject: [PATCH 37/59] Use Vento syntax on articles page --- src/slashes/navbarlinks/articles.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/slashes/navbarlinks/articles.md b/src/slashes/navbarlinks/articles.md index 10d6783f..57a4a39b 100644 --- a/src/slashes/navbarlinks/articles.md +++ b/src/slashes/navbarlinks/articles.md @@ -13,8 +13,8 @@ Articles I have written. {{ articleList("my articles") }} ## My Articles for Video Games with Their Own Pages -* My {% cite "Cassette Beasts" %} shrine [Articles](/shrines/cassettebeasts/articles/) page -* My {% cite "Star Wars: Knights of the Old Republic" %} shrine [Articles](/shrines/starwarskotor/articles/) page +* My {{ cite "Cassette Beasts" }} shrine [Articles](/shrines/cassettebeasts/articles/) page +* My {{ cite "Star Wars: Knights of the Old Republic" }} shrine [Articles](/shrines/starwarskotor/articles/) page ## Featured Articles Articles featuring other people's interview with me. From 74d237b723b1543696c63c11678294f2fd09b1aa Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 22:12:11 +0800 Subject: [PATCH 38/59] FIx article list function name --- src/shrines/cassettebeasts/articles.md | 2 +- src/shrines/starwarskotor/articles.md | 2 +- src/shrines/starwarskotor/guides.md | 2 +- src/slashes/navbarlinks/articles.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/shrines/cassettebeasts/articles.md b/src/shrines/cassettebeasts/articles.md index 296c2aaa..2c392f99 100644 --- a/src/shrines/cassettebeasts/articles.md +++ b/src/shrines/cassettebeasts/articles.md @@ -12,7 +12,7 @@ eleventyNavigation: order: 1 --- -{{ import { articlesList } from "components/functions.vto" }} +{{ import { articleList } from "components/functions.vto" }} ## My {% cite "Cassette Beasts" %} Articles {{ articleList("cassette beasts articles") }} diff --git a/src/shrines/starwarskotor/articles.md b/src/shrines/starwarskotor/articles.md index 0c288d49..5a1264b0 100644 --- a/src/shrines/starwarskotor/articles.md +++ b/src/shrines/starwarskotor/articles.md @@ -12,7 +12,7 @@ eleventyNavigation: order: 1 --- -{{ import { articlesList } from "components/functions.vto" }} +{{ import { articleList } from "components/functions.vto" }} ## My Articles for Both Games {{ articleList("kotor both articles") }} diff --git a/src/shrines/starwarskotor/guides.md b/src/shrines/starwarskotor/guides.md index 7e93f7d3..0fbba45f 100644 --- a/src/shrines/starwarskotor/guides.md +++ b/src/shrines/starwarskotor/guides.md @@ -12,7 +12,7 @@ eleventyNavigation: order: 2 --- -{{ import { articlesList } from "components/functions.vto" }} +{{ import { articleList } from "components/functions.vto" }} ## My KotOR Guides {{ articleList("kotor guides") }} diff --git a/src/slashes/navbarlinks/articles.md b/src/slashes/navbarlinks/articles.md index 57a4a39b..da5da3d3 100644 --- a/src/slashes/navbarlinks/articles.md +++ b/src/slashes/navbarlinks/articles.md @@ -6,7 +6,7 @@ eleventyNavigation: order: 5 --- -{{ import { articlesList } from "components/functions.vto" }} +{{ import { articleList } from "components/functions.vto" }} ## My Articles Articles I have written. From a939c24999cb100d93235561a05e015830cc288e Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 22:15:46 +0800 Subject: [PATCH 39/59] Use Vento syntax for container shortcode --- src/_includes/partials/kotor-modlist.md | 6 +-- src/links/pages/mass-effect-le-mod-list.md | 14 +++---- src/links/pages/stardew-valley-mod-list.md | 8 ++-- src/shrines/asummersend.md | 8 ++-- src/shrines/cassettebeasts.md | 10 ++--- src/shrines/pokemonoras.md | 8 ++-- src/shrines/starwarskotor.md | 4 +- .../guides/kotor-juhani-romance-guide.md | 6 +-- .../resources/kotor1-mod-list.md | 8 ++-- .../resources/kotor2-mod-list.md | 8 ++-- src/slashes/navbarlinks/about.md | 4 +- src/slashes/navbarlinks/projects.md | 40 +++++++++---------- 12 files changed, 62 insertions(+), 62 deletions(-) diff --git a/src/_includes/partials/kotor-modlist.md b/src/_includes/partials/kotor-modlist.md index 238e763e..99d67210 100644 --- a/src/_includes/partials/kotor-modlist.md +++ b/src/_includes/partials/kotor-modlist.md @@ -9,7 +9,7 @@ WARNING: The full list of my mod build contains spoilers for Star Wars: Kn My mod build is not designed for new KotOR{{ kotor2ShortTitle }} players, so I will not censor any information that contains spoilers for the game. In general, I do not recommend using mods in your very first playthrough of any video game, so you can judge and choose which mods you want to use after finishing the game for the first time. The only exceptions are the [KotOR 1 Community Patch](https://deadlystream.com/files/file/1258-kotor-1-community-patch/) for {% cite "KotOR 1" %} and [The Sith Lords Restored Content Mod](https://deadlystream.com/files/file/578-tsl-restored-content-mod/) for KotOR{{ kotor2ShortTitle }}, which are absolutely essential mods that even if you want to use them in your first playthrough, you definitely have my support. If you are going to play KotOR{{ kotor2ShortTitle }} for the first time, and you do not mind using mods, I would suggest checking out the Spoiler-Free version of [KotOR Community Portal’s KotOR mod builds](https://kotor.neocities.org/modding/) instead. -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## Mod Categories @@ -45,7 +45,7 @@ Restored Content Sound Change : As the name implies, these mods make changes to the sound in the vanilla game. The sound could be music or ambient audios. -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## Mod Tiers @@ -64,4 +64,4 @@ Tier 3 - Somewhat Important Tier 4 - Optional : This tier indicates mods that make even smaller or more subjective changes than Tier 3 mods, to the point that using these mods is optional. I include Tier 4 mods in my build for the purpose of maximizing my immersion, or because I use these mods for customization purposes for my characters. {.deflist-1col} -{% endcontainer %} \ No newline at end of file +{% /container %} diff --git a/src/links/pages/mass-effect-le-mod-list.md b/src/links/pages/mass-effect-le-mod-list.md index a6bd5b51..51948ada 100644 --- a/src/links/pages/mass-effect-le-mod-list.md +++ b/src/links/pages/mass-effect-le-mod-list.md @@ -16,7 +16,7 @@ Here I’m compiling a list of all the modifications, or mods in short, that I u The format of this mod list is inspired by [KOTOR Community Portal's mod lists](https://kotor.neocities.org/modding/). (This mod list was last updated on ) -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## Important Notes @@ -24,7 +24,7 @@ The format of this mod list is inspired by [KOTOR Community Portal's mod lists]( In order to prevent mod conflicts as much as possible, installation order matters if you are using a lot of mods. Therefore, the full list of my mod build below has been arranged in the proper installation order to make all these mods compatible. If you are interested in following my mod build, you should install the mods in the order you are presented with them. It is important to note that **you cannot use mods for the original edition of the {% cite "Mass Effect" %} trilogy in the Legendary Edition, and vice versa**. Therefore, since the release of the Legendary Edition, mod authors need to either port or recreate the original trilogy mods, so they can be used for the Legendary Edition. -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## Mod Categories @@ -63,7 +63,7 @@ Restored Content Sound Change : As the name implies, these mods make changes to the sound in the vanilla game. The sound could be music or ambient audio. -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## {% cite "Mass Effect Legendary Edition" %} Modding Tools @@ -71,7 +71,7 @@ Sound Change * [ME3Tweaks Mod Manager](https://me3tweaks.com/modmanager/): This mod manager can be used for both the original edition and the Legendary Edition of the Mass Effect trilogy. * [Mass Effect Legendary Edition Character Code Translator](https://answers.ea.com/t5/Mass-Effect-Legendary-Edition/Import-your-Shepard-from-the-original-trilogy/td-p/10340553): This app allows you to convert your Shepard’s face code from the original edition of {% cite "Mass Effect 2" %} and {% cite "3" %} into the Legendary Edition. The Legendary Edition adds new options to the character creator, so you cannot just directly copy and paste the face code from the original edition and expect your Shepard to look the same in LE. [[(Download Mass Effect Legendary Edition Character Code Translator from Google Drive)](https://drive.google.com/drive/u/0/folders/1ixMj8Eyvfu6DVczMgSIR826xPO1GfMym)] * [Trilogy Save Editor](https://www.nexusmods.com/masseffectlegendaryedition/mods/20): A save editor for the {% cite "Mass Effect" %} trilogy. If you are using any custom hair mods, using a save editor is required. -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## {% cite "Mass Effect 1" %} Legendary Edition Mods @@ -1007,7 +1007,7 @@ Installation Note : I install (LE1) LCM LE3 Liara Nipples.mem and (LE1) 'Ashley' Nipples.mem. --- -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## {% cite "Mass Effect 2" %} Legendary Edition Mods @@ -2275,7 +2275,7 @@ Installation Note : I install (LE2) LCM ERS LE3 Liara Nipples.mem and (LE2) 'Ashley' Nipples.mem. --- -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## {% cite "Mass Effect 3" %} Legendary Edition Mods @@ -3382,4 +3382,4 @@ Category : Appearance Change --- -{% endcontainer %} \ No newline at end of file +{% /container %} diff --git a/src/links/pages/stardew-valley-mod-list.md b/src/links/pages/stardew-valley-mod-list.md index 674431dd..51d70378 100644 --- a/src/links/pages/stardew-valley-mod-list.md +++ b/src/links/pages/stardew-valley-mod-list.md @@ -16,7 +16,7 @@ Here I’m compiling a list of all the modifications, or mods in short, that I u The format of this mod list is inspired by [KOTOR Community Portal's mod lists](https://kotor.neocities.org/modding/). (This mod list was last updated on ) -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## Mod Categories @@ -34,7 +34,7 @@ Interface Change Mechanics Change : This type of mod makes changes to the game’s system which directly impacts the way you play the game, varying from changing the camera angle of a location to altering the core stats of a class. -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## Mod Tiers @@ -53,7 +53,7 @@ Tier 3 - Somewhat Important Tier 4 - Optional : This tier indicates mods that makes even smaller or more subjective changes than Tier 3 mods, to the point that using these mods are optional. I include Tier 4 mods in my build for the purpose of maximizing my immersion, or because I use these mods for customization purposes for my characters. {.deflist-1col} -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## {% cite "Stardew Valley" %} Mod Build - Full List @@ -1355,4 +1355,4 @@ Content Patcher Required : Yes --- -{% endcontainer %} +{% /container %} diff --git a/src/shrines/asummersend.md b/src/shrines/asummersend.md index 815203d5..04475edd 100644 --- a/src/shrines/asummersend.md +++ b/src/shrines/asummersend.md @@ -26,7 +26,7 @@ Initially released in English on 23 April 2020, {% cite "A Summer’s End" %} ha {% cite "A Summer’s End" %} is available on [Steam](https://store.steampowered.com/app/1111370/A_Summers_End__Hong_Kong_1986/) and [itch.io](https://oracleandbone.itch.io/a-summers-end). It also has an [official website](https://www.asummersend.com/). On 22 April 2023, a day before {% cite "A Summer’s End" %}'s third year anniversary, Oracle and Bone [announced](https://www.asummersend.com/blog-intheocean/a-message-from-oracle-and-bone) a spiritual sequel: [{% cite "In the Ocean I Learned to Float" %}](https://www.asummersend.com/about-intheocean), which takes place in the winter of 1988, two years after the events of {% cite "A Summer’s End" %}. -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## How I Discovered {% cite "A Summer’s End — Hong Kong 1986" %} @@ -36,7 +36,7 @@ On 22 April 2023, a day before {% cite "A Summer’s End" %}'s third year annive I first learned about {% cite "A Summer’s End — Hong Kong 1986" %} through [Linux Game Consortium](https://linuxgameconsortium.com/a-summers-end-hong-kong-1986-just-announced/), a Linux gaming news website. There was a period where I set up my gaming laptop to dual boot Windows 10 and Linux, so I ended up following Linux gaming news for a while. While Windows is still my main platform for gaming, the discovery of {% cite "A Summer’s End" %} was the biggest unexpected benefit and surprise when I tried out Linux. As a lesbian, the premise of a visual novel about a sapphic romance already caught my interest, but what urged me to play it even more was the Hong Kong setting, which made my interest in the game personal, since I am a Cantonese-speaking Chinese lesbian who grew up with Hong Kong media. Not to mention, it is rare to see a fiction that tells of a sapphic love story that takes place in Hong Kong. -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## Why {% cite "A Summer’s End — Hong Kong 1986" %} Means a Great Deal to Me @@ -54,7 +54,7 @@ If you ask me to list just one piece of queer art that means everything to me, t I seriously cannot recommend {% cite "A Summer’s End" %} enough, especially for Asian sapphic women. (I also posted this section of text as my review of {% cite "A Summer’s End" %} on Steam, and [received a lot of support](/blog/posts/2023-10-30-support-for-my-steam-review-of-a-summers-end) for it) -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## Featured Articles About {% cite "A Summer’s End — Hong Kong 1986" %} @@ -62,4 +62,4 @@ I seriously cannot recommend {% cite "A Summer’s End" %} enough, especially fo * [Trust, Confidence, and Hope in A Summer’s End – Hong Kong 1986: A Reparative Reading](https://www.gamejournal.it/i11-02_poirier-poulin) by Samuel Poirier-Poulin You can find [articles and interviews that featured {% cite "A Summer’s End — Hong Kong 1986" %}](https://www.asummersend.com/press-kit-featured-articles) on the official {% cite "A Summer’s End" %} website. -{% endcontainer %} +{% /container %} diff --git a/src/shrines/cassettebeasts.md b/src/shrines/cassettebeasts.md index a8458349..fb571dfd 100644 --- a/src/shrines/cassettebeasts.md +++ b/src/shrines/cassettebeasts.md @@ -32,7 +32,7 @@ You can purchase or download {% cite "Cassette Beasts" %} from the below links: * [Nintendo Switch](https://www.nintendo.com/store/products/cassette-beasts-switch/) * [Google Play Store](https://play.google.com/store/apps/details?id=com.RawFury.CassetteBeasts) * [Apple App Store](https://apps.apple.com/sg/app/cassette-beasts/id6736517805) -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## Why You Should Play {% cite "Cassette Beasts" %} @@ -46,7 +46,7 @@ Indie monster collecting games in particular need all the support they can get t I cannot recommend {% cite "Cassette Beasts" %} enough if you like monster collecting games, including, if not especially, if you like {% cite "Pokémon" %} but want an indie alternative, or something different after finding {% cite "Pokémon" %} games getting stale, or becoming jaded by the direction of the {% cite "Pokémon" %} games. If you need more convincing on how {% cite "Cassette Beasts" %} is much more than a {% cite "Pokémon" %} clone, [I have written a huge essay on this shrine](/shrines/cassettebeasts/articles/cassette-beasts-more-than-a-pokemon-clone). -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## My Interest In {% cite "Cassette Beasts" %} @@ -64,7 +64,7 @@ I love {% cite "Cassette Beasts" %} so much that I also purchased its Deluxe Edi Moreover, I ended up unlocking all 123 achievements on Steam on 13 March 2024. Very few RPGs make me want to unlock all the achievements, so it is telling how much I love {% cite "Cassette Beasts" %} that I am willing to spend time and effort to work for all the achievements. {% cite "Cassette Beasts" %} not only is my Game of the Year of 2023, but also it has become my absolute favourite monster collecting game, and even my all-time favourite video game ever. -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## {% cite "Cassette Beasts" %} — My Ultimate Comfort Media @@ -90,7 +90,7 @@ I enjoy every moment of {% cite "Cassette Beasts" %}, a sentiment I can genuinel {% cite "Cassette Beasts" %} has the distinct honour of being one of my favourite entertainment media because not only I like it and find it entertaining, but also I genuinely consider it a well-made masterpiece. The more I played and explored {% cite "Cassette Beasts" %}, the more amazed I was for how much thought was clearly put into making the game, which only got reinforced after reading trivia about the game [on its official wiki](https://wiki.cassettebeasts.com/wiki/Main_Page). -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## My Contributions to the {% cite "Cassette Beasts" %} Community @@ -108,4 +108,4 @@ I created and am running [Land of Confusion](https://fan.leilukin.com/cassettebe On Tumblr, I run the [Cassette Beasts Source](https://cassettebeastssource.tumblr.com/), an unofficial {% cite "Cassette Beasts" %} fan site blog that I created on 25 February 2024. I decided to create a fan site blog on Tumblr due to the fact that Bytten Studio does not have an official Tumblr account, and I wanted a Tumblr blog dedicated to sharing and archiving {% cite "Cassette Beasts" %} news and fan works. I have also contributed to [{% cite "Cassette Beasts" %} TVTropes pages](https://tvtropes.org/pmwiki/pmwiki.php/VideoGame/CassetteBeasts) (I have had a TVTropes account since 18 February 2012), by editing the pages to add information about the game. I was the one who created the [Trivia page](https://tvtropes.org/pmwiki/pmwiki.php/Trivia/CassetteBeasts) for the game on TVTropes. -{% endcontainer %} +{% /container %} diff --git a/src/shrines/pokemonoras.md b/src/shrines/pokemonoras.md index ad2541ea..51ddaa8a 100644 --- a/src/shrines/pokemonoras.md +++ b/src/shrines/pokemonoras.md @@ -23,7 +23,7 @@ eleventyComputed: {% cite "Pokémon Omega Ruby" %} and {% cite "Pokémon Alpha Sapphire" %} are remakes of the 2002 Game Boy Advance role-playing video games {% cite "Pokémon Ruby" %} and {% cite "Pokémon Sapphire" %}. The games are part of the sixth generation of the {% cite "Pokémon" %} main series of video games, developed by Game Freak and published by The Pokémon Company and Nintendo for the Nintendo 3DS. Announced worldwide on the official Pokémon websites on 7 May 2014, {% cite "Omega Ruby" %} and {% cite "Alpha Sapphire" %} were released in most regions of the world on 21 November 2014 except for Europe, where the games were released on 28 November 2014. -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## My History with {% cite "Pokémon Ruby" %} and {% cite "Sapphire" %} @@ -43,7 +43,7 @@ I decided to give Generation 3 another chance, many years after my initial disap My rekindled interest in Pokémon remained throughout the rest of Generation 4 and then Generation 5. When I played Generation 3 and 4 for the first time to catch up, it was known that {% cite "Pokémon HeartGold" %} and {% cite "SoulSilver" %}, remakes of the {% cite "Pokémon Gold" %} and {% cite "Silver" %}, would be released soon. I was already looking forward to {% cite "HeartGold" %} and {% cite "SoulSilver" %} because Generation 2 was my favourite, and when I played {% cite "HeartGold" %} for the first time, it instantly became my favourite Pokémon game. Later I followed the release of Generation 5 games, and played {% cite "Pokémon Black" %} and its sequel {% cite "Pokémon Black 2" %} and enjoyed them as well. However, in the early 2010s, my video game interest started to shift focus to BioWare games and the {% cite "Ace Attorney" %} series. As a result, my interest in {% cite "Pokémon" %} became dormant again until 2021. -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## How I Got into {% cite "Pokémon Omega Ruby" %} and {% cite "Alpha Sapphire" %} @@ -57,7 +57,7 @@ However, by the time Generation 6 of {% cite "Pokémon" %} began in 2013 with {% Fast-forward to 2021, for some reason I was compelled to return to the {% cite "Pokémon" %} franchise again, which started my second phase of catching up with the {% cite "Pokémon" %} main series by playing Generation 6, 7 and {% cite "Pokémon Swotd" %} and {% cite "Shield" %}. Specifically, the Hoenn game remake I chose to picked up was {% cite "Alpha Sapphire" %}. To my surprise, this time after catching up with the {% cite "Pokémon" %} main series games again, I found {% cite "Pokémon Omega Ruby" %} and {% cite "Alpha Sapphire" %} my favourite Pokémon games. -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## Why {% cite "Omega Ruby" %} and {% cite "Alpha Sapphire" %} are My Favourite Pokémon Games @@ -77,4 +77,4 @@ My taste in entertainment media, including video games, have changed a lot since How high my standards for monster collecting games were raised by {% cite "Cassette Beasts" %} cannot be overstated, due to me finding {% cite "Cassette Beasts" %} better than {% cite "Pokémon" %} in many ways. This sentiment only gets reinforced by the disappointing direction of the {% cite "Pokémon" %} franchise since the Nintendo Switch era, due to frequent releases and rushed development schedules taking their toll on the quality of recent {% cite "Pokémon" %} titles. Even though I still harbour nostalgia for the {% cite "Pokémon" %} franchise due to it being a huge part of my childhood and adolescence, I also firmly believe there is nothing inherently wrong with letting something newer and better replace your old favourite, which is what {% cite "Cassette Beasts" %} has done to {% cite "Pokémon" %} as my favourite monster collecting game, and {% cite "Omega Ruby" %} and {% cite "Alpha Sapphire" %} have done to {% cite "HeartGold" %} and {% cite "SoulSilver" %} as my favourite Pokémon games. This is also why the only Pokémon shrine I am making for my website is dedicated to {% cite "Omega Ruby" %} and {% cite "Alpha Sapphire" %} only, and not the franchise in general. -{% endcontainer %} +{% /container %} diff --git a/src/shrines/starwarskotor.md b/src/shrines/starwarskotor.md index a0568257..052f7d6d 100644 --- a/src/shrines/starwarskotor.md +++ b/src/shrines/starwarskotor.md @@ -32,7 +32,7 @@ I had been a {% cite "Star Wars" %} fan since I was 13 in 2005 after watching {% I was hooked immediately to the {% cite "KotOR" %} series when I played them. The first {% cite "KotOR" %} game was the first Western RPG I had played. I was drawn to the games' story and characters and the games' focus on them, since the {% cite "KotOR" %} series was also the most story-heavy games I played at the time. KotOR was also the first video game I played where you can pursue a romance with a character, which was a concept that blew my young mind at the time, because before {% cite "KotOR" %}, I thought a romance between your player character and an NPC you like could only exist in imagination via shipping or fanfiction. My investment in the {% cite "KotOR" %} series has evolved over time, leading to me learning to mod the games and become a modder. -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## My History with {% cite "KotOR" %} Modding @@ -48,4 +48,4 @@ Making same-gender romance mods for {% cite "KotOR 2" %} was the primary motivat I love modding the {% cite "KotOR" %} games, not only because the games are a special interest of mine, but also I love creating things for my interests. Modifying the games made me feel like I have the power to change the game to make them better and more enjoyable, and thus improve my experience with playing the games. You can check out all the {% cite "KotOR" %} mods I have created, including [{% cite "KotOR 1" %} mods](/projects/videogamemods/kotor1) and [{% cite "KotOR 2" %} mods](/projects/videogamemods/kotor2), on my main site's [Projects](/projects/#my-video-game-mods) pages. -{% endcontainer %} +{% /container %} diff --git a/src/shrines/starwarskotor/guides/kotor-juhani-romance-guide.md b/src/shrines/starwarskotor/guides/kotor-juhani-romance-guide.md index 36e298f5..19da57ff 100644 --- a/src/shrines/starwarskotor/guides/kotor-juhani-romance-guide.md +++ b/src/shrines/starwarskotor/guides/kotor-juhani-romance-guide.md @@ -70,7 +70,7 @@ https://www.youtube.com/watch?v=Foj1nmouoIU **BUG WARNING:** There is a bug that may block you from progressing Juhani's Personal Conversation path after you complete History #3, and thus preventing you from triggering Juhani's final romance conversation. See the "Personal Conversation Path" section below for more details about this bug. This bug is fixed by the [KOTOR 1 Community Patch](https://deadlystream.com/files/file/1258-kotor-1-community-patch/), which is a major reason I highly recommend this mod. If you are unable to install mods for some reason, I would suggest that once you complete History #3, stop leveling up your character. Once you get your second Star Map (the Dantooine Star Map counts as the first Star Map), complete Personal #3 _AND_ Personal #4 at once. After all that is done, you can now level up to trigger History #4. -{% endcontainer %} +{% /container %} #### History #4 @@ -112,7 +112,7 @@ https://www.youtube.com/watch?v=Px1JTr7vf9Q **BUG WARNING:** There is an infamous bug with the Xor quest that once you trigger the quest, even after completing it, you will not be able to encounter any other messengers for your other party members' personal quests, and for Mika Dorin's premium shop on Korriban. The fix for this bug is included in the [KOTOR 1 Community Patch](https://deadlystream.com/files/file/1258-kotor-1-community-patch/) and the KotOR 1 Restoration (K1R) mod. If you are unable to use mods, you may want to wait until escaping the Leviathan and unlocking Mika Dorin's premium shop before encountering Xor. If you have activated the "Threat From Xor" quest and want to avoid meeting Xor, do not have Juhani in your party when you walk around the spaceport on Tatooine, Kashyyyk, Manaan or Korriban. -{% endcontainer %} +{% /container %} ### Personal Conversation Path @@ -152,7 +152,7 @@ https://www.youtube.com/watch?v=BOq0fehoYkg **BUG WARNING:** Personal #4 is by far the trickiest to trigger of all Juhani's conversations. There is a bug that once you complete History #3, if you level up even just once, History #4 will override Personal #4, making Personal #4 unavailable, and you will be unable to get the later conversations in the Personal Conversation path (except Personal #7 below), including the final romance conversation. In fact, I found that missing out Personal #4 was _the_ reason I was unable to get Juhani's final romance conversation in my old playthrough. This bug is fixed by the [KOTOR 1 Community Patch](https://deadlystream.com/files/file/1258-kotor-1-community-patch/), which is a major reason I highly recommend this mod. If you are unable to install mods for some reason, I would suggest that once you complete History #3, stop leveling up your character. Once you get your second Star Map (the Dantooine Star Map counts as the first Star Map), complete Personal #3, then _immediately_ talk to Juhani again to check if Personal #4 is available. After you successfully trigger Personal #4 and complete the conversation, you can now level up your character to proceed to History #4 and beyond. -{% endcontainer %} +{% /container %} #### Personal #5 diff --git a/src/shrines/starwarskotor/resources/kotor1-mod-list.md b/src/shrines/starwarskotor/resources/kotor1-mod-list.md index 755a6a9f..aaae3447 100644 --- a/src/shrines/starwarskotor/resources/kotor1-mod-list.md +++ b/src/shrines/starwarskotor/resources/kotor1-mod-list.md @@ -20,7 +20,7 @@ I usually play {% cite "KotOR 1" %} on GOG, though I also own the Steam version The format of this mod list is inspired by [KOTOR Community Portal's mod lists](https://kotor.neocities.org/modding/). (This mod list was last updated on ) -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## KotOR 1 Restoration Compatibility @@ -34,7 +34,7 @@ I have no plans on including K1R in my mod build because: * I have read the [list of content restored by K1R](https://deadlystream.com/topic/3075-whats-restored-in-k1r/), and in my opinion some of those content were cut for good reasons. * The mod has not been updated since 2017, and most of the K1R’s development team, including the project leader, has disappeared from the KotOR modding scene, so do not expect updates any time soon. * Some of the mods that I consider essential to my KotOR 1 playthrough are not compatible with K1R. -{% endcontainer %} +{% /container %} {% include "starwarskotor/modlist-info.md" %} @@ -4281,10 +4281,10 @@ Description : This is a program which modifies your game's executable file to be able to utilize up to 4 gigabytes of RAM, since {% cite "KotOR" %} is a 32-bit application and by default can only utilize 2 gigabytes. This will help the game run smoothly even with the larger texture throughout this mod build creates, and also reduces issues caused by a memory leak which is native to the game, preventing crashes and savegame corruption. --- -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## Final Note In addition to the mods above, I also use some face and Jedi robe reskins of my player character that were for personal use only. -{% endcontainer %} \ No newline at end of file +{% /container %} diff --git a/src/shrines/starwarskotor/resources/kotor2-mod-list.md b/src/shrines/starwarskotor/resources/kotor2-mod-list.md index ac1553a1..dce98607 100644 --- a/src/shrines/starwarskotor/resources/kotor2-mod-list.md +++ b/src/shrines/starwarskotor/resources/kotor2-mod-list.md @@ -20,7 +20,7 @@ I own {% cite "KotOR 2" %} on both Steam and GOG. I play the Steam version of {% The format of this mod list is inspired by [KOTOR Community Portal's mod lists](https://kotor.neocities.org/modding/). (This mod list was last updated on ) -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## Important Things About This Mod Build @@ -32,7 +32,7 @@ Important things to keep in mind about my {% cite "KotOR 2" %} mod build: 2. My {% cite "KotOR 2" %} mod build may not be compatible with M4-78 Enhancement Project (M4-78EP). I have played M4-78EP for a few playthroughs but honestly, I find the mod very tedious after multiple playthroughs, so I do not play {% cite "KotOR 2" %} with M4-78EP any more, and I definitely do not recommend M4-78EP for players who play KotOR 2 or TSLRCM for the first time. 3. My {% cite "KotOR 2" %} mod build is NOT compatible with the Steam Workshop. Frankly, the Steam Workshop is terrible for modding the {% cite "KotOR" %} games and a mod compatibility nightmare for the {% cite "KotOR" %} games. I strongly recommend reading Snigaroo's post on Deadly Stream on [why Steam Workshop is NOT recommended for modding {% cite "KotOR" %}](https://deadlystream.com/topic/7321-why-not-to-use-the-steam-workshop/). Therefore, I do not use nor support the Steam Workshop, and I do not wish any of my mods to be uploaded to the Steam Workshop. If you are interested in following my KotOR 2 mod build, DO NOT use the Steam Workshop version of the mods listed below. -{% endcontainer %} +{% /container %} {% include "starwarskotor/modlist-info.md" %} @@ -3801,7 +3801,7 @@ Leilukin’s Comment : I’ve always hated how skimpy the vanilla dancer outfit is, like how much I hate the vanilla dancer model. With this mod and the dancer model fix from Player & Party Underwear make the “dancing for Vogga” sequence more bearable. --- -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## Final Note @@ -3819,4 +3819,4 @@ Since I play {% cite "KotOR 2" %} with the Aspyr patch, so the game can run smoo 7. Repeat this step for every text file in the folder that has the MOV result.color, r0 line. That can take some time and there might be ways to automate the process but explaining it might take so long that you're probably just better off doing the whole thing manually. 8. After you pasted this into every file that has the MOV result.color, r0 line near the end, copy all text files into the shader\_override folder. 9. Launch the game, the fog should now be fixed. -{% endcontainer %} \ No newline at end of file +{% /container %} diff --git a/src/slashes/navbarlinks/about.md b/src/slashes/navbarlinks/about.md index 5cdd9328..a61868a2 100644 --- a/src/slashes/navbarlinks/about.md +++ b/src/slashes/navbarlinks/about.md @@ -34,7 +34,7 @@ More information about this site can be found on the following pages: ### Link to This Site {% include "components/my-button.vto" %} -{% endcontainer %} +{% /container %} {% container "article", "content__section" %} ## About the Webmaster @@ -77,4 +77,4 @@ Other online platforms you can find me on: ### Support Me {% include "main/support-me.html" %} -{% endcontainer %} +{% /container %} diff --git a/src/slashes/navbarlinks/projects.md b/src/slashes/navbarlinks/projects.md index 454995af..fec0bf7e 100644 --- a/src/slashes/navbarlinks/projects.md +++ b/src/slashes/navbarlinks/projects.md @@ -8,59 +8,59 @@ eleventyComputed: desc: Things {{ sitemeta.siteAuthor.name }} has created. --- -{% container "section", "content__section" %} +{{ container "section", "content__section" }} ## My Other Websites * [Leilukin's Hub Tumbleblog](https://tumbleblog.leilukin.com/) — My tumbleblog powered by [Chyrp Lite](https://chyrplite.net/) * [Beehive](https://fan.leilukin.com/) — My fanlisting collective -{% endcontainer %} +{{ /container }} -{% container "section", "content__section" %} +{{ container "section", "content__section" }} ## My Code Projects
                      - {%- for project in collections["code projects"] -%} + {{ for project of collections["code projects"] }}
                    • {{ project.data.title }} — {{ project.data.desc }}
                    • - {%- endfor -%} + {{ /for }}
                    -{% endcontainer %} +{{ /container }} -{% container "section", "content__section" %} +{{ container "section", "content__section" }} ## My Code Snippets
                      - {%- for snippet in collections["code snippets"] -%} + {{ for snippet of collections["code snippets"] }}
                    • {{ snippet.data.title }} — {{ snippet.data.desc }}
                    • - {%- endfor -%} + {{ /for }}
                    -{% endcontainer %} +{{ /container }} -{% container "section", "content__section" %} +{{ container "section", "content__section" }} ## My Drawings My drawings can be found on my art blog on Tumblr: [🎨 Leilukin's Art Blog](https://leilukinart.tumblr.com/){.link-btn} -{% endcontainer %} +{{ /container }} -{% container "section", "content__section" %} +{{ container "section", "content__section" }} ## My Video Game Mods I have created mods (short for "modifications") for the following video games:
                      - {%- for mods in collections["video game mods"] -%} + {{ for mods of collections["video game mods"] }}
                    • {{ mods.data.title }}
                    • - {%- endfor -%} + {{ /for }}
                    -{% endcontainer %} +{{ /container }} -{% container "section", "content__section" %} +{{ container "section", "content__section" }} ## My Playlists You can check out the playlists I have made on [my dedicated page](./playlists/). -{% endcontainer %} +{{ /container }} -{% container "section", "content__section" %} +{{ container "section", "content__section" }} ## My Characters I have created my own characters for various media and universes. [You can check out my characters here](https://www.notion.so/leilukin/Leilukin-s-Characters-b377e277f01b4474945e85cf4cb15ada?pvs=4). -{% endcontainer %} +{{ /container }} From 8e9209f930d6c17d3949c07f6df89e473f215246 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 22:18:11 +0800 Subject: [PATCH 40/59] Change ASE playlist macro to function --- src/shrines/asummersend/playlists.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/shrines/asummersend/playlists.md b/src/shrines/asummersend/playlists.md index 908abcea..f2958151 100644 --- a/src/shrines/asummersend/playlists.md +++ b/src/shrines/asummersend/playlists.md @@ -11,9 +11,9 @@ eleventyNavigation: order: 1 --- -{% cite "A Summer’s End — Hong Kong 1986" %} is a gold mine of music. Not only that the visual novel has a great soundtrack (its [official soundtrack](https://www.asummersend.com/original-soundtrack) was released on August 21, 2020), but the developer Oracle and Bone has also compiled playlists related to the game. +{{ cite "A Summer’s End — Hong Kong 1986" }} is a gold mine of music. Not only that the visual novel has a great soundtrack (its [official soundtrack](https://www.asummersend.com/original-soundtrack) was released on August 21, 2020), but the developer Oracle and Bone has also compiled playlists related to the game. -As a tribute to {% cite "A Summer’s End" %}, I have also created a fanmix myself. +As a tribute to {{ cite "A Summer’s End" }}, I have also created a fanmix myself. ## Sam's Mixtape @@ -44,5 +44,5 @@ Oracle and Bone compiled this playlist as a tribute to Anita Mui, who was a majo ## My Dear Summer Lover -{% from "asummersend/myplaylist.html" import myASEPlaylist %} +{{ import { myASEPlaylist } from "components/aseplaylist.vto" }} {{ myASEPlaylist("My fanmix for") }} From 829f510c5ed84a2dd62d48f2c9d84c7ca6cea993 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 22:19:01 +0800 Subject: [PATCH 41/59] Comment out ASE playlist from ASE shrine --- src/shrines/asummersend/playlists.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/shrines/asummersend/playlists.md b/src/shrines/asummersend/playlists.md index f2958151..b19e718c 100644 --- a/src/shrines/asummersend/playlists.md +++ b/src/shrines/asummersend/playlists.md @@ -44,5 +44,5 @@ Oracle and Bone compiled this playlist as a tribute to Anita Mui, who was a majo ## My Dear Summer Lover -{{ import { myASEPlaylist } from "components/aseplaylist.vto" }} -{{ myASEPlaylist("My fanmix for") }} +{{# {{ import { myASEPlaylist } from "components/aseplaylist.vto" }} +{{ myASEPlaylist("My fanmix for") }} #}} From 617b95e9ec18be7f68889c4e64ab93aeeb1e5e88 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 22:20:05 +0800 Subject: [PATCH 42/59] Fix Status Cafe component include --- src/index.vto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.vto b/src/index.vto index 290d866c..9aa22692 100644 --- a/src/index.vto +++ b/src/index.vto @@ -59,7 +59,7 @@ eleventyComputed:

                    You can subscribe to the {{ sitemeta.siteName }} RSS feed to get notified of the updates on this website, including new articles, blog posts and website changelogs.

                    - {{ include "main/statuscafe.html" }} + {{ include "components/statuscafe.vto" }}
                  From 0d4ee64fd69f3d20908a5a08be00caa2998ba9f1 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 22:21:06 +0800 Subject: [PATCH 43/59] Fix web cliques component include --- src/index.vto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.vto b/src/index.vto index 9aa22692..2869139c 100644 --- a/src/index.vto +++ b/src/index.vto @@ -87,7 +87,7 @@ eleventyComputed:

                  Web Cliques

                  - {{ include "main/webcliques.html" }} + {{ include "components/webcliques.vto" }}
                  From 2a844910a6bdc20d95f18c452fbd32145678255e Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 22:22:30 +0800 Subject: [PATCH 44/59] Fix closing if tag in content layout --- src/_includes/layouts/content.vto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_includes/layouts/content.vto b/src/_includes/layouts/content.vto index b5f9870f..69ba967d 100644 --- a/src/_includes/layouts/content.vto +++ b/src/_includes/layouts/content.vto @@ -23,7 +23,7 @@ layout: layouts/base

                  {{ if updated }}

                  Last updated on

                  - {{ endif }} + {{ /if }} {{ if categories }}

                  Categories: {{ for cat of categories }} From 4e487ae109782e31d67e9420b4d37eac9d5aacd7 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 22:23:25 +0800 Subject: [PATCH 45/59] Fix closing if tag in content layout --- src/_includes/layouts/content.vto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_includes/layouts/content.vto b/src/_includes/layouts/content.vto index 69ba967d..c87b5c5f 100644 --- a/src/_includes/layouts/content.vto +++ b/src/_includes/layouts/content.vto @@ -68,7 +68,7 @@ layout: layouts/base

                  Next Post:

                  {{ nextPost.data.articleTitle }}
                • - {{ endif }} + {{ /if }}
                {{ /if }} From 3772bce02f62a9cc454f2c313650ddd19fa08028 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 22:25:42 +0800 Subject: [PATCH 46/59] Fix if tag line break --- src/_includes/layouts/content.vto | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/_includes/layouts/content.vto b/src/_includes/layouts/content.vto index c87b5c5f..ce89a7a9 100644 --- a/src/_includes/layouts/content.vto +++ b/src/_includes/layouts/content.vto @@ -76,8 +76,7 @@ layout: layouts/base {{ /if }} - {{ if - (tags && tags.includes("articles")) + {{ if (tags && tags.includes("articles")) || (tags && tags.includes("posts")) || (page.url === "/articles/") || (tags && tags.includes("blog pages")) From 5883a3c714ffbdea98275b1ab90090bdc2f83309 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 22:26:43 +0800 Subject: [PATCH 47/59] Fix content navigation include --- src/_includes/layouts/content.vto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_includes/layouts/content.vto b/src/_includes/layouts/content.vto index ce89a7a9..7730e6bd 100644 --- a/src/_includes/layouts/content.vto +++ b/src/_includes/layouts/content.vto @@ -81,7 +81,7 @@ layout: layouts/base || (page.url === "/articles/") || (tags && tags.includes("blog pages")) }} - {{ include "components/content-nav.vto" }} + {{ include "partials/content-nav.vto" }} {{ /if }} {{ shrineInfo }} From 85f076d1361df44be552a0a16979bc65c20ba3ed Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 22:46:25 +0800 Subject: [PATCH 48/59] Fix shrine CSS includes --- src/_includes/layouts/asummersend.vto | 2 +- src/_includes/layouts/cassettebeasts.vto | 2 +- src/_includes/layouts/pokemonoras.vto | 2 +- src/_includes/layouts/starwarskotor.vto | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/_includes/layouts/asummersend.vto b/src/_includes/layouts/asummersend.vto index bbfc55b0..adaa345d 100644 --- a/src/_includes/layouts/asummersend.vto +++ b/src/_includes/layouts/asummersend.vto @@ -2,7 +2,7 @@ layout: layouts/content sectionName: A Summer’s End — Hong Kong 1986 Shrine --- -{{- css }}{{ include "src/assets/css/asummersend.css" }}{{- /css }} +{{- css }}{{ include "../../assets/css/asummersend.css" }}{{- /css }} {{ set favicon }} diff --git a/src/_includes/layouts/cassettebeasts.vto b/src/_includes/layouts/cassettebeasts.vto index f0b446d2..25e808ea 100644 --- a/src/_includes/layouts/cassettebeasts.vto +++ b/src/_includes/layouts/cassettebeasts.vto @@ -2,7 +2,7 @@ layout: layouts/content sectionName: Cassette Beasts Shrine --- -{{- css }}{{ include "src/assets/css/cassettebeasts.css" }}{{- /css }} +{{- css }}{{ include "../../assets/css/cassettebeasts.css" }}{{- /css }} {{ set favicon }} diff --git a/src/_includes/layouts/pokemonoras.vto b/src/_includes/layouts/pokemonoras.vto index 658c5542..28ba4896 100644 --- a/src/_includes/layouts/pokemonoras.vto +++ b/src/_includes/layouts/pokemonoras.vto @@ -2,7 +2,7 @@ layout: layouts/content sectionName: Pokémon Omega Ruby and Alpha Sapphire Shrine --- -{{- css }}{{ include "src/assets/css/pokemonoras.css" }}{{- /css }} +{{- css }}{{ include "../../assets/css/pokemonoras.css" }}{{- /css }} {{ set favicon }} diff --git a/src/_includes/layouts/starwarskotor.vto b/src/_includes/layouts/starwarskotor.vto index 37d31d44..203c6dd8 100644 --- a/src/_includes/layouts/starwarskotor.vto +++ b/src/_includes/layouts/starwarskotor.vto @@ -2,7 +2,7 @@ layout: layouts/content sectionName: "Star Wars: Knights of the Old Republic Shrine" --- -{{- css }}{{ include "src/assets/css/starwarskotor.css" }}{{- /css }} +{{- css }}{{ include "../../assets/css/starwarskotor.css" }}{{- /css }} {{ set favicon }} From 9891aeb9f823a774cb5cb5bbe6ae32f73a319bc4 Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 23:00:01 +0800 Subject: [PATCH 49/59] Fix pip operator in shrine layout --- src/404.vto | 2 + src/_includes/layouts/cassettebeasts.vto | 2 +- src/_includes/layouts/starwarskotor.vto | 2 +- src/_includes/partials/meta.vto | 4 +- src/shrines/cassettebeasts.md | 76 +++++----- ...ssette-beasts-more-than-a-pokemon-clone.md | 142 +++++++++--------- .../articles/sunny-minor-role.md | 12 +- src/shrines/cassettebeasts/facts.md | 42 +++--- src/shrines/cassettebeasts/featured.md | 6 +- src/shrines/cassettebeasts/gamelog.md | 2 +- src/shrines/cassettebeasts/resources.md | 2 +- 11 files changed, 147 insertions(+), 145 deletions(-) diff --git a/src/404.vto b/src/404.vto index 15135f58..824e203f 100644 --- a/src/404.vto +++ b/src/404.vto @@ -2,6 +2,8 @@ layout: layouts/root title: "404: Page Not Found" h1: "404: Page Not Found" +desc: Page not found. +permalink: 404.html eleventyExcludeFromCollections: true --- diff --git a/src/_includes/layouts/cassettebeasts.vto b/src/_includes/layouts/cassettebeasts.vto index 25e808ea..27b515f5 100644 --- a/src/_includes/layouts/cassettebeasts.vto +++ b/src/_includes/layouts/cassettebeasts.vto @@ -53,7 +53,7 @@ function getTodayEvent() { {{ set shrineHomeUrl = "/shrines/cassettebeasts/" }} {{ set navbarLinks }} -{{ set navPages = collections.all | eleventyNavigation("Cassette Beasts Shrine") }} +{{ set navPages = collections.all |> eleventyNavigation("Cassette Beasts Shrine") }} {{ for entry of navPages }}
              • {{ entry.title }} diff --git a/src/_includes/layouts/starwarskotor.vto b/src/_includes/layouts/starwarskotor.vto index 203c6dd8..549a416a 100644 --- a/src/_includes/layouts/starwarskotor.vto +++ b/src/_includes/layouts/starwarskotor.vto @@ -53,7 +53,7 @@ function getTodayEvent() { {{ set shrineHomeUrl = "/shrines/starwarskotor/" }} {{ set navbarLinks }} -{{ set navPages = collections.all | eleventyNavigation("KotOR Shrine") }} +{{ set navPages = collections.all |> eleventyNavigation("KotOR Shrine") }} {{ for entry of navPages }}
              • {{ entry.title }} diff --git a/src/_includes/partials/meta.vto b/src/_includes/partials/meta.vto index 6c136a1b..7ab6a9ca 100644 --- a/src/_includes/partials/meta.vto +++ b/src/_includes/partials/meta.vto @@ -1,10 +1,10 @@ - + - + diff --git a/src/shrines/cassettebeasts.md b/src/shrines/cassettebeasts.md index fb571dfd..7337faca 100644 --- a/src/shrines/cassettebeasts.md +++ b/src/shrines/cassettebeasts.md @@ -12,66 +12,66 @@ eleventyNavigation: eleventyComputed: desc: "{{ sitemeta.siteAuthor.name }}'s shrine for Cassette Beasts." --- -{% set imageAssetBaseUrl = '/assets/shrines/cassettebeasts/images/' %} +{{ set imageAssetBaseUrl = '/assets/shrines/cassettebeasts/images/' }} -{% container "article", "content__section" %} -## Welcome to My {% cite "Cassette Beasts" %} Shrine! +{{ container "article", "content__section" }} +## Welcome to My {{ cite "Cassette Beasts" }} Shrine! ![Promotional image of Cassette Beasts]({{ imageAssetBaseUrl }}CassetteBeasts_keyart_16_9.avif) -{% cite "Cassette Beasts" %} is a 2D/3D hybrid monster collecting open-world role-playing video game developed by Bytten Studio, an indie team based in Brighton, United Kingdom, co-founded by Jay Baylis and Tom Coxon, and published by Raw Fury. +{{ cite "Cassette Beasts" }} is a 2D/3D hybrid monster collecting open-world role-playing video game developed by Bytten Studio, an indie team based in Brighton, United Kingdom, co-founded by Jay Baylis and Tom Coxon, and published by Raw Fury. -First released on Steam and Windows on 26 April 2023, later on console on 25 May 2023 and on mobile on 15 January 2025, {% cite "Cassette Beasts" %} is available on Windows, Linux, Steam, Xbox Series X|S, Xbox One, Gamepass, Nintendo Switch, Android and iOS. +First released on Steam and Windows on 26 April 2023, later on console on 25 May 2023 and on mobile on 15 January 2025, {{ cite "Cassette Beasts" }} is available on Windows, Linux, Steam, Xbox Series X|S, Xbox One, Gamepass, Nintendo Switch, Android and iOS. -{% cite "Cassette Beasts" %} also has an [official website](https://www.cassettebeasts.com/) and [official wiki](https://wiki.cassettebeasts.com/wiki/Main_Page). +{{ cite "Cassette Beasts" }} also has an [official website](https://www.cassettebeasts.com/) and [official wiki](https://wiki.cassettebeasts.com/wiki/Main_Page). -You can purchase or download {% cite "Cassette Beasts" %} from the below links: +You can purchase or download {{ cite "Cassette Beasts" }} from the below links: * [Steam](https://store.steampowered.com/app/1321440/Cassette_Beasts/) * [Xbox](https://www.xbox.com/en-us/games/store/cassette-beasts/9n82snqtzvmq) * [Nintendo Switch](https://www.nintendo.com/store/products/cassette-beasts-switch/) * [Google Play Store](https://play.google.com/store/apps/details?id=com.RawFury.CassetteBeasts) * [Apple App Store](https://apps.apple.com/sg/app/cassette-beasts/id6736517805) -{% /container %} +{{ /container }} -{% container "article", "content__section" %} -## Why You Should Play {% cite "Cassette Beasts" %} +{{ container "article", "content__section" }} +## Why You Should Play {{ cite "Cassette Beasts" }} ![Header of the Cassette Beasts official website]({{ imageAssetBaseUrl }}cassettebeasts-website-header-bg.avif) -{% cite "Cassette Beasts" %} is a masterpiece of a monster collecting game with refreshing takes on the genre, from monster collecting mechanic, battle system, elemental type match ups, story, characters, lore, world building, map design, etc, with an amazing soundtrack that goes along with the game. +{{ cite "Cassette Beasts" }} is a masterpiece of a monster collecting game with refreshing takes on the genre, from monster collecting mechanic, battle system, elemental type match ups, story, characters, lore, world building, map design, etc, with an amazing soundtrack that goes along with the game. -Indie monster collecting games in particular need all the support they can get to let more people (especially Western audiences) know that {% cite "Pokémon" %} is not the only monster collecting game worth your attention, and {% cite "Cassette Beasts" %} is one of those indie games that prove indie games can be more creative than AAA games. +Indie monster collecting games in particular need all the support they can get to let more people (especially Western audiences) know that {{ cite "Pokémon" }} is not the only monster collecting game worth your attention, and {{ cite "Cassette Beasts" }} is one of those indie games that prove indie games can be more creative than AAA games. -I cannot recommend {% cite "Cassette Beasts" %} enough if you like monster collecting games, including, if not especially, if you like {% cite "Pokémon" %} but want an indie alternative, or something different after finding {% cite "Pokémon" %} games getting stale, or becoming jaded by the direction of the {% cite "Pokémon" %} games. +I cannot recommend {{ cite "Cassette Beasts" }} enough if you like monster collecting games, including, if not especially, if you like {{ cite "Pokémon" }} but want an indie alternative, or something different after finding {{ cite "Pokémon" }} games getting stale, or becoming jaded by the direction of the {{ cite "Pokémon" }} games. -If you need more convincing on how {% cite "Cassette Beasts" %} is much more than a {% cite "Pokémon" %} clone, [I have written a huge essay on this shrine](/shrines/cassettebeasts/articles/cassette-beasts-more-than-a-pokemon-clone). -{% /container %} +If you need more convincing on how {{ cite "Cassette Beasts" }} is much more than a {{ cite "Pokémon" }} clone, [I have written a huge essay on this shrine](/shrines/cassettebeasts/articles/cassette-beasts-more-than-a-pokemon-clone). +{{ /container }} -{% container "article", "content__section" %} -## My Interest In {% cite "Cassette Beasts" %} +{{ container "article", "content__section" }} +## My Interest In {{ cite "Cassette Beasts" }} ![Official screenshot of Harbourtown in Cassette Beasts]({{ imageAssetBaseUrl }}cassettebeasts-website_screenshot_02.avif) -On 30 June 2023, when the Steam Summer Sale 2023 just started, I received {% cite "Cassette Beasts" %} as a Steam gift from a generous friend, who knew that I had been looking for independant monster collecting games, since I mostly play indie games instead of AAA games nowadays. +On 30 June 2023, when the Steam Summer Sale 2023 just started, I received {{ cite "Cassette Beasts" }} as a Steam gift from a generous friend, who knew that I had been looking for independant monster collecting games, since I mostly play indie games instead of AAA games nowadays. -I started my first playthrough of {% cite "Cassette Beasts" %} on 18 July 2023, and I was immediately hooked. I could already feel this game has everything I could ask for in an indie alternative to {% cite "Pokémon" %}. +I started my first playthrough of {{ cite "Cassette Beasts" }} on 18 July 2023, and I was immediately hooked. I could already feel this game has everything I could ask for in an indie alternative to {{ cite "Pokémon" }}. I ended up spending around 34 hours to beat the main campaign, and that was because I made the deliberate decision to max out the companion characters' relationship level before advancing to the final portion of the main story, since this game has more focus on human characters and relationships than what you may expect in a monster-collecting game. -I love {% cite "Cassette Beasts" %} so much that I also purchased its Deluxe Edition, which includes the soundtrack, the art book and the Cosplay Pack as a birthday present for myself on 28 July 2023. In addition, I also [bought the official plushie of Pombomb](/blog/posts/2023-10-13-My-Cassette-Beasts-Pombomb-Plushie-Arrived), my favourite monster from the game. +I love {{ cite "Cassette Beasts" }} so much that I also purchased its Deluxe Edition, which includes the soundtrack, the art book and the Cosplay Pack as a birthday present for myself on 28 July 2023. In addition, I also [bought the official plushie of Pombomb](/blog/posts/2023-10-13-My-Cassette-Beasts-Pombomb-Plushie-Arrived), my favourite monster from the game. -Moreover, I ended up unlocking all 123 achievements on Steam on 13 March 2024. Very few RPGs make me want to unlock all the achievements, so it is telling how much I love {% cite "Cassette Beasts" %} that I am willing to spend time and effort to work for all the achievements. +Moreover, I ended up unlocking all 123 achievements on Steam on 13 March 2024. Very few RPGs make me want to unlock all the achievements, so it is telling how much I love {{ cite "Cassette Beasts" }} that I am willing to spend time and effort to work for all the achievements. -{% cite "Cassette Beasts" %} not only is my Game of the Year of 2023, but also it has become my absolute favourite monster collecting game, and even my all-time favourite video game ever. -{% /container %} +{{ cite "Cassette Beasts" }} not only is my Game of the Year of 2023, but also it has become my absolute favourite monster collecting game, and even my all-time favourite video game ever. +{{ /container }} -{% container "article", "content__section" %} -## {% cite "Cassette Beasts" %} — My Ultimate Comfort Media +{{ container "article", "content__section" }} +## {{ cite "Cassette Beasts" }} — My Ultimate Comfort Media ![Official screenshot of Harbourtown in Cassette Beasts]({{ imageAssetBaseUrl }}cassettebeasts-website_screenshot_02-1.avif) -{% cite "Cassette Beasts" %} is my number one comfort media and favourite video game, because it reaffirms my taste in video games by combining just about everything I like to see in a video game: +{{ cite "Cassette Beasts" }} is my number one comfort media and favourite video game, because it reaffirms my taste in video games by combining just about everything I like to see in a video game: - Companion characters with their own story arcs whom you can team up with in battle and build platonic or romantic relationships with - A roster of creatures with interesting designs @@ -86,26 +86,26 @@ Moreover, I ended up unlocking all 123 achievements on Steam on 13 March 2024. V - Excellent soundtrack - And more! -I enjoy every moment of {% cite "Cassette Beasts" %}, a sentiment I can genuinely apply to only a very few games. +I enjoy every moment of {{ cite "Cassette Beasts" }}, a sentiment I can genuinely apply to only a very few games. -{% cite "Cassette Beasts" %} has the distinct honour of being one of my favourite entertainment media because not only I like it and find it entertaining, but also I genuinely consider it a well-made masterpiece. The more I played and explored {% cite "Cassette Beasts" %}, the more amazed I was for how much thought was clearly put into making the game, which only got reinforced after reading trivia about the game [on its official wiki](https://wiki.cassettebeasts.com/wiki/Main_Page). +{{ cite "Cassette Beasts" }} has the distinct honour of being one of my favourite entertainment media because not only I like it and find it entertaining, but also I genuinely consider it a well-made masterpiece. The more I played and explored {{ cite "Cassette Beasts" }}, the more amazed I was for how much thought was clearly put into making the game, which only got reinforced after reading trivia about the game [on its official wiki](https://wiki.cassettebeasts.com/wiki/Main_Page). -{% /container %} +{{ /container }} -{% container "article", "content__section" %} -## My Contributions to the {% cite "Cassette Beasts" %} Community +{{ container "article", "content__section" }} +## My Contributions to the {{ cite "Cassette Beasts" }} Community ![Pre-release artwork of Kayleigh, Meredith and Eugene from Cassette Beasts]({{ imageAssetBaseUrl }}cassettebeasts-website_screenshot_07.avif) -Since I got into {% cite "Cassette Beasts" %}, I have been making a great deal of effort in promoting the game online, by talking about and recommending the game on online spaces, including this shrine on my website. +Since I got into {{ cite "Cassette Beasts" }}, I have been making a great deal of effort in promoting the game online, by talking about and recommending the game on online spaces, including this shrine on my website. -My passion for {% cite "Cassette Beasts" %} drives me to contribute to the effort of documenting information about the game. I have recorded footages, made compilation videos and shared them on my YouTube channel for archival and reference purposes. I am also a contributor to the [official {% cite "Cassette Beasts" %} wiki](https://wiki.cassettebeasts.com/wiki/Main_Page). You can check out [my {% cite "Cassette Beasts" %} video playlists on YouTube](https://www.youtube.com/channel/UCQr78DF60PrBsgh8rQnzBWg/playlists?view=50&sort=dd&shelf_id=5) and [my user page on the {% cite "Cassette Beasts" %} wiki](https://wiki.cassettebeasts.com/wiki/User:Leilukin). +My passion for {{ cite "Cassette Beasts" }} drives me to contribute to the effort of documenting information about the game. I have recorded footages, made compilation videos and shared them on my YouTube channel for archival and reference purposes. I am also a contributor to the [official {{ cite "Cassette Beasts" }} wiki](https://wiki.cassettebeasts.com/wiki/Main_Page). You can check out [my {{ cite "Cassette Beasts" }} video playlists on YouTube](https://www.youtube.com/channel/UCQr78DF60PrBsgh8rQnzBWg/playlists?view=50&sort=dd&shelf_id=5) and [my user page on the {{ cite "Cassette Beasts" }} wiki](https://wiki.cassettebeasts.com/wiki/User:Leilukin). -I contributed code to [cbpickaxe](https://github.com/ExcaliburZero/cbpickaxe), a Python library and set of scripts for data mining {% cite "Cassette Beasts" %}, specifically to [add support for finding dialogue strings of IDs that require pronoun identifiers](https://github.com/ExcaliburZero/cbpickaxe/pull/3). My code was approved and merged into cbpickaxe starting from [version 0.1.2](https://github.com/ExcaliburZero/cbpickaxe/releases/tag/v0.1.2). +I contributed code to [cbpickaxe](https://github.com/ExcaliburZero/cbpickaxe), a Python library and set of scripts for data mining {{ cite "Cassette Beasts" }}, specifically to [add support for finding dialogue strings of IDs that require pronoun identifiers](https://github.com/ExcaliburZero/cbpickaxe/pull/3). My code was approved and merged into cbpickaxe starting from [version 0.1.2](https://github.com/ExcaliburZero/cbpickaxe/releases/tag/v0.1.2). -I created and am running [Land of Confusion](https://fan.leilukin.com/cassettebeasts), the fanlisting for {% cite "Cassette Beasts" %} which is part of [The Fanlistings Network](https://thefanlistings.org/). If you are a fan of {% cite "Cassette Beasts" %}, you are more than welcome to join my fanlisting! +I created and am running [Land of Confusion](https://fan.leilukin.com/cassettebeasts), the fanlisting for {{ cite "Cassette Beasts" }} which is part of [The Fanlistings Network](https://thefanlistings.org/). If you are a fan of {{ cite "Cassette Beasts" }}, you are more than welcome to join my fanlisting! -On Tumblr, I run the [Cassette Beasts Source](https://cassettebeastssource.tumblr.com/), an unofficial {% cite "Cassette Beasts" %} fan site blog that I created on 25 February 2024. I decided to create a fan site blog on Tumblr due to the fact that Bytten Studio does not have an official Tumblr account, and I wanted a Tumblr blog dedicated to sharing and archiving {% cite "Cassette Beasts" %} news and fan works. +On Tumblr, I run the [Cassette Beasts Source](https://cassettebeastssource.tumblr.com/), an unofficial {{ cite "Cassette Beasts" }} fan site blog that I created on 25 February 2024. I decided to create a fan site blog on Tumblr due to the fact that Bytten Studio does not have an official Tumblr account, and I wanted a Tumblr blog dedicated to sharing and archiving {{ cite "Cassette Beasts" }} news and fan works. -I have also contributed to [{% cite "Cassette Beasts" %} TVTropes pages](https://tvtropes.org/pmwiki/pmwiki.php/VideoGame/CassetteBeasts) (I have had a TVTropes account since 18 February 2012), by editing the pages to add information about the game. I was the one who created the [Trivia page](https://tvtropes.org/pmwiki/pmwiki.php/Trivia/CassetteBeasts) for the game on TVTropes. -{% /container %} +I have also contributed to [{{ cite "Cassette Beasts" }} TVTropes pages](https://tvtropes.org/pmwiki/pmwiki.php/VideoGame/CassetteBeasts) (I have had a TVTropes account since 18 February 2012), by editing the pages to add information about the game. I was the one who created the [Trivia page](https://tvtropes.org/pmwiki/pmwiki.php/Trivia/CassetteBeasts) for the game on TVTropes. +{{ /container }} diff --git a/src/shrines/cassettebeasts/articles/cassette-beasts-more-than-a-pokemon-clone.md b/src/shrines/cassettebeasts/articles/cassette-beasts-more-than-a-pokemon-clone.md index a152c846..6cc00b1c 100644 --- a/src/shrines/cassettebeasts/articles/cassette-beasts-more-than-a-pokemon-clone.md +++ b/src/shrines/cassettebeasts/articles/cassette-beasts-more-than-a-pokemon-clone.md @@ -10,107 +10,107 @@ toc: true ## Introduction -There is no denying that {% cite "Pokémon" %} is one of the largest entertainment franchises in the world and the most influential series in the monster collector genre of video games, and thus inspiring many games in the genre. {% cite "Cassette Beasts" %}, an indie monster collecting role-playing game developed by the England-based indie studio Bytten Studio, is not an exception, as it does share similarities to {% cite "Pokémon" %}. +There is no denying that {{ cite "Pokémon" }} is one of the largest entertainment franchises in the world and the most influential series in the monster collector genre of video games, and thus inspiring many games in the genre. {{ cite "Cassette Beasts" }}, an indie monster collecting role-playing game developed by the England-based indie studio Bytten Studio, is not an exception, as it does share similarities to {{ cite "Pokémon" }}. -However, calling {% cite "Cassette Beasts" %} a {% cite "Pokémon" %} clone is doing it a massive disservice, because {% cite "Cassette Beasts" %} executes many mechanics and aspects of {% cite "Pokémon" %} games in different, and sometimes arguably better ways. +However, calling {{ cite "Cassette Beasts" }} a {{ cite "Pokémon" }} clone is doing it a massive disservice, because {{ cite "Cassette Beasts" }} executes many mechanics and aspects of {{ cite "Pokémon" }} games in different, and sometimes arguably better ways. -Furthermore, there are things in {% cite "Cassette Beasts" %} that you would not find in {% cite "Pokémon" %} games, at least in the main series games, thanks to Bytten Studio's creativity and passion that a gigantic corporate-owned franchise like {% cite "Pokémon" %} can only dream of. +Furthermore, there are things in {{ cite "Cassette Beasts" }} that you would not find in {{ cite "Pokémon" }} games, at least in the main series games, thanks to Bytten Studio's creativity and passion that a gigantic corporate-owned franchise like {{ cite "Pokémon" }} can only dream of. -## Features that Exist in {% cite "Pokémon" %} that are Done Differently in {% cite "Cassette Beasts" %} +## Features that Exist in {{ cite "Pokémon" }} that are Done Differently in {{ cite "Cassette Beasts" }} -By the time {% cite "Cassette Beasts" %} was released on 26 April 2023, the main video game series of {% cite "Pokémon" %} had reached its ninth generation with the release of {% cite "Scarlet" %} and {% cite "Violet" %}. {% cite "Pokémon" %} had existed for 27 years since the release of {% cite "Red" %} and {% cite "Green" %} versions in Japan in February 1996. +By the time {{ cite "Cassette Beasts" }} was released on 26 April 2023, the main video game series of {{ cite "Pokémon" }} had reached its ninth generation with the release of {{ cite "Scarlet" }} and {{ cite "Violet" }}. {{ cite "Pokémon" }} had existed for 27 years since the release of {{ cite "Red" }} and {{ cite "Green" }} versions in Japan in February 1996. -However, despite remaining one of the best-selling video game series in the world, {% cite "Pokémon" %} has got the reputation of repeating the same formula in their games over and over. {% cite "Cassette Beasts" %}, on the other hand, executes some features and mechanics that exist in the {% cite "Pokémon" %} game series with their own unique spin on them. Therefore, even the similarities between {% cite "Cassette Beasts" %} and {% cite "Pokémon" %} are not as straightforward as you may think. +However, despite remaining one of the best-selling video game series in the world, {{ cite "Pokémon" }} has got the reputation of repeating the same formula in their games over and over. {{ cite "Cassette Beasts" }}, on the other hand, executes some features and mechanics that exist in the {{ cite "Pokémon" }} game series with their own unique spin on them. Therefore, even the similarities between {{ cite "Cassette Beasts" }} and {{ cite "Pokémon" }} are not as straightforward as you may think. ### Monster Capture Mechanic -One of the most notable differences between {% cite "Pokémon" %} and {% cite "Cassette Beasts" %} is their mechanics to capture monsters. In {% cite "Pokémon" %}, you catch the creatures by using Poké Balls, but in {% cite "Cassette Beasts" %}, you do not actually catch the monsters, but you record the essence of the monsters into a cassette tape. +One of the most notable differences between {{ cite "Pokémon" }} and {{ cite "Cassette Beasts" }} is their mechanics to capture monsters. In {{ cite "Pokémon" }}, you catch the creatures by using Poké Balls, but in {{ cite "Cassette Beasts" }}, you do not actually catch the monsters, but you record the essence of the monsters into a cassette tape. -A common criticism of the monster collector genre is the ethical question of essentially enslaving creatures by capturing and subjugating them into obeying you, as well as enganging in dog fighting by making the creatures fight each other, to the extent that even {% cite "Pokémon" %} tries to tackle it as the main theme of the story of {% cite "Black" %} and {% cite "White" %}, though whether the execution is effective or not is debatable. {% cite "Cassette Beasts" %}' method of recording monsters solves this moral dilemma of the genre from the get-go, because you are not actually catching the monsters in the traditional sense. In fact, Jay Baylis, artist and writer of {% cite "Cassette Beasts" %} had stated in [a Shacknews interview](https://youtu.be/P0L-5LLT9uw?feature=shared&t=106) that their idea of recording monsters is intended to avert the issue of basically enslaving creatures in the monster collecting genre. +A common criticism of the monster collector genre is the ethical question of essentially enslaving creatures by capturing and subjugating them into obeying you, as well as enganging in dog fighting by making the creatures fight each other, to the extent that even {{ cite "Pokémon" }} tries to tackle it as the main theme of the story of {{ cite "Black" }} and {{ cite "White" }}, though whether the execution is effective or not is debatable. {{ cite "Cassette Beasts" }}' method of recording monsters solves this moral dilemma of the genre from the get-go, because you are not actually catching the monsters in the traditional sense. In fact, Jay Baylis, artist and writer of {{ cite "Cassette Beasts" }} had stated in [a Shacknews interview](https://youtu.be/P0L-5LLT9uw?feature=shared&t=106) that their idea of recording monsters is intended to avert the issue of basically enslaving creatures in the monster collecting genre. -Gameplay-wise, a notable improvement {% cite "Cassette Beasts" %} has over {% cite "Pokémon" %} when it comes to monster capture mechanics is that in {% cite "Cassette Beasts" %}, when you are recording a monster, the percentage of success rate is displayed on screen. Furthermore, a monster that is in the process of being recorded cannot be knocked out, so you can deal more damage to the monster to improve your odds of successfully recording the monster. In {% cite "Pokémon" %}, you have to be extra careful about not knocking out the Pokémon you want to catch, and when you try to catch one, you can only hope that the RNG is in your favour. +Gameplay-wise, a notable improvement {{ cite "Cassette Beasts" }} has over {{ cite "Pokémon" }} when it comes to monster capture mechanics is that in {{ cite "Cassette Beasts" }}, when you are recording a monster, the percentage of success rate is displayed on screen. Furthermore, a monster that is in the process of being recorded cannot be knocked out, so you can deal more damage to the monster to improve your odds of successfully recording the monster. In {{ cite "Pokémon" }}, you have to be extra careful about not knocking out the Pokémon you want to catch, and when you try to catch one, you can only hope that the RNG is in your favour. ### Battle System -The battle system in both {% cite "Cassette Beasts" %} and {% cite "Pokémon" %} involves fights between monsters. However, while in {% cite "Pokémon" %} you send out the monsters you captured to fight, in {% cite "Cassette Beasts" %} you transform into monsters to battle by using the cassette tapes you have used to record the monsters. +The battle system in both {{ cite "Cassette Beasts" }} and {{ cite "Pokémon" }} involves fights between monsters. However, while in {{ cite "Pokémon" }} you send out the monsters you captured to fight, in {{ cite "Cassette Beasts" }} you transform into monsters to battle by using the cassette tapes you have used to record the monsters. -Furthermore, most of the battles in the main series {% cite "Pokémon" %} games take place in one-on-one formats, also known as single battles. In {% cite "Cassette Beasts" %}, you almost always battle alongside a partner, making two-on-two the format of most battles in the game, which in {% cite "Pokémon" %} is also known as double battles, which are underutilised in the main series {% cite "Pokémon" %} games. Two-on-two battles require more nuanced strategies than brute-forcing a single opponent in one-on-one battles. +Furthermore, most of the battles in the main series {{ cite "Pokémon" }} games take place in one-on-one formats, also known as single battles. In {{ cite "Cassette Beasts" }}, you almost always battle alongside a partner, making two-on-two the format of most battles in the game, which in {{ cite "Pokémon" }} is also known as double battles, which are underutilised in the main series {{ cite "Pokémon" }} games. Two-on-two battles require more nuanced strategies than brute-forcing a single opponent in one-on-one battles. -The move system in battles is also different in {% cite "Pokémon" %} and {% cite "Cassette Beasts" %}. In {% cite "Pokémon" %}, every Pokémon is limited to having four move slots, meaning each can only use up to four moves in battle. In {% cite "Cassette Beasts" %}, battle moves come in the form of stickers on monster cassette tapes; the base number of sticker slots varies between monsters, with 4 being the minimum, and can be increased by upgrading the star level of the monster tapes, up to a maximum of 8 natural slots. Some stickers have the bonus of adding sticker slots. +The move system in battles is also different in {{ cite "Pokémon" }} and {{ cite "Cassette Beasts" }}. In {{ cite "Pokémon" }}, every Pokémon is limited to having four move slots, meaning each can only use up to four moves in battle. In {{ cite "Cassette Beasts" }}, battle moves come in the form of stickers on monster cassette tapes; the base number of sticker slots varies between monsters, with 4 being the minimum, and can be increased by upgrading the star level of the monster tapes, up to a maximum of 8 natural slots. Some stickers have the bonus of adding sticker slots. -{% cite "Pokémon" %} uses Power Points (PP) to restrict how many times each move can be, while {% cite "Cassette Beasts" %} uses Action Points (AP), which is generated for every turn during battle, even after you switch into a different monster tape. Different moves cost varying amounts of AP or none at all, with stronger moves require more AP to use, while some moves require no AP. +{{ cite "Pokémon" }} uses Power Points (PP) to restrict how many times each move can be, while {{ cite "Cassette Beasts" }} uses Action Points (AP), which is generated for every turn during battle, even after you switch into a different monster tape. Different moves cost varying amounts of AP or none at all, with stronger moves require more AP to use, while some moves require no AP. ### Type Match-Ups -Both {% cite "Pokémon" %} and {% cite "Cassette Beasts" %} have elemental types on every monster, and how these types interact with each other is a core element in their battle systems. However, how said interactions play out in {% cite "Pokémon" %} and {% cite "Cassette Beasts" %} are different. +Both {{ cite "Pokémon" }} and {{ cite "Cassette Beasts" }} have elemental types on every monster, and how these types interact with each other is a core element in their battle systems. However, how said interactions play out in {{ cite "Pokémon" }} and {{ cite "Cassette Beasts" }} are different. -In {% cite "Pokémon" %}, type advantage simply means dealing extra damage to your opponent, while type disadvantage simply means dealing less damage, and certain types are immune to damage from another type. +In {{ cite "Pokémon" }}, type advantage simply means dealing extra damage to your opponent, while type disadvantage simply means dealing less damage, and certain types are immune to damage from another type. -In {% cite "Cassette Beasts" %}, type match-ups are based on chemical reactions, so type advantage gives your opponent a debuff, while type disadvantage gives your opponent a buff, and certain types and temporary change the type of the opponent in battle. For example, Water-type moves reduce the melee and ranged attacks of Fire-type monsters; Fire-type moves giving a healing buff to Water-type monsters; Fire-type moves turn Plastic-type monsters into Poison-types. While type advantage means more damage in {% cite "Cassette Beasts" %}, it is not as drastic as in {% cite "Pokémon" %}. +In {{ cite "Cassette Beasts" }}, type match-ups are based on chemical reactions, so type advantage gives your opponent a debuff, while type disadvantage gives your opponent a buff, and certain types and temporary change the type of the opponent in battle. For example, Water-type moves reduce the melee and ranged attacks of Fire-type monsters; Fire-type moves giving a healing buff to Water-type monsters; Fire-type moves turn Plastic-type monsters into Poison-types. While type advantage means more damage in {{ cite "Cassette Beasts" }}, it is not as drastic as in {{ cite "Pokémon" }}. -{% cite "Cassette Beasts" %} actually provides an in-game type chart in the game itself. You can obtain the chart by opening the Ranger Guidebook, and the type chart can be accessed during your battles. In addition, when you are choosing your moves during battles, you can see the icons that hint on the effects of your moves against your opponent. +{{ cite "Cassette Beasts" }} actually provides an in-game type chart in the game itself. You can obtain the chart by opening the Ranger Guidebook, and the type chart can be accessed during your battles. In addition, when you are choosing your moves during battles, you can see the icons that hint on the effects of your moves against your opponent. ### Level System -In both {% cite "Pokémon" %} and {% cite "Cassette Beasts" %}, gaining experience to level up is a core part of the games' progression. However, there are differences in their level systems. +In both {{ cite "Pokémon" }} and {{ cite "Cassette Beasts" }}, gaining experience to level up is a core part of the games' progression. However, there are differences in their level systems. -In {% cite "Pokémon" %}, from Generation 1 to 5, only the Pokémon you send out in battle and optionally the Pokémon that holds the Exp. Share item will gain experience after winning a battle. This means that if you want to add a Pokémon you just caught to your party, you often have to grind for experience points for the newly-caught Pokémon to catch up with the levels of other members in your party. The games starting from Generation 6 solve the grinding issue by making Exp. Share becomes an optional item that will reward the experience points you earned to all non-fainted members in your party. Starting from {% cite "Let's Go! Pikachu" %} and {% cite "Let's Go! Eevee" %}, the effects Exp. Share are present from the start of the game. +In {{ cite "Pokémon" }}, from Generation 1 to 5, only the Pokémon you send out in battle and optionally the Pokémon that holds the Exp. Share item will gain experience after winning a battle. This means that if you want to add a Pokémon you just caught to your party, you often have to grind for experience points for the newly-caught Pokémon to catch up with the levels of other members in your party. The games starting from Generation 6 solve the grinding issue by making Exp. Share becomes an optional item that will reward the experience points you earned to all non-fainted members in your party. Starting from {{ cite "Let's Go! Pikachu" }} and {{ cite "Let's Go! Eevee" }}, the effects Exp. Share are present from the start of the game. -In {% cite "Cassette Beasts" %}, levels are instead tied to your human and your companion characters, which means that in addition to base stats, the strength of the monsters you recorded are tied to your human character's level. This means that unlike {% cite "Pokémon" %}, after you record a low-level monster and add them to your party, you do not have to spend time in grinding the levels of your monsters just to make them catch up with the rest of your party. +In {{ cite "Cassette Beasts" }}, levels are instead tied to your human and your companion characters, which means that in addition to base stats, the strength of the monsters you recorded are tied to your human character's level. This means that unlike {{ cite "Pokémon" }}, after you record a low-level monster and add them to your party, you do not have to spend time in grinding the levels of your monsters just to make them catch up with the rest of your party. -Monster tapes have their own level system in the form of the star system. When you upgrade a monster's star level, they gain new stickers. When you upgrade a monster to 5 stars, the monster will gain an additional biography entry in the bestiary, and some monsters can be remastered (the {% cite "Pokémon" %} equivalent is evolution) into stronger forms. +Monster tapes have their own level system in the form of the star system. When you upgrade a monster's star level, they gain new stickers. When you upgrade a monster to 5 stars, the monster will gain an additional biography entry in the bestiary, and some monsters can be remastered (the {{ cite "Pokémon" }} equivalent is evolution) into stronger forms. -Earning experience points means not only levelling up your human player and companion characters, but also upgrading the star levels of your monster tapes. Some monsters can be remastered when being upgraded to 5 stars. It is worth noting that experience points are shared between all your monster tapes as well, including ones that have been broken (or "fainted") in battle, unlike {% cite "Pokémon" %} where fainted Pokémon cannot gain any experience points at all. +Earning experience points means not only levelling up your human player and companion characters, but also upgrading the star levels of your monster tapes. Some monsters can be remastered when being upgraded to 5 stars. It is worth noting that experience points are shared between all your monster tapes as well, including ones that have been broken (or "fainted") in battle, unlike {{ cite "Pokémon" }} where fainted Pokémon cannot gain any experience points at all. ### Field Moves -Both {% cite "Pokémon" %} and {% cite "Cassette Beasts" %} have field moves — moves that are used outside of battles and often required to access new areas of the map and explore every nook and cranny. +Both {{ cite "Pokémon" }} and {{ cite "Cassette Beasts" }} have field moves — moves that are used outside of battles and often required to access new areas of the map and explore every nook and cranny. -From Generation 1 to 6 of the main series {% cite "Pokémon" %} games, field moves usually take the form of HMs, though some TMs also have uses outside battles. Both HMs and TMs are items to teach Pokémon moves, and these moves take up move slots. From Generation 7 onwards, {% cite "Pokémon" %} games remove HMs, and assign field moves to certain Pokémon that you can use outside battles, so you longer need to worry about wasting move slots of Pokémon in your party. +From Generation 1 to 6 of the main series {{ cite "Pokémon" }} games, field moves usually take the form of HMs, though some TMs also have uses outside battles. Both HMs and TMs are items to teach Pokémon moves, and these moves take up move slots. From Generation 7 onwards, {{ cite "Pokémon" }} games remove HMs, and assign field moves to certain Pokémon that you can use outside battles, so you longer need to worry about wasting move slots of Pokémon in your party. In Cassette Beats, it is your human character that learn these field moves by recording certain monsters. The game will provide hints to which monsters can give you these field moves through townsfolk gossips. Since it is your human character that uses these field moves, you do not need to worry about wasting any move slots in your monster cassette tapes. ### Monsters with Alternate Colour Schemes -In both {% cite "Pokémon" %} and {% cite "Cassette Beasts" %}, there is a rare chance you may encounter monsters with different colour schemes than their regular counterparts. In {% cite "Pokémon" %}, they are referred to as Shiny Pokémon, while in Cassette Beasts, they are called bootlegs. +In both {{ cite "Pokémon" }} and {{ cite "Cassette Beasts" }}, there is a rare chance you may encounter monsters with different colour schemes than their regular counterparts. In {{ cite "Pokémon" }}, they are referred to as Shiny Pokémon, while in Cassette Beasts, they are called bootlegs. Shiny Pokémon do not provide additional benefits in gameplay, but bootlegs do, since bootlegs can be of any type, and have a higher chance of getting moves (or stickers) with additional effects and enhancements, referred to as [sticker attributes](https://wiki.cassettebeasts.com/wiki/Sticker_Attributes). ### Music -Both {% cite "Pokémon" %} and {% cite "Cassette Beasts" %} are notable for their soundtracks, and music is among the most praised (which is well-deserved, in my opinions) aspects in both, though {% cite "Cassette Beasts" %} does it differently in that it includes music with vocal lyrics: for the music of the main hub, Habourtown, the vocals play when you are indoor; for battle music, the vocals play when you and your partner fuse, which heightens the dynamic of the battles. +Both {{ cite "Pokémon" }} and {{ cite "Cassette Beasts" }} are notable for their soundtracks, and music is among the most praised (which is well-deserved, in my opinions) aspects in both, though {{ cite "Cassette Beasts" }} does it differently in that it includes music with vocal lyrics: for the music of the main hub, Habourtown, the vocals play when you are indoor; for battle music, the vocals play when you and your partner fuse, which heightens the dynamic of the battles. ### Story and Plot -The core plot of the main series {% cite "Pokémon" %} games, except for {% cite "Legends: Arceus" %}, is about a child going on a journey and become the best Pokémon Trainer in their region by claiming the Champion title. However, the main plot of {% cite "Cassette Beasts" %} is about the protagonist finding their way back home after bring transported to New Wirral, an island that exists in a different dimension from Earth and where humans from various dimensions are also transported and strended on. +The core plot of the main series {{ cite "Pokémon" }} games, except for {{ cite "Legends: Arceus" }}, is about a child going on a journey and become the best Pokémon Trainer in their region by claiming the Champion title. However, the main plot of {{ cite "Cassette Beasts" }} is about the protagonist finding their way back home after bring transported to New Wirral, an island that exists in a different dimension from Earth and where humans from various dimensions are also transported and strended on. -The protagonists of {% cite "Pokémon" %} games become the new Champion of their region by defeating Gym Leaders or Trial Captains, then the Elite Four and the current standing Champion. In {% cite "Cassette Beasts" %}, the closest thing to an equivalent to Gym Leaders is the Ranger Captains, and one of the main quests involves defeating all the Captains across the map, but even then, you do not beat the Ranger Captains and become a Captain yourself for the glory of becoming the best monster battler, but to prove your ability to help the Rangers Guild to protect New Wirral and support the island's community. +The protagonists of {{ cite "Pokémon" }} games become the new Champion of their region by defeating Gym Leaders or Trial Captains, then the Elite Four and the current standing Champion. In {{ cite "Cassette Beasts" }}, the closest thing to an equivalent to Gym Leaders is the Ranger Captains, and one of the main quests involves defeating all the Captains across the map, but even then, you do not beat the Ranger Captains and become a Captain yourself for the glory of becoming the best monster battler, but to prove your ability to help the Rangers Guild to protect New Wirral and support the island's community. -{% cite "Cassette Beasts" %} has a more mature and adult story than {% cite "Pokémon" %}. As a franchise primarily targetted at children, the main human characters in {% cite "Pokémon" %} are children, so the stories of {% cite "Pokémon" %} games are mainly about children's fantasy adventures to be the best Pokémon Trainer. On the flip side, the main characters in {% cite "Cassette Beasts" %}, including your human companions, are adults, and the game is not afraid to discuss topics and issues relevant to adulthood, particularly through the stories of your companion characters. The story of {% cite "Cassette Beasts" %} is also unabashedly left-wing with anti-capitalist and anti-imperialist messages, which I frankly doubt will get explored with such authenticity in a corporate-owned mega franchise like {% cite "Pokémon" %}. +{{ cite "Cassette Beasts" }} has a more mature and adult story than {{ cite "Pokémon" }}. As a franchise primarily targetted at children, the main human characters in {{ cite "Pokémon" }} are children, so the stories of {{ cite "Pokémon" }} games are mainly about children's fantasy adventures to be the best Pokémon Trainer. On the flip side, the main characters in {{ cite "Cassette Beasts" }}, including your human companions, are adults, and the game is not afraid to discuss topics and issues relevant to adulthood, particularly through the stories of your companion characters. The story of {{ cite "Cassette Beasts" }} is also unabashedly left-wing with anti-capitalist and anti-imperialist messages, which I frankly doubt will get explored with such authenticity in a corporate-owned mega franchise like {{ cite "Pokémon" }}. -In addition, {% cite "Cassette Beasts" %}' story can get genuinely dark at times, most notably in the cosmic horror presented by the Archangels, the eldritch entities that you need to defeat in boss battles to gather clues about a way out of New Wirral and return home. +In addition, {{ cite "Cassette Beasts" }}' story can get genuinely dark at times, most notably in the cosmic horror presented by the Archangels, the eldritch entities that you need to defeat in boss battles to gather clues about a way out of New Wirral and return home. -{%- disclosure 'Major Story Spoilers for Cassette Beasts' %} +{{- disclosure 'Major Story Spoilers for Cassette Beasts' }} Towards the end of the main quest, it is revealed that Archangels are [egregores](https://en.wikipedia.org/wiki/Egregore) created from humanity's desires and ideas. Aleph, the main antagonist and final boss of the main story, is an Archangel that is an incarnation of conquest, and his goal is to leave New Wirral and cause chaos across reality. -While {% cite "Pokémon" %} has its own fair share of sinister villains, the threat the main villain of {% cite "Cassette Beasts" %} poses is even greater in scope than any {% cite "Pokémon" %} villain, maybe except for Rainbow Rocket Giovanni from {% cite "Ultra Sun" %} and {% cite "Ultra Moon" %}, who shares the goal of ruling the multiverse. +While {{ cite "Pokémon" }} has its own fair share of sinister villains, the threat the main villain of {{ cite "Cassette Beasts" }} poses is even greater in scope than any {{ cite "Pokémon" }} villain, maybe except for Rainbow Rocket Giovanni from {{ cite "Ultra Sun" }} and {{ cite "Ultra Moon" }}, who shares the goal of ruling the multiverse. Moreover, even though the player character and their party are able to defeat the main villain in the end, the game makes it clear that since Archangels are not flesh and blood and born from human ideas, as long as humans are interested in conquest Aleph will return at some point. This reflects our world in that defeating a tyrant does not magically solve everything, especially when the system that enables tyrants' rise to power still exists. In a similar vein, even after the player character defeats Archangel Mammon, an incarnation of capitalism, which results in one of the Landkeepers — Mammon's underlings — getting the chance to be rehabilitated and starting a new life freed from Mammon's control, said former Landkeeper's quest in the post-game reveals that the other Landkeepers do not reform even after Mammon's defeat, and the remaining Landkeepers continue to be staunch capitalists. -{% enddisclosure %} +{{ enddisclosure }} -## Features {% cite "Cassette Beasts" %} Has But {% cite "Pokémon" %} Lacks +## Features {{ cite "Cassette Beasts" }} Has But {{ cite "Pokémon" }} Lacks -{% cite "Cassette Beasts" %} is not satisfied with just doing {% cite "Pokémon" %}'s core mechanics in different ways, but it also adds features that do not exist in the {% cite "Pokémon" %} games, at least in the main series games as of {% cite "Scarlet" %} and {% cite "Violet" %}. +{{ cite "Cassette Beasts" }} is not satisfied with just doing {{ cite "Pokémon" }}'s core mechanics in different ways, but it also adds features that do not exist in the {{ cite "Pokémon" }} games, at least in the main series games as of {{ cite "Scarlet" }} and {{ cite "Violet" }}. -In this section, I am adding a counter for the things {% cite "Cassette Beasts" %} has that {% cite "Pokémon" %} lacks, to further prove that {% cite "Cassette Beasts" %} is perfectly capable of standing on its own apart from {% cite "Pokémon" %}. If Bytten Studios only want to make a {% cite "Pokémon" %} clone, they did not need to do these additional things at all, but they did it anyway. If this is still not evidence of Bytten Studio's passion for their game to build its own identity, I do not know what is. +In this section, I am adding a counter for the things {{ cite "Cassette Beasts" }} has that {{ cite "Pokémon" }} lacks, to further prove that {{ cite "Cassette Beasts" }} is perfectly capable of standing on its own apart from {{ cite "Pokémon" }}. If Bytten Studios only want to make a {{ cite "Pokémon" }} clone, they did not need to do these additional things at all, but they did it anyway. If this is still not evidence of Bytten Studio's passion for their game to build its own identity, I do not know what is. -Even if one day the {% cite "Pokémon" %} games decide to add any of the below features, it would still not change the fact that {% cite "Cassette Beasts" %} had done them earlier. +Even if one day the {{ cite "Pokémon" }} games decide to add any of the below features, it would still not change the fact that {{ cite "Cassette Beasts" }} had done them earlier. ### Character Creator with Pronouns Options -Character customisation has existed in {% cite "Pokémon" %} games since {% cite "X" %} and {% cite "Y" %}, but to date, none of the games provide options to choose your character's pronouns. However, {% cite "Cassette Beasts" %} allows you to choose they/them pronouns in addition to he/him and she/her, and your pronouns options will be reflected in-game. +Character customisation has existed in {{ cite "Pokémon" }} games since {{ cite "X" }} and {{ cite "Y" }}, but to date, none of the games provide options to choose your character's pronouns. However, {{ cite "Cassette Beasts" }} allows you to choose they/them pronouns in addition to he/him and she/her, and your pronouns options will be reflected in-game. I use they/them pronouns myself, so pronouns options are a welcome addition. @@ -118,69 +118,69 @@ I use they/them pronouns myself, so pronouns options are a welcome addition. ### Fusions of Every Monster -The concept of monster fusions by combining the designs of two monsters together are popular in the {% cite "Pokémon" %} fandom, showing up in fan art and dedicated websites such as web developer Alex Onsager's [Pokemon Fusion website](https://pokemon.alexonsager.net/). However, in the official {% cite "Pokémon" %} franchise, fusions are exclusive to very few Pokémon to create alternate forms, namely Kyurem, Necrozma and Calyrex, all Legendary Pokémon, and they can only fuse with a specific few Legendary Pokémon. +The concept of monster fusions by combining the designs of two monsters together are popular in the {{ cite "Pokémon" }} fandom, showing up in fan art and dedicated websites such as web developer Alex Onsager's [Pokemon Fusion website](https://pokemon.alexonsager.net/). However, in the official {{ cite "Pokémon" }} franchise, fusions are exclusive to very few Pokémon to create alternate forms, namely Kyurem, Necrozma and Calyrex, all Legendary Pokémon, and they can only fuse with a specific few Legendary Pokémon. -In {% cite "Cassette Beasts" %}, monster fusions are a defining feature both in gameplay and the lore. Any two of the 141 monsters in-game can fuse together, thus there are 19,881 fusion combination in total. The nature and origins of fusion is also explored in the game's story and lore. +In {{ cite "Cassette Beasts" }}, monster fusions are a defining feature both in gameplay and the lore. Any two of the 141 monsters in-game can fuse together, thus there are 19,881 fusion combination in total. The nature and origins of fusion is also explored in the game's story and lore. **They Did Not Need To But They Did It Anyway counter: 2** ### Companion and Relationship System with Human Characters -While the primary draw of the {% cite "Pokémon" %} franchise has always been the monster creatures, like other media in the mons genre, human characters do play a notable role in the {% cite "Pokémon" %} franchise from the beginning: in the main series games, you play as a human trainer of Pokémon, battling other human NPC trainers including your rivals, Gym Leaders/Trial Captains, Elite Four, Champions and villains. In some games, you also occasionally team up with other human NPC trainers in battles. However, the main series {% cite "Pokémon" %} games do not have any dedicated companion and relationship mechanic with human characters. +While the primary draw of the {{ cite "Pokémon" }} franchise has always been the monster creatures, like other media in the mons genre, human characters do play a notable role in the {{ cite "Pokémon" }} franchise from the beginning: in the main series games, you play as a human trainer of Pokémon, battling other human NPC trainers including your rivals, Gym Leaders/Trial Captains, Elite Four, Champions and villains. In some games, you also occasionally team up with other human NPC trainers in battles. However, the main series {{ cite "Pokémon" }} games do not have any dedicated companion and relationship mechanic with human characters. -Conversely, human relationships are a major focus in {% cite "Cassette Beasts" %} both in story and game mechanics: you are accompanied by a companion character throughout your adventures in New Wirral, with most of the potential partners being humans; each companion character has their own story and quest for you to explore; each have a relationship level that can be raised by gaining experience points with them, and higher relationship levels make you stronger when you fuse in battle. +Conversely, human relationships are a major focus in {{ cite "Cassette Beasts" }} both in story and game mechanics: you are accompanied by a companion character throughout your adventures in New Wirral, with most of the potential partners being humans; each companion character has their own story and quest for you to explore; each have a relationship level that can be raised by gaining experience points with them, and higher relationship levels make you stronger when you fuse in battle. -Human characters in {% cite "Pokémon" %} interest me as much as the creatures themselves, because the Pokémon world is populated by both Pokémon and humans, thus I find the humans' relationships with the creatures and each other also an important element of the Pokémon world. Unfortunately, I often feel that human characters are an aspect of the {% cite "Pokémon" %} games that are underappreciated by the Western Pokémon fandom, who tend to focus more on the creatures themselves. Therefore, seeing a {% cite "Pokémon" %}-inspired game, especially one that is developed by a Western studio like {% cite "Cassette Beasts" %}, actually make the effort in fleshing out human characters and relationships was the biggest pleasant surprise for me when I started playing {% cite "Cassette Beasts" %} for the first time. +Human characters in {{ cite "Pokémon" }} interest me as much as the creatures themselves, because the Pokémon world is populated by both Pokémon and humans, thus I find the humans' relationships with the creatures and each other also an important element of the Pokémon world. Unfortunately, I often feel that human characters are an aspect of the {{ cite "Pokémon" }} games that are underappreciated by the Western Pokémon fandom, who tend to focus more on the creatures themselves. Therefore, seeing a {{ cite "Pokémon" }}-inspired game, especially one that is developed by a Western studio like {{ cite "Cassette Beasts" }}, actually make the effort in fleshing out human characters and relationships was the biggest pleasant surprise for me when I started playing {{ cite "Cassette Beasts" }} for the first time. -{% cite "Pokémon" %} has a spin-off game that focus more on human characters: {% cite "Pokémon Masters EX" %}, but the fact that it is a gacha game means it is a glorified gambling game that wants you to spend real-world money to gamble to collect the human trainers. However, that is not the case at all in {% cite "Cassette Beasts" %}, since it does not have any in-app purchases whatsovever. In fact, {% cite "Cassette Beasts" %}' companion and relationship systems prove that {% cite "Pokémon" %} can do more with their human characters without predatory monetisation tactics. +{{ cite "Pokémon" }} has a spin-off game that focus more on human characters: {{ cite "Pokémon Masters EX" }}, but the fact that it is a gacha game means it is a glorified gambling game that wants you to spend real-world money to gamble to collect the human trainers. However, that is not the case at all in {{ cite "Cassette Beasts" }}, since it does not have any in-app purchases whatsovever. In fact, {{ cite "Cassette Beasts" }}' companion and relationship systems prove that {{ cite "Pokémon" }} can do more with their human characters without predatory monetisation tactics. **They Did Not Need To But They Did It Anyway counter: 3** ### Romance Options -Related to the above point about the companion system and relationship mechanic with human characters, the main series {% cite "Pokémon" %} games do not have any option for the player to pursue a romance with another character. The closest the main series games attempted a romance arc for the player character is {% cite "Omega Ruby" %} and {% cite "Alpha Sapphire" %}, where the protagonist and their neighbour rival are implied to become a couple in the post-game story by going on a date, as well as {% cite "Black 2" %} and {% cite "White 2" %}, where the protagonist can pursue an optional subplot with a different-gender NPC who eventually develops a crush on the protagonist. +Related to the above point about the companion system and relationship mechanic with human characters, the main series {{ cite "Pokémon" }} games do not have any option for the player to pursue a romance with another character. The closest the main series games attempted a romance arc for the player character is {{ cite "Omega Ruby" }} and {{ cite "Alpha Sapphire" }}, where the protagonist and their neighbour rival are implied to become a couple in the post-game story by going on a date, as well as {{ cite "Black 2" }} and {{ cite "White 2" }}, where the protagonist can pursue an optional subplot with a different-gender NPC who eventually develops a crush on the protagonist. -{% cite "Cassette Beasts" %}, on the other hand, as an addition to its companion system and relationship mechanic, provides players the option to pursue a romance with one of their human companions after raising their relationship level to 5, the highest without romance, with unambiguously romantic dialogue and scenes. +{{ cite "Cassette Beasts" }}, on the other hand, as an addition to its companion system and relationship mechanic, provides players the option to pursue a romance with one of their human companions after raising their relationship level to 5, the highest without romance, with unambiguously romantic dialogue and scenes. -Even though I do not play monster collecting games for romances, nor am I asking for {% cite "Pokémon" %} to add romance options to their games because I am too old to be invested in romances involving fictional children, romance options are a nice addition to a game that is made with adult players in mind like {% cite "Cassette Beasts" %}. +Even though I do not play monster collecting games for romances, nor am I asking for {{ cite "Pokémon" }} to add romance options to their games because I am too old to be invested in romances involving fictional children, romance options are a nice addition to a game that is made with adult players in mind like {{ cite "Cassette Beasts" }}. **They Did Not Need To But They Did It Anyway counter: 4** -If the existence of the option to romance your human companion is not enough, in {% cite "Cassette Beasts" %} you can romance a companion regardless of your player character's gender. In other words, all the companions that can be romanced by the player character in {% cite "Cassette Beasts" %} are available as same-gender romance options, which is a blessing for LGBTQ+ players like me. +If the existence of the option to romance your human companion is not enough, in {{ cite "Cassette Beasts" }} you can romance a companion regardless of your player character's gender. In other words, all the companions that can be romanced by the player character in {{ cite "Cassette Beasts" }} are available as same-gender romance options, which is a blessing for LGBTQ+ players like me. **They Did Not Need To But They Did It Anyway counter: 5** ### Canon LGBTQ+ Characters and Representation -{% cite "Pokémon" %} is not known for explicitly canon LGBTQ+ representation. The franchise does not have a single confirmed canon same-gender couple. In the shipping side of the {% cite "Pokémon" %} fandom, particularly among LGBTQ+ fans, some same-gender pairings are popular, but it does not change the fact that there is no character in the {% cite "Pokémon" %} franchise who is officially confirmed to be attracted to the same-gender. +{{ cite "Pokémon" }} is not known for explicitly canon LGBTQ+ representation. The franchise does not have a single confirmed canon same-gender couple. In the shipping side of the {{ cite "Pokémon" }} fandom, particularly among LGBTQ+ fans, some same-gender pairings are popular, but it does not change the fact that there is no character in the {{ cite "Pokémon" }} franchise who is officially confirmed to be attracted to the same-gender. -On the flip side, {% cite "Cassette Beasts" %} has canon LGBTQ+ characters. For characters who are attracted to the samge gender, the most notable ones are the companions that can be romanced by the player character, as they are romance options regardless of the player character's gender, meaning those companion characters are canonically bisexual. In fact, Kayleigh, the first companion that joins the player and a romance option, has a rug with the bisexual pride flag design in her house. Furthermore, the game also has a pair of NPCs who are revealed in-game to be a gay married couple. +On the flip side, {{ cite "Cassette Beasts" }} has canon LGBTQ+ characters. For characters who are attracted to the samge gender, the most notable ones are the companions that can be romanced by the player character, as they are romance options regardless of the player character's gender, meaning those companion characters are canonically bisexual. In fact, Kayleigh, the first companion that joins the player and a romance option, has a rug with the bisexual pride flag design in her house. Furthermore, the game also has a pair of NPCs who are revealed in-game to be a gay married couple. -{%- disclosure 'Minor Quest Spoilers for Cassette Beasts' %} -To be specific, this pair of NPCs in question are Leader Ianthe and Ranger Wilma, members of the Ranger Guild. After you defeat all 12 Ranger Captains, and you challenge Ianthe to a battle, Ianthe will reveal that she will fight alongside her wife, who is none other than Ranger Wilma, the woman in charge of the Ranger Guild store. Yes, {% cite "Cassette Beasts" %} has a canon married lesbian couple. -{%- enddisclosure %} +{{- disclosure 'Minor Quest Spoilers for Cassette Beasts' }} +To be specific, this pair of NPCs in question are Leader Ianthe and Ranger Wilma, members of the Ranger Guild. After you defeat all 12 Ranger Captains, and you challenge Ianthe to a battle, Ianthe will reveal that she will fight alongside her wife, who is none other than Ranger Wilma, the woman in charge of the Ranger Guild store. Yes, {{ cite "Cassette Beasts" }} has a canon married lesbian couple. +{{- enddisclosure }} -As for transgender and non-binary representation, {% cite "Pokémon" %} has a few ambiguously canon ones, namely [Beauty Nova](https://lgbtqgamearchive.com/2016/05/25/beauty-nova-in-pokemon-xy/), a minor female NPC Trainer from {% cite "X" %} and {% cite "Y" %} who is heavily implied to be a trans woman, and [Blanche](https://bulbapedia.bulbagarden.net/wiki/Blanche) from {% cite "Pokémon GO" %}, who is not referred to by gendered pronouns in the English version of the game and official social media accounts. Some other human characters are also commonly interpreted or headcanonned as trans by LGBTQ+ fans, but none of them are officially confirmed to be trans or non-binary. +As for transgender and non-binary representation, {{ cite "Pokémon" }} has a few ambiguously canon ones, namely [Beauty Nova](https://lgbtqgamearchive.com/2016/05/25/beauty-nova-in-pokemon-xy/), a minor female NPC Trainer from {{ cite "X" }} and {{ cite "Y" }} who is heavily implied to be a trans woman, and [Blanche](https://bulbapedia.bulbagarden.net/wiki/Blanche) from {{ cite "Pokémon GO" }}, who is not referred to by gendered pronouns in the English version of the game and official social media accounts. Some other human characters are also commonly interpreted or headcanonned as trans by LGBTQ+ fans, but none of them are officially confirmed to be trans or non-binary. -In {% cite "Cassette Beasts" %}, not only that the player can chose to go by they/them pronouns via the character creator, but there is also a Ranger Captain named Skip who is canonically non-binary and uses they/them pronouns. +In {{ cite "Cassette Beasts" }}, not only that the player can chose to go by they/them pronouns via the character creator, but there is also a Ranger Captain named Skip who is canonically non-binary and uses they/them pronouns. -In addition to having canon LGBTQ+ characters, {% cite "Cassette Beasts" %}'s voice cast also includes multiple openly LGBTQ+ voice actors, such as Allegra Clark, J. Michael Tatum, Kayleigh McKee, Liz Morey, Marin M. Miller and Risa Mei. In fact, both Captain Skip and their voice actor Marin M. Miller are non-binary and go by they/them pronouns. +In addition to having canon LGBTQ+ characters, {{ cite "Cassette Beasts" }}'s voice cast also includes multiple openly LGBTQ+ voice actors, such as Allegra Clark, J. Michael Tatum, Kayleigh McKee, Liz Morey, Marin M. Miller and Risa Mei. In fact, both Captain Skip and their voice actor Marin M. Miller are non-binary and go by they/them pronouns. -Looking for LGBTQ+ representation in monster collecting games? Instead of waiting for corporate franchises like {% cite "Pokémon" %} to give you scraps, how about looking at indie titles that actually has canon LGBTQ+ characters like {% cite "Cassette Beasts" %} instead? +Looking for LGBTQ+ representation in monster collecting games? Instead of waiting for corporate franchises like {{ cite "Pokémon" }} to give you scraps, how about looking at indie titles that actually has canon LGBTQ+ characters like {{ cite "Cassette Beasts" }} instead? **They Did Not Need To But They Did It Anyway counter: 6** ### Voice Acting -Despite some attempts to tell more developed stories with more dialogue and cinematic cutscenes, as of {% cite "Scarlet" %} and {% cite "Violet" %}, none of the main series {% cite "Pokémon" %} games have any voice acting in their dialogue. +Despite some attempts to tell more developed stories with more dialogue and cinematic cutscenes, as of {{ cite "Scarlet" }} and {{ cite "Violet" }}, none of the main series {{ cite "Pokémon" }} games have any voice acting in their dialogue. -On the other hand, {% cite "Cassette Beasts" %} has voiced dialogue. Even though the amount of voiced dialogue in {% cite "Cassette Beasts" %} is limited, voice acting helps to bring the characters to life and add more character to the game. +On the other hand, {{ cite "Cassette Beasts" }} has voiced dialogue. Even though the amount of voiced dialogue in {{ cite "Cassette Beasts" }} is limited, voice acting helps to bring the characters to life and add more character to the game. -It is more notable when you remember that being an indie game, {% cite "Cassette Beasts" %} could have completely avoid adding voice acting to save development budget, but the developers added it anyway. +It is more notable when you remember that being an indie game, {{ cite "Cassette Beasts" }} could have completely avoid adding voice acting to save development budget, but the developers added it anyway. **They Did Not Need To But They Did It Anyway counter: 7** -Oh, and there is more! {% cite "Cassette Beasts" %} actually has an impressive voice cast, especially for an indie game, featuring established, well-known voice actors including Yuri Lowenthal, Tara Platt, Allegra Clark, Aleks Le, Sean Chiplock, J. Michael Tatum, Jennifer Losi, Kayleigh McKee, Risa Mei, Marin M. Miller, Cindy Robinson, Edwyn Tiong, etc. +Oh, and there is more! {{ cite "Cassette Beasts" }} actually has an impressive voice cast, especially for an indie game, featuring established, well-known voice actors including Yuri Lowenthal, Tara Platt, Allegra Clark, Aleks Le, Sean Chiplock, J. Michael Tatum, Jennifer Losi, Kayleigh McKee, Risa Mei, Marin M. Miller, Cindy Robinson, Edwyn Tiong, etc. Bytten Studio and Raw Fury could have just hire unknowns to save budget, but nope, they achieved the remarkable feat of getting multiple famous voice actors for an indie game. @@ -188,34 +188,34 @@ Bytten Studio and Raw Fury could have just hire unknowns to save budget, but nop ### Custom Game Modes -The {% cite "Pokémon" %} player base has various methods of changing up ways of playing the games for fun or for a self-imposed challenge, with the most popular including the [Nuzlocke Challenge](https://bulbapedia.bulbagarden.net/wiki/Nuzlocke_Challenge) and randomizers. These modes of playing {% cite "Pokémon" %} games are never part of the official games. +The {{ cite "Pokémon" }} player base has various methods of changing up ways of playing the games for fun or for a self-imposed challenge, with the most popular including the [Nuzlocke Challenge](https://bulbapedia.bulbagarden.net/wiki/Nuzlocke_Challenge) and randomizers. These modes of playing {{ cite "Pokémon" }} games are never part of the official games. -{% cite "Cassette Beasts" %} include custom game modes that serve similar purposes as these fan-made game mods for {% cite "Pokémon" %}: permadeath mode, similar to Pokémon's Nuzlocke Challenge, and randomisation mode. These custom game modes can be unlocked by completing the main story or through the [cheats](https://wiki.cassettebeasts.com/wiki/Cheats#Unlocking_Custom_Modes). +{{ cite "Cassette Beasts" }} include custom game modes that serve similar purposes as these fan-made game mods for {{ cite "Pokémon" }}: permadeath mode, similar to Pokémon's Nuzlocke Challenge, and randomisation mode. These custom game modes can be unlocked by completing the main story or through the [cheats](https://wiki.cassettebeasts.com/wiki/Cheats#Unlocking_Custom_Modes). **They Did Not Need To But They Did It Anyway counter: 9** ### Level Scaling and Enemy AI Adjustment Options -A common criticism of the {% cite "Pokémon" %} games from long-time players is the lack of difficulty settings, and even the only pair of games that actually have it, {% cite "Black 2" %} and {% cite "White 2" %}, require you to complete the main campaign to unlock. Moreover, the open-world design of {% cite "Scarlet" %} and {% cite "Violet" %} has been criticised for the lack of level scaling in opponents' Pokémon. +A common criticism of the {{ cite "Pokémon" }} games from long-time players is the lack of difficulty settings, and even the only pair of games that actually have it, {{ cite "Black 2" }} and {{ cite "White 2" }}, require you to complete the main campaign to unlock. Moreover, the open-world design of {{ cite "Scarlet" }} and {{ cite "Violet" }} has been criticised for the lack of level scaling in opponents' Pokémon. -However, the settings menu of {% cite "Cassette Beasts" %} already includes sliders to adjust the game's difficulty through the level scaling and enemy AI options from the get go, and does not require you to perform extra steps to unlock, so you are free to make the game easier or more difficult as you wish. +However, the settings menu of {{ cite "Cassette Beasts" }} already includes sliders to adjust the game's difficulty through the level scaling and enemy AI options from the get go, and does not require you to perform extra steps to unlock, so you are free to make the game easier or more difficult as you wish. **They Did Not Need To But They Did It Anyway counter: 10** ### Built-In Mod Support -{% cite "Pokémon" %} modding and ROM hacks have existed in the Pokémon player community since the beginning of the series, but modding Pokémon games is never officially supported by Nintendo, Game Freak or The Pokémon Company. +{{ cite "Pokémon" }} modding and ROM hacks have existed in the Pokémon player community since the beginning of the series, but modding Pokémon games is never officially supported by Nintendo, Game Freak or The Pokémon Company. -{% cite "Cassette Beasts" %}, on the other hand, has built-in support for mods. In fact, the [official Cassette Beasts wiki](https://wiki.cassettebeasts.com/wiki/Main_Page) has [modding guides](https://wiki.cassettebeasts.com/wiki/Modding:Modding), and the [official Bytten Studio Discord server](https://discord.gg/byttenstudio) has a dedicated {% cite "Cassette Beasts" %} modding channel. +{{ cite "Cassette Beasts" }}, on the other hand, has built-in support for mods. In fact, the [official Cassette Beasts wiki](https://wiki.cassettebeasts.com/wiki/Main_Page) has [modding guides](https://wiki.cassettebeasts.com/wiki/Modding:Modding), and the [official Bytten Studio Discord server](https://discord.gg/byttenstudio) has a dedicated {{ cite "Cassette Beasts" }} modding channel. **They Did Not Need To But They Did It Anyway counter: 11** ## Conclusion -While it is understandable to compare {% cite "Cassette Beasts" %} to {% cite "Pokémon" %}, {% cite "Cassette Beasts" %} has countless claims to forge its own identity apart from the pioneer of the monster collecting role-playing game genre, as explained throughout this essay. As someone who has played {% cite "Pokémon" %} games since the {% cite "Red Version" %} from Generation 1, but has become jaded with the state of the series since {% cite "Sword" %} and {% cite "Shield" %} from Generation 8 and is losing interest in playing their recent titles, {% cite "Cassette Beasts" %} provides a perfect indie alternative for something different. +While it is understandable to compare {{ cite "Cassette Beasts" }} to {{ cite "Pokémon" }}, {{ cite "Cassette Beasts" }} has countless claims to forge its own identity apart from the pioneer of the monster collecting role-playing game genre, as explained throughout this essay. As someone who has played {{ cite "Pokémon" }} games since the {{ cite "Red Version" }} from Generation 1, but has become jaded with the state of the series since {{ cite "Sword" }} and {{ cite "Shield" }} from Generation 8 and is losing interest in playing their recent titles, {{ cite "Cassette Beasts" }} provides a perfect indie alternative for something different. -Frequent releases and rushed development schedules have taken their toll on the quality of recent {% cite "Pokémon" %} titles, resulting in cutting corners like empty maps, removal of National PokéDex, etc., and in the case of {% cite "Scarlet" %} and {% cite "Violet" %}, glitches and performance issues. Furthermore, as a multi-billion dollar corporate-owned franchise, {% cite "Pokémon" %} is primarily targeted at children and meant to be able to be enjoyed by everyone, so despite a few attempts to do something new, maximising profit is still prioritised over innovation. +Frequent releases and rushed development schedules have taken their toll on the quality of recent {{ cite "Pokémon" }} titles, resulting in cutting corners like empty maps, removal of National PokéDex, etc., and in the case of {{ cite "Scarlet" }} and {{ cite "Violet" }}, glitches and performance issues. Furthermore, as a multi-billion dollar corporate-owned franchise, {{ cite "Pokémon" }} is primarily targeted at children and meant to be able to be enjoyed by everyone, so despite a few attempts to do something new, maximising profit is still prioritised over innovation. -Art that tries to appeal to everyone, even if not bad, tends to be bland and reluctant to take creative risks. {% cite "Cassette Beasts" %} is another evidence that indie games can be much more creative than AAA games. +Art that tries to appeal to everyone, even if not bad, tends to be bland and reluctant to take creative risks. {{ cite "Cassette Beasts" }} is another evidence that indie games can be much more creative than AAA games. -Therefore, if you think you have outgrown {% cite "Pokémon" %} and looking for a more sophisticated and mature monster collector game that actually treats the player like an adult, go play {% cite "Cassette Beasts" %}. +Therefore, if you think you have outgrown {{ cite "Pokémon" }} and looking for a more sophisticated and mature monster collector game that actually treats the player like an adult, go play {{ cite "Cassette Beasts" }}. diff --git a/src/shrines/cassettebeasts/articles/sunny-minor-role.md b/src/shrines/cassettebeasts/articles/sunny-minor-role.md index 53245355..df357c65 100644 --- a/src/shrines/cassettebeasts/articles/sunny-minor-role.md +++ b/src/shrines/cassettebeasts/articles/sunny-minor-role.md @@ -7,9 +7,9 @@ tags: cassette beasts articles categories: ["cassette beasts"] --- -On 27 March 2025 in Western time zones and 12 a.m. on 28 March 2025 in my time zone, the 2025 edition of [Cassette Beasts Showcase](https://wiki.cassettebeasts.com/wiki/Cassette_Beasts_Showcase), an annual video presentation in which news and updates about {% cite "Cassette Beasts" %} are shared, was aired on the game's publisher [Raw Fury's YouTube channel](https://www.youtube.com/watch?v=AJe9aRZCc3U). The main highlight of the 2025 Showcase was the announcement of version update 1.8, named the "Sunshine Update", revealing that among other things, Sunny, a fan favourite character will be a new partner character, along with a new story quest involving her. +On 27 March 2025 in Western time zones and 12 a.m. on 28 March 2025 in my time zone, the 2025 edition of [Cassette Beasts Showcase](https://wiki.cassettebeasts.com/wiki/Cassette_Beasts_Showcase), an annual video presentation in which news and updates about {{ cite "Cassette Beasts" }} are shared, was aired on the game's publisher [Raw Fury's YouTube channel](https://www.youtube.com/watch?v=AJe9aRZCc3U). The main highlight of the 2025 Showcase was the announcement of version update 1.8, named the "Sunshine Update", revealing that among other things, Sunny, a fan favourite character will be a new partner character, along with a new story quest involving her. -The reveal of Sunny being promoted from a minor NPC who only appears in a minor side quest to a playable partner character took me by surprise, because Bytten Studio, the developers of {% cite "Cassette Beasts" %} had never hinted at any possibility of adding new partner characters before. In fact, Jay Baylis, the art director of Bytten Studio, had [stated in Bytten Studio's AMA on the r/NintendoSwitch Subreddit on 1 July 2023](https://www.reddit.com/r/NintendoSwitch/comments/14nvsiu/comment/jq9hy3n/?context=3) that: +The reveal of Sunny being promoted from a minor NPC who only appears in a minor side quest to a playable partner character took me by surprise, because Bytten Studio, the developers of {{ cite "Cassette Beasts" }} had never hinted at any possibility of adding new partner characters before. In fact, Jay Baylis, the art director of Bytten Studio, had [stated in Bytten Studio's AMA on the r/NintendoSwitch Subreddit on 1 July 2023](https://www.reddit.com/r/NintendoSwitch/comments/14nvsiu/comment/jq9hy3n/?context=3) that: > [...]the current number of partner characters is baked into the design of the game in a number of ways, making it very difficult to organically add new ones in. @@ -26,11 +26,11 @@ The reason why Sunny initially had little screen time and content was that she w > Sunny was a late addition to the game as I pitched a short storyline involving the gang rehabilitating a Landkeeper after Eugene's quest. It's very apparent we underestimated how popular she'd turn out to be! > — Jay Baylis. [Comment](https://www.reddit.com/r/JRPG/comments/1bniroh/comment/kwmb4j4/) during Bytten Studio's AMA on the r/JRPG Subreddit. 26 March 2024. -Questions about Sunny only getting a minor role were asked by players frequently enough that I even compiled the developers' response in [my {% cite "Cassette Beasts" %} shrine's Facts page](/shrines/cassettebeasts/facts/), so I can link to it whenever I see someone asked the same questions about Sunny. Now that Sunny would become a partner character, meaning thankfully questions and complaints about Sunny's minor role could finally stop, I have removed those form the Facts page, but not before [saving the page to the Internet Archive](https://web.archive.org/web/20250120094054/https://leilukin.com/shrines/cassettebeasts/facts/#sunnys-lack-of-screen-time-and-content) for reference. +Questions about Sunny only getting a minor role were asked by players frequently enough that I even compiled the developers' response in [my {{ cite "Cassette Beasts" }} shrine's Facts page](/shrines/cassettebeasts/facts/), so I can link to it whenever I see someone asked the same questions about Sunny. Now that Sunny would become a partner character, meaning thankfully questions and complaints about Sunny's minor role could finally stop, I have removed those form the Facts page, but not before [saving the page to the Internet Archive](https://web.archive.org/web/20250120094054/https://leilukin.com/shrines/cassettebeasts/facts/#sunnys-lack-of-screen-time-and-content) for reference. -I like Sunny too, as I appreciate the concept of a character getting deprogrammed from capitalism and starting a new life beyond capitalism, which makes a good addition to {% cite "Cassette Beasts" %}'s leftist messages. In fact, Sunny's in-game character title, which can be seen if she appears as an opponent in Magikrab's Gauntlet, is "Recovering Capitalist". However, to be honest, I had always been fine with Sunny only having a minor role in the game, and I did not care as much as other Sunny fans did about the idea of her becoming a partner character. +I like Sunny too, as I appreciate the concept of a character getting deprogrammed from capitalism and starting a new life beyond capitalism, which makes a good addition to {{ cite "Cassette Beasts" }}'s leftist messages. In fact, Sunny's in-game character title, which can be seen if she appears as an opponent in Magikrab's Gauntlet, is "Recovering Capitalist". However, to be honest, I had always been fine with Sunny only having a minor role in the game, and I did not care as much as other Sunny fans did about the idea of her becoming a partner character. -Why? The main reason is that it would not be a poor game design in terms of the game's pacing. Sunny only shows up after you completed the personal questline of Eugene, one of the partner characters available since the game's launch. Eugene's personal quest is already rather infamous for taking longer than every other base game partner character's quest to complete, as Eugene's quest requires the player to explore the majority of New Wirral, the main setting of {% cite "Cassette Beasts" %}, to track down and clear the Landkeeper Offices all over the map. This is not helped by the fact that you need to complete a partner's personal quest before you can raise your relationship level with them, so when you finally complete Eugene's quest, you may feel that you only have little time left to raise Eugene's relationship level with you before facing the final boss of the game. +Why? The main reason is that it would not be a poor game design in terms of the game's pacing. Sunny only shows up after you completed the personal questline of Eugene, one of the partner characters available since the game's launch. Eugene's personal quest is already rather infamous for taking longer than every other base game partner character's quest to complete, as Eugene's quest requires the player to explore the majority of New Wirral, the main setting of {{ cite "Cassette Beasts" }}, to track down and clear the Landkeeper Offices all over the map. This is not helped by the fact that you need to complete a partner's personal quest before you can raise your relationship level with them, so when you finally complete Eugene's quest, you may feel that you only have little time left to raise Eugene's relationship level with you before facing the final boss of the game. Therefore, the idea of making Sunny a partner character means having a partner locked behind another partner's questline that already took up a huge chunk of the game to complete. Making Sunny a partner in the base game would make it feel like you only have little time to spend with Sunny before facing the final boss of the game. @@ -44,4 +44,4 @@ Another reason I would prefer Sunny, or any possible future new partners, to be Learning that Sunny was a late addition to the game during the game's development only cemented my feelings that I was fine with Sunny having little screen time in the game. To be honest, if I were the developers, I would not expect a minor NPC I added to my game only at the last minute to become this popular with the players either. -With all that being said, I was looking forward to recruiting Sunny as a partner and exploring her story more in the "Sunshine Update" as soon as the announcement trailer was revealed. Partner characters are a major appeal of {% cite "Cassette Beasts" %} to me, so I welcome more content updates involving partner characters. Shortly after the "Sunshine Update" went live, I played the game, unlocked Sunny as a partner, completed her partner quest, and enjoyed how Sunny's story got expanded. +With all that being said, I was looking forward to recruiting Sunny as a partner and exploring her story more in the "Sunshine Update" as soon as the announcement trailer was revealed. Partner characters are a major appeal of {{ cite "Cassette Beasts" }} to me, so I welcome more content updates involving partner characters. Shortly after the "Sunshine Update" went live, I played the game, unlocked Sunny as a partner, completed her partner quest, and enjoyed how Sunny's story got expanded. diff --git a/src/shrines/cassettebeasts/facts.md b/src/shrines/cassettebeasts/facts.md index 838b0dff..67cc9411 100644 --- a/src/shrines/cassettebeasts/facts.md +++ b/src/shrines/cassettebeasts/facts.md @@ -12,7 +12,7 @@ eleventyNavigation: order: 4 --- -## Where to Find {% cite "Cassette Beasts" %} Facts and Trivia +## Where to Find {{ cite "Cassette Beasts" }} Facts and Trivia You can find facts and trivia about the game from: @@ -25,7 +25,7 @@ You can find facts and trivia about the game from: * [Reddit AMA on r/JRPG](https://www.reddit.com/r/JRPG/comments/1bniroh/we_are_bytten_studio_developers_of_the/) on 25 March 2024 * [Reddit AMA on r/cassettebeasts](https://www.reddit.com/r/cassettebeasts/comments/1gvucl7/we_are_bytten_studio_the_developers_of_cassette/) on 20 November 2024 -[Here is a list of interviews](https://wiki.cassettebeasts.com/wiki/List_of_Interviews) that staff who worked on Cassette Beasts participated in and discussed {% cite "Cassette Beasts" %}. +[Here is a list of interviews](https://wiki.cassettebeasts.com/wiki/List_of_Interviews) that staff who worked on Cassette Beasts participated in and discussed {{ cite "Cassette Beasts" }}. ## Development History @@ -42,7 +42,7 @@ Late 2019 : Main voice cast [announced](https://twitter.com/ByttenStudio/status/1641106350376665091). 26 April 2023 -: {% cite "Cassette Beasts" %} released on PC and Xbox PC Game Pass with a [PC release trailer](https://www.youtube.com/watch?v=_OLST_Fw5Ms), which also confirmed the release date of Xbox Series X/S, Xbox One, and Nintendo Switch versions to be 25 May 2023. +: {{ cite "Cassette Beasts" }} released on PC and Xbox PC Game Pass with a [PC release trailer](https://www.youtube.com/watch?v=_OLST_Fw5Ms), which also confirmed the release date of Xbox Series X/S, Xbox One, and Nintendo Switch versions to be 25 May 2023. 27 April 2023 : [Hotfix 1.1.2](https://store.steampowered.com/news/app/1321440/view/3727334659005649764) live. @@ -51,7 +51,7 @@ Late 2019 : [Hotfix 1.1.3](https://store.steampowered.com/news/app/1321440/view/3727335925783976124) live. 25 May 2023 -: {% cite "Cassette Beasts" %} released on Xbox Series X|S, Xbox One, Gamepass and Nintendo Switch, with a [console release trailer](https://www.youtube.com/watch?v=YDSiPEtAW-0). +: {{ cite "Cassette Beasts" }} released on Xbox Series X|S, Xbox One, Gamepass and Nintendo Switch, with a [console release trailer](https://www.youtube.com/watch?v=YDSiPEtAW-0). 22 June 2023 : 1.2 Update [announced](https://x.com/ByttenStudio/status/1671901115187707905). @@ -108,7 +108,7 @@ Late 2019 : Android and iOS version confirmed to be released on January 15, with an [announcement trailer](https://www.youtube.com/watch?v=cq2Y3JukO1I). 15 January 2025 -: {% cite "Cassette Beasts" %} released on [Android](https://play.google.com/store/apps/details?id=com.RawFury.CassetteBeasts) and [iOS](https://apps.apple.com/sg/app/cassette-beasts/id6736517805). +: {{ cite "Cassette Beasts" }} released on [Android](https://play.google.com/store/apps/details?id=com.RawFury.CassetteBeasts) and [iOS](https://apps.apple.com/sg/app/cassette-beasts/id6736517805). 27 March 2025 : Version 1.7 "Sunshine Update" and "Wings Pack" cosmetic DLC [announced](https://store.steampowered.com/news/app/1321440/view/543351239572719532) to be released on 7 April 2024, with an [announcement trailer](https://www.youtube.com/watch?v=MfEy-5hpi6I). @@ -118,31 +118,31 @@ Late 2019 ## Accolades -{% cite "Cassette Beasts" %} was [nominated for The British Game](https://twitter.com/ByttenStudio/status/1765742782700782040) ([archived](https://web.archive.org/web/20240307212519/https://twitter.com/ByttenStudio/status/1765742782700782040)) at the 20th British Academy (BAFTA) Games Awards. +{{ cite "Cassette Beasts" }} was [nominated for The British Game](https://twitter.com/ByttenStudio/status/1765742782700782040) ([archived](https://web.archive.org/web/20240307212519/https://twitter.com/ByttenStudio/status/1765742782700782040)) at the 20th British Academy (BAFTA) Games Awards. Bytten Studio was [nominated for "Best Small Studio"](https://x.com/ByttenStudio/status/1791085233216823769) ([archived](https://archive.is/n3TcT)) at the Develop:Star Awards 2024. -{% cite "Cassette Beasts: Deluxe Edition" %} [won Debug Indie Game Award for "Best Physical Release"](https://bsky.app/profile/byttenstudio.bsky.social/post/3ljazkisrvk2w) ([archived](https://archive.is/RFQVc)). +{{ cite "Cassette Beasts: Deluxe Edition" }} [won Debug Indie Game Award for "Best Physical Release"](https://bsky.app/profile/byttenstudio.bsky.social/post/3ljazkisrvk2w) ([archived](https://archive.is/RFQVc)). ## Design Philosophy -On 12 October 2023, Bytten Studio wrote a Steam blog post ["Cassette Beasts - Design & Expectations"](https://store.steampowered.com/news/app/1321440/view/6349565145235433772) about their design philosophy of {% cite "Cassette Beasts" %} to celebrate the game reaching 350,000+ players. +On 12 October 2023, Bytten Studio wrote a Steam blog post ["Cassette Beasts - Design & Expectations"](https://store.steampowered.com/news/app/1321440/view/6349565145235433772) about their design philosophy of {{ cite "Cassette Beasts" }} to celebrate the game reaching 350,000+ players. -{% cite "Cassette Beasts" %} very consciously opens with exploration and combat within the first minute of the game and leaves the lore for later, because Bytten Studio believes in giving players the game first and selling the players on the story later.^[Jay Baylis' (@SamuriFerret) [quote tweet](https://x.com/SamuriFerret/status/1788943762594369890) from @DavidKayConrad. 10 May 2024.] +{{ cite "Cassette Beasts" }} very consciously opens with exploration and combat within the first minute of the game and leaves the lore for later, because Bytten Studio believes in giving players the game first and selling the players on the story later.^[Jay Baylis' (@SamuriFerret) [quote tweet](https://x.com/SamuriFerret/status/1788943762594369890) from @DavidKayConrad. 10 May 2024.] ## Influences and Inspirations The YouTube channel Lockstin & Gnoggin has a video that explains the names and designs of the monsters and Archangels: [EVERY Cassette Beast EXPLAINED! 🖭](https://www.youtube.com/watch?v=GlKQzL6gpxc). The video was [retweeted](/assets/shrines/cassettebeasts/socmed/Screenshot-2023-10-05-at-14-27-39-Lockstin-on-X.avif) by Bytten Studio. -The idea of copying monster forms to transform into came from Tom Coxon's dream. Jay Baylis, inspired by {% cite "Kamen Rider" %}, later suggested doing the copying and transforming with physical cassette tapes.[^cb-steam-blog-20230228] +The idea of copying monster forms to transform into came from Tom Coxon's dream. Jay Baylis, inspired by {{ cite "Kamen Rider" }}, later suggested doing the copying and transforming with physical cassette tapes.[^cb-steam-blog-20230228] Another oddball source of inspiration for Tom the story [“The Beatles Never Broke Up”](https://thebeatlesneverbrokeup.com/story/), about a man who in 2009 hit his head and woke up in another world where the Beatles still exist, where people still use analogue technology, and where parallel universe travel is commonplace.[^cb-steam-blog-20230228] -The presentation of Archangels is inspired a little by the Witches in {% cite "Puella Magi Madoka Magica" %}.[^cb-steam-blog-20230228] +The presentation of Archangels is inspired a little by the Witches in {{ cite "Puella Magi Madoka Magica" }}.[^cb-steam-blog-20230228] -The way the relationship system ties into fusions is heavily influenced by {% cite "Steven Universe" %}, which both Tom and Jay are fans of.[^cb-steam-blog-20230228] +The way the relationship system ties into fusions is heavily influenced by {{ cite "Steven Universe" }}, which both Tom and Jay are fans of.[^cb-steam-blog-20230228] -The AP system in {% cite "Cassette Beasts" %} is taken from board and card games.[^cb-steam-blog-20230228] +The AP system in {{ cite "Cassette Beasts" }} is taken from board and card games.[^cb-steam-blog-20230228] Jay cited comic author Grant Morrison as an influence on the broader themes of the game (as well as the strange English surrealism of the setting), as Morrison's stories often explore the nature of fiction, multiple realities, and their influence on one another.[^cb-steam-blog-20230228] @@ -150,7 +150,7 @@ Archangels Morgante and Aleph were inspired by Morgan le Fay and King Arthur fro The ideas for the other Archangels came after Morgante and Aleph. Their themes were kind of arbitrarily chosen to match the design Jay had given them.[^bytten-ama-july-2023-archangels] -Bytten Studio made a point to not put in a huge amount of Japanese mythological monsters in comparison to mythology from other nations, especially since well-known mons franchises such as {% cite "Shin Megami Tensei" %}, {% cite "Pokémon" %} and {% cite "Digimon" %} are Japanese franchises; they do not want to seem derivative.^[Jay Baylis's (samuri) [message](https://discord.com/channels/594939411775619102/709417227652431942/1206255854211305523). Bytten Studio Discord server. 11 February 2024.] +Bytten Studio made a point to not put in a huge amount of Japanese mythological monsters in comparison to mythology from other nations, especially since well-known mons franchises such as {{ cite "Shin Megami Tensei" }}, {{ cite "Pokémon" }} and {{ cite "Digimon" }} are Japanese franchises; they do not want to seem derivative.^[Jay Baylis's (samuri) [message](https://discord.com/channels/594939411775619102/709417227652431942/1206255854211305523). Bytten Studio Discord server. 11 February 2024.] Barkley was not inspired by anything in particular; he was added in the game to surprise players as a non-human partner.^[Tom Coxon's (u/tcoxon) [comment](https://www.reddit.com/r/JRPG/comments/1bniroh/comment/kwiqbm5/). Bytten Studio's AMA on r/JRPG. 25 March 2024.] @@ -217,24 +217,24 @@ Common words and phrases: ## The Developers -Jay Baylis' favourite monster catching game is {% cite "Pokémon Ruby/Sapphire" %}.^[Jay Baylis' (u/SamuriFerret) [comment](https://www.reddit.com/r/NintendoSwitch/comments/14nvsiu/ama_we_are_bytten_studio_the_developers_of/jq9qo03/). Bytten Studio's AMA on r/NintendoSwitch. 1 July 2023.] +Jay Baylis' favourite monster catching game is {{ cite "Pokémon Ruby/Sapphire" }}.^[Jay Baylis' (u/SamuriFerret) [comment](https://www.reddit.com/r/NintendoSwitch/comments/14nvsiu/ama_we_are_bytten_studio_the_developers_of/jq9qo03/). Bytten Studio's AMA on r/NintendoSwitch. 1 July 2023.] -Tom Coxon's favourite monster catching game is {% cite "Siralim Ultimate" %}.^[Tom Coxon's (u/tcoxon) [comment](https://www.reddit.com/r/NintendoSwitch/comments/14nvsiu/ama_we_are_bytten_studio_the_developers_of/jq9qicf/). Bytten Studio's AMA on r/NintendoSwitch. 1 July 2023.] +Tom Coxon's favourite monster catching game is {{ cite "Siralim Ultimate" }}.^[Tom Coxon's (u/tcoxon) [comment](https://www.reddit.com/r/NintendoSwitch/comments/14nvsiu/ama_we_are_bytten_studio_the_developers_of/jq9qicf/). Bytten Studio's AMA on r/NintendoSwitch. 1 July 2023.] ## Frequently Asked Topics -This section compiles topics that do not fit into other sections of this page, but are commonly asked about by {% cite "Cassette Beasts" %} players that have been answered officially by Bytten Studio. +This section compiles topics that do not fit into other sections of this page, but are commonly asked about by {{ cite "Cassette Beasts" }} players that have been answered officially by Bytten Studio. -### {% cite "Cassette Beasts" %} not available on PlayStation +### {{ cite "Cassette Beasts" }} not available on PlayStation -Jay Baylis had addressed the subject of {% cite "Cassette Beasts" %} not being available on PlayStation in a [thread on the official {% cite "Cassette Beasts" %} Subreddit](https://discord.com/channels/@me/1151846241588752474/1238016445498134548): +Jay Baylis had addressed the subject of {{ cite "Cassette Beasts" }} not being available on PlayStation in a [thread on the official {{ cite "Cassette Beasts" }} Subreddit](https://discord.com/channels/@me/1151846241588752474/1238016445498134548): > Releasing a game on any platform is a huge undertaking and lots of choices have to be made. Originally we focused on Cassette Beasts as a game for PC and Switch as we didn't think we'd have the resources to port to anything beyond that - however, getting the opportunity for Cassette Beasts to be a part of the Xbox Game Pass service meant we would also have to port the game to Xbox, of course. > -> Furthermore, Godot 3 (the game engine Cassette Beasts is made in) is not easy to port, and cannot be done "out the box" - it requires an external partnership to do so (unlike engines like Unity and Unreal). Only a handful of Godot games had been ported to Switch before Cassette Beasts and they were all 2D games. **{% cite "Cassette Beasts" %} is the first game developed from the ground up as a 3D Godot game to ever be ported to console**. This has been a huge challenge for both us and, more importantly, the porting team we've worked with! What's more, every update and DLC made takes longer to release with every platform you add. +> Furthermore, Godot 3 (the game engine Cassette Beasts is made in) is not easy to port, and cannot be done "out the box" - it requires an external partnership to do so (unlike engines like Unity and Unreal). Only a handful of Godot games had been ported to Switch before Cassette Beasts and they were all 2D games. **{{ cite "Cassette Beasts" }} is the first game developed from the ground up as a 3D Godot game to ever be ported to console**. This has been a huge challenge for both us and, more importantly, the porting team we've worked with! What's more, every update and DLC made takes longer to release with every platform you add. > > This doesn't mean that porting to Playstation won't/cannot *ever* happen, but we wouldn't promise anything unless we knew for sure. Game development is a series of trade-offs, and decisions like this aren't really made down to personal preference for platforms - personally, I mostly play games on PS5 at the moment. -[^cb-steam-blog-20230228]: ["Cassette Beasts Blog #13 - You asked, we answered!"](https://store.steampowered.com/news/app/1321440/view/3669908058337516561). {% cite "Cassette Beasts" %} Steam blog. 28 February 2023. +[^cb-steam-blog-20230228]: ["Cassette Beasts Blog #13 - You asked, we answered!"](https://store.steampowered.com/news/app/1321440/view/3669908058337516561). {{ cite "Cassette Beasts" }} Steam blog. 28 February 2023. [^bytten-ama-july-2023-archangels]: Tom Coxon's (u/tcoxon) [comment](https://www.reddit.com/r/NintendoSwitch/comments/14nvsiu/ama_we_are_bytten_studio_the_developers_of/jq9v6q5/). Bytten Studio's AMA on r/NintendoSwitch. 1 July 2023. diff --git a/src/shrines/cassettebeasts/featured.md b/src/shrines/cassettebeasts/featured.md index c14a2fc3..4a891900 100644 --- a/src/shrines/cassettebeasts/featured.md +++ b/src/shrines/cassettebeasts/featured.md @@ -12,15 +12,15 @@ eleventyNavigation: order: 3 --- -Here is a collection of reviews, articles and commentary videos from other people about {% cite "Cassette Beasts" %}. If you need more convincing than my words about why you should play {% cite "Cassette Beasts" %}, check these links out. 😎 +Here is a collection of reviews, articles and commentary videos from other people about {{ cite "Cassette Beasts" }}. If you need more convincing than my words about why you should play {{ cite "Cassette Beasts" }}, check these links out. 😎 ## Reviews * [Cassette Beasts Review](https://techraptor.net/gaming/reviews/cassette-beasts-review) by Brittany Alva at TechRaptor (26 April 2023) * [Review: Cassette Beasts](https://hardcoregamer.com/reviews/review-cassette-beasts/439840/) by Jeremy Peeples at Hardcore Gamer (26 April 2023) -* [{% cite "Cassette Beasts" %} Review: Where {% cite "Pokémon" %}, {% cite "Persona" %} and {% cite "Breath of the Wild" %} Collide](https://www.heypoorplayer.com/2023/04/26/cassette-beasts-review-pc/) by Josh Speer at Hey Poor Player (26 April 2023) +* [{{ cite "Cassette Beasts" }} Review: Where {{ cite "Pokémon" }}, {{ cite "Persona" }} and {{ cite "Breath of the Wild" }} Collide](https://www.heypoorplayer.com/2023/04/26/cassette-beasts-review-pc/) by Josh Speer at Hey Poor Player (26 April 2023) * [Cassette Beasts review: dropping the mic on the Pokémon-like](https://www.rockpapershotgun.com/cassette-beasts-review) by Katharine Castle at Rock Paper Shotgun (26 April 2023) -* [{% cite "Cassette Beasts" %} Review: Where {% cite "Pokémon" %}, {% cite "Persona" %} and {% cite "Breath of the Wild" %} Collide](https://ladiesgamers.com/cassette-beasts-review/) by Lottie Childs at LadiesGamers (26 April 2023) +* [{{ cite "Cassette Beasts" }} Review: Where {{ cite "Pokémon" }}, {{ cite "Persona" }} and {{ cite "Breath of the Wild" }} Collide](https://ladiesgamers.com/cassette-beasts-review/) by Lottie Childs at LadiesGamers (26 April 2023) * [Cassette Beasts review](https://www.godisageek.com/reviews/cassette-beasts-review/) by Lyle Carr at GodisaGeek (26 April 2023) * [Cassette Beasts Review](https://www.thesixthaxis.com/2023/04/26/cassette-beasts-review/) by Nic Bunce at TheSixthAxis (26 April 2023) * [Cassette Beasts Review in 3 Minutes – An Excellent, Imaginative Monster-Catcher Game](https://www.escapistmagazine.com/cassette-beasts-review-in-3-minutes/) by Amy Campbell at The Escapist (27 April 2023) diff --git a/src/shrines/cassettebeasts/gamelog.md b/src/shrines/cassettebeasts/gamelog.md index 9cd3376e..f6b2b6d7 100644 --- a/src/shrines/cassettebeasts/gamelog.md +++ b/src/shrines/cassettebeasts/gamelog.md @@ -12,7 +12,7 @@ eleventyNavigation: order: 2 --- -{% set universeAssetBase = '/assets/shrines/cassettebeasts/gamelog/' %} +{{ set universeAssetBase = '/assets/shrines/cassettebeasts/gamelog/' }} ## Character Profile: Kristine diff --git a/src/shrines/cassettebeasts/resources.md b/src/shrines/cassettebeasts/resources.md index aaa66625..9caeb6eb 100644 --- a/src/shrines/cassettebeasts/resources.md +++ b/src/shrines/cassettebeasts/resources.md @@ -15,7 +15,7 @@ eleventyNavigation: ## Discussions From 0738b77196537c61ce1166beb38bee8551724f5c Mon Sep 17 00:00:00 2001 From: Leilukin Date: Sun, 4 May 2025 23:09:04 +0800 Subject: [PATCH 50/59] Fix footer --- src/_includes/layouts/asummersend.vto | 2 ++ src/_includes/layouts/cassettebeasts.vto | 2 ++ src/_includes/layouts/main.vto | 2 ++ src/_includes/layouts/pokemonoras.vto | 2 ++ src/_includes/layouts/starwarskotor.vto | 2 ++ src/_includes/partials/footer.vto | 2 +- 6 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/_includes/layouts/asummersend.vto b/src/_includes/layouts/asummersend.vto index adaa345d..8a3edde7 100644 --- a/src/_includes/layouts/asummersend.vto +++ b/src/_includes/layouts/asummersend.vto @@ -80,5 +80,7 @@ function getTodayEvent() { {{ /layout }} {{ layout "partials/footer.vto" }} +{{ set footerContent }}

                Made with ♥ by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 16 February 2023

                +{{ /set }} {{ /layout }} diff --git a/src/_includes/layouts/cassettebeasts.vto b/src/_includes/layouts/cassettebeasts.vto index 27b515f5..b8053397 100644 --- a/src/_includes/layouts/cassettebeasts.vto +++ b/src/_includes/layouts/cassettebeasts.vto @@ -78,5 +78,7 @@ function getTodayEvent() { {{ /layout }} {{ layout "partials/footer.vto" }} +{{ set footerContent }}

                Made with ♥ by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 3 August 2023

                +{{ /set }} {{ /layout }} diff --git a/src/_includes/layouts/main.vto b/src/_includes/layouts/main.vto index 166ab08d..ae69f535 100644 --- a/src/_includes/layouts/main.vto +++ b/src/_includes/layouts/main.vto @@ -177,5 +177,7 @@ function getTodayEvent() { >{{ statement.data.title }}
              • {{ /for }}
              +{{ set footerContent }}

              Made with ♥ by {{ sitemeta.siteAuthor.name }} since 11 September 2022

              +{{ /set }} {{ /layout }} diff --git a/src/_includes/layouts/pokemonoras.vto b/src/_includes/layouts/pokemonoras.vto index 28ba4896..4144bfff 100644 --- a/src/_includes/layouts/pokemonoras.vto +++ b/src/_includes/layouts/pokemonoras.vto @@ -68,5 +68,7 @@ function getTodayEvent() { {{ /layout }} {{ layout "partials/footer.vto" }} +{{ set footerContent }}

              Made with ♥ by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 21 November 2024

              +{{ /set }} {{ /layout }} diff --git a/src/_includes/layouts/starwarskotor.vto b/src/_includes/layouts/starwarskotor.vto index 549a416a..ae4ba298 100644 --- a/src/_includes/layouts/starwarskotor.vto +++ b/src/_includes/layouts/starwarskotor.vto @@ -75,5 +75,7 @@ function getTodayEvent() { {{ /layout }} {{ layout "partials/footer.vto" }} +{{ set footerContent }}

              Made with ♥ and the Force by {{ sitemeta.siteAuthor.name }} • Shrine Launched: 17 February 2023

              +{{ /set }} {{ /layout }} diff --git a/src/_includes/partials/footer.vto b/src/_includes/partials/footer.vto index 689e8cc7..c87a9312 100644 --- a/src/_includes/partials/footer.vto +++ b/src/_includes/partials/footer.vto @@ -4,7 +4,7 @@ Contact me by email (plain text email encouraged)

              -{{ content }} +{{ footerContent }} {{ if tags && tags.includes("shrine pages") }}
            • Site Map
            • {{ for link of collections["footer links"] }}
            • {{ link.data.title }}
            • {{ /for }} {{ for statement of collections.statements }}
            • {{ statement.data.title }}
            • {{ /for }} diff --git a/src/_includes/layouts/pokemonoras.vto b/src/_includes/layouts/pokemonoras.vto index 4144bfff..b0891625 100644 --- a/src/_includes/layouts/pokemonoras.vto +++ b/src/_includes/layouts/pokemonoras.vto @@ -1,5 +1,5 @@ --- -layout: layouts/content +layout: layouts/base sectionName: Pokémon Omega Ruby and Alpha Sapphire Shrine --- {{- css }}{{ include "../../assets/css/pokemonoras.css" }}{{- /css }} @@ -50,7 +50,7 @@ function getTodayEvent() { {{ set navPages = collections.all |> eleventyNavigation("ORAS Shrine") }} {{ for entry of navPages }}
            • - {{ entry.title }} + {{ entry.title }}
            • {{ /for }} {{ /set }} diff --git a/src/_includes/layouts/slashpage.vto b/src/_includes/layouts/slashpage.vto index 1a2d2b0e..eabc158c 100644 --- a/src/_includes/layouts/slashpage.vto +++ b/src/_includes/layouts/slashpage.vto @@ -1,5 +1,5 @@ --- -layout: layouts/content +layout: layouts/base --- {{ content }} diff --git a/src/_includes/layouts/starwarskotor.vto b/src/_includes/layouts/starwarskotor.vto index ae4ba298..c5a0bdbc 100644 --- a/src/_includes/layouts/starwarskotor.vto +++ b/src/_includes/layouts/starwarskotor.vto @@ -1,5 +1,5 @@ --- -layout: layouts/content +layout: layouts/base sectionName: "Star Wars: Knights of the Old Republic Shrine" --- {{- css }}{{ include "../../assets/css/starwarskotor.css" }}{{- /css }} @@ -56,7 +56,7 @@ function getTodayEvent() { {{ set navPages = collections.all |> eleventyNavigation("KotOR Shrine") }} {{ for entry of navPages }}
            • - {{ entry.title }} + {{ entry.title }}
            • {{ /for }} {{ /set }} diff --git a/src/_includes/partials/changelogs.vto b/src/_includes/partials/changelogs.vto index fb935f2c..cc9d33fc 100644 --- a/src/_includes/partials/changelogs.vto +++ b/src/_includes/partials/changelogs.vto @@ -1,5 +1,5 @@ --- -layout: layouts/content +layout: layouts/base articleElement: true --- @@ -9,13 +9,13 @@ articleElement: true

              Changelog Archive: