Files
fishing-game/assets/fish/fish-roundel.svg
T
andrey 0a0595c3c1 Этап 47: ревизия SVG-портретов рыб — детализация до уровня болотных + биологическое правдоподобие. (1) Полная перерисовка 32 портретов, кроме 5 болотных (эталон стиля, Этап 45): 8 речных (carass, perch, bream, carp, pike, catfish, sturge, gold), 10 озёрных (zander, chuch, crayfish, bleak, roundel, eelpout, tench, navaga, rudd, cisco), 5 морских (herring, mackerel, flounder, tuna, swordfish), 9 океанских (moray, grouper, turtle, angler, octopus, manta, shark, squid, whale). (2) Единый стиль: послойные заливки без градиентов/defs (--f1 тело, --f3 плавники — перекрашиваются вариантами; --f2 брюхо/светлое, --f4 тёмный узор/кромка — НЕ перекрашиваются), спинная кромка f4-серпом, жаберная пластина+дуга, глаз 5 кругов (ободок→склера→радужка фикс-hex→зрачок→блик), составные узоры (полосы/пятна/чешуя/жучки/финлеты) — одним compound-path, ≤38 элементов, фикс-hex-акценты разрешены. (3) Видовые отличия и разведение «двойников»: карась↔карп (усы), окунь↔судак (горб/полосы/красное vs косая полоса/клыки), лещ↔густера (длинная анальная «юбка» vs короткий анальный+крупный глаз+киль), плотва↔краснопёрка (красный vs жёлтый глаз, рот конечный vs вверх), сом↔вьюн (голова-¼/длинные усы vs лента/10 усиков), мурена↔вьюн, осьминог↔кальмар (мешок+8 равных рук vs мантия-ракета+2 ловчих+крылышки), кит↔акула (флоскулы/фонтан/ус vs треуг. D/гетероцерк/5 щелей), сельдь↔скумбрия↔тунец↔меч, манта↔камбала↔рак, черепаха (вид сверху). (4) «Не рыбы»: crayfish (рак, вид сверху, клешни/ноги/веер), turtle (черепаха, вид сверху, щитки/4 ласты/клюв), octopus/squid/whale — иная анатомия (присоски/ловчие щупальца/флоскулы/фонтан), допустимые отклонения от рыбьего протокола. (5) Двойные боссы sturge (Река) и whale (Океан) проверены под золотой аурой #card.boss-card — контраст держат f4-детали. (6) Дефекты, найденные на приёмке и исправленные точечно (композиция не менялась): octopus — 2 щели с фоном; swordfish — светлый стык голова↔меч; tuna — прозрачная «дыра» в выемке хвоста-полумесяца; grouper — щель пасть↔нижняя челюсть; angler — просвет между римом и эской. (7) viewBox (0 0 160 100) и id/имена файлов не менялись; данные/логика/баланс не тронуты. (8) Интеграция: node tools/embed-fish.mjs — блок FISH-SVG обновлён (202478 байт / 1512 строк, 37 symbol); проверено совпадение всех 37 symbol с текущими assets/fish/*.svg; tools/fish-preview.html — блок «Варианты» (8 инлайн-копий carass синхронизированы с источником) + секция «Читаемость в UI» (44×28 / 40×26 / 240×150). Тесты не правились: 222/222 PASS, exit 0; check.mjs OK; balance.mjs — пины без изменений (Река 65.1/125.9 · Озёра 194.1/249.0 · Болото 240.3/328.9 · Море 297.3/476.7 · Океан 329.1/552.7). Скриншоты перегенерированы (45 RU + 45 EN). Доки: DEVLOG Этап 47.
2026-09-23 16:55:52 +03:00

43 lines
6.1 KiB
XML

