@euhenio/pi-buddy 1.0.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,13 +17,22 @@ pi install npm:@euhenio/pi-buddy # из npm
17
17
  > Если раньше расширение лежало файлом в `~/.pi/agent/extensions/buddy.ts` — удалите тот файл,
18
18
  > иначе будут две команды `/buddy`. Питомец сохранится: его состояние в `~/.pi/agent/buddy.json`.
19
19
 
20
+ ## Анимация
21
+
22
+ У каждого питомца — пиксельный спрайт и 16 кадров: моргание, свои «фирменные» движения в простое
23
+ (кот машет хвостом и умывается, утка кивает, сова подмигивает, дракон пускает дымок…), ходьба,
24
+ пока агент работает, прыжки от радости, позы «лежит», «грустит» и «спит» с дыханием.
25
+ Смена анимаций идёт через базовую стойку, без резких скачков. В простое питомец иногда
26
+ сам берёт любимую игрушку.
27
+
20
28
  ## Команды
21
29
 
22
30
  | Команда | Что делает |
23
31
  |---|---|
24
32
  | `/buddy` | показать / спрятать |
25
- | `/buddy choose [вид]` | выбрать питомца (ВЕО (пиксели), ВЕО, немецкая овчарка, кот, сова, дракон…) |
26
- | `/buddy feed` `pet` `play` `nap` | покормить, погладить, поиграть, уложить |
33
+ | `/buddy choose [вид]` | выбрать питомца: ВЕО (пиксели), немецкая овчарка, блоб, кот, утка, призрак, сова, аксолотль, дракон — все пиксельные, с анимацией |
34
+ | `/buddy feed` `pet` `nap` | покормить, погладить, уложить |
35
+ | `/buddy play [предмет]` | поиграть любимой игрушкой: у каждого их две (мячик и косточка, клубок и мышка, фрисби и канат…) |
27
36
  | `/buddy name <кличка>` | дать имя |
28
37
  | `/buddy stats` | статистика |
29
38
  | `/buddy dock` `compact` `big` `top` | где и как показывать |
@@ -31,7 +40,7 @@ pi install npm:@euhenio/pi-buddy # из npm
31
40
  | `/buddy anim on\|off\|auto` | анимация (auto — не мешает прокрутке вне fullscreen) |
32
41
  | `/buddy pxcolor fg\|bg\|auto` | отрисовка пиксельного пса (fg — для терминала IntelliJ) |
33
42
  | `/buddy learn [тема\|пожелание]` | модель pi придумает новые фразы |
34
- | `/buddy phrases` / `phrases clean` | файл своих фраз / убрать невалидные |
43
+ | `/buddy phrases` / `phrases clean` | файл своих фраз / убрать те, что не прозвучат (длинные, не та поза) |
35
44
 
36
45
  В чате можно попросить агента: «добавь питомцу фраз про Kafka» — он вызовет инструмент `buddy_phrases`.
37
46
 
@@ -352,6 +352,7 @@ interface Species {
352
352
  miniGrown?: string;
353
353
  say?: Partial<Record<Topic, string[]>>;
354
354
  px?: Record<PxFrame, string[]>; // пиксельные кадры (полублоки, truecolor); art — ASCII-запаска
355
+ items?: PxItem[]; // два любимых предмета
355
356
  }
356
357
 
357
358
  /**
@@ -366,6 +367,28 @@ const PX_PAL: Record<string, [number, number, number]> = {
366
367
  N: [8, 8, 10],
367
368
  P: [232, 120, 140],
368
369
  p: [180, 80, 100],
370
+ // остальные питомцы
371
+ "E": [18, 18, 22],
372
+ "e": [240, 240, 236],
373
+ "w": [240, 240, 236],
374
+ "g": [190, 190, 196],
375
+ "Y": [250, 208, 60],
376
+ "y": [205, 150, 35],
377
+ "O": [240, 128, 40],
378
+ "C": [80, 205, 175],
379
+ "c": [35, 140, 125],
380
+ "B": [150, 98, 55],
381
+ "b": [95, 60, 32],
382
+ "k": [245, 160, 190],
383
+ "m": [205, 95, 145],
384
+ "V": [95, 185, 85],
385
+ "v": [45, 115, 55],
386
+ "R": [225, 70, 60],
387
+ "T": [205, 145, 75],
388
+ "t": [150, 98, 48],
389
+ "L": [120, 190, 255],
390
+ "s": [110, 110, 118],
391
+ "S": [160, 160, 168],
369
392
  };
370
393
  type PxFrame = "S" | "SB" | "SP" | "SE" | "WM" | "WU" | "WA" | "WB" | "L" | "LB" | "LP" | "LT" | "SAD" | "SADB" | "Z" | "ZB";
371
394
  /** Кадры пиксельного ВЕО, 24×16 пикселей → 24 колонки × 8 строк */
