From 5ed977788c3bc800485bf8afc04b1ca7c68e3c0d Mon Sep 17 00:00:00 2001 From: 33333-33333 Date: Sat, 27 Jun 2026 21:50:05 +0900 Subject: [PATCH 1/9] hm --- app_manifest.json | 2 +- assets/sounds/shoot_bolt_action.mp3 | Bin 0 -> 33853 bytes assets/sounds/shoot_pistol.mp3 | Bin 0 -> 17812 bytes assets/ui/tool_shoot.png | Bin 0 -> 1256 bytes css/base.css | 1 + css/components.css | 4 +- css/layout.css | 10 +- index.html | 288 ++++++++++++------------- js/audio.js | 2 + js/collision_footprint_system.js | 4 +- js/command_dispatcher.js | 6 + js/constraint_system.js | 37 ++-- js/debug_tools.js | 5 +- js/health.js | 71 +++++- js/item_dynamic_duplicator_system.js | 85 +------- js/item_lifecycle_support.js | 5 +- js/item_registry.js | 23 +- js/item_render_runtime.js | 29 +-- js/item_type_initializers.js | 4 +- js/item_update_policy.js | 2 +- js/items.js | 2 +- js/mechanical_system.js | 54 +++-- js/render.js | 227 ++++++++++++++++++- js/sim_core.js | 24 ++- js/simulation_environment_system.js | 10 + js/sound_pack.js | 11 +- js/tarinai_consumable_behavior.js | 4 +- js/tarinai_contact_item_system.js | 4 +- js/tarinai_disease_nest.js | 14 +- js/tarinai_item_interaction_context.js | 2 +- js/tarinai_item_targeting.js | 8 +- js/tarinai_needs_items.js | 24 ++- js/tarinai_social_move_life.js | 2 + js/tarinai_update_step_frame.js | 6 + js/tarinai_update_step_movement.js | 38 +++- js/text_catalog.js | 2 +- js/ui_input_mouse.js | 20 ++ js/ui_input_shared.js | 139 ++++++++++++ js/ui_input_touch.js | 9 + js/ui_layout_dialogs.js | 2 +- js/ui_selected.js | 10 +- js/version.js | 4 +- js/world.js | 11 + js/world_combat_effects.js | 23 +- js/world_environment.js | 25 ++- js/world_placement_log.js | 22 +- js/world_tool_actions.js | 184 ++++++++++++++++ scripts/generate_item_icons.py | 15 -- service-worker.js | 2 +- 49 files changed, 1084 insertions(+), 392 deletions(-) create mode 100644 assets/sounds/shoot_bolt_action.mp3 create mode 100644 assets/sounds/shoot_pistol.mp3 create mode 100644 assets/ui/tool_shoot.png diff --git a/app_manifest.json b/app_manifest.json index caa7202..d6bf065 100644 --- a/app_manifest.json +++ b/app_manifest.json @@ -1,5 +1,5 @@ { - "version": "39.15.18", + "version": "39.15.27", "css": [ "css/base.css", "css/layout.css", diff --git a/assets/sounds/shoot_bolt_action.mp3 b/assets/sounds/shoot_bolt_action.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d611e74b1fc80f377c8f9fad7454226f854ef879 GIT binary patch literal 33853 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 literal 0 HcmV?d00001 diff --git a/assets/sounds/shoot_pistol.mp3 b/assets/sounds/shoot_pistol.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..77db29188cb0b2bc948eac697b85074dad22afa0 GIT binary patch literal 17812 zcmdp-WmFV@*!O3b+Ffeth6R=mX-R2Vx>HoTJ5&U5>F$tJx=~tEx*GurQMyq;KqcH8 z|Ic&3e%?R7bM~B>GqY!AKXYBze6Lu{b&?YB|5&C@?hbdS5Z`^o06;knfKpJ<(lRr% zv-9u>iit@{$;+##XlUr^8CzIbS=rmWxOjT{`Mn4V3Jr~njE_%F&dAAm^QNe%yu7Na zwzjFIrL(iAXK-+2WMX1wVPScBb#;AxdwYNX_~hjL{MWDR>%V_7ch}<7l-E)g<`)zY zz%KcBhx{-A5Je!ta#{eW<==g5$XitXJMjPY!d%xX0a$_>pczL60LF} zX(s@u4ibkj^(wmjH1@ky?dBt{q6`vEg=aPS|DG@s*feOkR2$H^<&@| zi(>;puz>IzdTXBBu^(ESxxCZIc$`eNFR{xoB3g%9%ELjdNtrF-y#l>6VITp_{*th; z_e&%pzbVJC=T5BN87iKI^A!g3H*3>okYgd0>k%>Lzjg7(#*Ye|M2Y2zB8v=02vCEP ztxso!&9yO}Ng9}a@nl;Rrf<9E73S}XXFR?T{1@iRStGk&7jQD#F}=lLZV2&YEm@a5 zAsb*6fpiipJ_d7J%FNq%FgV7>-@q;!!TG3%6z}d*$1CX7XUEgQLOscC8fF&%ZU%!X zC~gkAHGTOx%@m2#;X(k7D7I$EYx(u>5N2@ycxwG;Uf)~(+z=KbDeR~AEZ)Cf{Y|$C z=N3|ztZj%<yb9c~Oqv@xk^4az*vg^_w;kL>rQG1!hGfpUkIpG9J(%lh z+e0)i5UT&z9-UOnbs#%#3uml(?eQm<6#TKa1|xI=T4^KwRNW3sep6p2^C8Ie!j*Nl z%9thYBh%r-N8dYegcUWUWN^&u%qjR*he#HKm~Z~HU0!HryR_CA$k({ze)ig7*g1_; zBpnJ0AmH^DRD-2!tVJunhG(U>om2kN4;r_DEp3}~sY#s1(pRWOdj6T{WomgUs|F8d znS0nZ+IW2xAnRTB*UY13@fBvarJxk0#-?j4rizScN}2Gt@wCKA4KIzENbb1@=lvM< z`;1#9^GNZXwYLW@`7n;oXN1jBpsKm*m4S-$%+7N1Gh}0l=-4PB>%6MsV5#bxtgi8( zjh2UsUW^lZjH=O@9^WxR_^E~y>XqFN{VhdUV*=8H9!vxt#j!!Bo5nw-@_s(*$i6-= zJNJ&vbN{*fe1Rw1-p%H-Was5scIU76n9rR*-@kbE^3W);g z0Y0u8IOJq5jGX@HWb4mJ&Ux}TMA`h_o0n!C$Zc%-cIj zW^h{A-VoIZI?<9^bEOL5!}lCN2>b-GkXbpi2tMsmVnH*9>=$fj3sSNJAd#Ql*Y4kSERJqSYOeFmbT+a^n z(QEp0JMl|cyk%=Fo%6~-PI~f(mjPF}oYR+nveNYz-<(+F%Gi3WhM%t8P?AQbP%jV+ zX`5T8M@!jWs%(YG&GZ+$^cYyVYR|?=C>a*|Inar1eUt(65LXUTn=!+mw#WA&2XxViq}Y(8ejdO|3*iU?4GtTB-SyoXsr zq&r_5#pb_!7)?jxJQ+c2mVx$Gh`#l?jWx4;yf5!yz?y$Rl|b`T+GimX>+33L@{>>d zUEtHiVC;W&rS~*w&wqJ&dx?_pFiCZpPo4TO9umVlYDDEjoskz>7mtmM?(va=f(mk# zi$V&UFxN@8+i36**XnvO{i0!EK#fd<7?eOFpj4p0M?3xd`FY&*r1Pi0wGQk0k%er( zO8c{!ZA;%Q8z~VGYu4flf;SFrV>Dn%y7CHQu&_k4t1GCqM9Hr!(%bA74J|0-`#~5k zh)Wcags;mDu`)y&m(B4%c_p9ri&NU>JFY&Jj%{8?To(1MR% zDJ3&&VM%9u5u~hcCK;1aEip%S%vlHEkEbw=M-yGfzjssOdg_eXj=%?&zyn&#Fdst; z4g|O5=s$1309X*>)jvl`zsz z;O2@!BGX5WocRT zy8TOM??2d=0C*4n$SInp{$c3KluW1uEZ4zrH(#?yj^w@cc|0}j@Wm(X2a%4?YKXJ> zXgizdn)u4M+-JSuoKe<}AqG$5m7)kXmRZ(w^`hJ=N8^-R3O~^?Yx6`~K%ytHRONei zA5v&4l~7QTB#=6@G;e?sm(M#@MimbmMOH7IKB)OevIj$mle@WV_Z*AuP1#z#6rQNh zFVgm(vxNwyDk=ps@HHlNG>OU$7?(?`6Vq9rDIhEyW(IXJh2ZnkE%>;Wv z!@@d3HD-ePxE=*(LCNbZZV&yA8MS$yT$edzbC+NJ>ZEK6H%sU|kALBsGTP4hYxVNm zBNwHx)I8I0qL71b&8Y6IXlR>Vwt^6wMl{GM20m`91!iw@Xr~m|8)Dzqks+|!sh*zI zFlATx2m25W&LUiON<<;_`sli3LV00uo@cwA%HL z^)!}?ZJ`nb0B_+cwrj5RRq#HnlZtL<1@q~*I2JyCa)fRh7T=AkSohqg!!Z?bQJyAJ zA;BK1Rz)6H?@l|+9T2SjId!00l-__e9aH})TSJQx>aY!IYH12<*{oVPr2qhx(7B4r znZP++7+SP>G{gtCiXtbcCNW&a$_y{fe!3heJN4iUERbqJUOP=28YWye_kk&<_ zD}Ag**9HdRucmyBw2j-fLge|D^$Vh!PiJX3}Ui-m~^D!+C`2#%9*_`4YHTpn8w>BSW=&&sa!2#@FDwd{Lpx>ft za$nZ`urhcv&sGLMLZ19l!&(tDUus{%vavd7m(${KyI zm-q*J4-NJpd+fhYo3E+B(<#GZijOjRR*LOy#Y4=0eo0_kzJK$@jXbv?D0GR zQ__))lt4c5Q8zw#{Q?_8?MdQB@v0)Cc6c~Kfdr}%sH4Ow12tV$i2p=?V-zgVDU#(^ zRv_?u*&t0czx(CZD1cQ&!mb^nkrVJvzO_Avl{O#Eg4NMKqwET>a|H5s}U?^jmrEU$|9u45?E^a@9INg+WLA4v*wUpp@Z zipqj(h3=75!G2*?=HK7Uh3SWAMi)O=c5+2HXfvYav9y_Zc0ar*I#S}wW;E5XTX;0rI?I) zi%SB5F_OmA*~%wbI4kMAVb#*0CU1G6-vjMVHH~on-27eC9dpkAX38jN%r-tBz@8MQ z)*Fe$RiM6)m9Q3vIM^|4{?rMr&(G#GCZ#D$_O1A|@UU>}n%1XtS{Of5tbT_7%P8)= z3-OV1#@~FYIKlX#PWY*w9Mc({p09p@T`~)ljjJV!3fo`M@U1;7cXi!8qb#L<(;4GE zb`2|1rH=+I_B<6DEBJ?kA@u77O>Z>lo14n;iK#!i%hF!FFR7NJa8st*nl&=+O5Lw{ ze*FF)>@zetneq-cO}BRFSdFx`Gj#l+S1Gltykxk0CJ`L(_RiY%V?M}eu1B!C)zG3U2cCr;AmUC*5a@FOcI^mg#Dx8O|^AE0fbO<*RSk6CXvtUokU&M5f=} z1W?ei@Kl2CW4>=ruIbZM=_6QvB_QToi@MqNql4g|uVg0n6CWE@)+6)={sBHJWZPTmk#@T30 zCCb#m&RPf!8SB;60?LcE9^k0Wt88Mk)B(e95(4swMZI@q?BF4ny~0iMbe7# zol*$k`ixKl{7LR})W@Fh(mT-=rmGA-q*hPa&2+$?8MuBQSNin0Pxizk!$_4#^y^UK+*XGWbWe#WU)b{Tai#J0 zKg&J`Sl&vkI;}I9nug=&v4s-CATA!&0uCVQ827+Sf~|6odEVD;KhB^2l3GAj*Pc{c z0x*-rzT#*T0fr&7?8wPP0ji1L2`M^^pKR=mjr5=yst8kw1X@9d&}f-7q9}XKX!vtt zf!AC%%2DYLxNEpoG1d_6rlRAT=6ScEe)FuL27eOl^n3d(DA6h?8lI_WmxK&se@;ib zXh&aMnWyIyT#PM;iyj~(2G#a}x1X6ewc>j#dsO&IgOg40GQ!j)nlTzlZ>BKs3tuQR zXr@4g{?f7yFOV0$EYi~TE+kXcWiSAefT7(PEK*upDkxt!Hr{k${%6XE=WaS|4Lh!0;t@lh?513u#&_ZsG_q~Z_bWOmYH7TuiG0H%j*XoW$n}52 zNDI-O&K7Xg-Kcv1Px_^a`rWCK0zO=K-%BK%dm1)zK zX>qyxgMV9VQjw>;UgI3m6rXe>%fOg(>CMb%e%GTD3av)ISUfdS1P>|p9}q+oSXO1X z%kfhAhs`#gqUj9gKd806Wd9|(K5E=WCzk}$@kl>A*U-n#5)g`QGt4dNsU63HLM-x6 zUa~YafVh%*!$JC^grNpS(Y5-8?{$UM!zLx5!7!`Ae7n4*m`c@$n72;aw?zq(HPXW2i{V0q$) zPDcW|CPT3=1z4-_u|qvd3A79D#k%?aB-Gt9=yZNNm(J4}RI86oagVJWOLRX?H##@ z;;qT1+T61bvn2q}$%A_~d@F*gF}vg4_o2b1{~ej|jo}qaE5_uSJV1KJgwA*JYGa^ZsPd_!8Z~ zc9Y0Ak@`4Gn&;IIk5~7|%tOgpTpi_Jymxu8gZXep*Y|jNWr2%3N-o)s2M2?Lei>^*K&RFoV5&J?Vp zTr5ZAzux@A6D_hIkO?bR!r|!A?p@bwp#4D-jvQ&MnPkivOy}hsJ{j9plXf%al|+!D zLwg(&{lKq_-%?uF6+P&&@YB}%pvM9@O~X^sn;_Ge5l>}C23oluM@sS}GpGY+wj`>R zYMw-Y{w=;)1Kluns6&~@9PiDP5bER^>rk&{%n$au4JD!@pKpIJYWB8zw#`-{VPFtZ z9HoU8$sU=Iwy@WRmPxVZrD3qZGs>R=EuVs)%$&1O&eD4g|Nq$HbiY2 zvcKOIqsA!5>APu>-F4Xb(Od3pN^3K2I!4q%xEo$dBbzX_Lsi;;ug3jXc*I z40t5NstQFXJMCsV7brq&r0J=V>=`ceD3yWHqt&rs4yVuJ!dSfWXx*NEN+SF`&f?5ZM@SIpV(|<9arq^cC_&=nbmWRoGj8zTfT&R!msq_VEm7n zqE&lI70KkM{opA9<$Iv?h+Usy#?cyFVlodj*4KE@N-P(QJ0Dx6w&ErotN|GWvTq8V0IP*&@>E}FvI_>(Zs^JkO@Kc#XP9+0{!fAyIY|7+}}+WMJ8dhblI0KvL@Z!Qcr~&lMe&UjpAL z=KeN|Tjl3hke106fP9dYyv&ZsUUhuILwLxA^j>^nXlY=%YwjnyD{hR>=>$6`8gw5@ zrl77PKW$IONUTRx(8C}fZF}Lrg7T|+AtQvMd>GA$@328ZC1pbGqm6{9W)&iDHwOd?vQllZ|IG8b6v^ipuwkoU zM(n4Et=`s@^qJQNMr-zlm9qzpiNCT=0s)Y~b2Dod)p#dStwvmN+?`lH2tgvPSJ9P4 z$*aB34z?34Py@6cj!|UDi&8wWA{F!f*`+>poye3l<;g({Zh9eKb}y77`gk8fXPdlf zR~e_tRROPUL4B1?mi#69Zn*L(5~Ov4Q>T&!4c*Xly7Uth&*&PGkAZ5Ml252iZU?(+{3R!VV?xd(ZVUAX3x zW#X|S-m8=5fC|2#Ov#wQ)@F9hti{R7%dP|j;VS6?G4X0!re(I@)kigOvf2IRY<=dk zSSKFbN|N&wW(;Q{;BlaAf`Z1V@E41sf^Y?H5flmG;fpB!RKG&>!i&g)`nm+>;{IQ_ zi~Fc{@2%ym$;-|`B82IrgN`~!CefaRzc|E1CLR#kk0M{p>4 zqD@(?RS#Zxb>r(yu8me=Cw(#&Ysw0yfej$(Ax9ssz+nMCw{24{a%ZqmRnGCtxP)TH zB`JpeMd0wc^nQ>}*REwbI?J{78TswoJ;vRb%SZDy?PMq+unrno1gWEB-P=~m9a>L~ z)cWzg_dBPJSMN+x!fH~#Fny2=OY@7MS6r>Xc!{FKYAqBpOxc{XwOB*LFli($3is$^ zA>(28j&NAM3@h&b3#4t`l_2Bd`17J-6RgtnFe6$*0H+D5DDmEQJXf;oR&<0&C@|o) zXHL4)QH+?b(b-)W`p1(dndQroocJ&W6Ese+k3=N(4Ot+lT)~Q9tAD%RSLc0)?kLi{ z0XaTV`9qC5-u&T*lLGsdfKFV?`mOg0GY0CV^aTHbLxXV$P4^Qm0eSgY2AODfNF19@ zwIEA{3@xw7CBb&~wcmA3+bon?L{0^<&U2|fO@l&c#Z@|#*;i;kD1W`(Y#hGYXo)PqVmfRLQCe+=wH=SqUhz8h$>1kR_QBKjyd762x zgKm1sSVPe>F>L&VC(VY@kix4>rF<45BW({*T3x%Ceg5ZwjxeGPg6yVA-H-6RpZ> z?d0i_tGyx!wj@XGwZ2V#+v8yH!TfpmY?nrfybQ3AJEQ5Tjf??r>g|h+U+VhaE2?V# zDPFpg&Rwl3UsyD5gU_6KCXYy#7gu7(p^uD-35!Q+&T9#>Hh$RGD2zzQeOQ7*LpVS- zYppC{PMR89A~Sm#Sy_-=Sbp*%O8v3oeJ;)7M2)PhFN>|2y>YZ~qUvmNyF%~oP?e@c zXP@*yYg%6?stOxhcddta`Zk{kl#k2!I#N+2gey}>8mm;V5CD?FHP!{!tV83k81QNKt21D!23J`?urev>!p8H%qj_3iX-!(b~ZfPwEOBT~~c> zRm-j-QvS&W3cWs}byB0>f4%uiwow9>(davHN_P!XTPEW}F4{^3P%NKJ1Pzo|_)%F& z1Q&BGPvd#K=}f_dIbnnBzd^ z{(E69>gaISUjkW@hi8M}Uhl$~iB!X!1m4)lP|rZ-3+#?-IF;6YrtP15KjIr}8f|zD zd!RBOOwO)MrCQkd)Q_zLLYhI2T+nlAKE9hxA_VE1WXyQ_ma9<@+&GlS`=CDEUlt-F zEDbRnaciP+3Uw2*JkFtWfQwO9tO_L`YHakm_cv$`E_U(QJiH3Pwx zrR+n$yUj^*qV44SnLb@JWM}u|-c!i$`Bwy2IsjM{7)+e@Y0K5EvX2F$IZ&KWtahaB zn1ylN1N3mJc9_Z|T9hG`2Xs{bTA3IZB2j1(OIR&G1(Xtt<8HCse6CCy_wjjzKD%PHdrN!|$?dYkgXpP2t4aTTaPPHuQL`t!{f zZd<1(1zUX2te4m)9O7aw=!YJZ>S#U(za}r%8O&&l%5Ax5w@ART9%V+-`x=d8>=&B5>4aCCaVOgz> zJPSVec^@=O4el)+(ZZ?yLQvYUevHz8m?gg5#3q{oHzc97cRm01MLZ{}Fm!fDf}cfG zfklj#I`;m37R|OTH&TTFz>*vrEn=>WrM#|-X3UBqnvP`^{!6MxUh^V!uK4#KyR6l9 z-Vd)jcXqZAj1bca2s;V&eN39o~ zS1`CZ2oLYcC!@hHxK<fhH> zrgbjnN=(poN_u?;p4;G?<6}a{vMLZx!pSDXUOglxCtyHPQh} z2Xm2$jPf+JcHcnhIfgNtCZv#&g-lbwq)&XHiXEiBSG@F|_*cWvH%hNGo5@VR{rr$t zx#;jf!Bt%HLLH)x7OkJSh(?l{g5Z@L0yDPQ5d>hX5I~=iE;UJ$Afra}PwCdPI?R{c zx}Me@HwWsxI5-p(7Z{_uax)WrDC;^kqJ~475Av6GsfaTB%Ezlx(+{nbViRFohdPJ+ zK~7!@@*9lOj;hPCD)f}G)e7kX10j5UY`gyM-`p@5TSu3b8(C!jbX3Ai7dk%o2@)>ggsyiY znx2TCC$zgI!WL(AgW00xTu98m#hm zTN@E%iO1tkC_(1*s}COs`rLN5GY94ltx{-FthwK=vY);BF-84nP5Z~E#)iiW(=5zT z%K%ZN6|W){#G2$0+=FYTr_v0TT*7IZ6}Y^emt!cx&~uJI{fj~5_prdzCXWDZeCf!i z?5oHm0yLH*IOK+&LvD%v2rXnABbM(^V?CrNTygl7Hz1Geogq8w{I+It!eHuVykj>g z1aCN7mg5)SP!Opi3sQ&#!dZa^lLK2`*m0q3iFPp23aIqgs)vlCoyxERZh8uBm3y-D zff+8sVQQavaz5E6Sb7S#pAdeF3=$W@>%<%8%g|GC{U8jMG0WOYPaDbeR##Slsifma!n6+1wwvbZ}= zqffMwye%_nBUCbRvO z%;k2|h@FS-e!rb6SsD$%l7Mn+9RhE45D9FtrKd50pG^)wp-{fE$*KGCYod2u?+4VI z9F4N7%Y7DdP6lS%GovuiuBB1NMs{*+V7YAjU{%V_2l~2Bb+ImbH+kZ7#+5K~#gvJK zoV{85&kk{HN8B>Iq+QSM{b+ppL?|8KMo?OF` zLZSOJd0}Df=vas2@gkSaXP%N;PFwb4sTu`*p*A|Q)0bFJZ?a|ij=o~dk0MaB zmY^gYUo8<4nbzSD@hBE9dMVqxHif6{uRFKnnA_i>Lnzsg)(B#GLi#_O?1uSRF=SOr zUlP>W&_*n!DIo_w$sK59M6mjVjJ!K1?Ys&9`SE()7i_XEy9i6!_%LQ)J$R%<3VRM% zLE*Iwqs1aOY%Gy@DP6jre5AzWjq_gu6IkcD+4JSD_St@J25{kQM7)i)|L)d0-|_2p zduL8#ycN-x(RMdvh(12;NdkOATt6%zu(Mn57d{2k7pDloK1>&R`3 zfJIHEB)=Oy9>V=zR;6lVxlO=uHvnO2`wIZA5gP7$poAV2!roZzaG*>*^va4IM~Db3 z1G^JQTpC9D$tH|tXKuI@OPTs~_Lt3PKVX*46zmNY*cD6w>X=hcl19$J)Im0VQ+*Az zlW%iay3L$3lC)w39hSz&+V0UVh5d*4G1d0<_2Bkt_0->QhO(=e&xQ>xD5VNCapaPh z%xwRy<=YN!?Ovr#xi?9*uMFAVadB$4HX5|zVHdDfS2DdY2>Q4k{y|0rCFRiA$nh+; z`nktn*_)-N>ST56(GFp}1A%-&%Cu>f7lQKnhNpt^OX7{pp%=aJE0PFCNqO&asva96 zG2L-l-gV|dAtvsOx^gcH9wk7{_pV^-sk93MGmshF<(<8XrRwoAq1lQ0$y*($(}j_Kg4GPa?~XB`|J>~QBNx6BJA@>y_eXl85#roM(8v^I_g4- zMiW3PjJ$?;l)4RaLG&F|Deh&m8p+nma>}c20y`p{G2-ciM&thd_((6ITasV%+evCM z+a}x(;+&_q+*Z@0bsCnE3ulZqGTp!*_!1Pd5U&v+lDi2v`ujAg{m;=Y2v$1&_>0D? zK!NN^5mS*#iaf2LgpXn4?;qOT|C{y9#i<>0O&iU_FApIHDQS?XSj9Y?$FqrkCTXK+ z%%F&CEWti=z$vw&6mYRO&SyP-oh3=lsep%-PhJm*I32n~Gmm?^eEyN3vaJNZ^93zN z7+{(52U-%!JOat&fDf^Z{Pdsb_~&*%g24p%bAOIN`br_$FJ(eiRMGeKB8x}Sr-@vR z-3ioW##Bj1aaMJ6(LPd{pgNpoxDYA*uIJGG2*jz@ReC*@iyB;`1&CA6!}EMh9?Mli z;FBUekoGjJkKB5sgZ}dMido?3TjvJWv_(r3&dE_)5#Yg$=MtQewejO$_v`DRri=RF zXzbUX0R6(+C^E^V`siIx3ATc#Tks$ZrknNj%F**!Xk|Ty=<$zD;*lCEu@G?$5?w>Ng&=tR`402SW*_1SV|4i zE{w)xK)MiX6Qt;w{k_q5UJuRQ{d2oJnQ;HU!Tt`Jf&_E+OTK+<6vAICGSfZ(0_N0s zNg)2XtGKs!uW8bwF*;1K1<2?gsI?DS8Ja72B1~B1c+6%sEKhwF(H)l_}zbWVUN zsqyS4A5zoe!tI?kQ^lauwVcxPz)$+6$z--)im*vH@w$YC-r;BpI{*PZz+yr@Fx{L@ z@78ZFnmv zK?&^n2^`d`TkG4+N=GOwQ0o7z=Wh6lir&C!hmPgJdbXQYw2&%VLa(g0zx$e|;=GSA zTBMcNRAE1dq8J%4O;h`Olprh?A#aVHyuc_H_n^T^Wm^qdj7-8u1NwkxlBXan?97t= zX^^{K2$^V^Z4%BWlJ<+#tcvo^2MPVVplrQm`Hx zH@6`}F)2?WxuWMR+tl|>*fwtmwnA%BUh9Wq7Sf$G^=#35Qt+^Ki$|qI4_+Q9KjHX> zS<(_eM6|SkJdv#X>E`~-6X59*$#40lO3JK`lnnn1+GsG6&cKD3ru#vm^P{^72$ha!8j;1$>$tEAk@NVZ zFgsoGm^6Sc)?4ZA8{4SXvS7+jj%mYcy&H|h1C!UyTHykV!&^Q&S-UbwF^`Bq;t*O( zis-Xc`Qw5z0u^;7MAS0?B*o@H%c~Ril30pzx~YPqLgW+S-}lcrTFob=6-!5FeK6H@ z$p?7}awYh0Mg{`0U&+-_K^3dQLruZY`^0sjbKXZ~E?9DVe`ufr=fiqrq%v$u_f>wf zY((iA!!RHfaZgJYlY^IEzyGMZsx+x~gd64qG{sjO1b6)a-HJ*dD(~n#-lt`HGmK+d z3gvsvPIeq45*j;7C4t*hcj3)b=>QG-Nv(I+3#gYaY}2yZq*cw0SG$AYxCh<$iy#nu zp*!@A%OQ=BW5_?ioo}C;8!*oY?$P7Vx@MD|o_#U>>=62EhleiBB+*v60b7Z7=tE-B z%kT;j;Toc5UMr+xc|9IY5X0Hwat(uQbf=mFi!E9m4cJm|#v`U1X(+}ci;|NP%nbiZ z3ZXaV+Ky5y!&9<6XGJ%MBx{-%TG!q+{JPEAV3DMPR;er_NY?;t=HGPrgo1>Fh;ES5 zHZ>hF88;L1QE;a7DDOqXpS43|dZ)E@zfX=ipwc4mA#6K2KmUAF?HTPXf?^W~01Cvl_>2}l9JXL5 zS*PGz5LZn|o=L`;>g#Ec-G!e(O&pqSU;z5~@per3@|VYxuBKh5cZ(>vAsWEaO|z32 zR^w98nd!bqz^^_Xt=(t-C1OvrSa5Xi+2xnm@Q0kLaM(K^p@}|hh5jw`TQS~Psf6Bm ztUtzDdYi=^xuxB!3gBlcNd&d(c7O0FzY$((G^O{SMte3Q>#WfD3>CgAm4EIPR_&i-iXks z5M{iMR<^dvi;bp^9-N3#ELC}Yjd(ZtjC6YDB?m_*wnDk7sF~VvZMxfiYVs*r zi%l-g%2Q%weNkZQJK=Bv^)bE<@elm;Okuz7xu`By>fwnRYvU-*$?MiFy@t1GHrQar z*=B=$i`K_U`N5WyLP?GK{9yKdCurFNF6cv;%PRk3tI-g5hJwqJo; z7l6$OV*S37P*+Sx_>vHgAU{3p7(TzkGxH-K5YeW+1TyuF@Pz`;1{z90;IL}OMcXA3 z?-}f*yX?F!%vw{&V7u^G8isfi8CPhKyA$QD3VN7Y#?X7qLscTueQ z_=!(&q5&izcF5M`VfmbN|> zr55nwR~LHWLO*F$b7UP`wM@C=Q2r?vY>xZ#TaE!H!Q|`k z$%p4o&z@zhbYqde0r-h}#P#zDux$>LGJt}S>#Fs{oF{}@I*;@ua_Y+MjBKIv_fy@o z(gW9aRLn4!5+{s?7NPR67|kg57;gX^HkfxB{PD**{a2}~=S|QVQfCG|tyhpxRwcb; zw8)_a?fmj?IKw-CV3rl9X_fQn?QM!skuoV68hEJNEzA_Q_ag36MW#dH5pAKMW#yzx zEmuK#y!eljfq&L>jRqCq&z$aC(Mp88xNCEXzdO$Wj++sbk#6&n5qgM(K}gAM>fhgzUe{>@6K5U zc#0kmB@%S@j()e0mWMi3AK8MYLGpP-T~nb)lTXU#pULXn&@lP+sq_~oHplV6_o$&?%5@Ke;DPFJB^R?4>oddSnA)AUr;i#7d5=1%29-dD2=CKW+a zP-b=8flB|yk=wiciAwj*dX~jQDhcjJwouY_db_nYd*7oRZ^Pmlgj?)hO*MR*ys2sx zc&uuU2-OBJaE z?gq8#5`7R-vH=O|EfIM8zG+c-{QKy`V(`6LVU7%1lFt$LE-;GwZ?C>hQaHL<{FLO{ zD>0nmOl7U#^2Q-?_@evybXM*|zk-}&B>s&?p_Y_=?M$u#N#9*TFWTdQcMGe*_ZIOA z`A0cgBwGCd&bTLyUB#Eb64>{j6wb#*T?nKO(R+atRUTC;O=O((5#uIc6@68UShTY< zE@W0|a@%clCM$FH(vkzO{lMksrRXz8`^IQeFwjv<3heuGxW3!`{Q0~oD7g?Clfy_e z1?Mr~e*GT=fFzzkdwoYCMRL31Mw&HJmA*)}EUW>T$9Je5ij!$_a({J&zywWLEC8hB zs6ELEW(6EV5LRJJ2fHkj#glzf3Z-fmf;O`k*oT@=wMFrM46S^-{cYB@f!(3luPEAJ zj7JhiAJzkBD2wf>X90>>ca0bY`4n`{o-umXo`Q;^FgLkBllpN{$`O{!j0yRXky+1_ z>&?4?AmJ1{vzP_8_}-0ZDkxYyq;{{qTMK!w|H#Gedz)i~lHA(MD9#TW13yVj57p*z zY@UUSDy^UaC|z*j>#RVKh>WWXLQE!so#!LIL*Bg0_&~Ad%x-2!wTGeS`Nt1ZFL61a zFq|{~gYXLkDrcO!a|d<0Eswi2f0HS=iQuF8Y3+O#ls8$;815pE?eD` zf9{Fk$Bt2A@nXd)z6KMW4s^sPZ~wMCclo1AyZ4si9-qgb76N_;tmu|NQ~a@YaR}6y zN^w1Tmw-y4O1)F0)M$Lg00!%>1}Za6xTu_<-yHlse*X1D`J0+3c{|GiYz`6u28pK+ zc3}n$#+EtR$W^aJL&v2D6q~;705~B6Uq#ej z{Dbf(7}Q8LwSGk7EK<-$AQQo(G9Ie2TkK%@HJU5%l7<{HY|qcqm^_@u%h#T;Nu;h? zpr-UVq?5nXw}%W$U7Vv+wTHxgPgEIoERF_f_WHq;C~r;W76thpLJAxnDY#sv#P)`! z5*--+hITmcHRZ|P=ltPJAzrK29Y;zxyZ4D`0DMLerI>ElO%Kta9u92&uv~wew%%#x zK|GJTFrwjdEpx_t24R3lE`Qp+_qSf1atRrufdF|s;EipN+p?QX;gprUE$=MaNKFd* z%=G$UkT}kthovEY^$+9Z0w!l?HQK8^E`GIr%D?;Dx&sbpHo+&Y7Dd3{Xui+Pouhmf zbFFK83j#G$O#iuqAj;e(E5mwU#ZXPA6zMp;ic@}bQG&BR;{8{pU|Jv*LbS=-`9_s9 zm-zJnN|(WCewo4|(|Xggo4vvdsZ0v~8rJjoadPmt*}N8rqhHZsmITSHaBZ8}+ZbPR z6yKE`+lJZF(xc_Kg8kE~%1v+$r4uuP^R)fg7y88(nTdF>Qf=NkidDf@T-Pxta~N{W z$JIQjiZv%80Q4HhuH`41^-{Buj2a4Zj}%b#_r=aD!Lh%$Ga7F4zqFED>PSb0g>3wL zsCxh?i+F1PNKj6=kNcHOC>I{~Bl+D-*R}cB-P)6cIODEAUd`9HuJuU(HqAmv@vJVt zZZR@2JoR}}ZzcDRncL{LIC)5@${Z9L+O79A=5b0Xgz?t;vrUFbE>2;Xg+Uptx=9>A zhBxG`!PfK=_%jZ@>(xu|uGI#vG=J)Kn@Vsx!1?)6P3tnyTxgk?&!PtO6(}borsH%i z^hOLyXt&8Tlo-Cr=p&SGv35hFIbldcw*~-Ue*%B`_+EGs_3e6#`5x^#rDD0(@{Rj!R;9wD z6I%||HZX|1kWto1nI1PwB5>Bm1C9?KZhzizdg>$z3sGjJ&=8gd7fk-~vWH2vxMVGO zBMLv6LeDUiQ~*lZKN$t*$oc>W=@pC~0RutVo%KYuB^kfkRZdH{4me0cx> literal 0 HcmV?d00001 diff --git a/assets/ui/tool_shoot.png b/assets/ui/tool_shoot.png new file mode 100644 index 0000000000000000000000000000000000000000..50b5f7fe7ca6588f651d2714fbbeb4b01fb8926d GIT binary patch literal 1256 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrU|H|!;uumf=k46Rd5_&hTGyLg z@euAP+P^+=Ip2nJ(nmCzSTe6J_1X}+Dugj+Y4CoBt~K`+UMuXKd;CV7tKydRmPuUE zLb^f!|7o^*hUH!uFN^OJLl&_!tgs-kx_tAuR3IkI%d;WgO zdp4a5Cb*dH+9x$vb=705^iM z_feL_x$Xv21`81ei-3NHz5VISYonJbFTf4%=s1 zvt|Pu$m{H{1ReAh_evGx5381b%Dn{ZUagE1DCli>Ndq4sFiVdJjU%2qU@s2pv9b`nIXe?RijD3i9@jk zNT@7*$9$&j*0cB<8y1I^*2M04R(ZburI@Vg^-C{z{wuft_sjoV*VfW~zb4toSJlLZ z*!GKloNQnB|LN-X-4#U#E?jmo<#O5fdc{u8WS`St{SW27dpLXJ$@%ss`}9`LJ6^Qs z<&A^a#Sho-{r+-Y^4y6l-0I_d_sywhY%jYK^R=CS4e#>c_#a<|9!uXmR{QJBsX52} zKHmH;^=)a8@rjZ*5B?-oL@xRTG zdWYA_*G9+IeZ0&Z^iVP96hr8_-8vOY9KaBnb4s4EGb`jvj(2Znr-xqcJK_6N`sc53 zdn@#OqjybYh!(^D4;5#;-hY}cw(a>L`MQ034AVC5xvBo|mtkGZb`GJdAHQCGapl{c z1wEB-gyPkT8D)Mk=KbJ58~XfhSz+Pk^qOMH1-V@2=U>hEzVJ7Ll0Vaom62LEIAgvW zpT4he4GI8v$3IWj^Dho6V|vLth2hm6PH>njw(PO`k@tY(1}kPBiSx-YXGghz+J%yNpuV3 z7^~#{ebS5lS@zn$__sHl6__%WKDkzWdiLk`!?(MRNp!yY@p%5?%l{XhpZ`iGI`}|p zLn?oQv*XYuRu0pow{q4^gd Vom}xh4OoIPc)I$ztaD0e0sujQ8L9vP literal 0 HcmV?d00001 diff --git a/css/base.css b/css/base.css index 5a72a27..66a0007 100644 --- a/css/base.css +++ b/css/base.css @@ -441,6 +441,7 @@ h1 { .tool[data-tool="stone"] { --tool-icon: url("../assets/ui/tool_stone.webp"); } .tool[data-tool="genkotsu"] { --tool-icon: url("../assets/ui/tool_genkotsu.webp"); } .tool[data-tool="firecracker"] { --tool-icon: url("../assets/ui/tool_firecracker.webp"); } +.tool[data-tool="shoot"] { --tool-icon: url("../assets/ui/tool_shoot.png"); --tool-icon-zoom: 1.48; } .tool[data-tool="fence_v"] { --tool-icon: url("../assets/ui/tool_fence_v.webp"); } .tool[data-tool="fence_h"] { --tool-icon: url("../assets/ui/tool_fence_h.webp"); } .tool[data-tool="bed"] { --tool-icon: url("../assets/ui/tool_bed.webp"); } diff --git a/css/components.css b/css/components.css index d5fdc33..554b5c2 100644 --- a/css/components.css +++ b/css/components.css @@ -745,8 +745,8 @@ z-index: 11; overflow: hidden; background: linear-gradient(180deg, rgba(238, 247, 255, 0.98), rgba(221, 237, 255, 0.98)); - border-color: rgba(82,128,190,0.36); - box-shadow: 0 8px 18px rgba(58, 82, 112, 0.13), inset 0 1px 0 rgba(255,255,255,0.82); + border: 3px solid rgba(52,112,188,0.72); + box-shadow: 0 9px 22px rgba(58, 82, 112, 0.18), inset 0 0 0 1px rgba(255,255,255,0.86); } .tool-category[data-tool-category="operate"] .tool-category-toggle { background: linear-gradient(180deg, rgba(255,255,255,0.98), rgba(231, 243, 255, 0.98)); diff --git a/css/layout.css b/css/layout.css index c7b4fec..d69ca60 100644 --- a/css/layout.css +++ b/css/layout.css @@ -6,12 +6,13 @@ .tool[data-tool="delete"] { --tool-icon: url("../assets/ui/tool_delete.webp"); } .tool[data-tool="area_delete"] { --tool-icon: url("../assets/ui/tool_delete.webp"); } .tool[data-tool="new"] { --tool-icon: url("../assets/ui/tool_new.webp"); } +.tool[data-tool="shoot"] { --tool-icon: url("../assets/ui/tool_shoot.png"); --tool-icon-zoom: 1.48; } .tool[data-tool="poke"] { --tool-emoji: "\1F448"; } .tool[data-tool="pinch"] { --tool-emoji: "\1F90F"; } .tool[data-tool="water_hose"] { --tool-emoji: "\1F6BF"; } .tool[data-tool="copy"] { --tool-emoji: "⧉"; } -.tool[data-tool="area_delete"] { --tool-emoji: "✕"; } +.tool[data-tool="area_delete"] { --tool-emoji: "×"; } .tool[data-tool="rope"] { --tool-emoji: "╰"; } .tool[data-tool="rod"] { --tool-emoji: "━"; } .tool[data-tool="reciprocator"] { --tool-emoji: "⇄"; } @@ -41,10 +42,15 @@ .tool[data-tool="area_delete"] { --tool-icon-zoom: 1.42; } .tool[data-tool="pinch"].tool-emoji-icon::before { font-size: 22px; } .tool[data-tool="area_delete"].tool-emoji-icon::before { - font-size: 30px; + font-size: 31px; + line-height: 1; color: #f3a7aa; text-shadow: 0 1px 0 rgba(255,255,255,0.65), 0 2px 5px rgba(146,54,62,0.16); filter: none; + transform: translateY(-54%) scale(var(--tool-icon-zoom, 1)); +} +.tool-category[data-tool-category="operate"] .tool[data-tool="area_delete"].tool-emoji-icon::before { + transform: translate(-50%, -54%) scale(var(--tool-icon-zoom, 1)); } .tool[data-tool="ball"] { --tool-icon-zoom: 1.36; } diff --git a/index.html b/index.html index 11c5b1f..9685d88 100644 --- a/index.html +++ b/index.html @@ -7,11 +7,11 @@ - - - - - + + + + +
@@ -66,17 +66,17 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/js/audio.js b/js/audio.js index 666f224..0fd084b 100644 --- a/js/audio.js +++ b/js/audio.js @@ -303,6 +303,8 @@ const audio = { grab() { this.play("sfx_grab", { category: "ops", minGap: 0.08 }); }, drop() { this.play("sfx_drop", { category: "ops", minGap: 0.08 }); }, waterHose() { this.play("sfx_water_hose", { category: "ops", minGap: 0.20 }); }, + shoot() { this.play("sfx_shoot", { category: "ops", minGap: 0.045 }); }, + boltAction() { this.play("sfx_bolt_action", { category: "ops", minGap: 0.10 }); }, ballHit() { this.play("sfx_ball_hit", { category: "ops", minGap: 0.08 }); }, stoneImpact() { this.play("sfx_stone_impact", { category: "ops", minGap: 0.18 }); }, genkotsuImpact() { this.play("sfx_genkotsu_impact", { category: "ops", minGap: 0.20 }); setTimeout(() => this.play("sfx_ground_rumble", { category: "ops", minGap: 0.20 }), 80); }, diff --git a/js/collision_footprint_system.js b/js/collision_footprint_system.js index bc7881a..7991cdc 100644 --- a/js/collision_footprint_system.js +++ b/js/collision_footprint_system.js @@ -208,7 +208,9 @@ const otherRects = worldRef.solidObstacleRects?.(other) || []; const otherRadius = itemFootprintRadius(worldRef, other, otherRects); const hasMechanism = global.TarinaiMechanicalSystem?.isMechanicalType?.(item.type) || global.TarinaiMechanicalSystem?.isMechanicalType?.(other.type); - const margin = hasMechanism ? 1.25 : Math.max(4, Math.min(itemRadius, otherRadius) * 0.18); + const itemIsFence = typeof global.isFenceItemType === "function" ? global.isFenceItemType(item.type) : /fence/.test(String(item.type || "")); + const otherIsFence = typeof global.isFenceItemType === "function" ? global.isFenceItemType(other.type) : /fence/.test(String(other.type || "")); + const margin = (itemIsFence || otherIsFence) ? (item.type === "gate_fence" || other.type === "gate_fence" ? 1.5 : 2.5) : (hasMechanism ? 1.25 : Math.max(4, Math.min(itemRadius, otherRadius) * 0.18)); if (itemRects.length && otherRects.length) { if (itemRects.some(a => otherRects.some(b => rectsOverlap(a, b, margin)))) return true; continue; diff --git a/js/command_dispatcher.js b/js/command_dispatcher.js index 0c1e509..5d8561a 100644 --- a/js/command_dispatcher.js +++ b/js/command_dispatcher.js @@ -25,6 +25,12 @@ const id = String(toolId || "observe"); if (worldRef.tool === id) return ok({ toolId: id, changed: false }); worldRef.tool = id; + if (id !== "shoot") { + worldRef.hoverShootTarget = null; + worldRef.shootCursorActive = false; + worldRef.shootCursorOffsetX = 0; + worldRef.shootCursorOffsetY = 0; + } emit(worldRef, "tool:selected", { toolId: id }); return ok({ toolId: id, changed: true }); } diff --git a/js/constraint_system.js b/js/constraint_system.js index 8e0b7cd..8554365 100644 --- a/js/constraint_system.js +++ b/js/constraint_system.js @@ -363,8 +363,9 @@ if (obj.radius && obj.name) { obj.x += moveX; obj.y += moveY; - const kickScale = mode === "rod" ? 0.038 : 0.052; - const kickLimit = mode === "rod" ? 88 : 105; + const kickScale = mode === "rod" ? 0.020 : 0.052; + const kickLimit = mode === "rod" ? 54 : 105; + if (mode === "rod") { obj.vx = (obj.vx || 0) * 0.90; obj.vy = (obj.vy || 0) * 0.90; } obj.vx = clamp((obj.vx || 0) + constraintKick(moveX, dt, kickScale, kickLimit), -150, 150); obj.vy = clamp((obj.vy || 0) + constraintKick(moveY, dt, kickScale, kickLimit), -150, 150); if (obj.state === "sleep" || obj.sleeping) { @@ -384,8 +385,8 @@ // Project the rail body along its single legal axis. Powered motors are // intentionally stiff, so a rope/rod can slow them but not yank them far // off their drive path in one frame. - const railScale = mode === "rod" ? (powered ? 0.58 : 0.94) : (powered ? 0.22 : 0.78); - const railCap = mode === "rod" ? (powered ? 34 : 42) : 18; + const railScale = mode === "rod" ? (powered ? 0.46 : 0.76) : (powered ? 0.22 : 0.78); + const railCap = mode === "rod" ? (powered ? 22 : 30) : 18; const along = clamp(alongRaw * railScale, -railCap, railCap); if (Math.abs(along) < 0.001) return false; const beforePhase = ps(obj, "railPhase", 0); @@ -399,16 +400,16 @@ } const changed = Math.abs(ps(obj, "railPhase", 0) - beforePhase) > 0.0001; const current = ps(obj, "slideSpeed", 0); - const kick = constraintKick(along, dt, mode === "rod" ? (powered ? 0.0035 : 0.009) : (powered ? 0.0045 : 0.012), mode === "rod" ? (powered ? 18 : 44) : (powered ? 22 : 58)); - pset(obj, "slideSpeed", clamp(current * (powered ? 0.74 : 0.88) + kick, -120, 120), "constraint-slide-project"); + const kick = constraintKick(along, dt, mode === "rod" ? (powered ? 0.0025 : 0.0055) : (powered ? 0.0045 : 0.012), mode === "rod" ? (powered ? 12 : 26) : (powered ? 22 : 58)); + pset(obj, "slideSpeed", clamp(current * (powered ? 0.70 : (mode === "rod" ? 0.72 : 0.88)) + kick, -120, 120), "constraint-slide-project"); if (changed) commitConstraintMovedMechanical(obj, "constraint-reciprocator-project"); return changed; } if (obj.type === "poison_block") { const beforeX = Number(obj.x || 0) || 0; const beforeY = Number(obj.y || 0) || 0; - const blockScale = mode === "rod" ? 0.92 : 0.72; - const blockCap = mode === "rod" ? 34 : 18; + const blockScale = mode === "rod" ? 0.74 : 0.72; + const blockCap = mode === "rod" ? 24 : 18; const px = clamp(moveX * blockScale, -blockCap, blockCap); const py = clamp(moveY * blockScale, -blockCap, blockCap); if (Math.hypot(px, py) < 0.001) return false; @@ -428,8 +429,9 @@ nextVx -= nx * intoCorrection * 0.50; nextVy -= ny * intoCorrection * 0.50; } - nextVx += constraintKick(px, dt, 0.012, 36); - nextVy += constraintKick(py, dt, 0.012, 36); + if (mode === "rod") { nextVx *= 0.86; nextVy *= 0.86; } + nextVx += constraintKick(px, dt, mode === "rod" ? 0.006 : 0.012, mode === "rod" ? 20 : 36); + nextVy += constraintKick(py, dt, mode === "rod" ? 0.006 : 0.012, mode === "rod" ? 20 : 36); pset(obj, "xv", clamp(nextVx, -165, 165), "constraint-poison-project"); pset(obj, "yv", clamp(nextVy, -165, 165), "constraint-poison-project"); obj.vx = ps(obj, "xv", obj.vx || 0); @@ -456,8 +458,9 @@ obj.prevY = obj.y; obj.x += moveX; obj.y += moveY; - obj.vx = clamp((obj.vx || 0) + constraintKick(moveX, dt, mode === "rod" ? 0.032 : 0.042, mode === "rod" ? 62 : 78), -125, 125); - obj.vy = clamp((obj.vy || 0) + constraintKick(moveY, dt, mode === "rod" ? 0.032 : 0.042, mode === "rod" ? 62 : 78), -125, 125); + if (mode === "rod") { obj.vx = (obj.vx || 0) * 0.90; obj.vy = (obj.vy || 0) * 0.90; } + obj.vx = clamp((obj.vx || 0) + constraintKick(moveX, dt, mode === "rod" ? 0.016 : 0.042, mode === "rod" ? 42 : 78), -125, 125); + obj.vy = clamp((obj.vy || 0) + constraintKick(moveY, dt, mode === "rod" ? 0.016 : 0.042, mode === "rod" ? 42 : 78), -125, 125); return true; } @@ -514,7 +517,7 @@ const d = Math.max(0.001, Math.hypot(dx, dy)); const delta = d - length; if (mode === "rope" && delta <= 0) return false; - if (mode === "rod" && Math.abs(delta) < 0.35) return false; + if (mode === "rod" && Math.abs(delta) < 0.85) return false; const nx = dx / d; const ny = dy / d; const ma = endpointMass(pa.obj); @@ -523,7 +526,7 @@ const ib = Number.isFinite(mb) ? 1 / Math.max(0.1, mb) : 0; const sum = ia + ib || 1; const step = Math.max(0.012, Math.min(0.05, Number(dt || 0.016) || 0.016)); - const compliance = mode === "rod" ? 0.035 / (step * 60) : 0.46 / (step * 60); + const compliance = mode === "rod" ? 0.085 / (step * 60) : 0.46 / (step * 60); const target = delta / (1 + compliance); const cap = mode === "rod" ? Math.max(6.0, Math.min(46, length * maxFraction)) @@ -538,11 +541,11 @@ if (mode === "rope") { changed = solveOnce(a, b, 0.58, 0.044) || changed; } else { - const iterations = 7; + const iterations = 5; for (let i = 0; i < iterations; i += 1) { const aa = endpointWorld(ep(item, 0), item.world || null) || a; const bb = endpointWorld(ep(item, 1), item.world || null) || b; - changed = solveOnce(aa, bb, 0.96, 0.18) || changed; + changed = solveOnce(aa, bb, 0.82, 0.10) || changed; } } return changed; @@ -906,7 +909,7 @@ const ca = endpointWorld(ep(item, 0), worldRef) || aa; const cb = endpointWorld(ep(item, 1), worldRef) || bb; const stretch = ca && cb ? Math.abs(distXY(ca.x, ca.y, cb.x, cb.y) - length) : 0; - if (stretch > Math.max(0.75, length * 0.006)) { + if (stretch > Math.max(1.6, length * 0.012)) { item._rodStretchCorrectionCount = (item._rodStretchCorrectionCount || 0) + 1; item._rodLastStretch = stretch; changed = applyDistanceConstraint(item, ca, cb, Math.min(0.033, dt || 0.016), length, "rod") || changed; diff --git a/js/debug_tools.js b/js/debug_tools.js index 5bd1f95..ea60846 100644 --- a/js/debug_tools.js +++ b/js/debug_tools.js @@ -131,6 +131,7 @@ return hints.join(" ") || "-"; } + const DEBUG_REFRESH_MS = 750; window.setInterval(() => { const w = window.world; const input = window.TarinaiInputMode?.snapshot?.() || {}; @@ -154,7 +155,7 @@ `spatial dirtyReasons ${topMap(diag.spatial?.dirtyReasons, 4)} rebuildReasons ${topMap(diag.spatial?.rebuildReasons, 4)}`, `nearby obstacleRects hit:${diag.nearby?.obstacleRectHits ?? 0} miss:${diag.nearby?.obstacleRectMisses ?? 0} built:${diag.nearby?.obstacleRectBuilt ?? 0} bypass:${diag.nearby?.obstacleRectBypass ?? 0} constraintDirty mark:${diag.constraintDirty?.marked ?? 0} coal:${diag.constraintDirty?.coalesced ?? 0}`, `scheduler heap:${scheduler.heap ?? 0} realtime:${scheduler.activeRealtime ?? scheduler.realtime ?? 0} ran:${scheduler.lastRan ?? 0} itemRt:${scheduler.realtimeRan ?? 0} itemDue:${scheduler.dueRan ?? 0} constraints:${scheduler.constraints ?? 0} postPairs:${scheduler.postConstraintPairs ?? 0} rodStretch:${fmtMs(scheduler.constraintStats?.rodStretchMax || 0)} corr:${scheduler.constraintStats?.rodCorrections ?? 0}`, - `items active:${scheduler.activeRealtime ?? 0} asleep:${scheduler.sleeping ?? scheduler.heap ?? 0} budgetPairs:${scheduler.physicsBudget?.maxPairs ?? "?"} substeps:${scheduler.physics?.mechanical?.substeps ?? scheduler.mechanicalStats?.substeps ?? "?"}`, + `items active:${scheduler.activeRealtime ?? 0} asleep:${scheduler.sleeping ?? scheduler.heap ?? 0} budgetPairs:${scheduler.physicsBudget?.maxPairs ?? "?"} substeps:${scheduler.physics?.mechanical?.substeps ?? scheduler.mechanicalStats?.substeps ?? "?"} fenceCCD:${Boolean((scheduler.physics?.mechanical || scheduler.mechanicalStats)?.fenceSensitive)}`, `terrain dirty raw:${terrain.raw ?? 0} global:${terrain.global ?? 0} chunk:${terrain.chunk ?? 0} coalesced:${terrain.coalesced ?? 0} reasons:${topMap(terrain.reasons, 4)}`, `work ai ${diag.work?.stats?.aiRuns ?? 0}/${diag.work?.stats?.aiSkips ?? 0} env ${diag.work?.stats?.envRuns ?? 0}/${diag.work?.stats?.envSkips ?? 0} coll ${diag.work?.stats?.collisionRuns ?? 0}/${diag.work?.stats?.collisionSkips ?? 0}`, `hints ${diagnosticHints(diag, perf)}`, @@ -173,5 +174,5 @@ : `tarinai debug fps ${window.__tarinaiFps ?? "?"} frame ${fmtMs(perf.frameAvg || 0)}ms`; if (Date.now() >= copiedMessageUntil && copyBtn.textContent !== "Copy") copyBtn.textContent = "Copy"; if (!minimized) body.textContent = lastText; - }, 500); + }, DEBUG_REFRESH_MS); })(); diff --git a/js/health.js b/js/health.js index 24bb899..ba03579 100644 --- a/js/health.js +++ b/js/health.js @@ -11,6 +11,9 @@ const HEALTH = (() => { poke: "\u3064\u3064\u304b\u308c\u3059\u304e", firecracker: "\u7206\u7af9", genkotsu: "\u3052\u3093\u3053\u3064", + shooting: "射撃", + stoneCrush: "石に潰された", + weakness: "衰弱", poisonBlock: "毒ブロック", accident: "\u4e8b\u6545", collision: "\u885d\u7a81", @@ -30,6 +33,10 @@ const HEALTH = (() => { const text = String(reason || ""); if (!text) return ""; if (text.includes(WEAKENED_SUFFIX)) return text.replace(/\u3067\u8870\u5f31.*$/, ""); + if (/射撃|shoot/.test(text)) return CAUSES.shooting; + if (/石に潰された|石.*潰|stone.*crush|crushed.*stone/.test(text)) return CAUSES.stoneCrush; + const collisionWith = text.match(/([^、。\s]+)に衝突/); + if (collisionWith) return `${collisionWith[1]}に衝突`; if (/\u55a7\u5629|fight|headbutt/.test(text)) return CAUSES.fight; if (/\u3052\u3093\u3053\u3064|genkotsu/.test(text)) return CAUSES.genkotsu; if (/毒ブロック|poison.?block/.test(text)) return CAUSES.poisonBlock; @@ -37,7 +44,7 @@ const HEALTH = (() => { if (/\u77ee\u5c0f\u85ac|dwarf/.test(text)) return CAUSES.dwarfDrug; if (/\u7206\u7af9|firecracker|explosion/.test(text)) return CAUSES.firecracker; if (/\u4ed5\u69d8\u306b\u3088\u308a\u753b\u9762\u5916\u3067\u524a\u9664|\u753b\u9762\u5916\u3067\u524a\u9664|out.*bounds|offscreen/.test(text)) return CAUSES.outOfBounds; - if (/\u885d\u7a81|collision/.test(text)) return CAUSES.collision; + if (/\u885d\u7a81|collision|急激な速度変化/.test(text)) return CAUSES.collision; if (/\u3064\u3064\u304b\u308c|\u3064\u3064\u304d|poke/.test(text)) return CAUSES.poke; if (/\u306d\u3080\u308a\u75c5|sleep.*disease/.test(text)) return CAUSES.sleepDisease; if (/\u7206\u767a\u75c5|explosion.*disease/.test(text)) return CAUSES.explosionDisease; @@ -50,7 +57,8 @@ const HEALTH = (() => { } if (/\u98e2|\u7a7a\u8179|\u98df\u3079\u7269|hunger/.test(text)) return CAUSES.hunger; if (/\u30b9\u30c8\u30ec\u30b9|stress/.test(text)) return CAUSES.stress; - if (/\u30dc\u30fc\u30eb|\u843d\u3061|\u843d\u4e0b|\u77f3|\u9053\u5177|\u4e8b\u6545|\u5f53\u305f|ball|drop|stone|accident/.test(text)) return CAUSES.accident; + if (/\u77f3|stone/.test(text)) return CAUSES.stoneCrush; + if (/\u30dc\u30fc\u30eb|\u843d\u3061|\u843d\u4e0b|\u9053\u5177|\u4e8b\u6545|\u5f53\u305f|ball|drop|accident/.test(text)) return CAUSES.accident; if (/\u5bff\u547d|\u5929\u5bff/.test(text)) return CAUSES.lifespan; return ""; } @@ -96,24 +104,33 @@ const HEALTH = (() => { const recentMajor = hasRecentMajorDamage(t); const recent = recentDamageCause(t, 20); const fighting = isFightingContext(t, recent); - if (recentMajor && t.lastMajorDamageCause === CAUSES.collision) return CAUSES.collision; - if (recentMajor && (!direct || direct === t.lastMajorDamageCause || opts.fromDamage || t.energy <= 18 || t.mood <= 16 || t.stress >= 124 || t.hunger >= 112)) { + + // Direct damage death: use the immediate/direct source, not a weakened suffix. + if (opts.fromDamage) { + if (direct) return direct; + if (recentMajor && t.lastMajorDamageCause) return t.lastMajorDamageCause; + if (recent) return recent; + return CAUSES.accident; + } + + if (recentMajor && t.lastMajorDamageCause === CAUSES.collision && !(t.energy <= 20 || t.mood <= 16 || t.stress >= 124 || t.hunger >= 112)) return CAUSES.collision; + if (recentMajor && (!direct || direct === t.lastMajorDamageCause || t.energy <= 18 || t.mood <= 16 || t.stress >= 124 || t.hunger >= 112)) { return weakenedDeathReasonFor(t.lastMajorDamageCause); } const weakenedTrace = recentDamageCause(t, WEAKENED_TRACE_WINDOW); const traceCanWeaken = weakenedTrace && weakenedTrace !== CAUSES.stress && weakenedTrace !== CAUSES.hunger && weakenedTrace !== CAUSES.lifespan && weakenedTrace !== CAUSES.outOfBounds; - if (traceCanWeaken && (!direct || direct === CAUSES.stress || direct === CAUSES.hunger || direct === weakenedTrace || opts.fromDamage) && (t.energy <= 20 || t.mood <= 16 || t.stress >= 124 || t.hunger >= 114)) { + if (traceCanWeaken && (!direct || direct === CAUSES.stress || direct === CAUSES.hunger || direct === weakenedTrace) && (t.energy <= 20 || t.mood <= 16 || t.stress >= 124 || t.hunger >= 114)) { return weakenedDeathReasonFor(weakenedTrace); } if (direct && direct !== CAUSES.stress) return direct; if (t.zunchiDisease && ((t.zunchiDiseaseSeverity || 0) >= 0.30 || /\u75c5|zunchi/.test(text))) return CAUSES.zunchiDisease; if (t.hunger >= 108 || (t.hunger >= 94 && t.energy <= 26) || /\u98e2|\u7a7a\u8179|hunger/.test(text)) return CAUSES.hunger; - if (fighting && (t.energy <= 44 || t.stress >= 112 || t.mood <= 22 || opts.fromDamage)) return CAUSES.fight; - if (recent && recent !== CAUSES.stress && (t.energy <= 22 || t.mood <= 14 || t.stress >= 126 || opts.fromDamage)) return weakenedDeathReasonFor(recent); + if (fighting && (t.energy <= 44 || t.stress >= 112 || t.mood <= 22)) return CAUSES.fight; + if (recent && recent !== CAUSES.stress && (t.energy <= 22 || t.mood <= 14 || t.stress >= 126)) return weakenedDeathReasonFor(recent); if (text.includes(CAUSES.lifespan) || text.includes("\u5bff\u547d")) return CAUSES.lifespan; if (direct) return direct; if (t.stress >= 118 || /\u30b9\u30c8\u30ec\u30b9|stress|\u6c17\u5206/.test(text)) return CAUSES.stress; - if (t.energy <= 0.5) return CAUSES.accident; + if (opts.lowHealth || t.energy <= 0.5) return CAUSES.weakness; return ""; } @@ -122,11 +139,42 @@ const HEALTH = (() => { if (text.includes(WEAKENED_SUFFIX)) return text; const cause = dominantDeathCause(t, text, opts) || CAUSES.accident; if (cause.includes(WEAKENED_SUFFIX)) return cause; - const canWeaken = cause && !cause.endsWith("\u75c5") && cause !== CAUSES.hunger && cause !== CAUSES.stress && cause !== CAUSES.lifespan && cause !== CAUSES.outOfBounds && cause !== CAUSES.collision && cause !== CAUSES.genkotsu; + if (opts.fromDamage) return cause; + const canWeaken = cause && !cause.endsWith("\u75c5") && cause !== CAUSES.hunger && cause !== CAUSES.stress && cause !== CAUSES.lifespan && cause !== CAUSES.outOfBounds && cause !== CAUSES.collision && cause !== CAUSES.genkotsu && cause !== CAUSES.weakness; if (canWeaken && (opts.weakened || (hasRecentMajorDamage(t) && cause === t.lastMajorDamageCause))) return weakenedDeathReasonFor(cause); return cause; } + + function maybeReleaseZunchiFromDamage(t, actualLoss = 0, cause = "") { + if (!t || !t.world || t.dead) return false; + const loss = Math.max(0, Number(actualLoss) || 0); + if (loss <= 0.1) return false; + const now = t.world.time || 0; + if (now < Number(t.nextDamageZunchiAt || -999)) return false; + const probability = Math.max(0.06, Math.min(0.82, 0.06 + loss / 48)); + if (Math.random() >= probability) return false; + t.nextDamageZunchiAt = now + Math.max(0.55, 1.55 - Math.min(0.9, loss / 38)); + if (t.hasLodgedPinEffect?.("blocksZunchi")) { + t.oshiriByoZunchiStock = Math.min(24, Math.max(0, t.oshiriByoZunchiStock || 0) + 1); + t.thought = "ダメージでずんちを我慢している"; + return false; + } + const side = t.facingDir ? t.facingDir() : (t.facing || 1); + const jitter = (Math.random() - 0.5) * Math.max(4, (t.radius || 22) * 0.25); + const x = t.x - side * (t.radius || 22) * (0.72 + Math.random() * 0.24); + const y = t.y + (t.radius || 22) * (0.24 + Math.random() * 0.25) + jitter; + t.world.spawnZunchi?.(x, y, t); + t.poopCount = (t.poopCount || 0) + 1; + t.digest = Math.max(0, Number(t.digest || 0) - 1.0); + t.nextPoopBubbleAt = now + 2.0; + t.bubble?.("ぶりゅっ", 1.1, "rgba(74,91,50,0.78)", { force: true }); + if (now > Number(t.nextDamageZunchiLogAt || -999)) { + t.nextDamageZunchiLogAt = now + 10; + t.world.log?.(`${t.name}はダメージでずんちを放出した。`, "accident", { participants: [t] }); + } + return true; + } function applyDamage(t, amount, reason = "") { const maxEnergy = typeof tarinaiMaxEnergy === "function" ? tarinaiMaxEnergy(t) : (Number(t.maxEnergy) || 100); t.maxEnergy = maxEnergy; @@ -142,14 +190,14 @@ const HEALTH = (() => { if (plushie && actualLoss >= 1) plushie.damage(actualLoss, t.world, null); if (cause === CAUSES.fight || /\u55a7\u5629|fight/.test(String(reason || ""))) t.recordBleedExposure(); audio.damage?.(actualLoss); + maybeReleaseZunchiFromDamage(t, actualLoss, cause || reason); if (t.sleepDisease) t.recoverSleepDisease("\u30c0\u30e1\u30fc\u30b8\u3067\u306d\u3080\u308a\u75c5\u304c\u6cbb\u3063\u305f"); if (t.wakeFromDamage) t.wakeFromDamage(cause || reason); if (t.maybeBecomeTimidAfterDamage) t.maybeBecomeTimidAfterDamage(cause || reason); t.showHpBar(); } if (t.energy <= 0.5) { - const majorNow = actualLoss >= Math.max(10, before * 0.42); - t.die(normalizeDeathReason(t, reason || cause, { fromDamage: true, weakened: majorNow })); + t.die(normalizeDeathReason(t, reason || cause, { fromDamage: true })); } } @@ -172,6 +220,7 @@ const HEALTH = (() => { normalizeDeathReason, applyDamage, briefDeathReason, + maybeReleaseZunchiFromDamage, }); })(); diff --git a/js/item_dynamic_duplicator_system.js b/js/item_dynamic_duplicator_system.js index 000c0cd..8f54a68 100644 --- a/js/item_dynamic_duplicator_system.js +++ b/js/item_dynamic_duplicator_system.js @@ -14,89 +14,18 @@ const s = support(); const syncRoles = s.syncDuplicatorRoles || global.TarinaiDuplicatorRuntime?.syncRoles; const applyStoredPin = s.duplicatorApplyStoredPin; - const canLoadNow = s.duplicatorCanLoadNow; - const loadPointFor = s.duplicatorLoadPoint || global.TarinaiDuplicatorRuntime?.loadPoint; - const loadTypeForItem = s.duplicatorLoadTypeForItem || global.TarinaiDuplicatorRuntime?.loadTypeForItem; - const candidateReach = s.duplicatorCandidateReach; - const setStoredType = s.duplicatorSetStoredType || global.TarinaiDuplicatorRuntime?.setStoredType; - if (typeof syncRoles !== "function" || typeof loadPointFor !== "function" || typeof loadTypeForItem !== "function" || typeof setStoredType !== "function") return false; + if (typeof syncRoles !== "function") return false; item.amount = 999; syncRoles(item); if (typeof applyStoredPin === "function") applyStoredPin(item, worldRef); item.duplicatorPinFlash = Math.max(0, (item.duplicatorPinFlash || 0) - dt); - if (!worldRef?.nearbyItems) return true; - if (typeof canLoadNow === "function" && !canLoadNow(item, worldRef)) { - item._duplicatorCandidateKey = ""; - item._duplicatorCandidateSince = 0; - return true; - } - - const loadPoint = loadPointFor(item); - const pickupRadius = Math.max(68, (item.r || 34) + 44); - const candidates = Array.from(worldRef.nearbyItems(item.x, item.y, pickupRadius, true) || []); - // SpatialGrid の分類漏れを補う。ただし、複製機からかなり近いものだけに限定し、 - // 移動中の複製機が周辺アイテムを吸い込む挙動を避ける。 - if (worldRef.items) { - for (const candidate of worldRef.items) { - if (!candidate || candidates.includes(candidate) || candidate === item || candidate.dead) continue; - const approxReach = pickupRadius + Math.max(16, candidate.r || 12); - if (distXY(item.x, item.y, candidate.x, candidate.y) <= approxReach) candidates.push(candidate); - } - } - - let best = null, bestType = "", bestSlotD = Infinity, bestScore = Infinity; - for (const it of candidates) { - if (!it || it === item || it.dead || it.playerHeld || it._heldByPlayer) continue; - const loadType = loadTypeForItem(it); - if (!loadType) continue; - if ((it.foodServingsRemaining ?? it.amount ?? 0) <= 0) continue; - const slotD = distXY(loadPoint.x, loadPoint.y, it.x, it.y); - const centerD = distXY(item.x, item.y, it.x, it.y); - const slotReach = typeof candidateReach === "function" ? candidateReach(it) : Math.max(20, Math.min(36, (it?.r || 12) * 0.82 + 13)); - const bodyReach = Math.max(22, (item.r || 34) * 0.46 + (it.r || 12) * 0.36); - if (slotD > slotReach && centerD > bodyReach) continue; - // 基本は投入口に近いものを優先。同距離なら置かれたばかりのものを優先し、 - // 複数候補があるときに意図しない古いアイテムへ寄りにくくする。 - const score = slotD + Math.max(0, Number(it.age || 0)) * 0.012; - if (score < bestScore) { - best = it; - bestType = loadType; - bestSlotD = slotD; - bestScore = score; - } - } - - if (!best || !bestType) { - item._duplicatorCandidateKey = ""; - item._duplicatorCandidateSince = 0; - return true; - } - - const candidateKey = `${best.id || ""}:${bestType}`; - const now = Number(worldRef.time || 0); - if (item._duplicatorCandidateKey !== candidateKey) { - item._duplicatorCandidateKey = candidateKey; - item._duplicatorCandidateSince = now; - return true; - } - const dwell = item.storedFoodType ? (s.DUPLICATOR_REPLACE_DWELL_SECONDS ?? 0.70) : (s.DUPLICATOR_LOAD_DWELL_SECONDS ?? 0.38); - if (now - Number(item._duplicatorCandidateSince || 0) < dwell) return true; - - const changed = item.storedFoodType !== bestType; - if (!changed && item.storedFoodType) { - item._duplicatorCandidateKey = ""; - item._duplicatorCandidateSince = 0; - return true; - } - - setStoredType(item, bestType, worldRef, { consumeItem: best, direct: false, force: false, log: false, emit: false }); - // Item.dead is a getter based on amount. Do not assign to it. - worldRef.markItemBucketsDirty?.(changed ? "duplicator-reloaded" : "duplicator-loaded"); - worldRef.markSpatialDirty?.(changed ? "duplicator-reloaded" : "duplicator-loaded"); - worldRef.markTerrainDirty?.(changed ? "duplicator-reloaded" : "duplicator-loaded"); - worldRef.emit?.("duplicator:loaded", { duplicator: item, foodType: item.storedFoodType, replaced: changed, slotDistance: bestSlotD }); - worldRef.log?.(`複製機に${item.storedFoodLabel}をセットした。`, typeof isPinType === "function" && isPinType(item.storedFoodType) ? "observe" : "food"); + // 39.15.27: auto-loading by contact is intentionally disabled. + // A duplicator accepts a stored item only through the explicit player + // click path (World.directSetDuplicatorAt / direct:true). This prevents + // dropped or pushed items from accidentally changing its setup. + item._duplicatorCandidateKey = ""; + item._duplicatorCandidateSince = 0; return true; } diff --git a/js/item_lifecycle_support.js b/js/item_lifecycle_support.js index 4acad1b..0480e5d 100644 --- a/js/item_lifecycle_support.js +++ b/js/item_lifecycle_support.js @@ -14,7 +14,7 @@ const DUPLICATOR_STORABLE_TYPES = new Set([ function duplicatorLoadTypeForItem(item) { if (!item || item.dead || item.type === "duplicator") return ""; const type = String(item.type || ""); - if (!type || type === "water_bowl" || type === "grass") return ""; + if (!type || type === "grass") return ""; if ((typeof isPinType === "function" && isPinType(type)) && item.pinState === "lodged") return ""; // Explicit list first. これで「ずんだ餅」「へこ餅」「けんか餅」が // serving-food 判定や medicine role の揺れに左右されず複製機へ入る。 @@ -23,7 +23,7 @@ function duplicatorLoadTypeForItem(item) { if (typeof isParamEffectItemType === "function" && isParamEffectItemType(type)) return type; const foodDef = global.TarinaiItemRegistry?.food?.get?.(type); if (foodDef && (Number(foodDef.nutrition || 0) > 0 || foodDef.effectId)) return type; - if (typeof roleMatches === "function" && roleMatches(item, "medicine") && type !== "water_bowl") return type; + if (typeof roleMatches === "function" && roleMatches(item, "medicine")) return type; return ""; } @@ -66,6 +66,7 @@ function syncDuplicatorRoles(item) { function duplicatorSetStoredType(duplicator, storedType = "", worldRef = null, options = {}) { if (!duplicator || duplicator.type !== "duplicator") return false; + if (options.direct !== true && options.force !== true) return false; const type = String(storedType || ""); if (!type) return false; const probe = { type, amount: 1, foodServingsRemaining: 1, dead: false }; diff --git a/js/item_registry.js b/js/item_registry.js index 5b1f399..f5ded3c 100644 --- a/js/item_registry.js +++ b/js/item_registry.js @@ -43,8 +43,9 @@ const TOOL_DEFINITIONS = Object.freeze({ pinch: { id: "pinch", label: "\u3064\u307e\u3080", placeable: false, scalable: false, iconText: "\u{1F90F}", tooltip: "たりないや一部の置きものを移動させる。" }, new: { id: "new", label: "\u8ffd\u52a0", placeable: false, scalable: false, icon: "assets/ui/tool_new.webp", tooltip: "\u753b\u9762\u5916\u304b\u3089\u65b0\u3057\u3044\u305f\u308a\u306a\u3044\u3092\u547c\u3076\u3002" }, water_hose: { id: "water_hose", label: "\u6d17\u6d44", placeable: false, scalable: false, iconText: "\u{1F6BF}", tooltip: "\u30c9\u30e9\u30c3\u30b0\u3067\u6c5a\u308c\u3092\u304d\u308c\u3044\u306b\u3059\u308b\u3002" }, - rope: { id: "rope", label: "ヒモ", placeable: false, scalable: false, iconText: "╰", tooltip: "2つの対象を順にクリックして、伸び縮みしないヒモで接続する。機械体・柵・ヒモ・棒はクリック地点、それ以外は中心につなぐ。" }, + rope: { id: "rope", label: "ヒモ", placeable: false, scalable: false, iconText: "╰", tooltip: "2つの対象を順にクリックしてふにゃふにゃしたヒモで繋ぐ。" }, rod: { id: "rod", label: "棒", placeable: false, scalable: false, iconText: "━", tooltip: "2つの対象を順にクリックして、曲がらない棒で接続する。" }, + shoot: { id: "shoot", label: "射撃", placeable: false, scalable: false, icon: "assets/ui/tool_shoot.png", tooltip: "銃で攻撃する。" }, zunchi: { id: "zunchi", itemType: "zunchi", label: "\u305a\u3093\u3061", placeable: true, scalable: true, radius: 14, amount: 240, icon: "assets/ui/tool_zunchi.webp", tooltip: "\u305f\u308a\u306a\u3044\u306e\u305a\u3093\u3061\u3002\u75c5\u6c17\u3084\u8349\u306e\u80a5\u6599\u306b\u95a2\u308f\u308b\u3002" }, sweet: { id: "sweet", itemType: "sweet", label: "\u305a\u3093\u3060\u9905", placeable: true, scalable: true, radius: 13, amount: 62, icon: "assets/ui/tool_sweet.webp", tooltip: "\u305f\u308a\u306a\u3044\u306e\u5927\u597d\u7269\u3002\u4e00\u90e8\u306e\u75c5\u6c17\u3092\u6cbb\u305b\u308b\u3002" }, love_mochi: { id: "love_mochi", itemType: "love_mochi", label: "\u3078\u3053\u9905", placeable: true, scalable: true, radius: 13, amount: 62, icon: "assets/ui/tool_love_mochi.webp", tooltip: "\u98df\u5f8c\u3057\u3070\u3089\u304f\u7e41\u6b96\u884c\u52d5\u304c\u8d77\u304d\u3084\u3059\u304f\u306a\u308b\u3002" }, @@ -78,7 +79,7 @@ const TOOL_DEFINITIONS = Object.freeze({ bounce_fence_v: { id: "bounce_fence_v", itemType: "bounce_fence_v", label: "\u30d0\u30a6\u30f3\u30b9\u67f5", placeable: true, scalable: true, radius: 42, amount: 999, collisionShape: "oriented_rect", tooltip: "\u4f55\u304b\u304c\u5f53\u305f\u308b\u3068\u901f\u3081\u306b\u8df3\u306d\u8fd4\u3059\u67f5\u3002Q/E\u306745\u5ea6\u3001Shift+Q/E\u30675\u5ea6\u305a\u3064\u5411\u304d\u3092\u5909\u3048\u308b\u3002" }, gate_fence: { id: "gate_fence", itemType: "gate_fence", label: "\u30b2\u30fc\u30c8\u67f5", placeable: true, scalable: true, radius: 42, amount: 999, collisionShape: "oriented_rect", tooltip: "\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u958b\u9589\u3059\u308b\u67f5\u3002Q/E\u306745\u5ea6\u3001Shift+Q/E\u30675\u5ea6\u305a\u3064\u5411\u304d\u3092\u5909\u3048\u308b\u3002" }, rotator: { id: "rotator", itemType: "rotator", label: "回転体", placeable: true, scalable: false, radius: 64, amount: 999, iconText: "↻", collisionShape: "custom_rotator", tooltip: "回転する機械。クリックすると形状や速度を設定できる。" }, - poison_block: { id: "poison_block", itemType: "poison_block", label: "毒ブロック", placeable: true, scalable: false, radius: 64, amount: 999, iconText: "☠", collisionShape: "custom_poison_block", tooltip: "自由に形を描ける毒の物理ブロック。外力で動き、触れたたりないにダメージ。当たり判定ON/OFFを切り替えられる。" }, + poison_block: { id: "poison_block", itemType: "poison_block", label: "毒ブロック", placeable: true, scalable: false, radius: 64, amount: 999, iconText: "☠", collisionShape: "custom_poison_block", tooltip: "当たると皮膚が痺れる。クリックで形状が変更できる。" }, reciprocator: { id: "reciprocator", itemType: "reciprocator", label: "往復体", placeable: true, scalable: false, radius: 64, amount: 999, iconText: "⇄", collisionShape: "custom_reciprocator", tooltip: "往復する機械。クリックすると形状や速度を設定できる。" }, water: { id: "water", itemType: "water", label: "水滴", placeable: true, scalable: true, radius: 12, amount: 64, iconText: "💧", tooltip: "雨の日にも現れる水滴。たりないが飲める。複製機にもセットできる。" }, trace: { id: "trace", itemType: "trace", label: "死骸", placeable: false, scalable: false, radius: 16, amount: 220, simulationOnly: true }, @@ -165,7 +166,7 @@ const TOOL_CATEGORIES = Object.freeze([ { id: "medicine", label: "\u85ac", themeClass: "tool-category-medicine", order: 30, toolIds: ["sleep_drug", "laxative", "protein", "niteropu", "ammo", "mystery_drug", "mercury", "giant_drug", "dwarf_drug"] }, { id: "habitat", label: "\u751f\u6d3b", themeClass: "tool-category-habitat", order: 40, toolIds: ["zunchi", "bed", "nest_box", "ball", "signboard"] }, { id: "physics", label: "物理", themeClass: "tool-category-physics", order: 45, toolIds: PHYSICS_TOOL_IDS }, - { id: "hazard", label: "\u5371\u967a", themeClass: "tool-category-hazard", order: 50, toolIds: ["stone", "genkotsu", "firecracker", "pushpin", "oshibyo", "ant_nest"] }, + { id: "hazard", label: "\u5371\u967a", themeClass: "tool-category-hazard", order: 50, toolIds: ["stone", "genkotsu", "firecracker", "pushpin", "oshibyo", "shoot", "ant_nest"] }, ]); function toolCategories() { @@ -247,21 +248,6 @@ function toolTipsFromDefinitions() { "fieldScale": 1, "accessibleShapeTraits": ["horizontal", "oval", "liquid", "silver"] }, - "water_bowl": { - "renderer": "water_bowl", - "shape": "bowl_with_horizontal_oval_water", - "palette": { - "bowlFill": "rgba(171,120,76,0.72)", - "bowlStroke": "rgba(94,69,48,0.55)", - "waterFill": "rgba(86,157,224,0.58)", - "waterStroke": "rgba(62,113,178,0.36)", - "highlight": "rgba(255,255,255,0.54)" - }, - "scale": 1, - "uiPreviewScale": 1, - "fieldScale": 1, - "accessibleShapeTraits": ["bowl", "horizontal", "oval", "water", "blue"] - }, "sleep_drug": { "renderer": "sleep_tablet", "shape": "moon_tablet", @@ -379,7 +365,6 @@ function toolTipsFromDefinitions() { zunda_juice: { label: "\u305a\u3093\u3060\u6c41", nutrition: 15.0, hungerRelief: 0.92, interest: "medicine_low", decayRateMultiplier: 1.12, hygienePenalty: 0.055, effectId: "zunda_juice", removesItemEffects: true }, grass: { label: "\u8349", nutrition: 2.6, hungerRelief: 0.55, interest: "grass_like", decayRateMultiplier: 1.0, hygienePenalty: 0 }, water: { label: "水滴", nutrition: 0, hungerRelief: 0, interest: "water", decayRateMultiplier: 1.0, hygienePenalty: 0 }, - water_bowl: { label: "水の皿", nutrition: 0, hungerRelief: 0, interest: "water", decayRateMultiplier: 1.0, hygienePenalty: 0 }, ant_corpse: { label: "\u30a2\u30ea\u306e\u6b7b\u9ab8", nutrition: 4.2, hungerRelief: 0.62, interest: "corpse", decayRateMultiplier: 1.0, hygienePenalty: 0.065 } }; diff --git a/js/item_render_runtime.js b/js/item_render_runtime.js index eba3de7..3fc4a49 100644 --- a/js/item_render_runtime.js +++ b/js/item_render_runtime.js @@ -209,22 +209,6 @@ draw(ctx, t, lighting = null) { ctx.stroke(); } ctx.restore(); - } else if (this.type === "water_bowl") { - const palette = visualPaletteFor("water_bowl"); - ctx.fillStyle = palette.bowlFill || "rgba(171, 120, 76, 0.72)"; - ctx.strokeStyle = palette.bowlStroke || "rgba(94, 69, 48, 0.55)"; - ctx.lineWidth = 2.2; - ctx.beginPath(); - ctx.ellipse(0, 2, this.r * 1.35, this.r * 0.78, 0, 0, Math.PI * 2); - ctx.fill(); ctx.stroke(); - ctx.fillStyle = palette.waterFill || "rgba(86, 157, 224, 0.58)"; - ctx.strokeStyle = palette.waterStroke || "rgba(62, 113, 178, 0.36)"; - ctx.lineWidth = 1.6; - ctx.beginPath(); - ctx.ellipse(0, -1, this.r * 1.02, this.r * 0.50, 0, 0, Math.PI * 2); - ctx.fill(); ctx.stroke(); - ctx.fillStyle = palette.highlight || "rgba(255,255,255,0.54)"; - ctx.beginPath(); ctx.arc(-this.r * 0.32, -this.r * 0.18, 2.8, 0, Math.PI * 2); ctx.fill(); } else if (this.type === "water") { drawOvalWaterDropSprite(ctx, this.r * visualFieldScaleFor("water"), visualPaletteFor("water")); } else if (this.type === "grass") { @@ -661,31 +645,30 @@ draw(ctx, t, lighting = null) { ctx.lineCap = "round"; ctx.lineJoin = "round"; ctx.globalAlpha *= enabled ? 1 : 0.48; - if (!enabled) ctx.setLineDash([10, 7]); ctx.strokeStyle = styleNight ? "#4d8e4e" : "#5cac4d"; ctx.lineWidth = thick; - ctx.shadowColor = enabled ? (styleNight ? "rgba(92,190,86,0.34)" : "rgba(62,170,54,0.28)") : "rgba(70,120,70,0.16)"; + ctx.shadowColor = styleNight ? "rgba(92,190,86,0.34)" : "rgba(62,170,54,0.28)"; ctx.shadowBlur = tier === "low" ? 0 : (tier === "mid" ? Math.max(2, thick * 0.18) : Math.max(4, thick * 0.32)); strokeSegments(ctx, this, segments, "body"); ctx.shadowBlur = 0; ctx.setLineDash([]); if (tier !== "low") { - ctx.strokeStyle = enabled ? (styleNight ? "rgba(226,255,218,0.46)" : "rgba(255,255,255,0.50)") : "rgba(245,255,236,0.28)"; + ctx.strokeStyle = styleNight ? "rgba(226,255,218,0.46)" : "rgba(255,255,255,0.50)"; ctx.lineWidth = Math.max(1.4, thick * 0.22); strokeSegments(ctx, this, segments, "body"); } ctx.restore(); - ctx.fillStyle = enabled ? (styleNight ? "#263b27" : "#efffe9") : (styleNight ? "#303934" : "#eef4e8"); - ctx.strokeStyle = enabled ? (styleNight ? "#80c56e" : "#3e8f35") : "rgba(78,118,74,0.72)"; + ctx.fillStyle = styleNight ? "#263b27" : "#efffe9"; + ctx.strokeStyle = styleNight ? "#80c56e" : "#3e8f35"; ctx.lineWidth = 2.2; ctx.beginPath(); ctx.arc(0, 0, Math.max(8, thick * 0.74), 0, Math.PI * 2); ctx.fill(); ctx.stroke(); - ctx.fillStyle = enabled ? (styleNight ? "#d8ffd0" : "#26711f") : "rgba(70,92,68,0.70)"; + ctx.fillStyle = styleNight ? "#d8ffd0" : "#26711f"; ctx.font = `bold ${Math.max(10, thick * 0.84)}px ui-rounded, sans-serif`; ctx.textAlign = "center"; ctx.textBaseline = "middle"; - ctx.fillText(enabled ? "毒" : "透", 0, 0); + ctx.fillText("毒", 0, 0); } else if (this.type === "reciprocator") { const bodyAngle = typeof itemAngleFor === "function" ? itemAngleFor(this) : (Number(this.angle) || 0); const pb = window.TarinaiPhysicsBodySystem; diff --git a/js/item_type_initializers.js b/js/item_type_initializers.js index 3f40446..b33ca0a 100644 --- a/js/item_type_initializers.js +++ b/js/item_type_initializers.js @@ -7,8 +7,8 @@ function initializeItemTypeState(item, type, x, y) { const bodySchemaVersion = globalThis.TarinaiPhysicsBodySystem?.BODY_SCHEMA_VERSION || 4; const constraintSchemaVersion = globalThis.TarinaiPhysicsBodySystem?.CONSTRAINT_SCHEMA_VERSION || 4; if (isServingFoodType(type) || ["grass", "ant_corpse", "zunchi"].includes(type)) item.roles.food = true; - if (type === "water" || type === "water_bowl" || type === "zunda_juice") item.roles.drink = true; - if (["sweet", "water", "water_bowl", "zunda_juice"].includes(type) || isParamEffectItemType(type)) item.roles.medicine = true; + if (type === "water" || type === "zunda_juice") item.roles.drink = true; + if (["sweet", "water", "zunda_juice"].includes(type) || isParamEffectItemType(type)) item.roles.medicine = true; if (type === "bed" || type === "nest_box") item.roles.sleepPlace = true; if (["firecracker", "genkotsu", "pushpin", "oshibyo", "poison_block", "splat"].includes(type)) item.roles.danger = true; if (type === "grass") item.roles.grassMaterial = true; diff --git a/js/item_update_policy.js b/js/item_update_policy.js index 80a2780..bcbaa78 100644 --- a/js/item_update_policy.js +++ b/js/item_update_policy.js @@ -11,7 +11,7 @@ "ball", "genkotsu", "firecracker", "pushpin", "oshibyo", "plushie", "grass_bed", "zunchi", "duplicator", "water", "trace", "splat", "ant_corpse", "food", "sweet", "love_mochi", "fight_mochi", "sleep_drug", "laxative", "protein", "niteropu", "ammo", "mystery_drug", "mercury", "giant_drug", "dwarf_drug", "zunda_juice", - "stone", "bed", "nest_box", "ant_nest", "signboard", "fence_v", "fence_h", "bounce_fence", "bounce_fence_v", "gate_fence", "rotator", "poison_block", "reciprocator", "rope", "rod", "water_bowl", + "stone", "bed", "nest_box", "ant_nest", "signboard", "fence_v", "fence_h", "bounce_fence", "bounce_fence_v", "gate_fence", "rotator", "poison_block", "reciprocator", "rope", "rod", ]); function itemUpdateInterval(item) { diff --git a/js/items.js b/js/items.js index 5543685..417acc8 100644 --- a/js/items.js +++ b/js/items.js @@ -572,7 +572,7 @@ function drawToolItemPreview(ctx, type = "", opts = {}) { }; let scale = scaleMap[type] || 0.92; if (isConsumableSpriteType(type)) scale *= 1.95; - else if (["grass", "water", "water_bowl", "zunda_juice"].includes(type)) scale *= 1.85; + else if (["grass", "water", "zunda_juice"].includes(type)) scale *= 1.85; else if (type === "duplicator") scale *= 1.55; else if (["signboard", "bed", "nest_box", "ant_nest", "pushpin", "oshibyo", "fence_v", "fence_h", "bounce_fence", "bounce_fence_v", "gate_fence", "reciprocator", "firecracker", "genkotsu"].includes(type)) scale *= 1.08; else if (typeof isParamEffectItemType === "function" && isParamEffectItemType(type)) scale *= 1.35; diff --git a/js/mechanical_system.js b/js/mechanical_system.js index 30bf84f..83cf9fd 100644 --- a/js/mechanical_system.js +++ b/js/mechanical_system.js @@ -430,7 +430,7 @@ function obstacleRects(item) { if (!item || item.dead || !isMechanicalType(item)) return []; - if (item.type === "poison_block" && bodyOf(item)?.collision?.solid === false) return []; + if (bodyOf(item)?.collision?.solid === false) return []; return rectsFor(item, "obstacle"); } @@ -1018,6 +1018,17 @@ return out; } + function hasFenceNearby(item, worldRef, radius) { + if (!item || !worldRef?.items) return false; + const source = worldRef.nearbyItems?.(item.x, item.y, radius, true) || worldRef.items; + for (const other of source) { + if (!other || other === item || other.dead || !worldRef.isFenceType?.(other.type)) continue; + if (other.type === "gate_fence" && other.gateOpen) continue; + return true; + } + return false; + } + function resolveFenceContacts(item, dt, worldRef, radius = null) { if (!item || !worldRef || !isMechanicalType(item)) return false; // 往復体の停止・反転対象は物理アイテムに限定する。 @@ -1029,7 +1040,7 @@ const now = worldRef.time || 0; for (const mechRect of rects) { for (const fenceRect of fences) { - let info = FP().rectOverlapInfo?.(mechRect, fenceRect, 0.5); + let info = FP().rectOverlapInfo?.(mechRect, fenceRect, item.type === "rotator" ? 1.35 : 0.5); if (!info) continue; const separated = applyMechanicalFenceSeparation(item, info, dt, worldRef); if (separated) { @@ -1042,6 +1053,7 @@ const impulse = clamp(closing * 0.18 + info.overlap * 6.6 + 4.5, 3.5, separated ? 58 : 92); applyImpulse(item, info.x, info.y, -info.nx * impulse, -info.ny * impulse, separated ? 0.92 : 1.10); applyRailCorrection(item, info.nx, info.ny, info.overlap, 0.82); + if (item.type === "rotator") brakePoweredRotatorOnMechanicalContact(item, dt, worldRef, "fence"); const key = `f:${item.id}:${fenceRect.item?.id || "?"}`; worldRef._mechanicalContactAt = worldRef._mechanicalContactAt || Object.create(null); if ((worldRef._mechanicalContactAt[key] || -999) + 0.08 <= now) { @@ -1320,7 +1332,7 @@ function shouldCollideMechanical(item) { if (!item || item.dead || !isMechanicalType(item)) return false; if (item.playerHeld || item._heldByPlayer) return false; - if (item.type === "poison_block" && bodyOf(item)?.collision?.solid === false) return false; + if (bodyOf(item)?.collision?.solid === false) return false; return obstacleRects(item).length > 0; } @@ -1633,13 +1645,21 @@ const movingWork = active.length; let maxMotion = 0; for (const item of active) maxMotion = Math.max(maxMotion, estimatedBodyMotion(item, clampedDt)); - const substeps = Math.max(1, Math.min(Number(opts.maxSubsteps || 4) || 4, Math.max(Math.ceil(movingWork / 36), Math.ceil(maxMotion / 14)))); + let fenceSensitiveMotion = false; + for (const item of active) { + if (item?.type === "rotator" && estimatedBodyMotion(item, clampedDt) > 9 && hasFenceNearby(item, worldRef, reach(item) + 94)) { fenceSensitiveMotion = true; break; } + } + const requestedMaxSubsteps = Number(opts.maxSubsteps || 4) || 4; + const substepCap = fenceSensitiveMotion ? Math.min(6, Math.max(requestedMaxSubsteps, requestedMaxSubsteps + 2)) : requestedMaxSubsteps; + const motionSlice = fenceSensitiveMotion ? 8 : 14; + const substeps = Math.max(1, Math.min(substepCap, Math.max(Math.ceil(movingWork / 36), Math.ceil(maxMotion / motionSlice)))); const subDt = clampedDt / substeps; let ran = 0; let moved = false; let stepSolved = 0; let stepChecked = 0; let stepPairs = 0; + let stepFenceSolved = 0; // Resolve body pairs between substeps, not only once after all motion. // This keeps thin, visually-aligned rotator/reciprocator strokes from // tunneling through each other without inflating their collision width. @@ -1653,13 +1673,21 @@ else if (item.type === "poison_block") changed = updatePoisonBlock(item, subDt, worldRef, { centralStep: true, skipInteractions: true, deferDirty: true }); if (changed) { moved = true; subMoved = true; ran += 1; } } - if (subMoved && active.length > 1) { - const subFrame = buildMechanicalFrame(worldRef, { bodies }); - const subStats = resolveMechanicalPairsBroadphase(worldRef, subDt, { frame: subFrame, maxPairs: opts.maxSubstepPairs || 140, focusThreshold: opts.focusThreshold || 48 }); - if (subStats.solved) moved = true; - stepSolved += subStats.solved || 0; - stepChecked += subStats.checked || 0; - stepPairs += subStats.pairs || 0; + if (subMoved) { + const subFrame = active.length > 1 || active.some(it => it?.type === "rotator") ? buildMechanicalFrame(worldRef, { bodies }) : null; + if (active.length > 1 && subFrame) { + const subStats = resolveMechanicalPairsBroadphase(worldRef, subDt, { frame: subFrame, maxPairs: opts.maxSubstepPairs || 140, focusThreshold: opts.focusThreshold || 48 }); + if (subStats.solved) moved = true; + stepSolved += subStats.solved || 0; + stepChecked += subStats.checked || 0; + stepPairs += subStats.pairs || 0; + } + // Fence contacts are checked during high-speed rotator substeps rather + // than only after the final pose. This closes the tunneling gap where + // a thin/hand-drawn rotator can pass entirely across a fence between + // two final-frame overlap checks. + const subFenceSolved = resolveMechanicalFences(worldRef, subDt, active, subFrame?.activeSet || new Set(active), { maxFenceItems: opts.maxSubstepFenceItems || 32 }); + if (subFenceSolved) { moved = true; stepFenceSolved += subFenceSolved; } } } if (moved) { @@ -1676,12 +1704,12 @@ pairStats.solved = (pairStats.solved || 0) + stepSolved; pairStats.checked = (pairStats.checked || 0) + stepChecked; pairStats.pairs = (pairStats.pairs || 0) + stepPairs; - const fenceSolved = resolveMechanicalFences(worldRef, clampedDt, bodies, frame.activeSet, opts); + const fenceSolved = stepFenceSolved + resolveMechanicalFences(worldRef, clampedDt, bodies, frame.activeSet, opts); if (pairStats.solved || fenceSolved || links) { worldRef.drawListDirty = true; worldRef.markSpatialDirty?.("mechanical-world-solve"); } - worldRef._mechanicalWorldStats = { bodies: bodies.length, active: frame.active, collidable: frame.collidable, sourceCount: frame.sourceCount || frame.records.length, focused: Boolean(frame.focused), candidates: pairStats.candidates || 0, gridCells: pairStats.gridCells || 0, substeps }; + worldRef._mechanicalWorldStats = { bodies: bodies.length, active: frame.active, collidable: frame.collidable, sourceCount: frame.sourceCount || frame.records.length, focused: Boolean(frame.focused), candidates: pairStats.candidates || 0, gridCells: pairStats.gridCells || 0, substeps, fenceSensitive: fenceSensitiveMotion }; return { ran, active: frame.active, solved: pairStats.solved, checked: pairStats.checked, pairs: pairStats.pairs, fenceSolved, links, candidates: pairStats.candidates || 0, gridCells: pairStats.gridCells || 0, substeps, sourceCount: frame.sourceCount || frame.records.length, focused: Boolean(frame.focused) }; } finally { if (end) end(); diff --git a/js/render.js b/js/render.js index 32fa9d6..48c790e 100644 --- a/js/render.js +++ b/js/render.js @@ -6,7 +6,7 @@ const toolCursorIconImages = new Map(); function toolCursorIconDefinition(world) { const tool = String(world?.tool || ""); - if (!tool || tool === "observe" || tool === "undo" || tool === "redo") return null; + if (!tool || tool === "observe" || tool === "undo" || tool === "redo" || tool === "shoot") return null; const def = typeof toolDefinition === "function" ? toolDefinition(tool) : null; if (!def) return null; return { tool, def, type: def.itemType || (def.placeable ? tool : "") }; @@ -120,6 +120,224 @@ function drawSelectedToolCursorIcon(ctx, world) { ctx.restore(); } + +function strokeWorldObstacleRect(ctx, rect) { + if (!rect) return false; + if (rect.oriented) { + ctx.save(); + ctx.translate(rect.cx || 0, rect.cy || 0); + ctx.rotate(rect.angle || 0); + ctx.strokeRect(-(rect.halfW || 0), -(rect.halfH || 0), (rect.halfW || 0) * 2, (rect.halfH || 0) * 2); + ctx.restore(); + return true; + } + ctx.strokeRect(rect.left || 0, rect.top || 0, Math.max(1, (rect.right || 0) - (rect.left || 0)), Math.max(1, (rect.bottom || 0) - (rect.top || 0))); + return true; +} + +function drawToolTargetHoverHighlight(ctx, world) { + if (!world) return; + const tool = String(world.tool || ""); + const target = tool === "pinch" ? world.hoverGrabTarget : (tool === "delete" ? world.hoverDeleteTarget : null); + if (!target || target.dead || target.playerHeld || target._heldByPlayer) return; + const p = world.pointer || {}; + if (!p.inside) return; + const style = tool === "delete" + ? { color: "rgba(224,82,68,0.98)", fill: "rgba(224,82,68,0.13)", label: "削除" } + : { color: "rgba(86,142,232,0.98)", fill: "rgba(86,142,232,0.12)", label: "つまむ" }; + const pulse = 0.62 + Math.sin((world.time || 0) * 9.5) * 0.12; + const worldLine = world.screenSizeToWorld ? world.screenSizeToWorld(4.6) : 4.6; + const outerLine = world.screenSizeToWorld ? world.screenSizeToWorld(2.1) : 2.1; + const drawLabel = (cx, cy, ry) => { + const labelY = cy - ry - (world.screenSizeToWorld ? world.screenSizeToWorld(14) : 14); + const labelW = Math.max(42, (world.screenSizeToWorld ? world.screenSizeToWorld(52) : 52)); + const labelH = Math.max(18, (world.screenSizeToWorld ? world.screenSizeToWorld(21) : 21)); + ctx.save(); + ctx.shadowBlur = 0; + ctx.globalAlpha = 0.96; + ctx.fillStyle = "rgba(255,255,255,0.94)"; + ctx.strokeStyle = style.color; + ctx.lineWidth = Math.max(1.2, outerLine); + if (typeof roundedRect === "function") { roundedRect(ctx, cx - labelW / 2, labelY - labelH / 2, labelW, labelH, labelH / 2); ctx.fill(); ctx.stroke(); } + else ctx.strokeRect(cx - labelW / 2, labelY - labelH / 2, labelW, labelH); + ctx.fillStyle = style.color; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.font = `${Math.max(10, world.screenSizeToWorld ? world.screenSizeToWorld(12) : 12)}px sans-serif`; + ctx.fillText(style.label, cx, labelY + 0.5); + ctx.restore(); + }; + const strokeEllipse = (cx, cy, rx, ry) => { + ctx.fillStyle = style.fill; + ctx.beginPath(); ctx.ellipse(cx, cy, rx, ry, 0, 0, Math.PI * 2); ctx.fill(); + ctx.shadowColor = style.color; + ctx.shadowBlur = Math.max(12, world.screenSizeToWorld ? world.screenSizeToWorld(18) : 18); + ctx.strokeStyle = style.color; + ctx.lineWidth = Math.max(3.6, worldLine + pulse * 1.8); + ctx.beginPath(); ctx.ellipse(cx, cy, rx, ry, 0, 0, Math.PI * 2); ctx.stroke(); + ctx.shadowBlur = 0; + ctx.setLineDash([10, 6]); + ctx.strokeStyle = "rgba(255,255,255,0.96)"; + ctx.lineWidth = Math.max(1.6, outerLine); + ctx.beginPath(); ctx.ellipse(cx, cy, rx * 1.10, ry * 1.12, 0, 0, Math.PI * 2); ctx.stroke(); + ctx.setLineDash([]); + drawLabel(cx, cy, ry * 1.12); + }; + ctx.save(); + ctx.globalAlpha = 0.92; + const isTarinaiTarget = typeof Tarinai !== "undefined" && target instanceof Tarinai; + if (isTarinaiTarget) { + const r = Math.max(17, target.radius || 22); + strokeEllipse(target.x || 0, target.y || 0, r * 1.02, r * 0.80); + } else if (target.type === "rope" || target.type === "rod") { + const runtime = TARINAI_RENDER_GLOBAL.TarinaiLinkRuntime; + const pb = TARINAI_RENDER_GLOBAL.TarinaiPhysicsBodySystem; + const a = runtime?.endpointWorld?.(pb?.endpoint?.(target, 0), world); + const b = runtime?.endpointWorld?.(pb?.endpoint?.(target, 1), world); + if (a && b) { + ctx.shadowColor = style.color; + ctx.shadowBlur = Math.max(10, world.screenSizeToWorld ? world.screenSizeToWorld(15) : 15); + ctx.strokeStyle = style.color; + ctx.lineWidth = Math.max(5, worldLine + 2); + ctx.lineCap = "round"; + ctx.beginPath(); ctx.moveTo(a.x, a.y); ctx.lineTo(b.x, b.y); ctx.stroke(); + ctx.shadowBlur = 0; + ctx.setLineDash([10, 6]); + ctx.strokeStyle = "rgba(255,255,255,0.95)"; + ctx.lineWidth = Math.max(2, outerLine); + ctx.beginPath(); ctx.moveTo(a.x, a.y); ctx.lineTo(b.x, b.y); ctx.stroke(); + ctx.setLineDash([]); + drawLabel((a.x + b.x) / 2, (a.y + b.y) / 2, 20); + } + } else { + const rects = world.solidObstacleRects?.(target) || []; + if (rects.length) { + ctx.strokeStyle = style.color; + ctx.shadowColor = style.color; + ctx.shadowBlur = Math.max(10, world.screenSizeToWorld ? world.screenSizeToWorld(16) : 16); + ctx.lineWidth = Math.max(3.2, worldLine); + let cx = target.x || 0, cy = target.y || 0, top = cy; + for (const rect of rects.slice(0, 14)) { + if (rect.oriented) { cx = rect.cx || cx; cy = rect.cy || cy; top = Math.min(top, cy - (rect.halfH || 18)); } + strokeWorldObstacleRect(ctx, rect); + } + ctx.shadowBlur = 0; + ctx.setLineDash([9, 6]); + ctx.strokeStyle = "rgba(255,255,255,0.96)"; + ctx.lineWidth = Math.max(1.6, outerLine); + for (const rect of rects.slice(0, 14)) strokeWorldObstacleRect(ctx, rect); + ctx.setLineDash([]); + drawLabel(cx, top, 14); + } else { + const r = Math.max(14, target.r || 16) * (target.type === "ball" ? 1.30 : 1.18); + strokeEllipse(target.x || 0, target.y || 0, r, r * 0.76); + } + } + ctx.restore(); +} + +function drawShootHoverHighlight(ctx, world) { + if (!world || world.tool !== "shoot") return; + const aim = world.shootAimPoint?.(); + if (!aim?.inside) return; + const target = world.hoverShootTarget; + if (!target || target.dead) return; + ctx.save(); + const pulse = 0.52 + Math.sin((world.time || 0) * 14) * 0.12; + ctx.globalAlpha = 0.72 + pulse * 0.12; + ctx.lineWidth = Math.max(1.8, (world.screenSizeToWorld ? world.screenSizeToWorld(2.0) : 2.0)); + ctx.strokeStyle = "rgba(255,106,92,0.94)"; + ctx.shadowColor = "rgba(255,188,146,0.44)"; + ctx.shadowBlur = Math.max(4, (world.screenSizeToWorld ? world.screenSizeToWorld(6) : 6)); + const isTarinaiTarget = typeof Tarinai !== "undefined" && target instanceof Tarinai; + const isItemTarget = Boolean(target.type); + if (isTarinaiTarget) { + const r = Math.max(16, target.radius || 22) * 1.12; + ctx.beginPath(); + ctx.ellipse(target.x || 0, target.y || 0, r * 0.95, r * 0.76, 0, 0, Math.PI * 2); + ctx.stroke(); + } else if (isItemTarget) { + const rects = world.solidObstacleRects?.(target) || []; + if (target.type === "rope" || target.type === "rod") { + const runtime = world.TarinaiLinkRuntime || TARINAI_RENDER_GLOBAL.TarinaiLinkRuntime; + const pb = TARINAI_RENDER_GLOBAL.TarinaiPhysicsBodySystem; + const a = runtime?.endpointWorld?.(pb?.endpoint?.(target, 0), world); + const b = runtime?.endpointWorld?.(pb?.endpoint?.(target, 1), world); + if (a && b) { + ctx.beginPath(); + ctx.moveTo(a.x, a.y); + ctx.lineTo(b.x, b.y); + ctx.stroke(); + } + } else if (rects.length) { + for (const rect of rects.slice(0, 12)) strokeWorldObstacleRect(ctx, rect); + } else { + const r = Math.max(12, target.r || 14) * (target.type === "ball" ? 1.24 : 1.14); + ctx.beginPath(); + ctx.ellipse(target.x || 0, target.y || 0, r, r * 0.76, 0, 0, Math.PI * 2); + ctx.stroke(); + } + } else { + const r = Math.max(8, target.r || 8) * 1.45; + ctx.beginPath(); + ctx.ellipse(target.x || 0, target.y || 0, r, r * 0.86, 0, 0, Math.PI * 2); + ctx.stroke(); + } + ctx.restore(); +} + +function drawShootCursorFallback(ctx, x, y, size) { + const half = size * 0.5; + const tick = size * 0.16; + const gap = size * 0.11; + ctx.save(); + ctx.translate(x, y); + ctx.strokeStyle = "rgba(94,118,138,0.96)"; + ctx.lineWidth = Math.max(1.3, size * 0.045); + ctx.lineCap = "square"; + for (const sign of [-1, 1]) { + ctx.beginPath(); + ctx.moveTo(0, sign * gap); + ctx.lineTo(0, sign * (half - 2)); + ctx.stroke(); + ctx.beginPath(); + ctx.moveTo(sign * gap, 0); + ctx.lineTo(sign * (half - 2), 0); + ctx.stroke(); + ctx.beginPath(); + ctx.moveTo(-tick * 0.55, sign * (gap + tick)); + ctx.lineTo(tick * 0.55, sign * (gap + tick)); + ctx.stroke(); + ctx.beginPath(); + ctx.moveTo(sign * (gap + tick), -tick * 0.55); + ctx.lineTo(sign * (gap + tick), tick * 0.55); + ctx.stroke(); + } + ctx.restore(); +} + +function drawShootCursorOverlay(ctx, world) { + if (!world || world.tool !== "shoot") return; + const aim = world.shootAimPoint?.(); + if (!aim?.inside) return; + const screen = world.worldToScreen ? world.worldToScreen(aim.x, aim.y) : { x: aim.x, y: aim.y }; + const canvasW = world.viewportW || world.w || ctx.canvas?.width || 1; + const canvasH = world.viewportH || world.h || ctx.canvas?.height || 1; + const size = Math.max(90, Math.min(160, Math.round(Math.min(canvasW, canvasH) * 0.205))); + const def = typeof toolDefinition === "function" ? toolDefinition("shoot") : null; + const img = cachedToolCursorIconImage(def?.icon || ""); + ctx.save(); + ctx.globalAlpha = 0.95; + ctx.shadowColor = "rgba(255,255,255,0.12)"; + ctx.shadowBlur = Math.max(2, size * 0.08); + if (img && img.complete && (img.naturalWidth || img.width)) { + ctx.drawImage(img, screen.x - size / 2, screen.y - size / 2, size, size); + } else { + drawShootCursorFallback(ctx, screen.x, screen.y, size); + } + ctx.restore(); +} + function randSeed(seed, min, max) { const s = Math.sin(seed * 12.9898) * 43758.5453; return min + (s - Math.floor(s)) * (max - min); @@ -278,7 +496,7 @@ function placementPreviewFor(world) { } if ((type === "fence_v" || type === "fence_h" || type === "bounce_fence" || type === "bounce_fence_v" || type === "gate_fence") && world.fenceRect) { const rawRect = world.fenceRect(tmp); - return { type, x, y, r, rect: rawRect, blocked: rectOutside(rawRect) || world.placementBlocked?.(tmp) || world.fencePlacementBlocked?.(tmp) }; + return { type, x, y, r, rect: rawRect, blocked: rectOutside(rawRect) || world.placementBlocked?.(tmp) }; } if (type === "rotator" && TARINAI_RENDER_GLOBAL.TarinaiMechanicalSystem) { const pb = TARINAI_RENDER_GLOBAL.TarinaiPhysicsBodySystem; @@ -366,7 +584,7 @@ function drawPlacementPreview(ctx, world) { ctx.strokeRect(part.left, part.top, part.right - part.left, part.bottom - part.top); } } - } else if (type === "water_bowl" || type === "stone" || type === "ball" || type === "firecracker" || isPinType(type) || type === "zunchi" || type.includes("mochi") || type === "sweet" || type === "sleep_drug") { + } else if (type === "stone" || type === "ball" || type === "firecracker" || isPinType(type) || type === "zunchi" || type.includes("mochi") || type === "sweet" || type === "sleep_drug") { ctx.beginPath(); ctx.arc(x, y, Math.max(8, r * (1.18 + pulse * 0.04)), 0, Math.PI * 2); ctx.fill(); @@ -1414,6 +1632,8 @@ function render() { } renderPerfEnd(endAttachments); + drawToolTargetHoverHighlight(ctx, world); + const endEffects = renderPerfBegin("render.draw.effects"); for (const ef of world.effects) { if (isEntityVisibleInRect(ef, visibleRect)) ef.draw(ctx); @@ -1444,6 +1664,7 @@ function render() { const endUiOverlay = renderPerfBegin("render.uiOverlay"); drawAtScreenPosition(world.selected, () => drawSelectedCard(ctx, world, lighting)); drawPointerItemTooltip(ctx, world); + drawShootCursorOverlay(ctx, world); drawSelectedToolCursorIcon(ctx, world); renderPerfEnd(endUiOverlay); diff --git a/js/sim_core.js b/js/sim_core.js index 27d5d79..6c2e2e0 100644 --- a/js/sim_core.js +++ b/js/sim_core.js @@ -512,6 +512,28 @@ class Effect { ctx.beginPath(); ctx.arc(0, 0, this.size + (1 - alpha) * 18, 0, Math.PI * 2); ctx.stroke(); + } else if (this.type === "shoot_impact") { + const s = this.size * (0.65 + (1 - alpha) * 0.55); + ctx.lineCap = "round"; + ctx.lineJoin = "round"; + ctx.strokeStyle = this.color || "rgba(255,226,150,0.92)"; + ctx.lineWidth = Math.max(1.2, this.size * 0.16); + for (let i = 0; i < 7; i++) { + const a = this.seed + i * 0.897; + const inner = s * randSeed(this.seed + i + 2, 0.16, 0.34); + const outer = s * randSeed(this.seed + i + 9, 0.72, 1.18) + (1 - alpha) * this.size * 1.1; + ctx.globalAlpha = alpha * randSeed(this.seed + i + 31, 0.42, 0.95); + ctx.beginPath(); + ctx.moveTo(Math.cos(a) * inner, Math.sin(a) * inner); + ctx.lineTo(Math.cos(a) * outer, Math.sin(a) * outer); + ctx.stroke(); + } + ctx.globalAlpha = alpha * 0.75; + ctx.strokeStyle = "rgba(255,255,255,0.70)"; + ctx.lineWidth = Math.max(1, this.size * 0.08); + ctx.beginPath(); + ctx.arc(0, 0, s * 0.68 + (1 - alpha) * this.size * 0.65, 0, Math.PI * 2); + ctx.stroke(); } else if (this.type === "fight") { ctx.lineCap = "round"; ctx.lineJoin = "round"; @@ -790,7 +812,7 @@ class SpatialGrid { const foodMap = dynamic ? this.dynamicFoodCells : this.staticFoodCells; const hazardMap = dynamic ? this.dynamicHazardCells : this.staticHazardCells; const hasObstacle = typeof itemHasTrait === "function" ? itemHasTrait(type, "obstacle") : (type === "stone" || type === "ball" || type === "nest_box" || type === "bed" || type === "fence_v" || type === "fence_h" || type === "bounce_fence" || type === "bounce_fence_v"); - const hasFood = typeof itemHasTrait === "function" ? itemHasTrait(type, "food_interest") : (type === "sweet" || type === "love_mochi" || type === "fight_mochi" || type === "grass" || type === "water" || type === "water_bowl" || type === "ant_corpse" || (typeof isParamEffectItemType === "function" && isParamEffectItemType(type))); + const hasFood = typeof itemHasTrait === "function" ? itemHasTrait(type, "food_interest") : (type === "sweet" || type === "love_mochi" || type === "fight_mochi" || type === "grass" || type === "water" || type === "ant_corpse" || (typeof isParamEffectItemType === "function" && isParamEffectItemType(type))); const hasHazard = typeof itemHasTrait === "function" && itemHasTrait(type, "hazard"); if (type === "poison_block") { const body = (typeof window !== "undefined" ? window : globalThis).TarinaiPhysicsBodySystem?.ensureBody?.(it, null, { syncFromLegacy: false }); diff --git a/js/simulation_environment_system.js b/js/simulation_environment_system.js index 6562ce1..1061627 100644 --- a/js/simulation_environment_system.js +++ b/js/simulation_environment_system.js @@ -28,6 +28,16 @@ function updateFrameSignals(worldRef, dt) { if (worldRef.pointer) worldRef.pointer.motion = Math.max(0, (worldRef.pointer.motion || 0) - dt * 2.4); + const recoilX = Number(worldRef.shootCursorOffsetX) || 0; + const recoilY = Number(worldRef.shootCursorOffsetY) || 0; + if (recoilX || recoilY) { + // Recoil is a real aim offset, but it should settle back to the actual + // mouse/touch position in roughly 1-2 seconds instead of drifting forever. + const k = Math.exp(-Math.max(0, Number(dt) || 0) * 3.15); + worldRef.shootCursorOffsetX = Math.abs(recoilX * k) < 0.25 ? 0 : recoilX * k; + worldRef.shootCursorOffsetY = Math.abs(recoilY * k) < 0.25 ? 0 : recoilY * k; + worldRef.drawListDirty = true; + } worldRef.shakeTimer = Math.max(0, (worldRef.shakeTimer || 0) - dt); if ((worldRef.shakeTimer || 0) <= 0) { worldRef.shakeDuration = 0; worldRef.shakeStrength = 0; } } diff --git a/js/sound_pack.js b/js/sound_pack.js index e67e8ab..634df74 100644 --- a/js/sound_pack.js +++ b/js/sound_pack.js @@ -3,7 +3,7 @@ (function (global) { // External audio replacement point. Add files and edit paths here; audio.js consumes this pack at startup. global.TARINAI_SOUND_PACK = Object.freeze({ - version: "1.2", + version: "1.3", categoryGain: { voice: 3.2, notify: 18.0, ops: 16.0 }, idGain: { sfx_notify: 2.60, @@ -21,6 +21,8 @@ sfx_ground_rumble: 1.75, sfx_firecracker_fuse: 1.55, sfx_firecracker_explode: 1.70, + sfx_shoot: 0.725, + sfx_bolt_action: 1.35, }, idMinGap: { sfx_ui_click: 0.030, @@ -31,6 +33,8 @@ sfx_notify: 0.10, sfx_log_push: 0.10, voice_sunbath: 0.95, + sfx_shoot: 0.045, + sfx_bolt_action: 0.10, }, samplePaths: { voice_hau: "assets/sounds/voice_001_hau.wav", @@ -40,7 +44,9 @@ voice_stress: "assets/sounds/voice_005_stress.wav", sfx_sleep: "assets/sounds/voice_006_sleep.wav", voice_sunbath: "assets/sounds/voice_007_sunbath_pokapoka.wav", - sfx_firecracker_explode: "assets/sounds/firecracker_explosion.mp3" + sfx_firecracker_explode: "assets/sounds/firecracker_explosion.mp3", + sfx_shoot: "assets/sounds/shoot_pistol.mp3", + sfx_bolt_action: "assets/sounds/shoot_bolt_action.mp3" }, categories: { voice: "\u305f\u308a\u306a\u3044\u306e\u58f0", @@ -56,6 +62,7 @@ sfx_ui_click: "ops", sfx_ui_fold: "ops", sfx_place: "ops", sfx_delete: "ops", sfx_poke: "ops", sfx_grab: "ops", sfx_drop: "ops", sfx_water_hose: "ops", sfx_water_clean: "ops", sfx_drink: "ops", sfx_ball_hit: "ops", sfx_stone_impact: "ops", sfx_firecracker_fuse: "ops", sfx_firecracker_explode: "ops", + sfx_shoot: "ops", sfx_bolt_action: "ops", sfx_genkotsu_fall: "ops", sfx_genkotsu_impact: "ops", sfx_ground_rumble: "ops", sfx_grass: "ops", sfx_zunchi: "ops", sfx_ant_nest: "ops" } diff --git a/js/tarinai_consumable_behavior.js b/js/tarinai_consumable_behavior.js index 4db1db7..91d9878 100644 --- a/js/tarinai_consumable_behavior.js +++ b/js/tarinai_consumable_behavior.js @@ -33,8 +33,8 @@ function consumeBehaviorTarget(t, world, target, role = "food", dt = 0.12) { return true; } - if ((role === "drink" || role === "medicine") && (target.type === "water" || target.type === "water_bowl")) { - const text = target.type === "water_bowl" ? "\u6c34\u306e\u76bf\u3067\u6c34\u3092\u98f2\u3093\u3067\u3044\u308b" : "\u6c34\u3092\u98f2\u3093\u3067\u3044\u308b"; + if ((role === "drink" || role === "medicine") && target.type === "water") { + const text = "\u6c34\u3092\u98f2\u3093\u3067\u3044\u308b"; t.setActionState?.("seek_water", { target, reason: text, sleeping: false }); t.thought = text; t.applyWaterEffect?.(0.55, target.type); diff --git a/js/tarinai_contact_item_system.js b/js/tarinai_contact_item_system.js index 886ca7e..722be2c 100644 --- a/js/tarinai_contact_item_system.js +++ b/js/tarinai_contact_item_system.js @@ -11,8 +11,8 @@ if (!it || it.dead) return false; const d = it?.type === "duplicator" ? foodInteractionDistance(tarinai, it) : dist(tarinai, it); const contactReach = foodInteractionReach(tarinai, it, "food") + (it === tarinai.target && foodActionActive && it?.type !== "duplicator" ? 4 : 0); if (d > contactReach) return false; - if (it.type === "water" || it.type === "water_bowl") { - tarinai.thought = it.type === "water_bowl" ? "\u6c34\u306e\u76bf\u3067\u6c34\u3092\u98f2\u3093\u3067\u3044\u308b" : "\u6c34\u3092\u6d74\u3073\u3066\u843d\u3061\u7740\u3044\u3066\u3044\u308b"; + if (it.type === "water") { + tarinai.thought = "\u6c34\u3092\u6d74\u3073\u3066\u843d\u3061\u7740\u3044\u3066\u3044\u308b"; tarinai.target = it; tarinai.applyWaterEffect(dt, it.type); if ((tarinai.world?.time || 0) > (tarinai.nextDrinkSound || -999)) { diff --git a/js/tarinai_disease_nest.js b/js/tarinai_disease_nest.js index 64652a4..d10e507 100644 --- a/js/tarinai_disease_nest.js +++ b/js/tarinai_disease_nest.js @@ -201,20 +201,18 @@ freezeSleepDiseaseMotion(dt = 0) { if (!this.sleepDisease) return false; const beingDraggedByAnt = Boolean((this.antDraggedTimer || 0) > 0 && this.antDraggedBy); + const heldByPlayer = Boolean(this.playerHeld || this._heldByPlayer); if (!Number.isFinite(this.sleepDiseaseAnchorX)) this.sleepDiseaseAnchorX = this.x; if (!Number.isFinite(this.sleepDiseaseAnchorY)) this.sleepDiseaseAnchorY = this.y; - this.startSleeping(null, beingDraggedByAnt ? "\u7720\u3063\u305f\u307e\u307e\u30a2\u30ea\u306b\u904b\u3070\u308c\u3066\u3044\u308b" : "\u306d\u3080\u308a\u75c5\u3067\u7720\u308a\u7d9a\u3051\u3066\u3044\u308b"); - this.vx = 0; - this.vy = 0; - if (beingDraggedByAnt) { + this.startSleeping(null, beingDraggedByAnt ? "眠ったままアリに運ばれている" : "ねむり病で眠り続けている"); + // ねむり病は意識だけを固定し、物理位置は固定しない。 + // 以前は anchor に毎回スナップしていたため、外力・つまみ・機械接触を無視していた。 + if (heldByPlayer || beingDraggedByAnt || Math.hypot(Number(this.vx || 0) + Number(this.impulseVx || 0), Number(this.vy || 0) + Number(this.impulseVy || 0)) > 0.1) { this.sleepDiseaseAnchorX = this.x; this.sleepDiseaseAnchorY = this.y; - } else { - this.x = this.sleepDiseaseAnchorX; - this.y = this.sleepDiseaseAnchorY; } this.wanderAngle = this.wanderAngle || 0; - this.thought = beingDraggedByAnt ? "\u7720\u3063\u305f\u307e\u307e\u30a2\u30ea\u306b\u904b\u3070\u308c\u3066\u3044\u308b" : "\u306d\u3080\u308a\u75c5\u3067\u7720\u308a\u7d9a\u3051\u3066\u3044\u308b"; + this.thought = beingDraggedByAnt ? "眠ったままアリに運ばれている" : "ねむり病で眠り続けている"; if (this.world && this.world.time > (this.nextSleepBubbleAt || 0)) { this.nextSleepBubbleAt = this.world.time + 5.0; this.world.spawnBubble?.(this.x, this.y - this.radius * 1.18, "Zzz...", "rgba(65,70,92,0.72)"); diff --git a/js/tarinai_item_interaction_context.js b/js/tarinai_item_interaction_context.js index b2d4d0f..04e9924 100644 --- a/js/tarinai_item_interaction_context.js +++ b/js/tarinai_item_interaction_context.js @@ -25,7 +25,7 @@ if (tarinai.target && !tarinai.target.dead && (tarinai.target.type === "duplicator" || roleMatches(tarinai.target, "food") || roleMatches(tarinai.target, "medicine"))) foodCandidates.push(tarinai.target); for (const it of nearbyItems) { if (!it || it.dead || foodCandidates.includes(it)) continue; - if (!(it.type === "duplicator" || roleMatches(it, "food") || roleMatches(it, "medicine") || it.type === "water" || it.type === "water_bowl")) continue; + if (!(it.type === "duplicator" || roleMatches(it, "food") || roleMatches(it, "medicine") || it.type === "water")) continue; foodCandidates.push(it); if (foodCandidates.length >= scanLimit) break; } diff --git a/js/tarinai_item_targeting.js b/js/tarinai_item_targeting.js index 8697e09..caf00e8 100644 --- a/js/tarinai_item_targeting.js +++ b/js/tarinai_item_targeting.js @@ -24,8 +24,8 @@ function effectiveFoodRoleMatches(item, role) { const type = effectiveFoodTypeForItem(item); if (!type) return false; if (role === "food") return ["sweet", "food", "grass", "ant_corpse", "zunchi"].includes(type) || (typeof isServingFoodType === "function" && isServingFoodType(type)); - if (role === "drink") return type === "water" || type === "water_bowl" || type === "zunda_juice"; - if (role === "medicine") return type === "sweet" || type === "water" || type === "water_bowl" || type === "zunda_juice" || type === "sleep_drug" || (typeof isParamEffectItemType === "function" && isParamEffectItemType(type)); + if (role === "drink") return type === "water" || type === "zunda_juice"; + if (role === "medicine") return type === "sweet" || type === "water" || type === "zunda_juice" || type === "sleep_drug" || (typeof isParamEffectItemType === "function" && isParamEffectItemType(type)); return false; } @@ -66,7 +66,7 @@ function foodPriorityRank(tarinai, item) { const socialNeed = Number(tarinai?.needRaw?.social ?? tarinai?.needs?.social ?? 0) || 0; const healthNeed = Number(tarinai?.needRaw?.health ?? tarinai?.needs?.health ?? 0) || 0; if (type === "sweet") return 4100 + Math.max(0, healthNeed - 40) * 6; - if (type === "water" || type === "water_bowl") return 3650 + Math.max(0, healthNeed - 42) * 7; + if (type === "water") return 3650 + Math.max(0, healthNeed - 42) * 7; if (type === "zunda_juice") return 3720 + Math.max(0, healthNeed - 42) * 6; if (type === "love_mochi") return 3300 + Math.max(0, socialNeed - 45) * 7; if (type === "fight_mochi") return 2600 + Math.max(0, Number(tarinai?.fightMochiTimer || 0)) * 4; @@ -103,7 +103,7 @@ function hasBetterFoodThanZunchiNearby(tarinai, world, maxDist = 180) { if (tarinai.shouldAvoidTarget?.(it)) continue; const type = effectiveFoodTypeForItem(it); if (!type) continue; - if (["sweet", "food", "grass", "water", "water_bowl", "zunda_juice", "ant_corpse"].includes(type) || (typeof isServingFoodType === "function" && isServingFoodType(type))) { + if (["sweet", "food", "grass", "water", "zunda_juice", "ant_corpse"].includes(type) || (typeof isServingFoodType === "function" && isServingFoodType(type))) { if (it.type === "grass" && (it.amount || 0) <= 0) continue; if (typeof tarinai.foodItemHasServingLeft === "function" && ["sweet", "food", "zunda_juice"].includes(type) && !tarinai.foodItemHasServingLeft(it)) continue; return true; diff --git a/js/tarinai_needs_items.js b/js/tarinai_needs_items.js index e5fa49c..8cbe6ed 100644 --- a/js/tarinai_needs_items.js +++ b/js/tarinai_needs_items.js @@ -541,14 +541,17 @@ function shouldWakeFromSleep(tarinai, world, needs) { if (!tarinai || tarinai.dead) return true; if (tarinai.sleepDisease) return false; const now = world?.time || 0; - const session = tarinai.sleepSession || { startedAt: now, minDuration: 12, targetEnergy: 82, maxDuration: 38 }; - const elapsed = Math.max(0, now - (Number(session.startedAt) || now)); + const session = tarinai.sleepSession || { startedAt: now, minDuration: 8, targetEnergy: 74, maxDuration: 28 }; + const started = Number(session.startedAt); + const elapsed = Math.max(0, now - (Number.isFinite(started) ? started : now)); if ((tarinai.hurtTimer || 0) > 0.06 || (tarinai.pokeFlashTimer || 0) > 0.08) return true; if (findNearbyDanger(world, tarinai, 160)) return true; - // \u6b32\u6c42\u5024\u306e\u81ea\u7136\u5909\u52d5\u3060\u3051\u3067\u306f\u7761\u7720\u3092\u4e2d\u65ad\u3057\u306a\u3044\u3002\u76f4\u63a5\u306e\u5371\u967a\u30fb\u30c0\u30e1\u30fc\u30b8\u306e\u307f\u8d77\u5e8a\u8981\u56e0\u306b\u3059\u308b\u3002 - if (elapsed < (Number(session.minDuration) || 12)) return false; - if ((tarinai.energy || 0) >= (Number(session.targetEnergy) || 84)) return true; - if (elapsed >= (Number(session.maxDuration) || 42)) return true; + // 自然な睡眠は短い安全ロック後、十分に回復したら起きる。 + if (elapsed < (Number(session.minDuration) || 8)) return false; + const sleepNeed = Number(needs?.sleep ?? tarinai.needRaw?.sleep ?? tarinai.needs?.sleep ?? 0) || 0; + if (sleepNeed <= ((typeof needThreshold === "function" ? needThreshold("sleep", "continue") : 34) + 4)) return true; + if ((tarinai.energy || 0) >= (Number(session.targetEnergy) || 74)) return true; + if (elapsed >= (Number(session.maxDuration) || 28)) return true; return false; } @@ -557,10 +560,17 @@ function protectSleepSession(tarinai, world, needs) { tarinai.sleeping = true; if (!tarinai.sleepSession) { const now = world?.time || 0; - tarinai.sleepSession = { startedAt: now, minDuration: rand(12, 22), targetEnergy: rand(80, 92), maxDuration: rand(34, 54), targetId: tarinai.target?.id || null, consumesGrassBedOnWake: tarinai.target?.type === "grass_bed" }; + const bedLike = tarinai.target && typeof tarinai.isSleepFurniture === "function" && tarinai.isSleepFurniture(tarinai.target); + tarinai.sleepSession = { startedAt: now, minDuration: rand(bedLike ? 8 : 7, bedLike ? 14 : 12), targetEnergy: rand(bedLike ? 70 : 64, bedLike ? 82 : 76), maxDuration: rand(bedLike ? 22 : 18, bedLike ? 34 : 28), targetId: tarinai.target?.id || null, consumesGrassBedOnWake: tarinai.target?.type === "grass_bed" }; if (tarinai.target?.type === "grass_bed") tarinai.pendingGrassBedWakeId = tarinai.target.id || tarinai.pendingGrassBedWakeId || ""; } if (!shouldWakeFromSleep(tarinai, world, needs)) { + const step = Math.max(0.10, Math.min(1.0, Number(tarinai.aiTimer || 0.42) || 0.42)); + const bedLike = tarinai.target && typeof tarinai.isSleepFurniture === "function" && tarinai.isSleepFurniture(tarinai.target); + const comfort = bedLike ? Math.max(0.5, Math.min(1.4, Number(world?.bedComfort?.(tarinai.target) || tarinai.target?.comfort || 1) || 1)) : 0.55; + const energyMax = Math.max(1, typeof tarinaiMaxEnergy === "function" ? tarinaiMaxEnergy(tarinai) : (Number(tarinai.maxEnergy) || 100)); + tarinai.energy = Math.min(energyMax, (Number(tarinai.energy || 0) || 0) + step * (bedLike ? (1.2 + comfort * 1.35) : 0.65)); + if (typeof applyNeedRelief === "function") applyNeedRelief(tarinai, { sleep: -step * (bedLike ? (5.2 + comfort * 4.5) : 3.2), safety: bedLike ? -step * 0.9 : 0 }); tarinai.thought = tarinai.thought || "\u7720\u3063\u3066\u3044\u308b"; setBehavior(tarinai, { id: "sleep", need: "sleep", label: "\u7720\u3063\u3066\u3044\u308b", reason: "\u306d\u3080\u3044\u306e\u3067\u3001\u7720\u3063\u3066\u3044\u308b\u3002", text: "\u7720\u3063\u3066\u3044\u308b", state: "sleep", tiedNeeds: ["sleep"], startedAt: tarinai.sleepSession.startedAt, minDuration: tarinai.sleepSession.minDuration, lockSeconds: tarinai.sleepSession.minDuration, phase: "perform" }); tarinai.behaviorLockTimer = Math.max(tarinai.behaviorLockTimer || 0, 0.8); diff --git a/js/tarinai_social_move_life.js b/js/tarinai_social_move_life.js index 109e048..01c204b 100644 --- a/js/tarinai_social_move_life.js +++ b/js/tarinai_social_move_life.js @@ -266,6 +266,7 @@ const dx = spot.x - this.x; const dy = spot.y - this.y; const d = Math.hypot(dx, dy); + if (externalActive && d > 8.5 && !this.sleepDisease && marker?.wakeSleepingFromExternalMotion?.(this, "動かされて目が覚めた")) return; if (d > 2.2) { const restore = externalActive ? (2.0 + bedComfort * 2.0) : (12 + bedComfort * 14); const maxRestore = externalActive ? Math.min(d, 3.2) : d; @@ -297,6 +298,7 @@ marker?.markSleepExternalMotion?.(this, dt, "sleep-full-contact"); const cdx = (Number(this.x || 0) || 0) - beforeContactX; const cdy = (Number(this.y || 0) || 0) - beforeContactY; + if (Math.hypot(cdx, cdy) > 1.8 && !this.sleepDisease && marker?.wakeSleepingFromExternalMotion?.(this, "ぶつかって目が覚めた")) return; if (Math.hypot(cdx, cdy) > 0.05) { this.vx = clamp((Number(this.vx) || 0) + cdx / Math.max(0.016, dt) * 0.085, -170, 170); this.vy = clamp((Number(this.vy) || 0) + cdy / Math.max(0.016, dt) * 0.085, -170, 170); diff --git a/js/tarinai_update_step_frame.js b/js/tarinai_update_step_frame.js index f792513..e3a07fd 100644 --- a/js/tarinai_update_step_frame.js +++ b/js/tarinai_update_step_frame.js @@ -160,6 +160,12 @@ t.hunger += CONFIG.hungerPerMinute * minute * t.trait.hunger * hungerScale * (1 + tooCold * 0.8); t.loneliness += CONFIG.lonelinessPerMinute * minute * (2 - t.trait.social); t.energy -= CONFIG.energyPerMinute * minute * t.trait.sleep * (t.state === "sleep" ? 0.025 : 1); + if (t.state === "sleep" || t.sleeping) { + const sleepBedLike = t.target && typeof t.isSleepFurniture === "function" && t.isSleepFurniture(t.target); + const sleepEnergyMax = Math.max(1, typeof tarinaiMaxEnergy === "function" ? tarinaiMaxEnergy(t) : (Number(t.maxEnergy) || 100)); + t.energy = Math.min(sleepEnergyMax, (Number(t.energy || 0) || 0) + dt * (sleepBedLike ? 0.52 : 0.24)); + if (typeof applyNeedRelief === "function") applyNeedRelief(t, { sleep: -dt * (sleepBedLike ? 2.0 : 1.1) }); + } // stress is derived from needs; no independent stress decay. if (tooCold > 0) applyNeedShock(t, { health: tooCold * dt * 4, safety: tooCold * dt * 2 }); diff --git a/js/tarinai_update_step_movement.js b/js/tarinai_update_step_movement.js index b1ac843..8dc14ca 100644 --- a/js/tarinai_update_step_movement.js +++ b/js/tarinai_update_step_movement.js @@ -66,6 +66,34 @@ return Boolean(t && (t.state === "sleep" || t.sleeping) && now < Number(t._sleepExternalMotionUntil || 0)); } + function wakeSleepingFromExternalMotion(t, reason = "外力で目が覚めた") { + if (!t || t.dead || t.sleepDisease || !(t.state === "sleep" || t.sleeping)) return false; + const world = t.world || null; + if (world?.isTarinaiHiddenInNestBox?.(t)) return false; + const now = Number(world?.time || 0) || 0; + if (now < Number(t._sleepExternalWakeSuppressUntil || -999)) return false; + t._sleepExternalWakeSuppressUntil = now + 0.45; + t._sleepExternalMotionUntil = 0; + t._sleepExternalMotionReason = ""; + t.consumePendingGrassBedOnWake?.("外力で起きた"); + t.sleeping = false; + t.sleepSession = null; + t.target = null; + t.targetKey = ""; + t.awakeLockTimer = Math.max(t.awakeLockTimer || 0, 5.2); + t.surpriseTimer = Math.max(t.surpriseTimer || 0, 0.45); + t.fearTimer = Math.max(t.fearTimer || 0, 0.18); + t.setActionState?.("idle", { target: null, clearTarget: true, reason, wake: true, sleeping: false }); + t.thought = reason; + t.pinchThoughtTimer = Math.max(t.pinchThoughtTimer || 0, 1.0); + if (t.bubble && now >= Number(t._sleepExternalWakeBubbleAt || -999) + 0.6) { + t._sleepExternalWakeBubbleAt = now; + t.bubble("!", 0.55, "rgba(88,82,118,0.78)"); + } + world?.emit?.("tarinai:woke", { tarinai: t, reason: "external-motion" }); + return true; + } + function passivePhysicalMotion(t, dt, context = {}) { if (!t || t.dead) return { done: true }; const world = t.world; @@ -182,6 +210,14 @@ world.resolveFenceCollision(t); } } + + if (state === "sleep" || t.sleeping) { + const finalDx = numeric(t.x) - beforeX; + const finalDy = numeric(t.y) - beforeY; + const rawSpeed = Math.hypot(numeric(t.vx) + numeric(t.impulseVx), numeric(t.vy) + numeric(t.impulseVy)); + const movedByExternal = Math.hypot(finalDx, finalDy) > 4.2 || rawSpeed > 26 || (sleepExternalMotionActive(t) && Math.hypot(finalDx, finalDy) > 2.2); + if (movedByExternal) wakeSleepingFromExternalMotion(t, "動かされて目が覚めた"); + } return { done: false, passive: true }; } @@ -236,5 +272,5 @@ return { done: false }; } - global.TarinaiMovementUpdateStep = Object.freeze({ update, applyVelocityShockDamage, passivePhysicalMotion, markSleepExternalMotion, sleepExternalMotionActive }); + global.TarinaiMovementUpdateStep = Object.freeze({ update, applyVelocityShockDamage, passivePhysicalMotion, markSleepExternalMotion, sleepExternalMotionActive, wakeSleepingFromExternalMotion }); })(typeof window !== "undefined" ? window : globalThis); diff --git a/js/text_catalog.js b/js/text_catalog.js index aad96c1..0ea7ea7 100644 --- a/js/text_catalog.js +++ b/js/text_catalog.js @@ -56,7 +56,7 @@ const TEXT_CATALOG = { { title: "コロニーの見方", image: "assets/sprites/tarinai_11_weak.webp", - text: "コロニー欄では個体数、死亡数、全体状態、地面、欲求平均、物を確認できます。たりないデータでは選択中の個体の健康、性格、関係、行動理由、記録を追えます。", + text: "コロニー欄では個体数、死亡数、全体状態、地面、欲求平均、物を確認できます。観察では選択中の個体の健康、性格、関係、行動理由、記録を追えます。", }, ],}; diff --git a/js/ui_input_mouse.js b/js/ui_input_mouse.js index ff92473..6d212a8 100644 --- a/js/ui_input_mouse.js +++ b/js/ui_input_mouse.js @@ -29,6 +29,13 @@ }, 90); return; } + if (e.button === 0 && world.tool === "shoot") { + const p = ctx.screenToWorldEvent(e); + if (!p.inside) return; + e.preventDefault(); + ctx.beginShoot(p, e.clientX, e.clientY); + return; + } if (e.button === 0 && world.tool === "pinch") { const p = ctx.screenToWorldEvent(e); if (!p.inside) return; @@ -45,6 +52,7 @@ window.addEventListener("mouseup", (e) => { if (ctx.endAreaDelete()) return; if (ctx.endHose()) { if (uiCache.hoseHoldTimer) { clearInterval(uiCache.hoseHoldTimer); uiCache.hoseHoldTimer = null; } return; } + if (ctx.endShoot()) return; if (ctx.endGrab(e.clientX, e.clientY)) return; ctx.endPan(e.button); }); @@ -60,6 +68,11 @@ ctx.moveHose(p, e.clientX, e.clientY); return; } + if (uiCache.shooting) { + const p = ctx.screenToWorldEvent(e); + ctx.moveShoot(p, e.clientX, e.clientY); + return; + } if (uiCache.grabbing) { const p = ctx.screenToWorldEvent(e); const totalMove = Math.hypot(e.clientX - (uiCache.grabStartX || e.clientX), e.clientY - (uiCache.grabStartY || e.clientY)); @@ -83,6 +96,10 @@ uiCache.grabMoved = false; return; } + if (uiCache.shootSuppressClick) { + uiCache.shootSuppressClick = false; + return; + } if (uiCache.panMoved) { uiCache.panMoved = false; return; @@ -98,6 +115,9 @@ canvas.addEventListener("mouseleave", () => { world.pointer.inside = false; world.pointer.motion = 0; + world.hoverGrabTarget = null; + world.hoverDeleteTarget = null; + world.hoverShootTarget = null; }); return true; } diff --git a/js/ui_input_shared.js b/js/ui_input_shared.js index 06d39cc..2994808 100644 --- a/js/ui_input_shared.js +++ b/js/ui_input_shared.js @@ -3,6 +3,7 @@ (function (global) { function cursorForTool(tool) { if (tool === "water_hose") return "crosshair"; + if (tool === "shoot") return "none"; if (tool === "pinch") return "grab"; if (tool === "observe") return "default"; if (tool === "poke" || tool === "delete" || tool === "area_delete") return "pointer"; @@ -328,6 +329,89 @@ return true; } + function shootAimPoint() { + return world.shootAimPoint?.() || { x: world.pointer?.x || 0, y: world.pointer?.y || 0, inside: Boolean(world.pointer?.inside) }; + } + + function updateShootHoverTarget(point = null) { + // 射撃ツールは照準だけを表示し、対象ハイライトは出さない。 + if (world.hoverShootTarget) { + world.hoverShootTarget = null; + world.drawListDirty = true; + } + return null; + } + + function beginShoot(p, clientX, clientY, options = {}) { + if (!p?.inside) return false; + global.TarinaiHistory?.capture?.(world, "shoot"); + uiCache.shooting = true; + uiCache.shootMoved = false; + uiCache.shootSuppressClick = true; + uiCache.shootFired = false; + uiCache.shootStartX = clientX; + uiCache.shootStartY = clientY; + uiCache.shootLastClientX = clientX; + uiCache.shootLastClientY = clientY; + world.pointer.x = p.x; + world.pointer.y = p.y; + world.pointer.inside = true; + world.setShootCursorFromPointer?.(p); + uiCache.shootLastRawWorldX = p.x; + uiCache.shootLastRawWorldY = p.y; + updateShootHoverTarget(); + uiCache.shootFired = Boolean(world.fireShootTool?.()) || Boolean(uiCache.shootFired); + if (options.touchMode) uiCache.touchMode = options.touchMode; + if (uiCache.shootHoldTimer) clearInterval(uiCache.shootHoldTimer); + uiCache.shootHoldTimer = setInterval(() => { + if (!uiCache.shooting) { + clearInterval(uiCache.shootHoldTimer); + uiCache.shootHoldTimer = null; + return; + } + uiCache.shootFired = Boolean(world.fireShootTool?.()) || Boolean(uiCache.shootFired); + }, 120); + canvas.style.cursor = "none"; + render(); + return true; + } + + function moveShoot(p, clientX, clientY, options = {}) { + uiCache.shootLastClientX = clientX; + uiCache.shootLastClientY = clientY; + const rawDx = (Number(p.x) || 0) - (Number(uiCache.shootLastRawWorldX ?? p.x) || 0); + const rawDy = (Number(p.y) || 0) - (Number(uiCache.shootLastRawWorldY ?? p.y) || 0); + uiCache.shootLastRawWorldX = p.x; + uiCache.shootLastRawWorldY = p.y; + world.pointer.x = p.x; + world.pointer.y = p.y; + world.pointer.inside = !!p.inside; + if (p.inside) world.moveShootCursorBy?.(rawDx, rawDy); + const totalMove = Math.hypot(clientX - (uiCache.shootStartX || clientX), clientY - (uiCache.shootStartY || clientY)); + if (totalMove > 3) { + uiCache.shootMoved = true; + if (options.touch) uiCache.touchMoved = true; + } + updateShootHoverTarget(); + canvas.style.cursor = "none"; + render(); + return true; + } + + function endShoot() { + if (!uiCache.shooting) return false; + uiCache.shooting = false; + if (uiCache.shootHoldTimer) { + clearInterval(uiCache.shootHoldTimer); + uiCache.shootHoldTimer = null; + } + if (uiCache.shootFired) audio.boltAction?.(); + uiCache.shootFired = false; + updateShootHoverTarget(); + canvas.style.cursor = cursorForTool(world.tool); + renderStats(); + return true; + } function beginAreaDelete(p, clientX, clientY, options = {}) { @@ -417,6 +501,50 @@ const delta = Math.hypot((p.x || 0) - (prevX || 0), (p.y || 0) - (prevY || 0)); world.pointer.motion = clamp(delta / 18, 0, 2); world.pointer.movedAt = performance.now(); + if (world.tool === "shoot") { + if (p.inside) { + if (world.shootCursorActive) { + const lastRawX = Number.isFinite(Number(world.shootPointerRawX)) ? Number(world.shootPointerRawX) : prevX; + const lastRawY = Number.isFinite(Number(world.shootPointerRawY)) ? Number(world.shootPointerRawY) : prevY; + world.moveShootCursorBy?.((Number(p.x) || 0) - (Number(lastRawX) || 0), (Number(p.y) || 0) - (Number(lastRawY) || 0)); + } else { + world.setShootCursorFromPointer?.(p); + } + world.shootPointerRawX = p.x; + world.shootPointerRawY = p.y; + } + updateShootHoverTarget(); + canvas.style.cursor = "none"; + } else if (world.tool === "pinch" && p.inside && !uiCache.grabbing && !uiCache.panning && !uiCache.hosing && !uiCache.areaDeleting && !uiCache.shooting) { + const target = world.findGrabTargetAt ? world.findGrabTargetAt(p.x, p.y) : null; + if (world.hoverGrabTarget !== target) { + world.hoverGrabTarget = target || null; + world.drawListDirty = true; + } + if (world.hoverDeleteTarget) { world.hoverDeleteTarget = null; world.drawListDirty = true; } + canvas.style.cursor = target ? "grab" : "default"; + } else if (world.tool === "delete" && p.inside && !uiCache.grabbing && !uiCache.panning && !uiCache.hosing && !uiCache.areaDeleting && !uiCache.shooting) { + const target = world.findDeleteToolTargetAt ? world.findDeleteToolTargetAt(p.x, p.y) : null; + if (world.hoverDeleteTarget !== target) { + world.hoverDeleteTarget = target || null; + world.drawListDirty = true; + } + if (world.hoverGrabTarget) { world.hoverGrabTarget = null; world.drawListDirty = true; } + canvas.style.cursor = target ? "pointer" : "default"; + } else { + if (world.hoverGrabTarget) { + world.hoverGrabTarget = null; + world.drawListDirty = true; + } + if (world.hoverDeleteTarget) { + world.hoverDeleteTarget = null; + world.drawListDirty = true; + } + if (world.hoverShootTarget) { + world.hoverShootTarget = null; + world.drawListDirty = true; + } + } } function cancelPointerActions() { @@ -424,10 +552,18 @@ uiCache.touchMoved = false; uiCache.hosing = false; if (uiCache.hoseHoldTimer) { clearInterval(uiCache.hoseHoldTimer); uiCache.hoseHoldTimer = null; } + uiCache.shooting = false; + uiCache.shootFired = false; + if (uiCache.shootHoldTimer) { clearInterval(uiCache.shootHoldTimer); uiCache.shootHoldTimer = null; } uiCache.areaDeleting = false; uiCache.grabbing = false; uiCache.grabTarget = null; uiCache.grabKind = ""; + if (world) { + world.hoverGrabTarget = null; + world.hoverDeleteTarget = null; + world.hoverShootTarget = null; + } } return { @@ -453,6 +589,9 @@ beginHose, moveHose, endHose, + beginShoot, + moveShoot, + endShoot, beginAreaDelete, moveAreaDelete, endAreaDelete, diff --git a/js/ui_input_touch.js b/js/ui_input_touch.js index 16f6d56..fa3a33b 100644 --- a/js/ui_input_touch.js +++ b/js/ui_input_touch.js @@ -41,6 +41,10 @@ uiCache.touchMode = "toolTapOnly"; return; } + if (world.tool === "shoot" && p.inside) { + ctx.beginShoot(p, t.clientX, t.clientY, { touchMode: "shoot" }); + return; + } if (world.tool === "area_delete" && p.inside) { ctx.beginAreaDelete(p, t.clientX, t.clientY, { touchMode: "areaDelete" }); return; @@ -95,6 +99,10 @@ if (totalMove > 8) uiCache.touchMoved = true; return; } + if (uiCache.touchMode === "shoot" && uiCache.shooting) { + ctx.moveShoot(p, t.clientX, t.clientY, { touch: true }); + return; + } if (uiCache.touchMode === "areaDelete" && uiCache.areaDeleting) { ctx.moveAreaDelete(p, t.clientX, t.clientY, { touch: true }); return; @@ -121,6 +129,7 @@ e.preventDefault(); if (uiCache.areaDeleting) ctx.endAreaDelete(); if (uiCache.hosing) { ctx.endHose(); if (uiCache.hoseHoldTimer) { clearInterval(uiCache.hoseHoldTimer); uiCache.hoseHoldTimer = null; } } + if (uiCache.shooting) ctx.endShoot(); if (uiCache.grabbing) { ctx.endGrab(e.changedTouches?.[0]?.clientX || uiCache.touchLastX || 0, e.changedTouches?.[0]?.clientY || uiCache.touchLastY || 0); } else if (uiCache.touchMode === "toolTapOnly" && !uiCache.touchMoved) { diff --git a/js/ui_layout_dialogs.js b/js/ui_layout_dialogs.js index 331ef1b..3d0bfcf 100644 --- a/js/ui_layout_dialogs.js +++ b/js/ui_layout_dialogs.js @@ -138,7 +138,7 @@ function selectTool(tool) { btn.classList.toggle("selected", btn.dataset.tool === activeTool); } syncToolSizeBadges(); - canvas.style.cursor = activeTool === "observe" ? "default" : (activeTool === "pinch" ? "grab" : (activeTool === "poke" || activeTool === "delete" ? "pointer" : "crosshair")); + canvas.style.cursor = window.TarinaiUIInputShared?.cursorForTool?.(activeTool) || (activeTool === "observe" ? "default" : (activeTool === "pinch" ? "grab" : (activeTool === "poke" || activeTool === "delete" ? "pointer" : "crosshair"))); } function showToast(text) { diff --git a/js/ui_selected.js b/js/ui_selected.js index 75b89e4..0e1a0a5 100644 --- a/js/ui_selected.js +++ b/js/ui_selected.js @@ -188,7 +188,7 @@ function renderSelected() { uiCache.selectedEmpty = true; uiCache.selectedEmptyVisible = showEmpty; ui.selectedInfo.className = "selected-info empty"; - ui.selectedInfo.textContent = "\u672a\u9078\u629e"; + ui.selectedInfo.textContent = "たりないを選択してください"; return; } @@ -224,7 +224,7 @@ function renderSelected() { ["life", "attack", "speed", "size"].map(key => geneticPercentText(t, key)).join(","), fmt((t.growth || 0) * 100), itemEffectSummary.map(e => `${e.id}:${e.detail}`).join(","), selectedInventoryItems(t).join(","), - (t.records || []).slice(0, 6).map(r => `${Math.round(r.time || 0)}:${r.kind || ""}:${r.text || ""}`).join("~") + (t.records || []).slice(0, 7).map(r => `${Math.round(r.time || 0)}:${r.kind || ""}:${r.text || ""}`).join("~") ].join("|"); if (uiCache.selectedSnapshot === snapshot) return; uiCache.selectedSnapshot = snapshot; @@ -249,11 +249,11 @@ function renderSelected() {
\u73fe\u5728\u6027\u683c${personalityRowsHtml(t.currentPersonality)}
\u4eca\u65e5\u306e\u5909\u5316
    ${recentChangeHtml}
`; - const recordHtml = (t.records || []).slice(0, 8).map(r => { + const recentMemoryHtml = (t.records || []).slice(0, 7).map(r => { const timeText = world.clockString ? (world.clockStringFromTime ? world.clockStringFromTime(r.time || 0) : formatRecordTime(r.time || 0)) : formatRecordTime(r.time || 0); const recordText = quoteNameInRecordText(r.text || "", t.name); return `
  • ${escapeHtml(timeText)}${escapeHtml(recordText)}
  • `; - }).join("") || `
  • -\u8a18\u9332\u306a\u3057
  • `; + }).join("") || `
  • -まだ記憶がありません
  • `; const basicHtml = `
    \u4e16\u4ee3${escapeHtml(generationDisplay || "\u4e0d\u660e")}
    \u5e74\u9f62${fmt(t.age)} / ${fmt(t.lifeSpan)}
    @@ -296,7 +296,7 @@ function renderSelected() { ${selectedDataCategoryHtml("personality", "\u6027\u683c", personalityHtml)} ${selectedDataCategoryHtml("relation", "\u95a2\u4fc2\u3068\u5bb6\u65cf", relationHtml)} ${selectedDataCategoryHtml("inventory", "\u6240\u6301\u54c1", selectedInventoryHtml(t))} - ${selectedDataCategoryHtml("records", "\u8a18\u9332", `
      ${recordHtml}
    `)} + ${selectedDataCategoryHtml("memories", "最近の記憶", `
      ${recentMemoryHtml}
    `)}
    `; diff --git a/js/version.js b/js/version.js index 20aa6af..14b453d 100644 --- a/js/version.js +++ b/js/version.js @@ -1,8 +1,8 @@ "use strict"; (function () { - const APP_VERSION = "39.15.18"; - const APP_BUILD = "tarinai-nearby-constraint-reduce-v39-15-18"; + const APP_VERSION = "39.15.27"; + const APP_BUILD = "tarinai-grab-sleep-fence-perf-v39-15-19"; const APP_CACHE_NAME = `tarinai-colony-${APP_VERSION}`; const STATIC_VERSION_PARAM = `v=${APP_VERSION}`; diff --git a/js/world.js b/js/world.js index 17572cc..91f052e 100644 --- a/js/world.js +++ b/js/world.js @@ -40,6 +40,17 @@ class World { constructor() { this.relationNotices = {}; this.resolvedFightIds = {}; this.pointer = { x: 0, y: 0, inside: false, motion: 0, movedAt: 0 }; + this.hoverGrabTarget = null; + this.hoverDeleteTarget = null; + this.hoverShootTarget = null; + this.shootCursorActive = false; + this.shootCursorX = 0; + this.shootCursorY = 0; + this.shootPointerRawX = 0; + this.shootPointerRawY = 0; + this.shootCursorOffsetX = 0; + this.shootCursorOffsetY = 0; + this.lastShootAt = -999; this.lastPhase = ""; this.weather = "sunny"; this.worldSeed = window.TarinaiSeedFactory?.createWorldSeed?.() || `w${Date.now().toString(36)}`; diff --git a/js/world_combat_effects.js b/js/world_combat_effects.js index 594f374..ecc99e8 100644 --- a/js/world_combat_effects.js +++ b/js/world_combat_effects.js @@ -475,8 +475,19 @@ }, applyImpactDamage(target, amount, cause = "\u885d\u7a81", options = {}) { if (!target || target.dead || !Number.isFinite(amount) || amount <= 0) return false; - const normalized = options.cause || cause || "\u885d\u7a81"; - const physicalHit = String(normalized).includes("衝突") || String(normalized).includes("collision") || String(cause || "").includes("急激な速度変化") || String(normalized).includes("爆竹") || String(normalized).includes("落ちてきた"); + const sourceLabel = (src) => { + if (!src) return ""; + if (src.name) return String(src.name); + if (src.type && typeof toolLabel === "function") return toolLabel(src.type); + if (src.type) return String(src.type); + return ""; + }; + let normalized = options.cause || cause || "\u885d\u7a81"; + const rawCause = String(cause || ""); + const isPlainCollision = String(normalized).includes("衝突") || String(normalized).includes("collision") || rawCause.includes("急激な速度変化"); + const label = sourceLabel(options.source); + if (isPlainCollision && label) normalized = `${label}に衝突`; + const physicalHit = String(normalized).includes("衝突") || String(normalized).includes("collision") || rawCause.includes("急激な速度変化") || String(normalized).includes("爆竹") || String(normalized).includes("落ちてきた"); if (target instanceof Tarinai && (target.birthRitualTimer || 0) > 0.04 && physicalHit && amount >= (options.birthCancelDamageThreshold ?? 8)) { this.cancelBirthRitualOnForce?.(target, Math.max(180, amount * 18), { reason: "強い衝撃で繁殖が中断された", @@ -586,7 +597,7 @@ const radius = Math.max(32, Math.min(220, (it.r || 14) * 1.35 + impactSpeed * 0.055)); const damage = physicalDamageFromImpactSpeed(impactSpeed, { min: 1.2, max: isGenkotsu ? 58 : 34, scale: 8.6 }); const push = clamp((impactSpeed - 120) * 0.62, 42, isGenkotsu ? 1040 : 260); - const reason = impactSpeed >= PHYSICAL_DAMAGE_SPEED_THRESHOLD ? "\u9ad8\u901f\u3067\u843d\u3061\u3066\u304d\u305f\u9053\u5177\u306b\u885d\u7a81" : "\u843d\u3061\u3066\u304d\u305f\u9053\u5177\u306b\u5f53\u305f\u3063\u305f"; + const reason = isStone ? "石に潰された" : (impactSpeed >= PHYSICAL_DAMAGE_SPEED_THRESHOLD ? "\u9ad8\u901f\u3067\u843d\u3061\u3066\u304d\u305f\u9053\u5177\u306b\u885d\u7a81" : "\u843d\u3061\u3066\u304d\u305f\u9053\u5177\u306b\u5f53\u305f\u3063\u305f"); if (isGenkotsu) { it.impactFlash = 1; it.lingerTimer = Math.max(it.lingerDuration || 2, 2); this.triggerGroundShake?.(2.0, 10); } let hit = 0; for (const t of this.nearbyTarinai(it.x, it.y, radius + 54)) { @@ -838,7 +849,7 @@ fearTimer: 0.95, thought: "\u9ad8\u901f\u306e\u30dc\u30fc\u30eb\u306b\u3076\u3064\u304b\u3063\u3066\u30d1\u30cb\u30c3\u30af\u306b\u306a\u3063\u3066\u3044\u308b", }); - this.applyImpactDamage(t, damage, "\u885d\u7a81"); + this.applyImpactDamage(t, damage, "\u885d\u7a81", { source: ball }); const sensitiveHit = t.shouldApplyPersonalityBehavior?.("neuroticism", 1) ? 1.35 : (t.shouldApplyPersonalityBehavior?.("neuroticism", -1) ? 0.82 : 1.0); const stressGain = clamp(damage * 0.55 * sensitiveHit, 3, sensitiveHit > 1 ? 24 : 18); if (t.addStress) t.addStress(stressGain, { threshold: 8 }); @@ -998,8 +1009,8 @@ }); impactor.vx = ivx * 0.72 - nx * Math.min(56, relSpeed * 0.10); impactor.vy = ivy * 0.72 - ny * Math.min(56, relSpeed * 0.10); - this.applyImpactDamage(target, damage, "衝突"); - if (!impactor.dead) this.applyImpactDamage(impactor, damage * 0.35, "衝突"); + this.applyImpactDamage(target, damage, "衝突", { source: impactor }); + if (!impactor.dead) this.applyImpactDamage(impactor, damage * 0.35, "衝突", { source: target }); for (const t of [target, impactor]) { if (!t || t.dead) continue; if (t.enterPanic) t.enterPanic({ target: { x: impactor.x, y: impactor.y }, reason: "高速でぶつかって混乱している", fear: 0.75, wake: true, cause: "tarinai_highspeed_collision" }); diff --git a/js/world_environment.js b/js/world_environment.js index 2c79e91..1e8fe4f 100644 --- a/js/world_environment.js +++ b/js/world_environment.js @@ -38,6 +38,13 @@ return Math.max(0, distXY(x, y, Number(it.x) || 0, Number(it.y) || 0) - reach); } + function rectDistanceToPointLocal(rect, x, y) { + if (!rect) return Infinity; + const px = Math.max(Number(rect.left || 0), Math.min(Number(rect.right || 0), Number(x) || 0)); + const py = Math.max(Number(rect.top || 0), Math.min(Number(rect.bottom || 0), Number(y) || 0)); + return Math.hypot((Number(x) || 0) - px, (Number(y) || 0) - py); + } + function visitNearestObstaclesLocal(x, y, candidates, limit, visitor, opts = {}) { if (!candidates || typeof visitor !== "function") return 0; const source = candidates; @@ -476,8 +483,9 @@ return Boolean(aroundDoor || inDoorColumn); }, - nearbySolidObstacleRects(x, y, radius, { include = null, exclude = null, maxChecks = CONFIG.maxFenceCollisionChecks ?? 24 } = {}) { + nearbySolidObstacleRects(x, y, radius, { include = null, exclude = null, maxChecks = CONFIG.maxFenceCollisionChecks ?? 24, maxRects: requestedMaxRects = 0 } = {}) { const limit = Math.max(1, Number(maxChecks || 0) || 24); + const maxRects = Math.max(12, Math.min(72, Number(requestedMaxRects || 0) || Math.ceil(limit * 2.25))); const cacheable = !include && !exclude; const stats = this.nearbyQueryStatsThisFrame || null; const q = 48; @@ -487,9 +495,9 @@ const qcy = (qy + 0.5) * q; const inflatedRadius = Math.max(1, Number(radius || 0) || 1) + q * 0.82; const qr = Math.ceil(inflatedRadius / q); - const cacheLimit = Math.min(96, Math.max(limit + 8, Math.ceil(limit * 1.55))); + const cacheLimit = Math.min(72, Math.max(limit + 6, Math.ceil(limit * 1.35))); const cacheKey = cacheable - ? `${this.spatialVersion || 0}:${this.spatialDirtyMarksTotal || 0}:${qx},${qy},${qr},${cacheLimit}` + ? `${this.spatialVersion || 0}:${this.spatialDirtyMarksTotal || 0}:${qx},${qy},${qr},${cacheLimit},${maxRects}` : ""; if (cacheable) { if (!this._solidObstacleRectQueryCache) this._solidObstacleRectQueryCache = new Map(); @@ -516,7 +524,16 @@ if (!partRects.length) return false; it._obstacleRectQueryStamp = stamp; checked += 1; - for (const rect of partRects) rects.push(rect); + const localLimit = it.type === "rotator" || it.type === "poison_block" || it.type === "reciprocator" ? maxRects : maxRects + 8; + for (const rect of partRects) { + if (rects.length >= localLimit) break; + // Dense custom mechanical shapes can produce dozens of segment rects. + // Keep only rects that can plausibly interact with this query point; + // otherwise one smooth-motion collision probe spends most of its time + // iterating far-away segments of the same object. + if (rectDistanceToPointLocal(rect, queryX, queryY) > queryRadius + 42) continue; + rects.push(rect); + } return true; }; const candidates = this.nearbyObstacles?.(queryX, queryY, queryRadius, false) || this.nearbyItems?.(queryX, queryY, queryRadius, false) || []; diff --git a/js/world_placement_log.js b/js/world_placement_log.js index 4f4a77c..a50f508 100644 --- a/js/world_placement_log.js +++ b/js/world_placement_log.js @@ -232,7 +232,7 @@ const poweredLabel = poweredInput?.closest?.("label"); if (speedLabel) speedLabel.style.display = isPoisonBlock ? "none" : ""; if (poweredLabel) poweredLabel.style.display = isPoisonBlock ? "none" : ""; - if (poisonCollisionLabel) poisonCollisionLabel.style.display = isPoisonBlock ? "" : "none"; + if (poisonCollisionLabel) poisonCollisionLabel.style.display = ""; if (poisonCollisionInput) poisonCollisionInput.checked = phyScalar(item, "solid", true) !== false; if (speed) speed.value = String(Math.max(-360, Math.min(360, deg))); if (speedNum) speedNum.value = String(deg); @@ -405,8 +405,8 @@ cleanSegments(); physicsApi()?.setSegments?.(item, segments.map(seg => seg.slice(0, 4)), isPoisonBlock ? "poison-shape-edit" : "rotator-shape-edit"); phySet(item, "thickness", Math.max(4, Math.min(34, Number(thickNum?.value || thick?.value || (isPoisonBlock ? 14 : 12)) || (isPoisonBlock ? 14 : 12))), "editor-thickness"); + phySet(item, "solid", poisonCollisionInput ? Boolean(poisonCollisionInput.checked) : phyScalar(item, "solid", true) !== false, "editor-solid"); if (isPoisonBlock) { - phySet(item, "solid", poisonCollisionInput ? Boolean(poisonCollisionInput.checked) : phyScalar(item, "solid", true) !== false, "editor-solid"); phySet(item, "damage", Math.max(1, Number(phyScalar(item, "damage", 7) || 7) || 7), "editor-damage"); } else { phySet(item, "motorSpeed", (Number(speedNum?.value || speed?.value || 0) || 0) * Math.PI / 180, "editor-speed"); @@ -452,6 +452,7 @@ +

    \u4e2d\u592e\u304c\u56de\u8ee2\u8ef8\u3002\u76f4\u7dda\u30fb\u81ea\u7531\u63cf\u753b\u30fb\u6d88\u3057\u30b4\u30e0\u3092\u9078\u3073\u3001\u30c9\u30e9\u30c3\u30b0\u3067\u8f2a\u90ed\u3092\u7de8\u96c6\u3002

    @@ -448,14 +530,14 @@

    \u4e2d\u592e\u306e\u8f2a\u90ed\u5168\u4f53\u304c\u3001\u8a2d\u5b9a\u3057\u305f\u65b9\u5411\u3078\u5f80\u5fa9\u79fb\u52d5\u3057\u307e\u3059\u3002\u52d5\u529bOFF\u3067\u306f\u3001\u305f\u308a\u306a\u3044\u30fb\u305a\u3093\u3061\u30fb\u4ed6\u306e\u6a5f\u69cb\u304b\u3089\u62bc\u3055\u308c\u305f\u3068\u304d\u3060\u3051\u52d5\u304d\u307e\u3059\u3002

    @@ -769,6 +851,7 @@ if (item.type === "signboard") data.text = item.text || ""; if (item.type === "gate_fence") data.gateOpen = Boolean(item.gateOpen); if (item.type === "duplicator") { data.storedFoodType = item.storedFoodType || ""; data.storedFoodLabel = item.storedFoodLabel || ""; } + if (item.type === "robot_cleaner") { data.robotCleanerMask = Number(item.robotCleanerMask ?? 3) | 0; data.robotCleanerHighSpeed = Boolean(item.robotCleanerHighSpeed); } if (item.type === "rotator") { data.physics = { solid: phyScalar(item, "solid", true) !== false, motorOn: phyScalar(item, "motorOn", true) !== false, motorSpeed: Number(phyScalar(item, "motorSpeed", 0) || 0), thickness: Number(phyScalar(item, "thickness", 12) || 12), segments: cloneSegmentsForRotator(item) }; } @@ -784,6 +867,7 @@ function applyCopyBufferToItem(item, data) { if (!item || !data) return item; item.r = Number(data.r || item.r || itemRadiusFor?.(item.type, 12) || 12); + if (item.type === "duplicator") item.r = Math.min(24, Math.max(14, Number(item.r || 24) || 24)); item.amount = Math.max(1, Number(data.amount || item.amount || 1)); if (Number.isFinite(Number(data.seed))) item.seed = Number(data.seed); if (Number.isFinite(Number(data.spin))) item.spin = Number(data.spin); @@ -812,6 +896,14 @@ item.storedFoodLabel = String(data.storedFoodLabel || (item.storedFoodType ? toolLabel(item.storedFoodType) : "")); if (item.roles) item.roles.food = Boolean(item.storedFoodType); } + if (item.type === "robot_cleaner") { + const mask = Number(data.robotCleanerMask); + item.robotCleanerMask = Number.isFinite(mask) ? Math.max(0, Math.min(0x3f, mask | 0)) : (global.TarinaiItemDynamicToolSystem?.robotCleanerDefaultMask?.() ?? 3); + item.robotCleanerHighSpeed = Boolean(data.robotCleanerHighSpeed); + item.robotCleanerSpeed = global.TarinaiItemDynamicToolSystem?.robotCleanerEffectiveSpeed?.(item) ?? (item.robotCleanerHighSpeed ? 120 : 60); + item.robotCleanerTargetId = ""; + item.robotCleanerTargetType = ""; + } if (item.type === "rotator") { const ph = data.physics || {}; phySet(item, "solid", ph.solid !== false, "copy"); @@ -882,7 +974,7 @@ function isEditableItem(item) { - return item && !item.dead && (item.type === "signboard" || item.type === "gate_fence" || item.type === "rotator" || item.type === "poison_block" || item.type === "reciprocator"); + return item && !item.dead && (item.type === "signboard" || item.type === "robot_cleaner" || item.type === "gate_fence" || item.type === "rotator" || item.type === "poison_block" || item.type === "reciprocator"); } function findEditableItemAt(worldRef, x, y) { @@ -906,6 +998,7 @@ function openEditableItemEditor(item, worldRef) { if (!isEditableItem(item)) return false; if (item.type === "signboard") return openSignboardEditor(item, worldRef); + if (item.type === "robot_cleaner") return openRobotCleanerEditor(item, worldRef); if (item.type === "rotator" || item.type === "poison_block") return openRotatorEditor(item, worldRef); if (item.type === "reciprocator") return openReciprocatorEditor(item, worldRef); if (item.type === "gate_fence") { @@ -1033,7 +1126,7 @@ for (const soft of items) { const ok = global.TarinaiStructureLifecycle.deleteItem(worldRef, soft, { reason, - userReason: "置きものが重なった", + userReason: "\u7f6e\u304d\u3082\u306e\u304c\u91cd\u306a\u3063\u305f", wake: true, }); if (ok) removed += 1; @@ -1259,6 +1352,7 @@ } if (hit && d < foundItemD) { foundItem = it; foundItemD = d; } } + if (foundItem?.type === "plushie") return foundItem; if (foundItem && isPinType(foundItem.type) && foundItem.pinState === "ball_lodged") { const carrier = (this.items || []).find(it => it && !it.dead && it.type === "ball" && it.id === foundItem.pinBallId); if (carrier) return carrier; @@ -1359,6 +1453,24 @@ return; } } + let plushieTarget = null; + let plushieTargetD = Infinity; + for (let i = this.items.length - 1; i >= 0; i--) { + const it = this.items[i]; + if (!it || it.dead || it.type !== "plushie") continue; + const hit = Math.max(34, (it.r || 7) * 4.8); + const d = distXY(x, y, it.x, it.y); + if (d <= hit && d < plushieTargetD) { plushieTarget = it; plushieTargetD = d; } + } + if (plushieTarget && typeof plushieTarget.fling === "function") { + if (plushieTarget.fling(this, x, y, { source: "poke", speed: 720, life: 2.8 })) { + this.effects?.push(new Effect("ring", x, y, { size: 24, life: 0.18, color: "rgba(190,142,92,0.34)" })); + this.drawListDirty = true; + audio.poke?.(); + return; + } + } + let ballTarget = null; let ballTargetD = Infinity; for (let i = this.items.length - 1; i >= 0; i--) { diff --git a/js/world_view.js b/js/world_view.js index 7ed29c9..c9678db 100644 --- a/js/world_view.js +++ b/js/world_view.js @@ -35,10 +35,6 @@ return this.events?.emit?.(type, { ...detail, world: this }) || null; }, - on(type, handler) { - return this.events?.on?.(type, handler) || (() => {}); - }, - markSpatialDirty(reason = "manual") { this.spatialDirty = true; this.spatialDirtyReason = reason; diff --git a/scripts/regression_check.py b/scripts/regression_check.py index 303acb5..a345a43 100644 --- a/scripts/regression_check.py +++ b/scripts/regression_check.py @@ -247,7 +247,6 @@ def check_social_action_spec_runtime() -> None: source = "\n".join(read_text(ROOT / rel) for rel in ["js/tarinai_action_definitions.js", "js/tarinai_needs_items.js"]) required_factories = [ "createPanicEscapeActionSpec", - "createFleeActionSpec", "createApproachFriendActionSpec", "createApproachFamilyActionSpec", "createApproachMateActionSpec", @@ -269,7 +268,6 @@ def check_social_action_spec_runtime() -> None: fail("configureTarinaiNeedActions should not be needed after ActionSpec runtime consolidation") forbidden_late_ticks = [ 'set("panic_escape",', - 'set("flee",', 'set("approach_friend",', 'set("approach_parent_or_child",', 'set("approach_mate",', @@ -615,7 +613,6 @@ def check_processing_split() -> None: (social, "function updateMateBehavior"), (social, "function updatePanicBehavior"), (building, "function continueBuildPlan"), - (needs, "function chooseActionForNeed"), ] for source, token in required_pairs: if token not in source: diff --git a/service-worker.js b/service-worker.js index 1a9deb2..4a961ad 100644 --- a/service-worker.js +++ b/service-worker.js @@ -1,6 +1,6 @@ "use strict"; -const APP_VERSION = "39.15.65"; +const APP_VERSION = "39.15.75"; const CACHE_NAME = `tarinai-colony-${APP_VERSION}`; const v = `v=${APP_VERSION}`; // Generated from app_manifest.json. Run scripts/generate_app_files.py after changing static files. From f94120050446b1c64968c023bbec8a02e73052e7 Mon Sep 17 00:00:00 2001 From: 33333-33333 Date: Tue, 30 Jun 2026 10:57:06 +0900 Subject: [PATCH 8/9] h --- FILES.json | 2 +- app_manifest.json | 2 +- .../sounds/voice_008_temperature_buruburu.wav | Bin 0 -> 52268 bytes assets/sounds/voice_009_temperature_achui.wav | Bin 0 -> 41004 bytes assets/sprites/tarinai_34_hot_01.webp | Bin 0 -> 24990 bytes assets/sprites/tarinai_35_hot_02.webp | Bin 0 -> 24156 bytes assets/sprites/tarinai_36_hot_03.webp | Bin 0 -> 25484 bytes assets/sprites/tarinai_37_cold_01.webp | Bin 0 -> 24270 bytes assets/sprites/tarinai_38_cold_02.webp | Bin 0 -> 23632 bytes assets/sprites/tarinai_39_cold_03.webp | Bin 0 -> 23716 bytes css/base.css | 21 + css/components.css | 34 ++ css/layout.css | 1 + css/panel.css | 253 ++++++++++- index.html | 333 +++++++------- js/ants.js | 3 +- js/assets.js | 11 +- js/audio.js | 32 +- js/collision_footprint_system.js | 2 +- js/collision_response_system.js | 2 - js/constraint_system.js | 2 - js/data.js | 17 + js/health.js | 13 +- js/impact_response_system.js | 1 - js/input_mode_manager.js | 1 - js/item_render_runtime.js | 122 ++++- js/item_tool_definitions.js | 20 +- js/items.js | 7 +- js/mechanical_system.js | 19 - js/physics_world_system.js | 9 - js/placement_preview_system.js | 4 + js/render.js | 86 ++-- js/save_codec.js | 6 - js/save_schema.js | 8 +- js/sim_core.js | 5 +- js/simulation_environment_system.js | 1 + js/simulation_maintenance_system.js | 25 ++ js/simulation_runtime_helpers.js | 5 - js/snapshot_system.js | 3 +- js/sound_pack.js | 9 +- js/structures.js | 1 + js/tarinai.js | 4 +- js/tarinai_action_definitions.js | 61 ++- js/tarinai_behavior_text.js | 5 + js/tarinai_contact_item_system.js | 1 - js/tarinai_identity_social.js | 42 +- js/tarinai_item_targeting.js | 5 +- js/tarinai_needs_core.js | 8 +- js/tarinai_needs_items.js | 58 ++- js/tarinai_nest_sleep_system.js | 7 +- js/tarinai_render.js | 32 +- js/tarinai_social_move_life.js | 66 ++- js/tarinai_update_step_frame.js | 27 +- js/text_catalog.js | 15 +- js/ui.js | 6 + js/ui_bind.js | 34 +- js/ui_charts.js | 9 + js/ui_family_layout.js | 2 +- js/ui_family_render.js | 2 +- js/ui_layout_dialogs.js | 43 +- js/ui_selected.js | 9 +- js/version.js | 4 +- js/world.js | 7 + js/world_combat_effects.js | 2 - js/world_environment.js | 345 ++++++++++++++- js/world_family_social.js | 416 +++++++++++++++++- js/world_tool_actions.js | 2 +- js/world_update.js | 1 - scripts/regression_check.py | 10 +- service-worker.js | 2 +- 70 files changed, 1856 insertions(+), 429 deletions(-) create mode 100644 assets/sounds/voice_008_temperature_buruburu.wav create mode 100644 assets/sounds/voice_009_temperature_achui.wav create mode 100644 assets/sprites/tarinai_34_hot_01.webp create mode 100644 assets/sprites/tarinai_35_hot_02.webp create mode 100644 assets/sprites/tarinai_36_hot_03.webp create mode 100644 assets/sprites/tarinai_37_cold_01.webp create mode 100644 assets/sprites/tarinai_38_cold_02.webp create mode 100644 assets/sprites/tarinai_39_cold_03.webp diff --git a/FILES.json b/FILES.json index 61b1ba9..89f458d 100644 --- a/FILES.json +++ b/FILES.json @@ -1,6 +1,6 @@ { "purpose": "Token-efficient machine-readable routing for tarinai_. Use scripts/ai_inventory.py for exact current file expansion.", - "version": "39.15.75", + "version": "39.15.77", "entrypoints": { "app": "index.html", "runtime": "js/main.js", diff --git a/app_manifest.json b/app_manifest.json index 86a315a..ebe8554 100644 --- a/app_manifest.json +++ b/app_manifest.json @@ -1,5 +1,5 @@ { - "version": "39.15.75", + "version": "39.15.84", "css": [ "css/base.css", "css/layout.css", diff --git a/assets/sounds/voice_008_temperature_buruburu.wav b/assets/sounds/voice_008_temperature_buruburu.wav new file mode 100644 index 0000000000000000000000000000000000000000..fbf4666d6fee19af432e6f651f0fe28cf33a9796 GIT binary patch literal 52268 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 z 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 literal 0 HcmV?d00001 diff --git a/assets/sounds/voice_009_temperature_achui.wav b/assets/sounds/voice_009_temperature_achui.wav new file mode 100644 index 0000000000000000000000000000000000000000..6870f41fcb2203d1c52fa34d419fa8251fa4b469 GIT binary patch literal 41004 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
    jct5g}ea1VM2>khhbeBBFGm1Mj zQhi~oX|JGaY^!)5O!hVOJWe_6p5lA1-(r28`(5>&3-C^Z_ev?^#rrzG$Z7O8DsJE6 z>Bq)+^E8h^RKrInupi*jL{q!0hW8p3W+T**wmP=*YEHI@XAC-h_1zm&J9?)3m-C(K zWyez2N=J9CtTtMSm0Lx3#M5IDtEz%%^UwUH5zcFhdGs?*uaWE=;t)}ED(r4XytN=j z?QUnbY3L-~V?GRo`EsNwZtD3i(1BN17dWRo=fh^*RG+b9axs==ZKy`WvO54JDVD$#0uS1`#Fme$Vw$SwQ>ZuT>XX_07FT6Pq~bH#huAV{t4RTK zN#LsIl=~<5ZjU=KOJvo$IMz9O*rL@XN>1iLJT(sT9u6KlM1BI{i z5mZ1yR1i@lm{2jHf(Zkn$dE)ONtB#(Q0eX)D*exU&-DL&Ykgg->sFn7_St8jwD(&_ z5(Dh{!Qjl^(p`U_`}dxc$5N+;_qwg}AF41ZS&13zNT-U^Grq~5>+W#oGV{F(isCc)6=Qw{XQ=g2ILEJ=y}@r`-Q>RR&37HnG2TJTeodGU{?&Z1 zXMUgjZ1NN5l<4hj#nhORWhYynoK^ayKgK$o=vLvG+$2titF~YzdyRuTFNYFedN*#7Fi6LHkUr)P$19Pi`-n znCcw-W*-5wP0QbsZ0ubUPw>ZOu1z&5{iNi@(sR{9HE~Kmt{V3|?9;1H@x1NZqupbUTvlDu|J3jAG>_Zm2jpIK4Z|UA;lS&>c zX;iu>Qxbjb7Uhr5yWP!mzM;?D4<6h7&a2SkZhL}NAzYrFlf5{2+WNxV;I(zXkH>~r zgHlrybcU<#jo!`qz4MEcPdgRE*E3zxx0d}~(!6wP*|*tStoIU?^B?iB;IVo*r+UY* zx7h2Pa32LfY+3Yx|7Z3_u-JyVAA;v}hrKc^U_5^~YJiUV1y0qx&-1^^OL?>6aen3O z{izmZ6HDJOy(jgdf4%+hK@<8Q%mTAQ~se{$Y!Ztdu`tdAYiJ7rT!e=3`m-5w5g9!YjfOmjOr zMfN(Uw>!hx>3-`zgni3T(F?(0|1Q5mbgy0Fwo6oW8b_P3H8~oU#d8^ZZbaX+9j9WT? zdkwv>u#7n~I+JmC9c$u`oX&}N^M1?w(JhM?1W#m_rR%46lwMZWBRwn24rgL_@*yt* zUG4NE#_2nYqUBj&9)6X#+SHtlBc+vqg$gO?8NTv8__S;R`=E9qWrbV z=I&!r_w2{%=4mVSXIWnQg3QHXWk!c&@>7? z9!msvVKg92hY2(*TE{P23oG1fK(Kr$IvA`7-VclI54~k>KkJY1UqMeSrHVN1TjiYPPEO3vTb0;u zcMA)%12SHATe^K}cdBz{YjCO46U>P&=qTI;`cav8&^_tg=N3348sA z?{;lY6I!`fy4SPIbF({?)7;Tu>%9~-4-SQQIfoOq-BHo0Vcqb-xFr~AAKFhkRlN>* zKO{H0r^VB7)V zxy!v5k{^3FTQkDB{^HCP{_$+J^r5nX)UfOs&bYjR$s>|(_8U%-Ti<)lJ&#p?WzL@R zft-58FOG)V*Lm-Hw_9cYsGt(F_lumJj9Lx66^RAO1MY9p$A07NsO(>UHUHK0t?6o+ zP5xNt0NmZqO=4yCfm_vkz+DF#&;c}V?ub`KQ^P9Z9Iz}dahGwLJJ6rSTC=@V>U6>` zsh5{Y{G90NJ{;ZbPxcQ`($Qcd4M=Us42f5J6%vizTfoXa?i6`8qhEdZLwg_gMZZSB zhCRb|L2vd9KXu=-w*{~G1EV2WuT^K?sK|ZOI~Tm7@%Gs8F8?P#@Td4&GCfnLf@}0n zbU|Wua+lX1`@5RV9XD{^^PDq|lYkkVb^a&p9DEiuwW@)vvcawe^%(oCB5-}aVlQf@ zcSoX+_qDY-_|o6*pUv9lwoKR5=2Y#hAODuvo#^ega3Wgv4QDm@r|jHaSDvAMfM2S^*;4h zdk@%aS%G#48i36DTy}Ta=cQ+*T7{P<{+0h%;%sLV`Wx%8KI`H3XSR0_Gl0giAB@fp z3HHVd+z!dB-5c4XoD>|2M%wS%=Q?>_&BVKjrS7%yR(}CVX&~W-*Jq2;lgmoe??x}X zCCMif3&_97X=g73gSWrk-s#J^M5DNCI6mNDDQ?29R;iT=e**Qef^D&PF^F-va^gth zJ*RWLEm-aE54wgI`OPyYQibVp*~8ZFiBG)Suo|3W*JADXw%yM;!7B4oG^FN+#o@c* z@6nauwKYaL`C-mG8pd6${dS={%bDn26m&+atnga7pGO73OF{K`JT$+^xySw79qsmU z``Mp_Lpc+k6BdH=bUc+PtD34D)bdv4txjwPwec})9%qYHIg^+Ny4(-!`P>=yWnFQt z^|yO(VwF=nYU~dV{$%!BX1~SwyT_a8UE_|5t1wDj#VK>w=$q_IsZFUM{YEt1yD9OM zyBD3CevCj$2!X&?e{@ zZL#ycD(>}hmtZ<*3E$BJZgjUhW84>+e?Dyg5^V}rhFw^bjR@Y!R7tHbn~=T9?vrep zH{6xhPZ|xqs#xH=?6!U2w6uDLUof+(74CK(OL*Q%>oage-Edbt!nu=O>$={z?o8)A z>zS}q@C#=;;3$W^vOCI}rq*TG*{kz5C!TViM?ddie5!q^Gl+5Jc}^Q@*;~S|{T}{~ zaHsRQH^P0?3jC&i(`b^_jdPc2r*qy; z)Y&ImNwC|NfKA!Q`@#K=ebz1UQ{hL!#$Zx(ms2lsv->e97a#dYqW-KB6W#{rAMSU~ z47AyXL}P**qJ?n?j^L1Vzp|m}d!uRIfV?Xb6YUnv7Js!uP_L%D&$|z@<1-#Ebb}{@ zS@EsjcZm!rXOsPBgYD5LR#z~W#=0AvTFCXT@t?u4@GAB(nnj(0Md{ISz>09BH#6@Z z?=Md3!|1cPz+URy>y2}J*ymdRj4FjY{k6eL?7^pdXFB7t2=ccpSY1Z7tMJQ7a z0o(O;aI9Z*MtSdGn?2k95t+8auMxbD+cO@B4{^od4*#35p>@>m;9lWPb+2+RM;q#^ za7*|iXAl31*9MkF2sC*rz=SlHo5F@Y6>`67w-o%;El*BCe8}z|e zW9z$uQ(WI!=`?aLw~IKJS>`_y4zfRWuXP7m!^6eF*l=!qC;KF)aN6-BIs~Jw)?hxb zh&INBoSRPtuc#X*c<6q3T@pRqBJjZT(WC%x*S*AR>s5D#$6tpVf|rAJXjsh$sku0w z70eGx!`Ilizn@dWnh*v?Jfb6yt*}m-IY;cY1{@>f?Mqd(Idf|V3dyIjBKsb$?50pwO)?9fVjUhnvTxo zBjE{7T7S-r@b|~F-5qXC=Qz4%tF0fLU!AXc_nh8#12|$zbYs+!`N^x!MRsvC3H^@? zJFmy2y`)8N1ejQgO9<) znjf%7?>6*0IOE9k1#6^zCCJOmz!i7~o6N~*((H@|#)bBkc3tvV6Mh=jMsMX>b{jX@ zm)j8xj+qHSw!a6EqPPX9xJ3!tWT(r?BQNULqkJ$6jsu~Ki z_7v6;x7i)hMN2bV9mt-2nYD=h+uQB?>>ruceTSX>6uzBtJ}p%xc+bDnKNd8x`g3mg zIA{LqQ+7{YiYI&N39W*8MT;(u~f0^ZwajH76TZWobQB_w+n^D9A7#BR zI6s^pN*iz$6uR8%V7&}lXPNyDXB3OkGAKjqx@+7JJ^1#FjrU-nQq1|#f#?l%hn86L znAJRF*8{!1B`2DA{cgLRJqazBCFnw&&be@ky_>aYnp}>C z=sV~UzlHsIu~isv3@4*$fGrz{14pnM-_D8S?3^}u3N5^Lpjk9#G~9{?QxH!B7vOg^ zPeU|1tFgKo;oR*6oC>d^q^B^BuHlU6d^F+Tjq*W^d^GOGiP0aNnvda}{|Pj(WW{$Y ztGlwOE;#m2gu}uu5qn5T$KTQY?u{PsK&aY=ljaybyM<^Chw&fS^H)S0&W}bj%H2Z` z`WcRBWxt2U^f~b8AoOBupsn;pd_IWbZnz)0JCzf4VE~+umenqhr9W_PK`Sa{RcDr8 zf(7xb=#@Q%_VT0X`z=E6Z6F$d|Izvgjq%o4ftQlU<>>Ri3Rf-$oxLKv1h1p1I1TOg zcGgBt>|LF=+YRj+=sO)ncX%f}cnjLgjgXEX#>b;$(f1$$+=(S{N9ZNHIC7&l&yfCT zv>N(=tGgg7#vWq|+GCgSrG*#Ksy$%cY_F!Zu0khjfBY1?2xmgmZQwQ>r5xS)cECC4 zY#l`R`djOBG`bq2h1h`dR^wD|T>M&eE;z4sIrXcE{$6`{ZZ#U+b>Y-s?MK*Uc+MV- z=JpWw#NP#p;Cl3O=SB{QE4|Sj?F@%~hhB15B*`)~r>_D#U?FF{>%q>yGP*Zfj?VjI z=#npIZz}-X^=Yd=x(-uWV^y>_4TSaRmmfoy_Y2;;(SydKdwg%SELuR{>wz}<*B~|=MbC91A%8|Y zJ`WA8Bqt0n(r2cT!cOGT%RFsBgQG9~Z3(B?_tD#)MGx^&Y%VH`8@iF+<3Zhp=rYVlZeK=izMm+Y7;wJ((SjQY zF%B+}%~*5jcNRO*v#q8`lnibE0xf$1t|ioGI5WG3@t;t)7iFlA?70EiunswJ8mIBo zvEB$st4_QhJ+zr{!R_SUfRj|=0t`X3uA_af-Q9i|%a9My{rm%2@-ksxWjAnL^a_1o z7PcD;L3Q~Sxj33qjO8muUD5RYGTIb92p3mH8upKSQu5ca<@pTF`eO994WygiGIq`({I{ezfSH@Iq_) z#$(JV_b~qbj0C+D3!t^Ma3?Ea^*|myL|awBYGfI0T$i%#B;GFC_&(@A89j&3;fmJi z4R57)uBWUwVHJcPKP8_4-bqNxk0WDc;S{2`^%Q;jZoW>Efv3NwcXy-@?SfyLqw`*d zHhUB5KL}f$E0M4F({?4K`8GT-2d#(B)~&S3y?jxs6*{)_;oD-q9yFca+XJhH@1W&v zw8d$RR*RTXwL|-GJ-z!YIO`QkxsBdCk5nE<`h3r6|5l`P8?2Dp(3j7^68%BzPx{t$ zz5(XryOh$NU{v}ZtD9kzIy>3B&a@{QXa*wrx&xW zzKm8sF`^$sLUlo3aX<9xi~Bfwo`anDl5lO23#)1UeOUY54_}=EXRW1_SA#Hg7255q zupV)VF^qn31scG+kpRmzqhLh)C))X!ab{l)?c?Fts%(cpmogs{LdYU0o1wSNwZ22& zd;nqIz-H%SFl#c{`v6S*MxeD9yEwFdr*oY(DV^B9;RdS^$a!o71=i( z`E)_@*z zk6r^7(RlKng7n>pt)HwOTf%R5K^tKs$lksf8SrIXgoGXl?`ef5dwd_}8z?e>6YF}E9#~IoCGqSve7X1wRRfv4p2ai{R<7dL%XVY))!y;l1 zT%M10;g|Gq58omva4vn|S$xNk=g*8LOX#TysQxojy#bm&V@Y)dE!U0Km36i(V*jGW z24EBRB7J`%d40)TLYB3%*)4>=JF$=Rd8*I&v>Mm-P)6S}Y|E^m8C=?unO=A3&;u@N zPO1xuzaHBE1jp=T7-p0&J z8{%tWF?KpV{8M^@5S12V&$@-spU^71=#?|@*#JdPMkx6}YJxeX1UGI1NrIL%vlf<@U_(gcxy{*2iWD=_uTVy_D`4ad#jG=TS$| z^$0R~Wo`@+`p9|MpVTD>)w&L;qXq=GmN3^7K7}xuWVf6q)Qz`>>_$dm zcR*Xqj`jd)?;M{6;sJ48Dckp6+(2qM&g-EiOr zB;FD<_o^_`mEyLKQK1;xpToTsHEf0)FQ7eS|6f3>ZX(PAX)FbLh`5rorU^QikxXfZVq+ahb;Jpy6q>Ob@16z=q>b$P4IDZN>PXW>%vck zxt=0Cm#WZT>jj_MtfPNcpv1z!k;U~P-l}k-a{@k*h4yB`?1lc@;7XVJR3gtJ){~df zX0oNON!!=ussgS4qGTCLA#{wIXF|bI88SD1yEJi?G`akqvkI6I=EEeS-406R1gwKz}!d}MDnXm z`KrOO^>XRgfND*6&!?vQD6jZI_)?omKY+s;Qic}zs(iBV7m|d~4{Un#YD%x~;R?CYk?^Xj5mNOQI>%9HCNu?oRaPY^p?9>;&3=j~i9^^Lw5N^!wQ!&Gyg2ke8&a(42%2b4rf7LWYtwc1TCx0FICjS^8@Y!d51P5DY4F32j1nE&0Sf z4pmM?1`D}N=u*OsX+SP1q+eU|6}Ev|L);+@lOyz^M2?!maj~JUkRXJja1=Tm%yFwj zzZ52#LC6xWoM^8Wu1t6#k{Lt~Aw;RiOEPVtZwle*821ufgc&5fngd7!p*0-gNu!Kx zqt!cwA)@va#*IPakpDh7b`RH1+HNya=MUTr&eM8wI7}IZ;c=&W1C=DT3 z2&Dyf$ih^gchQfG3Y=-kK#a&mJl*biaew*e}GGfA42{RE`{Wd#?W0* zPh-|Zl$G#A}1U_(P0Z=MLnS?X`~Hv zZLBsD|7%ncB8`w+wo@8$-d57y$6a-hY?3_L#k=M+LW~ijjHJB~poF5A#YOlS!uS%R zlyWy%Ec%M5xIcy8KHP*eaugT6XGtUCSGYgIOR|tb7GsLgLxikjsOQ5s>VcYz;f=rO zBK#IfOCit*r!2--=tL#>2sKCuE*9heLEN<0f$;=B!d(+KltEZ3$VnI>Gzrg0`Ds2T z384}T??#js295Gn{*sS+5*D6hiqL}8=BZq*g?eNoo76AW1Jz=B67rN#bA+%beo*-& zSqu)35Y~hr6p+7AjhtNRR8k?(2|-ViU$e}LylWkpCQbEqrK9hvi{e7F@{mr#uF^OU zW&+Z(T25vPd8#7u^{sH#S>XzC$tR3(+$s^S7IB2Hm5-lrCHa~vF@$g@X{|9;VKjbg zL@eUHkbE>|NIDx#LglDYQf1I6p;2A9ai zQXT27yRa>51zEW}5+WL0u?E+Dk(sqwKY zp%hP}h0wherwV?;5HpCEs+DB4W+9pz>sR<(xGps;r2 zDl|X2YCcn&vebdPjdQv)GI6lyjG_z8J5!Gx+UD7@@Xy%)Phg ztvydltGpCvlFk{pcF5&(dM?HGxg5?U)an0?p%5yG;&;GRXh8BaarLg!w&qtQZ^^%| zHn}Ig73X~PB&sye(a$^;K~r7gr)IQWBWS5MQ(HI4JvD)*dJ{IL_+64kJ|={Cp&@SK zKgATk>#D<>_(StcwTh&UdQWY7kwM5>M-0^3bHOvYXzbFpd9z8gf@|DwWbv4NX18VNG~9)TqO+ zE+ZL?jF1#HGDDJ8l0zea!pL84^4FWz(UPo2(iQMqjekj9^%O~Z$@r>BGhtIoqG@)o z`F&-ioTRRir+U)bNjR&*36&g`TsD$fev+>FNK5l;WUt01$;%`ol4b__7h+;wPNr%v zPcihX_~tI@s{F2kDfpQQ(DObQ!Rw)6Ju43*nM}P6l|%tu#;07GiNDL~W&FkWhFS_EUKee3 z7k!QFGjgdsq@lg~gYngDULmxi(62^2&H2s0`a^j;8r~5Xm`gsUcNlKe2qo^&>P{SE zT+2Dh@RPVze6A5oV_hrmM@~;mS>WMF!{C>>4SQ z;wY3><4W7amA`RS7$LN4S3o;Pa@Ae2w7VyF?Vp%;rLGdFJSL1{m;0IZzVT71Ozx%@ zrbgPWPuW+NuKWx(arj?4DLqpvrDUE=9;QUvH!R;p gQ@ONvX=-GsW9lT@l-J3)lvC5xLt%9(eo6fQ06n#AY5)KL literal 0 HcmV?d00001 diff --git a/assets/sprites/tarinai_34_hot_01.webp b/assets/sprites/tarinai_34_hot_01.webp new file mode 100644 index 0000000000000000000000000000000000000000..2c8eebd30b1b21fb9eacec33a7f726aa3a20ec86 GIT binary patch literal 24990 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 literal 0 HcmV?d00001 diff --git a/assets/sprites/tarinai_36_hot_03.webp b/assets/sprites/tarinai_36_hot_03.webp new file mode 100644 index 0000000000000000000000000000000000000000..ab1d668b5eaa29a12b9e96aba96e5c468ddc9805 GIT binary patch literal 25484 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 -Ffk)=VgMnAVb}(oRc!<8y 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 -Ffk)=VgMnAVb}(oRc!<8y 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 literal 0 HcmV?d00001 diff --git a/assets/sprites/tarinai_39_cold_03.webp b/assets/sprites/tarinai_39_cold_03.webp new file mode 100644 index 0000000000000000000000000000000000000000..b747187618f1f5287763d6964409fede79698063 GIT binary patch literal 23716 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 -Ffk)=VgMnAVb}(oRc!<8y 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 Tf*Edq^j1Is00000000009Wdz3 literal 0 HcmV?d00001 diff --git a/css/base.css b/css/base.css index 0952812..ed57595 100644 --- a/css/base.css +++ b/css/base.css @@ -214,9 +214,30 @@ h1 { color: var(--ink); } .field-choice:hover { border-color: rgba(112,178,66,0.45); } +.field-choice.active, +.field-choice[aria-pressed="true"] { + border-color: rgba(112,178,66,0.72); + box-shadow: 0 0 0 2px rgba(112,178,66,0.18), inset 0 0 0 1px rgba(255,255,255,0.64); + background: linear-gradient(180deg, rgba(248,255,240,0.96), rgba(231,246,210,0.82)); +} .field-choice strong, .field-choice span { display: block; } .field-choice strong { font-size: 15px; } .field-choice span { margin-top: 4px; color: var(--muted); font-size: 12px; } +.field-dialog-lead { + margin: -4px 0 12px; + color: var(--muted); + font-size: 12px; + line-height: 1.5; +} +.field-dialog-section-title { + margin: 12px 0 7px; + font-size: 12px; + font-weight: 700; + color: rgba(75,62,43,0.78); +} +.reset-dialog-panel { width: min(760px, 100%); } +.reset-preset-choice-grid { grid-template-columns: repeat(5, minmax(0, 1fr)); } +.reset-preset-choice-grid .field-choice { min-height: 66px; padding: 7px 5px; } .field-dialog-actions { margin-top: 12px; display: flex; diff --git a/css/components.css b/css/components.css index 7a20e67..512dbb1 100644 --- a/css/components.css +++ b/css/components.css @@ -743,3 +743,37 @@ .collapsible-card.collapsed { min-height: 0 !important; } .log-card.collapsed { min-height: 0 !important; height: auto !important; flex: 0 0 auto !important; flex-basis: auto !important; } .log-card.collapsed .panel-card-body { display: none !important; } + + +.temperature-control { + margin: 10px 0 2px; + padding: 10px 11px 11px; + border: 1px solid rgba(118, 92, 61, 0.16); + border-radius: 14px; + background: rgba(255, 251, 244, 0.56); +} +.temperature-control-head { + display: flex; + align-items: center; + gap: 8px; + font-size: 12px; + color: rgba(68, 55, 41, 0.84); +} +.temperature-control-head strong { + margin-left: auto; + font-size: 15px; +} +.temperature-auto { + display: inline-flex; + align-items: center; + gap: 4px; + margin-left: 4px; + user-select: none; +} +.temperature-slider { + width: 100%; + margin-top: 8px; +} +.temperature-slider:disabled { + opacity: 0.52; +} diff --git a/css/layout.css b/css/layout.css index c5eb8dd..ed5e7b7 100644 --- a/css/layout.css +++ b/css/layout.css @@ -325,6 +325,7 @@ meter { #gameCanvas { height: var(--field-mobile-height, 66vh); min-height: var(--field-mobile-min-height, 460px); } .stage-wrap { min-height: var(--field-mobile-min-height, 460px); } .field-choice-grid { grid-template-columns: 1fr; } + .reset-preset-choice-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } diff --git a/css/panel.css b/css/panel.css index caa34bc..1843516 100644 --- a/css/panel.css +++ b/css/panel.css @@ -187,14 +187,14 @@ body::before { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-rows: minmax(13px, auto); align-items: stretch; - overflow: visible !important; - text-overflow: clip !important; - gap: 2px 3px; + gap: 2px 4px; margin-top: 2px; + max-width: 84px; + width: 84px; + max-height: 34px; + overflow: hidden !important; + text-overflow: clip !important; white-space: normal !important; - max-height: none; - max-width: 100%; - width: 100%; } .family-personality-tags em { display: flex; @@ -210,32 +210,245 @@ body::before { font-size: 8.2px; font-style: normal; line-height: 1.18; - overflow: visible; - text-overflow: clip; - white-space: normal; - overflow-wrap: anywhere; - word-break: keep-all; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } .tool[data-tip] { position: relative; } -.lineage-family-tree .tree-node .family-copy { - max-width: calc(100% - 8px); + + +.lineage-family-tree .lineage-tree-panel { + position: relative; + overflow: visible; + min-width: 360px; + margin-top: 6px; + border-radius: 14px; + background: + linear-gradient(90deg, rgba(84,68,48,0.045) 1px, transparent 1px), + linear-gradient(180deg, rgba(84,68,48,0.040) 1px, transparent 1px), + rgba(255,250,244,0.48); + background-size: 34px 34px, 34px 34px, auto; + border: 1px solid rgba(84,68,48,0.10); +} +.lineage-family-tree .lineage-links { + position: absolute; + inset: 0; width: 100%; + height: 100%; + overflow: visible; + pointer-events: none; + z-index: 1; + isolation: isolate; +} +.lineage-actions { + display: flex; + align-items: center; + gap: 8px; + flex-wrap: wrap; + justify-content: flex-end; +} +.btn.active { + background: #efffde; + border-color: rgba(103,178,44,0.46); + font-weight: 700; +} +.lineage-render-status { + position: sticky; + top: 0; + left: 0; + z-index: 6; + width: max-content; + margin: 0 0 8px; + padding: 6px 10px; + border-radius: 999px; + font-size: 12px; + color: var(--muted); + background: rgba(255,255,255,0.88); + border: 1px solid rgba(84,68,48,0.10); + box-shadow: 0 4px 10px rgba(64,48,32,0.06); +} +.lineage-stale-status { + position: sticky; + top: 0; + left: 0; + z-index: 6; + width: max-content; + max-width: calc(100% - 12px); + margin: 0 0 8px; + padding: 6px 10px; + border-radius: 999px; + font-size: 12px; + color: rgba(92, 75, 52, 0.82); + background: rgba(255, 249, 232, 0.92); + border: 1px solid rgba(150, 115, 46, 0.16); + box-shadow: 0 4px 10px rgba(64,48,32,0.05); +} +.lineage-family-tree .lineage-links path { + fill: none; + stroke: rgba(107, 88, 61, 0.58); + stroke-width: 2; + stroke-linecap: round; + stroke-linejoin: round; +} +.lineage-family-tree .lineage-links .partner-link { + stroke-width: 2.4; + stroke: rgba(98, 80, 56, 0.68); + stroke-dasharray: 5 4; +} +.lineage-family-tree .lineage-links .child-link { + stroke-width: 2; + stroke: rgba(107, 88, 61, 0.58); +} +.lineage-family-tree .tree-node { + position: absolute; + width: 150px; + height: 104px; + min-height: 104px; + box-sizing: border-box; + align-items: flex-start; + background: linear-gradient(180deg, #fffdf8, #f8f1e5); + box-shadow: 0 2px 5px rgba(64,48,32,0.035); + contain: layout paint style; + z-index: 2; + isolation: isolate; +} +.lineage-family-tree .tree-node.child { + border-color: rgba(103,178,44,0.34); +} +.lineage-family-tree .tree-node.dead { + opacity: 1; + filter: none; +} +.lineage-family-tree .tree-node[data-family-tarinai-id]:hover { + transform: none; +} +.lineage-family-tree .tree-node .family-portrait { + right: 4px; + top: 4px; + bottom: auto; + width: 48px; + height: 48px; +} +.lineage-family-tree .tree-generation-label { + position: absolute; + left: 10px; + width: 54px; + padding: 3px 0; + border-radius: 999px; + font-size: 11px; + color: var(--muted); + text-align: center; + background: rgba(255,255,255,0.70); + border: 1px solid rgba(84,68,48,0.08); + z-index: 2; +} +.lineage-family-tree .lineage-empty-family { + position: absolute; + left: 72px; + bottom: 8px; + padding: 5px 8px; + border-radius: 9px; + background: rgba(255,255,255,0.70); +} +.lineage-family-tree .tree-node .family-copy { + max-width: calc(100% - 46px); + width: auto; } .lineage-family-tree .tree-node .family-copy strong, .lineage-family-tree .tree-node .family-copy > span:not(.family-genetic-stats):not(.family-fight-stat):not(.family-personality-tags) { max-width: 100%; } - - .lineage-family-tree .tree-node .family-personality-tags { - max-width: 100%; - width: 100%; + max-width: 84px; + width: 84px; } .lineage-family-tree .tree-node .family-personality-tags em { - overflow: visible; - text-overflow: clip; - white-space: normal; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +@media (max-width: 720px) { + .lineage-main-content { + height: 70vh; + min-height: 420px; + max-height: none; + } +} + +/* Restored from the original ZIP: fixed colony graph/legend sizing. */ +.colony-card { overflow: visible; min-height: 0; flex: 0 0 auto; } +.colony-stats { + grid-template-columns: repeat(2, 1fr); + margin-bottom: 8px; +} +.colony-chart { + display: block; + width: 100%; + height: 188px; + min-height: 188px; + border: 1px solid rgba(84, 68, 48, 0.14); + border-radius: 14px; + background: linear-gradient(180deg, rgba(255,255,255,0.70), rgba(246,240,228,0.54)); + overflow: hidden; +} +.colony-card h2 { line-height: 1.45; margin-bottom: 10px; } +.colony-chart svg { display: block; width: 100%; height: 100%; } +.colony-chart-legend { + display: flex; + flex-wrap: wrap; + gap: 4px 8px; + align-items: center; + margin: 4px 0 8px; + font-size: 11px; + color: var(--muted); + line-height: 1.25; +} +.colony-chart-legend span { + display: inline-flex; + align-items: center; + gap: 4px; + white-space: nowrap; +} +.colony-chart-legend i { + width: 8px; + height: 8px; + border-radius: 999px; + display: inline-block; + box-shadow: 0 0 0 1px rgba(70, 52, 36, 0.10); +} + + +/* v9: keep 2x2 personality tags inside fixed family-tree nodes. */ +.lineage-family-tree .tree-node .family-personality-tags, +.family-personality-tags { + box-sizing: border-box !important; + display: grid !important; + grid-template-columns: repeat(2, minmax(0, 1fr)) !important; + grid-auto-rows: 13px !important; + gap: 2px 3px !important; + width: 86px !important; + max-width: 86px !important; + height: 28px !important; + max-height: 28px !important; + overflow: hidden !important; +} +.lineage-family-tree .tree-node .family-personality-tags em, +.family-personality-tags em { + box-sizing: border-box !important; + display: block !important; + width: 100% !important; + min-width: 0 !important; + max-width: 100% !important; + height: 13px !important; + padding: 1px 2px !important; + overflow: hidden !important; + text-overflow: ellipsis !important; + white-space: nowrap !important; + line-height: 11px !important; + font-size: 7.2px !important; + letter-spacing: -0.08em !important; + text-align: center !important; } diff --git a/index.html b/index.html index 0d8fa5a..e663d11 100644 --- a/index.html +++ b/index.html @@ -7,11 +7,11 @@ - - - - - + + + + +

    @@ -102,6 +102,10 @@
    状態安定
    地面
    +
    +
    気温10℃
    + +
    @@ -150,15 +154,28 @@