# Привет, Мир!

Это мой обновленный Starter Pack гайд на **Pixel Game 2D (PG2D)**, актуальный для версии **PG17U+**. Я буду дополнять его с каждым обновлением. Здесь собрано всё, что нужно знать игрокам и мододелам.

---

## Что нового в PG17U+?
*   **Система Layers:** Добавлена продвинутая система слоёв, позволяющая накладывать блоки и их текстуры друг на друга.
*   **Попиксельное редактирование:** Стамеской можно разрушать и восстанавливать конкретные пиксели в блоках и слоях.
*   **Карманные измерения (Pocket Dimensions):** Комнатные двери (`room_door`) теперь ведут в процедурно-генерируемые мини-комнаты. Всё, что вы делаете там — сохраняется.
*   **Книга осязаемости:** Позволяет делать любые блоки проходимыми.
*   **Книга знаний:** Даёт детальную информацию о выбранном блоке, включая количество неповреждённых пикселей в каждом слое.
*   **Режим камеры Z:** Переключение между центрированием на игроке и режимом "как в Terraria" (камера между игроком и курсором).
*   **Умный Drag-and-Drop:** Улучшенное перетаскивание предметов в инвентаре и сундуках.
*   **Книга копирования и вставки:** Умеет копировать не только верхний слой, но и ВСЕ слои сразу (ПКМ).

---

## Гайд для игроков

### База

#### Управление
*   **A / D:** Движение влево / вправо.
*   **W / S:** Подъём / спуск по лестнице (также работает в режиме полёта).
*   **Пробел:** Прыжок. В воде или замедленном времени — работает как вертикальный рывок.
*   **ЛКМ (Левая Кнопка Мыши):**
    *   **Инструменты:** Взаимодействие согласно их функции (см. раздел "Инструменты").
    *   **Обычный предмет:** Добыча блока.
*   **ПКМ (Правая Кнопка Мыши):**
    *   **Инструменты:** Альтернативное взаимодействие (восстановление, пипетка).
    *   **Обычный предмет:** Установка блока. Если место занято — новый блок размещается как **скрытый (нижний)** слой.
*   **E:** Взаимодействие (открыть/закрыть дверь, поджечь ТНТ, открыть сундук).
*   **Tab:** Открыть / закрыть инвентарь.
*   **Колесо мыши:** Выбор слота на хотбаре (1-9).
*   **Shift + Колесо:** Приближение / отдаление камеры (или клавиши **+/-**).
*   **1-9:** Быстрый выбор слота на хотбаре.
*   **0 (ноль):** Открыть консоль команд.
*   **G:** Включить / выключить сетку пикселей (на блоке под курсором).
*   **Z:** Переключить режим камеры (на игрока / следование за мышью "Terraria-style").
*   **H:** Показать / скрыть рамку выделения (подсветку блока под курсором).
*   **F11:** Полноэкранный режим.
*   **Esc:** Пауза / Закрыть инвентарь.
*   **V (в меню паузы):** Открыть список достижений.
*   **S (в меню паузы):** Сохранить и выйти в главное меню.

#### Инструменты и их механики

1.  **Стамеска (Chisel):**
    *   **ЛКМ:** Разрушает видимый пиксель. Разрушение идёт **сверху вниз**: сначала базовый блок, потом слои под ним.
    *   **ПКМ:** Восстанавливает разрушенный пиксель. Восстановление идёт **снизу вверх**: сначала нижние слои, потом базовый блок. Идеально для окон и проходов.

2.  **Кисть (Brush):**
    *   **ЛКМ:** Рисует на **бумаге** (Paper). Позволяет создавать пиксель-арт.
    *   **ПКМ:** **Пипетка**. Копирует цвет с любого пикселя на экране (включая рисунки на бумаге и обычные блоки).
    *   *Цвет кисти отображается слева внизу экрана при её выборе.*

3.  **Гаечный ключ (Spanner):**
    *   **ЛКМ:** Зеркально отражает дверь (регулярную, люк, комнатную).
    *   **ПКМ:** Переключает **неосязаемость** (возможность пройти сквозь) блока под курсором.

