1 Ostatnio edytowany przez x_angel (Dzisiaj 10:23:40)

Chciałbym tu wrzucić, niech zostanie dla potomnych.
Poprosiłem Claude o edytor map do Montezumy.
Jest to edytor konkretnie do tej wersji, gdyż ma wybór nieśmiertelności.
Po edycji mapy generowany jest z powrotem spakowany plik xex.

Krótki opis:
# Montezuma XEX Editor - edytor komnat oryginalnej gry na Atari

`montezuma_xex_editor.html` to edytor komnat gry **Montezuma's Revenge** na Atari XL/XE w wersji z pliku *Montezumas Revenge 1983 Utopia Software (US) beta t 1 Seban.xex*. Otwierasz go w przeglądarce (Chrome, Firefox, Edge), wczytujesz plik `.xex`, zmieniasz komnaty i zapisujesz nowy plik `.xex`. Nowy plik ma ten sam program ładujący i rozpakowujący co oryginał, więc uruchamia się tak samo: w emulatorze (Altirra, atari800) i na prawdziwym Atari XL/XE z 64 KB pamięci.

Edytor jest zrobiony pod ten jeden plik. Inny plik z tą grą (inny crack, inna wersja) zostanie odrzucony z komunikatem, bo pamięć gry jest tam ułożona inaczej.

## Obsługa

1. **Wczytaj XEX** (albo przeciągnij plik na stronę). Edytor zapamiętuje plik i zmiany w przeglądarce, więc po ponownym otwarciu strony praca jest na miejscu.
2. **Karta "Piramida".** Pokazuje wszystkie 102 komnaty ułożone według przejść, piętra od góry. Najedź i kliknij komnatę, aby ją wybrać, kliknij dwukrotnie, aby ją edytować.
   - Żółta ramka oznacza komnatę startową. Przycisk **Ustaw jako startową** zmienia, gdzie gra się zaczyna (przydaje się też do testów).
   - Przyciemnione komnaty leżą na ciemnych piętrach: w grze widać w nich mury tylko z pochodnią.
   - Komnaty, które w grze zajmują to samo miejsce co inne (zamienniki w labiryncie), są na samym dole mapy.
   - Panel **Pamięć** pokazuje, ile miejsca zajmują dane komnat. Dane muszą się zmieścić w 2139 bajtach, tyle co w oryginale (jeden wróg albo przedmiot to 3 bajty). Żeby dodać coś w jednej komnacie, gdy miejsca brakuje, usuń coś w innej.
3. **Karta "Komnata"** ma trzy tryby:
   - **Układ (kafle).** Lewy przycisk maluje wybranym kaflem z palety, prawy pobiera kafel spod kursora. Opcja "kolor 4" daje kafel z ustawionym najstarszym bitem (inny kolor cegieł).
     - Uwaga: gra ma tylko 17 układów (rysunków 40×24 kafle), a komnat jest 102. Jednego układu używa wiele komnat, więc malowanie zmienia je wszystkie; edytor wypisuje, których to dotyczy.
     - Żeby zmienić tylko jedną komnatę, przełącz jej układ na inny z listy albo przerób komnaty tak, żeby dany układ miała tylko ona.
   - **Przedmioty i drzwi.** Lista przedmiotów komnaty: rodzaj, kolumna, wiersz, od którego poziomu się pojawia. Przedmiot przesuwasz przeciągając go na rysunku albo klikając puste miejsce, gdy jest zaznaczony.
   - **Wrogowie.** Lista wrogów: rodzaj (typ szesnastkowo albo z listy typów występujących w grze), pozycja startowa x/y, od którego poziomu.
     - Każda komnata ma co najmniej jeden wpis wroga; niepotrzebnego ustaw na "od poziomu 4".
     - Zmiana rodzaju zwykle działa (np. czaszka na węża), ale nie zawsze. Nowy układ wrogów sprawdź w emulatorze.
4. **Ustawienia komnaty** (prawy panel karty "Komnata"):
   - **numer układu**;
   - **odbicie lewo↔prawo**: gra rysuje układ odwrócony w poziomie od 5. wiersza w dół;
   - **drabina do góry / drabina w dół**: drabina na środku komnaty, którą gra dorysowuje na układzie;
   - **4 przejścia**: komnata po lewej, po prawej, wyżej i niżej. Opcja "zmieniaj przejście w obie strony" od razu poprawia przejście powrotne w sąsiedniej komnacie.
5. **Karta "Zapis i informacje".**
   - **Zapisz XEX** tworzy plik `<nazwa>_edit.xex`. Przed zapisem edytor rozpakowuje nowy plik jeszcze raz i porównuje go z tym, co miało w nim być.
   - **Kopia zmian (.json)** zapisuje tylko Twoje komnaty i układy, żeby przenieść pracę na inny komputer albo do innej przeglądarki.
   - **Cofnij wszystkie zmiany** wraca do oryginału.

