feat: super mode humans — shirtless, ridiculous muscles, gleaming teeth

Win rate >0.9 triggers super mode:
- Shirtless with full muscle anatomy (traps, pecs, 6-pack abs, v-lines)
- Massive bulging biceps with veins and separation lines
- Thick bull neck with sternocleidomastoid definition
- Round deltoid shoulder caps
- Quad and calf definition through pants
- Big gleaming white grin with tooth sparkle in all poses
- Championship belt instead of regular belt
- No glasses or beard (too cool for that)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-07 11:41:02 +00:00
co-authored by Claude Opus 4.6
parent 86bbb12f51
commit d7e2ed8b9d
+271 -45
View File
@@ -183,8 +183,9 @@ export function generateHumanSpriteSheet(
const isShort = wr < 0.25
const isSwole = wr > 0.75
const isSuperHero = wr > 0.85
const hasBeard = wr < 0.35 ? true : rng() > 0.6
const hasGlasses = wr < 0.4 ? true : rng() > 0.5
const isSuperMode = wr > 0.9
const hasBeard = wr < 0.35 ? true : isSuperMode ? false : rng() > 0.6
const hasGlasses = wr < 0.4 ? true : isSuperMode ? false : rng() > 0.5
const hasStains = wr < 0.3
const hasCheetos = wr < 0.2
const hasCape = isSuperHero
@@ -237,15 +238,15 @@ export function generateHumanSpriteSheet(
const ground = 126 // ground line
// Body dimensions (3x base, adjusted by physique)
const bodyW = isFat ? 42 : isSwole ? 36 : 27
const bodyH = isShort ? 24 : isSwole ? 33 : 30
const headW = isFat ? 30 : isSwole ? 28 : 27
const bodyW = isFat ? 42 : isSuperMode ? 44 : isSwole ? 36 : 27
const bodyH = isShort ? 24 : isSuperMode ? 36 : isSwole ? 33 : 30
const headW = isFat ? 30 : isSuperMode ? 26 : isSwole ? 28 : 27
const headH = isFat ? 27 : 24
const legH = isShort ? 18 : isSwole ? 30 : 27
const legW = isFat ? 14 : isSwole ? 12 : 9
const armW = isSwole ? 9 : 6
const armH = isShort ? 15 : isSwole ? 24 : 21
const neckH = 3
const legH = isShort ? 18 : isSuperMode ? 33 : isSwole ? 30 : 27
const legW = isFat ? 14 : isSuperMode ? 14 : isSwole ? 12 : 9
const armW = isSuperMode ? 14 : isSwole ? 9 : 6
const armH = isShort ? 15 : isSuperMode ? 27 : isSwole ? 24 : 21
const neckH = isSuperMode ? 5 : 3
const feetY = ground - 4
const legsTop = feetY - legH
@@ -300,6 +301,39 @@ export function generateHumanSpriteSheet(
fill(rl + legW - 2, legsTop + yOff + 2, 2, legH - 4, legColorDk, ox, oy)
px(rl + 2, legsTop + Math.floor(legH / 2) + yOff, lighten(legColor, 10), ox, oy)
// Super mode: quad definition lines visible through pants
if (isSuperMode) {
const quadY = legsTop + yOff + 3
const quadH = Math.floor(legH * 0.5)
// Left quad outer sweep
for (let iy = quadY; iy < quadY + quadH; iy++) {
const bulge = Math.round(Math.sin((iy - quadY) / quadH * Math.PI) * 2)
px(ll - 1, iy, legColor, ox, oy)
if (bulge > 0) px(ll - 2, iy, legColor, ox, oy)
}
// Right quad outer sweep
for (let iy = quadY; iy < quadY + quadH; iy++) {
const bulge = Math.round(Math.sin((iy - quadY) / quadH * Math.PI) * 2)
px(rl + legW, iy, legColor, ox, oy)
if (bulge > 0) px(rl + legW + 1, iy, legColor, ox, oy)
}
// Quad separation line (vastus medialis)
for (let iy = quadY + 2; iy < quadY + quadH - 2; iy++) {
px(ll + Math.floor(legW / 2), iy, legColorDk, ox, oy)
px(rl + Math.floor(legW / 2), iy, legColorDk, ox, oy)
}
// Calf definition (lower leg)
const calfY = legsTop + yOff + Math.floor(legH * 0.6)
const calfH = Math.floor(legH * 0.3)
for (let iy = calfY; iy < calfY + calfH; iy++) {
const bulge = Math.round(Math.sin((iy - calfY) / calfH * Math.PI) * 1.5)
if (bulge > 0) {
px(ll - 1, iy, legColor, ox, oy)
px(rl + legW, iy, legColor, ox, oy)
}
}
}
// Socks visible (between pants and shoes)
if (!costume.onesie) {
fill(ll, feetY + yOff - 3, legW, 3, '#ffffff', ox, oy)
@@ -326,43 +360,122 @@ export function generateHumanSpriteSheet(
const bx = cx - Math.floor(bodyW / 2) + xOff
const by = bodyTop + yOff
const torsoColor = costume.onesie ? (costume.hat || shirtColor) : shirtColor
const torsoDk = costume.onesie ? darken(costume.hat || shirtColor, 15) : shirtDark
if (isSuperMode) {
// === SHIRTLESS SUPER MODE — ridiculous muscles ===
roundBox(bx, by, bodyW, bodyH, skinTone, ox, oy)
roundBox(bx, by, bodyW, bodyH, torsoColor, ox, oy)
// Body shading (right side darker)
for (let iy = by + 2; iy < by + bodyH - 2; iy++) {
px(bx + bodyW - 2, iy, torsoDk, ox, oy)
px(bx + bodyW - 3, iy, torsoDk, ox, oy)
px(bx + 1, iy, lighten(torsoColor, 8), ox, oy) // left highlight
}
// Zipper for onesies
if (costume.onesie) {
// Body shading
for (let iy = by + 2; iy < by + bodyH - 2; iy++) {
px(cx + xOff, iy, darken(torsoColor, 25), ox, oy)
px(cx + 1 + xOff, iy, darken(torsoColor, 20), ox, oy)
px(bx + bodyW - 2, iy, skinDark, ox, oy)
px(bx + bodyW - 3, iy, skinMid, ox, oy)
px(bx + 1, iy, skinLight, ox, oy)
}
// === TRAPS (massive neck-to-shoulder muscles) ===
fill(bx + 4, by, bodyW - 8, 4, skinTone, ox, oy)
fill(bx + 2, by + 1, 4, 3, skinMid, ox, oy) // left trap
fill(bx + bodyW - 6, by + 1, 4, 3, skinMid, ox, oy) // right trap
// Trap definition lines
px(bx + 6, by + 2, skinDark, ox, oy)
px(bx + bodyW - 7, by + 2, skinDark, ox, oy)
// === PECS (two big slabs) ===
const pecY = by + 5
const pecW = Math.floor(bodyW / 2) - 4
const pecH = 7
// Left pec
roundBox(bx + 3, pecY, pecW, pecH, skinLight, ox, oy)
fill(bx + 4, pecY + pecH - 2, pecW - 2, 2, skinMid, ox, oy) // underboob shadow
px(bx + 5, pecY + 1, lighten(skinTone, 20), ox, oy) // highlight
// Right pec
roundBox(bx + bodyW - 3 - pecW, pecY, pecW, pecH, skinLight, ox, oy)
fill(bx + bodyW - 2 - pecW, pecY + pecH - 2, pecW - 2, 2, skinMid, ox, oy)
px(bx + bodyW - 2 - pecW, pecY + 1, lighten(skinTone, 20), ox, oy)
// Pec gap (sternum line)
for (let iy = pecY; iy < pecY + pecH; iy++) px(cx + xOff, iy, skinDark, ox, oy)
// === ABS (6-pack, 3 rows of 2) ===
const absTop = pecY + pecH + 2
const absW = 6
const absH = 4
for (let row = 0; row < 3; row++) {
const ay = absTop + row * (absH + 1)
// Left ab
roundBox(cx + xOff - absW - 1, ay, absW, absH, skinLight, ox, oy)
px(cx + xOff - absW, ay + 1, lighten(skinTone, 18), ox, oy) // highlight
// Right ab
roundBox(cx + xOff + 1, ay, absW, absH, skinLight, ox, oy)
px(cx + xOff + 2, ay + 1, lighten(skinTone, 18), ox, oy)
// Center line
px(cx + xOff, ay + 1, skinDark, ox, oy)
px(cx + xOff, ay + 2, skinDark, ox, oy)
}
// Linea alba (center line connecting abs)
for (let iy = absTop; iy < absTop + 3 * (absH + 1); iy++) px(cx + xOff, iy, skinDark, ox, oy)
// === V-LINES (obliques leading into pants) ===
const vStart = absTop + 3 * (absH + 1)
for (let i = 0; i < 4; i++) {
px(cx + xOff - 5 - i, vStart + i, skinDark, ox, oy)
px(cx + xOff + 5 + i, vStart + i, skinDark, ox, oy)
}
// === VEINS (because why not) ===
// Chest vein
px(bx + 6, pecY + 2, darken(skinTone, 5), ox, oy)
px(bx + 7, pecY + 3, darken(skinTone, 5), ox, oy)
px(bx + 8, pecY + 3, darken(skinTone, 5), ox, oy)
// Bicep veins drawn in arm section
// Championship belt
fill(bx, by + bodyH - 4, bodyW, 4, '#ffd700', ox, oy)
fill(bx + 1, by + bodyH - 3, bodyW - 2, 2, '#daa520', ox, oy)
// Belt plate
fill(cx - 5 + xOff, by + bodyH - 5, 10, 5, '#ffd700', ox, oy)
fill(cx - 4 + xOff, by + bodyH - 4, 8, 3, '#ffffff', ox, oy) // plate face
fill(cx - 2 + xOff, by + bodyH - 3, 4, 1, '#ffd700', ox, oy) // star/emblem
// Side gems
px(bx + 4, by + bodyH - 3, '#ff2222', ox, oy)
px(bx + bodyW - 5, by + bodyH - 3, '#4488ff', ox, oy)
} else {
// Collar
fill(bx + 3, by, bodyW - 6, 3, darken(shirtColor, 10), ox, oy)
fill(bx + Math.floor(bodyW / 2) - 2, by, 4, 4, skinTone, ox, oy) // V-neck
const torsoColor = costume.onesie ? (costume.hat || shirtColor) : shirtColor
const torsoDk = costume.onesie ? darken(costume.hat || shirtColor, 15) : shirtDark
// Shirt pattern (bigger at 3x)
const patCx = cx + xOff
const patCy = by + Math.floor(bodyH / 2) + 2
// Draw a big emblem
fill(patCx - 4, patCy - 4, 8, 8, darken(torsoColor, 8), ox, oy)
fill(patCx - 3, patCy - 3, 6, 6, secondaryColor, ox, oy)
fill(patCx - 2, patCy - 2, 4, 4, lighten(secondaryColor, 15), ox, oy)
px(patCx, patCy, '#ffffff', ox, oy)
roundBox(bx, by, bodyW, bodyH, torsoColor, ox, oy)
// Body shading (right side darker)
for (let iy = by + 2; iy < by + bodyH - 2; iy++) {
px(bx + bodyW - 2, iy, torsoDk, ox, oy)
px(bx + bodyW - 3, iy, torsoDk, ox, oy)
px(bx + 1, iy, lighten(torsoColor, 8), ox, oy) // left highlight
}
// Zipper for onesies
if (costume.onesie) {
for (let iy = by + 2; iy < by + bodyH - 2; iy++) {
px(cx + xOff, iy, darken(torsoColor, 25), ox, oy)
px(cx + 1 + xOff, iy, darken(torsoColor, 20), ox, oy)
}
} else {
// Collar
fill(bx + 3, by, bodyW - 6, 3, darken(shirtColor, 10), ox, oy)
fill(bx + Math.floor(bodyW / 2) - 2, by, 4, 4, skinTone, ox, oy) // V-neck
// Shirt pattern (bigger at 3x)
const patCx = cx + xOff
const patCy = by + Math.floor(bodyH / 2) + 2
// Draw a big emblem
fill(patCx - 4, patCy - 4, 8, 8, darken(torsoColor, 8), ox, oy)
fill(patCx - 3, patCy - 3, 6, 6, secondaryColor, ox, oy)
fill(patCx - 2, patCy - 2, 4, 4, lighten(secondaryColor, 15), ox, oy)
px(patCx, patCy, '#ffffff', ox, oy)
}
// Belt
fill(bx, by + bodyH - 3, bodyW, 3, '#443322', ox, oy)
fill(cx - 2 + xOff, by + bodyH - 3, 5, 3, '#ffcc00', ox, oy) // buckle
px(cx + xOff, by + bodyH - 2, '#ffffff', ox, oy) // buckle highlight
}
// Belt
fill(bx, by + bodyH - 3, bodyW, 3, '#443322', ox, oy)
fill(cx - 2 + xOff, by + bodyH - 3, 5, 3, '#ffcc00', ox, oy) // buckle
px(cx + xOff, by + bodyH - 2, '#ffffff', ox, oy) // buckle highlight
// Food stains (losers)
if (hasStains) {
fill(bx + 4, by + 6, 3, 2, '#cc8822', ox, oy)
@@ -378,15 +491,47 @@ export function generateHumanSpriteSheet(
}
// ===== NECK =====
fill(cx - 4 + xOff, neckTop + yOff, 8, neckH, skinTone, ox, oy)
px(cx + 3 + xOff, neckTop + yOff + 1, skinDark, ox, oy)
if (isSuperMode) {
// Thick bull neck
fill(cx - 7 + xOff, neckTop + yOff, 14, neckH, skinTone, ox, oy)
// Neck muscle lines (sternocleidomastoid)
px(cx - 4 + xOff, neckTop + yOff + 1, skinDark, ox, oy)
px(cx - 3 + xOff, neckTop + yOff + 2, skinDark, ox, oy)
px(cx + 4 + xOff, neckTop + yOff + 1, skinDark, ox, oy)
px(cx + 3 + xOff, neckTop + yOff + 2, skinDark, ox, oy)
// Neck vein
px(cx + 5 + xOff, neckTop + yOff, darken(skinTone, 8), ox, oy)
px(cx + 5 + xOff, neckTop + yOff + 1, darken(skinTone, 8), ox, oy)
} else {
fill(cx - 4 + xOff, neckTop + yOff, 8, neckH, skinTone, ox, oy)
px(cx + 3 + xOff, neckTop + yOff + 1, skinDark, ox, oy)
}
// ===== ARMS =====
const armAttach = by + 3
const armLx = bx - armW - 2
const armRx = bx + bodyW + 2
const armSkin = costume.onesie ? (costume.hat || shirtColor) : skinTone
const armSkinDk = costume.onesie ? darken(costume.hat || shirtColor, 15) : skinDark
const armSkin = isSuperMode ? skinTone : costume.onesie ? (costume.hat || shirtColor) : skinTone
const armSkinDk = isSuperMode ? skinDark : costume.onesie ? darken(costume.hat || shirtColor, 15) : skinDark
// Shoulder caps for super mode (drawn before arms so they overlap)
if (isSuperMode) {
// Massive round deltoids
const dY = armAttach - 2
// Left delt
for (let dy = 0; dy < 6; dy++) {
const dw = 6 - Math.abs(dy - 2)
fill(armLx - dw + armW, dY + dy, dw + 2, 1, dy < 3 ? skinLight : skinTone, ox, oy)
}
// Right delt
for (let dy = 0; dy < 6; dy++) {
const dw = 6 - Math.abs(dy - 2)
fill(armRx - 2, dY + dy, dw + 2, 1, dy < 3 ? skinLight : skinTone, ox, oy)
}
// Delt-arm separation line
px(armLx + armW - 1, armAttach + 2, skinDark, ox, oy)
px(armRx, armAttach + 2, skinDark, ox, oy)
}
if (isCheer) {
const armUpH = Math.round(Math.abs(Math.sin(t * Math.PI)) * 12) + 6
@@ -435,6 +580,50 @@ export function generateHumanSpriteSheet(
px(armLx + armW - 1, iy, armSkinDk, ox, oy)
px(armRx + armW - 1, iy, armSkinDk, ox, oy)
}
// Super mode: bulging biceps, veins, forearm definition
if (isSuperMode) {
// Bicep bulge (outer swell on both arms)
const bicepY = armAttach + 3
const bicepH = Math.floor(armH * 0.4)
// Left arm bulge
for (let iy = bicepY; iy < bicepY + bicepH; iy++) {
const swell = Math.round(Math.sin((iy - bicepY) / bicepH * Math.PI) * 3)
for (let s = 0; s < swell; s++) {
px(armLx - 1 - s, iy, skinTone, ox, oy)
}
if (swell > 1) px(armLx - swell, iy, skinMid, ox, oy) // shadow edge
}
// Right arm bulge
for (let iy = bicepY; iy < bicepY + bicepH; iy++) {
const swell = Math.round(Math.sin((iy - bicepY) / bicepH * Math.PI) * 3)
for (let s = 0; s < swell; s++) {
px(armRx + armW + s, iy, skinTone, ox, oy)
}
if (swell > 1) px(armRx + armW + swell - 1, iy, skinMid, ox, oy)
}
// Bicep-tricep separation line
const sepX1 = armLx + Math.floor(armW / 2)
const sepX2 = armRx + Math.floor(armW / 2)
for (let iy = bicepY + 1; iy < bicepY + bicepH - 1; iy++) {
px(sepX1, iy, skinDark, ox, oy)
px(sepX2, iy, skinDark, ox, oy)
}
// Veins (wiggly lines down the arms)
for (let v = 0; v < 8; v++) {
const vy = armAttach + 4 + v * 2
const wobble = Math.round(Math.sin(v * 1.2) * 1)
px(armLx + 2 + wobble, vy, darken(skinTone, 8), ox, oy)
px(armRx + armW - 3 + wobble, vy, darken(skinTone, 8), ox, oy)
}
// Forearm taper definition
const frmY = armAttach + Math.floor(armH * 0.6)
px(armLx + 1, frmY, skinDark, ox, oy)
px(armLx + 1, frmY + 1, skinDark, ox, oy)
px(armRx + armW - 2, frmY, skinDark, ox, oy)
px(armRx + armW - 2, frmY + 1, skinDark, ox, oy)
}
// Hands
fill(armLx, armAttach + armH - 4, armW + 1, 4, skinTone, ox, oy)
fill(armRx - 1, armAttach + armH - 4, armW + 1, 4, skinTone, ox, oy)
@@ -639,7 +828,24 @@ export function generateHumanSpriteSheet(
// Mouth
const mY = hy + Math.floor(headH * 0.72)
if (isCheer) {
if (isCheer && isSuperMode) {
// SUPER MODE CHEER: massive blinding grin
fill(cx - 7 + xOff, mY - 1, 14, 6, '#000000', ox, oy) // huge mouth
fill(cx - 6 + xOff, mY - 1, 12, 3, '#ffffff', ox, oy) // top teeth
fill(cx - 5 + xOff, mY + 3, 10, 2, '#ffffff', ox, oy) // bottom teeth
fill(cx - 5 + xOff, mY + 2, 10, 1, '#cc4444', ox, oy) // tongue peeking
// Tooth lines
for (let ti = 0; ti < 6; ti++) px(cx - 6 + ti * 2 + xOff, mY, '#dddddd', ox, oy)
// Gleam sparkles on both sides
px(cx - 9 + xOff, mY - 2, '#ffffff', ox, oy)
px(cx - 8 + xOff, mY - 3, '#ffffff', ox, oy)
px(cx - 10 + xOff, mY - 3, '#ffffff', ox, oy)
px(cx - 9 + xOff, mY - 4, '#ffffff', ox, oy)
px(cx + 9 + xOff, mY - 2, '#ffffff', ox, oy)
px(cx + 8 + xOff, mY - 3, '#ffffff', ox, oy)
px(cx + 10 + xOff, mY - 3, '#ffffff', ox, oy)
px(cx + 9 + xOff, mY - 4, '#ffffff', ox, oy)
} else if (isCheer) {
// Big grin with teeth
fill(cx - 5 + xOff, mY, 10, 4, '#000000', ox, oy)
fill(cx - 4 + xOff, mY, 8, 2, '#ffffff', ox, oy) // teeth
@@ -655,6 +861,26 @@ export function generateHumanSpriteSheet(
// Yelling
fill(cx - 4 + xOff, mY, 8, 5, '#000000', ox, oy)
fill(cx - 3 + xOff, mY, 6, 2, '#ffffff', ox, oy)
} else if (isSuperMode) {
// Super mode idle: big confident grin with gleaming teeth
fill(cx - 6 + xOff, mY, 12, 5, '#000000', ox, oy) // wide mouth
// Top teeth row — big, white, perfect
fill(cx - 5 + xOff, mY, 10, 2, '#ffffff', ox, oy)
// Individual tooth lines
for (let ti = 0; ti < 5; ti++) px(cx - 5 + ti * 2 + xOff, mY + 1, '#dddddd', ox, oy)
// Bottom teeth
fill(cx - 4 + xOff, mY + 3, 8, 1, '#ffffff', ox, oy)
// Tooth gleam / sparkle
px(cx - 4 + xOff, mY, '#ffffee', ox, oy)
px(cx + 2 + xOff, mY, '#ffffee', ox, oy)
// Sparkle star near mouth
px(cx + 7 + xOff, mY - 1, '#ffffff', ox, oy)
px(cx + 8 + xOff, mY - 2, '#ffffff', ox, oy)
px(cx + 6 + xOff, mY - 2, '#ffffff', ox, oy)
px(cx + 7 + xOff, mY - 3, '#ffffff', ox, oy)
// Dimples
px(cx - 7 + xOff, mY + 1, skinDark, ox, oy)
px(cx + 7 + xOff, mY + 1, skinDark, ox, oy)
} else {
// Neutral / slight smile
fill(cx - 3 + xOff, mY, 6, 2, '#0a0a0a', ox, oy)