4.  **Книга копирования и вставки (Book Copy):**
    *   **ЛКМ:** Копирует только **верхний видимый слой** (базовый блок) со всеми его разрушенными пикселями и рисунками.
    *   **ПКМ:** Копирует **все слои** (и базовый, и все скрытые под ним).
    *   **Shift + ЛКМ/ПКМ:** Вставляет скопированное.
        *   Если в буфере один слой — он вставится под текущий блок (как скрытый слой).
        *   Если в буфере несколько слоёв — они вставятся все разом, а текущий блок станет самым нижним в стеке.

5.  **Книга знаний (Book Knowledge):**
    *   **Пассивно:** При наведении на блок показывает:
        *   Расширенную рамку с индикацией слоёв.
        *   Полную информацию о каждом слое (название блока и количество целых пикселей `[целых/64]`).

6.  **Книга осязаемости (Book Intangible):**
    *   **ЛКМ:** Делает блок **неосязаемым** (можно проходить насквозь).
    *   **ПКМ:** Делает блок **осязаемым** (обратно твёрдым).
    *   **Shift + ЛКМ/ПКМ:** Применяет эффект на область **3x3** блока вокруг курсора.

7.  **Часы (Watch):**
    *   **ЛКМ:** Остановить время (останавливает физику воды, огня, гравитацию песка). Повторное нажатие — возобновить время.
    *   **ПКМ:** Замедлить время до 30% (слоу-мо). Повторное нажатие — отключить замедление.
    *   *Не забудьте "разморозить" всё, прежде чем сохранять мир!*

8.  **Кирка (Pickaxe):**
    *   **ЛКМ:** Мгновенно ломает обычные блоки. Не может ломать Super Stone.

9.  **Очки инженера (Engineer Glasses):**
    *   **Декоративный элемент.** При надевании меняет скин игрока (добавляет очки).

---

### Строительство и система слоёв (Layers)

Самая глубокая механика версии.

*   **Базовый блок:** Самый верхний, видимый блок.
*   **Скрытые слои:** Вы можете накладывать блоки друг на друга. Все слои под базовым — скрыты.
*   **Как создать слой:** Просто поставьте блок на уже существующий. Новый блок уйдёт **вниз**, став скрытым слоем.
*   **Удаление слоёв:**
    *   **Кирка (ЛКМ):** Снимает верхний видимый слой. Если базовый блок сломан, верхний скрытый слой становится видимым.
    *   **Стамеска (ЛКМ):** Разрушает пиксели в видимых слоях. Уничтожьте все 64 пикселя слоя, и он исчезнет, открыв то, что под ним.
    *   **Стамеска (ПКМ):** Восстанавливает пиксели в слоях под видимым.

---

### Команды консоли

Открывается клавишей **0** или **`** (тильда).

*   **`/help`:** Показать список всех команд и краткую помощь.
*   **`/give <ID_предмета> [количество]`:** Выдать предмет.
    *   *Пример:* `/give tnt 99`
*   **`/tp <x> <y>`:** Телепортироваться на координаты.
    *   *Пример:* `/tp 100 50`
*   **`/time`:** Показать время игры и текущий FPS.
*   **`/clear`:** Очистить историю консоли.
*   **`/heal`:** Полностью восстановить здоровье.
*   **`/god`:** Включить/выключить режим бога (бесконечное здоровье, нет физики).
*   **`/fly`:** Включить/выключить режим полёта (W/S вверх/вниз, только с god).
*   **`/kill`:** Убить всех мобов в загруженном мире.
*   **`/spawn <моб>`:** Создать моба рядом с игроком. Доступные мобы: `angel`, `cursed_flower`, `cursed_mushroom`.
*   **`/list`:** Показать все доступные ID предметов.

### Список ID предметов (для `/give`)
*(Приведены в формате, как вводить в консоли)*

**Блоки и ресурсы:**
`earth`, `grass`, `stone`, `sand`, `glass`, `tree`, `foliage`, `wall`, `wood`, `wallpaper`, `marble`, `wall_stone`, `blood_stone`, `cloud`, `super_stone`

**Жидкости и эффекты:**
`water_source`, `lava`, `nitroglycerin`, `fire`

**Двери и функциональные:**
`door_closed_down`, `room_door_closed_down`, `luke_closed`, `ladder`, `tnt`, `chest`, `paper`

**Инструменты (все выдаются по 1 шт.):**
`chisel`, `brush`, `spanner`, `pickaxe`, `book_copy` (копирования), `book_move` (осязаемости), `book_merge` (знаний), `watch`, `engineer_glasses`

**Декоративные:**
`flower`, `mushroom`

**Пластик (16 цветов):**
`plastic_black`, `plastic_blue`, `plastic_brown`, `plastic_green`, `plastic_grey`, `plastic_light_blue`, `plastic_light_green`, `plastic_light_grey`, `plastic_orange`, `plastic_pink`, `plastic_purple`, `plastic_red`, `plastic_turquoise`, `plastic_violet`, `plastic_white`, `plastic_yellow`

---

## Гайд для мододелов

Структура модов и основные хуки полностью обновлены с учетом движка PG17U+.

### Структура мода

my_mod.mpm (ZIP-архив)
├── manifest.json
├── main.py
└── assets/
├── custom_block.png
└── custom_texture.png
text


### Пример `manifest.json`
```json
{
    "name": "Мой крутой мод",
    "version": "1.0",
    "author": "Ваше Имя",
    "description": "Мод, добавляющий новые блоки и механики для PG17U+"
}

