From bf52bafd9a0227b5b1c4d10d46b28591786ba543 Mon Sep 17 00:00:00 2001 From: iisaev Date: Thu, 29 Oct 2026 09:25:58 +0100 Subject: [PATCH] Add mod documentation in seven languages --- docs/assets/after-use.jpg | Bin 0 -> 28092 bytes docs/assets/use-mushroom.jpg | Bin 0 -> 44700 bytes docs/en.md | 73 +++++++++++++++++++++++++++++++++++ docs/es.md | 73 +++++++++++++++++++++++++++++++++++ docs/ja.md | 73 +++++++++++++++++++++++++++++++++++ docs/ko.md | 73 +++++++++++++++++++++++++++++++++++ docs/ru.md | 73 +++++++++++++++++++++++++++++++++++ docs/vi.md | 73 +++++++++++++++++++++++++++++++++++ docs/zh.md | 73 +++++++++++++++++++++++++++++++++++ locale/en.properties | 2 +- locale/es.properties | 2 +- locale/ja.properties | 2 +- locale/ko.properties | 2 +- locale/ru.properties | 2 +- locale/vi.properties | 2 +- locale/zh.properties | 2 +- manifest.json | 2 +- 17 files changed, 519 insertions(+), 8 deletions(-) create mode 100644 docs/assets/after-use.jpg create mode 100644 docs/assets/use-mushroom.jpg create mode 100644 docs/en.md create mode 100644 docs/es.md create mode 100644 docs/ja.md create mode 100644 docs/ko.md create mode 100644 docs/ru.md create mode 100644 docs/vi.md create mode 100644 docs/zh.md diff --git a/docs/assets/after-use.jpg b/docs/assets/after-use.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e047efc47d8c0105cca8a87bee88b0cdc766572 GIT binary patch literal 28092 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

  • 4e?^|$LFVakEebZT7onhr3VS{^9-c<_2dY{(krw2>XIg|3v6}R~~8Jv2c z#Y^$JYS|^tj@=3q2U8Zkg%xEpYH&KGQgOZGW^q8*MZqolNiu!1b=3*2I6vPtM44lm z>C}e-^9XZCW#^lYtW7S;tzb{0w#Dg-=LgXlFO_4%Ia2NdfW#HtKK829_B6EqQ0oQt6QFm+2{eMvPpv)5u}m{sjAxtU4TLyjkw+ z66XoZdyPXD9kV!#xv6L@l3W0nr_qO1DYeL%ca46p`PhQd;tq807<*$v%ki!ZUx3Lx2kv=h#UP1mYs6vLv_whw}H2jA4$9N_*o=LsImZbq`20j4%T$2=3Y>i{4witDls2!iQGG(GT z=vi%o+*VeudI}>b3?^I{H@$FRy9M%=yAvukLaT`uVDnmr zK@uttfVSqzOe~+6Tlt#BoZ^fpvpuI7EEN{vskv7}>>AChf+zeGr32a^i(Bbg+i=N-2LLq{^XHeoN*`AooP22`GUC$o+{Z!i-Bn!!jStaa(pv+ELTdC%a6xF zENrBFY!S5IfWh1Ge9UeR7{(nhiqa75^HxR&exVrs%uHtBx!*viMu|)fa0*b zUCyhhsZ8kh5j6waOMd_ejC`ntW@elBGC%^6nZKly0O<+9`|<11ILP9wKgS16n1$$>*7S^k7X2z)}y zk9qd&50#)!aW=5Z&sy@E2qw@P+|jr*9U2ta*nftUeC+;wdW`6O5D{4h8bQ=C%$RvVkaGBM`8P%T<@!&5?tEF6qJ^|@ZCw0Y~^{3Bs0z883U?T^gNxS zaPA|P-$lxBt-hj%24xcNm?*Mv{gVF3GA!EO_d>0ltOo#cP$=N9FB0zlQpsO~;jj7e z*EIOQaZQZIl=}8u&j$PHq8Q-=084pd`E)JyVzfDC?+FlDWV)NE{w;uVlmZuBE}H? zo|dA=AerqLg{6#iS&)GPWgA&S&t? z`yg;aNa;9qX~JlioNS6^ef0bRP;q@#H@KVYh}T<9^5{9be7G%5-pYF7&_ol)?%b2W zB5Q%+5H9&wP*p6ll?q>KIy#;XOTHn;JR|)G} ztN9sS%{$jxg9gv%D~}ZQgwWA6I-Fi3m#IyV68rpt#Kz5`7UFx+WznHzTWA!h^Z_s} z3AOF?9{}C^%g_gx%)@qZ0^RsUlLh_&WxE0|<;weQazC$8nMu>yDYuZ`kYlWCCK*j8 z(@8fh#P}5kam@h;Nu-|EAds3A_@q1cQZ>%vrVfM(T{q%D?n}VR@C6Ydt@`(CHBA=M znpz~dc4!f^EgQ)N!-h=!uE}y}bV%Ecs=F5iQ`r~dXN4zM2paoU3|jN zb^C=Uxj0Id!&AN%ia>yX{RJk)B{V21&OPd3)HR(#F~tQ8>&cubtPrf8V15nVJS~tM zI%Q3EvqI=_fD5RouWCCIpDX0I+c^h(4To?Y{km14(btg0O?O7&>w8Gq;seuc=@t(z z4lXvVgXB{y_m}+QSTJD_`<^b4Aoy$FlL;Ir`)X^xHZazcQa~tf)Lx5$HV-^_CFOP{c{71R3|X^We@#q z9&hu>d)Dk@p1Q%lb|69^(GG&K;vYMm%H`)^DGibQP>d~jWz>Xw@6@BzZN*>Q@sYp! z=ARLWp4{@@yV!3lR#fx8iD*nORTIj?G~o;wAP_C$`3bg$A|3!VtWdwX(Ff2@XBMy7 z9I3{fbfKjP{G_*@YyLc#q+Ntqz&F<6^*~)dbL>z%-zy6Q=6Ttc7NSQr5=9*4j3W*F zA7n&Nn1XZffUnxS4VjO9%Zuj0_S#;Ahb88oaVF9WtuwG^ux|t2Xwk|t%WlNR`0RCM zDeCoWWYymd1v8$BETV}Xltam`Z0Mkse756^+t&|(5tQ~+FjLqakRx1n&2gQiOP!mxQh&Xxa$g17fnOcI!;^&IeU>DR z-X}e(&H3dfF32|Z2FAk~O2SbA1-?>|ru9M)JcLFEe!WfcYpXgRReH%=|AW4eT1{byLNV(N%pjJ?Z9+q@M^!S4%=p3~SDiD0h1Aw%^ z?akKvG@I&Ck1!dVew$koK%hzBqJ~g{ZHgu3W8~f%C*i&9ac`UBlw0kFvpddA%c@lK zPi^*G6ZI^Db+)giXK`iU^$=P2cIM{vEGJgqiALu`Lu)eY!67baE5bo3VT+Oeuic{b zkvOcpm9l4hzv^2%%Pjh#c}=&7wvyK1&5pG~R3-{o%gr*$zlPAkX-LXp zzbjmupS{T%pHLiAFoYsG=tv7l4+YNfiH9!=9o?{tzyZMdt%R7;4Ej zA%I8w+IG@n_oS4Hj3C2d5HF}-)Ena@<41LeP*e9GD#@ewKiHh`SRC-;lZvbkqa9g-B4;IW} z4>-xP5BG9M=^i}*XcM3hy|gkF5}Fbls>oxYwH1uNcr*)HO0-^WtY9}VozEYN| zo;vMiPa$9^qo(H|Kpu?t`--~F-E4fzxOe5CV>#|IELVBb2uZrnvt9LMwv)B&Bf{sc zN7=|M%vWsl5Yj?fDDsZH(kksQd4dg#Bv7c_X zOho~&bt_FDHnDrFK?#=lNqCi4LFargrec+_ZO^D;2ax@bk@_~=(`sQh>kwMPfT{0v z**YkQ?_P{HkQf&$2oZa`*ZE8it)qMdaj&VCCb#&JB+k}>`H!c@FD1rAs29B@1LpOc zn(HHZdEBuj1tlr)Wxk@7)H<2lCv0_#={^8pn^?dYtJ{GGStkS?sRRppL$6}>j)m%I z-RFG24(Pp$k#4giL3$1Qy!6yjWil%Y35+LN+dyVF zEWh#Q0WG7Q2hmnoy?>WC9azov#7OxBt+F|!ViBH8n65G`ELl>!bCWqVDyE?r7Jmrc zG2GeEpKX8qtHjrx6kx)7^*fs5_*$yU@yg(Db!fsPPT3SRBp*?+4MJcW9h#AaY}3G^ z?I7&J%34-zdrYvL4|#_K)(4W{Xu`*$Z8d6V#3Lv49TaH0so$pCQ(<)FU0jo4wHh0n zr2Gm^_>CAV&w}_4)Q@}sZh6NzhNG+yCY{~H$#8cg43i+6kD)xSO*;B;>{U|3adEW> z#SF(sEec+p0vPQ!2lRU5cMkwEYu-ek3Y-kea-QxjPYQYm8d?D7{FmvBT~QJdd~obK zsLO4djeFh*@$T8Ts;cUVBIdUXdO|=V)R8i{fWGz;yV-S|PI6JOpw~)jU=!T&@_TPn z<7}{+N^|0wUSz9D!(-**1a?Yq)E<#7CtTM-g$+1gT(HJUDu(a4Az-9=Rd}SqX4@l? zMO1CnNVcZhvc>+BJXzc7I(-!Ag*v$i7{S=y^aQrU7attF>Z7^WPT;h#+eBI#q`j=< zpJR?3^AzdHKp>UWW5i)t;imGFtJR4m2C$wpXidSnD={IcK_)Tz0T5P6hAjw8Gs$=~ zZ_REMBFeM=-B4@w0T8l8IGzrkV9lyW=)Cd1oKu`ZS~~LDW`+1F#ZEV(Bsn}eL1@vl zN4{emZLliwmK$L)pRUk$wWW}{6)N%cKK%L#Pm9VereKS=PjHZ`1ATKy?uA>MP3wlY@z|p#|@&Z>7N@^m-z7c$?IXo6mm<%0 zYFp6eOQG(zR2b?>Z&;{IxZvS6rQka(iuV>?KFH&00alxhGp#7q@$A_4ly>$-^uZtt zdn{{T!IPsvA&E5>nsx$TH_u^oEih>lPkS!Z#l5h6!=9hzSqfGeWtmZt#QPihjM2gE@L*3DpBTL?zkTcboXa%hxQmDA zR6qs+y=6hUKUnQnoU>ZwB~?ivP#hZN9`Whcc1XCi*>YN(S-B zo1#wnnHbU=B|b7h>4yK^u0LUKxj%uJ2z;)ii*FAMcPD*fKAGJ0scy$hRz!lX)a;C4SJ6S*`uYyvAUsD$?#p!D z#j;)Z^eb`T!Uv0v)}Tj$^w!Nq~U4j}qSS&Quf}h;J!a6RxU1?W9{WI30V; zQpH&TIZEr|-_FuC!kFy`F=Oo#j|EPcmXQ?8lX3v@*Muy#x{$~O&oe$4%>%DN6iR0z zp6or3br}H{Op=tS-N;!{>EY8AhJ}~JTZv`*yC`I1(m*|f9-Vd6O}UyC%x674M5uhl zYV912@kvF{m=aFzr!XnEF_xxSMAGOmMNyhM*>*K9dhPv%u=NXCr^*3U$kw*+10V+H z?HO9rJ&Awl3S>0O6lCqaVHz!^%d4`h?ypedP#>zNgd_IS&fcuLHh`bDs=;X>K<3o+ zgA1+2h}()*P|i)(4f0-^-rVBM7)Q-6LwYsCpQkUd0PI=h(Jg(_z_cYEz?gp@*F?cX6?8;^^GXq#Yn4gc+BjPVuSC zE(ehGg?^qKduZ(brEk`_l`PM}jw^`VwLn;{E0HD48egEeIm?QD)@H6KhPu=J4N=(3 zT$sK`m{t6gH(GI8vTH}gyW|`(gGc8e469{xO?6_PB(e`aGegIzUWDty{1?S`83?kY z8N{~M%_ZMmX7b0?l45Ad{*4{Em)Y|Fu_2jfyAr>)NfpFN8|ju08_+$LUfkX?_kwdt zBu^mzmUozN=xIx&515-X@tuB3&r}4xrZq}lS_asps|`0nr!u;D{*&K_T!aPGx1DbI zQXVeXrqzKjXuXI0*y1@Su0+15V|{LTNAA?W*)zuM^;AscqS=yo4ymZZtHZr!k(AK zYh?K6Pn)W$gH912;~CN!pP`Z-?rA3qM>IIwR!O{_iSgW?YBZ9q^*Hw@^phtfEv0ho zJuviPRySL2w4qQ4cbT9`k2^1~s;)fWxhpvp(Fcbe53W`ub?DmU_iW0~1YRelZ;-A4 zU})V-NY``u5z;P7YFyEP6qXw096~iHPawFaaHdO5y5O8uMj@7U@pt}sD^?~^6uWH) z`WEy;)75cXDjiEn?lF+2v$GV&p0sy1c)^W5TMp`srO42NnC(t{R5zv zZW6T50*&;g=M;ucgRW`oO6~&-9{}g-7aU6>1!t1dB^h^-a-j?*%A5ZkDcyLWDYgk! zC`XXO3F_Ec9vCaR>AVS*eE_T<8ePp_Cz?t|2;RSLJ_PNzm1vOtOiG&=u1eyfH$J-( z&I`F!yA-JoI%^|v;{|>yo?4?xdH2-u-ez4vyvv7Ey=J^P&GJ=sbh^iUE|a5?yZ2+r z;OOg>pegOx*Do10+N$9;U=D3IL37l7?MnCALK-&NOmsCVymQI06*9w7U@Rf6jsuwA}gft`RU&vL?5adW;QUWV(u$O z>E}Ut-ktSwRE;mMKxQh1JX!EGqr!;1EpjN4GWP4&p6or7FI%X)th4N1rxFS%FZT1%Us zAgb!9uJ{+@;|SU+=s+zr{vD(J{r|_1*sr?Q#O93yR|jyh3)hIBR7tkP{E&M2oZh^& z-7eCuJ8sO%RMVIDbQu*#a*3p~5|H-eZ{0FfdVwx5%~w8rt~d8M+UUQHVG3}}?W8MM=tA7}q3?0jZ?oRO|q3PtYk@NzP3 zs&9n*Dl1a!>9?a`x5+l#)j2d_+UgGn5FO?xx5TjBv;|*BdHZHCEY*}9cviDMwixII?h^(uvz1?tNd4GH9L~-B9Bfyrtlfh zS+Icxo=D1LFGg{y9d@L1x%DmsCM%K!C8|fgjaId(n?JFa*UG=Aqj}8ZOR!0bM>_rG zw2*n*O5#jd#)7X$VlnTUv;suRRnv-NJxE2-e(6R8CBp#wAT;3b4bCNcOO@5JWZ#4w z(Qd1QC}Xdro=Q5J`3E#W5B2V~ZEEW?FMO98Zk*?H{5-@)fMKrd9`*Idv?SO5Yw`SJ z@#KTts4V1Ad@7g>j~uOWF)0+l(gan|AC{*2d>qG-3dBpjPZPbO`awIoIR{xP-S|L~6?B zre4rA5ki{ptuqv3q~pa;*bIJQh6?Leh8N-_fN&)*;X&iqSU% zRb3n|S6oK%hJeg(J1fJ5JJ7K7F9!$AAOW@WmFljYhWMg<+e)mf8D#kaF&0*4XP;g+ zbCbD{`v1P5{$=!TSw*0im)B2lBQi6yWYyNyL>mVos+afdJLG?LlBESOvau9%-HUsX zfN3l10;EDMpBO}uy8VEZaeIRxd`o%6eH>iObvoc5@5o>oLGl z5&S!;iUt_CZk-{4ICY%(sT-NzU zqh1N*&$jZ!QjTgVNIXtqQJHciIlSMxe0k@eayPPZLn$3hfdmfp7R$7>cmX;1S zjyYd;>n6JVf)y0*-~eP24H1DMRacu4a_|26;z)VxJDYNpz!ef1@)5FtNqTZpd9YN>Nj9O4bbFvSP&&hcE z)Xn5jR>tmJZ$m@<*k(h*ewMN2YT~OJ8B_OHksL9sG|W!&0Pz(~bx}fZLEHSDDSVD) z9m}e!x){5lPF@`Y1>x4JTA8!kc2cLWur&6RPK?eXt)^{PY*z`XZ&1GSv1XimziD)q#^b?VKN z&o=J4yVav}_wkIcDHN1g4yl_7u&sTKON2#mS-$7Yi=WKy;7) zBa2N`BB_1p+Wr=9BHgWrZF&ikn-z-@9)?h#jne z-Za_emwdGiSZlXN_%j}cSM7;`DdoPq@l{$X*Bmc&Lc{G^HvNg{a|?-JLbXC)05fo3 z%B;K%08ZOOs6BKbPr*1HU7nTrqs90>rrHWjf{bj#DQ0kbX{}7bcC!5zDRCoU(7Hu1 zP0SP&FUIUDcvy|=G?mjuN2iP0aX!zK+8N3wrJ@RAuh_tm=G?~@BJP`7SD84d*kicc zEBLI6Xrc<^?uPu;V&Vf(2CUX$BYduqsSng{6`t(c2b4+B#{mNr34xo63#aIup_dFz zKrk`}LSwkCcdP;k?RJhXEW{+)mAf`ZTkK<@jIk=-qeJ-6_)d%ZGsB1&V7>3*pnBqsQ3jzaDEd{S}qFVE;k! z`A6@xCe-Ws_fxs$8K9p2Y^XXGHFQD78JurXaEO; z+allFwS_X|WB!IHBj4vdDJq_~8ahmOW72Vq4y2FjD=(-3+gxI;hxks>@X;9atsJ~w z=fcBt^N~Joe;%wTuO}~d8{*{Df;L}`GagxaE*;`B<1KkSbSv(OOA@C_LK9I`Um_B> zN{&2X9ALTbs-gA;Z^gaDb=O{JCeyf{idw*1SNW+{zKjkua!zr}q1iu?SHyb^&#uq-M!J7QiQtm^E2 zER7?j-ph2z7{jkp>2GhsPqd-QW#oMi)RP)h^qBmiREK_0Gtfg z%j@+Ixc#F2XQ)A@y*)igp*kXDdnz8hS|_kZmK!@m1S;eBXRe#MoFT9RFxBLyFzq-) zj-eZQISzPdTRb}28+ZL9w^7z|3}3~5w`YF&A1)f|AE1J>aCVi1BQyL7`YO9qc7nH*rDqmdmXwuSps?>y!Wf*VuiA zMUmK>j!f9GL$vjw>slka7w3geh#THr#a<)4%PhMgu$&$pMDWqcgA7F3X> zyZgr7ud=^DFn3D(NhE4vNIO&emsLN$i&j`#m4W)eNY>ErreLpiPp)K6sPpKZp1K~I z>Kaf_Fvss*qO5+VwP3^mBAg#OI;S4ON^{4xMZzs_>rGIBb$J8UvehnK^_Rj3EX#%H zT9gci*8rJrM`;e&fb=>^DAWk9(Z*@ht$%S+SU^}!7s}l|>)&no>VEllLG#ob4;)Az z$W|FrL6XP%noTl!=rgI;A+-_Z;8t>G@!;3+M|zYe(i|w{UXpG+%ScU64CQUfO8i}G z4R>elRy6!x$>`b5B8a+%=aTT!0O}Ew!R3%KKSlKeoe^CJPOFk3W zsQVTkj*U2ESqGbtUf1ZnnhNENSjN~8KLFlV`UomTy}Hd?d&IrukoiFg?j+^&dI?^i zn&JvHzz2|K6T8UWm3@OzBrO~9{{|Y~{l}oeHLJA(N~M~V;Nr+klkJj&zIg9rc5$La zSow?je^~$O1P6hNlNW-?YBDGIA@K>S6??J=C;d6X9jmC)rB5sIlt zx>xP*NTdy)TX)i?gzq`Tz9IC|nKRXyo8-F}H`VW;!R|Pve>ZKlsi{7L9;zOyl6)yi+;vj87_)9&Z zi{|zn4aNgNf+Dc_*p`gq*8*Oa?id!VU1WGrysB*W(tO*21?4$odZM#yub={ z-JeT5WKYI@^RT+Nn8>WX&^TL{kE3*VHR}Q=JJ$^K8`IcOfy5l?z!d}&gZJG40EcIG zX1*MIuq#+F7#M125UB|bw5V_V9~o#7m%JJttGeS~vvqG1*xfTEouE*fP$A|kUen-^ zs1H#7;KswZz~4$EG{prE7yJgFaEF9qtk4e1+DU;9C6MUN1Qlm_9XO6n< zEn2xGlIEDF`?+W<(al7n!E)^hB9gj7y*l=@-X}G05?q__jzPEA4}htRpUE^J3?3fq z9_V@n%HutI02E36l74}ho97N4{KE*)!*i+k)<0e<_j?);8v3tm{QAGVkPI|DH3x#e z_Gd?RpZhs?$@k9vvjIZ;zdT!o(QmgCR!g+gB+M z0J*4NWc5F|A?Oyyk)9ADvQDIp*0!p%OR^}~#iAkU9n6rW?g-oRe8tB8F*fj(L4UNi z2qTm+28;?#w2x|FAuqEj`2OCCu0p{ITl@1t%M3mZmB&{Yjpr}Fz@nJh7?g^MEKW#Gx$idmiF%AKd2eO6UTKbpXS0Cq+&?cg*ARAdZ`T(+0Jh&kPd5%j zDoK7xlZLRq3C!s(!Pb!^{ovs)MjX%y$Ciutsh4^__?Ab@x5b3xF&sdrq}iy3~KZCug~-~e;E$H4h?B)ykX@!@JaEq zo<7TR5SMgq4IS|*znw{(F=XV{1d4K(H+g81VotC=3BfhMa^%WC(Qls>f=`jn#c>;a3^`Ru$^^pY1 zt9ag1z2?dt08T@#x@Cxm=slFixTo?rgqnBH zF-GDidcYxJL0x2A?sty)&b(O#>nom7L-B9nL{!o4($E;Fc`&sf(+_XMFBc3g=;T0j z6m-s1oiUT0m5=h+6aDHPd&rcaK6;}(hmUg@p}U3p}4$?MNYLTSHAND3dM#A zHoD;iTMHBg;ELI*I<^Ch5PE>0fTg!+`oM^g35Z&I374iyq@4+u}os6yBus=>4V2tEIneTm^g{n@aj^634CsGa}F`3Q> zq&NATNvCBDk_Y8Pqwin612-N+&ZNe<6!hAwX=J_y%YV?-n-NPDne#ONg2X{s7&0nZ z^Cb>}#y@`U&Sk9RjuHLyIt#0hWo6~SRs5K4M=#5HVs3+$4$@NI#!*ycQdvc$O`G@V zjwQ5}oSr~8AD&cFU+Cffwn3;V7jJ-~#q%B4!PD`3slPK!O^gmzGHNC}VoykmAAm{S z57^=DvnI^hadQ~wn%U}z))*gVo{gI<{^3}V zma{$tVx)iGijt6qDv$u>-=%T7|CoZs-K)}}=TY$9DwQXX>&ZIek*qvzspmVls*j2? z-+3pEJM@S9^*MeaUW<3pHWNqJM)gJD`q7%=pteQB%$*k4Jsr%eT{d1=X%iv7wXvud zT>3nKQFCocCNrF?c+{9WT84$H-{BdpR^pw)30-Qq2&)Z*Vf@Ix_`sEK2Tpv{@xG5w#q0cA^+F(Iw`%boJ#>gmCJju5I(RABy zJD*qSOZG%_dE$S|x7+z^%Y&Zm`zLlWmY-}3+&x3<`rBbefvJ?>{3p@5@@_qcOA_gD zCbg#FW|7a92J%= zklz7=4!(5A5UUxCDEUF8?OHZ#LFlkUGQ-{ir%hZdVUvn}1kHu`|%BPCnCU$m6v{w^OXQ+TCDH@&T;C9qVR*)Z`SI1?vzY7XZtA^QdOe~Xl9Bwqqdxt+}k0|)w@mW~-MAC1Q zq2NvC<+Sc#=Vapl)82K5HMMN}&_qN5fP*p1&nkMsY*u>K?q%X5r}{yJycN; z5D*AmYLFsQq)YEr2sI$R6T;h`?;b^uo_pT??)ScT?&YuSHfttp&z@Pcerx^as>G#j zPcW6Lv@B|rUp3@M;N@56f96~H2FM)Fc3)!|B~+XQc>SFsAZ0K%S-=?7kQuY&Rp?qM z$BGaaIx*G1N93rTzpm!N0$Jt(w zzkJFv`*pbsxrFVT+7(v6aRmhNOP+i$?s`$%Sj{RG?_H_dlX4CABFk;8v{Nyvzs&`C zD!&3xu6upUkGUFl;Mf8eh*SECKOAsb|0i6-{UIp#hh@-Bs4Ny>6IN$@rit8EEwNS& z%Jm&eMF^oq)6=t2ft{G7y|L@m#2ILGW=4iS!c=4mcd}N0cRIfO{dAU$ox8gW5dIs5 z6a)(_j^1c(;f_<%wOLE|P{A%GH9|(t9u4z{fBAKh*{yoSl$f*v-+V$3+G2(1k#|61hlA6Z0{c&D zBwt&mURv&RdJU`{{Ia3oq@BVm(!-8+@B{hh9Ss;Y)mxsv8g=$rF;@_(?Io>cCgo;$ zP1CJ7B5XC}?wJV%o>2P?QK{%C#DCYx$z1UEdZn@N*rU6*;WejOueZE$v5vD!Qt-8FQuo;!Px5+E`S1oS2u$nu-jPz+FxGk-1P16r2eb-b>3 zALsR8iKMdgxn5zE5+2f<-5y?Ow$UrNnTTpF@T1wIt$wf+|1yw^g|{A)`%!|TMxVBl zEc3xu^k?#pA?@q9bt~eyp5Wo_2p7{w{k3hB^tYDO4(*%JzS93IBZ7)0y%cG#Y5 zV7|A)CDhtn1E3kfvuES7pBx$J2BgF)@J}BZe{i&g z0P4~MS>uF`ZjSAPwn`@B7^D>i`nqqGl(%SbpaFvUk<``fj23`TCE+2!CQ-q;5BktP z4aDiTl_$YQqxM1LXph3Z-Yt@TmzUW(U0D13EeYvZf0SKqGsqPGYimTP$`X6*R_w!XK6hX|7+XiOTv;3aqlNm)Oqsg^c2?7CS^ z&sxx1F!OohZJ{x16sw-VP~c-8FP@`@L$}qY9z?Nhbao+hUf5aKhhw;UnS1yHIA~+w z^Tm=Yb?)H41xlA|=J(i($HdS>sHIG6@-1!aqjTgt?zL&D`ei*K!wY#)9+m9o=hX3! z({j}zrpqlfF{-_MSpx3D@*RA{m#)xjF(Q4stFCv5O~@)!k+8>)4138@ezY6d^tBd| z;(xih(IaPLZcg?hZiJDhCG?dfkF5lknp!=cXUE$#cfQ&o(Q$Baf9#1-NnoVLL3^QyDqLOBJ`S#w7ka3%}&%fi(QX zWyU{9rEWqy+xTf{Xab5Im|yDLshs2sVKwpd&d4BOvZB%@4Xw-~Dco|xdQ<3caY8V* zZ!EHUrW~~>pQsHvu8W{{x) zZmwhf{`3-L_iAegu(>hp3An$P3-J(^%uDz*d3#AhCcP3`IQl zip+Osz*qEpAy#Zl{u;0kGI&g;t9KPrjqx6I@qkT1-E*od)+kGWU=3gugo^n7G%|iK z)?^mgv>8$b|Go8R4{JZv{C{(=Guo+5O>Rh#NHK-m3Ddv}K8m!vNH82rXPby0zb7a9 zzK+aW!`cGn#q^BDjeI~Y_@PObYL;o|?OrzKrWn;`rQqS=by9HlGdK<;tRN=>P)g752Z7mTwqn^Q-hl z6$AerV3_$MFiO^I3O*?!k+tR6sopu=p*a%ZZDPQTP9E+J#Uh)0;m_eWCpNOB%kip5 zN$2@a;7J5J8_Q>zhznY$>WePRsw|vz5@Fz(6n6V$l65nu&20E4F$~9fWH$5JV3l@r z$_}F_LPvcMW1tq0lRnlpo!ZO>*%HU-@tJ37ZW*eR3k01X(v2}DA_^)hHVhVsBT01~ z1(V(_>B@l=@yQ323+#&Lw=HlayyI#r8f`LQvbA7v64CMh%s9n3QetU1zVO0*tgn!B zJ|(8ciN_q2s9Pd-FUpf~J0hFqnx@dU&(Vf?HtWmPc_NPfp!Xoh!~&*Y1v#Xp!Rq{B zy-Ir#J!)oX{bhiqzY_q+`6HD#FAM*P!D@fFKK=pDzY=HCWqG8gyVcI!W)#&dkWNm7e1sG(|W?(k^IC%C!@4u z)wBze?QbPR9tAdL-tZaX4jqZMXi+(u3K@ z{CUb7Kk6>LE9S+xHHr^12bXA$DGn{XZ@Eb5?I!6k*)A0Uwt{-JG3*-ArtroNE_Y7V z+6CJLLrdpnkV%-iMG22~%Y6_;83>cQ?VdP@^+*8HZV|{OCqJv#g_`zNRSOiwNIO2W zFll)1bMCubl%BmW15Nm5FjV8F^!V5&?gn9=I@Szq&(s@$DZ}rD?CyOq()2z)>-c2JfQb1v;?SF34uLLAwl>ZA?70 zXde`hfGwt9`>G1Hr&6?)f3G^CuRf{a#FaW5z%X1KIV1GJL`6!TTKy0?{+>JQ2bACs z$T77CO>azf^f=no70587z5z2pkq^HTx-*pT{t{U9uBQ0Wwh!?%d*(1hOrA3+%wk(;7U+e@BKJW={PoMW&ffDOE={0EQsGG4(fStG zX|Q1LK>j9>W^kDP>L0(keZ$t3K0*hh5H~V)DPe4or8MZ#u8!iArKgdU3d6Q1F$*zXOE;4V zOYvSithE5LwYk+^!nwWi6bQZmQZ6qyW0Rg@^_%n4=4{cfZse9$jIx)lE~^blhxRoq zhcvsQ?oOvQe7xUX{$l z+E3-NQ?RM1|4bLqH@az3I^Pse12_=kp|It}Wgx}r*R^Pry76_s!x?tQr7E+tF(fZG z4pE@%?pii*a*GkCB}LNiOaaTGdFy^1EX*E)p&W)St4(*+A>``%8wTq?cIOwqSm`EP z=iCsS&jN%+tg_T)ZFEaxQy`C=WFwcLCQq7>#>H;)-6mcU8v>=K zg|L-#&BEok`fTh%Kvq5h^~i;dTFQhb?0f*Gk3y%FXx++0WLXeN4?y^eSmA>J4%5Yy za^7C zN-ff5-v=P@vH-yNx8sTaD{UswUk?Ddq=DW!RI!L$<@??qecsND+yU(JA@I(rEQK@G zJE^|+E8sVtFq_j5tzWE`J#$Jt;WeYEEa4N{=q6xt(SYm%VaVcSJ#N>QKTcOKo-(^S z5}h9~7sRrtSQJMjX>G|=PiBno9b4QYyyMSb^oR>1v|Jh_JnupKu1iO`Q$yWH^eW3+ z8;h2Dx^A3{tBl9#VOO)PKPl0SNEq^`dKb>3x=s!X23M(5TrhQ$7RT&^SUKwMD!5L? z?B3L4dH}PWy&CzsuhW7frE9$8(J=qV*Q+$3nL<&BJ{4&yW=g!I@ezb+WYbhi0B+nm~(c7GjUDIjt;N61xqk%GMiOWwTpkVZ>o?91LbGh zCG+U)qUyRR^7EWq5rYa7VwSWt$qp-%UV@TQ!DX`jx9V#O8Ig!2p}C<#8a znlJ$!e?R~-0C=S6FJMdHd-&aE`4=$G@jGb9+8MPp?muz9g&acs0PofhllM(%Sm*H$ znGmX8;y4~LLU6L&#zXk_80X%K8I8Gd$@9cK1Ri_cn+#Y#Y;6Ow=#Aw&XQXdZ4CICY zfsLa_;Q2$aRw97p5WvLm1LXI8fZOgJr0F+mjA-Yc&*iDA0)yIh&v(wO`6QNa@0PL|2OTBPDr5W zUw}+M23Q`G<~PBsRr;CqEmIu3S4diMvbEF{edOr$YI>nD zx*;o4zgdeknCA$WN2GT6ucJX{kA5XzOiKH9nDQR*0$l%@JLEs%8rwc7Qy=j<9(!#P zFqbM`B>ymV*9N%i@61-r#bcWCc3{+|#mjWs2W5Th;QGS?(%WQWA-v<&#ex z#wti#6Gxhk=fBU*7h#HEKxrKz0P32$GsEM8*VP591Ewr(uD+_0my%*%CGFcNE zc&3#B2V>5bW|_tgbiFUx1b;|TxZPEO`T&_r#WtF=6*_QkEi3H+bVYg5jfjU)bbf>f z_NG8{f5!|hPW(F|00J%l^>FqLU?KeFAkm+_^8e4*{@ET72^&b3fqT1nJ~Uc(!EB=& zuVJh6K&IjnuxC!YR8?)%feYXPAYHvRAD93uv1Bn)6b447Ff$ooP1y?MOA>CW?4^M* zyFj)VcucE61z<=$Ec^dKSK6iJyEoX_ACf69D9Z7x`(HdBa)2N`=>Q$?tB^y$;3t3q zVh(jNe+M{yzbO7ANOP$3?=lU))7`%c&K>If->=hu_AU-}eyH<`xg^-t z;240^^}iQ%|Gyj0lfT(8zF)YaDe3evjMQ%Jkbce~#%+0Pr;8_OGg}KDoieiX^sW~* zd#QJ(Jer@#!ODbt;U`f6%V zG*sT=Qmo#?l~@skaBWUt?boOZ0dg6KD%m#C;rz0|fV2M16a?K)C|d6@$S0NzII*n7 zL>YB#T9IbiWCY`w59L~2Q{yS#E)?0blI)Zx$IK`|iRo!4J(RPGan_jPv+m?A(|vyS ze1m~8T7W<-BHYtUAhgZ1ID|ypPTK1deA&k8T{!A+_$5jEtTfwOgFYMk5vQc7s!;9Mc?wR_3}r=rYNY+$bJYA zz=Uaf*{z@R5RdZ)vjn&eBu{2VmLZ8Pc_npll<+-6l&C(C4{!{X)M#6_%U?87Z8Q;~ zFUF&js|BrR&QhgBCPxMa*W~lkhAF8k$XVKmz8rrj7fp5Ky8YZo20DU@$CFBI=Ck3A z4tA55RTas_Q$x`&gOfzM1nJMd%?o;6R#E6Lgc{{Fh-tc_f`n3CVdrvnSj()=FnfYa zC;kb+{+^s#TGW zkI4}(B85R|*Z3Q`24fi?Wfc7vs0_uJ{9}yNb#Y~fU)o-~)sZ({^7buhfZs$^qta#3 zX^jLJc4{-u%fb;uJoR!9^nIA_Vh#P7 zdib?olUz=+oyUEo)v%lO7RK1x6Ldr;w{2jhV=~(LmAT6cdJXpLL^Q$=2qE^JpD`jI zvz1J2T#iXtPx6I>`tCa_mtLo87`YlO+@q~GA{~}^=SIdwj&mof!;UiTi7_sxo$uyn zy*z-XneA{?4m$si5>ZRo>A8Ij-x^FPI1td_PD|drLWWQAz}us95u5YUzCQgKmL_s- zYccM&bDW^%Yd#BZDhH8ZF+Bd4CAH}>0%$?TCObAaAS20-DReu&xozNG`ts31m10&L z9QkFhW1-upuSGx!_Uy#&2)4dO7He_zjJ+Za%&!YXxy%sNDXu?N&*m4EUcfuiJ-;fg z@5QiB>E#V61cE+kku8)7ixF#!CQ{v#W2J8?QQTT5Ui{RpSJ@5RmR_l+uNnc#UA{k z6uZ~hUNCHW0yYZXbA{x#VleREh~K5oY7tcL0^#JX_5UE0|0dg?HIMk|#uWe|2Am>p zu=Sa5vd^j*QIH(0`kQdp#QMtz8k}@cxQbMW?t#i>4hl~UICuER4s?OTH+G<#A9h91 vT>IfSb~tz(9CHtc`@g|FmX0Q+W9!nr= 2" -> :enough +action item.remove id=rpg_demo/mushroom count=2 +``` + +- `item.add` puts items into the bag (a chest, a gift, a pickup on a map); `count` defaults to 1. +- `item('id')` compares how many the player has; it works in `when`, in answer conditions, quests and map events. +- `item.remove` takes items away; it refuses when the player has fewer, so check with `item('id')` first. + +## Recipes + +Recipes (kind `recipe`) list `Input` and `Output` items with counts. This mod keeps which recipes the player knows; cooking and crafting use them. + +## If something goes wrong + +1. **An item shows its id instead of a name.** Add its `Name` key to the mod's `locale` files. +2. **No action button.** The item needs `Used` or `TargetUsed` in `ItemType` and an `ItemAction`. +3. **Using does nothing and the item stays.** The action refused: for healing, the target is at full health or has fallen. +4. **`item.add` adds nothing.** The id is unknown; check the `Id` in the item file. diff --git a/docs/es.md b/docs/es.md new file mode 100644 index 0000000..543340a --- /dev/null +++ b/docs/es.md @@ -0,0 +1,73 @@ +# Items Base — objetos, el inventario y su uso + +Items Base da a un juego objetos y una bolsa donde guardarlos. Define qué es un objeto (nombre, imagen, precio, tipo y qué ocurre al usarlo), muestra el panel **Inventario**, guarda lo que lleva el jugador y deja que los escenarios den, quiten y comprueben objetos. El comercio, la cocina, la fabricación, el equipo y los mapas RPG se apoyan en él. + +## El panel Inventario + +Se abre con el icono de la bolsa en la barra de herramientas. Haz clic en un objeto de la izquierda para ver sus detalles a la derecha. + +![Usar una seta del bosque en RPG Plus: la seta (×2) seleccionada en la cuadrícula, sus detalles a la derecha — distintivos Dirigido y Comida, la descripción «Restaura 5 de salud», la acción action/heal con la propiedad heal 5 — y, tras Comer, la lista de objetivos con el Héroe a 10/24 de salud.](assets/use-mushroom.jpg) + +- **Pestañas** arriba filtran por tipo (Comida, Recursos, Recetas, Misiones); el campo de búsqueda y la lista de orden reducen la cuadrícula. +- **Detalles** muestran el nombre, los distintivos de tipo, el precio, la descripción, el tamaño de la pila, el id y las propiedades propias del objeto. +- **El botón de acción** lo nombra el propio objeto: **Usar**, **Comer** para la comida, **Aplicar a objetivo**, **Aprender receta**, o un verbo que el objeto define (la seta dice **Comer** por su `verb`). +- **Los objetos dirigidos** preguntan sobre quién usarlos: elige a un miembro del grupo o **Cancelar**. +- **Tirar** desecha una pila tras una confirmación; los objetos clave no se pueden tirar. +- En combate, cada uso o tirada cuesta al personaje activo un punto de acción; fuera de combate es gratis. + +![Tras elegir al Héroe: la pila baja a ×1 y el panel avisa «Aplicado: Seta del bosque → Héroe».](assets/after-use.jpg) + +Si una acción no puede hacerse — por ejemplo, el objetivo ya tiene la salud llena —, el objeto no se gasta y el panel explica por qué. + +## Una definición de objeto + +Los objetos son archivos JSON de tipo `item` en la carpeta `items/` de un mod, con la imagen al lado. Esta es la seta de las imágenes de arriba (de RPG Demo): + +```json +{ + "Kind": "item", + "Items": [ + { + "Id": "rpg_demo/mushroom", + "Name": "rpg_demo/item/mushroom/name", + "Description": "rpg_demo/item/mushroom/desc", + "Cost": 2, + "Sprite": "rpg_demo/forest_mushroom", + "ItemType": "Food,TargetUsed", + "ItemAction": "action/heal", + "heal": 5, + "verb": "ui/inventory/verb_eat" + } + ] +} +``` + +- `Name`, `Description` — claves de traducción, mostradas en los detalles. +- `Cost` — el precio, que usan las tiendas. +- `Sprite` — la imagen `items/rpg_demo/forest_mushroom.png`. +- `ItemType` — uno o más tipos, separados por comas: `Food`, `Resource`, `Quest`, `Recipe`, `Used` (se usa sin objetivo), `TargetUsed` (se usa sobre un miembro del grupo), `CantDrop`. +- `ItemAction` — qué hace al usarse. `action/heal` restaura salud según el valor `heal` del objeto, sin pasar del máximo y nunca sobre un caído. Otros mods añaden acciones, por ejemplo el `action/equip` de equipment. +- Cualquier otra clave (`heal`, `verb`) es una propiedad del objeto: las acciones la leen y los detalles la enumeran. `verb` nombra el botón de acción. + +## Objetos en escenarios + +```scenario +action item.add id=rpg_demo/mushroom count=2 +when "item('rpg_demo/mushroom') >= 2" -> :enough +action item.remove id=rpg_demo/mushroom count=2 +``` + +- `item.add` mete objetos en la bolsa (un cofre, un regalo, una recogida en el mapa); `count` vale 1 por defecto. +- `item('id')` compara cuántos lleva el jugador; funciona en `when`, en condiciones de respuesta, en misiones y en eventos de mapa. +- `item.remove` quita objetos; se niega si el jugador tiene menos, así que comprueba antes con `item('id')`. + +## Recetas + +Las recetas (tipo `recipe`) enumeran objetos de `Input` y `Output` con cantidades. Este mod recuerda qué recetas conoce el jugador; la cocina y la fabricación las usan. + +## Si algo falla + +1. **Un objeto muestra su id en vez de un nombre.** Añade su clave `Name` a los archivos `locale` del mod. +2. **No hay botón de acción.** El objeto necesita `Used` o `TargetUsed` en `ItemType` y un `ItemAction`. +3. **Usar no hace nada y el objeto se queda.** La acción se negó: al curar, el objetivo está con la salud llena o ha caído. +4. **`item.add` no añade nada.** El id es desconocido; comprueba el `Id` en el archivo del objeto. diff --git a/docs/ja.md b/docs/ja.md new file mode 100644 index 0000000..2b77170 --- /dev/null +++ b/docs/ja.md @@ -0,0 +1,73 @@ +# Items Base — アイテム、インベントリ、使い方 + +Items Base は、ゲームにアイテムと、それを入れるバッグを与えます。アイテムとは何か(名前・画像・価格・種類、そして使ったときに何が起きるか)を定義し、**インベントリ**パネルを表示し、プレイヤーの所持品をセーブし、シナリオがアイテムを渡したり奪ったり確かめたりできるようにします。交易、料理、クラフト、装備、RPG マップはすべてこの上に成り立っています。 + +## インベントリパネル + +ツールバーのバッグ・アイコンで開きます。左の一覧でアイテムをクリックすると、右に詳しい情報が出ます。 + +![RPG Plus で森のキノコを使う場面: 格子で選ばれたキノコ (×2)、右側の詳細 — 「対象指定」と「食料」のバッジ、説明「体力を 5 回復」、heal 5 のプロパティを持つ action/heal — そして「食べる」の後、対象一覧には 10/24 の体力の主人公。](assets/use-mushroom.jpg) + +- 上部の**タブ**は種類で絞り込みます(食料・素材・レシピ・クエスト)。検索欄と並び替えで格子をさらに狭められます。 +- **詳細**には名前、種類のバッジ、価格、説明、スタック数、id、そしてアイテム自身のプロパティが出ます。 +- **アクションボタン**の名前はアイテムが決めます。**使う**、食料なら**食べる**、**対象に使う**、**レシピを覚える**、あるいはアイテムが定義した動詞(キノコは `verb` のおかげで**食べる**と表示)。 +- **対象指定アイテム**は、誰に使うか尋ねてきます。パーティのメンバーを選ぶか**キャンセル**します。 +- **捨てる**は確認のうえスタックを捨てます。大事なアイテムは捨てられません。 +- 戦闘中は、使うのも捨てるのも行動中のキャラクターのアクションポイントを 1 消費します。戦闘外は無料です。 + +![主人公を選んだ後: スタックは ×1 に減り、パネルは「使用しました: 森のキノコ → 主人公」と伝えます。](assets/after-use.jpg) + +アクションができないとき — たとえば対象の体力がすでに満タン — には、アイテムは消費されず、パネルが理由を伝えます。 + +## アイテムの定義 + +アイテムは、mod の `items/` フォルダーに入る kind `item` の JSON ファイルで、画像はそのそばに置きます。こちらは上の画像のキノコ(RPG Demo のもの)です。 + +```json +{ + "Kind": "item", + "Items": [ + { + "Id": "rpg_demo/mushroom", + "Name": "rpg_demo/item/mushroom/name", + "Description": "rpg_demo/item/mushroom/desc", + "Cost": 2, + "Sprite": "rpg_demo/forest_mushroom", + "ItemType": "Food,TargetUsed", + "ItemAction": "action/heal", + "heal": 5, + "verb": "ui/inventory/verb_eat" + } + ] +} +``` + +- `Name`、`Description` — 翻訳キー。詳細に表示されます。 +- `Cost` — 価格。店で使われます。 +- `Sprite` — 画像 `items/rpg_demo/forest_mushroom.png`。 +- `ItemType` — 一つ以上の種類をカンマで並べます。`Food`、`Resource`、`Quest`、`Recipe`、`Used`(対象なしで使う)、`TargetUsed`(パーティのメンバーに使う)、`CantDrop`。 +- `ItemAction` — 使ったときに何が起きるか。`action/heal` はアイテムの `heal` の値だけ体力を回復します。最大値を超えず、倒れたキャラクターには決して使いません。ほかの mod もアクションを追加します。たとえば equipment の `action/equip`。 +- その他のキー(`heal`、`verb`)はアイテムのプロパティです。アクションが読み、詳細にも並びます。`verb` がアクションボタンの名前になります。 + +## シナリオの中のアイテム + +```scenario +action item.add id=rpg_demo/mushroom count=2 +when "item('rpg_demo/mushroom') >= 2" -> :enough +action item.remove id=rpg_demo/mushroom count=2 +``` + +- `item.add` はアイテムをバッグへ入れます(宝箱、贈り物、マップの拾い物)。`count` の既定値は 1 です。 +- `item('id')` はプレイヤーの所持数を比べます。`when`、選択肢の条件、クエスト、マップイベントで使えます。 +- `item.remove` はアイテムを奪います。足りなければ拒否するので、先に `item('id')` で確かめてください。 + +## レシピ + +レシピ(kind `recipe`)は `Input` と `Output` のアイテムと数を並べます。プレイヤーがどのレシピを覚えているかはこの mod が保持し、料理とクラフトが使います。 + +## うまく動かないとき + +1. **アイテムが名前ではなく id を表示する。** `Name` のキーを mod の `locale` ファイルに追加してください。 +2. **アクションボタンがない。** アイテムには `ItemType` の `Used` か `TargetUsed` と、`ItemAction` が必要です。 +3. **使っても何も起きず、アイテムが残る。** アクションが拒否しました。回復なら対象の体力が満タンか、倒れています。 +4. **`item.add` が何も足さない。** id が未知です。アイテムファイルの `Id` を確かめてください。 diff --git a/docs/ko.md b/docs/ko.md new file mode 100644 index 0000000..f4ad265 --- /dev/null +++ b/docs/ko.md @@ -0,0 +1,73 @@ +# Items Base — 아이템, 인벤토리, 아이템 사용 + +Items Base는 게임에 아이템과 그것을 담을 가방을 줍니다. 아이템이 무엇인지(이름, 그림, 가격, 종류, 사용하면 무슨 일이 일어나는지)를 정의하고, **인벤토리** 패널을 보여 주고, 플레이어가 지닌 것을 저장하며, 시나리오가 아이템을 주고 빼고 확인할 수 있게 합니다. 거래, 요리, 제작, 장비, RPG 맵이 모두 이 위에 세워집니다. + +## 인벤토리 패널 + +툴바의 가방 아이콘으로 엽니다. 왼쪽에서 아이템을 클릭하면 오른쪽에 자세한 정보가 나옵니다. + +![RPG Plus에서 숲 버섯 사용하기: 격자에서 선택된 버섯(×2), 오른쪽의 세부 정보 — "대상 지정"과 "음식" 배지, 설명 "체력 5 회복", heal 5 속성을 가진 action/heal — 그리고 "먹기" 후 대상 목록에 10/24 체력의 영웅.](assets/use-mushroom.jpg) + +- 위쪽의 **탭**은 종류로 걸러 줍니다(음식, 자원, 레시피, 퀘스트). 검색창과 정렬 목록이 격자를 좁혀 줍니다. +- **세부 정보**에는 이름, 종류 배지, 가격, 설명, 묶음 크기, id, 그리고 아이템 고유의 속성이 나옵니다. +- **액션 버튼**의 이름은 아이템이 정합니다. **사용**, 음식이라면 **먹기**, **대상에게 사용**, **레시피 익히기**, 혹은 아이템이 정한 동사(버섯은 `verb` 때문에 **먹기**로 나옵니다). +- **대상 지정 아이템**은 누구에게 쓸지 물어봅니다. 파티원을 고르거나 **취소**하세요. +- **버리기**는 확인 후 묶음을 버립니다. 중요한 아이템은 버릴 수 없습니다. +- 전투 중에는 사용이나 버리기마다 행동 중인 캐릭터의 액션 포인트가 1씩 듭니다. 전투 밖에서는 공짜입니다. + +![영웅을 고른 뒤: 묶음은 ×1로 줄고, 패널은 "사용됨: 숲 버섯 → 영웅"이라고 알립니다.](assets/after-use.jpg) + +액션이 불가능할 때 — 예를 들어 대상의 체력이 이미 가득 찼을 때 — 아이템은 소모되지 않고, 패널이 이유를 알려 줍니다. + +## 아이템 정의 + +아이템은 mod의 `items/` 폴더에 있는 kind `item` JSON 파일이고, 그림은 그 옆에 둡니다. 위 사진의 버섯(RPG Demo 것)입니다. + +```json +{ + "Kind": "item", + "Items": [ + { + "Id": "rpg_demo/mushroom", + "Name": "rpg_demo/item/mushroom/name", + "Description": "rpg_demo/item/mushroom/desc", + "Cost": 2, + "Sprite": "rpg_demo/forest_mushroom", + "ItemType": "Food,TargetUsed", + "ItemAction": "action/heal", + "heal": 5, + "verb": "ui/inventory/verb_eat" + } + ] +} +``` + +- `Name`, `Description` — 번역 키. 세부 정보에 표시됩니다. +- `Cost` — 가격. 상점이 사용합니다. +- `Sprite` — 그림 `items/rpg_demo/forest_mushroom.png`. +- `ItemType` — 하나 이상의 종류를 쉼표로 나열합니다. `Food`, `Resource`, `Quest`, `Recipe`, `Used`(대상 없이 사용), `TargetUsed`(파티원에게 사용), `CantDrop`. +- `ItemAction` — 사용하면 무엇을 하는지. `action/heal`은 아이템의 `heal` 값만큼 체력을 회복합니다. 최대치를 넘지 않고, 쓰러진 캐릭터에게는 결코 쓰이지 않습니다. 다른 mod도 액션을 추가합니다. 예를 들어 equipment의 `action/equip`. +- 그 밖의 키(`heal`, `verb`)는 아이템 속성입니다. 액션이 읽고 세부 정보에도 나열됩니다. `verb`는 액션 버튼의 이름을 정합니다. + +## 시나리오 속 아이템 + +```scenario +action item.add id=rpg_demo/mushroom count=2 +when "item('rpg_demo/mushroom') >= 2" -> :enough +action item.remove id=rpg_demo/mushroom count=2 +``` + +- `item.add`는 아이템을 가방에 넣습니다(상자, 선물, 맵의 줍기 아이템). `count`의 기본값은 1입니다. +- `item('id')`는 플레이어가 몇 개 가졌는지 비교합니다. `when`, 선택지 조건, 퀘스트, 맵 이벤트에서 작동합니다. +- `item.remove`는 아이템을 거둡니다. 부족하면 거부하므로, 먼저 `item('id')`로 확인하세요. + +## 레시피 + +레시피(kind `recipe`)는 `Input`과 `Output` 아이템과 수량을 나열합니다. 플레이어가 어떤 레시피를 알고 있는지는 이 모드가 기억하며, 요리와 제작이 사용합니다. + +## 문제가 생겼을 때 + +1. **아이템이 이름 대신 id를 보여 줍니다.** `Name` 키를 mod의 `locale` 파일에 추가하세요. +2. **액션 버튼이 없습니다.** 아이템에는 `ItemType`의 `Used`나 `TargetUsed`와 `ItemAction`이 필요합니다. +3. **사용해도 아무 일 없고 아이템이 그대로입니다.** 액션이 거부했습니다. 회복이라면 대상의 체력이 가득 찼거나 쓰러진 경우입니다. +4. **`item.add`가 아무것도 추가하지 않습니다.** id를 알 수 없습니다. 아이템 파일의 `Id`를 확인하세요. diff --git a/docs/ru.md b/docs/ru.md new file mode 100644 index 0000000..0dfeb53 --- /dev/null +++ b/docs/ru.md @@ -0,0 +1,73 @@ +# Items Base — предметы, инвентарь и то, как их применять + +Items Base даёт игре предметы и сумку, чтобы их носить. Мод определяет, что такое предмет (имя, картинка, цена, тип и что происходит при использовании), показывает панель **Инвентарь**, сохраняет то, что несёт игрок, и позволяет сценариям выдавать, забирать и проверять предметы. Торговля, готовка, крафт, экипировка и RPG-карты строятся на нём. + +## Панель инвентаря + +Открывается иконкой сумки на панели инструментов. Щёлкните предмет слева, чтобы справа увидеть его подробности. + +![Использование лесного гриба в RPG Plus: гриб (×2) выбран в сетке, справа его подробности — метки «Целевое» и «Еда», описание «Восстанавливает 5 здоровья», действие action/heal со свойством heal 5, а после «Съесть» — список целей, где Герой с 10/24 здоровья.](assets/use-mushroom.jpg) + +- **Вкладки** сверху фильтруют по типу (Еда, Ресурсы, Рецепты, Задания); поле поиска и список сортировки сужают сетку. +- **Подробности** показывают имя, метки типа, цену, описание, размер стопки, id и собственные свойства предмета. +- **Кнопка действия** названа самим предметом: **Использовать**, **Съесть** для еды, **Применить к цели**, **Выучить рецепт** — или тем глаголом, который предмет задаёт (гриб говорит **Съесть** из-за своего `verb`). +- **Направляемые предметы** спрашивают, на кого их применить: выберите члена отряда или **Отмена**. +- **Выбросить** уничтожает стопку после подтверждения; ключевые предметы выбросить нельзя. +- В бою каждое использование или выбрасывание стоит активному персонажу одно очко действия; вне боя — бесплатно. + +![После выбора Героя: стопка уменьшилась до ×1, а панель сообщает «Применено: Лесной гриб → Герой».](assets/after-use.jpg) + +Если действие невозможно — например, у цели уже полное здоровье, — предмет не тратится, а панель объясняет почему. + +## Описание предмета + +Предметы — это JSON-файлы вида `item` в папке `items/` мода, рядом с ними лежит картинка. Вот гриб с картинок выше (из RPG Demo): + +```json +{ + "Kind": "item", + "Items": [ + { + "Id": "rpg_demo/mushroom", + "Name": "rpg_demo/item/mushroom/name", + "Description": "rpg_demo/item/mushroom/desc", + "Cost": 2, + "Sprite": "rpg_demo/forest_mushroom", + "ItemType": "Food,TargetUsed", + "ItemAction": "action/heal", + "heal": 5, + "verb": "ui/inventory/verb_eat" + } + ] +} +``` + +- `Name`, `Description` — ключи перевода, показываются в подробностях. +- `Cost` — цена; её используют магазины. +- `Sprite` — картинка `items/rpg_demo/forest_mushroom.png`. +- `ItemType` — один или несколько типов через запятую: `Food`, `Resource`, `Quest`, `Recipe`, `Used` (применяется без цели), `TargetUsed` (применяется к члену отряда), `CantDrop`. +- `ItemAction` — что делает применение. `action/heal` восстанавливает здоровье на значение `heal` предмета — не выше максимума и никогда не поднимает упавшего. Другие моды добавляют свои действия, например `action/equip` экипировки. +- Любой другой ключ (`heal`, `verb`) — свойство предмета: действия его читают, а подробности его показывают. `verb` называет кнопку действия. + +## Предметы в сценариях + +```scenario +action item.add id=rpg_demo/mushroom count=2 +when "item('rpg_demo/mushroom') >= 2" -> :enough +action item.remove id=rpg_demo/mushroom count=2 +``` + +- `item.add` кладёт предметы в сумку (сундук, подарок, подбор на карте); `count` по умолчанию равен 1. +- `item('id')` сравнивает, сколько предметов у игрока; работает в `when`, в условиях ответов, в заданиях и событиях карты. +- `item.remove` забирает предметы; если их меньше, отказывается — поэтому сначала проверьте через `item('id')`. + +## Рецепты + +Рецепты (вид `recipe`) перечисляют предметы `Input` и `Output` с количествами. Этот мод хранит, какие рецепты игрок уже знает; готовка и крафт пользуются ими. + +## Если что-то пошло не так + +1. **Предмет показывает id вместо имени.** Добавьте его ключ `Name` в файлы `locale` мода. +2. **Нет кнопки действия.** Предмету нужен тип `Used` или `TargetUsed` в `ItemType` и `ItemAction`. +3. **Применение ничего не делает, а предмет остаётся.** Действие отказало: для лечения цель либо при полном здоровье, либо упала. +4. **`item.add` ничего не добавляет.** Идентификатор неизвестен; сверьте `Id` в файле предмета. diff --git a/docs/vi.md b/docs/vi.md new file mode 100644 index 0000000..91cdf76 --- /dev/null +++ b/docs/vi.md @@ -0,0 +1,73 @@ +# Items Base — vật phẩm, túi đồ và cách dùng + +Items Base cho game có vật phẩm và chiếc túi để đựng chúng. Mod định nghĩa vật phẩm là gì (tên, ảnh, giá, loại và chuyện gì xảy ra khi dùng), hiển thị bảng **Túi đồ**, lưu những gì người chơi mang theo, và cho phép kịch bản trao, lấy và kiểm tra vật phẩm. Mua bán, nấu ăn, chế tạo, trang bị và các bản đồ RPG đều xây trên nó. + +## Bảng Túi đồ + +Mở bằng biểu tượng túi trên thanh công cụ. Nhấp một vật phẩm ở bên trái để xem chi tiết của nó bên phải. + +![Dùng nấm rừng trong RPG Plus: nấm (×2) đang chọn trong lưới, chi tiết bên phải — huy hiệu Có mục tiêu và Đồ ăn, mô tả "Hồi 5 máu", hành động action/heal với thuộc tính heal 5 — và sau Ăn, danh sách mục tiêu hiện Hero đang 10/24 máu.](assets/use-mushroom.jpg) + +- **Thẻ** phía trên lọc theo loại (Đồ ăn, Tài nguyên, Công thức, Nhiệm vụ); ô tìm kiếm và danh sách sắp xếp thu hẹp lưới. +- **Chi tiết** hiển thị tên, huy hiệu loại, giá, mô tả, kích thước chồng, id và các thuộc tính riêng của vật phẩm. +- **Nút hành động** do chính vật phẩm đặt tên: **Dùng**, **Ăn** với đồ ăn, **Dùng lên mục tiêu**, **Học công thức**, hoặc một động từ vật phẩm tự định nghĩa (nấm hiển thị **Ăn** nhờ `verb` của nó). +- **Vật phẩm có mục tiêu** hỏi dùng lên ai: chọn một thành viên đội hoặc **Hủy**. +- **Vứt bỏ** ném cả chồng đi sau khi xác nhận; vật phẩm then chốt không thể vứt. +- Trong trận, mỗi lần dùng hay vứt tốn của nhân vật đang hành động một điểm hành động; ngoài trận thì miễn phí. + +![Sau khi chọn Hero: chồng còn lại ×1 và bảng báo "Đã dùng: Nấm rừng → Hero".](assets/after-use.jpg) + +Nếu hành động không thực hiện được — ví dụ mục tiêu đã đủ máu — vật phẩm không bị tiêu và bảng nói rõ lý do. + +## Định nghĩa vật phẩm + +Vật phẩm là tệp JSON kind `item` trong thư mục `items/` của mod, ảnh đặt ngay cạnh. Đây là cây nấm trong các hình trên (thuộc RPG Demo): + +```json +{ + "Kind": "item", + "Items": [ + { + "Id": "rpg_demo/mushroom", + "Name": "rpg_demo/item/mushroom/name", + "Description": "rpg_demo/item/mushroom/desc", + "Cost": 2, + "Sprite": "rpg_demo/forest_mushroom", + "ItemType": "Food,TargetUsed", + "ItemAction": "action/heal", + "heal": 5, + "verb": "ui/inventory/verb_eat" + } + ] +} +``` + +- `Name`, `Description` — khóa dịch, hiện trong phần chi tiết. +- `Cost` — giá, cửa hàng dùng đến. +- `Sprite` — ảnh `items/rpg_demo/forest_mushroom.png`. +- `ItemType` — một hoặc nhiều loại, cách nhau bằng dấu phẩy: `Food`, `Resource`, `Quest`, `Recipe`, `Used` (dùng không cần mục tiêu), `TargetUsed` (dùng lên thành viên đội), `CantDrop`. +- `ItemAction` — dùng vào việc gì. `action/heal` hồi máu theo giá trị `heal` của vật phẩm, không vượt quá mức tối đa và không bao giờ dùng lên người đã gục. Các mod khác thêm hành động riêng, ví dụ `action/equip` của equipment. +- Khóa nào khác (`heal`, `verb`) là thuộc tính của vật phẩm: hành động đọc chúng, chi tiết cũng liệt kê. `verb` đặt tên cho nút hành động. + +## Vật phẩm trong kịch bản + +```scenario +action item.add id=rpg_demo/mushroom count=2 +when "item('rpg_demo/mushroom') >= 2" -> :enough +action item.remove id=rpg_demo/mushroom count=2 +``` + +- `item.add` bỏ vật phẩm vào túi (rương, món quà, đồ nhặt trên bản đồ); `count` mặc định là 1. +- `item('id')` so sánh người chơi có bao nhiêu cái; dùng được trong `when`, điều kiện lựa chọn, nhiệm vụ và sự kiện bản đồ. +- `item.remove` lấy vật phẩm đi; từ chối nếu người chơi có ít hơn, nên hãy kiểm tra bằng `item('id')` trước. + +## Công thức + +Công thức (kind `recipe`) liệt kê vật phẩm `Input` và `Output` kèm số lượng. Mod này giữ danh sách công thức người chơi đã biết; nấu ăn và chế tạo dùng đến chúng. + +## Khi có trục trặc + +1. **Vật phẩm hiện id thay vì tên.** Thêm khóa `Name` của nó vào các tệp `locale` của mod. +2. **Không có nút hành động.** Vật phẩm cần `Used` hoặc `TargetUsed` trong `ItemType` và một `ItemAction`. +3. **Dùng không có tác dụng mà vật phẩm vẫn còn.** Hành động bị từ chối: khi hồi máu, mục tiêu đã đủ máu hoặc đã gục. +4. **`item.add` không thêm gì cả.** Id không tồn tại; đối chiếu `Id` trong tệp vật phẩm. diff --git a/docs/zh.md b/docs/zh.md new file mode 100644 index 0000000..b02a254 --- /dev/null +++ b/docs/zh.md @@ -0,0 +1,73 @@ +# Items Base — 物品、背包与物品的使用 + +Items Base 为游戏提供物品和装物品的背包。它定义物品是什么(名称、图片、价格、类型,以及使用时会发生什么),显示**背包**面板,保存玩家携带的东西,并让剧本能够发放、移除和检查物品。交易、烹饪、合成、装备和 RPG 地图都构建在它之上。 + +## 背包面板 + +用工具栏上的背包图标打开。点击左侧的物品,右侧会显示它的详情。 + +![在 RPG Plus 中使用森林蘑菇:网格中选中的蘑菇(×2),右侧是它的详情——"定向使用"和"食物"徽章、描述"恢复 5 点生命值"、带 heal 5 属性的 action/heal 动作——点击"吃"之后出现目标列表,英雄当前 10/24 生命值。](assets/use-mushroom.jpg) + +- 顶部的**页签**按类型筛选(食物、资源、配方、任务);搜索框和排序列表可以缩小网格范围。 +- **详情**显示名称、类型徽章、价格、描述、堆叠上限、id 和物品自身的属性。 +- **动作按钮**由物品自己命名:**使用**、食物显示**吃**、**对目标使用**、**学习配方**,或者物品自定义的动词(蘑菇因为带 `verb` 而显示**吃**)。 +- **定向物品**会询问用在谁身上:选择一名队伍成员,或者**取消**。 +- **丢弃**会在确认后扔掉一整堆;关键物品无法丢弃。 +- 战斗中,每次使用或丢弃都要花掉当前角色一点行动点;战斗之外则免费。 + +![选择英雄之后:堆叠降到 ×1,面板提示"已使用:森林蘑菇 → 英雄"。](assets/after-use.jpg) + +如果动作无法执行——比如目标生命值已满——物品不会被消耗,面板会说明原因。 + +## 物品的定义 + +物品是 mod 的 `items/` 文件夹里类型为 `item` 的 JSON 文件,图片就放在旁边。这是上面截图中的蘑菇(来自 RPG Demo): + +```json +{ + "Kind": "item", + "Items": [ + { + "Id": "rpg_demo/mushroom", + "Name": "rpg_demo/item/mushroom/name", + "Description": "rpg_demo/item/mushroom/desc", + "Cost": 2, + "Sprite": "rpg_demo/forest_mushroom", + "ItemType": "Food,TargetUsed", + "ItemAction": "action/heal", + "heal": 5, + "verb": "ui/inventory/verb_eat" + } + ] +} +``` + +- `Name`、`Description` — 翻译键,显示在详情里。 +- `Cost` — 价格,商店会用到。 +- `Sprite` — 图片 `items/rpg_demo/forest_mushroom.png`。 +- `ItemType` — 一个或多个类型,用逗号分隔:`Food`、`Resource`、`Quest`、`Recipe`、`Used`(无需目标直接使用)、`TargetUsed`(对队伍成员使用)、`CantDrop`。 +- `ItemAction` — 使用时做什么。`action/heal` 按物品的 `heal` 值恢复生命值,不会超过上限,也绝不会作用于倒下的角色。其他 mod 会添加自己的动作,例如装备的 `action/equip`。 +- 其余任何键(`heal`、`verb`)都是物品属性:动作读取它们,详情也会列出。`verb` 决定动作按钮的名字。 + +## 剧本中的物品 + +```scenario +action item.add id=rpg_demo/mushroom count=2 +when "item('rpg_demo/mushroom') >= 2" -> :enough +action item.remove id=rpg_demo/mushroom count=2 +``` + +- `item.add` 把物品放进背包(宝箱、礼物、地图上的拾取物);`count` 默认为 1。 +- `item('id')` 比较玩家拥有多少个;可用于 `when`、选项条件、任务和地图事件。 +- `item.remove` 移除物品;数量不足时会拒绝执行,所以请先用 `item('id')` 检查。 + +## 配方 + +配方(类型 `recipe`)列出 `Input` 和 `Output` 物品及数量。本 mod 负责记住玩家已学会哪些配方;烹饪和合成都会用到它们。 + +## 出问题时 + +1. **物品显示的是 id 而不是名字。** 把它的 `Name` 键加进 mod 的 `locale` 文件。 +2. **没有动作按钮。** 物品需要在 `ItemType` 里带 `Used` 或 `TargetUsed`,并且设置 `ItemAction`。 +3. **使用没有效果,物品也没消耗。** 动作拒绝了:治疗时目标生命值已满或已倒下。 +4. **`item.add` 什么都没加。** id 未知;核对物品文件里的 `Id`。 diff --git a/locale/en.properties b/locale/en.properties index 9149192..7948742 100644 --- a/locale/en.properties +++ b/locale/en.properties @@ -1,2 +1,2 @@ mod_items_base_name = Items Base -mod_items_base_desc = Item definitions and factories, inventory and recipe state, inventory UI and their save state. +mod_items_base_desc = Items and the inventory: what an item is, the bag panel, what is saved, and scenario commands to give, take and check items. diff --git a/locale/es.properties b/locale/es.properties index 6da5c38..ff483c6 100644 --- a/locale/es.properties +++ b/locale/es.properties @@ -1,2 +1,2 @@ mod_items_base_name = Base de objetos -mod_items_base_desc = Definiciones y fábricas de objetos, estado del inventario y de las recetas, la interfaz del inventario y su guardado. +mod_items_base_desc = Objetos e inventario: qué es un objeto, el panel de la bolsa, qué se guarda, y órdenes de escenario para dar, quitar y comprobar objetos. diff --git a/locale/ja.properties b/locale/ja.properties index f403c6e..2a3580d 100644 --- a/locale/ja.properties +++ b/locale/ja.properties @@ -1,2 +1,2 @@ mod_items_base_name = アイテム基盤 -mod_items_base_desc = アイテムの定義とファクトリー、インベントリとレシピの状態、インベントリ UI とそのセーブ状態。 +mod_items_base_desc = アイテムとインベントリ: アイテムの定義、バッグパネル、セーブされる内容、そしてアイテムを渡す・奪う・確かめるシナリオコマンド。 diff --git a/locale/ko.properties b/locale/ko.properties index e4c5eb6..4a7ad8b 100644 --- a/locale/ko.properties +++ b/locale/ko.properties @@ -1,2 +1,2 @@ mod_items_base_name = 아이템 기반 -mod_items_base_desc = 아이템 정의와 팩토리, 인벤토리와 레시피 상태, 인벤토리 UI와 그 저장 상태. +mod_items_base_desc = 아이템과 인벤토리: 아이템의 정의, 가방 패널, 저장되는 내용, 그리고 아이템을 주고 빼고 확인하는 시나리오 명령. diff --git a/locale/ru.properties b/locale/ru.properties index e7b6822..3d39e24 100644 --- a/locale/ru.properties +++ b/locale/ru.properties @@ -1,2 +1,2 @@ mod_items_base_name = Предметы и инвентарь -mod_items_base_desc = Определения предметов и фабрики, состояние инвентаря и рецептов, интерфейс инвентаря и их сохранение. +mod_items_base_desc = Предметы и инвентарь: из чего состоит предмет, панель сумки, что попадает в сохранение, и сценарные команды, чтобы выдать, забрать и проверить предметы. diff --git a/locale/vi.properties b/locale/vi.properties index bd06f9f..a2eaec9 100644 --- a/locale/vi.properties +++ b/locale/vi.properties @@ -1,2 +1,2 @@ mod_items_base_name = Nền tảng vật phẩm -mod_items_base_desc = Định nghĩa và factory vật phẩm, trạng thái túi đồ và công thức, giao diện túi đồ và trạng thái lưu của chúng. +mod_items_base_desc = Vật phẩm và túi đồ: vật phẩm là gì, bảng túi đồ, những gì được lưu, và các lệnh kịch bản để trao, lấy và kiểm tra vật phẩm. diff --git a/locale/zh.properties b/locale/zh.properties index d483bf2..9c9010d 100644 --- a/locale/zh.properties +++ b/locale/zh.properties @@ -1,2 +1,2 @@ mod_items_base_name = 物品基础 -mod_items_base_desc = 物品定义与工厂、背包和配方状态、背包界面及其存档状态。 +mod_items_base_desc = 物品与背包:物品的定义、背包面板、存档保存的内容,以及发放、移除和检查物品的剧本命令。 diff --git a/manifest.json b/manifest.json index 4f6dc43..7e6cd55 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ "name": "Items Base", "version": "1.0.0", "author": "ct", - "description": "Item definitions and factories, inventory and recipe state, inventory UI and their save state", + "description": "Items and the inventory: what an item is, the bag panel, what is saved, and scenario commands to give, take and check items.", "category": "gameplay", "sources": [ "src/**/*.cs"