Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.
Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.
1. Każde pole mapy gry trzymaj w 1 bajcie
2. Tu nie robisz gry akcji, więc nie musisz wyświetlać bezpośrednio pamięci mapy. Przy rysowaniu ekranu odczytaj wartość z mapy i postaw kafelek np. 2x2 znaki na ekranie. Ty bym polecał zmianę zestawu znaków co drugą linię, abyś miał dostępnych 2 razy więcej znaków.
3. Organizacja bajtu mapy:
- wartości 0-127 - elementy poziomu jak ściany, drzwi
- wartości [MONSTER_FIRST,MONSTER_FIRST+MONSTERS_MAX] - indeks przeciwnika MONSTER_FIRST=128, MONSTERS_MAX=64
- wartości [ITEM_FIRST,ITEM_FIRST+ITEMS_MAX] - indeks przedmiotu zbieralnego ITEMS_MAX=64, ITEM_FIRST = MONSTER_FIRST+MONSTERS_MAX
4. Dla elementów poziomu 0-127 możesz mieć potem tablicę bitów właściwości typu BLOCK_MOVE | BLOCK_SIGHT:
byte map_object_prop[0..127]
5. Dla przeciwników i przedmiotów odpowiednie tablice opisujące ich cechy typu:
byte item_representation[0..ITEMS_MAX]
byte item_type[0..ITEMS_MAX]
a potem:
byte item_property[0..ITEM_TYPE_MAX] - zależne od item_type
item_index = MapGet(x,y) - ITEM_FIRST;
representation = item_representation[item_index]
item_type = item_type[item_index]
item_dmg = item_damage[item_type];
lub dla przeciwników:
byte monster_type[0..MONSTERS_MAX]
byte monster_hp[0..MONSTERS_MAX]
byte monster_damage[0..MONSTERS_MAX] - gdy damage przeciwnika może się zmieniać
albo:
byte monster_damage[0..MONSTER_TYPE_MAX] - gdy konkretny typ przeciwnika ma stały damage:
monster_index = MapGet(x,y) - MONSTER_FIRST;
monster_type = monster_type[monster_index]
dmg = monster_damage[monster_type];
Takie ułożenie danych zakłada, że przeciwnicy nie wchodzą na inne elementy mapy. Jeżeli mają wchodzić, to dodaj:
byte monster_standing_at[0..MONSTERS_MAX] - gdzie bedziesz kopiowal bajt z mapy, przy ruchu przeciwnika.