**Ctrl+Z** albo przycisk **Cofnij** cofa ostatnią zmianę na karcie "Komnata".

## Jak zbudowana jest gra (dla ciekawych)

### Plik XEX

| Segment | Zawartość |
|---|---|
| `$8000-$B7FF` | koniec spakowanych danych; kod INIT z `$2400` kopiuje go pod ROM systemu (`$C000-$CFFF`, `$D800-$FFFF`) |
| `$ACA7-$BFFF` | początek spakowanych danych |
| `$00D0-$00D5` | adres początku danych, koniec etapu 1, adres startu (`$0480`) |
| `$2400-$25E1`, `$2600-$261D` | depacker (przenoszony do `$0700`) i jego start |

Packer ma dwa etapy:

1. **Etap 1, LZ w strumieniu bitów** (bity od najstarszego). Bajt nagłówka mówi, ile dodatkowych bitów ma przesunięcie (tu 3, czyli przesunięcie do 2047). Potem idą na zmianę:
   - literał: bit 0 i 8 bitów;
   - kopia: bit 1, długość (`0` = 2; `1` + 2 bity = 3-5, kolejne pary bitów `11` dodają po 3, po trzech `11` jest pełny bajt długości), 8 bitów przesunięcia i 3 bity starszej części przesunięcia.

   Wynik ląduje od `$0A00`, a potem jest przenoszony na koniec pamięci.
2. **Etap 2, RLE.** Bajt sterujący:
   - `1-127`: tyle powtórzeń następnego bajtu;
   - `$81-$FE`: tyle bajtów przepisanych;
   - `$00` / `$FF`: to samo z 16-bitową długością.

   Wynik ląduje od `$0480` z pominięciem stron `$07-$08` (depacker) i `$D0-$D7` (układy I/O). Na koniec całość jest przesuwana o stronę w górę.

Po rozpakowaniu intro cracka (`$C000`) pyta o nieskończone życia, przenosi `$1E00-$BFFF` do `$0E00-$AFFF` i uruchamia grę od `$0E00`. Wszystkie adresy poniżej to adresy gry po tym przeniesieniu (w pliku są o `$1000` wyżej).

### Komnaty

- **Lista komnat:** `$3CE8-$4542`, 102 rekordy jeden po drugim, w kolejności pięter.
- **Układy:** 17 × 1 KB od `$6C00` (ekran 40×24 w trybie ANTIC 4).
- **Zestaw znaków:** `$56C6` (kopiowany do `$0400`).
- **Kolory pięter:** `$1ACA`.

Rekord komnaty (k = liczba wrogów − 1, n = liczba przedmiotów):

| Bajty | Znaczenie |
|---|---|
| 0 | bity 0-4 numer układu; bit 5 drabina w dół; bit 6 drabina do góry; bit 7 odbicie lewo↔prawo |
| 1-8 | adresy komnat obok: lewo, prawo, góra, dół (0 = brak) |
| 9 | k |
| 10 ... 10+k | x wrogów (w punktach 0-159) |
| 11+k ... 11+2k | y wrogów (linie obrazu) + bity 0-1: od którego poziomu |
| 12+2k ... 12+3k | typ wrogów (bit 0 aktywny, bity 2-3 ruch, bit 4/5/7 wygląd) |
| 13+3k | n |
| dalej n × 3 | przedmiot: x (kolumna × 4), y (`$28` + wiersz × 8 + poziom), typ |

Typy przedmiotów:

| Typ | Przedmiot |
|---|---|
| `0`-`6` | amulet, klucz czerwony, niebieski, biały, pochodnia, miecz, klejnot (2×2 kafle) |
| `$80` | migający łańcuch (bariera, kolumna 4 kafli) |
| `$81`-`$83` | drzwi czerwone, niebieskie, białe (kolumna 4 kafli; otwiera je klucz w tym samym kolorze) |
| `$84`, `$85` | pusta kolumna (przejście) |
| `$10` | dziura 16×5 kafli |
| `$08` | znacznik specjalny |

Bity `$40`/`$20` typu gra ustawia sama w trakcie gry (zebrany przedmiot, otwarte drzwi).

Adresy w kodzie, które edytor poprawia po zmianie rozmiaru komnat:

| Adres | Co wskazuje |
|---|---|
| `$1135/$1139` i `$1455/$1459` | komnata startowa |
| `$1C32/$1C38` | ostatni rekord |
| `$1982/$198A` | pierwsza ciemna komnata |
| `$1AB8` | pierwsze komnaty pięter i koniec listy |

Post's attachments

Montezuma's Revenge (1983)(Utopia Software)(US)(beta)[t +1 Seban].xex 19.45 kb, liczba pobrań: 1 (od 2026-10-02) 

montezuma_xex_editor.zip 28.32 kb, liczba pobrań: 1 (od 2026-10-02) 

Tylko zalogowani mogą pobierać załączniki.