From 10fbeb2327978ccd7145729d0e4687c75679f8b5 Mon Sep 17 00:00:00 2001 From: 33333-33333 Date: Sat, 20 Jun 2026 21:41:15 +0900 Subject: [PATCH] git --- PATCH_NOTES.md | 19 ++ assets/objects/ant_corpse.png | Bin 0 -> 15067 bytes assets/objects/ant_queen.png | Bin 0 -> 48421 bytes assets/objects/ant_worker.png | Bin 0 -> 15218 bytes assets/objects/ant_worker_mid.png | Bin 0 -> 20383 bytes assets/objects/ant_worker_small.png | Bin 0 -> 13888 bytes assets/objects/ant_worker_small_b.png | Bin 0 -> 13797 bytes assets/ui/tool_ant_nest.png | Bin 0 -> 1094 bytes assets/ui/tool_ball.png | Bin 1568 -> 1471 bytes assets/ui/tool_nest_box.png | Bin 3135 -> 1857 bytes css/styles.css | 29 ++ index.html | 15 +- js/ants.js | 403 ++++++++++++++++++++++++++ js/data.js | 6 + js/health.js | 2 + js/items.js | 93 +++++- js/tarinai.js | 76 ++++- js/world.js | 167 ++++++++++- 18 files changed, 794 insertions(+), 16 deletions(-) create mode 100644 assets/objects/ant_corpse.png create mode 100644 assets/objects/ant_queen.png create mode 100644 assets/objects/ant_worker.png create mode 100644 assets/objects/ant_worker_mid.png create mode 100644 assets/objects/ant_worker_small.png create mode 100644 assets/objects/ant_worker_small_b.png create mode 100644 assets/ui/tool_ant_nest.png create mode 100644 js/ants.js diff --git a/PATCH_NOTES.md b/PATCH_NOTES.md index 8582fe4..8c5ba5c 100644 --- a/PATCH_NOTES.md +++ b/PATCH_NOTES.md @@ -33,3 +33,22 @@ - Shortened ecology cards and added the HP/stress meter placement note: upper meter is HP, lower meter is stress. - Raised the friendship threshold to 16 affinity and reused the same threshold for friend count, friend behavior, friend UI, and observe highlights. - Observe mode now highlights friends of the selected tarinai as well as parents, children, and enemies. + +## Ant nest update +- Added a new placeable `ant_nest` object and tool button. +- Added ant sprites cropped from the provided source image: queen, worker variants, and upside-down worker corpse. +- Each ant nest starts with 6 workers, caps at 10 workers, and sends at most 3 workers outside at once. +- Worker ants spawn above their home nest, random-walk, search for tarinai, and drag found tarinai back to the nest. Multiple workers dragging the same tarinai increase carrying speed. +- Dragged tarinai struggle automatically and can kill workers. Dead workers become edible `ant_corpse` items and slightly reduce hygiene. +- If a nest below capacity brings back a tarinai, its worker count increases by 1. +- If a full nest brings back another tarinai, a queen ant appears and creates a new ant nest in an open spot. +- Ant health does not recover. +- Added the requested Irasutoya credit entry. + +## Ant nest follow-up v5 +- Increased ant movement and hauling constants by 1.5x from the previous slow tuning. +- Kept queen spawning to at most one queen per nest per in-game day, while making spawned queens keep retrying until a new ant nest is built somewhere. +- Reduced the ant nest object radius from 34 to 17. +- Removed the separate ant corpse sprite asset. Ant corpses now render by flipping the worker ant sprite vertically and remain stationary while decaying. +- Added shared ant damage handling for firecracker explosions and dropped-object impacts. +- Kept ant worker HP in the nest worker pool so damaged workers remain damaged after returning to and leaving the nest. diff --git a/assets/objects/ant_corpse.png b/assets/objects/ant_corpse.png new file mode 100644 index 0000000000000000000000000000000000000000..2f192128b2cf46cc4ff698f6c6c346c176d46ae5 GIT binary patch literal 15067 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 literal 0 HcmV?d00001 diff --git a/assets/objects/ant_queen.png b/assets/objects/ant_queen.png new file mode 100644 index 0000000000000000000000000000000000000000..e26b998d6f872aa65e4add3836aaf7b820ecdfa7 GIT binary patch literal 48421 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 KsTv96Z~p@sQ9ZT* literal 0 HcmV?d00001 diff --git a/assets/ui/tool_ant_nest.png b/assets/ui/tool_ant_nest.png new file mode 100644 index 0000000000000000000000000000000000000000..c854138eb43db99b0b8755ea4953cc0322cc81fb GIT binary patch literal 1094 zcmV-M1iAZ(P)@hAzB`)%sqUc7trn0r4Og{ZZJx-USjz?ZZxgcX+s@DlozEtSDd0dhmXIzJH+ zkLfm7!)4sue&Zc#-wtuL*t1+A=Ja zK*UcGsuW-@{FKmxHQ{RnA6rv|loAAUWw0)R>YG7hroz8EKUo!is{5yBlkhEXdv0G? zAL%rk0klSaur&IuLZ7oVBdnPPg4(lzNde|YeGZS|2Nop|nJ$8M3DlPW?eLeh4Bztp zYb^yaa(wkO`N8nZxg0X%#n=a7}|fAuAx#^^s}+WWVt04=6|=q?53 zhl1f-w*|<3yVi=g?Mang0H*)8w3Y$aGr-ajG%ush`beN9*9Cw*_XY4i3-mntMLH-z zidH3PT|Nz66d+|3ogN=m3ncZvypMj7P6{BBzB4V0u;#XV2w$Y20P*|Lxo5{%(JVsE z*(FuHzjHqy(9H}Wk~gYCcxwa9{Xda@M!!gh*9f|~K6}i4f4#;i?kRi`g^z@_JR<1n z10ywq*P8xC43>bJ&jq}UwwB?SQu$D*hxY|qo*rJ4=I9qu{8X@q5{T3(LaUiaJA4tt zCxN@WhbAQ$hND@A*2|66((3-a08MKO(K_%U%ku)%PYtVmX3&<^I6X}LRlwB7c{@_* zU9EEiyE!}fP;BDt;31ZTbi2C;xqW{9-_I>CyW7eV?D}{QLbEVK$-?nB_fSd<&ar7tazC08{ z^IE~RziGwA_XY;xfoh#{u2~MP16dv}5IyAb6G6kBR8j^nM<2a~KIF0hL-Ee*;er&N z1CP0R4v@Rfc_>6rfybJ^3b4eth5-No000000000000000001`bFYsIK^=@sOGynhq M07*qoM6N<$g7k&#Hvj+t literal 0 HcmV?d00001 diff --git a/assets/ui/tool_ball.png b/assets/ui/tool_ball.png index 64e5c552437b66f59bf19ebbbdce3e0fae04b9f8..e58011f45557ad7e88b7768dbceceb7e1322490a 100644 GIT binary patch delta 1453 zcmaLXYdF&j00!{?h8{B6e&%6GzBHgosEk`_Cmtk`5t}$z?@! zjRkGTLRV%q1V=rryqd9@zeXaIFXH9xN9wxIeKN1j_V{xgi;K z`$>QA7U;HY4KAFm92Cemq@s(CJ!N3sc$9+D8p2xN@UeFC?Aau zJ4iv}b1m3ICj2a#qtb2}M7+reMvm)1^$?K)C%nV8$zjw&QP%3#WKi~Je5$z=cS;=D za@)Ebc0|Ab`W{wL-gKyGQ(b??THfAkZQ9igR0R`lchIr2RF>8PsNRdPAZcAx^4l3P$v5PSFO4n2(? zn=!JwrF6CI6%7#@^z-+x0B?T!7DQB(5$$-FvAjiIR2Y=j;av2NRzKCTPvYJ%L29br zDlS%G+dac0PP*Bp*2w}dv_gQSuf8$YhoOyy=u2wuiUqQRC?6=@!;r2C?}zfTD{({} ziXJ8g#@VZ`!oD^R`cG&Ky9+*6Pq3N_9Fr&XB$JXqm0FvWlHQ+6OZ7J4o6iG z19#!atu3z=hufZYN_L6ZBvlOqgt^F57;F^6`)%uMf2anAsO7YnPARo={aRtPJ`A3P zN5;6!iqM_`K)#A+Wu;@zp!YV7$dh>BUZohT?a=fS`6k* zLb1~X(I+}C>pMAdkng^o{c0z6rRY-GgYwPC4BBR}9qX~(l%k<+Qk0x7Di`Q9G-XXa zuJL_h+smv}TVJMVc^Ps(AZh~{^C*Hsez?~Nt-=-&o5vj-T`EF)g4U9v(7e4OlGb^^ ze{Dj^r=O4N#JE0MG;{K&sU^16oFZk3om~2>XwT!4pCcCqm!1k1 z+5SB#+sdx3p#+5hd3LsuP2=V|>18>(LMvDrlya71%Ng0sWf>*E^wYG27%gB9rq??m zFA{$Df>vQ7>TI3!M8dp*C8H3`(MkO-zY}}i>`}jQLQrrmszUGalOi{5cy(7vXQ;Zp zlQ1&oIDEW4)ijo4omM6)R!@?C4!-#9MlV@Y)A^QR*7`41)b+-9NN26?+};7lu*^=P zyZgf#k1&8)2+~gHv_bvI9y?M)AGXd3K2w6hxVby6^Bn`m!QRZPzcUf7Yw;=rxHKpG zRQ;k7+w@5tTsoI6-FVZ@IJIs9{+c)z4l~8~L0+wx(B=@W2Z>hHtA|T$d@kmhOHH-} z$eu{!-7}-gzp5QM&~|md0{*y5Iv0ok@g;FT7672fZ2^DS)o;LgEc5>sM|&4SqisOi EztFFr8vp(}@9Kh%SKhJ4rUjPqT>w7Ajo_vgK zdJ~vesD387jAZJvtawXzziD*40RiDgx{4*RG+~iDOTKRzlS+3aGE-ROhgOIJZ1+Xhx?3!cudW;^slL(^2s@{&M@Ry8k+PjE&jGdFvbX-n(gyG_wA3)U_Jn3p zPj9N@#L+hd+D~)!Q--4;9fT0^Uz8N5z?1V8(|?B6*h&cOk8Bl|tZ zJ}iGtxf4%Hm(N^v+#>M$6rgxZnW~MRY#7osNSpOqW7gf57MW8wz!{6RKh`<)x0tkl z8XeYjsajRV6O4r{K{!5Q2vssx-V{GKvbFHsNa77AKUXk0+{ZJIipm!^olHpHo)93l z|9gU^s!%T+(z2xVGuW50W9$iogI+6J&mnI43a*#roY2${pG_)5#!(`6NFmfMkav~x z7w+NZbq0-@G~J{H*>vsgaeD|~lnK;kUjH!aWqPLeM)ss4-8tkE!91of(#!K@q$kjY z8e3^TaknFXG5XZFV`_zBzt7T~Jw&musIFo%w85I^Nrn)il07l(XTFt(&`mu7+<FdU2+&5YHMKBw+Su8b@cD56}|}j~6`q5cJ}Z2P(xProqNmtrGQ) zM?Dt@duW{%?8AGb$N>VIPr&lXb$1HG}uY-QBWMj_(H+|c0{Lp`Lv(n8D(T^Rt)jQ8A z16R&MP^_F+lZ;|e5l@Y@iAXXXJyftoE)WP zl7ZJ;SjHbJL0V^z(vr2CM&}q0i+EYKAqFk8?_Tzc&NG@tJ=sNhKz*xUCf?MN$n_&_ zbipG$(kp%T@w%HuIXS_5Wy^hBNv5tHlE~`yi2Yt6ZSK{NtEg=2(B)NO9v2a1gBbXl z=40j>g?PM!;DPflkE1U}6Nt*YW7lB(1x$3Dts0D9!Q`bqSR3({76yMn40 diff --git a/assets/ui/tool_nest_box.png b/assets/ui/tool_nest_box.png index 44f5c927baf7af4722eb6c99481c1c1d7a4d200b..c681d1942b342453e8e288c5457a70e18014ef11 100644 GIT binary patch delta 1843 zcmZuydpOe#1O1UZFBefgN1B;Jqog&ty?V{v^#1m^j4-Rb*f6=YFTzZS zyhXFjQ@kyN*R5P~OEYuNZC~&6eSdbI^PE4Pi-c!`M)2=)m}g$x7r3-(dCCO&OTfq_X=_DZi_pqgg&e3Whx|;7CJp7H_wr8M z-ebe7naH2lxHK}&4j4GF@8}C$xi?0Pyk_U&bgzjo?tkk2lqqA71hJ9(g@C^@|MlGM zl3z;#EgNl_yNSB3i{LCSIbxx31=WTK_)V z<;|DYk~~yKX6>15eQYI6tVn<)U2r6gy%rNh;C8-msLV@v&uDbZHn(G}CB+s3eljUa z4ESp420QQ49wn7E7&*euqd8yv@5T^OuUrEn7j`=?c#1G znbGqk4LOTX!Ou(ThdN3^z_9SWBz^Kstd&ydRp70_2{1%SLc;ctQnUUSHFX5AcIo{v z6tUnVJ!)Px9k;~06$FVcC@k*)*ZU`4>5AzY7mMs zpg_XhJm!2DLpLsu=oTZhjOnQHGkKKuh4|{sIW6Zk1w=d;v0t~RK(AN0j})u3JxZt=R1IN4E$nV~rZ+Z(F3N1kgQ8R5Ra`_M6u0(f<(=&>GMn zt}#*M7m|0Xs-yGhKtXf)4a8^ghyPdQ2Jl6!O8-jC(zdAR_#Xy$brQzLzkulR30GuE zoKLA+@Yq}3rYaV)4wyzh_rNlcO))}Q*HbccL9wEh3hydgi2p%=>#!F|N3mZ$PwLK# zfG4Y^OZ;93zUQC6@7t*uzq;11A=EmL$gu3PnrpJCxNQDI$*kQV>rzkIsdCSJFotzH z?m)I7-MM6|^wX8RcYqImqDxzSChCKim(R^`qApIUhQ{TsS_=GgJ!&tDJMDunBj!ou zL8pm9yl3XKcu~9QKunzjVv_y*#=&f-(YG3bpYkH|u7k(XMQ9VI{(m^w=Iw7*;B9pA z=ghz-^xY&(+9Fn!2{m)fdUpq8^CWW|syMB;)R}KI6V29*Y!D6=pQpO0FVO4L3Sz{M zjXW|iXWEXv1b|0}`<6<{?=%7vJHwPs4^&_h31TUbwL9REi+7Zgnjv zm=mXdsQ4ZH_C-8qc@y5JdBN=*Ygf)-AY(h%QRB{hY5d}>+V{}|BT>0OYt!6F>eI$; z9XZPUi0vw?59l2NuVl`}u+l|Jhf;cV7`u|f(rI*E36izJJ@LQ_pG~>5fKWL>)0IM+ zFgNWV%}Q+-J3a9+NUu*3hS(ndhbWR^8cdym!A(B~KJF5}gu(DmcY0!2DfR07S{Rg| z;okEHlO5 zKSM*xUp1LBfi9JCW=f%r=cuMg&>1l+^vy0Etnb*36Q(?HBrQ>t4dp_=Opf-NQLy>F z6mwSa%$nt&9_g^`#rP%a^zx>stC`BCux0IY96aB(cCpCC@33o2zfm^I{e~&wm2a`z zZ_P^x(5P~V%Shj1*fi{~_M?mq)FxV)&T$zhwf}}E+vK!UJ(uDJ!ld5Sx{aavIZ%4U zzewUi$rm5AA1wxWG829J-EkKffLRyi+d)8{9&mW;E9Hb7ZhQO{6sbA!eY!^aLfZby zu$6|bh=c!5?IDTO#u{n;jBAx9I-VdkQtAOj3RkcVQ?ovC`{2O@c$WU~hzm;E*S_`l z@bGZ60H{27XljSB5Lp6E3q0#r_zcJ}@8HmKY^dgH5{>2hiROajz5jnB*e^awPE}sK YtL)N1Y7y2T5BLcudz2l^=4Qfw0k_$C9smFU literal 3135 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 C{obVj diff --git a/css/styles.css b/css/styles.css index 74c557e..2b87d0d 100644 --- a/css/styles.css +++ b/css/styles.css @@ -1416,3 +1416,32 @@ body::before { opacity: 0.72; flex: 0 0 auto; } +.tool[data-tool="ant_nest"] { --tool-icon: url("../assets/ui/tool_ant_nest.png"); } +.tool[data-tool="ant_nest"]::before { + content: ""; + background: var(--tool-icon) center / contain no-repeat; +} +.tool[data-tool="ant_nest"]::after { + content: ""; + background: var(--tool-icon) right -8px center / 54px 54px no-repeat; +} + +/* v15.7.2: object-faithful tool icons for ball and nest box. */ +.tool[data-tool="ball"] { --tool-icon: url("../assets/ui/tool_ball.png"); } +.tool[data-tool="ball"]::before, +.tool[data-tool="ball"]::after { + content: ""; + background: var(--tool-icon) center / contain no-repeat; + font-size: 0; +} +.tool[data-tool="ball"]::after { + background-position: right -8px center; + background-size: 54px 54px; + opacity: 0.10; +} +.tool[data-tool="nest_box"] { --tool-icon: url("../assets/ui/tool_nest_box.png"); } +.tool[data-tool="nest_box"]::after { + content: ""; + background: var(--tool-icon) right -8px center / 54px 54px no-repeat; + opacity: 0.10; +} diff --git a/index.html b/index.html index 1a7885d..9e55382 100644 --- a/index.html +++ b/index.html @@ -7,7 +7,7 @@ たりない観察 - +

