From 430eb154c93306d4265ba3c9833bb8551fea227f Mon Sep 17 00:00:00 2001 From: lilyissillyyy Date: Tue, 17 Feb 2026 15:54:04 -0500 Subject: [PATCH] Attempt to add trails to car race cars --- assets/images/car-race/trails/nyan.png | Bin 0 -> 2773 bytes commands/games-mp/car-race.js | 42 +++++++++++++++++++++++++ package.json | 2 +- 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 assets/images/car-race/trails/nyan.png diff --git a/assets/images/car-race/trails/nyan.png b/assets/images/car-race/trails/nyan.png new file mode 100644 index 0000000000000000000000000000000000000000..3dfe584a19afda21954c20294eb5a0925f2e636e GIT binary patch literal 2773 zcma);`#;l<7suZlbH69I5Mn9JEo4k&vZc92$t5C}T;{rs`Cz475)vbqT$8(8a=%S( zQ6{++VM}Fm7ey3bpYK2L{XWj)b)Jvc>->HmuXsyyQ(i6!E&u>{(I}+#5lfDAn}h9W zFL=xRIsz!z+Vmpm)1Y$Hkzw^T!WaQSZ8Guy+)Z7yy7% z1ArwL0DwOQ0MUS)RxACZ1DmUvDH1sRck(+*QjZeO0Mw0O0N_6MuRuUnj@VJi9)iZ0 zurGlHg=LjKxQdJd0GBu#X=D>Rz3McaFn9fUWbXcfQ0jK{V{5c8vIw?PXajG%$f;;| z|6ab2lbu&zlwoDyjW-tsS}oaTg+l}(gu-UVMTlslS;5_1E6&Ym?b^}DkE!7&MRyJi z=Fn;A;jk>eMe(`Y9wNcIJGtSVBQ1tv?HpVCWOwd2;NO!E?PIMnxHeVNyYPpQG?W{aZ@=iMm?4X-{O7 zqRRa%udtVi^n-!%2ujX$KIX@JUG? zmtq`oM#yHx>AeMOyL1%u4b(0mh7L!uvPIZY^!PfzD)x|yz!pMW9>Ph7H^*R{0#}v; z!6%VL$#KQ0Y9>;UvWlOn(!)CMLwuj$Q@w{YIqJ%`zhya1i%pVKVCSm{e#WJwxj3g3 zS3NaOeI7=$YDY;00Lyk{uN}pQ>c87fC`gFIxRlqQnz+J94uj3AwVLQ3hrvBnonT?J zh(-1ZgY**@d{_%eY_V~t6JaSikJ&wB)H>ho+lO2IK=KV`BcAB^@(;#vW9IJM;#lPJdm;T~+cB(CaSb35U> zal?$Vx9MPL7=p%XA4*%VHM13hcssLy(opR7y;|VWSu? z^VYh+r6IsfVl+Rg{~Bje@P}8dvXj+w^YbfZ4>XlHY?$Jwvh9=S41Tw7^KK<`L$&s( z=S<%Edg_=WUf6hqWDghJlV%B^=5J)3L^`r=+_|$R$k|T-{+Se+mhEJxD?H*PNwj`( z2Sh2m+J$|S2oOD{=exc}yhZHNsIWDW@--{K*!qM$6c7gO)c3I!5pb(;J*vv-SV-FL z<%0f<-0APw@OVYmNt>Lydzj0j?Fn$@c)aloJyFO=D(Zx3lPZuyrE_1)myELZbXq#?g zSYWxo(~avAv-kUS<)!SrfPrhMa^7g=@k((y3$Z3r`7^Xi4C~TG@^zxUR&O1>VW2)~ zz*Ds)}wx`F>gpPEa1^NrVG1}#s=Unu%&0F?uU}vmaL<$Z<_O1wYJlRY7>J4wJX)Mda*BflE)s0TYRN1e!p)1d^shE_`xw-*x!LaUaDNlT`05jR|Hj`6XGM zx5_<0jcB~E0&O%*r8ib)}{ zzU{WlQhe3C%C$SBJB#-vDlyj94SohLlAp#5i7+O7hz*k!el5 zRf-XZLsU5jH!;=DR!+&?MX`lP5nA_`a|7KND*irX?Ic3;LlK8rlc|SUdzb-230q=! zxOsFS@w5DVc+Mm9FW->8uK(dNm$8Kq+D~dy`cd{C(=RLnv!_BLhZQ6QIx5koIPED=%QpAHy zj}fk7s;unaaAe6dK9skl%3{yx9wSWj=lvzZ+VNoWn7|K&8Fe(+HQ@I&qu~jXTyoYa zVE}oW8*u=7hQ>9hdGeN|@nsQzJ44hSmu3+{fAjR^1dM-}nh%M=g=b$Y6?iL*mq2v_ zw79d>UaU)kx_05lA{cARzoZPF9G19%VKBLR-i=+O{n6m2u8(uoAT4fJ2;C%YxX5Gt zIAFEqh7US94Oi%oHQ>hUPb_b}!)9n}lpbQhlr0B18%-s;L;v!~yl>Y~iR04uma07* z$&(r8BycwL`+nELh~qY*t2hCWj_(Zd;i#|&Tt7x8(tqwmD~;D)Qu>%4*HDD>KVy#) z&XnF1P%CFIIVA+M8@CoCcgA948*8w@`2-3!?RY;=qGhj6j%Sllq!OcVvQf~<*mAJ0 z)g_UJQUwKiI|0|cT7qmVwPTDF{%8N%joLg}dRNSo1FEZV)Efb`i8-?RqRYMi0NP3k A car.replace('.png', '')); +const trails = fs.readdirSync(path.join(__dirname, '..', '..', 'assets', 'images', 'car-race', 'trails')) + .map(trail => trail.replace('.png', '')); const words = ['go', 'zoom', 'drive', 'advance', 'pedal', 'vroom']; const difficulties = { baby: 5000, @@ -217,6 +219,11 @@ module.exports = class CarRaceCommand extends Command { userData.car = await loadImage( path.join(__dirname, '..', '..', 'assets', 'images', 'car-race', 'cars', `${car}.png`) ); + if (trails.includes(car)) { + userData.trail = await loadImage( + path.join(__dirname, '..', '..', 'assets', 'images', 'car-race', 'trails', `${car}.png`) + ); + } const userAvatar = await request.get( msg.author.displayAvatarURL({ extension: 'png', size: 128, forceStatic: true }) ); @@ -240,6 +247,11 @@ module.exports = class CarRaceCommand extends Command { oppoData.car = await loadImage( path.join(__dirname, '..', '..', 'assets', 'images', 'car-race', 'cars', `${oppoCarPick}.png`) ); + if (trails.includes(oppoCarPick)) { + userData.trail = await loadImage( + path.join(__dirname, '..', '..', 'assets', 'images', 'car-race', 'trails', `${oppoCarPick}.png`) + ); + } } else { await msg.say(`${opponent}, do you accept this challenge?`); const verification = await verify(msg.channel, opponent); @@ -259,11 +271,21 @@ module.exports = class CarRaceCommand extends Command { oppoData.car = await loadImage( path.join(__dirname, '..', '..', 'assets', 'images', 'car-race', 'cars', `${choice}.png`) ); + if (trails.includes(choice)) { + userData.trail = await loadImage( + path.join(__dirname, '..', '..', 'assets', 'images', 'car-race', 'trails', `${choice}.png`) + ); + } } else { const chosen = cars[Math.floor(Math.random() * cars.length)]; oppoData.car = await loadImage( path.join(__dirname, '..', '..', 'assets', 'images', 'car-race', 'cars', `${chosen}.png`) ); + if (trails.includes(chosen)) { + userData.trail = await loadImage( + path.join(__dirname, '..', '..', 'assets', 'images', 'car-race', 'trails', `${chosen}.png`) + ); + } } } const oppoAvatar = await request.get(opponent.displayAvatarURL({ extension: 'png', size: 128, forceStatic: true })); @@ -359,14 +381,34 @@ module.exports = class CarRaceCommand extends Command { const oppoCarX = oppoData.spaces < 7 ? -155 + (77 * oppoData.spaces) : bg.width - 155; if (turnWin && oppoData.spaces > 0) { motionBlur(ctx, oppoData.car, oppoCarX, 208, oppoData.car.width, oppoData.car.height); + if (oppoData.trail && oppoCarX > oppoData.car.width) { + for (let i = 0; i < oppoCarX; i += oppoData.trail.width) { + motionBlur(ctx, oppoData.trail, oppoCarX - i, 208, oppoData.trail.width, oppoData.trail.height); + } + } } else { ctx.drawImage(oppoData.car, oppoCarX, 208); + if (oppoData.trail && oppoCarX > oppoData.car.width) { + for (let i = 0; i < oppoCarX; i += oppoData.trail.width) { + ctx.drawImage(oppoData.trail, oppoCarX - i, 208); + } + } } const userCarX = userData.spaces < 7 ? -155 + (77 * userData.spaces) : bg.width - 155; if (turnWin && userData.spaces > 0) { motionBlur(ctx, userData.car, userCarX, 254, userData.car.width, userData.car.height); + if (userData.trail && userCarX > userData.car.width) { + for (let i = 0; i < userCarX; i += userData.trail.width) { + motionBlur(ctx, userData.trail, userCarX - i, 254, userData.trail.width, userData.trail.height); + } + } } else { ctx.drawImage(userData.car, userCarX, 254); + if (userData.trail && userCarX > userData.car.width) { + for (let i = 0; i < userCarX; i += userData.trail.width) { + ctx.drawImage(userData.trail, userCarX - i, 208); + } + } } if (win) { const fireworks = await loadImage( diff --git a/package.json b/package.json index dd456b8b..3f4d55b7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xiao", - "version": "159.4.2", + "version": "159.4.3", "description": "Your personal server companion.", "main": "Xiao.js", "scripts": {