From 98f356e68b759bf84300290315d4ada09c41f79b Mon Sep 17 00:00:00 2001 From: jacopograndi Date: Fri, 14 Jan 2022 17:27:24 +0100 Subject: more docs --- docs/enemy/enemy.md | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 docs/enemy/enemy.md (limited to 'docs/enemy') diff --git a/docs/enemy/enemy.md b/docs/enemy/enemy.md new file mode 100644 index 0000000..114fb49 --- /dev/null +++ b/docs/enemy/enemy.md @@ -0,0 +1,114 @@ +## enemy system + +### design +The enemies are spawned by the wave system, their 3d model is a mathematical shape. These shapes are the 5 [Platonic solids](https://en.wikipedia.org/wiki/Platonic_solid), the 13 [Archimedean solids](https://en.wikipedia.org/wiki/Archimedean_solid) and their dual the 13 [Catalan solids](https://en.wikipedia.org/wiki/Catalan_solid), which amount to 31 shapes.
+ +The enemies are arranged in a tree based on their topology using [Conway polyhedron notation](https://en.wikipedia.org/wiki/Conway_polyhedron_notation). Four operators are used: kis, ambo, dual, snub (k, a, d, s). From these operators all the shapes in the game can be obtained if the staring shape is a Tetrahedron (T). For example, an Octahedron (O) is an ambo Tetrahedron (aT): ) = aT. saT is the snub cube, from which the game is named. Each node of the tree is a shape and each edge represent an operation. The root is T and each operation is appended to the left of T, so the snub cube saT is connected to the Octahedron aT and aT is connected to T.
+ +The other operators can be obtained by the four operator used: +- truncation: t = dkd +- expansion: e = aa +- bevel: b = dkda = td +- join: j = da +- meta: m = kda +- ortho: o = daa +- gyro: g = dsd + +**topology graph** +- T = [Tetrahedron](https://en.wikipedia.org/wiki/Tetrahedron) + - k, kT = [Triakis Tetrahedron](https://en.wikipedia.org/wiki/Triakis_tetrahedron) + - d, dkdT = dkT = [Truncated Tetrahedron](https://en.wikipedia.org/wiki/Truncated_tetrahedron) + - a, aT = O = [Octahedron](https://en.wikipedia.org/wiki/Octahedron) + - k, kaT = [Triakis Octahedron](https://en.wikipedia.org/wiki/Triakis_octahedron) + - d, dkaT = tC = [Truncated Cube](https://en.wikipedia.org/wiki/Truncated_cube) + - a, aaT = [Cuboctahedron](https://en.wikipedia.org/wiki/Cuboctahedron) + - d, daaT = jC = [Rhombic Dodecahedron](https://en.wikipedia.org/wiki/Rhombic_dodecahedron) + - k, kdaaT = mC = [Disdyakis Dodecahedron](https://en.wikipedia.org/wiki/Disdyakis_dodecahedron) + - d, dkdaaT = bC = taaT = [Truncated Cuboctahedron](https://en.wikipedia.org/wiki/Truncated_cuboctahedron) + - a, aaaT = eC = [Rhombicuboctahedron](https://en.wikipedia.org/wiki/Rhombicuboctahedron) + - d, daaaT = oC = [Deltoidal Icositetrahedron](https://en.wikipedia.org/wiki/Deltoidal_icositetrahedron) + - d, daT = C = [Cube](https://en.wikipedia.org/wiki/Cube) + - k, kdaT = [Tetrakis Hexahedron](https://en.wikipedia.org/wiki/Tetrakis_hexahedron) + - d, dkdaT = tO = [Truncated Octahedron](https://en.wikipedia.org/wiki/Truncated_octahedron) + - s, saT = [Snub Cube](https://en.wikipedia.org/wiki/Snub_cube) + - d, dsaT = g = [Pentagonal Icositetrahedron](https://en.wikipedia.org/wiki/Pentagonal_icositetrahedron) + - s, sT = [Icosahedron](https://en.wikipedia.org/wiki/Icosahedron) + - k, ksT = [Triakis icosahedron](https://en.wikipedia.org/wiki/Triakis_icosahedron) + - d, dksT = [Truncated Dodecahedron](https://en.wikipedia.org/wiki/Truncated_dodecahedron) + - a, asT = [Icosidodecahedron](https://en.wikipedia.org/wiki/Icosidodecahedron) + - d, dasT = jD = [Rhombic Triacontahedron](https://en.wikipedia.org/wiki/Rhombic_triacontahedron) + - k, kdaaT = mD = [Disdyakis Triacontahedron](https://en.wikipedia.org/wiki/Disdyakis_triacontahedron) + - d, dkdaaT = bD = [Truncated Icosidodecahedron](https://en.wikipedia.org/wiki/Truncated_icosidodecahedron) + - a, aasT = eD = [Rhombicosidodecahedron](https://en.wikipedia.org/wiki/Rhombicosidodecahedron) + - d, daasT = oD = [Deltoidal Hexecontahedron](https://en.wikipedia.org/wiki/Deltoidal_hexecontahedron) + - d, dsT = D [Dodecahedron](https://en.wikipedia.org/wiki/Dodecahedron) + - k, kdsT = [Pentakis Dodecahedron](https://en.wikipedia.org/wiki/Pentakis_dodecahedron) + - d, dkdsT = tI = [Truncated Icosahedron](https://en.wikipedia.org/wiki/Truncated_icosahedron) + - s, ssT = [Snub Dodecahedron](https://en.wikipedia.org/wiki/Snub_dodecahedron) + - d, dssT = gD = [Pentagonal Hexecontahedron](https://en.wikipedia.org/wiki/Pentagonal_hexecontahedron) + +**effects** + +Enemies start with 10 lives. When a life is lost and the shape is T, the shape dies. Otherwise, an operator is lost and lives are set back to 10. + +The enemies gain effects based on their topology: +- T: no effect +- k: speed, 20% +- a: damage, 2x +- d: duplicates on death (only when losing the d) +- s: armored (multiplies life by 3), speed -20% + +Effect stack exponentially, so aaaT does 2^2^2=8x more damage, ssT is very slow and very armored (3^3=9 shots). + +``` +Example for ssT: +1. after 90 damage, s is removed +5. after 30 damage, s is removed +6. after 10 damage, T dies. +``` + +``` +Example for dkdasT: +1. after 30 damage, d is removed and 4 kdasT are spawned +2. after 30 damage, k is removed +3. after 30 damage, d is removed and 2 asT are spawned +4. after 30 damage, a is removed +5. after 30 damage, s is removed +6. after 10 damage, T dies. +``` + +``` +Values of life(shape) +life(daaT) = 10 * 2*(10 * 3) = 70 +life(ssT) = 90 + 30 + 10 = 130 +life(dssT) = 90 + 2*(90 + 30 + 10) = 350 +life(dkdasT) = 30 + 4*(30 + 30 + 2*(30 + 30 + 10)) = 830 +``` + +--- + +### models +- **all 31 shapes** + +### path subsystem +- **hide/show** +- **instantiate** +- **follow** +- **destroy on end** + +### hierarchy +- **design topological hierarchy** + +### stats +- _name_ +- effects +- type/description + +### color change +- _change based on resource color_ + +### hit effect +- **dissolve** + +### gui +- info detail -- cgit v1.2.3-54-g00ecf