@@ -76,6 +76,7 @@ + @@ -137,6 +138,7 @@

製作: 333

たりない: むらさき氏

効果音: VOICEVOX: ずんだもん 効果音ラボ: https://soundeffect-lab.info/

+

アリ素材: いらすとや: https://www.irasutoya.com/

@@ -165,16 +167,17 @@
- + - - - - + + + + + diff --git a/js/ants.js b/js/ants.js new file mode 100644 index 0000000..49a17b9 --- /dev/null +++ b/js/ants.js @@ -0,0 +1,403 @@ +"use strict"; + +const ANT_NEST_START_COUNT = 6; +const ANT_NEST_MAX_COUNT = 10; +const ANT_NEST_MAX_OUTSIDE = 3; +const ANT_WORKER_HP = 32; +const ANT_QUEEN_HP = 180; +const ANT_WORKER_RADIUS = 4.2; +const ANT_QUEEN_RADIUS = 9.5; +const ANT_WORKER_SEARCH_SPEED = 8.625; +const ANT_WORKER_RETURN_SPEED = 12.0; +const ANT_WORKER_RETURN_WEAK_SPEED = 6.0; +const ANT_WORKER_DRAG_SPEED = 4.125; +const ANT_QUEEN_SPEED = 9.0; + +function clampAntHp(v) { + return clamp(Number(v) || 0, 0, ANT_WORKER_HP); +} + +function buildAntWorkerPool(count = ANT_NEST_START_COUNT) { + const n = clamp(Math.round(Number(count) || 0), 0, ANT_NEST_MAX_COUNT); + return Array.from({ length: n }, () => ANT_WORKER_HP); +} + +function sanitizeAntWorkerPool(list, fallbackCount = 0) { + if (!Array.isArray(list)) return buildAntWorkerPool(fallbackCount); + const out = list.map(v => clampAntHp(v)).filter(v => v > 0.01); + return out.slice(0, ANT_NEST_MAX_COUNT); +} + +function ensureAntNestWorkerPool(nest) { + if (!nest || nest.type !== "ant_nest") return []; + if (!Array.isArray(nest.antWorkers)) { + nest.antWorkers = buildAntWorkerPool(nest.antCount ?? ANT_NEST_START_COUNT); + } else { + nest.antWorkers = sanitizeAntWorkerPool(nest.antWorkers, nest.antCount ?? nest.antWorkers.length); + } + return nest.antWorkers; +} + +function syncAntNestCount(worldRef, nest) { + if (!nest || nest.type !== "ant_nest") return 0; + ensureAntNestWorkerPool(nest); + const outside = (worldRef?.ants || []).filter(a => a && !a.dead && a.kind === "worker" && a.homeId === nest.id).length; + nest.antCount = clamp((nest.antWorkers?.length || 0) + outside, 0, ANT_NEST_MAX_COUNT); + return nest.antCount; +} + +class AntActor { + constructor(worldRef, opts = {}) { + this.world = worldRef; + this.id = opts.id || (crypto.randomUUID ? crypto.randomUUID() : `ant-${Date.now()}-${Math.random()}`); + this.kind = opts.kind || "worker"; + this.homeId = opts.homeId || ""; + this.targetId = opts.targetId || ""; + this.x = Number.isFinite(opts.x) ? opts.x : 0; + this.y = Number.isFinite(opts.y) ? opts.y : 0; + this.vx = opts.vx || 0; + this.vy = opts.vy || 0; + this.r = opts.r || (this.kind === "queen" ? ANT_QUEEN_RADIUS : ANT_WORKER_RADIUS); + this.maxHp = Number.isFinite(opts.maxHp) ? opts.maxHp : (this.kind === "queen" ? ANT_QUEEN_HP : ANT_WORKER_HP); + this.hp = Number.isFinite(opts.hp) ? opts.hp : this.maxHp; + this.state = opts.state || (this.kind === "queen" ? "founding" : "search"); + this.age = opts.age || 0; + this.seed = opts.seed || Math.random() * 1000; + this.wanderAngle = opts.wanderAngle || rand(0, Math.PI * 2); + this.nextTurn = opts.nextTurn || rand(0.4, 1.6); + this.returnTimer = opts.returnTimer || 0; + this.foundingX = opts.foundingX; + this.foundingY = opts.foundingY; + this.foundingDelayUntil = Number.isFinite(opts.foundingDelayUntil) ? opts.foundingDelayUntil : -Infinity; + this.carryLogAt = opts.carryLogAt || -999; + this.foundingAttempts = opts.foundingAttempts || 0; + this.dead = Boolean(opts.dead); + } + + serialize() { + return { + id: this.id, kind: this.kind, homeId: this.homeId, targetId: this.targetId, + x: this.x, y: this.y, vx: this.vx, vy: this.vy, r: this.r, hp: this.hp, maxHp: this.maxHp, + state: this.state, age: this.age, seed: this.seed, wanderAngle: this.wanderAngle, + nextTurn: this.nextTurn, returnTimer: this.returnTimer, foundingX: this.foundingX, + foundingY: this.foundingY, foundingDelayUntil: this.foundingDelayUntil, carryLogAt: this.carryLogAt, foundingAttempts: this.foundingAttempts, dead: this.dead, + }; + } + + static from(worldRef, data) { + return new AntActor(worldRef, data || {}); + } + + homeNest() { + return (this.world?.items || []).find(it => it && !it.dead && it.id === this.homeId && it.type === "ant_nest") || null; + } + + targetTarinai() { + return (this.world?.tarinai || []).find(t => t && !t.dead && t.id === this.targetId) || null; + } + + activeHaulersForTarget() { + return (this.world?.ants || []).filter(a => a && !a.dead && a.kind === "worker" && a.state === "drag" && a.targetId && a.targetId === this.targetId); + } + + isLeadHauler() { + const haulers = this.activeHaulersForTarget(); + if (!haulers.length) return true; + let lead = haulers[0]; + for (const a of haulers) if (String(a.id) < String(lead.id)) lead = a; + return lead === this; + } + + chooseTarget(maxDist = 56) { + let best = null; + let bestScore = Infinity; + for (const t of this.world?.tarinai || []) { + if (!t || t.dead || t.insideNestBoxId || t.isZunchiSlave) continue; + const d = distXY(this.x, this.y, t.x, t.y); + if (d > maxDist) continue; + if ((t.antDraggedTimer || 0) > 0 && (t.antDraggedBy || "") && t.antDraggedBy !== this.id) { + const haulers = (this.world?.ants || []).filter(a => a && !a.dead && a.kind === "worker" && a.state === "drag" && a.targetId === t.id).length; + if (haulers >= ANT_NEST_MAX_OUTSIDE) continue; + } + const weak = clamp((100 - (t.energy || 0)) / 100, 0, 1); + const score = d - weak * 18 + stableUnit(`${this.id}:${t.id}`, "ant-prey") * 6; + if (score < bestScore) { + best = t; + bestScore = score; + } + } + return best; + } + + update(dt) { + if (this.dead) return; + this.age += dt; + if (this.kind === "queen") return this.updateQueen(dt); + return this.updateWorker(dt); + } + + updateWorker(dt) { + const home = this.homeNest(); + if (!home) { + this.dead = true; + return; + } + if (this.hp <= 0) { + this.dieAsCorpse(home); + return; + } + if (this.state === "drag") return this.updateDrag(dt, home); + if (this.state === "return") return this.updateReturn(dt, home); + this.updateSearch(dt, home); + } + + updateSearch(dt, home) { + const target = this.chooseTarget(52); + if (target) { + this.state = "drag"; + this.targetId = target.id; + this.carryLogAt = this.world?.time || 0; + target.antDraggedTimer = Math.max(target.antDraggedTimer || 0, 0.45); + target.antDraggedBy = this.id; + target.fearTimer = Math.max(target.fearTimer || 0, 0.55); + target.thought = "\u30a2\u30ea\u306b\u904b\u3070\u308c\u3066\u3044\u308b"; + this.world.drawListDirty = true; + return; + } + this.nextTurn -= dt; + if (this.nextTurn <= 0) { + const toHome = Math.atan2(home.y - this.y, home.x - this.x); + const far = distXY(this.x, this.y, home.x, home.y); + const bias = far > 220 ? 0.58 : 0.18; + this.wanderAngle = this.wanderAngle * (1 - bias) + toHome * bias + rand(-1.2, 1.2); + this.nextTurn = rand(0.7, 1.9); + } + const hpFactor = clamp(this.hp / ANT_WORKER_HP, 0.45, 1.0); + const speed = (ANT_WORKER_SEARCH_SPEED + Math.sin(this.age * 2.4 + this.seed) * 0.75) * hpFactor; + this.vx = Math.cos(this.wanderAngle) * speed; + this.vy = Math.sin(this.wanderAngle) * speed * 0.78; + this.x = clamp(this.x + this.vx * dt, CONFIG.worldPadding, this.world.w - CONFIG.worldPadding); + this.y = clamp(this.y + this.vy * dt, CONFIG.worldPadding, this.world.h - CONFIG.worldPadding); + if (distXY(this.x, this.y, home.x, home.y) > 220) this.state = "return"; + } + + returnToNest(home) { + if (!home || home.dead || home.type !== "ant_nest") { + this.dead = true; + return; + } + ensureAntNestWorkerPool(home).push(clampAntHp(this.hp)); + syncAntNestCount(this.world, home); + this.dead = true; + this.world.drawListDirty = true; + } + + updateReturn(dt, home) { + const d = distXY(this.x, this.y, home.x, home.y) || 1; + if (d < Math.max(16, home.r * 0.66)) { + this.returnToNest(home); + return; + } + const speed = this.hp <= 8 ? ANT_WORKER_RETURN_WEAK_SPEED : ANT_WORKER_RETURN_SPEED; + this.x += (home.x - this.x) / d * speed * dt; + this.y += (home.y - this.y) / d * speed * dt; + this.vx = (home.x - this.x) / d * speed; + this.vy = (home.y - this.y) / d * speed; + } + + updateDrag(dt, home) { + const target = this.targetTarinai(); + if (!target || target.dead || target.insideNestBoxId) { + this.targetId = ""; + this.state = "return"; + return; + } + const haulers = Math.max(1, this.activeHaulersForTarget().length); + const leadHauler = this.isLeadHauler(); + target.antDraggedTimer = Math.max(target.antDraggedTimer || 0, 0.35); + target.antDraggedBy = this.id; + target.state = "panic"; + target.sleeping = false; + target.target = null; + target.fearTimer = Math.max(target.fearTimer || 0, 0.36); + target.thought = "\u30a2\u30ea\u306b\u5de3\u3078\u904b\u3070\u308c\u3066\u3044\u308b"; + const dHome = distXY(target.x, target.y, home.x, home.y) || 1; + if (dHome < Math.max(18, home.r * 0.66)) { + this.world.completeAntHaul?.(home, target); + this.targetId = ""; + this.state = "return"; + return; + } + const hpFactor = clamp(this.hp / ANT_WORKER_HP, 0.45, 1.0); + const speed = ANT_WORKER_DRAG_SPEED * hpFactor; + const ux = (home.x - target.x) / dHome; + const uy = (home.y - target.y) / dHome; + if (leadHauler) { + target.x = clamp(target.x + ux * speed * dt, CONFIG.worldPadding, this.world.w - CONFIG.worldPadding); + target.y = clamp(target.y + uy * speed * dt, CONFIG.worldPadding, this.world.h - CONFIG.worldPadding); + target.energy = clamp((target.energy || 0) - dt * 0.028, 0, 100); + } + const offsetAngle = this.seed + this.age * 2.0 + (haulers > 1 ? this.activeHaulersForTarget().findIndex(a => a === this) * 1.7 : 0); + const ring = target.radius * (0.64 + 0.06 * Math.min(haulers, 3)); + this.x = target.x - ux * ring + Math.cos(offsetAngle) * target.radius * 0.24; + this.y = target.y - uy * ring * 0.72 + Math.sin(offsetAngle) * target.radius * 0.18; + this.vx = ux * speed; + this.vy = uy * speed; + + const aggression = Math.max(0, target.currentPersonality?.aggression || 0); + const aggressiveAttack = target.shouldApplyPersonalityBehavior?.("aggression", 1) || aggression >= 0.5 || target.state === "ant_attack"; + const struggle = aggressiveAttack + ? (1.25 + aggression * 1.6 + clamp((target.energy || 0) / 100, 0, 1) * 0.35) / Math.max(1, haulers * 0.9) + : (0.42 + clamp((target.energy || 0) / 100, 0, 1) * 0.18) / Math.max(1, haulers); + this.hp -= dt * struggle; + + if ((this.world.time || 0) - (this.carryLogAt || -999) > 8 && Math.random() < dt * 0.04) { + this.carryLogAt = this.world.time || 0; + this.world.log(`${target.name}\u304c\u30a2\u30ea\u306b\u5f15\u3063\u5f35\u3089\u308c\u3066\u3044\u308b\u3002`, "event"); + } + if (this.hp <= 0) this.dieAsCorpse(home); + } + + dieAsCorpse(home = null) { + if (this.dead) return; + this.dead = true; + const corpse = new Item("ant_corpse", this.x, this.y); + corpse.amount = 24; + corpse.workerSprite = this.workerSpriteId(); + this.world.items.push(corpse); + this.world.effects?.push(new Effect("zunchi_miasma", this.x, this.y - 4, { size: 10, life: 0.44, color: "rgba(82,61,42,0.28)" })); + if (home) syncAntNestCount(this.world, home); + this.world.updateItemCounts?.(); + this.world.drawListDirty = true; + } + + buildNestAtFoundingSpot(force = false) { + if (!this.world) return null; + const base = new Item("ant_nest", this.foundingX, this.foundingY); + let spot = null; + if (this.world.findPlacementSpot) { + spot = this.world.findPlacementSpot(base, { allowOriginal: true, maxRadius: force ? 520 : 220, attempts: force ? 160 : 72 }); + } + if (!spot && force) { + spot = this.world.placementClampPointFor ? this.world.placementClampPointFor(base, this.foundingX, this.foundingY) : { x: this.foundingX, y: this.foundingY }; + } + if (!spot) return null; + base.x = spot.x; + base.y = spot.y; + base.antCount = ANT_NEST_START_COUNT; + base.antWorkers = buildAntWorkerPool(ANT_NEST_START_COUNT); + if (!force && this.world.placementBlocked?.(base)) return null; + this.world.items.push(base); + this.world.itemCounts[base.type] = (this.world.itemCounts[base.type] || 0) + 1; + this.world.rebuildSpatial?.(); + this.world.drawListDirty = true; + this.world.log("\u5973\u738b\u30a2\u30ea\u304c\u65b0\u3057\u3044\u30a2\u30ea\u306e\u5de3\u3092\u4f5c\u3063\u305f\u3002", "event"); + return base; + } + + updateQueen(dt) { + if (!Number.isFinite(this.foundingX) || !Number.isFinite(this.foundingY)) { + const p = this.world?.findAntNestFoundingSpot?.(this) || { x: this.x + rand(-140, 140), y: this.y + rand(-100, 100) }; + this.foundingX = p.x; + this.foundingY = p.y; + } + let d = distXY(this.x, this.y, this.foundingX, this.foundingY) || 1; + if (d < 20) { + if ((this.world?.time || 0) < (this.foundingDelayUntil || -Infinity)) { + this.vx = 0; + this.vy = 0; + return; + } + this.foundingAttempts += 1; + const placed = this.buildNestAtFoundingSpot(this.foundingAttempts >= 8); + if (placed) { + this.dead = true; + return; + } + const retrySpot = this.world?.findAntNestFoundingSpot?.({ x: this.x, y: this.y }) || this.world?.findAntNestFoundingSpot?.(this.homeNest?.() || this); + if (retrySpot) { + this.foundingX = retrySpot.x; + this.foundingY = retrySpot.y; + } else { + this.wanderAngle += rand(-1.4, 1.4); + this.foundingX = clamp(this.x + Math.cos(this.wanderAngle) * 90, 56, this.world.w - 56); + this.foundingY = clamp(this.y + Math.sin(this.wanderAngle) * 70, 56, this.world.h - 56); + } + d = distXY(this.x, this.y, this.foundingX, this.foundingY) || 1; + } + const speed = ANT_QUEEN_SPEED; + this.x += (this.foundingX - this.x) / d * speed * dt; + this.y += (this.foundingY - this.y) / d * speed * dt; + this.vx = (this.foundingX - this.x) / d * speed; + this.vy = (this.foundingY - this.y) / d * speed; + } + + workerSpriteId() { + return "ant_worker"; + } + + spriteId() { + return this.kind === "queen" ? "ant_queen" : this.workerSpriteId(); + } + + draw(ctx, time = 0, lighting = null) { + if (this.dead) return; + const id = this.spriteId(); + const img = typeof getRenderableImage === "function" ? getRenderableImage(id, id) : images.get(id); + const lightState = lighting || getLightingState(this.world); + ctx.save(); + const shadow = projectedShadowParams(lightState, this.kind === "queen" ? 0.58 : 0.26); + drawProjectedShadow(ctx, this.x, this.y + this.r * 0.62, this.r * 1.5, this.r * 0.30, { ...shadow, alpha: shadow.alpha * 0.72 }); + ctx.translate(this.x, this.y); + const angle = this.kind === "queen" + ? Math.atan2((this.foundingY ?? this.y) - this.y, (this.foundingX ?? this.x) - this.x) + : Math.atan2(this.vy || 0, this.vx || 1); + ctx.rotate(angle); + if (img) { + const w = this.kind === "queen" ? this.r * 4.1 : this.r * 3.8; + const metrics = getImageMetrics(id); + const h = w * (metrics?.ratio || 0.52); + ctx.globalAlpha = 0.96; + ctx.drawImage(img, -w * 0.5, -h * 0.58, w, h); + } else { + ctx.fillStyle = "rgba(44,44,44,0.92)"; + ctx.beginPath(); + ctx.ellipse(0, 0, this.r * 1.3, this.r * 0.72, 0, 0, Math.PI * 2); + ctx.fill(); + ctx.beginPath(); + ctx.arc(this.r * 1.15, -this.r * 0.05, this.r * 0.46, 0, Math.PI * 2); + ctx.fill(); + } + ctx.restore(); + this.drawHealthBar(ctx); + } + + drawHealthBar(ctx) { + const maxHp = Math.max(1, this.maxHp || (this.kind === "queen" ? ANT_QUEEN_HP : ANT_WORKER_HP)); + const pct = clamp((this.hp || 0) / maxHp, 0, 1); + const bw = this.kind === "queen" ? 28 : 18; + const bh = this.kind === "queen" ? 4 : 3; + const y = this.y - this.r * (this.kind === "queen" ? 2.0 : 2.6); + ctx.save(); + ctx.fillStyle = "rgba(255,252,242,0.86)"; + roundedRect(ctx, this.x - bw / 2 - 1.5, y - 1.5, bw + 3, bh + 3, 4); + ctx.fill(); + ctx.fillStyle = "rgba(63,50,42,0.30)"; + roundedRect(ctx, this.x - bw / 2, y, bw, bh, 3); + ctx.fill(); + ctx.fillStyle = pct > 0.45 ? "rgba(118,190,80,0.88)" : (pct > 0.20 ? "rgba(232,172,68,0.90)" : "rgba(218,82,70,0.92)"); + roundedRect(ctx, this.x - bw / 2, y, bw * pct, bh, 3); + ctx.fill(); + ctx.restore(); + } +} + +window.AntActor = AntActor; +window.ANT_NEST_START_COUNT = ANT_NEST_START_COUNT; +window.ANT_NEST_MAX_COUNT = ANT_NEST_MAX_COUNT; +window.ANT_NEST_MAX_OUTSIDE = ANT_NEST_MAX_OUTSIDE; +window.ANT_WORKER_HP = ANT_WORKER_HP; +window.ANT_QUEEN_HP = ANT_QUEEN_HP; +window.buildAntWorkerPool = buildAntWorkerPool; +window.ensureAntNestWorkerPool = ensureAntNestWorkerPool; +window.syncAntNestCount = syncAntNestCount; diff --git a/js/data.js b/js/data.js index 6c4fe60..fe68986 100644 --- a/js/data.js +++ b/js/data.js @@ -32,6 +32,8 @@ const SPRITES = [ const DECOR_ASSETS = [ { id: "zunchi", path: "assets/objects/zunchi.png" }, { id: "zunchi_02", path: "assets/objects/zunchi_02.png" }, + { id: "ant_queen", path: "assets/objects/ant_queen.png" }, + { id: "ant_worker", path: "assets/objects/ant_worker.png" }, ]; const TOOL_DEFINITIONS = Object.freeze({ @@ -51,6 +53,7 @@ const TOOL_DEFINITIONS = Object.freeze({ stone: { id: "stone", itemType: "stone", label: "\u77f3", placeable: true, scalable: true, radius: 20, amount: 999, icon: "assets/ui/tool_stone.png", tooltip: "\u91cd\u3044\u77f3\u3002\u843d\u3068\u3059\u3068\u5371\u306a\u3044\u3002" }, bed: { id: "bed", itemType: "bed", label: "\u5e72\u8349\u5bdd\u5e8a", placeable: true, scalable: false, radius: 37, amount: 999, icon: "assets/ui/tool_bed.png", tooltip: "\u8fd1\u304f\u3067\u7720\u308b\u3002\u4f53\u529b\u304c\u56de\u5fa9\u3059\u308b\u3002" }, nest_box: { id: "nest_box", itemType: "nest_box", label: "\u5de3\u7bb1", placeable: true, scalable: false, radius: 42, amount: 999, icon: "assets/ui/tool_nest_box.png", collisionShape: "nest_box_3x3", tooltip: "\u3044\u308b\u3060\u3051\u3067\u30b9\u30c8\u30ec\u30b9\u4f4e\u6e1b\u3002\u7720\u308b\u3068\u7761\u7720\u306e\u8cea\u304c\u4e0a\u304c\u308b\u3002" }, + ant_nest: { id: "ant_nest", itemType: "ant_nest", label: "\u30a2\u30ea\u306e\u5de3", placeable: true, scalable: false, radius: 17, amount: 999, icon: "assets/ui/tool_ant_nest.png", collisionShape: "circle", tooltip: "\u50cd\u304d\u30a2\u30ea\u304c\u305f\u308a\u306a\u3044\u3092\u63a2\u3057\u3001\u5de3\u3078\u904b\u3076\u3002" }, ball: { id: "ball", itemType: "ball", label: "\u30dc\u30fc\u30eb", placeable: true, scalable: false, radius: 18, amount: 999, icon: "assets/ui/tool_ball.png", collisionShape: "circle", tooltip: "\u305f\u308a\u306a\u3044\u304c\u904a\u3076\u305f\u3081\u306e\u304a\u3082\u3061\u3083\u3002" }, firecracker: { id: "firecracker", itemType: "firecracker", label: "\u7206\u7af9", placeable: true, scalable: true, radius: 15, amount: 999, icon: "assets/ui/tool_firecracker.png", tooltip: "\u7206\u767a\u3092\u8d77\u3053\u3059\u3002" }, fence_v: { id: "fence_v", itemType: "fence_v", label: "\u7e26\u306e\u67f5", placeable: true, scalable: true, radius: 42, amount: 999, icon: "assets/ui/tool_fence_v.png", collisionShape: "rect", tooltip: "\u305f\u308a\u306a\u3044\u3092\u901a\u305b\u3093\u307c\u3059\u308b\u3002" }, @@ -59,6 +62,7 @@ const TOOL_DEFINITIONS = Object.freeze({ trace: { id: "trace", itemType: "trace", label: "\u8db3\u8de1", placeable: false, scalable: false, radius: 16, amount: 220, simulationOnly: true }, splat: { id: "splat", itemType: "splat", label: "\u3057\u3076\u304d", placeable: false, scalable: false, radius: 26, amount: 260, simulationOnly: true }, food: { id: "food", itemType: "food", label: "\u98df\u3079\u7269", placeable: false, scalable: false, radius: 14, amount: 85, simulationOnly: true }, + ant_corpse: { id: "ant_corpse", itemType: "ant_corpse", label: "\u30a2\u30ea\u306e\u6b7b\u9ab8", placeable: false, scalable: false, radius: 8, amount: 24, simulationOnly: true }, }); function toolDefinition(id = "") { @@ -125,6 +129,8 @@ const ALPHA_BOUNDS = { zunchi_slave: { x: 17, y: 22, w: 478, h: 431, imageW: 512, imageH: 468 }, zunchi: { x: 0, y: 0, w: 236, h: 178, imageW: 236, imageH: 178 }, zunchi_02: { x: 8, y: 63, w: 220, h: 105, imageW: 236, imageH: 178 }, + ant_queen: { x: 0, y: 0, w: 300, h: 155, imageW: 300, imageH: 155 }, + ant_worker: { x: 0, y: 0, w: 140, h: 72, imageW: 140, imageH: 72 }, }; const NEEDS = ["\u98df\u3079\u7269", "\u4ef2\u9593", "\u7720\u308a", "\u52c7\u6c17", "\u6c34", "\u9759\u3051\u3055", "\u3042\u305f\u305f\u304b\u3055", "\u610f\u5473", "\u7a7a\u9593", "\u81ea\u4fe1"]; diff --git a/js/health.js b/js/health.js index 1e3f7a9..33fc663 100644 --- a/js/health.js +++ b/js/health.js @@ -17,6 +17,7 @@ const HEALTH = (() => { explosionDisease: "\u7206\u767a\u75c5", fightDisease: "\u304d\u305a\u3064\u304d\u75c5", zunchiDisease: "\u305a\u3093\u3061\u75c5", + antEaten: "\u30a2\u30ea\u306b\u98df\u3079\u3089\u308c\u305f", }); const DISEASE_RE = /([^\u3001\u3002\s]+\u75c5)/; @@ -33,6 +34,7 @@ const HEALTH = (() => { if (/\u7206\u767a\u75c5|explosion.*disease/.test(text)) return CAUSES.explosionDisease; if (/\u3051\u3093\u304b\u75c5|\u304d\u305a\u3064\u304d\u75c5|fight.*disease/.test(text)) return CAUSES.fightDisease; if (/\u305a\u3093\u3061\u75c5|zunchi_sick|zunchi.*\u75c5/.test(text)) return CAUSES.zunchiDisease; + if (/\u30a2\u30ea\u306b\u98df\u3079\u3089\u308c\u305f|eaten.*ant|ant.*eaten/.test(text)) return CAUSES.antEaten; if (/\u75c5/.test(text)) { const disease = text.match(DISEASE_RE); return disease ? disease[1] : CAUSES.zunchiDisease; diff --git a/js/items.js b/js/items.js index 0e78cf4..6a666c5 100644 --- a/js/items.js +++ b/js/items.js @@ -58,6 +58,20 @@ class Item { this.freshness = 1; this.zunchiVariant = stableUnit(this.id, "zunchi-variant") < 0.5 ? "zunchi" : "zunchi_02"; } + if (type === "ant_nest") { + this.antCount = ANT_NEST_START_COUNT || 6; + this.antSpawnTimer = rand(0.6, 2.2); + this.antSpawnCooldown = rand(0.8, 2.4); + this.antWorkers = typeof buildAntWorkerPool === "function" + ? buildAntWorkerPool(this.antCount) + : Array.from({ length: this.antCount }, () => ANT_WORKER_HP || 32); + this.queenSpawnAt = -999; + } + if (type === "ant_corpse") { + this.amount = 24; + this.workerSprite = "ant_worker"; + this.decayTimer = 0; + } if (type === "firecracker") { this.fuseTimer = 5; this.fuseMax = 5; @@ -84,6 +98,7 @@ class Item { if (["sweet", "love_mochi", "fight_mochi", "sleep_drug"].includes(this.type) && !Number.isFinite(this.foodServingsRemaining)) this.amount -= dt * 0.12; if (this.type === "trace") this.amount -= dt * 1.35; if (this.type === "splat") this.amount -= dt * 1.05; + if (this.type === "ant_corpse") this.amount -= dt * 0.018; if (this.type === "firecracker") { this.fuseTimer = Math.max(0, (this.fuseTimer ?? 5) - dt); if (this.fuseTimer <= 0) { @@ -460,7 +475,8 @@ class Item { comfort: this.comfort, wear: this.wear, crawlOpen: this.crawlOpen, zunchiVariant: this.zunchiVariant, toolSize: this.toolSize, foodServingScale: this.foodServingScale, foodServingsMax: this.foodServingsMax, foodServingsRemaining: this.foodServingsRemaining, blastScale: this.blastScale, fuseTimer: this.fuseTimer, fuseMax: this.fuseMax, dropTimer: this.dropTimer, dropMax: this.dropMax, vx: this.vx, vy: this.vy, prevX: this.prevX, prevY: this.prevY, spin: this.spin, spinVelocity: this.spinVelocity, lastKickedAt: this.lastKickedAt, lastKickerId: this.lastKickerId, - lastPokedAt: this.lastPokedAt, pokeCombo: this.pokeCombo, lastPokeAngle: this.lastPokeAngle + lastPokedAt: this.lastPokedAt, pokeCombo: this.pokeCombo, lastPokeAngle: this.lastPokeAngle, + antCount: this.antCount, antSpawnTimer: this.antSpawnTimer, antSpawnCooldown: this.antSpawnCooldown, antWorkers: Array.isArray(this.antWorkers) ? this.antWorkers.slice() : undefined, queenSpawnAt: this.queenSpawnAt, workerSprite: this.workerSprite, decayTimer: this.decayTimer }; } static from(o) { @@ -511,6 +527,22 @@ class Item { it.freshness = 1; it.zunchiVariant = "zunchi"; } + if (type === "ant_nest") { + it.antCount = Number.isFinite(o.antCount) ? clamp(Math.round(o.antCount), 0, ANT_NEST_MAX_COUNT || 10) : (ANT_NEST_START_COUNT || 6); + it.antSpawnTimer = o.antSpawnTimer ?? rand(0.6, 2.2); + it.antSpawnCooldown = o.antSpawnCooldown ?? rand(0.8, 2.4); + const legacyPool = Array.isArray(o.antWorkers) ? o.antWorkers : (Array.isArray(o.workerHpPool) ? o.workerHpPool : null); + it.antWorkers = Array.isArray(legacyPool) + ? legacyPool.map(v => clamp(Number(v) || ANT_WORKER_HP || 32, 0.1, ANT_WORKER_HP || 32)).slice(0, ANT_NEST_MAX_COUNT || 10) + : (typeof buildAntWorkerPool === "function" + ? buildAntWorkerPool(it.antCount) + : Array.from({ length: it.antCount }, () => ANT_WORKER_HP || 32)); + it.queenSpawnAt = Number.isFinite(o.queenSpawnAt) ? o.queenSpawnAt : -999; + } + if (type === "ant_corpse") { + it.workerSprite = o.workerSprite || "ant_worker"; + it.decayTimer = o.decayTimer || 0; + } if (type === "firecracker") { it.fuseTimer = 5; it.fuseMax = 5; @@ -541,6 +573,22 @@ class Item { it.pokeCombo = o.pokeCombo ?? it.pokeCombo ?? 0; it.lastPokeAngle = o.lastPokeAngle ?? it.lastPokeAngle ?? rand(0, Math.PI * 2); it.zunchiVariant = o.zunchiVariant || it.zunchiVariant || "zunchi"; + it.antCount = Number.isFinite(o.antCount) ? clamp(Math.round(o.antCount), 0, ANT_NEST_MAX_COUNT || 10) : it.antCount; + it.antSpawnTimer = o.antSpawnTimer ?? it.antSpawnTimer; + it.antSpawnCooldown = o.antSpawnCooldown ?? it.antSpawnCooldown; + if (type === "ant_nest") { + const legacyPool = Array.isArray(o.antWorkers) ? o.antWorkers : (Array.isArray(o.workerHpPool) ? o.workerHpPool : null); + if (Array.isArray(legacyPool)) { + it.antWorkers = legacyPool.map(v => clamp(Number(v) || 0, 0, ANT_WORKER_HP || 32)).filter(v => v > 0).slice(0, ANT_NEST_MAX_COUNT || 10); + } else if (!Array.isArray(it.antWorkers)) { + it.antWorkers = typeof buildAntWorkerPool === "function" + ? buildAntWorkerPool(it.antCount || (ANT_NEST_START_COUNT || 6)) + : Array.from({ length: it.antCount || (ANT_NEST_START_COUNT || 6) }, () => ANT_WORKER_HP || 32); + } + it.queenSpawnAt = Number.isFinite(o.queenSpawnAt) ? o.queenSpawnAt : (it.queenSpawnAt ?? -999); + } + it.workerSprite = o.workerSprite || it.workerSprite; + it.decayTimer = o.decayTimer ?? it.decayTimer; it.toolSize = o.toolSize || it.toolSize || "medium"; it.foodServingScale = o.foodServingScale || it.foodServingScale || ({ small: 0.68, medium: 1.0, large: 1.48 }[it.toolSize] || 1); if (isServingFoodType(it.type)) { @@ -779,6 +827,49 @@ class Item { ctx.ellipse(randSeed(this.seed + i, -this.r * 0.84, this.r * 0.84), randSeed(this.seed + 20 + i, this.r * 0.32, this.r * 0.68), this.r * 0.26, this.r * 0.045, randSeed(this.seed + 40 + i, -0.7, 0.7), 0, Math.PI * 2); ctx.fill(); } + } else if (this.type === "ant_nest") { + const count = clamp(Math.round(this.antCount ?? ANT_NEST_START_COUNT ?? 6), 0, ANT_NEST_MAX_COUNT ?? 10); + ctx.fillStyle = styleNight ? "#5e4634" : (styleWarm ? "#956b42" : "#77583a"); + ctx.strokeStyle = styleNight ? "rgba(43,32,26,0.78)" : "rgba(72,48,31,0.72)"; + ctx.lineWidth = 2.2; + ctx.beginPath(); + ctx.ellipse(0, 8, this.r * 1.35, this.r * 0.78, 0.08, 0, Math.PI * 2); + ctx.fill(); ctx.stroke(); + ctx.fillStyle = styleNight ? "#211a17" : "#30231d"; + ctx.beginPath(); + ctx.ellipse(0, 2, this.r * 0.58, this.r * 0.36, 0, 0, Math.PI * 2); + ctx.fill(); + ctx.fillStyle = "rgba(38,37,35,0.88)"; + for (let i = 0; i < Math.min(6, count); i++) { + const ax = randSeed(this.seed + i * 11, -this.r * 1.0, this.r * 1.0); + const ay = randSeed(this.seed + i * 17, -this.r * 0.45, this.r * 0.55); + ctx.beginPath(); + ctx.ellipse(ax, ay, 3.4, 2.1, randSeed(this.seed + i * 23, -0.8, 0.8), 0, Math.PI * 2); + ctx.fill(); + } + ctx.fillStyle = "rgba(255,248,220,0.82)"; + ctx.font = "bold 10px ui-rounded, sans-serif"; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillText(`${count}`, 0, this.r * 1.25); + } else if (this.type === "ant_corpse") { + const img = typeof getRenderableImage === "function" ? getRenderableImage("ant_worker", "ant_worker") : images.get("ant_worker"); + ctx.save(); + ctx.rotate((stableUnit(this.id || this.seed, "ant-corpse-rot") - 0.5) * 0.26); + ctx.scale(1, -1); + ctx.globalAlpha *= clamp((this.amount || 0) / 24, 0.35, 1); + if (img) { + const w = this.r * 3.9; + const metrics = getImageMetrics("ant_worker"); + const h = w * (metrics?.ratio || 0.52); + ctx.drawImage(img, -w * 0.5, -h * 0.55, w, h); + } else { + ctx.fillStyle = "rgba(42,39,35,0.85)"; + ctx.beginPath(); + ctx.ellipse(0, 0, this.r * 1.35, this.r * 0.72, 0, 0, Math.PI * 2); + ctx.fill(); + } + ctx.restore(); } else if (this.type === "ball") { const speed = Math.hypot(this.vx || 0, this.vy || 0); const moving = clamp(speed / 260, 0, 1); diff --git a/js/tarinai.js b/js/tarinai.js index 3cfdd80..5cfaf88 100644 --- a/js/tarinai.js +++ b/js/tarinai.js @@ -952,7 +952,7 @@ class Tarinai { const low = this.lowHealthSprite(); if (low === "stretch") return low; if (this.defeatedTimer > 0.04) return this.variantSprite("flee"); - if (this.state === "intimidate" || this.intimidateTimer > 0.04) return this.variantSprite("intimidate"); + if (this.state === "intimidate" || this.state === "ant_intimidate" || this.intimidateTimer > 0.04) return this.variantSprite("intimidate"); if (this.state === "panic" || this.state === "cursor_enemy" || this.fearTimer > 0.08 || this.intimidatedTimer > 0.08) return this.variantSprite("fear"); if (this.state === "fight" || this.fightTimer > 0.04) return "angry"; if (this.stress > 62 || (this.stress > 50 && this.mood < 46)) return this.variantSprite("stress"); @@ -1377,6 +1377,40 @@ class Tarinai { return; } + const nearbyAnts = (this.world.ants || []).filter(a => a && !a.dead && distXY(this.x, this.y, a.x, a.y) <= (a.kind === "queen" ? 112 : 82)); + let nearestAnt = null; + let nearestAntDist = Infinity; + for (const ant of nearbyAnts) { + const ad = distXY(this.x, this.y, ant.x, ant.y); + if (ad < nearestAntDist) { + nearestAnt = ant; + nearestAntDist = ad; + } + } + if (nearestAnt) { + const aggressiveToAnts = this.shouldApplyPersonalityBehavior("aggression", 1); + if (aggressiveToAnts && this.energy > 12 && this.fightTimer <= 0.04 && this.defeatedTimer <= 0.04) { + if (nearestAntDist < Math.max(36, this.radius + (nearestAnt.r || 4) + 8) && Math.random() < dt * 0.28) { + // Intimidation has no effect on ants. This is only a visible reaction. + this.state = "ant_intimidate"; + this.target = nearestAnt; + this.bubble("!", 0.9, "rgba(145,68,52,0.78)"); + this.thought = "\u30a2\u30ea\u3092\u5a01\u5687\u3057\u3066\u3044\u308b"; + return; + } + this.state = "ant_attack"; + this.target = nearestAnt; + this.goodMode = "angry"; + this.thought = "\u30a2\u30ea\u3092\u653b\u6483\u3057\u3066\u3044\u308b"; + return; + } + this.state = "panic"; + this.target = this.panicDestination(nearestAnt); + this.fearTimer = Math.max(this.fearTimer, 0.34); + this.thought = "\u30a2\u30ea\u304b\u3089\u9003\u3052\u3066\u3044\u308b"; + return; + } + const dayP = this.world.dayProgress(); const personalSleep = this.sleepStart < this.sleepEnd ? dayP >= this.sleepStart && dayP < this.sleepEnd @@ -1581,7 +1615,7 @@ class Tarinai { } if (this.hunger > 62) { - const itemTypes = this.isZunchiSlave ? ["zunchi"] : ["sweet", "love_mochi", "fight_mochi", "sleep_drug", "grass"]; + const itemTypes = this.isZunchiSlave ? ["zunchi"] : ["sweet", "love_mochi", "fight_mochi", "sleep_drug", "grass", "ant_corpse"]; const item = this.world.nearest(this, itemTypes, 420); if (item) { this.state = "seek_food"; @@ -1744,6 +1778,29 @@ class Tarinai { break; } + if (canBite && it.type === "ant_corpse") { + const bite = Math.min(it.amount, rand(3.2, 5.4)); + if (bite > 0) { + this.state = "eat"; + this.target = it; + this.vx *= Math.pow(0.18, dt * 60); + this.vy *= Math.pow(0.18, dt * 60); + it.amount -= bite; + this.hunger -= bite * 0.62; + this.recoverHealth(bite * 0.12); + this.stress = clamp(this.stress + bite * 0.05 * this.personalityProfile().fear, 0, 130); + this.eatTimer = Math.max(this.eatTimer, 0.26); + this.eatCooldown = rand(0.75, 1.25); + this.bubble("\u3082\u3050", 2.2, "rgba(72,60,48,0.78)"); + const mouth = this.mouthPosition(it); + this.world.spawnEatEffect(mouth.x, mouth.y, "#4a3f36"); + this.lastMealColor = "#4a3f36"; + this.makePoop(bite * 0.08); + if (this.world.time > this.nextEatSound) { audio.eat(); this.nextEatSound = this.world.time + 0.62; } + break; + } + } + if (it.type === "zunchi") { const touch = clamp(1 - d / (this.radius + it.r + 12), 0, 1); if (!this.isZunchiSlave) { @@ -2019,7 +2076,7 @@ class Tarinai { return; } - if (this.intimidateTimer > 0.04 || this.state === "intimidate") { + if (this.intimidateTimer > 0.04 || this.state === "intimidate" || this.state === "ant_intimidate") { this.vx *= Math.pow(0.22, dt * 60); this.vy *= Math.pow(0.22, dt * 60); return; @@ -2083,6 +2140,19 @@ class Tarinai { strength = headbutt > -0.15 ? 2.65 : 0.65; sign = headbutt > -0.15 ? 1 : -1; } + } else if (this.state === "ant_attack") { + strength = d < this.radius + ((this.target && this.target.r) || 4) + 6 ? 0.18 : 1.32; + sign = 1; + if (d < this.radius + ((this.target && this.target.r) || 4) + 10) { + const aggression = Math.max(0, this.currentPersonality?.aggression || 0); + if ((this.world.time || 0) >= (this.nextAntAttackAt || 0)) { + this.nextAntAttackAt = (this.world.time || 0) + 0.34; + if (Number.isFinite(this.target.hp)) this.target.hp = Math.max(0, this.target.hp - (4.6 + aggression * 3.4)); + this.fearTimer = Math.max(this.fearTimer, 0.12); + this.thought = "\u30a2\u30ea\u3092\u653b\u6483\u3057\u3066\u3044\u308b"; + if (Math.random() < 0.55) this.bubble("!", 0.8, "rgba(145,68,52,0.76)"); + } + } } ax += (dx / d) * baseSpeed * sign * strength; ay += (dy / d) * baseSpeed * sign * strength; diff --git a/js/world.js b/js/world.js index c5dbe67..44c933a 100644 --- a/js/world.js +++ b/js/world.js @@ -15,6 +15,7 @@ class World { this.toolSizes = {}; this.tarinai = []; this.items = []; + this.ants = []; this.effects = []; this.logs = []; this.eventCounters = {}; @@ -319,6 +320,7 @@ class World { this.toolSizes = this.toolSizes || {}; this.tarinai = []; this.items = []; + this.ants = []; this.effects = []; this.logs = []; this.eventCounters = {}; @@ -956,6 +958,37 @@ class World { } } + damageAntsInRadius(x, y, radius, damageFn, reason = "", opts = {}) { + let hit = 0; + for (const ant of this.ants || []) { + if (!ant || ant.dead) continue; + const d = Math.max(1, distXY(ant.x, ant.y, x, y)); + if (d > radius + (ant.r || 4)) continue; + const p = clamp(1 - d / Math.max(1, radius), 0, 1); + if (p <= 0 && d > radius) continue; + const damage = typeof damageFn === "function" ? damageFn(p, ant, d) : Number(damageFn || 0); + if (damage > 0) ant.hp = Math.max(0, (ant.hp ?? ant.maxHp ?? ANT_WORKER_HP ?? 32) - damage); + if (opts.push) { + let nx = (ant.x - x) / d; + let ny = (ant.y - y) / d; + if (!Number.isFinite(nx) || !Number.isFinite(ny) || Math.abs(nx) + Math.abs(ny) < 0.001) { + const a = rand(0, Math.PI * 2); + nx = Math.cos(a); + ny = Math.sin(a); + } + const push = typeof opts.push === "function" ? opts.push(p, ant, d) : Number(opts.push || 0); + ant.vx = (ant.vx || 0) + nx * push; + ant.vy = (ant.vy || 0) + ny * push; + ant.x = clamp(ant.x + nx * Math.min(18, push * 0.018), CONFIG.worldPadding, this.w - CONFIG.worldPadding); + ant.y = clamp(ant.y + ny * Math.min(18, push * 0.018), CONFIG.worldPadding, this.h - CONFIG.worldPadding); + } + hit += 1; + if (ant.hp <= 0 && ant.dieAsCorpse) ant.dieAsCorpse(ant.homeNest?.()); + } + if (hit > 0) this.drawListDirty = true; + return hit; + } + explodeFirecracker(it) { if (!it || it.dead || it.type !== "firecracker") return; it.amount = 0; @@ -1026,6 +1059,9 @@ class World { if (!t.dead && p > 0.22 && Math.random() < 0.035 * p) t.infectExplosionDisease?.(it); if (!t.dead && Math.random() < 0.45) this.spawnBubble(t.x, t.y - t.radius * 1.35, "\u306f\u3041\u3041\u3041\uff01", "rgba(84,66,86,0.80)"); } + this.damageAntsInRadius(x, y, blastRadius, p => 5 + p * 18, "\u7206\u7af9", { + push: p => (260 + (p * p * 0.55 + p * 0.45) * 920) * 0.42 * (it.blastScale || 1), + }); let blastedBalls = 0; for (const ball of this.items) { if (!ball || ball.dead || ball.type !== "ball") continue; @@ -1375,9 +1411,12 @@ class World { t.fallDir = nx >= 0 ? 1 : -1; hit += 1; } + const antHit = this.damageAntsInRadius(it.x, it.y, radius + 48, p => damage * (0.35 + p * 0.65), isStone ? "\u77f3\u304c\u843d\u3061\u305f" : "\u843d\u3061\u3066\u304d\u305f\u9053\u5177\u306b\u5f53\u305f\u3063\u305f", { + push: p => push * (0.35 + p), + }); this.effects.push(new Effect("ring", it.x, it.y, { size: isStone ? 32 : 18, life: 0.34, color: isStone ? "rgba(128,96,58,0.76)" : "rgba(174,128,70,0.52)" })); - if (hit > 0) this.spawnFallEffect(it.x, it.y + (it.r || 12) * 0.6, isStone ? 0.9 : 0.45); - if (isStone && hit > 0) audio.poke(); + if (hit > 0 || antHit > 0) this.spawnFallEffect(it.x, it.y + (it.r || 12) * 0.6, isStone ? 0.9 : 0.45); + if (isStone && (hit > 0 || antHit > 0)) audio.poke(); if (hit > 0) this.log(`${isStone ? "\u77f3" : "\u9053\u5177"}\u304c\u843d\u3061\u3001${hit}\u5339\u306e\u305f\u308a\u306a\u3044\u304c\u5dfb\u304d\u8fbc\u307e\u308c\u305f\u3002`, "accident"); } @@ -2055,10 +2094,13 @@ class World { sortedDrawList() { if (!this.drawList) this.drawList = []; - if (this.drawListDirty || this.drawList.length !== this.tarinai.length) { + const antCount = (this.ants || []).filter(a => a && !a.dead).length; + const tarinaiCount = (this.tarinai || []).filter(t => t && !t.dead).length; + if (this.drawListDirty || this.drawList.length !== tarinaiCount + antCount) { this.drawList.length = 0; - for (const t of this.tarinai) if (!t.dead) this.drawList.push(t); - this.drawList.sort((a, b) => a.y - b.y); + for (const t of this.tarinai || []) if (t && !t.dead) this.drawList.push(t); + for (const a of this.ants || []) if (a && !a.dead) this.drawList.push(a); + this.drawList.sort((a, b) => (a.y || 0) - (b.y || 0)); this.drawListDirty = false; } return this.drawList; @@ -2166,6 +2208,114 @@ class World { this.tarinai.length = write; } + compactAnts() { + if (!this.ants) this.ants = []; + let write = 0; + for (let read = 0; read < this.ants.length; read++) { + const a = this.ants[read]; + if (a && !a.dead) this.ants[write++] = a; + } + if (this.ants.length !== write) this.drawListDirty = true; + this.ants.length = write; + } + + updateAnts(dt) { + if (!this.ants) this.ants = []; + const nests = (this.items || []).filter(it => it && !it.dead && it.type === "ant_nest"); + for (const nest of nests) { + if (typeof ensureAntNestWorkerPool === "function") ensureAntNestWorkerPool(nest); + if (!Number.isFinite(nest.antCount)) nest.antCount = ANT_NEST_START_COUNT || 6; + if (typeof syncAntNestCount === "function") syncAntNestCount(this, nest); + nest.antSpawnTimer = Math.max(0, (nest.antSpawnTimer || 0) - dt); + const outside = this.ants.filter(a => a && !a.dead && a.kind === "worker" && a.homeId === nest.id).length; + const available = Array.isArray(nest.antWorkers) ? nest.antWorkers.length : Math.max(0, (nest.antCount || 0) - outside); + const maxOutside = Math.min(ANT_NEST_MAX_OUTSIDE || 3, nest.antCount || 0); + if (available > 0 && outside < maxOutside && (nest.antSpawnTimer || 0) <= 0 && (this.tarinai || []).some(t => t && !t.dead && !t.insideNestBoxId)) { + const hp = Array.isArray(nest.antWorkers) && nest.antWorkers.length ? clamp(nest.antWorkers.pop(), 0, ANT_WORKER_HP || 32) : (ANT_WORKER_HP || 32); + const a = new AntActor(this, { + kind: "worker", + homeId: nest.id, + x: nest.x + rand(-nest.r * 0.18, nest.r * 0.18), + y: nest.y - nest.r * 1.00 + rand(-3, 3), + hp, + maxHp: ANT_WORKER_HP || 32, + }); + this.ants.push(a); + if (typeof syncAntNestCount === "function") syncAntNestCount(this, nest); + nest.antSpawnTimer = rand(1.6, 3.8) + outside * 0.45; + this.drawListDirty = true; + } + } + for (const a of this.ants) a.update(dt); + } + + completeAntHaul(home, target) { + if (!home || home.dead || home.type !== "ant_nest" || !target || target.dead) return; + if (typeof ensureAntNestWorkerPool === "function") ensureAntNestWorkerPool(home); + const before = typeof syncAntNestCount === "function" + ? syncAntNestCount(this, home) + : clamp(Math.round(home.antCount ?? ANT_NEST_START_COUNT ?? 6), 0, ANT_NEST_MAX_COUNT ?? 10); + if (before >= (ANT_NEST_MAX_COUNT || 10)) { + this.spawnQueenAnt(home); + } else { + if (Array.isArray(home.antWorkers)) home.antWorkers.push(ANT_WORKER_HP || 32); + home.antCount = clamp(before + 1, 0, ANT_NEST_MAX_COUNT || 10); + if (typeof syncAntNestCount === "function") syncAntNestCount(this, home); + } + target.x = home.x; + target.y = home.y; + target.die("\u30a2\u30ea\u306b\u98df\u3079\u3089\u308c\u305f"); + this.drawListDirty = true; + } + + spawnQueenAnt(home) { + if (!home || home.dead || home.type !== "ant_nest") return null; + if ((home.queenSpawnAt || -999) + (CONFIG.dayLength || 120) > (this.time || 0)) return null; + if ((this.ants || []).some(a => a && !a.dead && a.kind === "queen" && a.homeId === home.id)) return null; + const spot = this.findAntNestFoundingSpot(home) || { + x: clamp((home.x || this.w * 0.5) + rand(-220, 220), 56, this.w - 56), + y: clamp((home.y || this.h * 0.5) + rand(-160, 160), 56, this.h - 56), + }; + home.queenSpawnAt = this.time || 0; + const queen = new AntActor(this, { + kind: "queen", + homeId: home.id, + x: home.x, + y: home.y - (home.r || 34) * 0.9, + foundingX: spot.x, + foundingY: spot.y, + foundingDelayUntil: (this.time || 0) + 0.35, + }); + this.ants.push(queen); + this.log("\u5973\u738b\u30a2\u30ea\u304c\u65b0\u3057\u3044\u5de3\u5834\u6240\u3092\u63a2\u3057\u59cb\u3081\u305f\u3002", "event"); + this.drawListDirty = true; + return queen; + } + + findAntNestFoundingSpot(source) { + const baseX = Number.isFinite(source?.x) ? source.x : this.w * 0.5; + const baseY = Number.isFinite(source?.y) ? source.y : this.h * 0.5; + let best = null; + let bestD = -Infinity; + for (let i = 0; i < 70; i++) { + const a = rand(0, Math.PI * 2); + const r = rand(150, Math.min(430, Math.max(this.w, this.h) * 0.52)); + const x = clamp(baseX + Math.cos(a) * r, 56, this.w - 56); + const y = clamp(baseY + Math.sin(a) * r * 0.74, 56, this.h - 56); + const nest = new Item("ant_nest", x, y); + const spot = this.findPlacementSpot ? this.findPlacementSpot(nest, { allowOriginal: true, maxRadius: 80, attempts: 10 }) : { x, y }; + if (!spot) continue; + let nearest = Infinity; + for (const it of this.items || []) { + if (!it || it.dead || it.type !== "ant_nest") continue; + nearest = Math.min(nearest, distXY(spot.x, spot.y, it.x, it.y)); + } + if (nearest > bestD) { best = spot; bestD = nearest; } + if (nearest > 280) break; + } + return best; + } + environmentScores() { const alive = this.tarinai || []; @@ -2184,8 +2334,9 @@ class World { const zunchi = this.itemCounts?.zunchi || 0; const splat = this.itemCounts?.splat || 0; const trace = this.itemCounts?.trace || 0; + const antCorpse = this.itemCounts?.ant_corpse || 0; const security = clamp(100 - fightPressure - blood * 1.6, 0, 100); - const hygiene = clamp(100 - zunchi * 2.0 - splat * 1.2 - trace * 0.30 - blood * 1.8 - diseaseCount * 8.0, 0, 100); + const hygiene = clamp(100 - zunchi * 2.0 - splat * 1.2 - trace * 0.30 - antCorpse * 0.65 - blood * 1.8 - diseaseCount * 8.0, 0, 100); const happiness = clamp(100 - Math.max(0, 100 - security) * 0.32 - Math.max(0, 100 - hygiene) * 0.24 - avgStress * 0.42, 0, 100); return { security, hygiene, happiness }; } @@ -2282,6 +2433,7 @@ class World { this.resolveBallBallCollisions(dt); this.rebuildSpatial(); } + this.updateAnts?.(dt); for (const ef of this.effects) ef.update(dt); @@ -2299,6 +2451,7 @@ class World { itemsCompacted = this.compactItems(); this.compactEffects(); this.compactTarinai(); + this.compactAnts?.(); this.compactTimer = 0; } @@ -2722,6 +2875,7 @@ class World { maxGeneration: this.maxGeneration, lastBirthAt: this.lastBirthAt || -999, tarinai: this.tarinai.map(t => t.serialize()), items: this.items.map(i => i.serialize()), + ants: (this.ants || []).map(a => a.serialize ? a.serialize() : a), logs: this.logs.slice(0, 30), family: this.family || {}, weather: this.weather || "sunny", @@ -2751,6 +2905,7 @@ class World { this.cameraY = Number(data.cameraY) || 0; this.tarinai = (data.tarinai || []).map(o => Tarinai.from(this, o)); this.items = (data.items || []).filter(o => o?.type !== "mirror" && o?.type !== "food" && o?.type !== "cardboard").map(o => Item.from(o)); + this.ants = (data.ants || []).map(o => AntActor.from(this, o)); this.effects = []; this.compactItems(); this.compactEffects();