<!-- Густера (roundel): высокое сжатое серебристое тело (D/L≈0.46) БЕЗ ромбовидного острия леща; КРУПНЫЙ глаз; КОРОТКИЙ анальный плавник (12-14 лучей, антипод длинной «юбки» леща); тонкий хвостовой стебель с глубокой вилкой; КИЛЬ — тонкая тёмная кромка брюха позади брюшных плавников (отличие от плотвы) -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 100" width="160" height="100">
<!-- хвост: глубокая вилка, лопасти (16,31)/(16,69); корень утоплен в стебель (нахлёст), светлая кромка отделяет от тела -->
<path fill="var(--f3,hsl(215,26%,40%))" stroke="var(--f2,hsl(210,20%,82%))" stroke-width="1" stroke-opacity="0.5" d="M50 44 L16 31 C23 39 27 45 30.5 50 C27 55 23 61 16 69 L50 56 Z"/>
<!-- спинной плавник: короткий, основание x68..92 утоплено в спину (нахлёст ≥4), вершина (79,14), задняя кромка вогнута -->
<path fill="var(--f3,hsl(215,26%,40%))" d="M68 34.5 C69.5 24 73.5 16 79 14 C81 20 85 28 92 34.5 Z"/>
<!-- лучи спинного плавника: 4 тонких штриха веером от основания к кромке (не выходят за мембрану) -->
<path fill="none" stroke="var(--f4,hsl(215,30%,24%))" stroke-width="0.9" opacity="0.3" d="M70 33 C70.8 30 71.6 27.4 72.8 25.2 M76 32.6 C76.6 27.5 77 22.5 77.5 17.5 M81.5 32.4 C81.3 28.2 80.9 24.3 80.4 20.6 M87 32.6 C86.2 29.8 84.7 27.2 82.7 25"/>
<!-- анальный плавник: КОРОТКИЙ (главное отличие от леща), основание x58..70 утоплено в брюхо (нахлёст ≥4), низ y85, задняя кромка вогнута -->
<path fill="var(--f3,hsl(215,26%,40%))" d="M58 62 C59.5 70 61.5 78 64 85 C67 82.5 69.5 75 70 62 Z"/>
<!-- лучи анального плавника: 3 штриха (плотные 12-14 лучей), не выходят за мембрану -->
<path fill="none" stroke="var(--f4,hsl(215,30%,24%))" stroke-width="0.9" opacity="0.3" d="M60 66 C60.6 71 61.6 76.5 62.8 81.5 M63.5 66 C63.9 71 64.2 76.5 64.3 82 M67 65.5 C66.8 69.5 66.3 73.5 65.6 77.5"/>
<!-- брюшные плавники: пара мягких округлых лопастей x82..100, основание внутри брюха, отведены назад-вниз -->
<path fill="var(--f3,hsl(215,26%,40%))" d="M83 70 C80.5 79 81.5 84 85.5 86 C89.5 85 91.5 79 92.5 70 Z"/>
<path fill="var(--f3,hsl(215,26%,40%))" d="M93 70 C90.5 79 91.5 84.5 95.5 86.5 C99.5 85.5 101 79 101.5 70 Z"/>
<!-- тело: высокое и сжатое (D/L≈0.46), спина округлая БЕЗ ромбовидного острия; рыло (150,50), затылок (130,36), спина (98,27), брюхо (98,75), стебель 46,45/46,55 (толщина 10) -->
<path fill="var(--f1,hsl(213,24%,57%))" d="M150 50 C147 44 141 38 132 36 C121 29.5 110 27 98 27 C72 28 54 34 46 45 L46 55 C51 67 70 75.5 98 75 C116 74 132 69 141 61 C145 57 148 53 150 50 Z"/>
<!-- брюхо: светлая серебристая нижняя треть -->
<path fill="var(--f2,hsl(210,20%,82%))" d="M46 55 C51 67 70 75.5 98 75 C116 74 132 69 141 61 C134 64 118 68 98 68.5 C74 68 53 61 46 55 Z"/>
<!-- спинная кромка: тонкая тёмная полоса по верхнему контуру (не зубцы) -->
<path fill="var(--f4,hsl(215,30%,24%))" d="M150 50 C147 44 141 38 132 36 C121 29.5 110 27 98 27 C72 28 54 34 46 45 C60 37.5 78 31.5 98 31.5 C110 31.5 121 34 132 39 C141 43 147 47 150 50 Z"/>
<!-- КИЛЬ: тонкая f4-кромка-гребень по линии брюха между анальным и брюшными плавниками (отличие от плотвы) -->
<path fill="var(--f4,hsl(215,30%,24%))" d="M62 69.4 C68 71.3 74 73.3 79 74.4 L79 75.7 C74 74.6 68 72.6 62 70.7 Z"/>
<!-- жаберная пластина: мягкая светлая заливка головы (сдвинута от крупного глаза) -->
<path fill="var(--f2,hsl(210,20%,82%))" opacity="0.35" d="M120 38 C126 45 127 55 122 63 C118 55 116 45 116 39 Z"/>
<!-- жаберная дуга: тонкий тёмный серп у головы -->
<path fill="none" stroke="var(--f4,hsl(215,30%,24%))" stroke-width="1.3" opacity="0.5" d="M120 38 C126 45 127 55 122 63"/>
<!-- чешуя: очень бледная f4-сетка (compound-path), верхний ряд из трёх дуг -->
<path fill="var(--f4,hsl(215,30%,24%))" opacity="0.15" d="M75 36 Q81 41 75 46 Q77 41 75 36 Z M91 34 Q97 39 91 44 Q93 39 91 34 Z M107 37 Q113 42 107 47 Q109 42 107 37 Z"/>
<!-- чешуя: нижний ряд из трёх дуг (реже и бледнее, чем у леща) -->
<path fill="var(--f4,hsl(215,30%,24%))" opacity="0.15" d="M83 47 Q89 52 83 57 Q85 52 83 47 Z M99 49 Q105 54 99 59 Q101 54 99 49 Z M115 52 Q121 57 115 62 Q117 57 115 52 Z"/>
<!-- рот: конечный, на конце рыла (150,50) -->
<path fill="var(--f4,hsl(215,30%,24%))" d="M147 50.3 C149 50.5 150 51 150.6 51.8 C149.5 52.8 147.8 52.5 146.6 51.3 Z"/>
<!-- грудной плавник: посажен низко, мягкая лопасть на боку (после тела) -->
<path fill="var(--f3,hsl(215,26%,40%))" d="M117 56 C113 58 110 63 111.5 68 C115 66 117 61 118.5 57 Z"/>
<!-- глаз: КРУПНЫЙ (главный знак густеры, антипод крошечного глаза леща): ободок → склера → радужка → зрачок → блик -->
<circle fill="var(--f4,hsl(215,30%,24%))" cx="134" cy="43" r="5.6"/>
<circle fill="#f7f3e6" cx="134" cy="43" r="4.7"/>
<circle fill="#d7c07a" cx="134" cy="43" r="3.6"/>
<circle fill="#142638" cx="134" cy="43" r="2.6"/>
<circle fill="#fff" cx="132.8" cy="41.6" r="1"/>
</svg>