Vary card battle lighting and time of day

This commit is contained in:
2026-06-10 12:21:37 +09:00
parent d4e87b38c8
commit 234918b3c9
6 changed files with 6240 additions and 5204 deletions

41
main.js
View File

@@ -83,9 +83,10 @@ const WORLD_ARCHETYPES = [
weapon: "불꽃을 쏘는 스마트폰 촉매와 강의노트",
origin: "서울 사립대 마법동아리 출신",
pose: "후드 집업을 휘날리며 손끝에서 불꽃을 쏘는 자세",
scene: "night university campus plaza, lecture buildings, vending machines, burning magic circles, fire elemental atmosphere",
scene: "university campus plaza, lecture buildings, vending machines, bike racks, burning magic circles, fire elemental atmosphere",
lighting: "clear late-afternoon daylight with warm sun, visible blue sky, long shadows, and bright campus detail",
costume: "modern adult university outfit with cropped tactical jacket, pleated skirt or denim, sneakers, charm accessories, hidden protective pads",
style: "modern urban fantasy trading card key art, cinematic campus lighting, contemporary Korean character design",
style: "modern urban fantasy trading card key art, cinematic daylight campus lighting, contemporary Korean character design",
damageProfile: "재킷 소매, 가방끈, 운동화 보호대, 허리 장식이 전투 중 찢어지고 그을린다",
bias: { hp: 0.98, atk: 1.12, def: 0.94 },
},
@@ -98,6 +99,7 @@ const WORLD_ARCHETYPES = [
origin: "대형 기획사 비밀 유닛 출신",
pose: "마이크를 든 채 파도 리본을 회전시키는 퍼포먼스 자세",
scene: "concert stage with LED screens, rain rig, spotlights, water ribbons, backstage haze, water elemental atmosphere",
lighting: "bright indoor concert lighting with white-blue spotlights and reflective stage water, not a dark night scene",
costume: "adult idol stage outfit with jeweled performance jacket, fitted bodice, thigh-high boots, headset mic, waterproof accessories",
style: "glossy music-video fantasy trading card art, stage lights, water choreography, premium idol styling",
damageProfile: "무대 재킷, 부츠 장식, 마이크 리본, 반짝이는 장신구가 젖고 찢어진다",
@@ -112,6 +114,7 @@ const WORLD_ARCHETYPES = [
origin: "지하 데이터 시장 출신",
pose: "한 손으로 홀로그램을 조작하고 다른 손으로 금속 드론을 날리는 자세",
scene: "rainy neon alley, hologram billboards, magnetic drones, chrome sparks, metal elemental atmosphere",
lighting: "rainy early-evening neon with readable face light and wet reflections",
costume: "sleek cyber jacket, reflective bodysuit panels, utility belt, visor, exposed cable ornaments",
style: "cyberpunk TCG key art, neon reflections, chrome detail, high contrast rain lighting",
damageProfile: "전술 재킷, 해킹덱 스트랩, 바이저, 크롬 보호판이 깨지고 스파크가 튄다",
@@ -126,6 +129,7 @@ const WORLD_ARCHETYPES = [
origin: "달 궤도 정비국 출신",
pose: "무중력에서 몸을 비틀며 중력장을 접는 자세",
scene: "space station observation deck, Earth below, floating debris, gravity lensing, earth elemental atmosphere",
lighting: "brilliant orbital daylight through station glass, Earth-reflected blue-white light, crisp sci-fi visibility",
costume: "fitted space suit with armored collar, utility harness, magnetic boots, translucent pressure cape",
style: "space opera fantasy card art, cinematic starfield, polished sci-fi armor, orbital lighting",
damageProfile: "우주복 외피, 어깨 링, 자력 부츠, 산소팩 보호판이 찢기고 깨진다",
@@ -140,6 +144,7 @@ const WORLD_ARCHETYPES = [
origin: "사막 고속도로 연맹 출신",
pose: "바이크 옆에서 점화 장갑을 켜고 돌진을 준비하는 자세",
scene: "dusty desert highway, wrecked vehicles, orange sunset, engine flames, fire elemental atmosphere",
lighting: "low sunset daylight with hard orange sun and dust glare",
costume: "racing leather, armored crop jacket, reinforced boots, torn scarf, heat-resistant plates",
style: "post-apocalyptic action card art, dust, sparks, speed lines, hard sunlight",
damageProfile: "라이더 재킷, 무릎 보호대, 부츠, 목 스카프가 타고 찢어진다",
@@ -154,6 +159,7 @@ const WORLD_ARCHETYPES = [
origin: "야간 응급센터 출신",
pose: "수술 장갑 낀 손으로 생체 덩굴 실을 펼치는 자세",
scene: "emergency room corridor, monitors, ritual plants, surgical lights, wood elemental atmosphere",
lighting: "bright sterile hospital lighting with green bio-magic glow and clear clinical visibility",
costume: "fitted medical coat, tactical corset harness, gloves, ID lanyard, protective boots",
style: "medical occult fantasy card art, sterile lights mixed with organic magic, dramatic realism",
damageProfile: "의료 코트, 장갑, 보호 앞치마, 허리 하네스가 찢어지고 오염된다",
@@ -168,6 +174,7 @@ const WORLD_ARCHETYPES = [
origin: "부유 항구 정비조합 출신",
pose: "윙팩을 펼치고 기어 해머를 어깨에 얹은 자세",
scene: "floating steampunk harbor, airships, brass gears, steam clouds, metal elemental atmosphere",
lighting: "sunny high-altitude afternoon with warm brass reflections and white steam",
costume: "brass corset armor, mechanic gloves, goggles, layered work skirt, wingpack harness",
style: "steampunk collectible card art, brass machinery, warm steam, ornate engineering detail",
damageProfile: "황동 코르셋, 고글, 장갑, 윙팩 하네스와 치마 레이어가 파손된다",
@@ -182,6 +189,7 @@ const WORLD_ARCHETYPES = [
origin: "항만 사립탐정 사무소 출신",
pose: "우산을 기울인 채 빗물 탄환을 모으는 측면 자세",
scene: "rainy noir street, streetlamp, old cars, puddles, cigarette smoke, water elemental atmosphere",
lighting: "overcast rainy daytime noir with pale street reflections and soft gray sky",
costume: "fitted trench coat, pencil skirt, gloves, rain boots, detective hat with occult charm",
style: "noir fantasy TCG art, moody rain, rim-lit silhouette, elegant retro styling",
damageProfile: "트렌치코트, 장갑, 모자 장식, 우산 천이 찢어지고 젖는다",
@@ -196,6 +204,7 @@ const WORLD_ARCHETYPES = [
origin: "프로 배구 이능 리그 출신",
pose: "점프 스파이크 직전 공중에서 암석장을 만드는 자세",
scene: "indoor sports arena, court lights, cheering screens, floating stone fragments, earth elemental atmosphere",
lighting: "bright indoor arena lighting like a televised daytime sports match",
costume: "adult pro athlete uniform, compression gear, knee pads, team jacket, reinforced sneakers",
style: "dynamic sports anime trading card art, arena lighting, motion blur, collectible finish",
damageProfile: "팀 재킷, 무릎 보호대, 압박복, 운동화와 팔 보호대가 찢어진다",
@@ -210,6 +219,7 @@ const WORLD_ARCHETYPES = [
origin: "심해 연구 왕정 출신",
pose: "수중에서 창을 뒤로 당기며 물살을 가르는 자세",
scene: "underwater palace ruins, bioluminescent coral, bubbles, pressure waves, water elemental atmosphere",
lighting: "clear underwater daylight beams from the surface mixed with coral glow",
costume: "sleek aquatic armor, translucent fins, pearl harness, waterproof bodice, coral ornaments",
style: "underwater fantasy card art, bioluminescence, floating hair, soft blue light",
damageProfile: "수중 갑피, 지느러미 장식, 산호 하네스와 진주 끈이 깨지고 흩어진다",
@@ -224,6 +234,7 @@ const WORLD_ARCHETYPES = [
origin: "멈춘 시계탑 출신",
pose: "공중의 톱니를 밟고 초침 검을 찌르는 자세",
scene: "fractured clock tower outside time, floating gears, frozen glass shards, metal elemental atmosphere",
lighting: "surreal golden noon frozen in time, bright highlights on gears and glass",
costume: "clockwork bodice armor, capelet, thigh boots, gear halo, ornate gloves",
style: "chrono fantasy TCG key art, suspended motion, gold and silver gears, surreal lighting",
damageProfile: "시계장치 흉갑, 장갑, 망토, 톱니 장식이 부서지고 시간 파편이 흩어진다",
@@ -237,7 +248,8 @@ const WORLD_ARCHETYPES = [
weapon: "불꽃 웍과 식칼 부적",
origin: "심야 푸드트럭 결투장 출신",
pose: "웍에서 불기둥을 뽑아내며 한 발을 내딛는 자세",
scene: "night food market, neon signs, steam, flying spices, fire elemental atmosphere",
scene: "open-air food market, colorful stalls, steam, flying spices, fire elemental atmosphere",
lighting: "busy lunchtime daylight with awnings, steam, and warm flame contrast",
costume: "stylish chef jacket, waist apron, fitted pants, heatproof gloves, metal accessories",
style: "gourmet battle fantasy card art, steam and flame, vivid street-food lighting",
damageProfile: "셰프 재킷, 앞치마, 장갑, 허리 벨트가 그을리고 찢어진다",
@@ -252,6 +264,7 @@ const WORLD_ARCHETYPES = [
origin: "남극 심층빙 연구소 출신",
pose: "드릴을 바닥에 꽂고 빙결장을 펼치는 자세",
scene: "polar research base, aurora, ice core machines, snowstorm, water elemental atmosphere",
lighting: "cold polar morning with pale sun through snow and faint aurora color",
costume: "thermal research suit, fur-trim hood, harness, insulated boots, cracked goggles",
style: "arctic science fantasy card art, aurora lighting, snow particles, crisp detail",
damageProfile: "방한복, 고글, 하네스, 부츠, 장갑이 찢어지고 얼음 조각이 박힌다",
@@ -266,6 +279,7 @@ const WORLD_ARCHETYPES = [
origin: "마스 돔 광산 7구역 출신",
pose: "붉은 암석을 끌어올리며 곡괭이를 내리치는 자세",
scene: "Mars colony mine, red dust, habitat domes, low gravity rocks, earth elemental atmosphere",
lighting: "bright Mars daytime with red dust haze and industrial work lights",
costume: "dusty pressure-mining suit, armored suspenders, visor, utility thigh packs, heavy boots",
style: "Mars frontier sci-fi fantasy card art, red dust, industrial lights, rugged detail",
damageProfile: "광산복, 바이저, 중력 곡괭이 스트랩, 부츠 보호대가 찢기고 깨진다",
@@ -280,6 +294,7 @@ const WORLD_ARCHETYPES = [
origin: "세계수 패션 사원 출신",
pose: "런웨이 워킹 중 꽃가지 왕홀로 결계를 펼치는 자세",
scene: "ancient temple runway, giant tree roots, floating petals, golden spotlights, wood elemental atmosphere",
lighting: "golden daytime temple courtyard with fashion runway spotlights",
costume: "high-fashion ritual dress, botanical armor pieces, vine heels, jeweled shoulder ornaments",
style: "mythic fashion fantasy card art, editorial runway pose, ornate botanical detail",
damageProfile: "의식 드레스, 식물 갑주, 어깨 장식, 힐 스트랩이 찢어지고 꽃잎이 흩어진다",
@@ -294,6 +309,7 @@ const WORLD_ARCHETYPES = [
origin: "사막 철도 마을 출신",
pose: "코트를 젖히고 리볼버를 뽑는 결투 자세",
scene: "dusty western town, railroad, saloon lights, solar fire runes, fire elemental atmosphere",
lighting: "harsh noon sun in a dusty western street, bright and dry",
costume: "western corset vest, long coat, leather belt, boots, sheriff badge, brimmed hat",
style: "western fantasy trading card art, dust and sun flare, cinematic duel framing",
damageProfile: "롱코트, 모자, 벨트, 부츠, 조끼 단추가 찢기고 탄 자국이 난다",
@@ -308,6 +324,7 @@ const WORLD_ARCHETYPES = [
origin: "프로 VR 아레나 출신",
pose: "컨트롤러 블레이드를 교차하며 관중석을 향해 도발하는 자세",
scene: "virtual esports arena, pixel particles, giant screens, data shields, metal elemental atmosphere",
lighting: "bright virtual arena lighting with white LED panels and colorful UI glow",
costume: "streamer performance suit, LED jacket, headset, fingerless gloves, hologram belt",
style: "neon esports fantasy card art, digital particles, energetic streaming-stage composition",
damageProfile: "LED 재킷, 헤드셋, 장갑, 홀로그램 벨트와 데이터 방패가 깨진다",
@@ -321,7 +338,8 @@ const WORLD_ARCHETYPES = [
weapon: "나무 부적 타래와 접이식 장대",
origin: "심야 전통시장 노점 출신",
pose: "부적 타래를 펼치며 좁은 골목을 막아서는 자세",
scene: "night traditional market, paper lanterns, wooden talismans, alley mist, wood elemental atmosphere",
scene: "traditional market alley, paper lanterns, wooden talismans, alley mist, wood elemental atmosphere",
lighting: "late-afternoon market light with lanterns beginning to glow, not fully night",
costume: "modern hanbok jacket mixed with streetwear, waist pouch, boots, talisman ornaments",
style: "Korean urban folklore card art, lantern light, street texture, magical realism",
damageProfile: "개량 한복 재킷, 부적 끈, 허리 주머니, 부츠 장식이 찢어지고 흩어진다",
@@ -336,6 +354,7 @@ const WORLD_ARCHETYPES = [
origin: "해안 카지노 VIP룸 출신",
pose: "카드를 부채꼴로 펼치며 룰렛 링을 띄우는 자세",
scene: "luxury casino floor, roulette lights, gold chips, mirrored ceiling, metal elemental atmosphere",
lighting: "bright luxury interior lighting with gold reflections and clear face visibility",
costume: "elegant dealer suit, fitted vest, high heels, metallic card garters, gloves",
style: "luxury occult casino card art, gold reflections, dramatic spotlight, sleek glamour",
damageProfile: "딜러 조끼, 장갑, 카드 홀더, 하이힐 스트랩과 금속 장식이 파손된다",
@@ -350,6 +369,7 @@ const WORLD_ARCHETYPES = [
origin: "열대 유적 탐사팀 출신",
pose: "석판 드론을 띄우고 채찍으로 바위를 가르는 자세",
scene: "jungle ruins, vines, ancient stones, scanning drones, earth elemental atmosphere",
lighting: "humid midday jungle sunlight with strong beams through leaves",
costume: "adventurer crop jacket, utility shorts or pants, boots, satchel, protective straps",
style: "adventure fantasy trading card art, jungle light shafts, ancient stone detail",
damageProfile: "탐사 재킷, 가방끈, 부츠, 보호 스트랩과 장갑이 찢어진다",
@@ -357,6 +377,17 @@ const WORLD_ARCHETYPES = [
},
];
const LIGHTING_VARIANTS = [
"clear midday daylight with crisp shadows and bright environmental color",
"late-afternoon sunlight with warm rim light and readable faces",
"overcast daytime with soft gray sky and high detail visibility",
"early morning light with cool blue shadows and gentle sun",
"stormy daytime with dramatic clouds, rain, and bright lightning accents",
"golden sunset with strong side light and dust or mist glow",
"bright indoor arena or stage lighting with clean highlights",
"night battle lighting with moon, neon, or magical glow used only as one variant among many",
];
const PERSONALITIES = [
"냉정한 전략가",
"낙천적인 돌파형",
@@ -873,6 +904,7 @@ function buildCharacterPool(count) {
world: worldProfile?.world ?? "고전 판타지 전장",
era: worldProfile?.era ?? "중세풍 판타지",
scene: worldProfile?.scene ?? `fantasy duel arena with ${ELEMENTS[affinity].name} elemental atmosphere, no other characters`,
lighting: worldProfile?.lighting ?? pickByIndex(LIGHTING_VARIANTS, index, weapon.name.length),
costume: worldProfile?.costume ?? "ornate fantasy armor, cloak, weapon accessories, and battle-ready protective gear",
style: worldProfile?.style ?? "polished semi-real painterly TCG key art, high-detail Korean/Asian fantasy mixed with global high-fantasy design",
damageProfile,
@@ -1132,6 +1164,7 @@ function makeCardNode(card) {
<div class="character-notes">
<div><strong>성향</strong><span>${card.character.personality}</span></div>
<div><strong>세계관</strong><span>${card.character.world}</span></div>
<div><strong>시간/조명</strong><span>${card.character.lighting}</span></div>
<div><strong>복장/장비</strong><span>${card.character.costume}</span></div>
<div><strong>성인 연출</strong><span>${card.character.appealFocus}</span></div>
<div><strong>외형 DNA</strong><span>${appearanceSummary(card.character.appearance)}</span></div>