From b153a87be5cb9a16cc1a8de46d8a2a1c29bd13f1 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 1 Nov 2026 20:35:40 +0000 Subject: [PATCH 01/12] =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=E2=80=94=20?= =?UTF-8?q?=ED=8C=A8=ED=84=B4=20=EC=97=B0=EA=B5=AC=2088=ED=8C=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018svN6WCTXGiFMzoDBTf192 From 5a39ad14bd43f9b3f5a72a7910f9bcd3e1cf8542 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 1 Nov 2026 20:57:28 +0000 Subject: [PATCH 02/12] =?UTF-8?q?Rowel=20=EC=B2=AB=20=ED=8C=90:=20?= =?UTF-8?q?=EB=A6=AC=EB=B3=BC=EB=B2=84=EB=A5=BC=20=EC=84=B8=EC=9B=8C=20?= =?UTF-8?q?=EB=93=A0=20=ED=83=9C=EC=97=BD=20=EB=B3=B4=EC=95=88=EA=B4=80=20?= =?UTF-8?q?=EB=A1=9C=EB=B4=87=20=ED=94=BC=EA=B7=9C=EC=96=B4=EA=B0=80=20?= =?UTF-8?q?=EC=84=A0=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018svN6WCTXGiFMzoDBTf192 --- incoming/pattern-study/README.md | 1 + incoming/pattern-study/craft/rowel/brief.md | 38 ++ incoming/pattern-study/craft/rowel/log.md | 8 + .../craft/rowel/silhouettes-88.png | Bin 0 -> 2365 bytes incoming/pattern-study/patterns/rowel.js | 588 ++++++++++++++++++ 5 files changed, 635 insertions(+) create mode 100644 incoming/pattern-study/craft/rowel/brief.md create mode 100644 incoming/pattern-study/craft/rowel/log.md create mode 100644 incoming/pattern-study/craft/rowel/silhouettes-88.png create mode 100644 incoming/pattern-study/patterns/rowel.js diff --git a/incoming/pattern-study/README.md b/incoming/pattern-study/README.md index 5fbab0ed..8b621505 100644 --- a/incoming/pattern-study/README.md +++ b/incoming/pattern-study/README.md @@ -16,6 +16,7 @@ | --- | --- | --- | | [Tamsel](patterns/tamsel.js) | 작품 1 | 밤거리 가스등에 불을 붙이는 견습 점등꾼이 받침 위에 한 손은 허리에, 한 손은 갈고리 끝에 불씨를 매단 놋쇠 장대에 얹고 서서 숨 쉬고 깜빡여요. | | [Ferrow](patterns/ferrow.js) | 작품 1 | 무너진 성채의 문을 이백 년째 지키는 파수 로봇이 받침 위에 한 손은 허리에 얹고, 홈이 호박색으로 달아오른 대검을 어깨에 멘 채 숨 쉬다가, 6.8초마다 그 대검을 받침에 꽂아 불꽃을 튀기고 등으로 증기를 뿜어요. | +| [Rowel](patterns/rowel.js) | 작품 1 | 사막 철길을 백 년째 혼자 걷는 태엽 보안관 로봇이 받침 위에 한 손 엄지는 총 벨트에 걸고, 터키석 손잡이의 리볼버를 총구가 하늘로 가게 챙 넓은 모자 옆에 세워 든 채 숨 쉬고 눈 덮개를 깜빡여요. | ## 추려 보기 diff --git a/incoming/pattern-study/craft/rowel/brief.md b/incoming/pattern-study/craft/rowel/brief.md new file mode 100644 index 00000000..4d549364 --- /dev/null +++ b/incoming/pattern-study/craft/rowel/brief.md @@ -0,0 +1,38 @@ +slug: rowel + +# Rowel + +사막을 가로지르는 철길을 백 년째 혼자 걸어 지키는 태엽 보안관 로봇이에요. 진열장 받침 위에 총열 긴 리볼버를 총구가 하늘로 가게 모자챙 옆에 세워 들고, 오른손 엄지는 총 벨트에 건 채 한쪽 다리에 무게를 싣고 서 있어요. + +11월 1일 밤 88판(PR #354)에 셋째 캐릭터로 시작했어요. 01-figure 는 87판(#353)이, keelson 은 #351 이 쥐고 있어서 「자리 고르기」 4번대로 새 캐릭터예요. 창작자가 앞 두 캐릭터에 「엄청 멋진 로봇캐릭터」를 바라서 셋째도 로봇이에요. + +- 성격: 여유로움, 매서움 +- 시그니처: 총열 긴 니켈 리볼버예요. 왼손에 쥐고 총구를 하늘로 세워 모자챙 옆으로 들어 올려, 총열이 챙 위로 솟아 오른쪽 위에서 실루엣을 깨요. 손잡이에 터키석이 박혀 있어요. 어깨보다 훨씬 넓은 납작한 챙의 모자가 머리 위로 가로 실루엣을 함께 만들어요. +- 로봇인 표: 니켈 얼굴판과 그 위 터키석 두 눈빛, 각진 눈썹 판, 입 자리의 짧은 그릴 틈, 귀 자리의 태엽 감개, 목의 주름관, 코트 아래로 보이는 니켈 다리와 무릎 관절, 관절 손가락. +- 재질: 무광 펠트(모자), 무광 캔버스(먼지 앉은 모래색 더스터 코트와 어깨 망토), 광택 니켈 은(얼굴판, 손, 다리, 리볼버). 놋쇠(별 배지, 버클, 박차)와 가죽(벨트, 장화)은 작은 정반사만 받아요. +- 주색과 시대: 모래색, 1880년대 서부 개척기. +- 광원: 키 라이트는 오른쪽 위에서 오는 해 질 녘의 금빛이에요. 림은 왼쪽 가장자리의 저녁 하늘 보랏빛 1px 이고, 그 옆 두 칸에 그늘 쪽 반사가 들어요. +- 비례: 3.3등신. 키 113줄(모자 꼭대기에서 발바닥까지)에 머리 34줄이에요. +- 쉬는 동작: 숨(가슴과 어깨, 두 팔과 리볼버가 1px, 3.4초에 한 번, 머리는 한 박 늦게)과 코트 자락 끝이 한 박 더 늦게 1px 흔들리는 것. 깜빡임은 반쯤 감은 단계를 거쳐 따로 돌아요. +- 강조색: 터키석. 두 눈빛과 리볼버 손잡이에만 칠해요. +- 이름판: 없어요. 받침 옆띠가 5줄이라 7줄이 안 돼요. + +노브 넷과 버튼이에요. + +- K1 에디션: 0 모래색 기본 칠, 1/4 2P 검정 코트와 붉은 띠, 1/2 금과 상아 한정판, 3/4 무도색 원형. +- K2 받침: 0 철길 침목 나무, 1 붉은 사암, 2 검은 아크릴에 금 테(기본), 3 가장자리가 빛나는 아크릴. +- K3 디테일 컷: 0.5 아래는 전신, 0.5 부터는 머리와 가슴, 든 리볼버를 정확히 2배로. +- K4 림 젤: 0 저녁 하늘 보라, 1/4 새벽 하늘색, 1/2 선인장 초록, 3/4 밤 파랑. 림 1px 과 그 옆 그늘 쪽 반사 두 칸을 같이 물들여요. +- 버튼: K1 탭 진열장 빛 스윕, K2 탭 총구 글린트. + +닮으면 안 되는 캐릭터 셋과, 각각과 다른 점 둘이에요. + +- 서부 테마파크의 검은 옷 총잡이 안드로이드: 사람 얼굴이 없고 입 없는 니켈 얼굴판에 터키석 눈빛이에요. 검은 옷이 아니라 모래색 더스터를 입어요. +- 챙 넓은 모자에 호흡관을 단 푸른 피부 현상금 사냥꾼: 호흡관이 없고 눈이 붉지 않아요. 쌍권총이 아니라 리볼버 하나를 겨누지 않고 총구를 하늘로 세워 들어요. +- 장난감 영화의 카우보이 인형: 체크 셔츠와 얼룩소 조끼가 없고 긴 더스터 코트를 입어요. 사람 인형이 아니라 태엽 감개와 관절 손가락이 있는 로봇이에요. + +## 형제 캐릭터 + +- Tamsel(밤거리 견습 점등꾼 소녀): 정체(사람 견습공과 로봇 보안관), 실루엣(머리 위로 굽은 갈고리 장대와 가로로 넓은 모자챙에 곧게 선 총열), 주색(청록과 모래색)이 달라요. 시대는 둘 다 19세기 끝이에요. +- Ferrow(무너진 성채의 파수 로봇): 정체(성 문지기와 철길 보안관), 실루엣(어깨에 멘 대검이 왼쪽 위로 깨는 것과 모자챙이 머리 위로 가로 깨는 것), 주색(뼈색과 모래색), 시대(중세 판타지와 서부 개척기)가 달라요. +- Keelson(궤도 조선소 중장비 로봇): 정체(공장 기계와 보안관), 실루엣(왼쪽 위로 든 가슴통만 한 건틀릿과 오른쪽 위로 곧게 선 가는 총열에 모자챙), 주색(진홍과 모래색), 시대(먼 미래와 1880년대)가 달라요. diff --git a/incoming/pattern-study/craft/rowel/log.md b/incoming/pattern-study/craft/rowel/log.md new file mode 100644 index 00000000..1555b80f --- /dev/null +++ b/incoming/pattern-study/craft/rowel/log.md @@ -0,0 +1,8 @@ +상태: a 깎는 중 + +## 88판 (바퀴 86) · 길 a · 시작 b153a87 +- 쉬는 프레임 t=2 · 노브 [0, 2, 0, 0.06] +- 리그(첫 바퀴만): 안 4 3승 · 안 1 1.5승 · 안 2 1.5승 · 안 3 0승 → 길 a 안 4, 길 b 안 1 +- 리그 동점 가리기: 안 1 과 안 2 가 둘끼리 정순·역순으로 엇갈림. 새 판정 둘에게 같은 짝을 다시 물으니 둘 다 안 1 +- 안 1~4: 모자챙에 손가락을 얹고 권총 손잡이에 손, 총을 다리 옆으로 내려 들고 챙을 당김, 팔짱 끼고 발목을 꼬아 기댐, 리볼버를 총구가 하늘로 가게 모자 옆에 세워 듦 +- 선 판: 24색 · 피규어 y2~126 · 캐릭터 모자 꼭대기 y5~발바닥 y118 114줄 · 머리 36줄(3.2등신) · 가장 넓은 줄 55열 · 비대칭 20.8% · 노브 K1 0.11 · K2 0.02 · K3 0.36 · K4 0.02 · 한 프레임 깜빡임 0 diff --git a/incoming/pattern-study/craft/rowel/silhouettes-88.png b/incoming/pattern-study/craft/rowel/silhouettes-88.png new file mode 100644 index 0000000000000000000000000000000000000000..3d44a47b50655e7bf4e2cac790a7a17be152dcaf GIT binary patch literal 2365 zcmX|DdpwhU8=r(%t$Lzf)5Fv=ij>UKfx;`TDUv6LA(GoE<wd)Kr3xY1d^yu?<%;QOr_6U#mAzY3rhYEad&4lw`b%?_jTIL3 z(An8ZnS^pkcWVOP#*FO3iLh9>$sQ4trLb{w1S2K`uZkHuD%&0rl8kG{2-g;ct%a2W zEdmV`7Db1C-d;3X%+!5@mxMy-w0%X8oK>{`ba>-i&&In)3N03dNq8H-Jw$%j_!j9S zGorSryf+B<8nanl8#;A4+N-5x$U#4514vw2hbiRgw>+NS5ku2~;`~{7w>DX8F+@%p za)Oo8FG24EqsC;y;+SHra*-MoCkTdbTj0{otgmY$B ztAgBnkzjf?H{1DSnQUwLPCGB$b+=m2U% zah_nQLvgHhn$?1A^8Ci;1{tm2XP!0nf)Vs9RewtD87CxWoiWEWne+$Uyi8;eKFbq# zZL)s))hmk;$rlWK%n6YWy(|KAF$glSPV{7Ez0K&%ug5C+q0=z1^V#awC{d2t{7NWJ zKRBC;4tI88XS9H)egS6coEoDgsqfm+lJ^&4bpV1MQr9zl>soIE={{CFb>PK3VIKe5 zE*z%t_(Dq!sR^hlz5VEJugBpumBF#rnYpMuE0n53`_UKzA>_Q749$zSXJc8)faXk$ z*X=7~srp+L76&y{5LEqE)2vcDW{~ zs{EybzdszvB`HN}v39_|@r#|Lm|jGyV^_MGK8v2O%Sf(->c3@_80IA}#RIwe!V2B6 z(kJb89hxZz{OaX5B#TezDW|+uG?OD>2@P`V;B{ZWN&k9cKDjl@%3L=sEdwX6#3OE_x)pTkvxu|9Z}>`5M#X(Io!LNn2}U_3Kzx-f5X z5T<_WH7Vz=vD#CiR5aABX(n z?#VIvD?EC;4(j1!i5j}v06YgjO2CmX^QxMHf&uu~sFvYi!+YJGhKqeko5H>m`!}i} zaa&f2juw2b-xhLdx8jvY71$iMemkH`(-)83{&M420#YJ@gig!snHm;RH<$;K7`f9c zLDQ^~vFo0!5@Pe`b@OgPEZH&0GIwBUn#Hm3qo4taj`& zS*8?Wygkhu_*=gdqi7Xbwhd*0BeS&vUxPQbT3c1gBu-XKWuZakD94!b5A^jFRX~ zu{Yp9;H5y+G|6y%reNIpo3?VllZ#+^_Yt!`+RK0DD?SGzI6!PO(!pSQ2PBP*gz??X zF2a-1EmI?4%Zzuoo=nj#WB=rI;nIZp1C9WZXG+Z4#u5A`F<6F2#yw`r=!H8UJZS1M zf6)4BR`}c))bUvZCw*Zl?U4BLsH>Mhx|PMfmF-^?O#~L5G(g6se7B(UE)g?EV9MF} z(x#TYLX7p8mPgjjU?|39@)4ltuYJge*68mC`Gn$_?(eAtcim|qRr_X4#7$M1k6vT4 zjL(;JZ^l{yQK@4g*tKHB^=SltaqcPG>myZX)}tSEri<+BW&SrvIrYer#|2LFl=S^f zNx6vYcXe0g;34K%_$4$rR1CqAlK25`Ta07xIkB-e-F(Kw12UI|hX&jmQ6wdM_kB3r z*C4H{D%c~H=}ZyUr&6xAXLXW5k;mb$)tVJiWt5iMj?PG|cvE84{Q`Gy5XnKPqCno% znXs%MpS#OLLIotKT*04&L4LZL_PDgtR?zrYbG;~?cr7tK52now8+A7 z|G>bDoc$~nkZxS?rHATzmT3k;gLq<5t)8B-|44tuTnZjUuLyiIowM4u0hyXrrA$Pb zB!94lLy8%SCCT%s11Y}&r7?Jmxq&+31A+QEv*gNy1I?DPV%>^;4$xA_2=CVOVTY^a z0&?bjtgV{futxQeZ{dc%jtpHjuz*Y)CvO_k^X}|hN0HB3gBwD6wo7BxJ<2JZpd`p~ z`KP3>N&>$8$85HKaaRPulS&%EjsFBLMDT0&3IR!foa8t790R!80GDMH5YCy4LQ~`{ gSQ$d0Uh6L@l`7T5u2=R#mhVOOhmYG8+xjN_4?Y5bivR!s literal 0 HcmV?d00001 diff --git a/incoming/pattern-study/patterns/rowel.js b/incoming/pattern-study/patterns/rowel.js new file mode 100644 index 00000000..f623823d --- /dev/null +++ b/incoming/pattern-study/patterns/rowel.js @@ -0,0 +1,588 @@ +// ===== Patternflow pattern ===== +// Title: Rowel +// Family: pixel +// Idea: A hand-pixelled figure of Rowel, a clockwork marshal who has walked a desert railroad alone for a hundred years, standing on a display stand that fills the panel: a wide flat-brimmed felt hat tilted over a nickel faceplate, two turquoise eyes under sharp brows, a winding key at his temple, a dusty sand duster with a shoulder cape, nickel legs and spurred boots, one thumb hooked in his gun belt and a long-barrelled revolver held muzzle-up beside the brim. He breathes, the coat tails follow a beat late, his eyes shutter, and now and then the case light runs along the metal. +// Author: patternflow-lab +// Date: 2026-11-01 +// SPDX-License-Identifier: CC-BY-SA-4.0 +// Lineage: original, pattern round 88 +// Round: 88 +// =============================== +// @matrix 64x128 +// @knobs Edition=0..1, Stand=0..3, Detail=0..1, Gel=0..1 +// +// Knob 1: Edition. The paint: sand duster and indigo felt below 0.25, the second-player charcoal and oxblood from 0.25, a gold and ivory limited plating from 0.5, and from 0.75 the unpainted grey prototype. +// Knob 2: Stand. What he stands on: a railroad tie at 0, red sandstone from 1, black acrylic with a gold lip from 2, and from 3 acrylic lit at the edge. +// Knob 3: Detail. Below 0.5 the whole figure; from 0.5 his head, chest and raised revolver at exactly twice the size. +// Knob 4: Gel. The rim light down his left edges, the bounce beside it and the shaded side of the coat and the deepest shade of each material, as if the sky on his dark side changed: evening violet at 0, dawn blue from 0.25, cactus green from 0.5, night blue from 0.75. +// Buttons: K1 tap sends the case light along him; K2 tap makes the muzzle glint. + +const W = 64, H = 128; +// Each part is a grid, one character per LED and "." where it is clear, drawn +// in order. Materials run light to dark: canvas a b c d, felt and leather +// f g h, nickel n o p q, brass B C D. t u v are the turquoise of the eyes and +// the grip, z the rim light, K and J the bounce beside it on canvas and on +// metal or felt, w the specular. S T U L are the stand, its shadow and its lip. +const PARTS = { + "arml": { x: 42, y: 34, rows: [ + ".........cccb.....", + "........zcccbb....", + ".......cccccbbb...", + ".......zKcccbbb...", + ".......zKccccbb...", + ".......zKccccbb...", + "........zKcccbbb..", + ".........zKccbbb..", + ".........zKcccbb..", + ".........zKcccba..", + ".........zKcccaaa.", + "..........zKbbaaa.", + "..........zKbbaaa.", + "..........zKbbbaa.", + "..aaaa..zKccbbbaaa", + ".aaaaaaaaacccbbaaa", + "aaaaabbbbbcccbbaaa", + "bbbbbbbbbbcccbbbaa", + "bbbbbbbccccccbbba.", + "bbccccccccccccbb..", + ".cccccccccc.......", + "..cccc............", + ] }, + "armr": { x: 8, y: 48, rows: [ + ".........cccb.....", + "........cccbbb....", + ".......cccbbbba...", + ".......cccbbbaa...", + ".......ccbbbbaa...", + "......zcbbbbaaa...", + ".....zccbbbaaaa...", + ".....zcbbbbaaa....", + "....zKbbbbaaaa....", + "....zKbbbaaaa.....", + "...zKbbbbaaa......", + "..zKaabbaaaa......", + ".zKaaaabaaa.......", + "zKbbaaaaaaa.......", + "zKbbbaaaaa........", + "zKcbbbaaa.........", + "zKccbbbaaa........", + ".zKccbbbaaa.......", + "..zKccbbccaa......", + "...zKccccccaaa....", + ".....zKcccccaaa...", + "......zKcccccaaa..", + ".......zKcccoona..", + "........zKpooonnn.", + "........zKpoooonn.", + ".........ppoooonnn", + ".........pooooonnn", + ".........pooooonnn", + "..........oooooon.", + "..........ooqqqqq.", + "............ooo...", + ] }, + "base": { x: 5, y: 114, rows: [ + "...............SSSSSSSSSSSSSSSSSSSSSSSSS...............", + ".......SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS.......", + "...SSSUUUUUUUUUUUUUUUUUUUSSSUUUUUUUUUUUUUUUUUUUUSSSS...", + ".SSSSSUUUUUUUUUUUUUUUUUUUSSSUUUUUUUUUUUUUUUUUUUUSSSSSS.", + "LSSSSSUUUUUUUUUUUUUUUUUUUSSSUUUUUUUUUUUUUUUUUUUUSSSSSSL", + "TLLSSSUUUUUUUUUUUUUUUUUUUSSSUUUUUUUUUUUUUUUUUUUUSSSSLLT", + "TTTLLLLSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSLLLLTTT", + "TTTTTTTLLLLLLLLSSSSSSSSSSSSSSSSSSSSSSSSSLLLLLLLLTTTTTTT", + "TTTTTTTTTTTTTTTLLLLLLLLLLLLLLLLLLLLLLLLLTTTTTTTTTTTTTTT", + "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", + "..TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT..", + "......TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT......", + "..............TTTTTTTTTTTTTTTTTTTTTTTTTTT..............", + ] }, + "cape": { x: 14, y: 40, rows: [ + "...........c.............z...........", + "...........zK...........zK...........", + "..........zKcc.........zKbb..........", + "..........zKccb.......bbbbb..........", + ".....zKcbccccbbbbbbbbbbbbbbbaaaa.....", + "....zKcbbccccbbbbbbbbbbbbbbbaaaaa....", + "....zKcbbbbcbbbbbbbbbbbbbaaaaaaaa....", + "...zKccbbbbcbbbbbbbbbbbbbaaaaaaaaa...", + "..zKccbbbbcbbbbbbbbbbbbbbbaaaaaaaaa..", + "..zKccbbbbcbbbbbbbbbbbbbbbaaaaaaaaa..", + ".zKcccbbbbcbbbbbbbbbbbbbbbbaaaaaaaaa.", + ".zKccbbbbbcbbbbbbbbbbbbbbbbaaaaaaaaa.", + ".zKccbbbbcbbbbbbbbbbbbbbbbbbaaaaaaaa.", + ".ccccbbbbcbbbbbbbbbbbbbbbbbbaaaaaaaa.", + "ccccbbbbbcbbbbbbbbbbbbbbbbbbaaaaaaaaa", + "ccccbbbbbcbbbbbbbbbbbbbbbbbbbaaaaaaaa", + "ccccbbbbcbbbbbbbbbbbbbbbbbbbbaaaaaacc", + ".ccbbbbbcbbbbbbbbbbbbbbbbbbbbbaaacc..", + "...ccccccccbbbbbbbbbbbbbbcccccccc....", + "...........cccccccccccccc............", + ] }, + "coatback": { x: 19, y: 74, rows: [ + "...ddddddddddddddcccccccc...", + "...ddddddddddddddcccccccc...", + "...ddddddddddddddcccccccc...", + "...dddddddddddddddccccccc...", + "...dddddddddddddddccccccc...", + "..ddddddddddddddddcccccccc..", + "..ddddddddddddddddcccccccc..", + "..ddddddddddddddddcccccccc..", + "..ddddddddddddddddcccccccc..", + "..dddddddddddddddddccccccc..", + "..dddddddddddddddddccccccc..", + "..dddddddddddddddddccccccc..", + "..dddddddddddddddddccccccc..", + "..dddddddddddddddddccccccc..", + ".ddddddddddddddddddcccccccc.", + ".dddddddddddddddddddccccccc.", + ".dddddddddddddddddddccccccc.", + ".dddddddddddddddddddccccccc.", + ".dddddddddddddddddddccccccc.", + ".dddddddddddddddddddccccccc.", + ".dddddddddddddddddddccccccc.", + ".ddddddddddddddddddddcccccc.", + "dddddddddddddddddddddccccccc", + "dddddddddddd......zKdccccccc", + "dddddddd.............ccccccc", + "ddddd...................cccc", + "d..........................c", + ] }, + "eyeshalf": { x: 22, y: 28, rows: [ + "ppp....pppp", + "ppp....pppp", + ] }, + "eyesshut": { x: 22, y: 28, rows: [ + "ppp....pppp", + "ppp....pppp", + "ppp....pppp", + "vvv....pppp", + ".......vvvv", + ] }, + "glint": { x: 51, y: 2, rows: [ + "w.", + "nw", + ".w", + ] }, + "gun": { x: 46, y: 2, rows: [ + "....zJ.....", + "....zJn....", + "....zJn....", + "....zJn....", + "....zJn....", + "....zJn....", + "....zJw....", + "....zJw....", + "....zJn....", + "....zJn....", + "....zJn....", + "....zJn....", + "....zJn....", + "....zJn....", + "....pon....", + "....pon....", + "....pon....", + "..ppoqonn..", + "..zJoqonn..", + "..zJoqonw..", + "..zJoqonn..", + "..zJoqonn..", + "..zJoqonn..", + "...zJppp...", + "...zJppp...", + ".....zJo...", + "...zJooonn.", + "...zJoooon.", + "..zJpppppnn", + "..zJooooonn", + "..zJoooooon", + ".utooooooo.", + "uuuooooooo.", + "vuu..ooo...", + ".vv........", + ] }, + "hat": { x: 3, y: 5, rows: [ + "........................z..........z......................", + "...................zggggggg....zgffff.....................", + "..................zhgggggggghggggffffff...................", + "..................zhgggggggghgggggffffff..................", + ".................zhhgggggggghgggggffffff..................", + ".................zhhggggggghggggggfffffff.................", + ".................zhgggggggghggggggfffffff.................", + ".................zhgggggggghggggggfffffff................z", + ".................zhgggggggghggggggfffffff...............zf", + "................zJppppoooooooooooooonnnnnn............zfff", + "................zJppppoooooooooooooonnwnnn.......ffffffff.", + "................zJppppoooooooooooooonnnnnnggggggggffffff..", + "................zhhggggggggggggggggggggggggggggggggghhh...", + "z...............zggggggggggggggggggggggggggggghhhhhh......", + "zh...........zggggggggggggggggggggggggghhhhhhh............", + "zhhhhhhhggggggggggggggggggggggggghhhhhh...................", + ".zhhhhhhggggggggggggggghhhhhhhhhh.........................", + "...zhhhhggggghhhhhhhhhh...................................", + ".......zhhhhh.............................................", + ] }, + "head": { x: 20, y: 17, rows: [ + "qqqqqqqqqqqqqqqqqqqqqqq....", + "qqqqqqqqqqqqqqqqqqqqqqq....", + "qqqqqqqqqqqqqqqqqqqqqqq....", + "qqqqqqqqqqqqqqqqqqqqqqq....", + "qqqqqqqqqqqqqqqqqqqqqqq....", + "ppppppppppppppppppppppp....", + "zJpoooooooooooopnnnnnnnn...", + "zJpoooooooooooopnnnnnnnn...", + "zJqqoooooooqqqqpnnnnnnnn...", + "zJqqqqooqqqqqoopnnnpppnn.C.", + "zJpoooooooooooopnnppnppnCBC", + "zJutoooooouttoopnnpnnnpnCCC", + "zJuuuoooouuuuooopnppnppnDCD", + "zJuuuoooouuuuooopnnpppn..D.", + "zJvuuoooouuuuooopnnnnnn....", + ".zJoooooovvuuooopnnnnnn....", + ".zJooooooooooooopnnnnnn....", + ".zJoooooooqooooopnnnnn.....", + ".zJooqqqqqoooooopnnnnn.....", + ".zJooooooooooooopnnnn......", + "..zJpppppppppppppppp.......", + "...zJpppppppppppppp........", + "...zJppppppppppppp.........", + "....zJppppppppppp..........", + ] }, + "legfar": { x: 16, y: 74, rows: [ + "..........oooo.......", + ".........ooooon......", + "........oooooonn.....", + ".......poooooonnn....", + ".......poooooonnn....", + ".......poooooonnn....", + ".......poooooonnn....", + "........oooooonnn....", + "........oooooonnn....", + "........oooooonnn....", + "........oooooonnn....", + "........oooooonnn....", + "........oooooonn.....", + ".......poooooonn.....", + ".......poooooonn.....", + ".......poooooonn.....", + ".......opoooonnn.....", + "......popooonnnn.....", + "......pppoooonoo.....", + "......ppoooooooo.....", + "......ppoooooooo.....", + ".......oooooooon.....", + "........ooooooon.....", + ".......qqqqqqqqq.....", + "........ooooonnn.....", + "........ooooonnn.....", + ".......oooooonn......", + ".....zhhgggggfff.....", + ".....zhhgggggfff.....", + ".....zhhhhhhhhhh.....", + ".....zhgggggggff.....", + ".....zhgggggggff.....", + ".....zhgggggggfff....", + ".....zhgggggggfff....", + ".....zhgggggggfff....", + ".....zhggggggggff....", + ".....zhggggggggff....", + ".....zhggggggggff....", + ".....zhggggggggff....", + "...zhhgggggggggfff.B.", + "..zhhhgggggggggfffC.C", + "hhhhhhggggggggggff.D.", + "hhhhhhggggggggggff...", + "hhhhhhggggggggggff...", + "hhhhhhhhhhhhhhhhhh...", + ] }, + "legnear": { x: 33, y: 74, rows: [ + "...pooo.................", + "..ppoooo................", + ".pppooooo...............", + "pppppooooo..............", + "pppppooooo..............", + "pppppooooo..............", + "pppppooooon.............", + ".ppppooooon.............", + "..pppoooooo.............", + "..pppoooooon............", + "..pppoooooon............", + "...ppoooooon............", + "...pppooooon............", + "...pppooooonn...........", + "...pppooooonn...........", + "....pppoooonn...........", + "....pppooonnnn..........", + "....pppoooonoo..........", + "....pppooooooo..........", + "....pppooooooo..........", + ".....ppoooooonn.........", + "......poooooonn.........", + ".....qqqqqqqqqn.........", + ".......oooooonn.........", + ".......zJoooonnn........", + ".......zJoooonnn........", + ".......zhggggggfff......", + ".......zhggggggfff......", + ".......zhhhhhhhhhh......", + ".......zhgggggggff......", + "......zhggggggggff......", + "......zhggggggggff......", + "......zhggggggggff......", + "......zhggggggggff......", + "......zhgggggggggf......", + "......zhgggggggggf......", + ".....zhhgggggggggf......", + ".....zhhgggggggggff.....", + "...B.zhhgggggggggfff....", + "....Chhggggggggggffff...", + "...D.hhgggggggggggffff..", + ".....hhgggggggggggfffff.", + ".....hhgggggggggggffffff", + ".....hhgggggggggggffffff", + ".....hhhhhhhhhhhhhhhhhhh", + ] }, + "neck": { x: 28, y: 38, rows: [ + "ppppppoo", + "qqqqqqoo", + "ppppppoo", + "zJqqqqoo", + "ppppppoo", + "qqqqqqoo", + "ppppppoo", + "qqqqqqoo", + "ppppppoo", + ] }, + "skirt": { x: 8, y: 70, rows: [ + ".........cccccbbbbbb..........cccbbbbbba..........", + ".........cccccbbbbbb..........cccbbbbbba..........", + "........ccccccbbbbbb..........cccbbbbbbba.........", + "........zcccccbbbbbb..........cccbbbbbbba.........", + "........zcccccbbbbbb..........cccbbbbbbba.........", + "........zccccbbbbbbb...........cccbbbbbbaa........", + ".......zKccccbbbbbbb...........cccbbbbbbba........", + ".......zKccccbbbbbbb...........cccbbbbbbba........", + ".......zKdcccbbbbbbb...........cccbbbbbbbaa.......", + ".......zKdcccbbbbbbb...........cccbbbbbbbaa.......", + "......zKcdcccbbbbbbb...........cccbbbbbcbaaa......", + "......zKdccccbbbbbbb...........cccbbbbbcbbaa......", + "......zKdccccbbbbbbb...........cccbbbbbcbbaa......", + ".....zKcdccccbbbbbbb...........cccbbbbbcbbaaa.....", + ".....zKcdccccbbbbbbb............ccbbbbbbcbaaa.....", + ".....zKcdcccbbbbbbbb............cccbbbbbcbbaa.....", + ".....zKcdcccbbbbbbbb............cccbbbbbcbbaaa....", + "....zKcdccccbbbbbbbb............cccbbbbbcbbaaa....", + "....zKcdccccbbbbbbbb............cccbbbbbcbbaaa....", + "....zKcdccccbbbbbbb.............cccbbbbbcbbbaaa...", + "...zKccdccccbbbbbbb..............ccbbbbbbcbbaaa...", + "...zKccdccccbbbbbbb..............ccbbbbbbcbbaaa...", + "...zKcdcccccbbbbbbb..............ccbbbbbbcbbaaa...", + "...zKcdcccccbbbbbb................cbbbbbbcbbaaaa..", + "..zKccdcccccbbbbbb................cbbbbbbcbbbaaa..", + "..zKccdcccccbbbbbb................ccbbbbbcbbbaaa..", + "..zKccdccccbbbbbbb................ccbbbbbbcbbaaaa.", + ".zKcccdccccbbbbbbb.................cbbbbbbcbbaaaa.", + ".zKccdcccccbbbbbb..................cbbbbbbcbbbaaa.", + ".zKccdcccccbbbbbb..................cbbbbbbcbbbaaaa", + ".zKccdcccccbddddd...................bbbbbbbccccccc", + "zKccdddddddd........................ccccccc.......", + "zKdd..............................................", + ] }, + "torso": { x: 18, y: 47, rows: [ + "ccccccbbpppoooooonnnnbbbaaaaa", + "ccccccbdpppoooooonnnncbbaaaaa", + "ccccccbdpppoooooonnnncbbaaaaa", + "ccccccbdpppoooooonnnncbbaaaaa", + "ccccccbdpppoooooonnnncbbaaaaa", + "ccccccbdpppoooooonnnncbbaaaaa", + "cccccbbdpppoooooonnnncbbaaaaa", + "cccccbbdpppoooooonnnncbbaaaaa", + "cccccbbdpppoooooonnnncbbaaaaa", + "cccccbbdpppoooooonnnncbbaaaaa", + "cccccbbdpppoooooonnnncbbaaaaa", + "cccccbbdpppoooooonnnncbbaaaaa", + "cccccbbdppooooooonnnncbbaaaac", + "ccccccccccccccccccccccccccccc", + "cccccbdpppoooocooonnnnccBaaaa", + "cccccbdppppppppppppppncCBBaaa", + ".zKccbdpppoooooooonnnnCCBBBa.", + ".zKccbdpppoooooooonnnncCCBaa.", + ".ccccbdpppoooooooonnnncDaCaa.", + ".cccbbdbpppppppppppppbcbaaaa.", + ".cccbbdbppoooooooonnnbcbaaaa.", + ".cccbbdbppoooooooonnnbcbaaaa.", + "..ccbbdbppoooooooonnnbcbaaa..", + "..ccbbdbppoooooooonnnbcbaaa.g", + ".hhhhhgggggCCCCBggggggggggggg", + ".hhhhhgggggCgggCggggggggggggg", + ".hhhhhgggggCgggCggggggggggggg", + ".hhhhhgggggCgggCggggggggggggg", + ".hhhhhgggggDCCCChhhhhhhhhhhhh", + ".hhhhhhhhhhhhhh..............", + ] }, +}; + +const ORDER = ["base", "coatback", "legfar", "legnear", "skirt", "torso", "arml", "armr", "cape", "neck", "head", "hat", "gun"]; +const GROUP = {"arml": 1, "armr": 1, "base": 0, "cape": 1, "coatback": 0, "eyeshalf": 2, "eyesshut": 2, "glint": 2, "gun": 1, "hat": 2, "head": 2, "legfar": 0, "legnear": 0, "neck": 1, "skirt": 3, "torso": 1}; +const PAL = { a: 0xe2cea6, b: 0xb49c7c, c: 0x8c6c80, d: 0x5e4a6e, f: 0x8c7caa, g: 0x5c4c82, h: 0x3c3062, n: 0xdce6f0, o: 0xb2c2d6, p: 0x7a88aa, q: 0x4e5484, B: 0xffe08a, C: 0xe0a848, D: 0xa8604a, t: 0xb4fff0, u: 0x3edcc6, v: 0x1a979e, z: 0xb49cff, K: 0x8a6ab0, J: 0x6a64b8, w: 0xfffaf0, S: 0x3a3a5e, T: 0x2e2c52, U: 0x25234a, L: 0xffe08a }; +const EDITIONS = [ + { }, + { a: 0x9096bc, b: 0x646a98, c: 0x444878, d: 0x2e2e5e, f: 0xc86a7e, g: 0x963a5e, h: 0x5e2648 }, + { a: 0xf6ead0, b: 0xdcc8a2, c: 0xb08e98, d: 0x7a5e80, n: 0xffe6a0, o: 0xe6b652, p: 0xb0784a, q: 0x7a4262, f: 0x7c9cb4, g: 0x4c6c92, h: 0x324c74 }, + { a: 0xcacad2, b: 0x9c9cac, c: 0x70708a, d: 0x4e4e6c, f: 0x8c8ca2, g: 0x646480, h: 0x464660, B: 0xc8c8d0, C: 0x9c9cac, D: 0x70708a }, +]; +const STANDS = [ + { S: 0xb08068, T: 0x7c5060, U: 0x5a3e58, L: 0xd8a07c }, + { S: 0xda8c76, T: 0xa65a64, U: 0x784258, L: 0xf4b49a }, + { }, + { S: 0x4a5a8e, T: 0x6ea4e8, U: 0x2c2c5a, L: 0xd2f4ff }, +]; +const GELS = [ + { }, + { z: 0x8ed8ff, K: 0x7a96b4, J: 0x5a88ba, c: 0x6e7a96, d: 0x4e5c7e, q: 0x42668e, h: 0x2e4668 }, + { z: 0x8cf0a0, K: 0x86a07c, J: 0x5a9c8c, c: 0x6e8272, d: 0x4c6662, q: 0x3c6c70, h: 0x2c4c50 }, + { z: 0x6e8cff, K: 0x6a6caa, J: 0x4e5eb2, c: 0x64669c, d: 0x3e4a88, q: 0x384c98, h: 0x282e74 }, +]; +// The case light lifts the glossy materials above the legs one step: nickel and brass. +const UP = { o: "n", p: "o", q: "p", C: "B", D: "C" }; +const SWEEPABLE = { torso: 1, arml: 0, armr: 1, gun: 1, head: 1, neck: 1 }; + +const { floor, min, max } = Math; + +// One loop of 27.2 s (eight breaths). Nothing blinks, sweeps or glints +// between 1.5 and 2.5 s, where the still is taken. +const CYCLE = 27.2; +const BREATH = 3.4; +const BLINKS = [3.1, 6.6, 9.2, 13.4, 16.1, 20.5, 23.2]; +const SWEEPS = [4.4, 12.6, 21.0]; +const GLINTS = [7.4, 11.6, 18.0, 25.1]; +const SWEEP_LEN = 3.0; +const GLINT_LEN = 0.2; +const BLINK_LEN = 0.34; + +function since(list, t, len) { + const u = t % CYCLE; + for (let i = 0; i < list.length; i++) { + const d = u - list[i]; + if (d >= 0 && d < len) return d; + } + return -1; +} + +function lut(ed, stand, gel) { + const t = new Int32Array(128).fill(-1); + const put = (m) => { for (const k in m) t[k.charCodeAt(0)] = m[k]; }; + put(PAL); + put(EDITIONS[ed]); + put(STANDS[stand]); + put(GELS[gel]); + return t; +} + +function blit(buf, part, dx, dy, band, lowFrom, lowDx) { + const rows = part.rows; + for (let j = 0; j < rows.length; j++) { + const y0 = part.y + j; + const y = y0 + dy; + if (y < 0 || y >= H) continue; + const r = rows[j]; + const sx = y0 >= lowFrom ? dx + lowDx : dx; + for (let i = 0; i < r.length; i++) { + const ch = r.charCodeAt(i); + if (ch === 46) continue; + const x = part.x + i + sx; + if (x < 0 || x >= W) continue; + let c = ch; + if (band > -99) { + const s = x + y0 * 0.5 - band; + if (s >= 0 && s < 5) { + const up = UP[r[i]]; + if (up) c = up.charCodeAt(0); + } + } + buf[y * W + x] = c; + } + } +} + +export function setup(params) { + params.t = 0; + params.buf = new Uint8Array(W * H); + params.key = -1; + params.sweepAt = -10; + params.glintAt = -10; + params.ed = 0; + params.stand = 2; + params.detail = false; + params.gel = 0; +} + +export function update(dt, input, params) { + if (!params.buf) setup(params); + const k = input.knobValues || [0, 2, 0, 0.06]; + params.t += min(dt || 0, 0.1); + params.ed = min(3, max(0, floor(k[0] * 4))); + params.stand = min(3, max(0, floor(k[1]))); + params.detail = k[2] >= 0.5; + params.gel = min(3, max(0, floor(k[3] * 4))); + const b = input.btnPressed; + if (b && b[0]) params.sweepAt = params.t; + if (b && b[1]) params.glintAt = params.t; +} + +export function draw(display, params) { + const p = params; + if (!p.buf) setup(p); + const t = p.t; + const key = p.ed * 16 + p.stand * 4 + p.gel; + if (key !== p.key) { + p.key = key; + p.lut = lut(p.ed, p.stand, p.gel); + } + const buf = p.buf; + buf.fill(0); + + // The breath lifts the chest, arms and revolver a pixel and holds it; the + // head follows a quarter second later and the coat tails swing a pixel + // after that. Legs and stand stay put. While the case light passes he holds + // where he is, so the band never meets a part mid-step. + let sw = since(SWEEPS, t, SWEEP_LEN); + if (t - p.sweepAt < SWEEP_LEN) sw = t - p.sweepAt; + const band = sw >= 0 ? -10 + (sw / SWEEP_LEN) * (W + H * 0.5 + 20) : -100; + const tb = sw >= 0 ? t - sw : t; + const u = (((tb - 0.4) % BREATH) + BREATH) % BREATH; + const up1 = u >= 0.9 && u < 2.3 ? -1 : 0; + const up2 = u >= 1.15 && u < 2.55 ? -1 : 0; + const swing = u >= 1.35 && u < 2.75 ? 1 : 0; + const dy = [0, up1, up2, 0]; + + for (let n = 0; n < ORDER.length; n++) { + const name = ORDER[n]; + const g = GROUP[name]; + const bd = SWEEPABLE[name] ? band : -100; + if (name === "skirt") blit(buf, PARTS[name], 0, 0, -100, 94, swing); + else blit(buf, PARTS[name], 0, dy[g], bd, 999, 0); + } + + // Eyes: the shutters drop through a half-closed step and back. + const db = since(BLINKS, t, BLINK_LEN); + if (db >= 0) blit(buf, db < 0.1 || db >= 0.24 ? PARTS.eyeshalf : PARTS.eyesshut, 0, dy[2], -100, 999, 0); + + let dg = since(GLINTS, t, GLINT_LEN); + if (t - p.glintAt < GLINT_LEN) dg = t - p.glintAt; + if (dg >= 0) blit(buf, PARTS.glint, 0, dy[1], -100, 999, 0); + + const L = p.lut; + // Detail cut: the box x 22-53, y 2-65 at exactly twice the size. + for (let y = 0; y < H; y++) { + for (let x = 0; x < W; x++) { + const ch = p.detail ? buf[((y >> 1) + 2) * W + (x >> 1) + 22] : buf[y * W + x]; + if (!ch) { + display.setPixel(x, y, 0, 0, 0); + continue; + } + const c = L[ch]; + if (c < 0) display.setPixel(x, y, 255, 0, 255); + else display.setPixel(x, y, (c >> 16) & 255, (c >> 8) & 255, c & 255); + } + } +} From e597f54afa426b0ccc0de3917c8163783ca3c5f1 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 1 Nov 2026 21:11:46 +0000 Subject: [PATCH 03/12] =?UTF-8?q?Rowel=20=ED=8C=A8=EC=8A=A4=201=20?= =?UTF-8?q?=ED=9B=84=EB=B3=B4:=20=EB=B0=9B=EC=B9=A8=20=EC=98=86=EB=9D=A0?= =?UTF-8?q?=EC=99=80=20=EC=A0=91=EC=A7=80=20=EA=B7=B8=EB=A6=BC=EC=9E=90?= =?UTF-8?q?=EB=A5=BC=20=ED=95=9C=20=EB=8B=A8=EC=94=A9=20=EA=B0=80=EB=A5=B8?= =?UTF-8?q?=EB=8B=A4=20(A/B=20=EC=A0=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018svN6WCTXGiFMzoDBTf192 --- incoming/pattern-study/craft/rowel/log.md | 7 +++++++ incoming/pattern-study/patterns/rowel.js | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/incoming/pattern-study/craft/rowel/log.md b/incoming/pattern-study/craft/rowel/log.md index 1555b80f..e8f8d1a5 100644 --- a/incoming/pattern-study/craft/rowel/log.md +++ b/incoming/pattern-study/craft/rowel/log.md @@ -6,3 +6,10 @@ - 리그 동점 가리기: 안 1 과 안 2 가 둘끼리 정순·역순으로 엇갈림. 새 판정 둘에게 같은 짝을 다시 물으니 둘 다 안 1 - 안 1~4: 모자챙에 손가락을 얹고 권총 손잡이에 손, 총을 다리 옆으로 내려 들고 챙을 당김, 팔짱 끼고 발목을 꼬아 기댐, 리볼버를 총구가 하늘로 가게 모자 옆에 세워 듦 - 선 판: 24색 · 피규어 y2~126 · 캐릭터 모자 꼭대기 y5~발바닥 y118 114줄 · 머리 36줄(3.2등신) · 가장 넓은 줄 55열 · 비대칭 20.8% · 노브 K1 0.11 · K2 0.02 · K3 0.36 · K4 0.02 · 한 프레임 깜빡임 0 +- 비평 1: 장인 7 · 캐릭터 8 · 사진가 8 · 관객 9 · 블라인드 읽기 2/3(성격을 「차분하고 당당한」으로 읽음, 매서움 놓침) · 닮은꼴 챙 모자에 더스터를 입은 현상금 사냥꾼 「조금」, 금속 팔 서부 총잡이 「조금」, 장난감 카우보이 인형 「조금」 + +### 패스 1 +- 확인 차례: ① 하체가 대칭 A자, 무게 안 실림(캐릭터) 아니오 · ① 표정이 매섭지 않음(블라인드 읽기) 아니오 · ② 두 다리가 흰 단, 양쪽에서 빛(장인) 아니오 · ② 허리 짚은 팔 윗면이 키만큼 밝음(장인, 사진가) 아니오 · ③ 남색 두 칸을 눈으로 못 가름(장인) 예 +- 고칠 것: ③ 팔레트 · 받침 옆띠(T)와 접지 그림자(U)가 ΔL* 4로 한 색 · (20,124) (26,118) +- 짚은 렌즈: 장인 7점 · 「남색 줄 맨 앞 두 칸은 눈으로 거의 못 갈라요」 +- 기대: pair-zoom 과 pair-led 받침에서 윗면, 옆띠, 발밑 그림자가 세 단으로 갈리고 그림자가 덩어리로 보임 diff --git a/incoming/pattern-study/patterns/rowel.js b/incoming/pattern-study/patterns/rowel.js index f623823d..dbed6007 100644 --- a/incoming/pattern-study/patterns/rowel.js +++ b/incoming/pattern-study/patterns/rowel.js @@ -423,7 +423,7 @@ const PARTS = { const ORDER = ["base", "coatback", "legfar", "legnear", "skirt", "torso", "arml", "armr", "cape", "neck", "head", "hat", "gun"]; const GROUP = {"arml": 1, "armr": 1, "base": 0, "cape": 1, "coatback": 0, "eyeshalf": 2, "eyesshut": 2, "glint": 2, "gun": 1, "hat": 2, "head": 2, "legfar": 0, "legnear": 0, "neck": 1, "skirt": 3, "torso": 1}; -const PAL = { a: 0xe2cea6, b: 0xb49c7c, c: 0x8c6c80, d: 0x5e4a6e, f: 0x8c7caa, g: 0x5c4c82, h: 0x3c3062, n: 0xdce6f0, o: 0xb2c2d6, p: 0x7a88aa, q: 0x4e5484, B: 0xffe08a, C: 0xe0a848, D: 0xa8604a, t: 0xb4fff0, u: 0x3edcc6, v: 0x1a979e, z: 0xb49cff, K: 0x8a6ab0, J: 0x6a64b8, w: 0xfffaf0, S: 0x3a3a5e, T: 0x2e2c52, U: 0x25234a, L: 0xffe08a }; +const PAL = { a: 0xe2cea6, b: 0xb49c7c, c: 0x8c6c80, d: 0x5e4a6e, f: 0x8c7caa, g: 0x5c4c82, h: 0x3c3062, n: 0xdce6f0, o: 0xb2c2d6, p: 0x7a88aa, q: 0x4e5484, B: 0xffe08a, C: 0xe0a848, D: 0xa8604a, t: 0xb4fff0, u: 0x3edcc6, v: 0x1a979e, z: 0xb49cff, K: 0x8a6ab0, J: 0x6a64b8, w: 0xfffaf0, S: 0x5a5a88, T: 0x42406c, U: 0x201e50, L: 0xffe08a }; const EDITIONS = [ { }, { a: 0x9096bc, b: 0x646a98, c: 0x444878, d: 0x2e2e5e, f: 0xc86a7e, g: 0x963a5e, h: 0x5e2648 }, From 5a2b1ae5f1f3aa35181245ba52d1086cc092dcdd Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 1 Nov 2026 21:12:49 +0000 Subject: [PATCH 04/12] =?UTF-8?q?Rowel=20=ED=8C=A8=EC=8A=A4=201=20?= =?UTF-8?q?=EB=90=98=EB=8F=8C=EB=A6=BC:=20=EB=B0=9B=EC=B9=A8=20=EC=83=89?= =?UTF-8?q?=20=EA=B0=80=EB=A5=B4=EA=B8=B0=EB=8A=94=20A/B=20=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EA=B0=99=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018svN6WCTXGiFMzoDBTf192 --- incoming/pattern-study/craft/rowel/log.md | 6 +++++- incoming/pattern-study/patterns/rowel.js | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/incoming/pattern-study/craft/rowel/log.md b/incoming/pattern-study/craft/rowel/log.md index e8f8d1a5..4e256736 100644 --- a/incoming/pattern-study/craft/rowel/log.md +++ b/incoming/pattern-study/craft/rowel/log.md @@ -8,8 +8,12 @@ - 선 판: 24색 · 피규어 y2~126 · 캐릭터 모자 꼭대기 y5~발바닥 y118 114줄 · 머리 36줄(3.2등신) · 가장 넓은 줄 55열 · 비대칭 20.8% · 노브 K1 0.11 · K2 0.02 · K3 0.36 · K4 0.02 · 한 프레임 깜빡임 0 - 비평 1: 장인 7 · 캐릭터 8 · 사진가 8 · 관객 9 · 블라인드 읽기 2/3(성격을 「차분하고 당당한」으로 읽음, 매서움 놓침) · 닮은꼴 챙 모자에 더스터를 입은 현상금 사냥꾼 「조금」, 금속 팔 서부 총잡이 「조금」, 장난감 카우보이 인형 「조금」 -### 패스 1 +### 패스 1 · 되돌림 - 확인 차례: ① 하체가 대칭 A자, 무게 안 실림(캐릭터) 아니오 · ① 표정이 매섭지 않음(블라인드 읽기) 아니오 · ② 두 다리가 흰 단, 양쪽에서 빛(장인) 아니오 · ② 허리 짚은 팔 윗면이 키만큼 밝음(장인, 사진가) 아니오 · ③ 남색 두 칸을 눈으로 못 가름(장인) 예 - 고칠 것: ③ 팔레트 · 받침 옆띠(T)와 접지 그림자(U)가 ΔL* 4로 한 색 · (20,124) (26,118) - 짚은 렌즈: 장인 7점 · 「남색 줄 맨 앞 두 칸은 눈으로 거의 못 갈라요」 - 기대: pair-zoom 과 pair-led 받침에서 윗면, 옆띠, 발밑 그림자가 세 단으로 갈리고 그림자가 덩어리로 보임 +- 바뀐 LED: 정지 396 · 10초 396 · 노브 396 · 팔레트 24→24색 +- A/B: 장인 끝까지 안 받음 · 캐릭터 정순 같음 · 사진가 역순 같음 · 관객 같음(정순·역순) +- 버린 판정: 없음 +- ③층 고침은 「새」 렌즈가 둘 이상이어야 하는데 캐릭터·사진가·관객이 「새」가 될 수 없어 되돌림 diff --git a/incoming/pattern-study/patterns/rowel.js b/incoming/pattern-study/patterns/rowel.js index dbed6007..f623823d 100644 --- a/incoming/pattern-study/patterns/rowel.js +++ b/incoming/pattern-study/patterns/rowel.js @@ -423,7 +423,7 @@ const PARTS = { const ORDER = ["base", "coatback", "legfar", "legnear", "skirt", "torso", "arml", "armr", "cape", "neck", "head", "hat", "gun"]; const GROUP = {"arml": 1, "armr": 1, "base": 0, "cape": 1, "coatback": 0, "eyeshalf": 2, "eyesshut": 2, "glint": 2, "gun": 1, "hat": 2, "head": 2, "legfar": 0, "legnear": 0, "neck": 1, "skirt": 3, "torso": 1}; -const PAL = { a: 0xe2cea6, b: 0xb49c7c, c: 0x8c6c80, d: 0x5e4a6e, f: 0x8c7caa, g: 0x5c4c82, h: 0x3c3062, n: 0xdce6f0, o: 0xb2c2d6, p: 0x7a88aa, q: 0x4e5484, B: 0xffe08a, C: 0xe0a848, D: 0xa8604a, t: 0xb4fff0, u: 0x3edcc6, v: 0x1a979e, z: 0xb49cff, K: 0x8a6ab0, J: 0x6a64b8, w: 0xfffaf0, S: 0x5a5a88, T: 0x42406c, U: 0x201e50, L: 0xffe08a }; +const PAL = { a: 0xe2cea6, b: 0xb49c7c, c: 0x8c6c80, d: 0x5e4a6e, f: 0x8c7caa, g: 0x5c4c82, h: 0x3c3062, n: 0xdce6f0, o: 0xb2c2d6, p: 0x7a88aa, q: 0x4e5484, B: 0xffe08a, C: 0xe0a848, D: 0xa8604a, t: 0xb4fff0, u: 0x3edcc6, v: 0x1a979e, z: 0xb49cff, K: 0x8a6ab0, J: 0x6a64b8, w: 0xfffaf0, S: 0x3a3a5e, T: 0x2e2c52, U: 0x25234a, L: 0xffe08a }; const EDITIONS = [ { }, { a: 0x9096bc, b: 0x646a98, c: 0x444878, d: 0x2e2e5e, f: 0xc86a7e, g: 0x963a5e, h: 0x5e2648 }, From d477b7a51244dbdd6801e2552e8aeb916a2f9d0d Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 1 Nov 2026 21:17:55 +0000 Subject: [PATCH 05/12] =?UTF-8?q?Rowel=20=ED=8C=A8=EC=8A=A4=202=20?= =?UTF-8?q?=ED=9B=84=EB=B3=B4:=20=EB=B0=9B=EC=B9=A8=20=EB=85=B8=EB=B8=8C?= =?UTF-8?q?=EA=B0=80=20=EC=9E=A5=ED=99=94=20=EB=B0=91=EC=97=90=20=EB=B0=9B?= =?UTF-8?q?=EC=B9=A8=20=EB=B9=9B=EC=9D=84=20=EB=B9=84=EC=B6=94=EA=B3=A0=20?= =?UTF-8?q?=EB=84=A4=20=EB=B0=9B=EC=B9=A8=EC=9D=84=20=EA=B3=A0=EB=A5=B4?= =?UTF-8?q?=EA=B2=8C=20=ED=8E=B8=EB=8B=A4=20(A/B=20=EC=A0=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018svN6WCTXGiFMzoDBTf192 --- incoming/pattern-study/craft/rowel/log.md | 11 +++++++-- incoming/pattern-study/patterns/rowel.js | 27 ++++++++++++++--------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/incoming/pattern-study/craft/rowel/log.md b/incoming/pattern-study/craft/rowel/log.md index 4e256736..b9155b93 100644 --- a/incoming/pattern-study/craft/rowel/log.md +++ b/incoming/pattern-study/craft/rowel/log.md @@ -14,6 +14,13 @@ - 짚은 렌즈: 장인 7점 · 「남색 줄 맨 앞 두 칸은 눈으로 거의 못 갈라요」 - 기대: pair-zoom 과 pair-led 받침에서 윗면, 옆띠, 발밑 그림자가 세 단으로 갈리고 그림자가 덩어리로 보임 - 바뀐 LED: 정지 396 · 10초 396 · 노브 396 · 팔레트 24→24색 -- A/B: 장인 끝까지 안 받음 · 캐릭터 정순 같음 · 사진가 역순 같음 · 관객 같음(정순·역순) +- A/B: 장인 새 · 캐릭터 같음(정순 같음, 역순 옛 「부츠 사이와 받침 끝에 짙은 얼룩」) · 사진가 같음(정순 새, 역순 같음) · 관객 같음 - 버린 판정: 없음 -- ③층 고침은 「새」 렌즈가 둘 이상이어야 하는데 캐릭터·사진가·관객이 「새」가 될 수 없어 되돌림 +- ③층 고침은 「새」 렌즈가 둘 이상이어야 하는데 장인 말고는 「새」가 없어 되돌림 + +### 패스 2 +- 확인 차례: ④ 머리 옆 주황, 손 옆 청록이 떠 있는 잡티(장인, 캐릭터, 사진가, 관객) 아니오 · ④ 모자 띠 크림색 고아(장인) 아니오 · ⑦ K2 가 받침만 바꾸고 0 과 1/4 이 같음(관객) 예 +- 고칠 것: ⑦ 노브 · K2 가 받침 원판만 바꾸고 캐릭터는 그대로, 0 과 1/4 이 같은 그림 · (5,114)~(59,126) +- 짚은 렌즈: 관객 9점 · 「발밑 원판만 구리색에서 하늘색으로 바뀌어요」 +- 기대: pair-knobs 의 K2 양 끝에서 받침 색이 장화 밑창과 앞코 아래에 비쳐 받침과 캐릭터가 함께 바뀜. 가운데 자리(검은 아크릴)는 그대로 +- 바뀐 LED: 정지 0 · 10초 0 · 노브 546 · 팔레트 24→24색(기본 받침에서) diff --git a/incoming/pattern-study/patterns/rowel.js b/incoming/pattern-study/patterns/rowel.js index f623823d..9d59e417 100644 --- a/incoming/pattern-study/patterns/rowel.js +++ b/incoming/pattern-study/patterns/rowel.js @@ -12,7 +12,7 @@ // @knobs Edition=0..1, Stand=0..3, Detail=0..1, Gel=0..1 // // Knob 1: Edition. The paint: sand duster and indigo felt below 0.25, the second-player charcoal and oxblood from 0.25, a gold and ivory limited plating from 0.5, and from 0.75 the unpainted grey prototype. -// Knob 2: Stand. What he stands on: a railroad tie at 0, red sandstone from 1, black acrylic with a gold lip from 2, and from 3 acrylic lit at the edge. +// Knob 2: Stand. What he stands on, and the light it throws back up onto the bottom of his boots: a railroad tie below 0.75, red sandstone from 0.75, black acrylic with a gold lip from 1.5 (which throws none), and from 2.25 acrylic lit at the edge. // Knob 3: Detail. Below 0.5 the whole figure; from 0.5 his head, chest and raised revolver at exactly twice the size. // Knob 4: Gel. The rim light down his left edges, the bounce beside it and the shaded side of the coat and the deepest shade of each material, as if the sky on his dark side changed: evening violet at 0, dawn blue from 0.25, cactus green from 0.5, night blue from 0.75. // Buttons: K1 tap sends the case light along him; K2 tap makes the muzzle glint. @@ -22,7 +22,7 @@ const W = 64, H = 128; // in order. Materials run light to dark: canvas a b c d, felt and leather // f g h, nickel n o p q, brass B C D. t u v are the turquoise of the eyes and // the grip, z the rim light, K and J the bounce beside it on canvas and on -// metal or felt, w the specular. S T U L are the stand, its shadow and its lip. +// metal or felt, w the specular. S T U L are the stand, its shadow and its lip, Y and X the bottom of the boots, which catches the stand's light. const PARTS = { "arml": { x: 42, y: 34, rows: [ ".........cccb.....", @@ -290,9 +290,9 @@ const PARTS = { "...zhhgggggggggfff.B.", "..zhhhgggggggggfffC.C", "hhhhhhggggggggggff.D.", - "hhhhhhggggggggggff...", - "hhhhhhggggggggggff...", - "hhhhhhhhhhhhhhhhhh...", + "YYYYYYXXXXXXXXXXff...", + "YYYYYYXXXXXXXXXXff...", + "YYYYYYYYYYYYYYYYYY...", ] }, "legnear": { x: 33, y: 74, rows: [ "...pooo.................", @@ -337,9 +337,9 @@ const PARTS = { "....Chhggggggggggffff...", "...D.hhgggggggggggffff..", ".....hhgggggggggggfffff.", - ".....hhgggggggggggffffff", - ".....hhgggggggggggffffff", - ".....hhhhhhhhhhhhhhhhhhh", + ".....YYXXXXXXXXXXXffffff", + ".....YYXXXXXXXXXXXffffff", + ".....YYYYYYYYYYYYYYYYYYY", ] }, "neck": { x: 28, y: 38, rows: [ "ppppppoo", @@ -423,7 +423,7 @@ const PARTS = { const ORDER = ["base", "coatback", "legfar", "legnear", "skirt", "torso", "arml", "armr", "cape", "neck", "head", "hat", "gun"]; const GROUP = {"arml": 1, "armr": 1, "base": 0, "cape": 1, "coatback": 0, "eyeshalf": 2, "eyesshut": 2, "glint": 2, "gun": 1, "hat": 2, "head": 2, "legfar": 0, "legnear": 0, "neck": 1, "skirt": 3, "torso": 1}; -const PAL = { a: 0xe2cea6, b: 0xb49c7c, c: 0x8c6c80, d: 0x5e4a6e, f: 0x8c7caa, g: 0x5c4c82, h: 0x3c3062, n: 0xdce6f0, o: 0xb2c2d6, p: 0x7a88aa, q: 0x4e5484, B: 0xffe08a, C: 0xe0a848, D: 0xa8604a, t: 0xb4fff0, u: 0x3edcc6, v: 0x1a979e, z: 0xb49cff, K: 0x8a6ab0, J: 0x6a64b8, w: 0xfffaf0, S: 0x3a3a5e, T: 0x2e2c52, U: 0x25234a, L: 0xffe08a }; +const PAL = { a: 0xe2cea6, b: 0xb49c7c, c: 0x8c6c80, d: 0x5e4a6e, f: 0x8c7caa, g: 0x5c4c82, h: 0x3c3062, n: 0xdce6f0, o: 0xb2c2d6, p: 0x7a88aa, q: 0x4e5484, B: 0xffe08a, C: 0xe0a848, D: 0xa8604a, t: 0xb4fff0, u: 0x3edcc6, v: 0x1a979e, z: 0xb49cff, K: 0x8a6ab0, J: 0x6a64b8, w: 0xfffaf0, S: 0x3a3a5e, T: 0x2e2c52, U: 0x25234a, L: 0xffe08a, Y: 0x3c3062, X: 0x5c4c82 }; const EDITIONS = [ { }, { a: 0x9096bc, b: 0x646a98, c: 0x444878, d: 0x2e2e5e, f: 0xc86a7e, g: 0x963a5e, h: 0x5e2648 }, @@ -436,6 +436,9 @@ const STANDS = [ { }, { S: 0x4a5a8e, T: 0x6ea4e8, U: 0x2c2c5a, L: 0xd2f4ff }, ]; +// The light each stand throws back up onto his soles; the black acrylic throws none. +const SOLES = [0x8c5c5a, 0xb06e6e, -1, 0x5c9ae6]; +const BOOTS = [0xa0727a, 0xc08088, -1, 0x7cb0f0]; const GELS = [ { }, { z: 0x8ed8ff, K: 0x7a96b4, J: 0x5a88ba, c: 0x6e7a96, d: 0x4e5c7e, q: 0x42668e, h: 0x2e4668 }, @@ -475,6 +478,10 @@ function lut(ed, stand, gel) { put(EDITIONS[ed]); put(STANDS[stand]); put(GELS[gel]); + // The boots' lowest rows carry the stand's light, Y where the leather is + // darkest and X on its middle shade; the black acrylic throws none. + t[89] = SOLES[stand] >= 0 ? SOLES[stand] : t[104]; + t[88] = BOOTS[stand] >= 0 ? BOOTS[stand] : t[103]; return t; } @@ -521,7 +528,7 @@ export function update(dt, input, params) { const k = input.knobValues || [0, 2, 0, 0.06]; params.t += min(dt || 0, 0.1); params.ed = min(3, max(0, floor(k[0] * 4))); - params.stand = min(3, max(0, floor(k[1]))); + params.stand = min(3, max(0, floor(k[1] * 4 / 3))); params.detail = k[2] >= 0.5; params.gel = min(3, max(0, floor(k[3] * 4))); const b = input.btnPressed; From 5a97e0baef12f1a9162cc1c45d871a682acf3811 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 1 Nov 2026 21:20:16 +0000 Subject: [PATCH 06/12] =?UTF-8?q?Rowel=20=ED=8C=A8=EC=8A=A4=202=20?= =?UTF-8?q?=EB=90=98=EB=8F=8C=EB=A6=BC:=20=EC=9E=A5=ED=99=94=20=EB=B0=91?= =?UTF-8?q?=20=EB=B0=9B=EC=B9=A8=20=EB=B9=9B=EC=9D=80=20=EC=BA=90=EB=A6=AD?= =?UTF-8?q?=ED=84=B0=20=ED=8C=90=EC=A0=95=EC=9D=B4=20=EC=98=9B=20=ED=8C=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018svN6WCTXGiFMzoDBTf192 --- incoming/pattern-study/craft/rowel/log.md | 5 ++++- incoming/pattern-study/patterns/rowel.js | 27 +++++++++-------------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/incoming/pattern-study/craft/rowel/log.md b/incoming/pattern-study/craft/rowel/log.md index b9155b93..682a9032 100644 --- a/incoming/pattern-study/craft/rowel/log.md +++ b/incoming/pattern-study/craft/rowel/log.md @@ -18,9 +18,12 @@ - 버린 판정: 없음 - ③층 고침은 「새」 렌즈가 둘 이상이어야 하는데 장인 말고는 「새」가 없어 되돌림 -### 패스 2 +### 패스 2 · 되돌림 - 확인 차례: ④ 머리 옆 주황, 손 옆 청록이 떠 있는 잡티(장인, 캐릭터, 사진가, 관객) 아니오 · ④ 모자 띠 크림색 고아(장인) 아니오 · ⑦ K2 가 받침만 바꾸고 0 과 1/4 이 같음(관객) 예 - 고칠 것: ⑦ 노브 · K2 가 받침 원판만 바꾸고 캐릭터는 그대로, 0 과 1/4 이 같은 그림 · (5,114)~(59,126) - 짚은 렌즈: 관객 9점 · 「발밑 원판만 구리색에서 하늘색으로 바뀌어요」 - 기대: pair-knobs 의 K2 양 끝에서 받침 색이 장화 밑창과 앞코 아래에 비쳐 받침과 캐릭터가 함께 바뀜. 가운데 자리(검은 아크릴)는 그대로 - 바뀐 LED: 정지 0 · 10초 0 · 노브 546 · 팔레트 24→24색(기본 받침에서) +- A/B: 장인 끝까지 안 받음 · 캐릭터 옛(정순·역순 「장화 밑이 받침에 녹아 발목에서 잘린 듯」) · 사진가 끝까지 안 받음 · 관객 새 +- 버린 판정: 없음 +- 「옛」인 렌즈(캐릭터)가 있어 되돌림 diff --git a/incoming/pattern-study/patterns/rowel.js b/incoming/pattern-study/patterns/rowel.js index 9d59e417..f623823d 100644 --- a/incoming/pattern-study/patterns/rowel.js +++ b/incoming/pattern-study/patterns/rowel.js @@ -12,7 +12,7 @@ // @knobs Edition=0..1, Stand=0..3, Detail=0..1, Gel=0..1 // // Knob 1: Edition. The paint: sand duster and indigo felt below 0.25, the second-player charcoal and oxblood from 0.25, a gold and ivory limited plating from 0.5, and from 0.75 the unpainted grey prototype. -// Knob 2: Stand. What he stands on, and the light it throws back up onto the bottom of his boots: a railroad tie below 0.75, red sandstone from 0.75, black acrylic with a gold lip from 1.5 (which throws none), and from 2.25 acrylic lit at the edge. +// Knob 2: Stand. What he stands on: a railroad tie at 0, red sandstone from 1, black acrylic with a gold lip from 2, and from 3 acrylic lit at the edge. // Knob 3: Detail. Below 0.5 the whole figure; from 0.5 his head, chest and raised revolver at exactly twice the size. // Knob 4: Gel. The rim light down his left edges, the bounce beside it and the shaded side of the coat and the deepest shade of each material, as if the sky on his dark side changed: evening violet at 0, dawn blue from 0.25, cactus green from 0.5, night blue from 0.75. // Buttons: K1 tap sends the case light along him; K2 tap makes the muzzle glint. @@ -22,7 +22,7 @@ const W = 64, H = 128; // in order. Materials run light to dark: canvas a b c d, felt and leather // f g h, nickel n o p q, brass B C D. t u v are the turquoise of the eyes and // the grip, z the rim light, K and J the bounce beside it on canvas and on -// metal or felt, w the specular. S T U L are the stand, its shadow and its lip, Y and X the bottom of the boots, which catches the stand's light. +// metal or felt, w the specular. S T U L are the stand, its shadow and its lip. const PARTS = { "arml": { x: 42, y: 34, rows: [ ".........cccb.....", @@ -290,9 +290,9 @@ const PARTS = { "...zhhgggggggggfff.B.", "..zhhhgggggggggfffC.C", "hhhhhhggggggggggff.D.", - "YYYYYYXXXXXXXXXXff...", - "YYYYYYXXXXXXXXXXff...", - "YYYYYYYYYYYYYYYYYY...", + "hhhhhhggggggggggff...", + "hhhhhhggggggggggff...", + "hhhhhhhhhhhhhhhhhh...", ] }, "legnear": { x: 33, y: 74, rows: [ "...pooo.................", @@ -337,9 +337,9 @@ const PARTS = { "....Chhggggggggggffff...", "...D.hhgggggggggggffff..", ".....hhgggggggggggfffff.", - ".....YYXXXXXXXXXXXffffff", - ".....YYXXXXXXXXXXXffffff", - ".....YYYYYYYYYYYYYYYYYYY", + ".....hhgggggggggggffffff", + ".....hhgggggggggggffffff", + ".....hhhhhhhhhhhhhhhhhhh", ] }, "neck": { x: 28, y: 38, rows: [ "ppppppoo", @@ -423,7 +423,7 @@ const PARTS = { const ORDER = ["base", "coatback", "legfar", "legnear", "skirt", "torso", "arml", "armr", "cape", "neck", "head", "hat", "gun"]; const GROUP = {"arml": 1, "armr": 1, "base": 0, "cape": 1, "coatback": 0, "eyeshalf": 2, "eyesshut": 2, "glint": 2, "gun": 1, "hat": 2, "head": 2, "legfar": 0, "legnear": 0, "neck": 1, "skirt": 3, "torso": 1}; -const PAL = { a: 0xe2cea6, b: 0xb49c7c, c: 0x8c6c80, d: 0x5e4a6e, f: 0x8c7caa, g: 0x5c4c82, h: 0x3c3062, n: 0xdce6f0, o: 0xb2c2d6, p: 0x7a88aa, q: 0x4e5484, B: 0xffe08a, C: 0xe0a848, D: 0xa8604a, t: 0xb4fff0, u: 0x3edcc6, v: 0x1a979e, z: 0xb49cff, K: 0x8a6ab0, J: 0x6a64b8, w: 0xfffaf0, S: 0x3a3a5e, T: 0x2e2c52, U: 0x25234a, L: 0xffe08a, Y: 0x3c3062, X: 0x5c4c82 }; +const PAL = { a: 0xe2cea6, b: 0xb49c7c, c: 0x8c6c80, d: 0x5e4a6e, f: 0x8c7caa, g: 0x5c4c82, h: 0x3c3062, n: 0xdce6f0, o: 0xb2c2d6, p: 0x7a88aa, q: 0x4e5484, B: 0xffe08a, C: 0xe0a848, D: 0xa8604a, t: 0xb4fff0, u: 0x3edcc6, v: 0x1a979e, z: 0xb49cff, K: 0x8a6ab0, J: 0x6a64b8, w: 0xfffaf0, S: 0x3a3a5e, T: 0x2e2c52, U: 0x25234a, L: 0xffe08a }; const EDITIONS = [ { }, { a: 0x9096bc, b: 0x646a98, c: 0x444878, d: 0x2e2e5e, f: 0xc86a7e, g: 0x963a5e, h: 0x5e2648 }, @@ -436,9 +436,6 @@ const STANDS = [ { }, { S: 0x4a5a8e, T: 0x6ea4e8, U: 0x2c2c5a, L: 0xd2f4ff }, ]; -// The light each stand throws back up onto his soles; the black acrylic throws none. -const SOLES = [0x8c5c5a, 0xb06e6e, -1, 0x5c9ae6]; -const BOOTS = [0xa0727a, 0xc08088, -1, 0x7cb0f0]; const GELS = [ { }, { z: 0x8ed8ff, K: 0x7a96b4, J: 0x5a88ba, c: 0x6e7a96, d: 0x4e5c7e, q: 0x42668e, h: 0x2e4668 }, @@ -478,10 +475,6 @@ function lut(ed, stand, gel) { put(EDITIONS[ed]); put(STANDS[stand]); put(GELS[gel]); - // The boots' lowest rows carry the stand's light, Y where the leather is - // darkest and X on its middle shade; the black acrylic throws none. - t[89] = SOLES[stand] >= 0 ? SOLES[stand] : t[104]; - t[88] = BOOTS[stand] >= 0 ? BOOTS[stand] : t[103]; return t; } @@ -528,7 +521,7 @@ export function update(dt, input, params) { const k = input.knobValues || [0, 2, 0, 0.06]; params.t += min(dt || 0, 0.1); params.ed = min(3, max(0, floor(k[0] * 4))); - params.stand = min(3, max(0, floor(k[1] * 4 / 3))); + params.stand = min(3, max(0, floor(k[1]))); params.detail = k[2] >= 0.5; params.gel = min(3, max(0, floor(k[3] * 4))); const b = input.btnPressed; From 4f08ce078dbe2fb6ec480a0282c116ea00b1ac95 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 1 Nov 2026 21:20:31 +0000 Subject: [PATCH 07/12] =?UTF-8?q?Rowel=20=ED=8C=A8=EC=8A=A4=202=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D:=20A/B=20=EB=84=A4=20=EB=A0=8C=EC=A6=88=20?= =?UTF-8?q?=EB=8B=A4=20=EB=B0=9B=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018svN6WCTXGiFMzoDBTf192 --- incoming/pattern-study/craft/rowel/log.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/incoming/pattern-study/craft/rowel/log.md b/incoming/pattern-study/craft/rowel/log.md index 682a9032..d2383c07 100644 --- a/incoming/pattern-study/craft/rowel/log.md +++ b/incoming/pattern-study/craft/rowel/log.md @@ -24,6 +24,6 @@ - 짚은 렌즈: 관객 9점 · 「발밑 원판만 구리색에서 하늘색으로 바뀌어요」 - 기대: pair-knobs 의 K2 양 끝에서 받침 색이 장화 밑창과 앞코 아래에 비쳐 받침과 캐릭터가 함께 바뀜. 가운데 자리(검은 아크릴)는 그대로 - 바뀐 LED: 정지 0 · 10초 0 · 노브 546 · 팔레트 24→24색(기본 받침에서) -- A/B: 장인 끝까지 안 받음 · 캐릭터 옛(정순·역순 「장화 밑이 받침에 녹아 발목에서 잘린 듯」) · 사진가 끝까지 안 받음 · 관객 새 +- A/B: 장인 옛(「밝은 단만 보라로 남아 빛 방향이 뒤집힘」) · 캐릭터 옛(「장화 밑이 받침에 녹아 발목에서 잘린 듯」) · 사진가 옛(「발밑 어두운 접지선이 사라짐」) · 관객 새 - 버린 판정: 없음 -- 「옛」인 렌즈(캐릭터)가 있어 되돌림 +- 「옛」인 렌즈(장인, 캐릭터, 사진가)가 있어 되돌림 From 2e2ba79ff86d78b769c5d190bbaea95b7120e14b Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 1 Nov 2026 21:30:03 +0000 Subject: [PATCH 08/12] =?UTF-8?q?Rowel=20=ED=8C=A8=EC=8A=A4=203=20?= =?UTF-8?q?=ED=9B=84=EB=B3=B4:=20=EB=B2=A8=ED=8A=B8=EB=A5=BC=20=EB=AC=B4?= =?UTF-8?q?=EA=B2=8C=20=EB=8B=A4=EB=A6=AC=20=EC=AA=BD=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=98=AC=EB=A6=AC=EA=B3=A0=20=EC=96=B4=EA=B9=A8=EB=A5=BC=20?= =?UTF-8?q?=EB=B0=98=EB=8C=80=EB=A1=9C=20=EA=B8=B0=EC=9A=B8=EC=97=AC=20?= =?UTF-8?q?=EC=A7=9D=EB=8B=A4=EB=A6=AC=EB=A1=9C=20=EC=84=A0=EB=8B=A4=20(A/?= =?UTF-8?q?B=20=EC=A0=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018svN6WCTXGiFMzoDBTf192 --- incoming/pattern-study/craft/rowel/log.md | 9 + incoming/pattern-study/patterns/rowel.js | 207 +++++++++++----------- 2 files changed, 112 insertions(+), 104 deletions(-) diff --git a/incoming/pattern-study/craft/rowel/log.md b/incoming/pattern-study/craft/rowel/log.md index d2383c07..634dde2c 100644 --- a/incoming/pattern-study/craft/rowel/log.md +++ b/incoming/pattern-study/craft/rowel/log.md @@ -27,3 +27,12 @@ - A/B: 장인 옛(「밝은 단만 보라로 남아 빛 방향이 뒤집힘」) · 캐릭터 옛(「장화 밑이 받침에 녹아 발목에서 잘린 듯」) · 사진가 옛(「발밑 어두운 접지선이 사라짐」) · 관객 새 - 버린 판정: 없음 - 「옛」인 렌즈(장인, 캐릭터, 사진가)가 있어 되돌림 +- 비평 1 의 후보를 다 물어 남은 것이 없어 비평을 새로 받음 + +### 패스 3 +- 비평 2: 장인 6 · 캐릭터 7 · 사진가 7 · 관객 (받는 중) · 블라인드 읽기 2/3(성격을 「느긋하면서 당당한」으로 읽음, 매서움 놓침) · 닮은꼴 카우보이 모자 증기 로봇 광부 「조금」, 금속 팔 서부 총잡이 「조금」, 서부 테마파크 안드로이드 「조금」 +- 확인 차례: ① 눈이 고른 청록 사각형이라 감정 없음(캐릭터, 블라인드 읽기) 아니오 · ① 두 장화가 같은 높이, 벨트와 어깨 수평, 무게 안 실림(캐릭터) 예 +- 고칠 것: ① 자세 · 두 장화가 같은 높이로 딛고 벨트와 어깨선이 수평 · (25,110) (47,110) (25,72) (47,72) +- 짚은 렌즈: 캐릭터 7점 · 「골반 기울기가 없어서 무게 이동으로 안 읽혀요」 +- 기대: pair-zoom 과 pair-led 에서 벨트가 무게 다리(왼쪽) 쪽으로 2줄 올라가고 어깨 망토는 반대로 기울고, 오른발이 두 줄 앞(아래)으로 나와 짝다리로 읽힘 +- 바뀐 LED: 정지 379 · 10초 491 · 노브 634 · 팔레트 24→24색 diff --git a/incoming/pattern-study/patterns/rowel.js b/incoming/pattern-study/patterns/rowel.js index f623823d..9ac07931 100644 --- a/incoming/pattern-study/patterns/rowel.js +++ b/incoming/pattern-study/patterns/rowel.js @@ -38,32 +38,30 @@ const PARTS = { ".........zKcccaaa.", "..........zKbbaaa.", "..........zKbbaaa.", - "..........zKbbbaa.", - "..aaaa..zKccbbbaaa", - ".aaaaaaaaacccbbaaa", - "aaaaabbbbbcccbbaaa", + "..aaaa....zKbbbaa.", + ".aaaaaaaaaccbbbaaa", + "aaaaaaaabbcccbbaaa", + "aaabbbbbbbcccbbaaa", "bbbbbbbbbbcccbbbaa", - "bbbbbbbccccccbbba.", - "bbccccccccccccbb..", - ".cccccccccc.......", + "bbbbbbbbbccccbbba.", + ".bbbccccccccccbb..", "..cccc............", ] }, - "armr": { x: 8, y: 48, rows: [ - ".........cccb.....", - "........cccbbb....", - ".......cccbbbba...", + "armr": { x: 8, y: 49, rows: [ + ".........ccbb.....", + "........ccbbbb....", ".......cccbbbaa...", - ".......ccbbbbaa...", - "......zcbbbbaaa...", - ".....zccbbbaaaa...", - ".....zcbbbbaaa....", - "....zKbbbbaaaa....", - "....zKbbbaaaa.....", - "...zKbbbbaaa......", - "..zKaabbaaaa......", - ".zKaaaabaaa.......", - "zKbbaaaaaaa.......", - "zKbbbaaaaa........", + ".......ccbbbaaa...", + ".......ccbbbaaa...", + ".......cbbbaaaa...", + "......cbbbbaaa....", + "......cbbbaaa.....", + ".....zbbbaaaa.....", + "....zKbbbaaa......", + "..zKaabbaaa.......", + ".zKaaaaaaa........", + "zKbbaaaaaa........", + "zKbbbaaaa.........", "zKcbbbaaa.........", "zKccbbbaaa........", ".zKccbbbaaa.......", @@ -82,12 +80,12 @@ const PARTS = { "............ooo...", ] }, "base": { x: 5, y: 114, rows: [ - "...............SSSSSSSSSSSSSSSSSSSSSSSSS...............", - ".......SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS.......", + "...............UUUUUUUUUUSSSSSSSSSSSSSSS...............", + ".......UUUUUUUUUUUUUUUUUUSSSSSSSSSSSSSSSSSSSSSSS.......", "...SSSUUUUUUUUUUUUUUUUUUUSSSUUUUUUUUUUUUUUUUUUUUSSSS...", ".SSSSSUUUUUUUUUUUUUUUUUUUSSSUUUUUUUUUUUUUUUUUUUUSSSSSS.", - "LSSSSSUUUUUUUUUUUUUUUUUUUSSSUUUUUUUUUUUUUUUUUUUUSSSSSSL", - "TLLSSSUUUUUUUUUUUUUUUUUUUSSSUUUUUUUUUUUUUUUUUUUUSSSSLLT", + "LSSSSSSSSSSSSSSSSSSSSSSSSSSSUUUUUUUUUUUUUUUUUUUUSSSSSSL", + "TLLSSSSSSSSSSSSSSSSSSSSSSSSSUUUUUUUUUUUUUUUUUUUUSSSSLLT", "TTTLLLLSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSLLLLTTT", "TTTTTTTLLLLLLLLSSSSSSSSSSSSSSSSSSSSSSSSSLLLLLLLLTTTTTTT", "TTTTTTTTTTTTTTTLLLLLLLLLLLLLLLLLLLLLLLLLTTTTTTTTTTTTTTT", @@ -100,23 +98,23 @@ const PARTS = { "...........c.............z...........", "...........zK...........zK...........", "..........zKcc.........zKbb..........", - "..........zKccb.......bbbbb..........", - ".....zKcbccccbbbbbbbbbbbbbbbaaaa.....", - "....zKcbbccccbbbbbbbbbbbbbbbaaaaa....", - "....zKcbbbbcbbbbbbbbbbbbbaaaaaaaa....", - "...zKccbbbbcbbbbbbbbbbbbbaaaaaaaaa...", - "..zKccbbbbcbbbbbbbbbbbbbbbaaaaaaaaa..", - "..zKccbbbbcbbbbbbbbbbbbbbbaaaaaaaaa..", - ".zKcccbbbbcbbbbbbbbbbbbbbbbaaaaaaaaa.", + "..........zKccb.......bbbbb....z.....", + ".........zKccbbbbbbbbbbbbbbbaaaaa....", + ".....zKbbccccbbbbbbbbbbbbbbbaaaaa....", + "....zKcbbbbcbbbbbbbbbbbbbaaaaaaaaa...", + "....zKcbbbbcbbbbbbbbbbbbbaaaaaaaaaa..", + "...zKcbbbbcbbbbbbbbbbbbbbbaaaaaaaaa..", + "..zKccbbbbcbbbbbbbbbbbbbbbaaaaaaaaaa.", + "..zKccbbbbcbbbbbbbbbbbbbbbbaaaaaaaaa.", ".zKccbbbbbcbbbbbbbbbbbbbbbbaaaaaaaaa.", ".zKccbbbbcbbbbbbbbbbbbbbbbbbaaaaaaaa.", - ".ccccbbbbcbbbbbbbbbbbbbbbbbbaaaaaaaa.", - "ccccbbbbbcbbbbbbbbbbbbbbbbbbaaaaaaaaa", - "ccccbbbbbcbbbbbbbbbbbbbbbbbbbaaaaaaaa", - "ccccbbbbcbbbbbbbbbbbbbbbbbbbbaaaaaacc", - ".ccbbbbbcbbbbbbbbbbbbbbbbbbbbbaaacc..", - "...ccccccccbbbbbbbbbbbbbbcccccccc....", - "...........cccccccccccccc............", + ".zKccbbbbcbbbbbbbbbbbbbbbbbbaaaaaaaaa", + ".zKcbbbbbcbbbbbbbbbbbbbbbbbbaaaaaaaaa", + "zKccbbbbbcbbbbbbbbbbbbbbbbbbbaaaaaacc", + "zKccbbbbcbbbbbbbbbbbbbbbbbbbbaaaacc..", + "cccbbbbbcbbbbbbbbbbbbbbbbbbbbcccc....", + ".ccbbbbbbbbbbbbbbbbbbbccccccc........", + "...ccccccccccccccccccc...............", ] }, "coatback": { x: 19, y: 74, rows: [ "...ddddddddddddddcccccccc...", @@ -273,10 +271,8 @@ const PARTS = { "........ooooooon.....", ".......qqqqqqqqq.....", "........ooooonnn.....", - "........ooooonnn.....", - ".......oooooonn......", - ".....zhhgggggfff.....", - ".....zhhgggggfff.....", + ".....hhhgggggfff.....", + ".....hhhgggggfff.....", ".....zhhhhhhhhhh.....", ".....zhgggggggff.....", ".....zhgggggggff.....", @@ -289,38 +285,37 @@ const PARTS = { ".....zhggggggggff....", "...zhhgggggggggfff.B.", "..zhhhgggggggggfffC.C", - "hhhhhhggggggggggff.D.", - "hhhhhhggggggggggff...", + "zhhhhhggggggggggff.D.", + "zhhhhhggggggggggff...", "hhhhhhggggggggggff...", "hhhhhhhhhhhhhhhhhh...", ] }, - "legnear": { x: 33, y: 74, rows: [ + "legnear": { x: 33, y: 75, rows: [ "...pooo.................", "..ppoooo................", - ".pppooooo...............", + ".ppppoooo...............", "pppppooooo..............", "pppppooooo..............", "pppppooooo..............", - "pppppooooon.............", - ".ppppooooon.............", + "pppppoooooo.............", + ".ppppoooooo.............", "..pppoooooo.............", - "..pppoooooon............", - "..pppoooooon............", - "...ppoooooon............", - "...pppooooon............", - "...pppooooonn...........", - "...pppooooonn...........", - "....pppoooonn...........", - "....pppooonnnn..........", - "....pppoooonoo..........", - "....pppooooooo..........", - "....pppooooooo..........", - ".....ppoooooonn.........", - "......poooooonn.........", - ".....qqqqqqqqqn.........", - ".......oooooonn.........", - ".......zJoooonnn........", - ".......zJoooonnn........", + "..ppppoooooo............", + "..ppppoooooo............", + "...pppoooooo............", + "...pppoooooon...........", + "....ppoooooon...........", + "....ppoooooonn..........", + "....ppoooooonn..........", + ".....popoooonn..........", + ".....pppooonnnn.........", + ".....pppoooonoo.........", + ".....pppooooooo.........", + ".....pppooooooo.........", + "......ppoooooonn........", + ".......poooooonn........", + "......zJqqqqqqqn........", + "........zJoooonn........", ".......zhggggggfff......", ".......zhggggggfff......", ".......zhhhhhhhhhh......", @@ -352,43 +347,46 @@ const PARTS = { "qqqqqqoo", "ppppppoo", ] }, - "skirt": { x: 8, y: 70, rows: [ - ".........cccccbbbbbb..........cccbbbbbba..........", - ".........cccccbbbbbb..........cccbbbbbba..........", - "........ccccccbbbbbb..........cccbbbbbbba.........", + "skirt": { x: 8, y: 68, rows: [ + ".........c........................................", + ".........cccccbbbbbb..............................", + ".........cccccbbbbbb..............................", + "........ccccccbbbbbb..........c...................", + "........ccccccbbbbbb..........cccbbbbbbb..........", + "........zcccccbbbbbb..........cccbbbbbbb..........", "........zcccccbbbbbb..........cccbbbbbbba.........", - "........zcccccbbbbbb..........cccbbbbbbba.........", - "........zccccbbbbbbb...........cccbbbbbbaa........", + ".......zKccccbbbbbbb..........ccccbbbbbba.........", ".......zKccccbbbbbbb...........cccbbbbbbba........", ".......zKccccbbbbbbb...........cccbbbbbbba........", - ".......zKdcccbbbbbbb...........cccbbbbbbbaa.......", - ".......zKdcccbbbbbbb...........cccbbbbbbbaa.......", - "......zKcdcccbbbbbbb...........cccbbbbbcbaaa......", - "......zKdccccbbbbbbb...........cccbbbbbcbbaa......", + ".......zKdcccbbbbbbb...........cccbbbbbbba........", + "......zKcdcccbbbbbbb...........cccbbbbbbbaa.......", + "......zKcdcccbbbbbbb...........cccbbbbbcbaa.......", + "......zKdccccbbbbbbb...........cccbbbbbcbba.......", "......zKdccccbbbbbbb...........cccbbbbbcbbaa......", - ".....zKcdccccbbbbbbb...........cccbbbbbcbbaaa.....", - ".....zKcdccccbbbbbbb............ccbbbbbbcbaaa.....", + ".....zKcdccccbbbbbbb...........cccbbbbbcbbaa......", + ".....zKcdccccbbbbbbb...........cccbbbbbbcbaaa.....", + ".....zKcdcccbbbbbbbb............cccbbbbbcbbaa.....", ".....zKcdcccbbbbbbbb............cccbbbbbcbbaa.....", - ".....zKcdcccbbbbbbbb............cccbbbbbcbbaaa....", "....zKcdccccbbbbbbbb............cccbbbbbcbbaaa....", "....zKcdccccbbbbbbbb............cccbbbbbcbbaaa....", - "....zKcdccccbbbbbbb.............cccbbbbbcbbbaaa...", - "...zKccdccccbbbbbbb..............ccbbbbbbcbbaaa...", + "....zKcdccccbbbbbbb.............cccbbbbbcbbbaa....", + "...zKccdccccbbbbbbb.............cccbbbbbbcbbaaa...", "...zKccdccccbbbbbbb..............ccbbbbbbcbbaaa...", "...zKcdcccccbbbbbbb..............ccbbbbbbcbbaaa...", - "...zKcdcccccbbbbbb................cbbbbbbcbbaaaa..", + "...zKcdcccccbbbbbb...............ccbbbbbbcbbaaa...", "..zKccdcccccbbbbbb................cbbbbbbcbbbaaa..", "..zKccdcccccbbbbbb................ccbbbbbcbbbaaa..", - "..zKccdccccbbbbbbb................ccbbbbbbcbbaaaa.", - ".zKcccdccccbbbbbbb.................cbbbbbbcbbaaaa.", + "..zKccdccccbbbbbbb................ccbbbbbbcbbaaa..", + ".zKcccdccccbbbbbbb................ccbbbbbbcbbaaaa.", ".zKccdcccccbbbbbb..................cbbbbbbcbbbaaa.", - ".zKccdcccccbbbbbb..................cbbbbbbcbbbaaaa", - ".zKccdcccccbddddd...................bbbbbbbccccccc", - "zKccdddddddd........................ccccccc.......", - "zKdd..............................................", + ".zKccdcccccbbbbbb..................cbbbbbbcbbbaaa.", + ".zKccdcccccbddddd..................cbbbbbbbccccccc", + "zKccdddddddd........................cccccccbbbaaaa", + "zKdd................................c.............", ] }, - "torso": { x: 18, y: 47, rows: [ - "ccccccbbpppoooooonnnnbbbaaaaa", + "torso": { x: 18, y: 46, rows: [ + "....................n.......a", + "........pppoooooonnnnbbbaaaaa", "ccccccbdpppoooooonnnncbbaaaaa", "ccccccbdpppoooooonnnncbbaaaaa", "ccccccbdpppoooooonnnncbbaaaaa", @@ -399,25 +397,26 @@ const PARTS = { "cccccbbdpppoooooonnnncbbaaaaa", "cccccbbdpppoooooonnnncbbaaaaa", "cccccbbdpppoooooonnnncbbaaaaa", - "cccccbbdpppoooooonnnncbbaaaaa", - "cccccbbdppooooooonnnncbbaaaac", - "ccccccccccccccccccccccccccccc", - "cccccbdpppoooocooonnnnccBaaaa", - "cccccbdppppppppppppppncCBBaaa", - ".zKccbdpppoooooooonnnnCCBBBa.", + "cccccbbdpppoooooonnnncbbaaaac", + "cccccbbdppooooooonnnncccccccc", + "cccccccccccccccccccccccbaaaaa", + "cccccccccccccccooonnnncbBaaaa", + "zKcccbdppppppppppppppncCBBaaa", + ".zKccbdpppoooooooonnnnCCBBBaa", ".zKccbdpppoooooooonnnncCCBaa.", ".ccccbdpppoooooooonnnncDaCaa.", - ".cccbbdbpppppppppppppbcbaaaa.", + ".cccbbdbpppppppppppppncbaaaa.", ".cccbbdbppoooooooonnnbcbaaaa.", ".cccbbdbppoooooooonnnbcbaaaa.", - "..ccbbdbppoooooooonnnbcbaaa..", - "..ccbbdbppoooooooonnnbcbaaa.g", - ".hhhhhgggggCCCCBggggggggggggg", + ".hccbbdbppoooooooonnnbcbaaaa.", + ".hhhhhgggggooooooonnnbcbaaaa.", + ".hhhhhgggggCCCCBggggnbcbaaa..", ".hhhhhgggggCgggCggggggggggggg", ".hhhhhgggggCgggCggggggggggggg", ".hhhhhgggggCgggCggggggggggggg", - ".hhhhhgggggDCCCChhhhhhhhhhhhh", - ".hhhhhhhhhhhhhh..............", + "......hhhhhDCCCCggggggggggggg", + "...............hhhhhhhhhggggg", + "........................hhhhh", ] }, }; From 2af125f45c5343f316c4811a8b66e9370d34b7ff Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 1 Nov 2026 21:31:08 +0000 Subject: [PATCH 09/12] =?UTF-8?q?Rowel=20=ED=8C=A8=EC=8A=A4=203=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D:=20=EB=B9=84=ED=8F=89=202=20=EA=B4=80?= =?UTF-8?q?=EA=B0=9D=20=EC=A0=90=EC=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018svN6WCTXGiFMzoDBTf192 --- incoming/pattern-study/craft/rowel/log.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/incoming/pattern-study/craft/rowel/log.md b/incoming/pattern-study/craft/rowel/log.md index 634dde2c..7347bda2 100644 --- a/incoming/pattern-study/craft/rowel/log.md +++ b/incoming/pattern-study/craft/rowel/log.md @@ -30,7 +30,7 @@ - 비평 1 의 후보를 다 물어 남은 것이 없어 비평을 새로 받음 ### 패스 3 -- 비평 2: 장인 6 · 캐릭터 7 · 사진가 7 · 관객 (받는 중) · 블라인드 읽기 2/3(성격을 「느긋하면서 당당한」으로 읽음, 매서움 놓침) · 닮은꼴 카우보이 모자 증기 로봇 광부 「조금」, 금속 팔 서부 총잡이 「조금」, 서부 테마파크 안드로이드 「조금」 +- 비평 2: 장인 6 · 캐릭터 7 · 사진가 7 · 관객 9 · 블라인드 읽기 2/3(성격을 「느긋하면서 당당한」으로 읽음, 매서움 놓침) · 닮은꼴 카우보이 모자 증기 로봇 광부 「조금」, 금속 팔 서부 총잡이 「조금」, 서부 테마파크 안드로이드 「조금」 - 확인 차례: ① 눈이 고른 청록 사각형이라 감정 없음(캐릭터, 블라인드 읽기) 아니오 · ① 두 장화가 같은 높이, 벨트와 어깨 수평, 무게 안 실림(캐릭터) 예 - 고칠 것: ① 자세 · 두 장화가 같은 높이로 딛고 벨트와 어깨선이 수평 · (25,110) (47,110) (25,72) (47,72) - 짚은 렌즈: 캐릭터 7점 · 「골반 기울기가 없어서 무게 이동으로 안 읽혀요」 From 02d8311da8facddaf926a721d9e759a42a520c0c Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 1 Nov 2026 21:38:05 +0000 Subject: [PATCH 10/12] =?UTF-8?q?Rowel=20=ED=8C=A8=EC=8A=A4=203=20?= =?UTF-8?q?=EB=90=98=EB=8F=8C=EB=A6=BC:=20=EC=A7=9D=EB=8B=A4=EB=A6=AC?= =?UTF-8?q?=EB=8A=94=20=EC=BA=90=EB=A6=AD=ED=84=B0=C2=B7=EA=B4=80=EA=B0=9D?= =?UTF-8?q?=EC=9D=B4=20=EC=83=88=20=ED=8C=90,=20=EC=82=AC=EC=A7=84?= =?UTF-8?q?=EA=B0=80=EA=B0=80=20=EC=98=9B=20=ED=8C=90=EC=9D=B4=EB=9D=BC=20?= =?UTF-8?q?=EB=93=A4=EC=9D=B4=EC=A7=80=20=EB=AA=BB=ED=95=98=EA=B3=A0=20?= =?UTF-8?q?=EB=B0=94=ED=80=B4=EB=A5=BC=20=EC=9D=BC=EC=B0=8D=20=EB=8B=AB?= =?UTF-8?q?=EB=8A=94=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018svN6WCTXGiFMzoDBTf192 --- incoming/pattern-study/craft/rowel/log.md | 6 +- incoming/pattern-study/patterns/rowel.js | 207 +++++++++++----------- 2 files changed, 109 insertions(+), 104 deletions(-) diff --git a/incoming/pattern-study/craft/rowel/log.md b/incoming/pattern-study/craft/rowel/log.md index 7347bda2..c173099c 100644 --- a/incoming/pattern-study/craft/rowel/log.md +++ b/incoming/pattern-study/craft/rowel/log.md @@ -29,10 +29,14 @@ - 「옛」인 렌즈(장인, 캐릭터, 사진가)가 있어 되돌림 - 비평 1 의 후보를 다 물어 남은 것이 없어 비평을 새로 받음 -### 패스 3 +### 패스 3 · 되돌림 - 비평 2: 장인 6 · 캐릭터 7 · 사진가 7 · 관객 9 · 블라인드 읽기 2/3(성격을 「느긋하면서 당당한」으로 읽음, 매서움 놓침) · 닮은꼴 카우보이 모자 증기 로봇 광부 「조금」, 금속 팔 서부 총잡이 「조금」, 서부 테마파크 안드로이드 「조금」 - 확인 차례: ① 눈이 고른 청록 사각형이라 감정 없음(캐릭터, 블라인드 읽기) 아니오 · ① 두 장화가 같은 높이, 벨트와 어깨 수평, 무게 안 실림(캐릭터) 예 - 고칠 것: ① 자세 · 두 장화가 같은 높이로 딛고 벨트와 어깨선이 수평 · (25,110) (47,110) (25,72) (47,72) - 짚은 렌즈: 캐릭터 7점 · 「골반 기울기가 없어서 무게 이동으로 안 읽혀요」 - 기대: pair-zoom 과 pair-led 에서 벨트가 무게 다리(왼쪽) 쪽으로 2줄 올라가고 어깨 망토는 반대로 기울고, 오른발이 두 줄 앞(아래)으로 나와 짝다리로 읽힘 - 바뀐 LED: 정지 379 · 10초 491 · 노브 634 · 팔레트 24→24색 +- A/B: 장인 같음(정순 새, 역순 옛) · 캐릭터 새 · 사진가 옛(「가슴 그늘 띠 안에 밝은 점」, 「코트 자락 그늘 단 아래 밝은 줄」, 「왼쪽 장화가 두 칸 들림」) · 관객 새 +- 버린 판정: 잡기 실패 2(사진가 역순) +- 「옛」인 렌즈(사진가)가 있어 되돌림. 사진가가 짚은 셋 가운데 둘(가슴 띠 (36~38,58) 의 밝은 점, 코트 오른쪽 밑단 (52~58,101) 의 밝은 줄)은 자세를 기울이며 그늘 선을 같이 옮기지 않아 생긴 것 +- 되돌림이 세 번 이어져 바퀴를 일찍 닫음 diff --git a/incoming/pattern-study/patterns/rowel.js b/incoming/pattern-study/patterns/rowel.js index 9ac07931..f623823d 100644 --- a/incoming/pattern-study/patterns/rowel.js +++ b/incoming/pattern-study/patterns/rowel.js @@ -38,30 +38,32 @@ const PARTS = { ".........zKcccaaa.", "..........zKbbaaa.", "..........zKbbaaa.", - "..aaaa....zKbbbaa.", - ".aaaaaaaaaccbbbaaa", - "aaaaaaaabbcccbbaaa", - "aaabbbbbbbcccbbaaa", + "..........zKbbbaa.", + "..aaaa..zKccbbbaaa", + ".aaaaaaaaacccbbaaa", + "aaaaabbbbbcccbbaaa", "bbbbbbbbbbcccbbbaa", - "bbbbbbbbbccccbbba.", - ".bbbccccccccccbb..", + "bbbbbbbccccccbbba.", + "bbccccccccccccbb..", + ".cccccccccc.......", "..cccc............", ] }, - "armr": { x: 8, y: 49, rows: [ - ".........ccbb.....", - "........ccbbbb....", + "armr": { x: 8, y: 48, rows: [ + ".........cccb.....", + "........cccbbb....", + ".......cccbbbba...", ".......cccbbbaa...", - ".......ccbbbaaa...", - ".......ccbbbaaa...", - ".......cbbbaaaa...", - "......cbbbbaaa....", - "......cbbbaaa.....", - ".....zbbbaaaa.....", - "....zKbbbaaa......", - "..zKaabbaaa.......", - ".zKaaaaaaa........", - "zKbbaaaaaa........", - "zKbbbaaaa.........", + ".......ccbbbbaa...", + "......zcbbbbaaa...", + ".....zccbbbaaaa...", + ".....zcbbbbaaa....", + "....zKbbbbaaaa....", + "....zKbbbaaaa.....", + "...zKbbbbaaa......", + "..zKaabbaaaa......", + ".zKaaaabaaa.......", + "zKbbaaaaaaa.......", + "zKbbbaaaaa........", "zKcbbbaaa.........", "zKccbbbaaa........", ".zKccbbbaaa.......", @@ -80,12 +82,12 @@ const PARTS = { "............ooo...", ] }, "base": { x: 5, y: 114, rows: [ - "...............UUUUUUUUUUSSSSSSSSSSSSSSS...............", - ".......UUUUUUUUUUUUUUUUUUSSSSSSSSSSSSSSSSSSSSSSS.......", + "...............SSSSSSSSSSSSSSSSSSSSSSSSS...............", + ".......SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS.......", "...SSSUUUUUUUUUUUUUUUUUUUSSSUUUUUUUUUUUUUUUUUUUUSSSS...", ".SSSSSUUUUUUUUUUUUUUUUUUUSSSUUUUUUUUUUUUUUUUUUUUSSSSSS.", - "LSSSSSSSSSSSSSSSSSSSSSSSSSSSUUUUUUUUUUUUUUUUUUUUSSSSSSL", - "TLLSSSSSSSSSSSSSSSSSSSSSSSSSUUUUUUUUUUUUUUUUUUUUSSSSLLT", + "LSSSSSUUUUUUUUUUUUUUUUUUUSSSUUUUUUUUUUUUUUUUUUUUSSSSSSL", + "TLLSSSUUUUUUUUUUUUUUUUUUUSSSUUUUUUUUUUUUUUUUUUUUSSSSLLT", "TTTLLLLSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSLLLLTTT", "TTTTTTTLLLLLLLLSSSSSSSSSSSSSSSSSSSSSSSSSLLLLLLLLTTTTTTT", "TTTTTTTTTTTTTTTLLLLLLLLLLLLLLLLLLLLLLLLLTTTTTTTTTTTTTTT", @@ -98,23 +100,23 @@ const PARTS = { "...........c.............z...........", "...........zK...........zK...........", "..........zKcc.........zKbb..........", - "..........zKccb.......bbbbb....z.....", - ".........zKccbbbbbbbbbbbbbbbaaaaa....", - ".....zKbbccccbbbbbbbbbbbbbbbaaaaa....", - "....zKcbbbbcbbbbbbbbbbbbbaaaaaaaaa...", - "....zKcbbbbcbbbbbbbbbbbbbaaaaaaaaaa..", - "...zKcbbbbcbbbbbbbbbbbbbbbaaaaaaaaa..", - "..zKccbbbbcbbbbbbbbbbbbbbbaaaaaaaaaa.", - "..zKccbbbbcbbbbbbbbbbbbbbbbaaaaaaaaa.", + "..........zKccb.......bbbbb..........", + ".....zKcbccccbbbbbbbbbbbbbbbaaaa.....", + "....zKcbbccccbbbbbbbbbbbbbbbaaaaa....", + "....zKcbbbbcbbbbbbbbbbbbbaaaaaaaa....", + "...zKccbbbbcbbbbbbbbbbbbbaaaaaaaaa...", + "..zKccbbbbcbbbbbbbbbbbbbbbaaaaaaaaa..", + "..zKccbbbbcbbbbbbbbbbbbbbbaaaaaaaaa..", + ".zKcccbbbbcbbbbbbbbbbbbbbbbaaaaaaaaa.", ".zKccbbbbbcbbbbbbbbbbbbbbbbaaaaaaaaa.", ".zKccbbbbcbbbbbbbbbbbbbbbbbbaaaaaaaa.", - ".zKccbbbbcbbbbbbbbbbbbbbbbbbaaaaaaaaa", - ".zKcbbbbbcbbbbbbbbbbbbbbbbbbaaaaaaaaa", - "zKccbbbbbcbbbbbbbbbbbbbbbbbbbaaaaaacc", - "zKccbbbbcbbbbbbbbbbbbbbbbbbbbaaaacc..", - "cccbbbbbcbbbbbbbbbbbbbbbbbbbbcccc....", - ".ccbbbbbbbbbbbbbbbbbbbccccccc........", - "...ccccccccccccccccccc...............", + ".ccccbbbbcbbbbbbbbbbbbbbbbbbaaaaaaaa.", + "ccccbbbbbcbbbbbbbbbbbbbbbbbbaaaaaaaaa", + "ccccbbbbbcbbbbbbbbbbbbbbbbbbbaaaaaaaa", + "ccccbbbbcbbbbbbbbbbbbbbbbbbbbaaaaaacc", + ".ccbbbbbcbbbbbbbbbbbbbbbbbbbbbaaacc..", + "...ccccccccbbbbbbbbbbbbbbcccccccc....", + "...........cccccccccccccc............", ] }, "coatback": { x: 19, y: 74, rows: [ "...ddddddddddddddcccccccc...", @@ -271,8 +273,10 @@ const PARTS = { "........ooooooon.....", ".......qqqqqqqqq.....", "........ooooonnn.....", - ".....hhhgggggfff.....", - ".....hhhgggggfff.....", + "........ooooonnn.....", + ".......oooooonn......", + ".....zhhgggggfff.....", + ".....zhhgggggfff.....", ".....zhhhhhhhhhh.....", ".....zhgggggggff.....", ".....zhgggggggff.....", @@ -285,37 +289,38 @@ const PARTS = { ".....zhggggggggff....", "...zhhgggggggggfff.B.", "..zhhhgggggggggfffC.C", - "zhhhhhggggggggggff.D.", - "zhhhhhggggggggggff...", + "hhhhhhggggggggggff.D.", + "hhhhhhggggggggggff...", "hhhhhhggggggggggff...", "hhhhhhhhhhhhhhhhhh...", ] }, - "legnear": { x: 33, y: 75, rows: [ + "legnear": { x: 33, y: 74, rows: [ "...pooo.................", "..ppoooo................", - ".ppppoooo...............", + ".pppooooo...............", "pppppooooo..............", "pppppooooo..............", "pppppooooo..............", - "pppppoooooo.............", - ".ppppoooooo.............", + "pppppooooon.............", + ".ppppooooon.............", "..pppoooooo.............", - "..ppppoooooo............", - "..ppppoooooo............", - "...pppoooooo............", - "...pppoooooon...........", - "....ppoooooon...........", - "....ppoooooonn..........", - "....ppoooooonn..........", - ".....popoooonn..........", - ".....pppooonnnn.........", - ".....pppoooonoo.........", - ".....pppooooooo.........", - ".....pppooooooo.........", - "......ppoooooonn........", - ".......poooooonn........", - "......zJqqqqqqqn........", - "........zJoooonn........", + "..pppoooooon............", + "..pppoooooon............", + "...ppoooooon............", + "...pppooooon............", + "...pppooooonn...........", + "...pppooooonn...........", + "....pppoooonn...........", + "....pppooonnnn..........", + "....pppoooonoo..........", + "....pppooooooo..........", + "....pppooooooo..........", + ".....ppoooooonn.........", + "......poooooonn.........", + ".....qqqqqqqqqn.........", + ".......oooooonn.........", + ".......zJoooonnn........", + ".......zJoooonnn........", ".......zhggggggfff......", ".......zhggggggfff......", ".......zhhhhhhhhhh......", @@ -347,46 +352,43 @@ const PARTS = { "qqqqqqoo", "ppppppoo", ] }, - "skirt": { x: 8, y: 68, rows: [ - ".........c........................................", - ".........cccccbbbbbb..............................", - ".........cccccbbbbbb..............................", - "........ccccccbbbbbb..........c...................", - "........ccccccbbbbbb..........cccbbbbbbb..........", - "........zcccccbbbbbb..........cccbbbbbbb..........", + "skirt": { x: 8, y: 70, rows: [ + ".........cccccbbbbbb..........cccbbbbbba..........", + ".........cccccbbbbbb..........cccbbbbbba..........", + "........ccccccbbbbbb..........cccbbbbbbba.........", "........zcccccbbbbbb..........cccbbbbbbba.........", - ".......zKccccbbbbbbb..........ccccbbbbbba.........", + "........zcccccbbbbbb..........cccbbbbbbba.........", + "........zccccbbbbbbb...........cccbbbbbbaa........", ".......zKccccbbbbbbb...........cccbbbbbbba........", ".......zKccccbbbbbbb...........cccbbbbbbba........", - ".......zKdcccbbbbbbb...........cccbbbbbbba........", - "......zKcdcccbbbbbbb...........cccbbbbbbbaa.......", - "......zKcdcccbbbbbbb...........cccbbbbbcbaa.......", - "......zKdccccbbbbbbb...........cccbbbbbcbba.......", + ".......zKdcccbbbbbbb...........cccbbbbbbbaa.......", + ".......zKdcccbbbbbbb...........cccbbbbbbbaa.......", + "......zKcdcccbbbbbbb...........cccbbbbbcbaaa......", "......zKdccccbbbbbbb...........cccbbbbbcbbaa......", - ".....zKcdccccbbbbbbb...........cccbbbbbcbbaa......", - ".....zKcdccccbbbbbbb...........cccbbbbbbcbaaa.....", - ".....zKcdcccbbbbbbbb............cccbbbbbcbbaa.....", + "......zKdccccbbbbbbb...........cccbbbbbcbbaa......", + ".....zKcdccccbbbbbbb...........cccbbbbbcbbaaa.....", + ".....zKcdccccbbbbbbb............ccbbbbbbcbaaa.....", ".....zKcdcccbbbbbbbb............cccbbbbbcbbaa.....", + ".....zKcdcccbbbbbbbb............cccbbbbbcbbaaa....", "....zKcdccccbbbbbbbb............cccbbbbbcbbaaa....", "....zKcdccccbbbbbbbb............cccbbbbbcbbaaa....", - "....zKcdccccbbbbbbb.............cccbbbbbcbbbaa....", - "...zKccdccccbbbbbbb.............cccbbbbbbcbbaaa...", + "....zKcdccccbbbbbbb.............cccbbbbbcbbbaaa...", + "...zKccdccccbbbbbbb..............ccbbbbbbcbbaaa...", "...zKccdccccbbbbbbb..............ccbbbbbbcbbaaa...", "...zKcdcccccbbbbbbb..............ccbbbbbbcbbaaa...", - "...zKcdcccccbbbbbb...............ccbbbbbbcbbaaa...", + "...zKcdcccccbbbbbb................cbbbbbbcbbaaaa..", "..zKccdcccccbbbbbb................cbbbbbbcbbbaaa..", "..zKccdcccccbbbbbb................ccbbbbbcbbbaaa..", - "..zKccdccccbbbbbbb................ccbbbbbbcbbaaa..", - ".zKcccdccccbbbbbbb................ccbbbbbbcbbaaaa.", + "..zKccdccccbbbbbbb................ccbbbbbbcbbaaaa.", + ".zKcccdccccbbbbbbb.................cbbbbbbcbbaaaa.", ".zKccdcccccbbbbbb..................cbbbbbbcbbbaaa.", - ".zKccdcccccbbbbbb..................cbbbbbbcbbbaaa.", - ".zKccdcccccbddddd..................cbbbbbbbccccccc", - "zKccdddddddd........................cccccccbbbaaaa", - "zKdd................................c.............", + ".zKccdcccccbbbbbb..................cbbbbbbcbbbaaaa", + ".zKccdcccccbddddd...................bbbbbbbccccccc", + "zKccdddddddd........................ccccccc.......", + "zKdd..............................................", ] }, - "torso": { x: 18, y: 46, rows: [ - "....................n.......a", - "........pppoooooonnnnbbbaaaaa", + "torso": { x: 18, y: 47, rows: [ + "ccccccbbpppoooooonnnnbbbaaaaa", "ccccccbdpppoooooonnnncbbaaaaa", "ccccccbdpppoooooonnnncbbaaaaa", "ccccccbdpppoooooonnnncbbaaaaa", @@ -397,26 +399,25 @@ const PARTS = { "cccccbbdpppoooooonnnncbbaaaaa", "cccccbbdpppoooooonnnncbbaaaaa", "cccccbbdpppoooooonnnncbbaaaaa", - "cccccbbdpppoooooonnnncbbaaaac", - "cccccbbdppooooooonnnncccccccc", - "cccccccccccccccccccccccbaaaaa", - "cccccccccccccccooonnnncbBaaaa", - "zKcccbdppppppppppppppncCBBaaa", - ".zKccbdpppoooooooonnnnCCBBBaa", + "cccccbbdpppoooooonnnncbbaaaaa", + "cccccbbdppooooooonnnncbbaaaac", + "ccccccccccccccccccccccccccccc", + "cccccbdpppoooocooonnnnccBaaaa", + "cccccbdppppppppppppppncCBBaaa", + ".zKccbdpppoooooooonnnnCCBBBa.", ".zKccbdpppoooooooonnnncCCBaa.", ".ccccbdpppoooooooonnnncDaCaa.", - ".cccbbdbpppppppppppppncbaaaa.", + ".cccbbdbpppppppppppppbcbaaaa.", ".cccbbdbppoooooooonnnbcbaaaa.", ".cccbbdbppoooooooonnnbcbaaaa.", - ".hccbbdbppoooooooonnnbcbaaaa.", - ".hhhhhgggggooooooonnnbcbaaaa.", - ".hhhhhgggggCCCCBggggnbcbaaa..", + "..ccbbdbppoooooooonnnbcbaaa..", + "..ccbbdbppoooooooonnnbcbaaa.g", + ".hhhhhgggggCCCCBggggggggggggg", ".hhhhhgggggCgggCggggggggggggg", ".hhhhhgggggCgggCggggggggggggg", ".hhhhhgggggCgggCggggggggggggg", - "......hhhhhDCCCCggggggggggggg", - "...............hhhhhhhhhggggg", - "........................hhhhh", + ".hhhhhgggggDCCCChhhhhhhhhhhhh", + ".hhhhhhhhhhhhhh..............", ] }, }; From 574cbae410bd20ef54cad0cef556ad25d7fdee1a Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 1 Nov 2026 21:38:35 +0000 Subject: [PATCH 11/12] =?UTF-8?q?Rowel=2088=ED=8C=90=20=EB=B0=94=ED=80=B4?= =?UTF-8?q?=20=EB=81=9D:=20=EB=91=90=20=EB=B2=88=20=EC=B1=84=EC=A0=90,=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D,=20look-88.png?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018svN6WCTXGiFMzoDBTf192 --- incoming/pattern-study/craft/rowel/log.md | 7 +++++++ incoming/pattern-study/craft/rowel/look-88.png | Bin 0 -> 64520 bytes 2 files changed, 7 insertions(+) create mode 100644 incoming/pattern-study/craft/rowel/look-88.png diff --git a/incoming/pattern-study/craft/rowel/log.md b/incoming/pattern-study/craft/rowel/log.md index c173099c..d0d4f29c 100644 --- a/incoming/pattern-study/craft/rowel/log.md +++ b/incoming/pattern-study/craft/rowel/log.md @@ -40,3 +40,10 @@ - 버린 판정: 잡기 실패 2(사진가 역순) - 「옛」인 렌즈(사진가)가 있어 되돌림. 사진가가 짚은 셋 가운데 둘(가슴 띠 (36~38,58) 의 밝은 점, 코트 오른쪽 밑단 (52~58,101) 의 밝은 줄)은 자세를 기울이며 그늘 선을 같이 옮기지 않아 생긴 것 - 되돌림이 세 번 이어져 바퀴를 일찍 닫음 + +## 바퀴 끝 +- 두 번 채점: 장인 7,6 · 캐릭터 8,7 · 사진가 8,7 · 관객 9,9 · 블라인드 읽기 2/3, 2/3(두 번 다 성격 매서움을 놓침). 세 패스가 다 되돌려져 지금 판이 비평 1·2 를 받은 판과 같아서, 따로 받은 비평 1 과 비평 2 를 두 번 채점으로 셈 +- 장거리 A/B: 길 a 의 첫 바퀴라 건너뜀 +- 닮은꼴: 챙 모자에 더스터를 입은 현상금 사냥꾼 「조금」, 금속 팔 서부 총잡이 「조금」(두 번), 장난감 카우보이 인형 「조금」, 카우보이 모자 증기 로봇 광부 「조금」, 서부 테마파크 안드로이드 「조금」 · 「가깝다」 없음 +- 걸린 멈춤: 되돌림 세 번 이어짐(패스 1·2·3) +- 창작자에게: 짝다리(패스 3)는 캐릭터와 관객이 두 순서 다 새 판을 골랐는데, 자세를 기울이며 가슴 그늘 띠와 코트 밑단 그늘 선을 같이 옮기지 않아 사진가가 옛 판을 골랐어요. 다음 바퀴는 그 두 선까지 같이 옮긴 짝다리부터 다시 물어요. diff --git a/incoming/pattern-study/craft/rowel/look-88.png b/incoming/pattern-study/craft/rowel/look-88.png new file mode 100644 index 0000000000000000000000000000000000000000..6c0e42ace04510e0a072ec24f18967debfdaf320 GIT binary patch literal 64520 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%0Aq=k3gRzo}Gg#DV{G< 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 Date: Sun, 1 Nov 2026 22:17:33 +0000 Subject: [PATCH 12/12] =?UTF-8?q?Rowel=2088=ED=8C=90:=20index.html=20?= =?UTF-8?q?=EB=8B=A4=EC=8B=9C=20=EC=A7=93=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018svN6WCTXGiFMzoDBTf192 --- incoming/pattern-study/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/incoming/pattern-study/index.html b/incoming/pattern-study/index.html index 68949b6f..276d4943 100644 --- a/incoming/pattern-study/index.html +++ b/incoming/pattern-study/index.html @@ -210,8 +210,8 @@

패턴 연구

- - + +