# Spis treści
1. [Słownik pojęć](#1.-Słownik-pojęć)
1.1. [Znormalizowana wartość](#1.1.-Znormalizowana-wartość)
1.2. [FieldModifier](#1.2.-FieldModifier)
1.3. [Color hash](#1.3.-Color-hash)
1.4. [Position](#1.4.-Position)
1.5. [ShroomType](#1.5.-ShroomType)
1.6. [ShaderFieldModifier](#1.6.-ShaderFieldModifier)
2. [Timeline](#2.-Timeline)
2.1. [TimelineEntry](#2.1.-TimelineEntry)
2.2. [TimelineEvent](#2.2.-TimelineEvent)
3. [Eventy](#3.-Eventy)
3.1. [AudioEvent](#3.1.-AudioEvent)
3.2. [BossEvent](#3.2.-BossEvent)
3.3. [GridEvent](#3.3.-GridEvent)
3.4. [JumbotronEvent](#3.4.-JumbotronEvent)
3.5. [ParticleEvent](#3.5.-ParticleEvent)
3.6. [ShaderEvent](#3.6.-ShaderEvent)
3.7. [ShroomEmitterEvent](#3.7.-ShroomEmitterEvent)
3.8. [ShroomEvent](#3.8.-ShroomEvent)
3.9. [PlayerEvent](#3.9.-PlayerEvent)
# 1. **Słownik pojęć**
### 1.1. **Znormalizowana wartość**
To taka wartość typu `Number`, która mieści się w przedziale `[ 0.0; 1.0 ]`.
### 1.2. **FieldModifier**
To taka wartość, która może być jednocześnie reprezentowana jako pojedynczy element albo tablica o rozmiarze 2. Jej celem jest możliwość przekazania nie tylko informacji o docelowej wartości ale również o czasie i sposobie transformacji aktualnej wartości do oczekiwanej. Pierwszy indeks oznacza docelową wartość natomiast drugi określa o ile ta wartość ma być zmieniana co `1/60` sekundy. Tablicę możemy przedstawić w pseudo-schemacie:
```json
[
"destValue",
"?changeFactor"
]
```
gdzie:
- `destValue` określa wartość docelową
- `?changeFactor` określa prędkość zmiany. Wartość ta jest opcjonalna, jeżeli nie zostanie podana to zostanie użyta domyślna wartość, która wynosi `1.0`.
### 1.3. **Color hash**
Jest to reprezentacja koloru `RGBA` w postaci `Stringa`. Kanał alpha jest opcjonalny. Należy pamiętać o rozpoczęciu tego Stringa od znaku `#`. Przykłady: `"#ff00aa"`, `"#36ff0036"`.
### 1.4. **Position**
Jest to tablica `Number[]` o wielkości `2`, gdzie pierwszy indeks opisuje [znormalizowane](#Znormalizowana-wartość) koordynaty poziome, a drugi indeks opisuje [znormalizowane](#Znormalizowana-wartość) koordynaty pionowe.
### 1.5. **ShroomType**
| Klucz | Typ | Opis |
| - | - | - |
| "name" | `?String` | rodzaj typu, lista dostępnych typów dostępna jest poniżej |
| "randomShader | `?Boolean` | czy jeżeli typ jest zgodny i nie zostały podane żadne `shaderTemplates` to czy `shroom` ma wykorzystać losowy shader (silnik losuje shader co 5 sekund)
| "shaderTemplates" | `?Object` | obiekt klasy `ShaderEvent`
### Dostępne "names"
- good
- bad
- default
### Przykład
```json
{
"name": "good",
"randomShader": true,
"shaderTemplates": [ ... ]
}
```
### 1.6. **ShaderFieldModifier**
Działa podobnie jak [FieldModifier](FieldModifier). Składa się z tablicy `Number[]` o rozmiarze do 4. Każdy kolejny parametr jest opcjonalny. Tablicę możemy przedstawić w pseudo-schemacie:
```json
[
"parameterBegin",
"?parameterEnd",
"?parameterFactor",
"?parameterFactorChanger"
]
```
gdzie:
- `parameterBegin` określa wartość startową
- `?parameterEnd` określa wartość końcową. Domyślnie jest to wartość podana w `parameterBegin`
- `?parameterFactor` określa prędkość zmiany. Wartość ta jest opcjonalna, jeżeli nie zostanie podana to zostanie użyta domyślna wartość, która wynosi `1.0`
- `?parameterFactorChanger` określa co ile ma być zwiększany `parameterFactor`. Domyślnie wynosi `0.0`
# 2. **Timeline**
Timeline to obiekt JSON składający się z kolekcji `TimelineEntry`.
### Przykład
```
[ ... ]
```
[wróć do spisu treści](#Spis-treści)
## 2.1. **TimelineEntry**
| Klucz | Typ | Opis |
| - | - | - |
| "time" | `Number` | czas, w którym mają zostać wywołane eventy znajdujące się w "events" |
| "events" | `Object[]` | kolekcja `TimelineEvent` |
### Przykład
```json
{
"time": 0.0,
"events: [ ... ]
}
```
[wróć do spisu treści](#Spis-treści)
## 2.2. **TimelineEvent** GameEvent // wyjebac Timeline z nazwy i zastapic moze czyms innym
| Klucz | Typ | Opis |
| - | - | - |
| "type" | `String` | nazwa eventu
| "data" | `Object` | event
### Dostępne Eventy
- [AudioEvent](#3.1.-AudioEvent)
- [BossEvent](#3.2.-BossEvent)
- [GridEvent](#3.3.-GridEvent)
- [JumbotronEvent](#3.4.-JumbotronEvent)
- [ParticleEvent](#3.5.-ParticleEvent)
- [ShaderEvent](#3.6.-ShaderEvent)
- [ShroomEmitterEvent](#3.7.-ShroomEmitterEvent)
- [ShroomEvent](#3.8.-ShroomEvent)
- [PlayerEvent](#3.9.-PlayerEvent)
### Przykład
```json
{
"type": "AudioEvent",
"data": { ... }
}
```
[wróć do spisu treści](#Spis-treści)
# 3. **Eventy**
## 3.1 **AudioEvent**
| Klucz | Typ | Opis |
| - | - | - |
| "assetName" | `String` | nazwa zasobu dźwiękowego. Musi być taka sama jak w GMS albo taka, jak dostarczona w `resource-pack` |
| "priority" | `Number` | [GMS audio priority](https://docs2.yoyogames.com/source/_build/3_scripting/4_gml_reference/audio/audio_play_sound.html) |
| "loop" | `Boolean` | czy dźwięk ma być odtwarzany w pętli |
| "trackPosition" | `Number` | [GMS track position](https://docs.yoyogames.com/source/dadiospice/002_reference/game%20assets/sounds/audio_sound_set_track_position.html) |
### Przykład
```json
{
"assetName": "asset_ost_ballada_o_dojrzalosci",
"priority": 100,
"loop": true
}
```
[wróć do spisu treści](#Spis-treści)
## 3.2. **BossEvent**
| Klucz | Typ | Opis |
| - | - | - |
| "type" | `String` | nazwa bossa, lista dostępnych bossów znajduje się poniżej |
### Dostępne "bossy"
- bugz
- dzban
### Przykład
```json
{
"type": "bugz"
}
```
[wróć do spisu treści](#Spis-treści)
## 3.3. **GridEvent** GridRendererEvent
| Klucz | Typ | Opis |
| - | - | - |
| topLineWidth | `?Number` [@FieldModifier](#FieldModifier) | [znormalizowana](#Znormalizowana-wartość) długość górnej linii siatki |
| topLinePosition | `?Number` [@FieldModifier](#FieldModifier) | [znormalizowana](#Znormalizowana-wartość) opisująca horyznotalne położenie środa górnej linii siatki (np. wartość `0.5` odpowiada środkowi) |
| bottomLineWidth | `?Number` [@FieldModifier](#FieldModifier) | [znormalizowana](#Znormalizowana-wartość) długość dolnej linii siatki |
| channels | `?Number` [@FieldModifier](#FieldModifier) | liczba kanałów siatki (pionowe linie).
| offsetTop | `?Number` [@FieldModifier](#FieldModifier) | [znormalizowana](#Znormalizowana-wartość) określająca margines górny siatki
| offsetBottom | `?Number` [@FieldModifier](#FieldModifier) | [znormalizowana](#Znormalizowana-wartość) określająca margines dolny siatki |
| colorPrimaryLines | `?String` [@FieldModifier](#FieldModifier) | [color hash](#Color-hash) głównych liń siatki
| colorSecondaryLines | `?String` [@FieldModifier](#FieldModifier) | [color hash](#Color-hash) pozostałych liń siatki
| colorGridBackground | `?String` [@FieldModifier](#FieldModifier) | [color hash](#Color-hash) tła warstwy siatki
| primaryLinesWidth | `?Number` [@FieldModifier](#FieldModifier) | grubość głównych liń siatki (domyślna wartość: `3.0`) |
| secondaryLinesWidth | `?Number` [@FieldModifier](#FieldModifier) | grubość pozostałych liń siatki (domyślna wartość: `3.0`) |
| angle | `?Number` [@FieldModifier](#FieldModifier) | kąt obrotu siatki, wyrażony w stopniach |
| xScale | `?Number` [@FieldModifier](#FieldModifier) | pozioma skala całej warstwy siatki |
| yScale | `?Number` [@FieldModifier](#FieldModifier) | pionowa skala całej warstwy siatki |
| isGridWheelEnabled | `?Boolean` | czy kolory siatki mają być pobierane z `colorGridWheel*` i być "obracane" |
| isGridFrameCleaned | `?Boolean` | czy renderer siatki ma czyścić poprzednie klatki (true, jeżeli chcemy uzyskać efekt wypełnienia kolorem) | gridWheelSpeed | `?Number` | prędkość "obrotu" kolorów w przypadku gdy `isGridWheelEnabled` jest włączone |
| colorGridWheelTopLeft | `?String` | [color hash](#Color-hash) siatki w przypadku gdy `isGridWheelEnabled` jest włączone |
| colorGridWheelTopRight | `?String` | [color hash](#Color-hash) siatki w przypadku gdy `isGridWheelEnabled` jest włączone |
| colorGridWheelBottomRight | `?String` | [color hash](#Color-hash) siatki w przypadku gdy `isGridWheelEnabled` jest włączone |
| colorGridWheelBottomLeft | `?String` | [color hash](#Color-hash) siatki w przypadku gdy `isGridWheelEnabled` jest włączone |
| swingGrid | `?Boolean` | włącza efekt "bujania" |
| verticalScreens | `?Number` [@FieldModifier](#FieldModifier) | ilość powielonych ekranów w poziomie |
| horizontalScreens | `?Number` [@FieldModifier](#FieldModifier) | ilość powielonych ekranów w pionie |
| wavePulseAmount | `?Number` [@FieldModifier](#FieldModifier) | parametr ShaderWave |
| wavePulseMinAmount | `?Number` [@FieldModifier](#FieldModifier) | jeżeli `wavePulseAmount` spadnie poniżej to `wavePulseAmount` = 0.0 |
| wavePulseFriction | `?Number` [@FieldModifier](#FieldModifier) | o ile redukować `wavePulseAmount` per step |
| wavePulseDistortion | `?Number` [@FieldModifier](#FieldModifier) | parametr ShaderWave |
| wavePulseSpeed | `?Number` [@FieldModifier](#FieldModifier) | parametr ShaderWave |
### Przykład
```json
{
"fields": {
"channels": [
8,
0.05
],
"offsetBottom": [
0.15,
0.001
],
"offsetTop": [
0.15,
0.001
],
"topLineWidth": [
0.15,
0.001
],
"bottomLineWidth": [
0.85,
0.001
],
"angle": [
0,
1
],
"colorGridBackground": [
"#000000FF",
1.0
],
"verticalScreens": [
1,
1
],
"horizontalScreens": [
1,
1
],
"isGridFrameCleaned": true
}
}
```
[wróć do spisu treści](#Spis-treści)
## 3.4 **JumbotronEvent**
| Klucz | Typ | Opis |
| - | - | - |
| "message" | `String` | wiadomość, która ma zostać wyświetlona |
| "handlerName" | `String` | rodzaj wiadomości, lista dostępnych handlerów znajduje się poniżej |
| "duration" | `Number` | czas wyświetlania jumbotronu. Wartość `-1` powoduje ustawienie go na nieskończoność
### Dostępne *handlerNames*
- scoreboard
### Przykład
```json
{
"message": "ZBIERAJ PUNKTY\nDOJRZALOSCI",
"handlerName": "scoreboard",
"duration": 1.6
}
```
[wróć do spisu treści](#Spis-treści)
## 3.5 **ParticleEvent**
| Klucz | Typ | Opis |
| - | - | - |
| "particle" | `String` | typ particles, lista dostępnych typów znajduje się poniżej |
| "fields" | `Object` | mapa parametrów |
### Dostępne *particles*
- particle_devhorizon
- particle_explosion
- particle_score
- particle_fusion
### Opis *fields*
| Klucz | Typ | Opis |
| - | - | - |
| "system" | `?String` | nazwa systemu, na której mają być emitowane cząsteczki (domyślnie `background`). Lista dostępnych systemów znajduje się poniżej |
| "amount" | `?Number` | liczba cząsteczek do wygenerowania przez emiter (domyślnie `10`) |
| "duration" | `?Number` | jak długo (w sekundach) mają być renderowane cząsteczki (domyślnie `3.5`)
| "emitterInterval" | `?Number` | co ile sekund ma być wywoływany emiter (domyślnie `3.5`)
| "positionBegin" | `?Number[]` [@Position](#Position) | współrzędne prawego górnego rogu obszaru, z którego mają być emitowane cząsteczki (domyślnie `[ 0.5, 0.5 ]`) |
| "positionEnd" | `?Number[]` [@Position](#Position) | współrzędne lewego dolnego rogu obszaru, z którego mają być emitowane cząsteczki (domyślnie `[ 0.5, 0.5 ]`) |
### Dostępne *systems*
- foreground,
- background
### Przykład
```json
{
"particle": "particle_fusion",
"fields": {
"system": "foreground",
"amount": 50,
"duration": 5,
"emitterInterval": 0.2,
"positionBegin": [
0.5,
0.5
],
"positionEnd": [
0.5,
0.5
]
}
}
```
[wróć do spisu treści](#Spis-treści)
## 3.6 **ShaderEvent**
### Opis
| Klucz | Typ | Opis |
| - | - | - |
| "name" | `String` | nazwa shaderu, lista dostępnych shaderów dostępna poniżej |
| "duration" | `Number` | jak długo ma trwać shader |
| "data" | `Object` | mapa parametrów dla shadera. Dostępne parametry dla danego shadera znajdują się na liście poniżej |
> ***Każdy z parametrów shaderów jest typu [@ShaderFieldModifier](#ShaderFieldModifier)***
### Dostępne shadery
### **Emboss**
TODO: Screen
Nie posiada żadnych parametrów
### **LED**
TODO: Screen
| Nazwa parametru | Opis |
| - | - |
| brightness | Jasność, zakres `[ 0.5, 1.5 ]` |
| ledSize | Wielkość "pikseli", zalecana wartość `120` |
### **Magnify**
TODO: Screen
| Nazwa parametru | Opis |
| - | - |
| positionX | [znormalizowana](#Znormalizowana-wartość) pozycji poziomej |
| positionY | [znormalizowana](#Znormalizowana-wartość) pozycji pionowej |
| radius | TODO |
| minZoom | TODO |
| maxZoom | TODO |
### **Mosaic**
TODO: Screen
| Nazwa parametru | Opis |
| - | - |
| amount | Określa wielkośc "pikselizacji", czym mniejsza wartość tym bardziej rozpikselowany obraz. |
### **Posterization**
TODO: Screen
| Nazwa parametru | Opis |
| - | - |
| colorNumber | Określa do jakiej ilości kolorów ma zostać ograniczona paleta |
| gamma | TODO |
### **Revert**
TODO: Screen
Nie posiada żadnych parametrów
### **Ripple**
| Nazwa parametru | Opis |
| - | - |
| positionX | [znormalizowana](#Znormalizowana-wartość) pozycji poziomej |
| positionY | [znormalizowana](#Znormalizowana-wartość) pozycji pionowej |
| amount | TODO |
| distortion | TODO |
| speed | TODO |
| time | TODO |
### **Scanlines**
TODO: Screen
| Nazwa parametru | Opis |
| - | - |
| colorR | red |
| colorG | green |
| colorB | blue |
| colorA | alpha |
### **ShockWave**
TODO: Screen
| Nazwa parametru | Opis |
| - | - |
| positionX | [znormalizowana](#Znormalizowana-wartość) pozycji poziomej |
| positionY | [znormalizowana](#Znormalizowana-wartość) pozycji pionowej |
| amplitude | TODO |
| refraction | TODO |
| width | TODO |
| time | TODO |
### **Sketch**
TODO: Screen
| Nazwa parametru | Opis |
| - | - |
| intensity | TODO |
### **Thermal**
TODO: Screen
| Nazwa parametru | Opis |
| - | - |
| intensity | TODO |
### **Wave**
TODO: Screen
| Nazwa parametru | Opis |
| - | - |
| amount | TODO |
| distortion | TODO |
| speed | TODO |
| time | TODO |
### Przykład
```json
{
"name": "Emboss",
"duration": 0.6,
"data": {}
}
```
[wróć do spisu treści](#Spis-treści)
## 3.7 **ShroomEmitterEvent**
| Klucz | Typ | Opis |
| - | - | - |
| "amount" | `Number` | ile `shroom` ma zostać wygenerowane |
| "duration" | `Number` | jak długo mają być generowane `shrooms`
| "interval" | `Number` | co ile sekund mają być generowane nowe `shrooms`
| "templates" | `ShroomEvent` | kolekcja obiektów klasy [ShroomEvent](#ShroomEvent)
### Przykład
```json
{
"amount": 3,
"duration": 20.0,
"interval": 1.6,
"templates": [ ... ]
}
```
[wróć do spisu treści](#Spis-treści)
### 3.8 **ShroomEvent**
| Klucz | Typ | Opis |
| - | - | - |
| "fields" | `Object` | mapa parametrów
### Opis *fields*
| Klucz | Typ | Opis |
| - | - | - |
| "sprite" | `?String` | nazwa zasobu graficznego. Musi być taka sama jak w GMS albo taka, jak dostarczona w `resource-pack`. Domyślnie `asset_sprite_emoji_thinking` |
| "type" | `?Object` | obiekt JSON klasy `ShroomType`. Domyslnie `{ "name": "default" }` |
| "position" | `Number[]` | [Position](#Position). Domyślnie losowana jest pozycja pozioma z zakresu `[ 0, 1 ]`, a pionowo `0`.
| "speedValues" | `?Number[]` | kolekcja wartości prędkości, zostanie wylosowana tylko jedna (zamiast tablicy może tutaj być `Number`). Domyślnie `0.002` |
| "texts" | `?String[]` | kolekcja napisów, zostanie wylosowana tylko jedna (zamiast tablicy może tutaj być `String`). Domyślnie `[]` |
### Przykład:
```json
{
"fields": {
"sprite": "asset_shroom_emoji_thinking",
"type": {
"name": "good"
},
"position": [
0,
0.01
],
"speedValues": [ 0.01 ],
"texts": "intro"
}
}
```
[wróć do spisu treści](#Spis-treści)
### 3.9 **PlayerEvent**
| Klucz | Typ | Opis |
| - | - | - |
| "sprite" | `String` | nazwa zasobu graficznego. Musi być taka sama jak w GMS albo taka, jak dostarczona w `resource-pack`
### Przykład
```json
{
"sprite": "asset_sprite_gta_car_01"
}
```
[wróć do spisu treści](#Spis-treści)
### 3.9 **InputEvent**
| Klucz | Typ | Opis |
| - | - | - |
| "sprite" | `String` | nazwa zasobu graficznego. Musi być taka sama jak w GMS albo taka, jak dostarczona w `resource-pack`
### Przykład
```json
{
"sprite": "asset_sprite_gta_car_01"
}
```
[wróć do spisu treści](#Spis-treści)