From ea15e7d2c8ac6f540077cfbfea7b8586ddfe6ea1 Mon Sep 17 00:00:00 2001 From: "Z. Cliffe Schreuders" Date: Mon, 13 Oct 2025 11:22:35 +0100 Subject: [PATCH] Add animated plant assets and update room configurations: Introduce new animated plant images for enhanced visual effects in the game. Update room JSON and TMJ files to include these assets, ensuring proper integration with the existing room management system. Refactor player effects to trigger animations when interacting with animated plants, improving gameplay dynamics. --- assets/objects/plant-large11-top-ani1.png | Bin 0 -> 2586 bytes assets/objects/plant-large11-top-ani2.png | Bin 0 -> 2875 bytes assets/objects/plant-large11-top-ani3.png | Bin 0 -> 3094 bytes assets/objects/plant-large11-top-ani4.png | Bin 0 -> 3064 bytes assets/objects/plant-large12-top-ani1.png | Bin 0 -> 4012 bytes assets/objects/plant-large12-top-ani2.png | Bin 0 -> 3453 bytes assets/objects/plant-large12-top-ani3.png | Bin 0 -> 3926 bytes assets/objects/plant-large12-top-ani4.png | Bin 0 -> 3891 bytes assets/objects/plant-large12-top-ani5.png | Bin 0 -> 3972 bytes assets/objects/plant-large13-top-ani1.png | Bin 0 -> 3885 bytes assets/objects/plant-large13-top-ani2.png | Bin 0 -> 3514 bytes assets/objects/plant-large13-top-ani3.png | Bin 0 -> 3648 bytes assets/objects/plant-large13-top-ani4.png | Bin 0 -> 3767 bytes assets/rooms/room_ceo2.json | 170 ++++++++++--- assets/rooms/room_ceo2.tmj | 170 ++++++++++--- assets/rooms/room_reception2.json | 220 ++++++++++++----- assets/rooms/room_reception2.tmj | 288 +++++++++++++++------- css/main.css | 12 + js/core/game.js | 65 ++++- js/core/rooms.js | 64 ++--- js/main.js | 93 ++++++- js/systems/player-effects.js | 68 ++--- js/utils/constants.js | 20 +- 23 files changed, 871 insertions(+), 299 deletions(-) create mode 100644 assets/objects/plant-large11-top-ani1.png create mode 100644 assets/objects/plant-large11-top-ani2.png create mode 100644 assets/objects/plant-large11-top-ani3.png create mode 100644 assets/objects/plant-large11-top-ani4.png create mode 100644 assets/objects/plant-large12-top-ani1.png create mode 100644 assets/objects/plant-large12-top-ani2.png create mode 100644 assets/objects/plant-large12-top-ani3.png create mode 100644 assets/objects/plant-large12-top-ani4.png create mode 100644 assets/objects/plant-large12-top-ani5.png create mode 100644 assets/objects/plant-large13-top-ani1.png create mode 100644 assets/objects/plant-large13-top-ani2.png create mode 100644 assets/objects/plant-large13-top-ani3.png create mode 100644 assets/objects/plant-large13-top-ani4.png diff --git a/assets/objects/plant-large11-top-ani1.png b/assets/objects/plant-large11-top-ani1.png new file mode 100644 index 0000000000000000000000000000000000000000..536c6c9832570c3871be7b5d89730b9f347e516c GIT binary patch literal 2586 zcmV+#3gz{QP)Px;)Ja4^RCt{2TU%@t*BSo)F^*?z*Tj$}lr*tyQcMB`DvL&Gr0`HFQc!l0rJ66eu`vF*e67vL+s9mnVI+ibPD*V zV7L+{NWW0}h0@;9d7j)AM`K%do(7dv)DOl+jYfSHTOj6Wmh?g!VA|9EWz+fyYbehnJ zDe=?gFytwMm5@1D>~-ju+BpCnG{onUFL6!sM*!F@L?L#~5Yxcd-U7eW50cOOqd*5pWn_ zLgJCC3G}MN1HiWM^_Z<|awIK*^OKfPo=^(iyD#+H4nn#K4(m99-G`A51CCHo7NAvA z;1H}f;Fu?2;;MXr%@VH};=(DhbP-KoBX~xiof7d#RRfNC;)ktn0k=z36D&%a7yK=_ z#0tP0QJQ>5m;;>6#KK=3lNhB)JTi#_M?j1A*OCKGCcUw%j zt5*~35n|8E`UTm9!4RR`u3wv@{=nu1^}vdezB~-@?{)4?K)6LJVX!KxDFHm>3HltO zBbbr`z+-wHCVKdio)F-KC(>(0PvD} zb(c|xxP%gS;RC&8lEFJ$gL(M`;3gfcN-8`UeJKx8c!*LuZ5Sa>5zY=mcB!Oe;SonY zL8kzJ)bR<5jr+W-T9DI{IMxuAt0CeOVr2|itV8ol3UUBH7I?P>@;FTeSkeS3oEW)L zQ}`I#Mk?@1lDCYf5-n@>^mzr;rq-76y4&8=1q=IsSy=?+dsBZUCGD z=v_C=k#EE_pcE^Vih%ql8{(0Q2J90$n@z6n>>zLxkQa5%I@EjHx^j9H<>dp=Z3{v%%tI=XA3*wOq0}9nikp)L7QZO3g{D|ONI#DL%1%k)T z@S)F1RVZXzC_T=Ic%;IBI>d(|1;BgHLGCqx$3nM)~WJ#H8KpeagQ~ff5_X25G5pQ>uZO?EWfpyv%&(&zUE)(hO z3jk<(8}v(9sHDmgZIKO9WLg*wZyXK%W-2fXU-E7+&trfTLif+93U>=__+2hi(SVMV zpm)B;`^On=VrXRW=i_~WoG}fbc$GSj1N^J{5A`WF=a5P=w~$x^oFm}flht9&N2dT6 zX;gIy5hL>KCxC^w0q0}F)(&y7C7Bybqyf3(!j>-t#7m1NGFP;k>l9P-_v#N8vDePu zw37$5Bm6jl4($rvL|x*c8da4sE(3`)pqwY%p3vIX5wa`1!=oyED)vLWUl?kv6z@fs z!Vh&zeJR^t%haqel9@nBP&y6ckzFxS)zwDGIe}aTq(boPj@cDn1as3mZ)<_^B@&+y zi5OtZR}RHO8^qKDssnO?XdJhT*$2=)Ms7Dd&vIF-#`w0`GSN^CfZZRAUu@IDCVWj*+&Sx+u|07*s)sLa zpD zhgIdh9y>&rG!; z(}!1vzfS=8$7^Ts^LHk2-7`9WZtX(Vz3%G#*?;5rv*ibm0T$nB zcUSDzvm)Fgb009ae;ZpjJq8wxq2IeXTXoN+_vZoi4*+oSdSD_O+*$tm)=Xwh$dtS1 ze%8%RU0VSFt%+qS+BWf2x`R05Cjt3%{MId`34%m-DioHy|5d z0q@VC^{bEg*W0́?pi=esLZRCmcvuG zG7W{9n}9UWWA4VCMemvVU*5BrTU{$iO|^oZ3KX|JG&y+XNJZg&GRT+ulUjr zhrleupG8B8q45vr@uh8Ze!LIA-o}2^i2sd1!|LugpMH`%d!qcFob>$fapJEPXOU$F wXwlGy$WVU1=JlJ!Ik-*1Qmz%N)8(x2KgT3)bj~W!KmY&$07*qoM6N<$f|6*(4gdfE literal 0 HcmV?d00001 diff --git a/assets/objects/plant-large11-top-ani2.png b/assets/objects/plant-large11-top-ani2.png new file mode 100644 index 0000000000000000000000000000000000000000..a29ff5e3bc4f8d6a828d310d71204e907f790e2e GIT binary patch literal 2875 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 literal 0 HcmV?d00001 diff --git a/assets/objects/plant-large11-top-ani4.png b/assets/objects/plant-large11-top-ani4.png new file mode 100644 index 0000000000000000000000000000000000000000..717ab4bbc98a394df7e216d4b5ffb3b1fa599333 GIT binary patch literal 3064 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 Bc>MqX literal 0 HcmV?d00001 diff --git a/assets/objects/plant-large12-top-ani5.png b/assets/objects/plant-large12-top-ani5.png new file mode 100644 index 0000000000000000000000000000000000000000..59d4ffe4e22fa6cd274f7ac8de1a80653572ec5d GIT binary patch literal 3972 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 literal 0 HcmV?d00001 diff --git a/assets/objects/plant-large13-top-ani2.png b/assets/objects/plant-large13-top-ani2.png new file mode 100644 index 0000000000000000000000000000000000000000..339cb3a885f52e9576093f4091ce05500355fa75 GIT binary patch literal 3514 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 literal 0 HcmV?d00001 diff --git a/assets/objects/plant-large13-top-ani3.png b/assets/objects/plant-large13-top-ani3.png new file mode 100644 index 0000000000000000000000000000000000000000..4022e667926c5968574daead1f452b63877ca3ab GIT binary patch literal 3648 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 literal 0 HcmV?d00001 diff --git a/assets/rooms/room_ceo2.json b/assets/rooms/room_ceo2.json index 39d688a..40842db 100644 --- a/assets/rooms/room_ceo2.json +++ b/assets/rooms/room_ceo2.json @@ -24,16 +24,16 @@ "y":0 }, { - "data":[416, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515], + "data":[434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533], "height":10, "id":1, "name":"room", @@ -47,12 +47,12 @@ { "data":[0, 101, 0, 0, 0, 0, 0, 0, 101, 0, 0, 107, 0, 0, 0, 0, 0, 0, 107, 0, - 410, 0, 0, 0, 0, 0, 0, 0, 0, 410, + 428, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 410, 0, 0, 0, 0, 0, 0, 0, 0, 410, + 428, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":10, @@ -71,7 +71,7 @@ "name":"tables", "objects":[ { - "gid":525, + "gid":543, "height":61, "id":96, "name":"", @@ -223,18 +223,6 @@ "x":31.5, "y":163.5 }, - { - "gid":347, - "height":88, - "id":74, - "name":"", - "rotation":0, - "type":"", - "visible":true, - "width":42, - "x":79, - "y":147 - }, { "gid":175, "height":14, @@ -330,6 +318,18 @@ "width":48, "x":133.5, "y":51.5 + }, + { + "gid":423, + "height":88, + "id":97, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":64, + "x":67.3333333333333, + "y":147.666666666667 }], "opacity":1, "type":"objectgroup", @@ -493,7 +493,7 @@ "y":0 }], "nextlayerid":11, - "nextobjectid":97, + "nextobjectid":98, "orientation":"orthogonal", "renderorder":"right-down", "tiledversion":"1.11.2", @@ -537,7 +537,7 @@ "margin":0, "name":"objects", "spacing":0, - "tilecount":278, + "tilecount":296, "tileheight":359, "tiles":[ { @@ -2234,12 +2234,122 @@ "image":"..\/objects\/servers4.png", "imageheight":47, "imagewidth":26 + }, + { + "id":297, + "image":"..\/objects\/chair-white-1.aseprite", + "imageheight":32, + "imagewidth":32 + }, + { + "id":298, + "image":"..\/objects\/fingerprint_kit.png", + "imageheight":24, + "imagewidth":10 + }, + + { + "id":299, + "image":"..\/objects\/fingerprint_small.png", + "imageheight":24, + "imagewidth":18 + }, + { + "id":300, + "image":"..\/objects\/notes5.png", + "imageheight":32, + "imagewidth":25 + }, + { + "id":301, + "image":"..\/objects\/plant-large11-top-ani1.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":302, + "image":"..\/objects\/plant-large11-top-ani2.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":303, + "image":"..\/objects\/plant-large11-top-ani3.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":304, + "image":"..\/objects\/plant-large11-top-ani4.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":305, + "image":"..\/objects\/plant-large12-top-ani1.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":306, + "image":"..\/objects\/plant-large12-top-ani2.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":307, + "image":"..\/objects\/plant-large12-top-ani3.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":308, + "image":"..\/objects\/plant-large12-top-ani4.png", + "imageheight":75, + "imagewidth":64 + }, + + { + "id":309, + "image":"..\/objects\/plant-large12-top-ani5.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":310, + "image":"..\/objects\/plant-large13-top-ani1.png", + "imageheight":88, + "imagewidth":64 + }, + { + "id":311, + "image":"..\/objects\/plant-large13-top-ani2.png", + "imageheight":88, + "imagewidth":64 + }, + { + "id":312, + "image":"..\/objects\/plant-large13-top-ani3.png", + "imageheight":88, + "imagewidth":64 + }, + { + "id":313, + "image":"..\/objects\/plant-large13-top-ani4.png", + "imageheight":88, + "imagewidth":64 + }, + { + "id":314, + "image":"..\/objects\/workstation.png", + "imageheight":18, + "imagewidth":24 }], "tilewidth":221 }, { "columns":6, - "firstgid":410, + "firstgid":428, "image":"..\/tiles\/door_side_sheet_32.png", "imageheight":32, "imagewidth":192, @@ -2252,7 +2362,7 @@ }, { "columns":10, - "firstgid":416, + "firstgid":434, "image":"..\/tiles\/rooms\/room14.png", "imageheight":320, "imagewidth":320, @@ -2265,7 +2375,7 @@ }, { "columns":0, - "firstgid":516, + "firstgid":534, "grid": { "height":1, diff --git a/assets/rooms/room_ceo2.tmj b/assets/rooms/room_ceo2.tmj index 2d1f75a..9683ee3 100644 --- a/assets/rooms/room_ceo2.tmj +++ b/assets/rooms/room_ceo2.tmj @@ -32,16 +32,16 @@ "y":0 }, { - "data":[416, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515], + "data":[434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533], "height":10, "id":1, "name":"room", @@ -55,12 +55,12 @@ { "data":[0, 101, 0, 0, 0, 0, 0, 0, 101, 0, 0, 107, 0, 0, 0, 0, 0, 0, 107, 0, - 410, 0, 0, 0, 0, 0, 0, 0, 0, 410, + 428, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 410, 0, 0, 0, 0, 0, 0, 0, 0, 410, + 428, 0, 0, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":10, @@ -79,7 +79,7 @@ "name":"tables", "objects":[ { - "gid":525, + "gid":543, "height":61, "id":96, "name":"", @@ -231,18 +231,6 @@ "x":31.5, "y":163.5 }, - { - "gid":347, - "height":88, - "id":74, - "name":"", - "rotation":0, - "type":"", - "visible":true, - "width":42, - "x":79, - "y":147 - }, { "gid":175, "height":14, @@ -338,6 +326,18 @@ "width":48, "x":133.5, "y":51.5 + }, + { + "gid":423, + "height":88, + "id":97, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":64, + "x":67.3333333333333, + "y":147.666666666667 }], "opacity":1, "type":"objectgroup", @@ -501,7 +501,7 @@ "y":0 }], "nextlayerid":11, - "nextobjectid":97, + "nextobjectid":98, "orientation":"orthogonal", "renderorder":"right-down", "tiledversion":"1.11.2", @@ -536,7 +536,7 @@ "margin":0, "name":"objects", "spacing":0, - "tilecount":278, + "tilecount":296, "tileheight":359, "tiles":[ { @@ -2233,19 +2233,129 @@ "image":"..\/objects\/servers4.png", "imageheight":47, "imagewidth":26 + }, + { + "id":297, + "image":"..\/objects\/chair-white-1.aseprite", + "imageheight":32, + "imagewidth":32 + }, + { + "id":298, + "image":"..\/objects\/fingerprint_kit.png", + "imageheight":24, + "imagewidth":10 + }, + + { + "id":299, + "image":"..\/objects\/fingerprint_small.png", + "imageheight":24, + "imagewidth":18 + }, + { + "id":300, + "image":"..\/objects\/notes5.png", + "imageheight":32, + "imagewidth":25 + }, + { + "id":301, + "image":"..\/objects\/plant-large11-top-ani1.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":302, + "image":"..\/objects\/plant-large11-top-ani2.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":303, + "image":"..\/objects\/plant-large11-top-ani3.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":304, + "image":"..\/objects\/plant-large11-top-ani4.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":305, + "image":"..\/objects\/plant-large12-top-ani1.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":306, + "image":"..\/objects\/plant-large12-top-ani2.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":307, + "image":"..\/objects\/plant-large12-top-ani3.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":308, + "image":"..\/objects\/plant-large12-top-ani4.png", + "imageheight":75, + "imagewidth":64 + }, + + { + "id":309, + "image":"..\/objects\/plant-large12-top-ani5.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":310, + "image":"..\/objects\/plant-large13-top-ani1.png", + "imageheight":88, + "imagewidth":64 + }, + { + "id":311, + "image":"..\/objects\/plant-large13-top-ani2.png", + "imageheight":88, + "imagewidth":64 + }, + { + "id":312, + "image":"..\/objects\/plant-large13-top-ani3.png", + "imageheight":88, + "imagewidth":64 + }, + { + "id":313, + "image":"..\/objects\/plant-large13-top-ani4.png", + "imageheight":88, + "imagewidth":64 + }, + { + "id":314, + "image":"..\/objects\/workstation.png", + "imageheight":18, + "imagewidth":24 }], "tilewidth":221 }, { - "firstgid":410, + "firstgid":428, "source":"..\/..\/..\/assets\/rooms\/door_side_sheet_32.tsx" }, { - "firstgid":416, + "firstgid":434, "source":"room14.tsx" }, { - "firstgid":516, + "firstgid":534, "source":"tables.tsx" }], "tilewidth":32, diff --git a/assets/rooms/room_reception2.json b/assets/rooms/room_reception2.json index 6736e12..896bbef 100644 --- a/assets/rooms/room_reception2.json +++ b/assets/rooms/room_reception2.json @@ -47,12 +47,12 @@ { "data":[0, 101, 0, 0, 0, 0, 0, 0, 101, 0, 0, 107, 0, 0, 0, 0, 0, 0, 107, 0, - 420, 0, 0, 0, 0, 0, 0, 0, 0, 420, + 438, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 420, 0, 0, 0, 0, 0, 0, 0, 0, 420, + 438, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":10, @@ -307,30 +307,6 @@ "x":159, "y":250 }, - { - "gid":361, - "height":79, - "id":20, - "name":"", - "rotation":0, - "type":"", - "visible":true, - "width":44, - "x":30.5, - "y":302.5 - }, - { - "gid":362, - "height":76, - "id":21, - "name":"", - "rotation":0, - "type":"", - "visible":true, - "width":38, - "x":246.5, - "y":301.5 - }, { "gid":173, "height":17, @@ -378,31 +354,6 @@ "width":14, "x":295, "y":182.333333333333 - }, - - { - "gid":361, - "height":79, - "id":57, - "name":"", - "rotation":0, - "type":"", - "visible":true, - "width":44, - "x":241, - "y":242 - }, - { - "gid":362, - "height":76, - "id":58, - "name":"", - "rotation":0, - "type":"", - "visible":true, - "width":38, - "x":36, - "y":238 }, { "gid":176, @@ -427,7 +378,8 @@ "width":21, "x":168.666666666667, "y":34.6666666666666 - }, + }, + { "gid":177, "height":21, @@ -451,6 +403,54 @@ "width":16, "x":89.6666666666667, "y":42.3333333333333 + }, + { + "gid":426, + "height":75, + "id":76, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":64, + "x":29.5, + "y":240 + }, + { + "gid":428, + "height":75, + "id":77, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":64, + "x":27.5, + "y":302.5 + }, + { + "gid":430, + "height":75, + "id":78, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":64, + "x":225, + "y":239.5 + }, + { + "gid":424, + "height":75, + "id":79, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":64, + "x":227, + "y":304 }], "opacity":1, "type":"objectgroup", @@ -589,7 +589,7 @@ "y":0 }], "nextlayerid":11, - "nextobjectid":76, + "nextobjectid":80, "orientation":"orthogonal", "renderorder":"right-down", "tiledversion":"1.11.2", @@ -686,7 +686,7 @@ "margin":0, "name":"objects", "spacing":0, - "tilecount":278, + "tilecount":296, "tileheight":359, "tiles":[ { @@ -2383,12 +2383,122 @@ "image":"..\/objects\/chair-white-1-rotate8.png", "imageheight":32, "imagewidth":32 + }, + { + "id":297, + "image":"..\/objects\/chair-white-1.aseprite", + "imageheight":32, + "imagewidth":32 + }, + { + "id":298, + "image":"..\/objects\/fingerprint_kit.png", + "imageheight":24, + "imagewidth":10 + }, + + { + "id":299, + "image":"..\/objects\/fingerprint_small.png", + "imageheight":24, + "imagewidth":18 + }, + { + "id":300, + "image":"..\/objects\/notes5.png", + "imageheight":32, + "imagewidth":25 + }, + { + "id":301, + "image":"..\/objects\/plant-large11-top-ani1.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":302, + "image":"..\/objects\/plant-large11-top-ani2.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":303, + "image":"..\/objects\/plant-large11-top-ani3.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":304, + "image":"..\/objects\/plant-large11-top-ani4.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":305, + "image":"..\/objects\/plant-large12-top-ani1.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":306, + "image":"..\/objects\/plant-large12-top-ani2.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":307, + "image":"..\/objects\/plant-large12-top-ani3.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":308, + "image":"..\/objects\/plant-large12-top-ani4.png", + "imageheight":75, + "imagewidth":64 + }, + + { + "id":309, + "image":"..\/objects\/plant-large12-top-ani5.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":310, + "image":"..\/objects\/plant-large13-top-ani1.png", + "imageheight":88, + "imagewidth":64 + }, + { + "id":311, + "image":"..\/objects\/plant-large13-top-ani2.png", + "imageheight":88, + "imagewidth":64 + }, + { + "id":312, + "image":"..\/objects\/plant-large13-top-ani3.png", + "imageheight":88, + "imagewidth":64 + }, + { + "id":313, + "image":"..\/objects\/plant-large13-top-ani4.png", + "imageheight":88, + "imagewidth":64 + }, + { + "id":314, + "image":"..\/objects\/workstation.png", + "imageheight":18, + "imagewidth":24 }], "tilewidth":221 }, { "columns":6, - "firstgid":420, + "firstgid":438, "image":"..\/tiles\/door_side_sheet_32.png", "imageheight":32, "imagewidth":192, diff --git a/assets/rooms/room_reception2.tmj b/assets/rooms/room_reception2.tmj index 2948745..757bb24 100644 --- a/assets/rooms/room_reception2.tmj +++ b/assets/rooms/room_reception2.tmj @@ -55,12 +55,12 @@ { "data":[0, 101, 0, 0, 0, 0, 0, 0, 101, 0, 0, 107, 0, 0, 0, 0, 0, 0, 107, 0, - 418, 0, 0, 0, 0, 0, 0, 0, 0, 418, + 438, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 418, 0, 0, 0, 0, 0, 0, 0, 0, 418, + 438, 0, 0, 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":10, @@ -102,7 +102,7 @@ "name":"table_items", "objects":[ { - "gid":356, + "gid":358, "height":23, "id":27, "name":"", @@ -114,7 +114,7 @@ "y":64.5 }, { - "gid":356, + "gid":358, "height":23, "id":28, "name":"", @@ -126,7 +126,7 @@ "y":65 }, { - "gid":161, + "gid":163, "height":23, "id":33, "name":"", @@ -138,7 +138,7 @@ "y":54.6666666666667 }, { - "gid":164, + "gid":166, "height":20, "id":34, "name":"", @@ -150,7 +150,7 @@ "y":54.6666666666667 }, { - "gid":228, + "gid":230, "height":17, "id":47, "name":"", @@ -173,7 +173,7 @@ "name":"conditional_table_items", "objects":[ { - "gid":187, + "gid":189, "height":14, "id":45, "name":"", @@ -185,7 +185,7 @@ "y":65.25 }, { - "gid":218, + "gid":220, "height":11, "id":46, "name":"", @@ -197,7 +197,7 @@ "y":65.75 }, { - "gid":225, + "gid":227, "height":16, "id":48, "name":"", @@ -209,7 +209,7 @@ "y":51 }, { - "gid":310, + "gid":312, "height":16, "id":54, "name":"", @@ -221,7 +221,7 @@ "y":69.5 }, { - "gid":336, + "gid":338, "height":12, "id":55, "name":"", @@ -233,7 +233,7 @@ "y":62.1666666666667 }, { - "gid":341, + "gid":343, "height":18, "id":56, "name":"", @@ -245,7 +245,7 @@ "y":66 }, { - "gid":376, + "gid":378, "height":28, "id":69, "name":"", @@ -268,7 +268,7 @@ "name":"items", "objects":[ { - "gid":357, + "gid":359, "height":37, "id":16, "name":"", @@ -280,7 +280,7 @@ "y":219 }, { - "gid":357, + "gid":359, "height":37, "id":17, "name":"", @@ -292,7 +292,7 @@ "y":248 }, { - "gid":358, + "gid":360, "height":37, "id":18, "name":"", @@ -304,7 +304,7 @@ "y":218 }, { - "gid":358, + "gid":360, "height":37, "id":19, "name":"", @@ -316,31 +316,7 @@ "y":250 }, { - "gid":359, - "height":79, - "id":20, - "name":"", - "rotation":0, - "type":"", - "visible":true, - "width":44, - "x":30.5, - "y":302.5 - }, - { - "gid":360, - "height":76, - "id":21, - "name":"", - "rotation":0, - "type":"", - "visible":true, - "width":38, - "x":246.5, - "y":301.5 - }, - { - "gid":171, + "gid":173, "height":17, "id":35, "name":"", @@ -352,7 +328,7 @@ "y":156.333333333333 }, { - "gid":171, + "gid":173, "height":17, "id":36, "name":"", @@ -364,7 +340,7 @@ "y":185 }, { - "gid":171, + "gid":173, "height":17, "id":37, "name":"", @@ -376,7 +352,7 @@ "y":152.333333333333 }, { - "gid":171, + "gid":173, "height":17, "id":38, "name":"", @@ -386,34 +362,9 @@ "width":14, "x":295, "y":182.333333333333 - }, - - { - "gid":359, - "height":79, - "id":57, - "name":"", - "rotation":0, - "type":"", - "visible":true, - "width":44, - "x":241, - "y":242 }, { - "gid":360, - "height":76, - "id":58, - "name":"", - "rotation":0, - "type":"", - "visible":true, - "width":38, - "x":36, - "y":238 - }, - { - "gid":174, + "gid":176, "height":21, "id":64, "name":"", @@ -425,7 +376,7 @@ "y":45.6666666666667 }, { - "gid":176, + "gid":178, "height":17, "id":65, "name":"", @@ -435,9 +386,10 @@ "width":21, "x":168.666666666667, "y":34.6666666666666 - }, + }, + { - "gid":175, + "gid":177, "height":21, "id":66, "name":"", @@ -449,7 +401,7 @@ "y":44.6666666666667 }, { - "gid":184, + "gid":186, "height":21, "id":67, "name":"", @@ -459,6 +411,54 @@ "width":16, "x":89.6666666666667, "y":42.3333333333333 + }, + { + "gid":426, + "height":75, + "id":76, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":64, + "x":29.5, + "y":240 + }, + { + "gid":428, + "height":75, + "id":77, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":64, + "x":27.5, + "y":302.5 + }, + { + "gid":430, + "height":75, + "id":78, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":64, + "x":225, + "y":239.5 + }, + { + "gid":424, + "height":75, + "id":79, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":64, + "x":227, + "y":304 }], "opacity":1, "type":"objectgroup", @@ -472,7 +472,7 @@ "name":"conditional_items", "objects":[ { - "gid":121, + "gid":123, "height":24, "id":39, "name":"", @@ -484,7 +484,7 @@ "y":300 }, { - "gid":131, + "gid":133, "height":21, "id":40, "name":"", @@ -496,7 +496,7 @@ "y":77 }, { - "gid":242, + "gid":244, "height":21, "id":49, "name":"", @@ -508,7 +508,7 @@ "y":256 }, { - "gid":236, + "gid":238, "height":21, "id":50, "name":"", @@ -520,7 +520,7 @@ "y":255.5 }, { - "gid":230, + "gid":232, "height":21, "id":51, "name":"", @@ -532,7 +532,7 @@ "y":220.75 }, { - "gid":259, + "gid":261, "height":17, "id":52, "name":"", @@ -544,7 +544,7 @@ "y":221.5 }, { - "gid":308, + "gid":310, "height":30, "id":62, "name":"", @@ -556,7 +556,7 @@ "y":97.5 }, { - "gid":307, + "gid":309, "height":33, "id":63, "name":"", @@ -568,7 +568,7 @@ "y":95 }, { - "gid":364, + "gid":366, "height":27, "id":72, "name":"", @@ -597,7 +597,7 @@ "y":0 }], "nextlayerid":11, - "nextobjectid":76, + "nextobjectid":80, "orientation":"orthogonal", "renderorder":"right-down", "tiledversion":"1.11.2", @@ -626,7 +626,7 @@ }, { "columns":0, - "firstgid":121, + "firstgid":123, "grid": { "height":1, @@ -636,7 +636,7 @@ "margin":0, "name":"objects", "spacing":0, - "tilecount":278, + "tilecount":296, "tileheight":359, "tiles":[ { @@ -2333,11 +2333,121 @@ "image":"..\/objects\/chair-white-1-rotate8.png", "imageheight":32, "imagewidth":32 + }, + { + "id":297, + "image":"..\/objects\/chair-white-1.aseprite", + "imageheight":32, + "imagewidth":32 + }, + { + "id":298, + "image":"..\/objects\/fingerprint_kit.png", + "imageheight":24, + "imagewidth":10 + }, + + { + "id":299, + "image":"..\/objects\/fingerprint_small.png", + "imageheight":24, + "imagewidth":18 + }, + { + "id":300, + "image":"..\/objects\/notes5.png", + "imageheight":32, + "imagewidth":25 + }, + { + "id":301, + "image":"..\/objects\/plant-large11-top-ani1.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":302, + "image":"..\/objects\/plant-large11-top-ani2.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":303, + "image":"..\/objects\/plant-large11-top-ani3.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":304, + "image":"..\/objects\/plant-large11-top-ani4.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":305, + "image":"..\/objects\/plant-large12-top-ani1.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":306, + "image":"..\/objects\/plant-large12-top-ani2.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":307, + "image":"..\/objects\/plant-large12-top-ani3.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":308, + "image":"..\/objects\/plant-large12-top-ani4.png", + "imageheight":75, + "imagewidth":64 + }, + + { + "id":309, + "image":"..\/objects\/plant-large12-top-ani5.png", + "imageheight":75, + "imagewidth":64 + }, + { + "id":310, + "image":"..\/objects\/plant-large13-top-ani1.png", + "imageheight":88, + "imagewidth":64 + }, + { + "id":311, + "image":"..\/objects\/plant-large13-top-ani2.png", + "imageheight":88, + "imagewidth":64 + }, + { + "id":312, + "image":"..\/objects\/plant-large13-top-ani3.png", + "imageheight":88, + "imagewidth":64 + }, + { + "id":313, + "image":"..\/objects\/plant-large13-top-ani4.png", + "imageheight":88, + "imagewidth":64 + }, + { + "id":314, + "image":"..\/objects\/workstation.png", + "imageheight":18, + "imagewidth":24 }], "tilewidth":221 }, { - "firstgid":418, + "firstgid":438, "source":"..\/..\/..\/assets\/rooms\/door_side_sheet_32.tsx" }], "tilewidth":32, diff --git a/css/main.css b/css/main.css index 1f0eda9..e439f67 100644 --- a/css/main.css +++ b/css/main.css @@ -11,6 +11,18 @@ body { #game-container { position: relative; + width: 100vw; + height: 100vh; + overflow: hidden; + background: #333; +} + +/* Canvas styling for pixel-perfect rendering */ +#game-container canvas { + image-rendering: pixelated; + image-rendering: -moz-crisp-edges; + image-rendering: crisp-edges; + display: block; } #loading { diff --git a/js/core/game.js b/js/core/game.js index 274250b..6805426 100644 --- a/js/core/game.js +++ b/js/core/game.js @@ -297,6 +297,23 @@ export function preload() { this.load.image('chair-waiting-left-1', 'assets/objects/chair-waiting-left-1.png'); this.load.image('plant-large12', 'assets/objects/plant-large12.png'); this.load.image('plant-large11', 'assets/objects/plant-large11.png'); + + // Load animated plant frames + this.load.image('plant-large11-top-ani1', 'assets/objects/plant-large11-top-ani1.png'); + this.load.image('plant-large11-top-ani2', 'assets/objects/plant-large11-top-ani2.png'); + this.load.image('plant-large11-top-ani3', 'assets/objects/plant-large11-top-ani3.png'); + this.load.image('plant-large11-top-ani4', 'assets/objects/plant-large11-top-ani4.png'); + + this.load.image('plant-large12-top-ani1', 'assets/objects/plant-large12-top-ani1.png'); + this.load.image('plant-large12-top-ani2', 'assets/objects/plant-large12-top-ani2.png'); + this.load.image('plant-large12-top-ani3', 'assets/objects/plant-large12-top-ani3.png'); + this.load.image('plant-large12-top-ani4', 'assets/objects/plant-large12-top-ani4.png'); + this.load.image('plant-large12-top-ani5', 'assets/objects/plant-large12-top-ani5.png'); + + this.load.image('plant-large13-top-ani1', 'assets/objects/plant-large13-top-ani1.png'); + this.load.image('plant-large13-top-ani2', 'assets/objects/plant-large13-top-ani2.png'); + this.load.image('plant-large13-top-ani3', 'assets/objects/plant-large13-top-ani3.png'); + this.load.image('plant-large13-top-ani4', 'assets/objects/plant-large13-top-ani4.png'); this.load.image('pc1', 'assets/objects/pc1.png'); this.load.image('pc3', 'assets/objects/pc3.png'); this.load.image('pc4', 'assets/objects/pc4.png'); @@ -340,9 +357,7 @@ export function preload() { frameHeight: 64 }); - // Load displacement texture for plant sway effect - // Using an existing asset as displacement map for more interesting movement - this.load.image('wind_displacement', 'assets/objects/plant-large-displacement.png'); + // Animated plant textures are loaded above // Load swivel chair rotation images this.load.image('chair-exec-rotate1', 'assets/objects/chair-exec-rotate1.png'); @@ -429,6 +444,44 @@ export function create() { repeat: 0 }); + // Create plant bump animations + this.anims.create({ + key: 'plant-large11-bump', + frames: [ + { key: 'plant-large11-top-ani1' }, + { key: 'plant-large11-top-ani2' }, + { key: 'plant-large11-top-ani3' }, + { key: 'plant-large11-top-ani4' } + ], + frameRate: 8, + repeat: 0 + }); + + this.anims.create({ + key: 'plant-large12-bump', + frames: [ + { key: 'plant-large12-top-ani1' }, + { key: 'plant-large12-top-ani2' }, + { key: 'plant-large12-top-ani3' }, + { key: 'plant-large12-top-ani4' }, + { key: 'plant-large12-top-ani5' } + ], + frameRate: 8, + repeat: 0 + }); + + this.anims.create({ + key: 'plant-large13-bump', + frames: [ + { key: 'plant-large13-top-ani1' }, + { key: 'plant-large13-top-ani2' }, + { key: 'plant-large13-top-ani3' }, + { key: 'plant-large13-top-ani4' } + ], + frameRate: 8, + repeat: 0 + }); + // Initialize rooms system after player exists initializeRooms(this); @@ -514,9 +567,9 @@ export function update() { window.createPlayerBumpEffect(); } - // Check for plant sway effect when player walks near plants - if (window.createPlantSwayEffect) { - window.createPlantSwayEffect(); + // Check for plant bump effect when player walks near animated plants + if (window.createPlantBumpEffect) { + window.createPlantBumpEffect(); } // Update swivel chair rotation based on movement diff --git a/js/core/rooms.js b/js/core/rooms.js index 4a14586..ad6dc29 100644 --- a/js/core/rooms.js +++ b/js/core/rooms.js @@ -47,7 +47,7 @@ import { TILE_SIZE, DOOR_ALIGN_OVERLAP, GRID_SIZE, INTERACTION_RANGE_SQ, INTERAC // Import the new system modules import { initializeDoors, createDoorSpritesForRoom, checkDoorTransitions, updateDoorSpritesVisibility } from '../systems/doors.js'; import { initializeObjectPhysics, setupChairCollisions, setupExistingChairsWithNewRoom, calculateChairSpinDirection, updateSwivelChairRotation, updateSpriteDepth } from '../systems/object-physics.js'; -import { initializePlayerEffects, createPlayerBumpEffect, createPlantSwayEffect } from '../systems/player-effects.js'; +import { initializePlayerEffects, createPlayerBumpEffect, createPlantBumpEffect } from '../systems/player-effects.js'; import { initializeCollision, createWallCollisionBoxes, removeTilesUnderDoor, removeWallTilesForDoorInRoom, removeWallTilesAtWorldPosition } from '../systems/collision.js'; export let rooms = {}; @@ -442,7 +442,7 @@ export function createRoom(roomId, roomData, position) { window.globalLayerCounter++; const uniqueLayerId = `${roomId}_${layerData.name}_${window.globalLayerCounter}`; - const layer = map.createLayer(index, tilesets, position.x, position.y); + const layer = map.createLayer(index, tilesets, Math.round(position.x), Math.round(position.y)); if (layer) { layer.name = uniqueLayerId; // remove tiles under doors @@ -711,8 +711,8 @@ export function createRoom(roomId, roomData, position) { // Create sprite using the found item const imageName = getImageNameFromObject(usedItem); sprite = gameRef.add.sprite( - position.x + usedItem.x, - position.y + usedItem.y - usedItem.height, + Math.round(position.x + usedItem.x), + Math.round(position.y + usedItem.y - usedItem.height), imageName ); @@ -760,7 +760,7 @@ export function createRoom(roomId, roomData, position) { attempts++; } while (attempts < maxAttempts && isPositionOverlapping(randomX, randomY, roomId, TILE_SIZE)); - sprite = gameRef.add.sprite(randomX, randomY, objType); + sprite = gameRef.add.sprite(Math.round(randomX), Math.round(randomY), objType); console.log(`Created ${objType} at random position - no matching item found (attempts: ${attempts})`); } @@ -1007,10 +1007,10 @@ export function createRoom(roomId, roomData, position) { if (imageName) { console.log(`Creating object from ImageCollection: ${imageName} at (${obj.x}, ${obj.y})`); - // Create sprite at the object's position + // Create sprite at the object's position with pixel-perfect coordinates const sprite = gameRef.add.sprite( - position.x + obj.x, - position.y + obj.y - obj.height, // Adjust for Tiled's coordinate system + Math.round(position.x + obj.x), + Math.round(position.y + obj.y - obj.height), // Adjust for Tiled's coordinate system imageName ); @@ -1057,25 +1057,33 @@ export function createRoom(roomId, roomData, position) { } - // Check if this is a plant that can sway - if (imageName.startsWith('plant-large')) { - sprite.canSway = true; + // Check if this is an animated plant + if (imageName.startsWith('plant-large11-top-ani') || + imageName.startsWith('plant-large12-top-ani') || + imageName.startsWith('plant-large13-top-ani')) { + + sprite.isAnimatedPlant = true; sprite.originalScaleX = sprite.scaleX; sprite.originalScaleY = sprite.scaleY; - sprite.originalX = sprite.x; - sprite.originalY = sprite.y; - sprite.originalWidth = sprite.width; - sprite.originalHeight = sprite.height; - sprite.originalSkewX = 0; - sprite.originalSkewY = 0; + sprite.originalX = Math.round(sprite.x); // Store pixel-perfect position + sprite.originalY = Math.round(sprite.y); // Store pixel-perfect position + sprite.originalWidth = Math.round(sprite.width); + sprite.originalHeight = Math.round(sprite.height); - // Add displacement FX for realistic sway effect - // Use a custom displacement texture for wind-like movement - sprite.preFX.addDisplacement('wind_displacement', 0.01, 0.01); - // Store reference to the displacement FX (it's the last added effect) - sprite.displacementFX = sprite.preFX.list[sprite.preFX.list.length - 1]; + // Determine which animation to use based on the plant type + if (imageName.startsWith('plant-large11-top-ani')) { + sprite.animationKey = 'plant-large11-bump'; + } else if (imageName.startsWith('plant-large12-top-ani')) { + sprite.animationKey = 'plant-large12-bump'; + } else if (imageName.startsWith('plant-large13-top-ani')) { + sprite.animationKey = 'plant-large13-bump'; + } - console.log(`Plant ${imageName} can sway with displacement FX`); + // Ensure the sprite is positioned on pixel boundaries + sprite.x = Math.round(sprite.x); + sprite.y = Math.round(sprite.y); + + console.log(`Animated plant ${imageName} ready with animation ${sprite.animationKey}`); } // Set depth based on world Y position with elevation @@ -1296,12 +1304,12 @@ export function createRoom(roomId, roomData, position) { if (obj.name.toLowerCase().includes('collision') || obj.type === 'collision') { console.log(`Creating collision object: ${obj.name} at (${obj.x}, ${obj.y})`); - // Create invisible collision body + // Create invisible collision body with pixel-perfect coordinates const collisionBody = gameRef.add.rectangle( - position.x + obj.x + obj.width/2, - position.y + obj.y + obj.height/2, - obj.width, - obj.height + Math.round(position.x + obj.x + obj.width/2), + Math.round(position.y + obj.y + obj.height/2), + Math.round(obj.width), + Math.round(obj.height) ); // Make it invisible but with collision diff --git a/js/main.js b/js/main.js index 2c260d9..9a5996f 100644 --- a/js/main.js +++ b/js/main.js @@ -74,12 +74,93 @@ function initializeGame() { initializeUI(); initializeModals(); - // Add window resize handler - window.addEventListener('resize', () => { - const width = window.innerWidth * 0.80; - const height = window.innerHeight * 0.80; - game.scale.resize(width, height); - }); + // Calculate optimal integer scale factor for current browser window + const calculateOptimalScale = () => { + const container = document.getElementById('game-container'); + if (!container) return 2; // Default fallback + + const containerWidth = container.clientWidth; + const containerHeight = container.clientHeight; + + // Base resolution + const baseWidth = 640; + const baseHeight = 480; + + // Calculate scale factors for both dimensions + const scaleX = containerWidth / baseWidth; + const scaleY = containerHeight / baseHeight; + + // Use the smaller scale to maintain aspect ratio + const maxScale = Math.min(scaleX, scaleY); + + // Find the best integer scale factor (prefer 2x or higher for pixel art) + let bestScale = 2; // Minimum for good pixel art + + // Check integer scales from 2x up to the maximum that fits + for (let scale = 2; scale <= Math.floor(maxScale); scale++) { + const scaledWidth = baseWidth * scale; + const scaledHeight = baseHeight * scale; + + // If this scale fits within the container, use it + if (scaledWidth <= containerWidth && scaledHeight <= containerHeight) { + bestScale = scale; + } else { + break; // Stop at the largest scale that fits + } + } + + return bestScale; + }; + + // Setup pixel-perfect rendering with optimal scaling + const setupPixelArt = () => { + if (game && game.canvas && game.scale) { + const canvas = game.canvas; + + // Set pixel-perfect rendering + canvas.style.imageRendering = 'pixelated'; + canvas.style.imageRendering = '-moz-crisp-edges'; + canvas.style.imageRendering = 'crisp-edges'; + + // Calculate and apply optimal scale + const optimalScale = calculateOptimalScale(); + game.scale.setZoom(optimalScale); + + console.log(`Applied ${optimalScale}x scaling for pixel art`); + } + }; + + // Handle orientation changes and fullscreen + const handleOrientationChange = () => { + if (game && game.scale) { + setTimeout(() => { + game.scale.refresh(); + const optimalScale = calculateOptimalScale(); + game.scale.setZoom(optimalScale); + console.log(`Orientation change: Applied ${optimalScale}x scaling`); + }, 100); + } + }; + + // Handle window resize + const handleResize = () => { + if (game && game.scale) { + setTimeout(() => { + game.scale.refresh(); + const optimalScale = calculateOptimalScale(); + game.scale.setZoom(optimalScale); + console.log(`Resize: Applied ${optimalScale}x scaling`); + }, 16); + } + }; + + // Add event listeners + window.addEventListener('resize', handleResize); + window.addEventListener('orientationchange', handleOrientationChange); + document.addEventListener('fullscreenchange', handleOrientationChange); + + // Initial setup + setTimeout(setupPixelArt, 100); } // Initialize when DOM is ready diff --git a/js/systems/player-effects.js b/js/systems/player-effects.js index d8d9e3a..4d8d0da 100644 --- a/js/systems/player-effects.js +++ b/js/systems/player-effects.js @@ -188,8 +188,8 @@ export function createPlayerBumpEffect() { }); } -// Create plant sway effect when player walks through -export function createPlantSwayEffect() { +// Create plant animation effect when player bumps into animated plants +export function createPlantBumpEffect() { if (!window.player) return; const player = window.player; @@ -200,64 +200,30 @@ export function createPlantSwayEffect() { const isMoving = Math.abs(player.body.velocity.x) > 10 || Math.abs(player.body.velocity.y) > 10; if (!isMoving) return; - // Check all rooms for plants + // Check all rooms for animated plants Object.entries(rooms).forEach(([roomId, room]) => { if (!room.objects) return; Object.values(room.objects).forEach(obj => { - if (!obj.visible || !obj.canSway) return; + if (!obj.visible || !obj.isAnimatedPlant) return; - // Check if player is near the plant (within 40 pixels) - const distance = Phaser.Math.Distance.Between(currentX, currentY, obj.x + obj.width/2, obj.y + obj.height/2); + // Check if player is near the plant (within 40 pixels) with pixel-perfect coordinates + const plantCenterX = Math.round(obj.x + obj.width/2); + const plantCenterY = Math.round(obj.y + obj.height/2); + const distance = Phaser.Math.Distance.Between(Math.round(currentX), Math.round(currentY), plantCenterX, plantCenterY); - if (distance < 40 && !obj.isSwaying) { - obj.isSwaying = true; + if (distance < 40 && !obj.isAnimating) { + obj.isAnimating = true; - // Create sway effect using displacement FX - // This creates a realistic distortion effect while keeping the base stationary - const swayIntensity = 0.05; // Increased intensity for more dramatic motion - const swayDuration = Phaser.Math.Between(400, 600); // Half the time - much faster animation + // Play the plant animation using the stored animation key + obj.play(obj.animationKey); - // Calculate sway direction based on player position relative to plant - const playerDirection = currentX > obj.x + obj.width/2 ? 1 : -1; - const displacementX = playerDirection * swayIntensity; - const displacementY = (Math.random() - 0.5) * swayIntensity * 0.8; // More vertical movement - - // Create a complex sway animation using displacement - const swayTween = gameRef.tweens.add({ - targets: obj.displacementFX, - x: displacementX, - y: displacementY, - duration: swayDuration / 3, - ease: 'Sine.easeInOut', - yoyo: true, - onComplete: () => { - // Second sway phase with opposite direction - gameRef.tweens.add({ - targets: obj.displacementFX, - x: -displacementX * 0.8, // More dramatic opposite movement - y: -displacementY * 0.8, - duration: swayDuration / 3, - ease: 'Sine.easeInOut', - yoyo: true, - onComplete: () => { - // Final settle phase - return to original state - gameRef.tweens.add({ - targets: obj.displacementFX, - x: 0.01, // Slightly higher default displacement - y: 0.01, // Slightly higher default displacement - duration: swayDuration / 3, - ease: 'Sine.easeOut', - onComplete: () => { - obj.isSwaying = false; - } - }); - } - }); - } + // Reset animation flag when animation completes + obj.once('animationcomplete', () => { + obj.isAnimating = false; }); - console.log(`Plant ${obj.name} swaying with intensity ${swayIntensity}, direction ${playerDirection}`); + console.log(`Animated plant ${obj.name} bumped by player, playing ${obj.animationKey}`); } }); }); @@ -265,4 +231,4 @@ export function createPlantSwayEffect() { // Export for global access window.createPlayerBumpEffect = createPlayerBumpEffect; -window.createPlantSwayEffect = createPlantSwayEffect; +window.createPlantBumpEffect = createPlantBumpEffect; diff --git a/js/utils/constants.js b/js/utils/constants.js index 5973712..31feef1 100644 --- a/js/utils/constants.js +++ b/js/utils/constants.js @@ -31,13 +31,25 @@ export const BLUETOOTH_SCAN_INTERVAL = 200; // Scan every 200ms for more respons // Game configuration export const GAME_CONFIG = { type: Phaser.AUTO, - width: (window.innerWidth * 0.80) / 2, // Divide by 4 for 4x scale - height: (window.innerHeight * 0.80) / 2, // Divide by 4 for 4x scale + width: 640, // Classic pixel art base resolution (scales cleanly: 1x=320, 2x=640, 3x=960, 4x=1280) + height: 480, // Classic pixel art base resolution (scales cleanly: 1x=240, 2x=480, 3x=720, 4x=960) parent: 'game-container', pixelArt: true, scale: { - mode: Phaser.Scale.FIT, - autoCenter: Phaser.Scale.CENTER_BOTH + mode: Phaser.Scale.ENVELOP, // Fill entire container while maintaining aspect ratio + autoCenter: Phaser.Scale.CENTER_BOTH, + width: 640, + height: 480, + // Minimum size to ensure playability + min: { + width: 320, + height: 240 + }, + // Maximum size to prevent excessive scaling + max: { + width: 2560, + height: 1920 + }, }, render: { pixelArt: true,