Документация по API (обновлённый main.py)
python

def init_mod(game):
    """
    Главная функция, вызываемая при загрузке мода в игру.
    Объект 'game' предоставляет доступ ко всем основным системам.
    """
    print(f"Мод успешно загружен в мир: {game.world.world_name}")

    # --- Основные объекты ---
    player = game.player
    world = game.world
    textures = game.textures  # Словарь вида {"earth.png": pygame.Surface, ...}

    # --- Регистрация новых команд ---
    # Позволяет добавить свою команду в консоль (клавиша `0`)
    game.console.register_command(
        name="mycmd", 
        func=my_custom_function, 
        description="Моя тестовая команда"
    )

    # --- Работа с миром (World) ---
    # Основа: работа с чанками происходит автоматически, вы взаимодействуете с мировыми координатами
    from PG17_plus import BlockType
    
    # Установка блока
    world.set_block(x=10, y=50, block_type=BlockType.MARBLE)
    
    # Установка фонового слоя (обои, доски)
    world.set_background(x=10, y=50, value=BlockType.WALLPAPER)
    
    # Получение блока
    current_block = world.get_block(x=10, y=50)

    # --- Продвинутая работа со слоями ---
    # Получить все слои в координатах
    layers = world.get_block_layers(x=10, y=50)
    
    # Добавить слой под существующий
    world.add_block_layer(x=10, y=50, block_type=BlockType.GLASS)
    
    # Поправить конкретный пиксель в указанном слое
    # world.modify_top_layer_pixel(x, y, pixel_x, pixel_y)
    
    # Проверить/установить неосязаемость
    is_passable = world.is_block_intangible(x=10, y=50)
    world.set_block_intangible(x=10, y=50, intangible=True)

    # Взрыв в указанных координатах (R=радиус)
    from PG17_plus import ExplosionSystem
    ExplosionSystem.explode(world, x=10, y=50, radius=4, game_state=game.game_state)

    # --- Работа с инвентарем (Player) ---
    # Добавить предмет игроку
    player.inventory.add_item(BlockType.TNT, 99)
    
    # Выдать инструмент
    player.inventory.add_item(BlockType.BOOK_KNOWLEDGE, 1)

    # --- Карманные измерения ---
    # Генерация и сохранение происходят автоматически.
    # Можно принудительно создать измерение для конкретной двери:
    # world.get_pocket_dimension(door_id)
    
    print("Инициализация мода завершена!")

Рекомендации по созданию модов

    Текстуры: Используйте анимированные текстуры для жидкостей (water, nitroglycerine, lava). Для каждого кадра создаётся отдельный файл (water.png, water-1.png).

    Двери: Для отражённых текстур (mirrored) можно задать свойство "texture_mirrored" в BLOCK_INFO, либо просто добавить файл *-a.png.

    Совместимость: Старайтесь проверять, что координаты не выходят за world.width/world.height.

На этом всё. Надеюсь, обновлённый гайд поможет тебе и сообществу раскрыть весь потенциал игры. Удачи в мирах и карманных измерениях!
