# Mapy bez bolu instrukcja jak dla debila Ten dokument jest dla momentu, w ktorym chcesz zrobic mape, ale nie chcesz jeszcze myslec jak silnik gry, walidator, scenarzysta i administrator hostingu jednoczesnie. ## 0. Najwazniejsza zasada Mapa ma warstwy: ```text 1. Podoga po tym gracz chodzi. 2. Sciany zwykle blokuja ruch. 3. Drzwi / przejscia wygladaja jak sciana/drzwi, ale NIE blokuja ruchu. 4. Meble stoja na pododze, czesto blokuja ruch. 5. Obiekty interaktywne NPC, maszyny, serwery, biurka akcji. 6. Interaction tile wolna kratka, na ktora gracz podchodzi, zeby uzyc obiektu. ``` Nie rob biurka jako podogi. Nie rob drzwi jako sciany blokujacej, jesli gracz ma przez nie przejsc. Nie ustawiaj NPC bez wolnej kratki obok, bo gracz bedzie z nim rozmawia mentalnie przez sciane. --- ## 1. Jak dodac nowe assety na komputerze 1. Rozpakuj kupiona paczke do: ```text assets/vendor/ ``` Przykad: ```text assets/vendor/limezu/modern-office/ assets/vendor/limezu/modern-interiors/ ``` 2. Uruchom z katalogu projektu: ```bash python tools/generate-vendor-index.py ``` 3. Odpal projekt: ```bash php -S localhost:8080 ``` 4. Wejdz do: ```text http://localhost:8080/admin/tools/map-builder.html ``` --- ## 2. Jak dodac nowe assety na hostingu 1. Przez FTP wrzuc kupione grafiki do: ```text assets/vendor/ ``` 2. Wejdz do Map Buildera: ```text /admin/tools/map-builder.html ``` 3. Kliknij: ```text Odbuduj indeks vendor na hostingu ``` Jezeli dostaniesz bad zapisu, hosting nie pozwala PHP zapisac pliku `data/assets/vendor-index.json`. Wtedy wygeneruj indeks lokalnie Pythonem i wrzuc przez FTP: ```text data/assets/vendor-index.json ``` --- ## 3. Co to jest tile, a co sprite ### Tile Tile to may kafelek, zwykle `16x16`. Uzywaj go do: ```text podogi sciany dywanow prostych przejsc drzwi jako kratka przejscia ``` Tile w mappingu wyglada np. tak: ```json "floor_office_gray_01": { "tilesetId": "vendor_some_tileset", "tileX": 10, "tileY": 4 } ``` ### Sprite Sprite to wiekszy obrazek obiektu. Uzywaj go do: ```text biurek serwerow maszyn kanap szaf NPC wiekszych dekoracji ``` Sprite w mappingu wyglada np. tak: ```json "desk_modern_01": { "tilesetId": "vendor_some_tileset", "sx": 160, "sy": 64, "sw": 32, "sh": 32, "offsetY": -16 } ``` --- ## 4. Jak dodac podoge 1. W Map Builderze znajdz grafike z podogami. 2. Ustaw `Grid = 16`. 3. Kliknij **Preset: podoga 1x1**. 4. Kliknij kafelek podogi w podgladzie. 5. W polu `ID mappingu` wpisz np.: ```text floor_office_light_01 ``` 6. Kliknij **Dodaj jako tile**. 7. W sekcji `Tile` wyszukaj `floor_office_light_01`. 8. Wybierz tryb **Podoga**. 9. Maluj po mapie. Efekt logiczny: ```text kratka ma tileId podogi kratka jest przechodnia ``` --- ## 5. Jak dodac sciane 1. Wyszukaj grafike scian, np. `Room_Builder`, `wall`, `office`. 2. Ustaw `Grid = 16`. 3. Kliknij **Preset: sciana 1x1**. 4. Kliknij kafelek sciany. 5. Wpisz ID, np.: ```text wall_office_top_01 ``` 6. Kliknij **Dodaj jako tile**. 7. W sekcji `Tile` wybierz `wall_office_top_01`. 8. Wybierz tryb **Sciana**. 9. Maluj sciane na mapie. Efekt logiczny: ```text kratka ma tileId sciany kratka blokuje ruch ``` Czyli gracz tam nie wejdzie. ### Prosta zasada scian Na start wystarczy: ```text wall_top_01 gorna sciana wall_bottom_01 dolna/frontowa sciana wall_left_01 lewa sciana wall_right_01 prawa sciana wall_corner_01 rog ``` Nie musisz od razu mapowac caej paczki. Wybierz 510 kafelkow i trzymaj spojny styl. --- ## 6. Jak dodac drzwi Drzwi sa podstepne. Graficznie wygladaja jak sciana/drzwi, ale logicznie gracz ma przez nie przejsc. 1. Wyszukaj asset drzwi albo kafelek przejscia. 2. Ustaw `Grid = 16`. 3. Kliknij **Preset: drzwi tile 1x1**. 4. Kliknij kafelek drzwi. 5. Wpisz ID, np.: ```text door_office_01 ``` 6. Kliknij **Dodaj jako tile**. 7. W sekcji `Tile` wybierz `door_office_01`. 8. Wybierz tryb **Drzwi / przejscie**. 9. Kliknij kratke w scianie, gdzie maja byc drzwi. 10. Kliknij **Waliduj**. Efekt logiczny: ```text kratka ma tileId drzwi kratka NIE blokuje ruchu ``` Jezeli zrobisz drzwi trybem **Sciana**, to zablokujesz przejscie i potem bedziesz sie zastanawia, czemu firma jest zamknieta jak budzet po Q3. --- ## 7. Jak dodac zwyky mebel, np. biurko Mebel to sprite, nie tile. 1. Wyszukaj grafike z biurkami, np. `desk`, `office`, `shadowless`, `singles`. 2. Ustaw `Grid = 16`. 3. Kliknij **Preset: biurko 2x2**. 4. Kliknij lewy gorny kafelek biurka w podgladzie. 5. Wpisz ID, np.: ```text desk_modern_01 ``` 6. Kliknij **Dodaj jako sprite**. 7. W sekcji **Meble / spritey** wybierz `desk_modern_01`. 8. Ustaw: ```text W = 2 H = 2 blokuje = zaznaczone Typ mebla = desk ``` 9. Wybierz tryb **Mebel**. 10. Kliknij miejsce na mapie. Efekt logiczny: ```text pod spodem dalej jest podoga na pododze stoi sprite biurka kratki pod biurkiem blokuja ruch ``` --- ## 8. Jak dodac mebel interaktywny, np. Quality desk Jesli biurko ma tylko wygladac uzyj **Mebel**. Jesli biurko ma miec akcje, np. Sprawdz CAPA, Kup audyt, Porozmawiaj z CFO uzyj **Obiekt**. 1. Najpierw dodaj sprite biurka tak jak wyzej. 2. W sekcji **Obiekt interaktywny** ustaw: ```text Object ID: OBJ_QUALITY_DESK Nazwa: Quality desk Preset obiektu: Biurko informacyjne ``` 3. Wybierz sprite biurka w **Meble / spritey**. 4. Wybierz tryb **Obiekt**. 5. Kliknij miejsce na mapie. 6. Wybierz tryb **Interaction tile**. 7. Wybierz `OBJ_QUALITY_DESK` z listy. 8. Kliknij wolna kratke przed biurkiem. 9. Kliknij **Waliduj**. Efekt logiczny: ```text obiekt blokuje ruch ma sprite ma interactionTile ma prosta akcje testowa ``` Prawdziwe akcje dopiszesz pozniej w JSON/scenario editorze. --- ## 9. Jak dodac NPC 1. Wyszukaj grafike postaci. 2. Jesli postac jest z arkusza 16px, uzyj `Grid = 16` i preset `NPC/postac`. 3. Jesli postac jest z RPG Maker 48px, ustaw `Grid = 48` i wybierz odpowiedni fragment. 4. Dodaj jako sprite, np.: ```text npc_it_admin_01 ``` 5. W sekcji **Obiekt interaktywny** ustaw: ```text Object ID: NPC_IT_ADMIN Nazwa: IT Admin Preset obiektu: NPC / osoba ``` 6. Wybierz tryb **Obiekt** i kliknij mape. 7. Wybierz tryb **Interaction tile** i ustaw wolna kratke obok NPC. NPC zwykle powinien blokowac ruch. Uczestnik ma podejsc obok, a nie stanac NPC na gowie. --- ## 10. Jak dodac maszyne albo serwer Maszyna/serwer to obiekt interaktywny ze spriteem. 1. Wybierz sprite maszyny/serwera. 2. Dodaj jako sprite. 3. W sekcji **Obiekt interaktywny** ustaw: Dla maszyny: ```text Object ID: OBJ_MACHINE_A Nazwa: Linia produkcyjna A Preset obiektu: Maszyna produkcyjna ``` Dla serwera: ```text Object ID: OBJ_BACKUP_SERVER Nazwa: Serwer backupu Preset obiektu: Serwer / system IT ``` 4. Wybierz tryb **Obiekt** i postaw na mapie. 5. Ustaw **Interaction tile** na wolnej kratce obok. 6. Waliduj. --- ## 11. Co zawsze robic po zmianie mapy Po kazdej wiekszej zmianie: ```text 1. Kliknij Waliduj. 2. Sprawdz czerwone bedy. 3. Eksportuj mape. 4. Skopiuj nowe tile mappingi do data/assets/tile-mapping.json. 5. Skopiuj nowe sprite mappingi do data/assets/sprite-mapping.json. 6. Odpal gre i sprawdz, czy gracz dojdzie do obiektow. ``` Najczestsze bedy: ```text Drzwi dodane jako sciana blokuja ruch. Biurko dodane jako podoga gracz po nim chodzi. Obiekt nie ma interactionTile nie da sie go wygodnie uzyc. interactionTile jest na scianie walidator krzyczy. Sprite ID jest w mapie, ale nie ma go w sprite-mapping.json. Tile ID jest w mapie, ale nie ma go w tile-mapping.json. ``` --- ## 12. Minimalna zasada estetyki Na start nie mapuj 500 kafelkow. Zrob sobie maa palete: ```text 3 podogi 5 scian 2 drzwi 5 biurek/mebli 3 NPC 3 obiekty techniczne ``` I z tego buduj pierwsza adna mape. Jak od razu wezmiesz wszystkie assety, mapa bedzie wygladac jak dzia zakupow po Black Friday.