@@ -680,7 +703,7 @@ const VEO_PX: Record<PxFrame, string[]> = {
680
703
  * Анимация по состоянию: every — каждые N тиков по 500 мс, seq — кадры по кругу.
681
704
  * В простое редко и в основном «стоит», чтобы не отвлекать; в работе — шаг.
682
705
  */
683
- type PxState = "work" | "happy" | "love" | "eat" | "idle" | "rest" | "sad" | "sleep";
706
+ type PxState = "work" | "happy" | "love" | "eat" | "idle" | "rest" | "sad" | "sleep" | "toss" | "chew";
684
707
  const PX_ANIM: Record<PxState, { every: number; seq: PxFrame[] }> = {
685
708
  work: { every: 1, seq: ["S", "WA", "S", "WB"] }, // идёт
686
709
  happy: { every: 1, seq: ["S", "WM", "WU", "WM"] }, // виляет хвостом
@@ -690,6 +713,190 @@ const PX_ANIM: Record<PxState, { every: number; seq: PxFrame[] }> = {
690
713
  rest: { every: 2, seq: ["L", "L", "L", "LB", "L", "LP", "L", "LP", "L", "L", "LT", "L"] }, // прилёг
691
714
  sad: { every: 2, seq: ["SAD", "SAD", "SAD", "SADB", "SAD", "SAD"] },
692
715
  sleep: { every: 3, seq: ["Z", "ZB"] }, // дышит во сне
716
+ toss: { every: 1, seq: ["S", "WM", "WU", "WM"] }, // играет: подпрыгивает за предметом
717
+ chew: { every: 2, seq: ["L", "LP", "L", "LP", "L", "LB"] }, // лёжа возится с предметом
718
+ };
719
+ /** Состояния «лёжа»: переход между ними идёт через L, а не через стойку */
720
+ const PX_LYING = new Set<PxState>(["rest", "sad", "sleep", "chew"]);
721
+
722
+ /**
723
+ * Любимые предметы. toss — прыгает в руки (мячик скачет), chew — лежит у лап.
724
+ * Рисуются поверх кадра у земли рядом с питомцем; say — дежурные фразы, пока идёт игра.
725
+ */
726
+ interface PxItem {
727
+ name: string;
728
+ mode: "toss" | "chew";
729
+ art: string[];
730
+ say: string[];
731
+ }
732
+ const IT: Record<string, PxItem> = {
733
+ ball: { name: "мячик", mode: "toss", art: [".RR.", "RwRR", "RRRR", ".RR."], say: ["гоняет мячик", "ловит мячик", "апорт!", "мячик! мячик!"] },
734
+ bone: { name: "косточка", mode: "chew", art: ["g...g", "wwwww", "g...g"], say: ["грызёт косточку", "охраняет косточку", "хрум-хрум"] },
735
+ frisbee: { name: "фрисби", mode: "toss", art: [".RRR.", "ROOOR", ".RRR."], say: ["ловит фрисби", "фрисби! ещё!", "прыжок за тарелкой"] },
736
+ rope: { name: "канат", mode: "chew", art: ["T.T.T.", "wTwTwT", ".T.T.T"], say: ["треплет канат", "тянет канат", "рррр, канат!"] },
737
+ cherry: { name: "вишенка", mode: "toss", art: ["..v", ".v.", "RvR", "RR."], say: ["подбрасывает вишенку", "ням, вишенка"] },
738
+ sugar: { name: "сахарок", mode: "chew", art: ["ww", "wg"], say: ["тает от сахарка", "облизывает сахарок"] },
739
+ yarn: { name: "клубок", mode: "toss", art: [".mm.", "mkmm", "mmkm", ".mm."], say: ["гоняет клубок", "запутался в нитках", "катает клубок"] },
740
+ mouse: { name: "мышка", mode: "chew", art: ["..gg", "gEgg", "sggg"], say: ["охотится на мышку", "мышка моя!", "трогает мышку лапкой"] },
741
+ rubber: { name: "уточка-пищалка", mode: "toss", art: [".YO", "YYY", "YY."], say: ["пищит уточкой", "играет с пищалкой"] },
742
+ bread: { name: "хлебушек", mode: "chew", art: [".TT.", "TTTT", "tTTt"], say: ["клюёт хлебушек", "крошки!", "ням-ням хлеб"] },
743
+ lantern: { name: "фонарик", mode: "toss", art: [".b.", "YYY", "YOY", "bbb"], say: ["светит фонариком", "парит с фонариком"] },
744
+ cookie: { name: "печенька", mode: "chew", art: [".TT.", "TtTT", "TTtT", ".TT."], say: ["хрустит печенькой", "призрачная печенька"] },
745
+ feather: { name: "пёрышко", mode: "toss", art: ["..w", ".w.", ".w.", "w.."], say: ["ловит пёрышко", "чистит пёрышко"] },
746
+ book: { name: "книжка", mode: "chew", art: ["RRRR", "Rwww", "RRRR"], say: ["читает книжку", "изучает документацию", "листает страницы"] },
747
+ bubbles: { name: "пузырьки", mode: "toss", art: ["L..", "..L", ".L."], say: ["пускает пузырьки", "буль-буль"] },
748
+ shell: { name: "ракушка", mode: "chew", art: [".k.", "kwk", "kkk"], say: ["любуется ракушкой", "слушает ракушку"] },
749
+ coin: { name: "монетка", mode: "toss", art: [".Y.", "YyY", ".Y."], say: ["подкидывает монетку", "орёл или решка?"] },
750
+ gold: { name: "сокровище", mode: "chew", art: ["..Y...", ".YyY..", "YyYyYy"], say: ["лежит на сокровищах", "пересчитывает золото", "моё золото!"] },
751
+ };
752
+
753
+
754
+ /** Пиксельные кадры остальных питомцев (те же 16 кадров, что у Сальсы) */
755
+ const ZOO_PX: Record<string, Record<PxFrame, string[]>> = {
756
+ blob: {
757
+ S: ["........................", "........................", "........................", "........................", "..........cccc..........", "........ccCCCCcc........", ".......cCCwCCCCCc.......", "......cCCwCCCCCCCc......", "......cCCCECCCECCc......", ".....cCCCCECCCECCCc.....", ".....cCCCCCCCCCCCCc.....", ".....cCCCCCkCkCCCCc.....", ".....cCCCCCCCCCCCCc.....", "......cCCCCCCCCCCc......", ".......cccccccccc.......", "........................"],
758
+ SB: ["........................", "........................", "........................", "........................", "..........cccc..........", "........ccCCCCcc........", ".......cCCwCCCCCc.......", "......cCCwCCCCCCCc......", "......cCCCCCCCCCCc......", ".....cCCCCCCCCCCCCc.....", ".....cCCCCCCCCCCCCc.....", ".....cCCCCCkCkCCCCc.....", ".....cCCCCCCCCCCCCc.....", "......cCCCCCCCCCCc......", ".......cccccccccc.......", "........................"],
759
+ SP: ["........................", "........................", "........................", "........................", "...........cccc.........", "........ccCCCCcc........", "........cCCwCCCCCc......", "......cCCwCCCCCCCc......", ".......cCCCECCCECCc.....", ".....cCCCCECCCECCCc.....", "......cCCCCCCCCCCCCc....", ".....cCCCCCkCkCCCCc.....", "......cCCCCCCCCCCCCc....", "......cCCCCCCCCCCc......", "........cccccccccc......", "........................"],
760
+ SE: ["........................", "........................", "..........cccc..........", ".........cCCCCc.........", "........cCwCCCCc........", "........cCwCCCCc........", ".......cCCCCCCCCc.......", ".......cCCECCECCc.......", ".......cCCECCECCc.......", ".......cCCCCCCCCc.......", ".......cCCCkkCCCc.......", ".......cCCCCCCCCc.......", ".......cCCCCCCCCc.......", "......cCCCCCCCCCCc......", "......cccccccccccc......", "........................"],
761
+ WM: ["........................", "..........cccc..........", ".........cCCCCc.........", "........cCwCCCCc........", "........cCwCCCCc........", ".......cCCCCCCCCc.......", ".......cCCECCECCc.......", ".......cCCECCECCc.......", ".......cCCCCCCCCc.......", ".......cCCCkkCCCc.......", ".......cCCCCCCCCc.......", ".......cCCCCCCCCc.......", "......cCCCCCCCCCCc......", "......cccccccccccc......", "........................", "........................"],
762
+ WU: ["..........cccc..........", ".........cCCCCc.........", "........cCwCCCCc........", "........cCwCCCCc........", ".......cCCCCCCCCc.......", ".......cCCECCECCc.......", ".......cCCECCECCc.......", ".......cCCCCCCCCc.......", ".......cCCCkkCCCc.......", ".......cCCCCCCCCc.......", ".......cCCCCCCCCc.......", "......cCCCCCCCCCCc......", "......cccccccccccc......", "........................", "........................", "........................"],
763
+ WA: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", "..........cccc..........", ".......ccCCCCCCcc.......", "......cCCwCCCCCCCc......", ".....cCCCCECCCECCCc.....", ".....cCCCCCCCCCCCCc.....", "....cCCCCCCkCkCCCCCc....", "....cCCCCCCCCCCCCCCc....", ".....cccccccccccccc.....", "........................"],
764
+ WB: ["........................", "........................", "..........cccc..........", ".........cCCCCc.........", "........cCwCCCCc........", "........cCwCCCCc........", ".......cCCCCCCCCc.......", ".......cCCECCECCc.......", ".......cCCECCECCc.......", ".......cCCCCCCCCc.......", ".......cCCCkkCCCc.......", ".......cCCCCCCCCc.......", ".......cCCCCCCCCc.......", "......cCCCCCCCCCCc......", "......cccccccccccc......", "........................"],
765
+ L: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", "..........cccc..........", ".......ccCCCCCCcc.......", "......cCCwCCCCCCCc......", ".....cCCCCECCCECCCc.....", ".....cCCCCCCCCCCCCc.....", "....cCCCCCCkCkCCCCCc....", "....cCCCCCCCCCCCCCCc....", ".....cccccccccccccc.....", "........................"],
766
+ LB: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", "..........cccc..........", ".......ccCCCCCCcc.......", "......cCCwCCCCCCCc......", ".....cCCCCCCCCCCCCc.....", ".....cCCCCCCCCCCCCc.....", "....cCCCCCCkCkCCCCCc....", "....cCCCCCCCCCCCCCCc....", ".....cccccccccccccc.....", "........................"],
767
+ LP: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", "..........cccc..........", "........ccCCCCCCcc......", "......cCCwCCCCCCCc......", "......cCCCCECCCECCCc....", ".....cCCCCCCCCCCCCc.....", ".....cCCCCCCkCkCCCCCc...", "....cCCCCCCCCCCCCCCc....", "......cccccccccccccc....", "........................"],
768
+ LT: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", "..........cccc..........", ".......ccCCCCCCcc.......", "......cCCwCCCCCCCc......", ".....cCCCCECCCECCCc.....", ".....cCCCCCCCCCCCCc.....", "....cCCCCCCkCkCCCCCc....", "....cCCCCCCCCCCCCCCc....", ".....cccccccccccccc.....", "........................"],
769
+ SAD: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", "..........cccc..........", ".......ccCCCCCCcc.......", "......cCCwCCCCCCCc......", ".....cCCCCECCCECCCc.....", ".....cCCCCLCCCLCCCc.....", "....cCCCCCCkCkCCCCCc....", "....cCCCCCCCCCCCCCCc....", ".....cccccccccccccc.....", "........................"],
770
+ SADB: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", "..........cccc..........", ".......ccCCCCCCcc.......", "......cCCwCCCCCCCc......", ".....cCCCCCCCCCCCCc.....", ".....cCCCCCCCCCCCCc.....", "....cCCCCCCkCkCCCCCc....", "....cCCCCCCCCCCCCCCc....", ".....cccccccccccccc.....", "........................"],
771
+ Z: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", "..........cccc..........", ".......ccCCCCCCcc.......", "......cCCwCCCCCCCc......", ".....cCCCCCCCCCCCCc.....", ".....cCCCCCCCCCCCCc.....", "....cCCCCCCkCkCCCCCc....", "....cCCCCCCCCCCCCCCc....", ".....cccccccccccccc.....", "........................"],
772
+ ZB: ["........................", "........................", "........................", "........................", "........................", "........................", "..........cccc..........", ".........Ccccc..........", ".......ccCCCCCCcc.......", "......cCCwCCCCCCCc......", ".....cCCCCCCCCCCCCc.....", ".....cCCCCCCCCCCCCc.....", "....cCCCCCCkCkCCCCCc....", "....cCCCCCCCCCCCCCCc....", ".....cccccccccccccc.....", "........................"],
773
+ },
774
+ cat: {
775
+ S: ["........................", "........................", "......s......s..........", "......sS....sS..........", "......sSS..sSS..........", "......sSSSSSSS..........", ".....sSSSSSSSSs.........", ".....sSESSSSESs.........", ".....sSSSkkSSSs.........", "......sSSSSSSs..........", "......sSSSSSSs....s.....", ".....sSSSwwSSSs...sS....", ".....sSSwwwwSSs..sS.....", ".....sSSwwwwSSssSS......", ".....sSSSSSSSSSSs.......", "......ss.ss.ss.........."],
776
+ SB: ["........................", "........................", "......s......s..........", "......sS....sS..........", "......sSS..sSS..........", "......sSSSSSSS..........", ".....sSSSSSSSSs.........", ".....sSSSSSSSSs.........", ".....sSSSkkSSSs.........", "......sSSSSSSs..........", "......sSSSSSSs....s.....", ".....sSSSwwSSSs...sS....", ".....sSSwwwwSSs..sS.....", ".....sSSwwwwSSssSS......", ".....sSSSSSSSSSSs.......", "......ss.ss.ss.........."],
777
+ SP: ["........................", "........................", "......s......s..........", "......sS....sS..........", "......sSS..sSS..........", "......sSSSSSSS..........", ".....sSSSSSSSSs.........", ".....sSESSSSESs.........", ".....sSSSkkSSSs..s......", "......sSSSSSSs...sS.....", "......sSSSSSSs...sS.....", ".....sSSSwwSSS..sS......", ".....sSSwwwwSS.sS.......", ".....sSSwwwwSSss........", ".....sSSSSSSSSSSs.......", "......ss.ss.ss.........."],
778
+ SE: ["........................", "........................", "......s.......s.........", "......sS....sSS.........", "......sSS..sSS..........", "......sSSSSSSS..........", ".....sSSSSSSSSs.........", ".....sSESSSSESs.........", ".....sSSSkkSSSs.........", "......sSSSSSSs..........", "......sSSSSSSs....s.....", ".....sSSSwwSSSs...sS....", ".....sSSwwwwSSs..sS.....", ".....sSSwwwwSSssSS......", ".....sSSSSSSSSSSs.......", "......ss.ss.ss.........."],
779
+ WM: ["........................", "......s......s..........", "......sS....sS..........", "......sSS..sSS..........", "......sSSSSSSS..........", ".....sSSSSSSSSs.........", ".....sSESSSSESs.........", ".....sSSSkkSSSs..s......", "......sSSSSSSs...sS.....", "......sSSSSSSs...sS.....", ".....sSSSwwSSS..sS......", ".....sSSwwwwSS.sS.......", ".....sSSwwwwSSss........", ".....sSSSSSSSSSSs.......", "......ss.ss.ss..........", "........................"],
780
+ WU: ["......s......s..........", "......sS....sS..........", "......sSS..sSS..........", "......sSSSSSSS..........", ".....sSSSSSSSSs.........", ".....sSESSSSESs.........", ".....sSSSkkSSSs..s......", "......sSSSSSSs...sS.....", "......sSSSSSSs...sS.....", ".....sSSSwwSSS..sS......", ".....sSSwwwwSS.sS.......", ".....sSSwwwwSSss........", ".....sSSSSSSSSSSs.......", "......ss.ss.ss..........", "........................", "........................"],
781
+ WA: ["........................", "........................", "......s......s..........", "......sS....sS..........", "......sSS..sSS..........", "......sSSSSSSS..........", ".....sSSSSSSSSs.........", ".....sSESSSSESs.........", ".....sSSSkkSSSs..s......", "......sSSSSSSs...sS.....", "......sSSSSSSs...sS.....", ".....sSSSwwSSS..sS......", ".....sSSwwwwSS.sS.......", ".....sSSwwwwSSss........", ".....sSSSSSSSSSSs.......", "......ss.ss.ss.........."],
782
+ WB: ["........................", "........................", "......s......s..........", "......sS....sS..........", "......sSS..sSS..........", "......sSSSSSSS..........", ".....sSSSSSSSSs.........", ".....sSESSSSESs.........", ".....sSwSkkSSSs.........", "......swwSSSSs..........", "......sSSSSSSs....s.....", ".....sSSSwwSSSs...sS....", ".....sSSwwwwSSs..sS.....", ".....sSSwwwwSSssSS......", ".....sSSSSSSSSSSs.......", "......ss.ss.ss.........."],
783
+ L: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", "......s......s..........", "......sS....sS..........", "......sSSSSSSS..........", ".....sSESSSSESs.........", ".....sSSSkkSSSssssss....", "....sSSSSSSSSSSSSSSSs...", "....sSSSSSSSSSSSSSSSs...", ".....ssssssssssssss.....", "........................"],
784
+ LB: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", "......s......s..........", "......sS....sS..........", "......sSSSSSSS..........", ".....sSSSSSSSSs.........", ".....sSSSkkSSSssssss....", "....sSSSSSSSSSSSSSSSs...", "....sSSSSSSSSSSSSSSSs...", ".....ssssssssssssss.....", "........................"],
785
+ LP: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", "......s......s..........", "......sS....sS..........", "......sSSSSSSS..........", ".....sSESSSSESs...s.....", ".....sSSSkkSSSssssSs....", "....sSSSSSSSSSSSSSSSs...", "....sSSSSSSSSSSSSSSSs...", ".....ssssssssssssss.....", "........................"],
786
+ LT: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", "......s......s..........", "......sS....sS..........", "......sSSSSSSS..........", ".....sSESSSSESs.........", ".....sSSSkkSSSssssss....", "....sSSSSSSSSSSSSSSSs...", "....sSSSSSSSSSSSSSSSs...", ".....ssssssssssssss.....", "........................"],
787
+ SAD: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", "......s......s..........", "......sS....sS..........", "......sSSSSSSS..........", ".....sSESSSSESs.........", ".....sSLSkkSLSssssss....", "....sSSSSSSSSSSSSSSSs...", "....sSSSSSSSSSSSSSSSs...", ".....ssssssssssssss.....", "........................"],
788
+ SADB: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", "......s......s..........", "......sS....sS..........", "......sSSSSSSS..........", ".....sSSSSSSSSs.........", ".....sSSSkkSSSssssss....", "....sSSSSSSSSSSSSSSSs...", "....sSSSSSSSSSSSSSSSs...", ".....ssssssssssssss.....", "........................"],
789
+ Z: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", "........................", "........ss..ss..........", ".......sSSssSSs.........", "......sSSSSSSSSs........", "......sSsSSsSSSSs.......", ".....sSSSSkSSSSSSs......", ".....sSSSSSSSSSSSSs.....", "......ssSSSSSSSSSss.....", "........ssssssssss......"],
790
+ ZB: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", ".........s..ss..........", "........ssssss..........", ".......sSSssSSs.........", "......sSSSSSSSSs........", "......sSsSSsSSSSs.......", ".....sSSSSkSSSSSSs......", ".....sSSSSSSSSSSSSs.....", "......ssSSSSSSSSSss.....", "........ssssssssss......"],
791
+ },
792
+ duck: {
793
+ S: ["........................", "........................", "........................", "............YYYY........", "...........YYYYYY.......", "...........YYYEYYOO.....", "...........YYYYYOOOO....", "............YYYY........", ".......Y...YYYYY........", ".......YYYYYYYYYY.......", ".......YYYyyyyYYYY......", ".......YYYyyyyyYYY......", "........YYYYYYYYY.......", ".........YYYYYYY........", "...........O..O.........", "..........OO.OO........."],
794
+ SB: ["........................", "........................", "........................", "............YYYY........", "...........YYYYYY.......", "...........YYYYYYOO.....", "...........YYYYYOOOO....", "............YYYY........", ".......Y...YYYYY........", ".......YYYYYYYYYY.......", ".......YYYyyyyYYYY......", ".......YYYyyyyyYYY......", "........YYYYYYYYY.......", ".........YYYYYYY........", "...........O..O.........", "..........OO.OO........."],
795
+ SP: ["........................", "........................", "........................", "........................", "............YYYY........", "...........YYYYYY.......", "...........YYYEYYOO.....", "...........YYYYYOOOO....", ".......Y...YYYYY........", ".......YYYYYYYYYY.......", ".......YYYyyyyYYYY......", ".......YYYyyyyyYYY......", "........YYYYYYYYY.......", ".........YYYYYYY........", "...........O..O.........", "..........OO.OO........."],
796
+ SE: ["........................", "........................", "........................", "............YYYY........", "...........YYYYYY.......", "...........YYYEYYOO.....", "...........YYYYYOOOO....", ".........yy.YYYY........", ".......YyyyYYYYY........", ".......YYYYYYYYYY.......", ".......YYYyyyyYYYY......", ".......YYYyyyyyYYY......", "........YYYYYYYYY.......", ".........YYYYYYY........", "...........O..O.........", "..........OO.OO........."],
797
+ WM: ["........................", "........................", "............YYYY........", "...........YYYYYY.......", "...........YYYEYYOO.....", "...........YYYYYOOOO....", ".........yy.YYYY........", ".......YyyyYYYYY........", ".......YYYYYYYYYY.......", ".......YYYyyyyYYYY......", ".......YYYyyyyyYYY......", "........YYYYYYYYY.......", ".........YYYYYYY........", "...........O..O.........", "..........OO.OO.........", "........................"],
798
+ WU: ["........................", "............YYYY........", "...........YYYYYY.......", "...........YYYEYYOO.....", "...........YYYYYOOOO....", ".........yy.YYYY........", ".......YyyyYYYYY........", ".......YYYYYYYYYY.......", ".......YYYyyyyYYYY......", ".......YYYyyyyyYYY......", "........YYYYYYYYY.......", ".........YYYYYYY........", "...........O..O.........", "..........OO.OO.........", "........................", "........................"],
799
+ WA: ["........................", "........................", "........................", "............YYYY........", "...........YYYYYY.......", "...........YYYEYYOO.....", "...........YYYYYOOOO....", "............YYYY........", ".......Y...YYYYY........", ".......YYYYYYYYYY.......", ".......YYYyyyyYYYY......", ".......YYYyyyyyYYY......", "........YYYYYYYYY.......", ".........YYYYYYY........", "..........O....O........", ".........OO....OO......."],
800
+ WB: ["........................", "........................", "........................", "........................", "............YYYY........", "...........YYYYYY.......", "...........YYYEYYOO.....", "...........YYYYYOOOO....", ".......Y...YYYYY........", ".......YYYYYYYYYY.......", ".......YYYyyyyYYYY......", ".......YYYyyyyyYYY......", "........YYYYYYYYY.......", ".........YYYYYYY........", "...........O..O.........", "..........OO.OO........."],
801
+ L: ["........................", "........................", "........................", "........................", "........................", "............YYYY........", "...........YYYYYY.......", "...........YYYEYYOO.....", "...........YYYYYOOOO....", ".......Y....YYYY........", ".......YYYYYYYYYYY......", ".......YYYyyyyyYYY......", ".......YYYyyyyyYYY......", "........YYYYYYYYY.......", ".........YYYYYYY........", "........................"],
802
+ LB: ["........................", "........................", "........................", "........................", "........................", "............YYYY........", "...........YYYYYY.......", "...........YYYYYYOO.....", "...........YYYYYOOOO....", ".......Y....YYYY........", ".......YYYYYYYYYYY......", ".......YYYyyyyyYYY......", ".......YYYyyyyyYYY......", "........YYYYYYYYY.......", ".........YYYYYYY........", "........................"],
803
+ LP: ["........................", "........................", "........................", "........................", "........................", "........................", "............YYYY........", "...........YYYYYY.......", "...........YYYEYYOO.....", ".......Y...YYYYYOOOO....", ".......YYYYYYYYYYY......", ".......YYYyyyyyYYY......", ".......YYYyyyyyYYY......", "........YYYYYYYYY.......", ".........YYYYYYY........", "........................"],
804
+ LT: ["........................", "........................", "........................", "........................", "........................", "............YYYY........", "...........YYYYYY.......", "...........YYYEYYOO.....", "...........YYYYYOOOO....", ".......Y....YYYY........", ".......YYYYYYYYYYY......", ".......YYYyyyyyYYY......", ".......YYYyyyyyYYY......", "........YYYYYYYYY.......", ".........YYYYYYY........", "........................"],
805
+ SAD: ["........................", "........................", "........................", "........................", "........................", "............YYYY........", "...........YYYYYY.......", "...........YYYEYYOO.....", "...........YYYLYOOOO....", ".......Y....YYYY........", ".......YYYYYYYYYYY......", ".......YYYyyyyyYYY......", ".......YYYyyyyyYYY......", "........YYYYYYYYY.......", ".........YYYYYYY........", "........................"],
806
+ SADB: ["........................", "........................", "........................", "........................", "........................", "............YYYY........", "...........YYYYYY.......", "...........YYYYYYOO.....", "...........YYYYYOOOO....", ".......Y....YYYY........", ".......YYYYYYYYYYY......", ".......YYYyyyyyYYY......", ".......YYYyyyyyYYY......", "........YYYYYYYYY.......", ".........YYYYYYY........", "........................"],
807
+ Z: ["........................", "........................", "........................", "........................", "........................", "............YYYY........", "...........YYYYYY.......", "...........YYYYYY.......", "...........YYYYYO.......", ".......Y....YYYYyy......", ".......YYYYYYYYYYY......", ".......YYYyyyyyYYY......", ".......YYYyyyyyYYY......", "........YYYYYYYYY.......", ".........YYYYYYY........", "........................"],
808
+ ZB: ["........................", "........................", "........................", "........................", "............YY..........", "...........YYYYY........", "...........YYYYYY.......", "...........YYYYYY.......", "...........YYYYYO.......", ".......Y..Y.YYYYyy......", ".......YYYYYYYYYYY......", ".......YYYyyyyyYYY......", ".......YYYyyyyyYYY......", "........YYYYYYYYY.......", ".........YYYYYYY........", "........................"],
809
+ },
810
+ ghost: {
811
+ S: ["........................", "........................", "........................", ".........gwwwwg.........", "........gwwwwwwg........", ".......gwwwwwwwwg.......", ".......gwwEwwEwwg.......", ".......gwwEwwEwwg.......", ".......gwwwwwwwwg.......", ".......gwwwkkwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwgwwgwwgw.......", ".......g.g.gg.g.g.......", "........................"],
812
+ SB: ["........................", "........................", "........................", ".........gwwwwg.........", "........gwwwwwwg........", ".......gwwwwwwwwg.......", ".......gwwgwwgwwg.......", ".......gwwgwwgwwg.......", ".......gwwwwwwwwg.......", ".......gwwwkkwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwgwwgwwgw.......", ".......g.g.gg.g.g.......", "........................"],
813
+ SP: ["........................", "........................", ".........gwwwwg.........", "........gwwwwwwg........", ".......gwwwwwwwwg.......", ".......gwwEwwEwwg.......", ".......gwwEwwEwwg.......", ".......gwwwwwwwwg.......", ".......gwwwkkwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwgwwgwwgw.......", ".......g.g.gg.g.g.......", "........................", "........................"],
814
+ SE: ["........................", "........................", "........................", ".........gggggg.........", "........gggggggg........", ".......gggggggggg.......", ".......gggEggEggg.......", ".......gggEggEggg.......", ".......gggggggggg.......", ".......ggggkkgggg.......", ".......gggggggggg.......", ".......gggggggggg.......", ".......gggggggggg.......", ".......gggggggggg.......", ".......g.g.gg.g.g.......", "........................"],
815
+ WM: ["........................", "........................", ".........gwwwwg.........", "........gwwwwwwg........", ".......gwwwwwwwwg.......", ".......gwwEwwEwwg.......", ".......gwwEwwEwwg.......", ".......gwwwwwwwwg.......", ".......gwwwEEwwwg.......", ".......gwwwEEwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwgwwgwwgw.......", ".......g.g.gg.g.g.......", "........................", "........................"],
816
+ WU: ["........................", ".........gwwwwg.........", "........gwwwwwwg........", ".......gwwwwwwwwg.......", ".......gwwEwwEwwg.......", ".......gwwEwwEwwg.......", ".......gwwwwwwwwg.......", ".......gwwwEEwwwg.......", ".......gwwwEEwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwgwwgwwgw.......", ".......g.g.gg.g.g.......", "........................", "........................", "........................"],
817
+ WA: ["........................", "........................", "........................", ".........gwwwwg.........", "........gwwwwwwg........", ".......gwwwwwwwwg.......", ".......gwwEwwEwwg.......", ".......gwwEwwEwwg.......", ".......gwwwwwwwwg.......", ".......gwwwkkwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......wgwwgwwgwg.......", "........g.gg.g.g........", "........................"],
818
+ WB: ["........................", "........................", ".........gwwwwg.........", "........gwwwwwwg........", ".......gwwwwwwwwg.......", ".......gwwEwwEwwg.......", ".......gwwEwwEwwg.......", ".......gwwwwwwwwg.......", ".......gwwwkkwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......wgwwgwwgwg.......", "........g.gg.g.g........", "........................", "........................"],
819
+ L: ["........................", "........................", "........................", "........................", "........................", ".........gwwwwg.........", "........gwwwwwwg........", ".......gwwwwwwwwg.......", ".......gwwEwwEwwg.......", ".......gwwEwwEwwg.......", ".......gwwwwwwwwg.......", ".......gwwwkkwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwgwwgwwgw......."],
820
+ LB: ["........................", "........................", "........................", "........................", "........................", ".........gwwwwg.........", "........gwwwwwwg........", ".......gwwwwwwwwg.......", ".......gwwgwwgwwg.......", ".......gwwgwwgwwg.......", ".......gwwwwwwwwg.......", ".......gwwwkkwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwgwwgwwgw......."],
821
+ LP: ["........................", "........................", "........................", "........................", "........................", ".........gwwwwg.........", "........gwwwwwwg........", ".......gwwwwwwwwg.......", ".......gwwEwwEwwg.......", ".......gwwEwwEwwg.......", ".......gwwwwwwwwg.......", ".......gwwwkkwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......wgwwgwwgwg......."],
822
+ LT: ["........................", "........................", "........................", "........................", "........................", ".........gwwwwg.........", "........gwwwwwwg........", ".......gwwwwwwwwg.......", ".......gwwEwwEwwg.......", ".......gwwEwwEwwg.......", ".......gwwwwwwwwg.......", ".......gwwwkkwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwgwwgwwgw......."],
823
+ SAD: ["........................", "........................", "........................", "........................", "........................", ".........gwwwwg.........", "........gwwwwwwg........", ".......gwwwwwwwwg.......", ".......gwwEwwEwwg.......", ".......gwwEwwEwwg.......", ".......gwwLwwLwwg.......", ".......gwwwkkwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwgwwgwwgw......."],
824
+ SADB: ["........................", "........................", "........................", "........................", "........................", ".........gwwwwg.........", "........gwwwwwwg........", ".......gwwwwwwwwg.......", ".......gwwgwwgwwg.......", ".......gwwgwwgwwg.......", ".......gwwwwwwwwg.......", ".......gwwwkkwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwgwwgwwgw......."],
825
+ Z: ["........................", "........................", "........................", "........................", "........................", ".........gwwwwg.........", "........gwwwwwwg........", ".......gwwwwwwwwg.......", ".......gwwgwwgwwg.......", ".......gwwgwwgwwg.......", ".......gwwwwwwwwg.......", ".......gwwwkkwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwgwwgwwgw......."],
826
+ ZB: ["........................", "........................", "........................", "........................", "..........www...........", ".........gwwwwg.........", "........gwwwwwwg........", ".......gwwwwwwwwg.......", ".......gwwgwwgwwg.......", ".......gwwgwwgwwg.......", ".......gwwwwwwwwg.......", ".......gwwwkkwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwwwwwwwwg.......", ".......gwgwwgwwgw......."],
827
+ },
828
+ owl: {
829
+ S: ["........................", "........................", ".......b........b.......", ".......bB......Bb.......", ".......bBBBBBBBBb.......", "......bBeeeBBeeeBb......", "......bBeEeBBeEeBb......", "......bBeeeOOeeeBb......", "......bBBBBOOBBBBb......", "......bBTTTTTTTTBb......", "......bBTtTTtTTTBb......", "......bBTTTtTTtTBb......", "......bBTTTTTTTTBb......", ".......bBBBBBBBBb.......", "........OO....OO........", "........................"],
830
+ SB: ["........................", "........................", ".......b........b.......", ".......bB......Bb.......", ".......bBBBBBBBBb.......", "......bBBBBBBBBBBb......", "......bBBBBBBBBBBb......", "......bBBBBOOBBBBb......", "......bBBBBOOBBBBb......", "......bBTTTTTTTTBb......", "......bBTtTTtTTTBb......", "......bBTTTtTTtTBb......", "......bBTTTTTTTTBb......", ".......bBBBBBBBBb.......", "........OO....OO........", "........................"],
831
+ SP: ["........................", "........................", "........b........b......", "........bB......Bb......", "........bBBBBBBBBb......", ".......bBeeeBBeeeBb.....", ".......bBeEeBBeEeBb.....", ".......bBeeeOOeeeBb.....", ".......bBBBBOOBBBBb.....", "......bBTTTTTTTTBb......", "......bBTtTTtTTTBb......", "......bBTTTtTTtTBb......", "......bBTTTTTTTTBb......", ".......bBBBBBBBBb.......", "........OO....OO........", "........................"],
832
+ SE: ["........................", "........................", ".......b........b.......", ".......bB......Bb.......", ".......bBBBBBBBBb.......", "......bBBBBBBeeeBb......", "......bBBBBBBeEeBb......", "......bBBBBOOeeeBb......", "......bBBBBOOBBBBb......", "......bBTTTTTTTTBb......", "......bBTtTTtTTTBb......", "......bBTTTtTTtTBb......", "......bBTTTTTTTTBb......", ".......bBBBBBBBBb.......", "........OO....OO........", "........................"],
833
+ WM: ["........................", ".......b........b.......", ".......bB......Bb.......", ".......bBBBBBBBBb.......", "....b.bBeeeBBeeeBb.b....", "....bbbBeEeBBeEeBbbb....", ".....bbBeeeOOeeeBbb.....", "......bBBBBOOBBBBb......", "......bBTTTTTTTTBb......", "......bBTtTTtTTTBb......", "......bBTTTtTTtTBb......", "......bBTTTTTTTTBb......", ".......bBBBBBBBBb.......", "........OO....OO........", "........................", "........................"],
834
+ WU: [".......b........b.......", ".......bB......Bb.......", ".......bBBBBBBBBb.......", "....b.bBeeeBBeeeBb.b....", "....bbbBeEeBBeEeBbbb....", ".....bbBeeeOOeeeBbb.....", "......bBBBBOOBBBBb......", "......bBTTTTTTTTBb......", "......bBTtTTtTTTBb......", "......bBTTTtTTtTBb......", "......bBTTTTTTTTBb......", ".......bBBBBBBBBb.......", "........OO....OO........", "........................", "........................", "........................"],
835
+ WA: ["........................", "........................", ".......b........b.......", ".......bB......Bb.......", ".......bBBBBBBBBb.......", "......bBeeeBBeeeBb......", "......bBeEeBBeEeBb......", "......bBeeeOOeeeBb......", "......bBBBBOOBBBBb......", "......bBTTTTTTTTBb......", "......bBTtTTtTTTBb......", "......bBTTTtTTtTBb......", "......bBTTTTTTTTBb......", ".......bBBBBBBBBb.......", ".......OO......OO.......", "........................"],
836
+ WB: ["........................", "........................", "........b........b......", "........bB......Bb......", "........bBBBBBBBBb......", ".......bBeeeBBeeeBb.....", ".......bBeEeBBeEeBb.....", ".......bBeeeOOeeeBb.....", ".......bBBBBOOBBBBb.....", "......bBTTTTTTTTBb......", "......bBTtTTtTTTBb......", "......bBTTTtTTtTBb......", "......bBTTTTTTTTBb......", ".......bBBBBBBBBb.......", "........OO....OO........", "........................"],
837
+ L: ["........................", "........................", "........................", "........................", ".......b........b.......", ".......bBBBBBBBBb.......", "......bBBBBBBBBBBb......", ".....bBeEeBBBeEeBBb.....", ".....bBBBBBOOBBBBBb.....", ".....bBTTTTTTTTTTBb.....", ".....bBTtTTtTTtTTBb.....", ".....bBTTTtTTtTTTBb.....", ".....bBTTTTTTTTTTBb.....", "......bBBBBBBBBBBb......", "........OO....OO........", "........................"],
838
+ LB: ["........................", "........................", "........................", "........................", ".......b........b.......", ".......bBBBBBBBBb.......", "......bBBBBBBBBBBb......", ".....bBBBBBBBBBBBBb.....", ".....bBBBBBOOBBBBBb.....", ".....bBTTTTTTTTTTBb.....", ".....bBTtTTtTTtTTBb.....", ".....bBTTTtTTtTTTBb.....", ".....bBTTTTTTTTTTBb.....", "......bBBBBBBBBBBb......", "........OO....OO........", "........................"],
839
+ LP: ["........................", "........................", "........................", "........................", ".......b.BBBBB..b.......", ".......bBBBBBBBBb.......", "......bBBBBBBBBBBb......", ".....bBeEeBBBeEeBBb.....", ".....bBBBBBOOBBBBBb.....", ".....bBTTTTTTTTTTBb.....", ".....bBTtTTtTTtTTBb.....", ".....bBTTTtTTtTTTBb.....", ".....bBTTTTTTTTTTBb.....", "......bBBBBBBBBBBb......", "........OO....OO........", "........................"],
840
+ LT: ["........................", "........................", "........................", "........................", ".......b........b.......", ".......bBBBBBBBBb.......", "......bBBBBBBBBBBb......", ".....bBeEeBBBeEeBBb.....", ".....bBBBBBOOBBBBBb.....", ".....bBTTTTTTTTTTBb.....", ".....bBTtTTtTTtTTBb.....", ".....bBTTTtTTtTTTBb.....", ".....bBTTTTTTTTTTBb.....", "......bBBBBBBBBBBb......", "........OO....OO........", "........................"],
841
+ SAD: ["........................", "........................", "........................", "........................", ".......b........b.......", ".......bBBBBBBBBb.......", "......bBBBBBBBBBBb......", ".....bBeEeBBBeEeBBb.....", ".....bBBLBBOOBLBBBb.....", ".....bBTTTTTTTTTTBb.....", ".....bBTtTTtTTtTTBb.....", ".....bBTTTtTTtTTTBb.....", ".....bBTTTTTTTTTTBb.....", "......bBBBBBBBBBBb......", "........OO....OO........", "........................"],
842
+ SADB: ["........................", "........................", "........................", "........................", ".......b........b.......", ".......bBBBBBBBBb.......", "......bBBBBBBBBBBb......", ".....bBBBBBBBBBBBBb.....", ".....bBBBBBOOBBBBBb.....", ".....bBTTTTTTTTTTBb.....", ".....bBTtTTtTTtTTBb.....", ".....bBTTTtTTtTTTBb.....", ".....bBTTTTTTTTTTBb.....", "......bBBBBBBBBBBb......", "........OO....OO........", "........................"],
843
+ Z: ["........................", "........................", "........................", "........................", ".......b........b.......", ".......bBBBBBBBBb.......", "......bBBBBBBBBBBb......", ".....bBBbbbBBbbbBBb.....", ".....bBBBBBOOBBBBBb.....", ".....bBTTTTTTTTTTBb.....", ".....bBTtTTtTTtTTBb.....", ".....bBTTTtTTtTTTBb.....", ".....bBTTTTTTTTTTBb.....", "......bBBBBBBBBBBb......", "........OO....OO........", "........................"],
844
+ ZB: ["........................", "........................", "........................", "........................", ".......b.BBBBB..b.......", ".......bBBBBBBBBb.......", "......bBBBBBBBBBBb......", ".....bBBbbbBBbbbBBb.....", ".....bBBBBBOOBBBBBb.....", ".....bBTTTTTTTTTTBb.....", ".....bBTtTTtTTtTTBb.....", ".....bBTTTtTTtTTTBb.....", ".....bBTTTTTTTTTTBb.....", "......bBBBBBBBBBBb......", "........OO....OO........", "........................"],
845
+ },
846
+ axolotl: {
847
+ S: ["........................", "........................", "........................", "..............m..m......", ".............mkmmkm.....", "............mkkkkkkm....", "..........m.kkEkkEkkm...", ".........mkmkkkkkkkkm...", "..........m.kkkmmkkk....", "....m.......kkkkkkk.....", "....kkkkkkkkkkkkkk......", ".....kkkkkkkkkkkkk......", "......kkkkkkkkkkk.......", ".......kk..kk..kk.......", ".......mm..mm..mm.......", "........................"],
848
+ SB: ["........................", "........................", "........................", "..............m..m......", ".............mkmmkm.....", "............mkkkkkkm....", "..........m.kkkkkkkkm...", ".........mkmkkkkkkkkm...", "..........m.kkkmmkkk....", "....m.......kkkkkkk.....", "....kkkkkkkkkkkkkk......", ".....kkkkkkkkkkkkk......", "......kkkkkkkkkkk.......", ".......kk..kk..kk.......", ".......mm..mm..mm.......", "........................"],
849
+ SP: ["........................", "........................", "........................", "..............m..m......", ".............mkmmkm.....", "..........m.mkkkkkkm....", ".........mkmkkEkkEkkm...", "..........m.kkkkkkkkm...", "............kkkmmkkk....", "....m.......kkkkkkk.....", "....kkkkkkkkkkkkkk......", ".....kkkkkkkkkkkkk......", "......kkkkkkkkkkk.......", ".......kk..kk..kk.......", ".......mm..mm..mm.......", "........................"],
850
+ SE: ["........................", "........................", "........................", "..............m..m......", ".............mkmmkm.....", "............mkkkkkkm....", "..........m.kkEkkEkkm...", ".........mkmkkkkkkkkm...", "..m.......m.kkkmmkkk....", "...m........kkkkkkk.....", "....kkkkkkkkkkkkkk......", ".....kkkkkkkkkkkkk......", "......kkkkkkkkkkk.......", ".......kk..kk..kk.......", ".......mm..mm..mm.......", "........................"],
851
+ WM: ["........................", "........................", "..............m..m......", ".............mkmmkm.....", "..........m.mkkkkkkm....", ".........mkmkkEkkEkkm...", "..........m.kkkkkkkkm...", "............kkkmmkkk....", "....m.......kkkkkkk.....", "....kkkkkkkkkkkkkk......", ".....kkkkkkkkkkkkk......", "......kkkkkkkkkkk.......", ".......kk..kk..kk.......", ".......mm..mm..mm.......", "........................", "........................"],
852
+ WU: ["........................", "..............m..m......", ".............mkmmkm.....", "............mkkkkkkm....", "..........m.kkEkkEkkm...", ".........mkmkkkkkkkkm...", "..m.......m.kkkmmkkk....", "...m........kkkkkkk.....", "....kkkkkkkkkkkkkk......", ".....kkkkkkkkkkkkk......", "......kkkkkkkkkkk.......", ".......kk..kk..kk.......", ".......mm..mm..mm.......", "........................", "........................", "........................"],
853
+ WA: ["........................", "........................", "........................", "..............m..m......", ".............mkmmkm.....", "............mkkkkkkm....", "..........m.kkEkkEkkm...", ".........mkmkkkkkkkkm...", "..........m.kkkmmkkk....", ".....m......kkkkkkk.....", "....kkkkkkkkkkkkkk......", ".....kkkkkkkkkkkkk......", "......kkkkkkkkkkk.......", "......kk...kk...kk......", "......mm...mm...mm......", "........................"],
854
+ WB: ["........................", "........................", "........................", "..............m..m......", ".............mkmmkm.....", "..........m.mkkkkkkm....", ".........mkmkkEkkEkkm...", "..........m.kkkkkkkkm...", "............kkkmmkkk....", "....m.......kkkkkkk.....", "....kkkkkkkkkkkkkk......", ".....kkkkkkkkkkkkk......", "......kkkkkkkkkkk.......", ".......kk..kk..kk.......", ".......mm..mm..mm.......", "........................"],
855
+ L: ["........................", "........................", "........................", "........................", "........................", "..............m..m......", ".............mkmmkm.....", "............mkkkkkkm....", "..........m.kkEkkEkkm...", ".........mkmkkkkkkkkm...", "..........m.kkkmmkkk....", "....m.......kkkkkkk.....", "....kkkkkkkkkkkkkk......", ".....kkkkkkkkkkkkk......", "......kkkkkkkkkkk.......", "........................"],
856
+ LB: ["........................", "........................", "........................", "........................", "........................", "..............m..m......", ".............mkmmkm.....", "............mkkkkkkm....", "..........m.kkkkkkkkm...", ".........mkmkkkkkkkkm...", "..........m.kkkmmkkk....", "....m.......kkkkkkk.....", "....kkkkkkkkkkkkkk......", ".....kkkkkkkkkkkkk......", "......kkkkkkkkkkk.......", "........................"],
857
+ LP: ["........................", "........................", "........................", "........................", "........................", "..............m..m......", ".............mkmmkm.....", "..........m.mkkkkkkm....", ".........mkmkkEkkEkkm...", "..........m.kkkkkkkkm...", "............kkkmmkkk....", "....m.......kkkkkkk.....", "....kkkkkkkkkkkkkk......", ".....kkkkkkkkkkkkk......", "......kkkkkkkkkkk.......", "........................"],
858
+ LT: ["........................", "........................", "........................", "........................", "........................", "..............m..m......", ".............mkmmkm.....", "............mkkkkkkm....", "..........m.kkEkkEkkm...", ".........mkmkkkkkkkkm...", "..........m.kkkmmkkk....", "....m.......kkkkkkk.....", "....kkkkkkkkkkkkkk......", ".....kkkkkkkkkkkkk......", "......kkkkkkkkkkk.......", "........................"],
859
+ SAD: ["........................", "........................", "........................", "........................", "........................", "..............m..m......", ".............mkmmkm.....", "............mkkkkkkm....", "..........m.kkEkkEkkm...", ".........mkmkkLkkLkkm...", "..........m.kkkmmkkk....", "....m.......kkkkkkk.....", "....kkkkkkkkkkkkkk......", ".....kkkkkkkkkkkkk......", "......kkkkkkkkkkk.......", "........................"],
860
+ SADB: ["........................", "........................", "........................", "........................", "........................", "..............m..m......", ".............mkmmkm.....", "............mkkkkkkm....", "..........m.kkkkkkkkm...", ".........mkmkkkkkkkkm...", "..........m.kkkmmkkk....", "....m.......kkkkkkk.....", "....kkkkkkkkkkkkkk......", ".....kkkkkkkkkkkkk......", "......kkkkkkkkkkk.......", "........................"],
861
+ Z: ["........................", "........................", "........................", "........................", "........................", "..............m..m......", ".............mkmmkm.....", "............mkkkkkkm....", "..........m.kkkkkkkkm...", ".........mkmkkkkkkkkm...", "..........m.kkkmmkkk....", "....m.......kkkkkkk.....", "....kkkkkkkkkkkkkk......", ".....kkkkkkkkkkkkk......", "......kkkkkkkkkkk.......", "........................"],
862
+ ZB: ["........................", "........................", "........................", "........................", "..............m.........", ".............mm..m......", "............mmkmmkm.....", "..........m.mkkkkkkm....", ".........mmmkkkkkkkkm...", ".........mkmkkkkkkkkm...", "..........m.kkkmmkkk....", "....m.......kkkkkkk.....", "....kkkkkkkkkkkkkk......", ".....kkkkkkkkkkkkk......", "......kkkkkkkkkkk.......", "........................"],
863
+ },
864
+ dragon: {
865
+ S: ["........................", "........................", "..............v...v.....", "..............VV.VV.....", ".......v.......VVVVVV...", "......vVv......VVEVVVVR.", ".....vVVVv....VVVVVVVVVv", "....vVVVVVv..VVVVVYYY...", "...vVVvVVVVVVVVVVYY.....", "..vv..vVVVVVVVVVYY......", ".vR....VVVYYYYYYVV......", ".v.....VVVYYYYYVVV......", "..v.....VVVVVVVVV.......", "...vvvvVVVVVVVVV........", "........VV....VV........", ".......vvv...vvv........"],
866
+ SB: ["........................", "........................", "..............v...v.....", "..............VV.VV.....", ".......v.......VVVVVV...", "......vVv......VVVVVVVR.", ".....vVVVv....VVVVVVVVVv", "....vVVVVVv..VVVVVYYY...", "...vVVvVVVVVVVVVVYY.....", "..vv..vVVVVVVVVVYY......", ".vR....VVVYYYYYYVV......", ".v.....VVVYYYYYVVV......", "..v.....VVVVVVVVV.......", "...vvvvVVVVVVVVV........", "........VV....VV........", ".......vvv...vvv........"],
867
+ SP: ["........................", "........................", "..............v...v...g.", "..............VV.VV....s", ".......v.......VVVVVV.s.", "......vVv......VVEVVVVR.", ".....vVVVv....VVVVVVVVVv", "....vVVVVVv..VVVVVYYY...", "...vVVvVVVVVVVVVVYY.....", "..vv..vVVVVVVVVVYY......", ".vR....VVVYYYYYYVV......", ".v.....VVVYYYYYVVV......", "..v.....VVVVVVVVV.......", "...vvvvVVVVVVVVV........", "........VV....VV........", ".......vvv...vvv........"],
868
+ SE: ["........................", "........................", "..............v...v.....", "..............VV.VV.....", "...............VVVVVV...", "...............VEVVVVVR.", "..............VVVVVVVVVv", "....vvvvvvv..VVVVVYYY...", "...vVVVVVVVVVVVVVYY.....", "..vv.vVVVVVVVVVVYY......", ".vR...vVVYYYYYYYVV......", ".v.....VVVYYYYYVVV......", "..v.....VVVVVVVVV.......", "...vvvvVVVVVVVVV........", ".......VV......VV.......", "......vvv.....vvv......."],
869
+ WM: ["........................", "..............v...v.....", "..............VV.VV....R", ".......v.......VVVVVV.OY", "......vVv......VVEVVVVRO", ".....vVVVv....VVVVVVVVVv", "....vVVVVVv..VVVVVYYY...", "...vVVvVVVVVVVVVVYY.....", "..vv..vVVVVVVVVVYY......", ".vR....VVVYYYYYYVV......", ".v.....VVVYYYYYVVV......", "..v.....VVVVVVVVV.......", "...vvvvVVVVVVVVV........", "........VV....VV........", ".......vvv...vvv........", "........................"],
870
+ WU: ["..............v...v.....", "..............VV.VV.....", "...............VVVVVV...", "...............VEVVVVVR.", "..............VVVVVVVVVv", "....vvvvvvv..VVVVVYYY...", "...vVVVVVVVVVVVVVYY.....", "..vv.vVVVVVVVVVVYY......", ".vR...vVVYYYYYYYVV......", ".v.....VVVYYYYYVVV......", "..v.....VVVVVVVVV.......", "...vvvvVVVVVVVVV........", ".......VV......VV.......", "......vvv.....vvv.......", "........................", "........................"],
871
+ WA: ["........................", "........................", "..............v...v.....", "..............VV.VV.....", "...............VVVVVV...", "...............VEVVVVVR.", "..............VVVVVVVVVv", "....vvvvvvv..VVVVVYYY...", "...vVVVVVVVVVVVVVYY.....", "..vv.vVVVVVVVVVVYY......", ".vR...vVVYYYYYYYVV......", ".v.....VVVYYYYYVVV......", "..v.....VVVVVVVVV.......", "...vvvvVVVVVVVVV........", ".......VV......VV.......", "......vvv.....vvv......."],
872
+ WB: ["........................", "........................", "..............v...v.....", "..............VV.VV.....", ".......v.......VVVVVV...", "......vVv......VVEVVVVR.", ".....vVVVv....VVVVVVVVVv", "....vVVVVVv..VVVVVYYY...", "...vVVvVVVVVVVVVVYY.....", "..vv..vVVVVVVVVVYY......", ".vR....VVVYYYYYYVV......", ".v.....VVVYYYYYVVV......", "..v.....VVVVVVVVV.......", "...vvvvVVVVVVVVV........", "........VV....VV........", ".......vvv...vvv........"],
873
+ L: ["........................", "........................", "........................", "........................", "........................", "..............v...v.....", "..............VV.VV.....", "...............VVVVVV...", "...............VEVVVVVR.", "....vvvvvvv...VVVVVVVVVv", "...vVVVVVVVVVVVVVVYYY...", "..vv.VVVVVVVVVVVVYY.....", ".vR..VVVYYYYYYYYVV......", ".v...VVVVYYYYYYVVVVV....", "..vvvVVVVVVVVVVVVVVVVv..", "........................"],
874
+ LB: ["........................", "........................", "........................", "........................", "........................", "..............v...v.....", "..............VV.VV.....", "...............VVVVVV...", "...............VVVVVVVR.", "....vvvvvvv...VVVVVVVVVv", "...vVVVVVVVVVVVVVVYYY...", "..vv.VVVVVVVVVVVVYY.....", ".vR..VVVYYYYYYYYVV......", ".v...VVVVYYYYYYVVVVV....", "..vvvVVVVVVVVVVVVVVVVv..", "........................"],
875
+ LP: ["........................", "........................", "........................", "........................", "........................", "..............v...v.....", "..............VV.VV....s", "...............VVVVVV.s.", "...............VEVVVVVR.", "....vvvvvvv...VVVVVVVVVv", "...vVVVVVVVVVVVVVVYYY...", "..vv.VVVVVVVVVVVVYY.....", ".vR..VVVYYYYYYYYVV......", ".v...VVVVYYYYYYVVVVV....", "..vvvVVVVVVVVVVVVVVVVv..", "........................"],
876
+ LT: ["........................", "........................", "........................", "........................", "........................", "..............v...v.....", "..............VV.VV.....", "...............VVVVVV...", "...............VEVVVVVR.", "....vvvvvvv...VVVVVVVVVv", "...vVVVVVVVVVVVVVVYYY...", "..vv.VVVVVVVVVVVVYY.....", ".vR..VVVYYYYYYYYVV......", ".v...VVVVYYYYYYVVVVV....", "..vvvVVVVVVVVVVVVVVVVv..", "........................"],
877
+ SAD: ["........................", "........................", "........................", "........................", "........................", "..............v...v.....", "..............VV.VV.....", "...............VVVVVV...", "...............VEVVVVVR.", "....vvvvvvv...VVLVVVVVVv", "...vVVVVVVVVVVVVVVYYY...", "..vv.VVVVVVVVVVVVYY.....", ".vR..VVVYYYYYYYYVV......", ".v...VVVVYYYYYYVVVVV....", "..vvvVVVVVVVVVVVVVVVVv..", "........................"],
878
+ SADB: ["........................", "........................", "........................", "........................", "........................", "..............v...v.....", "..............VV.VV.....", "...............VVVVVV...", "...............VVVVVVVR.", "....vvvvvvv...VVVVVVVVVv", "...vVVVVVVVVVVVVVVYYY...", "..vv.VVVVVVVVVVVVYY.....", ".vR..VVVYYYYYYYYVV......", ".v...VVVVYYYYYYVVVVV....", "..vvvVVVVVVVVVVVVVVVVv..", "........................"],
879
+ Z: ["........................", "........................", "........................", "........................", "........................", "..............v...v.....", "..............VV.VV.....", "...............VVVVVV...", "...............VVVVVVVR.", "....vvvvvvv...VVVVVVVVVv", "...vVVVVVVVVVVVVVVYYY...", "..vv.VVVVVVVVVVVVYY.....", ".vR..VVVYYYYYYYYVV......", ".v...VVVVYYYYYYVVVVV....", "..vvvVVVVVVVVVVVVVVVVv..", "........................"],
880
+ ZB: ["........................", "........................", "........................", "........................", "..............v.........", "..............vV..v.....", "..............VV.VV.....", "...............VVVVVV...", "........vvv....VVVVVVVR.", "....vvvvvvvVVVVVVVVVVVVv", "...vVVVVVVVVVVVVVVYYY...", "..vv.VVVVVVVVVVVVYY.....", ".vR..VVVYYYYYYYYVV......", ".v...VVVVYYYYYYVVVVV....", "..vvvVVVVVVVVVVVVVVVVv..", "........................"],
881
+ },
882
+ gsd: {
883
+ S: [".................G..G...", "................GKGGKG..", "................GTKKTG..", "...............GTETTKKG.", "..............GKTTTTKKKN", ".............GKTTTTTKDDN", "............GKTTTTTD.PP.", "...GGGGGGGGGKTTTTT...p..", "..GKKKKKKKKKKTTTTT......", ".GKKKKKKKKKKKTTTTTG.....", "GKKKKKKKKKKKTTTTTG......", "GKGTTTTTDDDDDTTTTG......", "GKG.GTTTD....GTDTT......", "GKG..GTT.D...GTDTT......", ".GK..GTT.D...GTDTT......", ".....DDD.DD..DD.DDD....."],
884
+ SB: [".................G..G...", "................GKGGKG..", "................GTKKTG..", "...............GTDTTKKG.", "..............GKTTTTKKKN", ".............GKTTTTTKDDN", "............GKTTTTTD.PP.", "...GGGGGGGGGKTTTTT...p..", "..GKKKKKKKKKKTTTTT......", ".GKKKKKKKKKKKTTTTTG.....", "GKKKKKKKKKKKTTTTTG......", "GKGTTTTTDDDDDTTTTG......", "GKG.GTTTD....GTDTT......", "GKG..GTT.D...GTDTT......", ".GK..GTT.D...GTDTT......", ".....DDD.DD..DD.DDD....."],
885
+ SP: [".................G..G...", "................GKGGKG..", "................GTKKTG..", "...............GTETTKKG.", "..............GKTTTTKKKN", ".............GKTTTTTKDDN", "............GKTTTTTDD.P.", "...GGGGGGGGGKTTTTT......", "..GKKKKKKKKKKTTTTT......", ".GKKKKKKKKKKKTTTTTG.....", "GKKKKKKKKKKKTTTTTG......", "GKGTTTTTDDDDDTTTTG......", "GKG.GTTTD....GTDTT......", "GKG..GTT.D...GTDTT......", ".GK..GTT.D...GTDTT......", ".....DDD.DD..DD.DDD....."],
886
+ SE: [".................G...G..", "................GKGGKKG.", "................GTKKKG..", "...............GTETTKKG.", "..............GKTTTTKKKN", ".............GKTTTTTKDDN", "............GKTTTTTD.PP.", "...GGGGGGGGGKTTTTT...p..", "..GKKKKKKKKKKTTTTT......", ".GKKKKKKKKKKKTTTTTG.....", "GKKKKKKKKKKKTTTTTG......", "GKGTTTTTDDDDDTTTTG......", "GKG.GTTTD....GTDTT......", "GKG..GTT.D...GTDTT......", ".GK..GTT.D...GTDTT......", ".....DDD.DD..DD.DDD....."],
887
+ WM: [".................G..G...", "................GKGGKG..", "................GTKKTG..", "...............GTETTKKG.", "..............GKTTTTKKKN", ".............GKTTTTTKDDN", "............GKTTTTTD.PP.", "...GGGGGGGGGKTTTTT...p..", "GGGKKKKKKKKKKTTTTT......", "GKKKKKKKKKKKKTTTTTG.....", ".GKKKKKKKKKKTTTTTG......", "..GTTTTTDDDDDTTTTG......", "....GTTTD....GTDTT......", ".....GTT.D...GTDTT......", ".....GTT.D...GTDTT......", ".....DDD.DD..DD.DDD....."],
888
+ WU: [".................G..G...", "................GKGGKG..", "................GTKKTG..", "...............GTETTKKG.", "GG............GKTTTTKKKN", "GKG..........GKTTTTTKDDN", ".GKG........GKTTTTTD.PP.", "..GKGGGGGGGGKTTTTT...p..", "..GKKKKKKKKKKTTTTT......", ".GKKKKKKKKKKKTTTTTG.....", ".GKTKKKKKKKKTTTTTG......", "..GTTTTTDDDDDTTTTG......", "....GTTTD....GTDTT......", ".....GTT.D...GTDTT......", ".....GTT.D...GTDTT......", ".....DDD.DD..DD.DDD....."],
889
+ WA: [".................G..G...", "................GKGGKG..", "................GTKKTG..", "...............GTETTKKG.", "..............GKTTTTKKKN", ".............GKTTTTTKDDN", "............GKTTTTTD.PP.", "...GGGGGGGGGKTTTTT...p..", "..GKKKKKKKKKKTTTTT......", ".GKKKKKKKKKKKTTTTTG.....", "GKKKKKKKKKKKTTTTTG......", "GKGTTTTTDDDDDTTTTG......", "GKG.GTTTDD...GTDTT......", "GKG..GTT..D.GTD..GT.....", ".GK.GTT....GTD....GT....", "...DDD....DD.......DD..."],
890
+ WB: [".................G..G...", "................GKGGKG..", "................GTKKTG..", "...............GTETTKKG.", "..............GKTTTTKKKN", ".............GKTTTTTKDDN", "............GKTTTTTD.PP.", "...GGGGGGGGGKTTTTT...p..", "..GKKKKKKKKKKTTTTT......", ".GKKKKKKKKKKKTTTTTG.....", "GKKKKKKKKKKKTTTTTG......", "GKGTTTTTDDDDDTTTTG......", "GKG.GTTTD...GTDTT.......", "GKG...GTTD..GTD.GT......", ".GK....GTTD.GT...GT.....", ".......DDD.DDD....DDD..."],
891
+ L: ["........................", "........................", "........................", ".................G..G...", "................GKGGKG..", "................GTKKTG..", "...............GTETTKKG.", "..............GKTTTTKKKN", ".............GKTTTTTKDDN", "............GKTTTTTD.PP.", ".....GGGGGGGKTTTTT...p..", "..GGGKKKKKKKKTTTTTG.....", ".GKKKKKKKKKKKTTTTTTG....", "GKKKKKKKKKKKTTTTTTTTG...", "GKKKKTTTTTTTTTTTTTTTTTG.", "GGDDDDDDDDDDDDDDDDDDDDD."],
892
+ LB: ["........................", "........................", "........................", ".................G..G...", "................GKGGKG..", "................GTKKTG..", "...............GTDTTKKG.", "..............GKTTTTKKKN", ".............GKTTTTTKDDN", "............GKTTTTTD.PP.", ".....GGGGGGGKTTTTT...p..", "..GGGKKKKKKKKTTTTTG.....", ".GKKKKKKKKKKKTTTTTTG....", "GKKKKKKKKKKKTTTTTTTTG...", "GKKKKTTTTTTTTTTTTTTTTTG.", "GGDDDDDDDDDDDDDDDDDDDDD."],
893
+ LP: ["........................", "........................", "........................", ".................G..G...", "................GKGGKG..", "................GTKKTG..", "...............GTETTKKG.", "..............GKTTTTKKKN", ".............GKTTTTTKDDN", "............GKTTTTTDD.P.", ".....GGGGGGGKTTTTT......", "..GGGKKKKKKKKTTTTTG.....", ".GKKKKKKKKKKKTTTTTTG....", "GKKKKKKKKKKKTTTTTTTTG...", "GKKKKTTTTTTTTTTTTTTTTTG.", "GGDDDDDDDDDDDDDDDDDDDDD."],
894
+ LT: ["........................", "........................", "........................", ".................G..G...", "................GKGGKG..", "................GTKKTG..", "...............GTETTKKG.", "..............GKTTTTKKKN", ".............GKTTTTTKDDN", "............GKTTTTTD.PP.", ".....GGGGGGGKTTTTT...p..", "..GGGKKKKKKKKTTTTTG.....", ".GKKKKKKKKKKKTTTTTTG....", "GKKKKKKKKKKKTTTTTTTTG...", "GGKKKTTTTTTTTTTTTTTTTTG.", "G.DDDDDDDDDDDDDDDDDDDDD."],
895
+ SAD: ["........................", "........................", "........................", "........................", "................GGGGGG..", "................GKKKKG..", "...............GTETTKKG.", "..............GKTTTTKKKN", ".............GKTTTTTKDDN", "............GKTTTTTDD...", ".....GGGGGGGKTTTTT......", "..GGGKKKKKKKTTTTTTG.....", ".GKKKKKKKKKKTTTTTTTG....", "GKKKKKKKKKKKTTTTTTTTG...", "GKKKKTTTTTTTTTTTTTTTTTG.", "GGDDDDDDDDDDDDDDDDDDDDD."],
896
+ SADB: ["........................", "........................", "........................", "........................", "................GGGGGG..", "................GKKKKG..", "...............GTDTTKKG.", "..............GKTTTTKKKN", ".............GKTTTTTKDDN", "............GKTTTTTDD...", ".....GGGGGGGKTTTTT......", "..GGGKKKKKKKTTTTTTG.....", ".GKKKKKKKKKKTTTTTTTG....", "GKKKKKKKKKKKTTTTTTTTG...", "GKKKKTTTTTTTTTTTTTTTTTG.", "GGDDDDDDDDDDDDDDDDDDDDD."],
897
+ Z: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", "................G.G.....", "...............GKGKG....", "....GGGGGGG...GKTKTKG...", "..GGKKKKKKKGGGKTDDTTKG..", ".GKKKKKKKKTKKKTTTTTTKKKN", "GKKKKKKKKKTTTTTTTTTTKDDN", "GKKKTTTTTTTTTTTTTTTTKKG.", "GKKTTTTTTTTTTTTTTDTTTTTG", "GGDDDDDDDDDDDDDDDDDDDDD."],
898
+ ZB: ["........................", "........................", "........................", "........................", "........................", "........................", "........................", "................G.G.....", "....GGGGGGG....GKGKG....", "..GGKKKKKKKGGGGKTKTKG...", ".GKKKKKKKKTKKKKTDDTTKG..", ".KKKKKKKKKTTTTTTTTTTKKKN", "GKKKTTTTTTTTTTTTTTTTKDDN", "GKKTTTTTTTTTTTTTTTTTKKG.", "GKKTTTTTTTTTTTTTTDTTTTTG", "GGDDDDDDDDDDDDDDDDDDDDD."],
899
+ },
693
900
  };
694
901
 
695
902
  const PX_W = 24; // ширина пиксельного спрайта в колонках
@@ -709,9 +916,15 @@ type PxMode = "bg" | "fg";
709
916
  * цвета до базовых 16: угольная шерсть становится чёрной, розовый язык — пурпурным.
710
917
  * 256-цветную палитру он рисует как есть.
711
918
  */
712
- const PX_256: Record<string, number> = { K: 237, D: 234, G: 243, A: 172, N: 232, P: 211, p: 132 };
919
+ const PX_256: Record<string, number> = {
920
+ K: 237, D: 234, G: 243, A: 172, N: 232, P: 211, p: 132,
921
+ "E": 233, "e": 255, "w": 255, "g": 250, "Y": 221, "y": 172, "O": 208, "C": 79, "c": 30, "B": 137, "b": 94, "k": 217, "m": 168, "V": 71, "v": 28, "R": 167, "T": 172, "t": 130, "L": 111, "s": 242, "S": 247,
922
+ };
713
923
  /** Детали важнее шерсти: если в клетке два разных цвета, а фон рисовать нельзя */
714
- const PX_PRIO: Record<string, number> = { A: 5, N: 4, P: 4, p: 3, G: 2, K: 1, D: 1 };
924
+ const PX_PRIO: Record<string, number> = {
925
+ A: 5, N: 4, P: 4, p: 3, G: 2, K: 1, D: 1,
926
+ "E": 5, "e": 3, "w": 1, "g": 2, "Y": 1, "y": 2, "O": 3, "C": 1, "c": 2, "B": 1, "b": 2, "k": 2, "m": 2, "V": 1, "v": 2, "R": 3, "T": 1, "t": 2, "L": 4, "s": 2, "S": 1,
927
+ };
715
928
 
716
929
  function autoPxMode(): PxMode {
717
930
  const te = `${process.env.TERMINAL_EMULATOR ?? ""} ${process.env.TERM_PROGRAM ?? ""}`;
@@ -759,13 +972,13 @@ const GROW_LEVEL = 5;
759
972
 
760
973
 
761
974
  const SPECIES: Record<string, Species> = {
762
- blob: { mini: "(E_E)", label: "Блоб", rarity: "common", art: [" .---. ", " ( E E ) ", " `---' "] },
763
- cat: { mini: "(=E.E=)", label: "Кот", rarity: "common", art: [" /\\_/\\ ", "( E.E ) ", " > ^ < "] },
764
- duck: { mini: "<(E )", label: "Утка", rarity: "uncommon", art: [" __ ", " <(E )___", " ( ._> /", " `---' "] },
765
- ghost: { mini: "(EoE)", label: "Призрак", rarity: "uncommon", art: [" .-. ", " (E E) ", " | O | ", " '~~~' "] },
766
- owl: { mini: "{E,E}", label: "Сова", rarity: "rare", art: [" ,___, ", " [E,E] ", " /)__) ", " -\"--\"- "] },
767
- axolotl: { mini: "}(EvE){", label: "Аксолотль", rarity: "epic", art: ["}~(___)~{", "}~(E E)~{", " ( v ) ", " ^^ ^^ "] },
768
- dragon: { mini: "<(EwE)>~", label: "Дракон", rarity: "legendary", art: [" /\\ /\\ ", " ( E E )~", " \\ ww / ", " `--' "] },
975
+ blob: { px: ZOO_PX.blob, items: [IT.cherry, IT.sugar], mini: "(E_E)", label: "Блоб", rarity: "common", art: [" .---. ", " ( E E ) ", " `---' "] },
976
+ cat: { px: ZOO_PX.cat, items: [IT.yarn, IT.mouse], mini: "(=E.E=)", label: "Кот", rarity: "common", art: [" /\\_/\\ ", "( E.E ) ", " > ^ < "] },
977
+ duck: { px: ZOO_PX.duck, items: [IT.rubber, IT.bread], mini: "<(E )", label: "Утка", rarity: "uncommon", art: [" __ ", " <(E )___", " ( ._> /", " `---' "] },
978
+ ghost: { px: ZOO_PX.ghost, items: [IT.lantern, IT.cookie], mini: "(EoE)", label: "Призрак", rarity: "uncommon", art: [" .-. ", " (E E) ", " | O | ", " '~~~' "] },
979
+ owl: { px: ZOO_PX.owl, items: [IT.feather, IT.book], mini: "{E,E}", label: "Сова", rarity: "rare", art: [" ,___, ", " [E,E] ", " /)__) ", " -\"--\"- "] },
980
+ axolotl: { px: ZOO_PX.axolotl, items: [IT.bubbles, IT.shell], mini: "}(EvE){", label: "Аксолотль", rarity: "epic", art: ["}~(___)~{", "}~(E E)~{", " ( v ) ", " ^^ ^^ "] },
981
+ dragon: { px: ZOO_PX.dragon, items: [IT.coin, IT.gold], mini: "<(EwE)>~", label: "Дракон", rarity: "legendary", art: [" /\\ /\\ ", " ( E E )~", " \\ ww / ", " `--' "] },
769
982
  veo: {
770
983
  mini: "U(E.E)U", // щенок: уши висят
771
984
  frames: [[" _/\\ /\\_ ", " / /______\\ \\", " \\_| E E |_/", " | ,--, | ", " \\ (__) / ", " \\_\\U/_/ "], [" /\\ /\\_ ", " / /______\\ \\", " \\_| E E |_/", " | ,--, | ", " \\ (__) / ", " \\_\\/_/ "]], // язык, дёрнул ухом
@@ -781,6 +994,8 @@ const SPECIES: Record<string, Species> = {
781
994
  say: VEO_SAY,
782
995
  },
783
996
  gsd: {
997
+ px: ZOO_PX.gsd, // спрайт Сальсы в чепрачном окрасе
998
+ items: [IT.frisbee, IT.rope],
784
999
  mini: "V(E.E)U", // одно ухо стоит, второе висит
785
1000
  frames: [[" /\\ __ ", " / \\______/ \\_ ", " | E E |\\__/", " \\ ## / ", " \\#(__)#/ ", " \\_\\U/_/ "], [" /\\ /\\ ", " / \\______/ \\", " | E E | ", " \\ ## / ", " \\#(__)#/ ", " \\_\\/_/ "]], // язык; висячее ухо на миг встало
786
1001
  framesGrown: [[" /\\ /\\ ", " / \\ / \\", " | \\____/ |", " \\ E ## E / ", " \\ ##||## / ", " \\#(__)#/ ", " \\_\\U/_/ "], [" /\\ |\\ ", " / \\ / \\", " | \\____/ |", " \\ E ## E / ", " \\ ##||## / ", " \\#(__)#/ ", " \\_\\/_/ "]],
@@ -802,6 +1017,7 @@ const SPECIES: Record<string, Species> = {
802
1017
  art: [" /\\ /\\ ", " / \\____/ \\", " \\ E E /", " \\ .. / ", " \\ (__) / ", " \\_\\/_/ ", " \\U/ "],
803
1018
  frames: [[" /\\ /\\ ", " / \\____/ \\", " \\ E E /", " \\ .. / ", " \\ (__) / ", " \\_\\/_/ ", " U "], [" /\\ |\\ ", " / \\____/ \\", " \\ E E /", " \\ .. / ", " \\ (__) / ", " \\_\\/_/ ", " \\U/ "]],
804
1019
  px: VEO_PX,
1020
+ items: [IT.ball, IT.bone],
805
1021
  say: VEO_SAY,
806
1022
  },
807
1023
  };
@@ -989,8 +1205,8 @@ export default function buddy(pi: ExtensionAPI) {
989
1205
  /** Поза пиксельного пса прямо сейчас; у ASCII-питомцев позы нет */
990
1206
  function pose(): "stand" | "walk" | "lie" | null {
991
1207
  if (!pxOn()) return null;
992
- const st = pxState(mood());
993
- return st === "work" ? "walk" : st === "rest" || st === "sad" || st === "sleep" ? "lie" : "stand";
1208
+ const st = curState(mood());
1209
+ return st === "work" ? "walk" : PX_LYING.has(st) ? "lie" : "stand";
994
1210
  }
995
1211
 
996
1212
  function pool(t: Topic): string[] {
@@ -1044,6 +1260,7 @@ export default function buddy(pi: ExtensionAPI) {
1044
1260
  let stbText = "";
1045
1261
  let stbSince = 0;
1046
1262
  function standby(): string {
1263
+ if (sceneOn()) return scene!.text; // играет — и подпись про игру
1047
1264
  const m = mood();
1048
1265
  const t: Topic =
1049
1266
  m === "work" ? "stbWork" : m === "sleep" ? "stbSleep" : m === "sad" ? "stbSad" : s.muted ? "stbMute" : "stbIdle";
@@ -1150,10 +1367,74 @@ export default function buddy(pi: ExtensionAPI) {
1150
1367
  return Date.now() - s.lastActivity > 3 * 60_000 ? "rest" : "idle"; // заскучал — прилёг
1151
1368
  }
1152
1369
 
1153
- /** Текущий кадр: в тихом режиме — первый кадр состояния, без анимации */
1370
+ // ---- игра с любимым предметом ----
1371
+ let scene: { item: PxItem; until: number; text: string } | null = null;
1372
+ const sceneOn = () => !!scene && Date.now() < scene.until && pxOn() && !working;
1373
+
1374
+ function startScene(item?: PxItem, ms = 12_000) {
1375
+ const items = spec(s).items;
1376
+ const it = item ?? (items?.length ? items[Math.floor(Math.random() * items.length)] : undefined);
1377
+ if (!it) return false;
1378
+ scene = { item: it, until: Date.now() + ms, text: pick(it.say) };
1379
+ return true;
1380
+ }
1381
+
1382
+ /** Предмет поверх кадра: у земли, в ближайшем свободном месте справа; мячик подпрыгивает */
1383
+ function withItem(grid: string[], it: PxItem, t: number): string[] {
1384
+ const h = it.art.length;
1385
+ const w = Math.max(...it.art.map((r) => r.length));
1386
+ const free = (x: number) => {
1387
+ for (let y = 16 - h; y < 16; y++) for (let i = 0; i < w; i++) if ((grid[y]?.[x + i] ?? ".") !== ".") return false;
1388
+ return true;
1389
+ };
1390
+ let x0 = PX_W - w;
1391
+ for (let x = PX_W - w; x >= 0; x--) if (free(x)) { x0 = x; break; }
1392
+ const up = it.mode === "toss" ? [0, 2, 3, 2][t % 4] : 0;
1393
+ const out = grid.map((r) => r.padEnd(PX_W, ".").split(""));
1394
+ it.art.forEach((row, i) => {
1395
+ const y = 16 - h + i - up;
1396
+ if (y >= 0) [...row].forEach((c, j) => { if (c !== "." && x0 + j < PX_W) out[y][x0 + j] = c; });
1397
+ });
1398
+ return out.map((r) => r.join(""));
1399
+ }
1400
+
1401
+ /**
1402
+ * Переходы: при смене состояния питомец сначала возвращается в базовую стойку
1403
+ * (S — стоит, L — лежит), а если меняется поза — проходит через обе. Затем новая анимация
1404
+ * играется с первого кадра. Машина состояний сдвигается раз в тик (500 мс).
1405
+ */
1406
+ let mState: PxState | "" = "";
1407
+ let mStart = 0;
1408
+ let mQueue: PxFrame[] = [];
1409
+ const baseOf = (st: PxState): PxFrame => (PX_LYING.has(st) ? "L" : "S");
1410
+
1411
+ function curState(m: Mood): PxState {
1412
+ if (sceneOn() && m !== "sleep" && m !== "sad") return scene!.item.mode;
1413
+ return pxState(m);
1414
+ }
1415
+
1416
+ function pxTick() {
1417
+ const st = curState(mood());
1418
+ if (st !== mState) {
1419
+ mQueue = mState && baseOf(mState) !== baseOf(st) ? [baseOf(mState), baseOf(st)] : [baseOf(st)];
1420
+ mState = st;
1421
+ mStart = animN + mQueue.length;
1422
+ } else if (mQueue.length) mQueue.shift();
1423
+ }
1424
+
1425
+ /** Текущий кадр: в тихом режиме — первый кадр состояния, без анимации и переходов */
1154
1426
  function pxFrame(m: Mood): PxFrame {
1155
- const a = PX_ANIM[pxState(m)];
1156
- return quiet() ? a.seq[0] : a.seq[Math.floor(animN / a.every) % a.seq.length];
1427
+ const st = curState(m);
1428
+ const a = PX_ANIM[st];
1429
+ if (quiet()) return a.seq[0];
1430
+ if (st === mState && mQueue.length) return mQueue[0];
1431
+ return a.seq[Math.floor(Math.max(0, animN - mStart) / a.every) % a.seq.length];
1432
+ }
1433
+
1434
+ /** Сетка кадра с предметом, если идёт игра */
1435
+ function pxGrid(m: Mood): string[] {
1436
+ const grid = spec(s).px![pxFrame(m)];
1437
+ return sceneOn() ? withItem(grid, scene!.item, animN - mStart) : grid;
1157
1438
  }
1158
1439
 
1159
1440
  /**
@@ -1177,7 +1458,7 @@ export default function buddy(pi: ExtensionAPI) {
1177
1458
  function eyesNow(): { m: Mood; lines: string[] } {
1178
1459
  const m = mood();
1179
1460
  const eye = blink && (m === "idle" || m === "work") ? "-" : EYES[m];
1180
- if (pxOn()) return { m, lines: pxRender(spec(s).px![pxFrame(m)], false, pxMode()) }; // моргание — в самих кадрах
1461
+ if (pxOn()) return { m, lines: pxRender(pxGrid(m), false, pxMode()) }; // моргание — в самих кадрах
1181
1462
  const fr = framesFor(s);
1182
1463
  const idx = quiet() ? 0 : frameIndex(m, fr.length);
1183
1464
  return { m, lines: fr[idx].map((l) => l.replace(/E/g, eye)) };
@@ -1441,9 +1722,10 @@ export default function buddy(pi: ExtensionAPI) {
1441
1722
  // кадр анимации/декор сменился — перерисовываем (только тогда, чтобы не дёргать TUI зря)
1442
1723
  const m0 = mood();
1443
1724
  const fc = framesFor(s).length;
1444
- const sig = () => `${pxOn() ? pxFrame(m0) : frameIndex(m0, fc)}${decoFor(m0)}`;
1725
+ const sig = () => `${pxOn() ? pxFrame(m0) + (sceneOn() ? animN - mStart : "") : frameIndex(m0, fc)}${decoFor(m0)}`;
1445
1726
  const before = sig();
1446
1727
  animN = n;
1728
+ if (pxOn()) pxTick();
1447
1729
  const animChanged = sig() !== before;
1448
1730
  // моргаем ~раз в 4 секунды
1449
1731
  const nextBlink = n % 8 === 0;
@@ -1461,6 +1743,11 @@ export default function buddy(pi: ExtensionAPI) {
1461
1743
  }
1462
1744
  const now = Date.now();
1463
1745
  if (working && n % 60 === 0 && now - workStart > 20_000) chat("think", 0.3, 4000);
1746
+ // в простое иногда сам берёт любимую игрушку (не во сне и не в грусти)
1747
+ if (!working && !quiet() && pxOn() && n % 120 === 60 && !sceneOn()) {
1748
+ const md = mood();
1749
+ if ((md === "idle" || md === "happy") && Math.random() < 0.35) startScene();
1750
+ }
1464
1751
  if (!working && !quiet() && n % 360 === 0) {
1465
1752
  const idleMs = now - s.lastActivity;
1466
1753
  if (idleMs > 3 * 60_000 && idleMs < 30 * 60_000) chat("idle", 0.35, 6000);
@@ -1895,6 +2182,10 @@ export default function buddy(pi: ExtensionAPI) {
1895
2182
  case "play":
1896
2183
  if (s.energy < 15) shout("tired", 4000, true);
1897
2184
  else {
2185
+ const want = rest.join(" ").toLowerCase();
2186
+ const its = spec(s).items ?? [];
2187
+ const it = its.find((x) => want && x.name.startsWith(want)) ?? its.find((x) => x.mode === "toss");
2188
+ if (it && startScene(it, 10_000)) say(scene!.text, 4000);
1898
2189
  s.joy = clamp(s.joy + 25);
1899
2190
  s.energy = clamp(s.energy - 15);
1900
2191
  s.food = clamp(s.food - 5);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@euhenio/pi-buddy",
3
- "version": "1.0.0",
4
- "description": "Тамагочи для pi: питомец сбоку от поля ввода (ASCII и пиксельный ВЕО), реагирует на работу агента",
3
+ "version": "1.1.2",
4
+ "description": "Тамагочи для pi: питомец сбоку от поля ввода — пиксельные ВЕО, овчарка, кот, утка, сова, дракон и другие; реагирует на работу агента",
5
5
  "keywords": [
6
6
  "pi-package",
7
7
  "pi-extension",