@Kiki-Bouba Game Studio
# Dyabollo

[ToC]
## Cel gry
* Zabijanie przeciwników
* Zdobywanie doświadczenia i itemów
* Levelowanie i podnoszenie statystyk i umiejętności
* Ulepszanie broni (?)
## Mapa
* Rzut izometryczny
* Zbudowana z kwadratów
* Na niektóre tile da się wchodzić, na inne nie
* Tile może być niezajęty, zajęty przez gracza, przez przeciwnika, przez niezniszczalny obiekt lub przez zniszczalny obiekt
* Niektóre postaci mogą poruszać się nad wodą i przepaściami, np. latający przeciwnicy, inni nie mogą wchodzić na te pola
## Obiekty
* Ze względu na zniszczalnosć
* Zniszczalne
* Kruche ściany
* Beczki
* Drzwi
* Niezniszczalne
* Ściany
* Woda
* Dekoracje
* Ze względu na interakcje
* Kufry
* Drzwi
* Pulpit z księgą
* Portal
## Świat
* Dzieli się na miasto i podziemia. Miasto jest bezpiecznym hubem, można kupować w nim przedmioty. Podziemia służą do nabijania expa i lootowania.
* Mapy podziemi są ułożone wertykalnie, tzn. można przechodzić między ich kolejnymi poziomami.
* Im głębiej tym niebezpieczniej, ale możemy znaleźć cenniejsze przedmoty.
## Przeciwnicy
### Statystyki
Nie potrzebuje tylu co gracz, część można ustawiać na sztywno, np. obrażenia.
* Zdrowie -- punkty życia gracza
* Obrażenia -- zadawane obrażenia to jakaś randomizowana liczba w widełkach określanych przez tę statystykę
* Odporność (zamiast pancerza) -- w zależności od typu otrzymywanych obrażeń zmniejsza lub zwiększa liczbę odejmowanych punktów zdrowia (może też leczyć)
* Prędkość poruszania -- modyfikowana przez 'bieg' lub spowolnienia
* Prędkość ataku -- ilość akcji 'atak' na sekundę
* Status -- stan postaci, np. ogłuszony, spowolniony, zatruty
### Zachowanie
* Gdy gracz pojawia się w ich polu widzenia, idą w jego kierunku najkrótszą trasą
* Gdy znajdą się w zasięgu ataku, atakują gracza aż do zabicia go
### Typy przeciwników
* Dystansowi -- utrzymują największy możliwy dystans od gracza. Jeśli podejdzie zbyt blisko, oddalają się od niego.
* Walą z ręki -- ścigają gracza i biją go.
* Leczący -- atakują gracza, a jeśli w ich pobliżu któryś przeciwnik jest ranny, wtedy leczą go.
## Gracz
### Statystyki
* Poziom -- określa umiejętności, jakich gracz może się nauczyć; zwiększa doświadczenie wymagane do osiągnięcia kolejnego poziomu
* Zdrowie -- punkty życia gracza
* Mana -- punkty magii wykorzystywane przy rzucaniu zaklęć.
* Doświadczenie -- ilość punktów za zabitych wrogów (lub wykonane zadania), którą trzeba zdobyć, by awansować na kolejny poziom
* Siła -- pozwala na ekwipowanie określonych broni i zwiększa zadawane przez nie obrażenia
* Zręczności -- pozwala na ekwipowanie określonych broni i zwiększa zadawane przez nie obrażenia
* Pancerz -- zmniejsza obrażenia (może zależeć od poziomu zdrowia postaci, np. przy 5% zdrowia gracz dostaje bonus do pancerza)
* Prędkość poruszania -- modyfikowana przez 'bieg' lub spowolnienia
* Zadawane obrażenia -- sumuje bonusy ze statystyk gracza i broni oraz pancerza, np. obrażenia = siła + obrażenia topora + bonus od naszyjnika
* Prędkość ataku -- ilość akcji 'atak' na sekundę
* Status -- stan postaci, np. ogłuszony, spowolniony, zatruty
### Umiejętności
:::warning
Gracz może jednocześnie używać tylko jednej umiejętności
:::
Przykładowe umiejętności
#### Aktywne -- działają tak samo jak akcja
* kula ognia
* teleportacja
#### Aktywowane -- trzeba je włączyć i wyłączyć lub działają tylko przez jakiś czas; działają w tle
* szał bitewny (tymczasowe zwiększenie obrażeń i prędkości ataku)
* odporność na dany typ obrażeń
### Przedmioty
* przedmioty do zakładania
* broń
* tarcza
* pancerz
* hełm
* napierśnik
* spodnie
* buty
* rękawice
* amulet
* pierścień
* inne przemioty
* pieniądze
* kosztowności
* jednorazowe
* mikstury
* zwoje
### Akcje
* ruch / atak (kontekstowy)
* przerwij akcję
* rzuć zaklęcie
* interakcja (kontekstowa)
* odpoczynek / medytacja
## System obrażeń
* Obrażenia mają różne typy
* Fizyczne, moze z podziałem na kłute i obuchowe, np. obuchowe lepiej działają na golemy i szkielety, a kłute na ludzi
* Magiczne, może z podziałem na żywioły
## TO-DO
- [x] Ogarnąć jak tworzyć levele w [Tiled](https://www.youtube.com/watch?v=6mVljkG0rCU)
- [ ] Stworzenie levelu miasto
- [x] Zaczytanie mapki (tmx) w sensie matrycy z tile'ami do programu
- [x] [Wycinanie z source'a tylko nazwy tile'a](#Olek)
- [ ] Próba rysowania osobnych tileów zgodnie z załadowaną mapką
- [ ] Próba ogarnięcia 3 poprzednich rzeczy ale izometrycznie
- [ ] Opracowanie koncepcji (jak ma wyglądać miasto?)
- [ ] Znalezienie assetów
- [ ] Przełożenie koncepcji na level w Tiled
- [ ] Załadowanie levelu do gry
- [ ] Stworzyć gracza
- [ ] Concept art
- [ ] Znalezienie assetów
- [ ] Oprogramowanie poszczególnych akcji
- [ ] Dodanie NPC do levelu miasto
- [ ] Dodanie interakcji do NPCetów
- [ ] Stworzenie levelu podziemii
- [ ] Dodanie przeciwników
### Taski
#### Olek
:::spoiler Wycinanie nazwy tile'a ze ścieżki
**Opis**
W konstruktorze klasy Tile w pliku Tile.cs ustawiać pole _imageSource na nazwę pliku bez rozszerzenia. W skrócie dodaj do klasy prywatną funkcję, która przyjmuje stringa z sourcem pliku i zwraca wyciętą nazwę pliku, a następnie użyj jej do ustawienia pola _imageSource.
**Przykład**
Jest: "../../../../../Pictures/kenneyDungeonPack_2.3/Isometric/woodenSupports_S.png"
Powinno być: "woodenSupports_S"
**Pomysł rozwiązania**
Powinno wystarczyć przeglądać napis od tyłu i wyciąć wszystko między kropką a slashem.
:::
#### Krystian
#### Wiktor