Compare commits

..

10 Commits

51 changed files with 737 additions and 11 deletions

3
.gitattributes vendored Normal file
View File

@ -0,0 +1,3 @@
*.jpg filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text

View File

@ -1,19 +1,47 @@
help:
@echo "Options:"
@echo "\tmake pdf"
@echo "\tmake creature"
@echo "\tmake show"
.PHONY: pdf
pdf: overview.pdf
rubbish/:
mkdir rubbish
RANDOM != date +%s
TMP := /tmp/$(RANDOM).md
NAME := $(shell head -1 $(TMP) 2>/dev/null| tail -c+3)
.PHONY: creature
creature: stats/$(NAME).md
$(TMP):
cp stats/template.md $(TMP)
$$EDITOR $(TMP)
stats/$(NAME).md: $(TMP)
mv $(TMP) stats/$(NAME).md
overview.pdf:| rubbish/overview.pdf
ln rubbish/overview.pdf overview.pdf
rubbish/overview.pdf: overview.tex
overview.tex: overview.md | rubbish/
lowdown -stlatex overview.md > overview.tex
lowdown -stlatex -m shiftheadinglevelby=1 overview.md > overview.tex
rubbish/overview.pdf: overview.tex
pdflatex -output-directory rubbish/ overview.tex
COLLECTION := /tmp/collection.md
.PHONY: show
show: $(COLLECTION)
$(COLLECTION): overview.md World
@./parse.sh overview.md > $(COLLECTION)
@./parse.sh World/Players_are_Entropy.md >> $(COLLECTION)
@./parse.sh Mechanics/Minds.md >> $(COLLECTION)
@./parse.sh Mechanics/Stats.md >> $(COLLECTION)
@lowdown -sTterm $(COLLECTION) | less -R
.PHONY: clean
clean:
$(RM) -r rubbish overview.tex
$(RM) -r rubbish overview.tex $(COLLECTION)

38
Mechanics/Minds.md Normal file
View File

@ -0,0 +1,38 @@
Intelligence `-8`: The Ooze
===========================
The ooze has a very simple mind, and forms the basic of all minds.
.so flow-8.graph
If the ooze joins with smaller pieces of ooze, this works exactly like eating.
Which eats which does not matter to the ooze.
The question of whether two oozes come together through ingestion or mating is also irrelevant to the ooze.
It moves forward, and embraces the good in life, without any distinctions.
Intelligence `-7`: The Insect
===========================
The insect-brain acts like the ooze, but recognizes other creatures as friendly, and remembers spaces.
The insects literally have a smaller version of the main map in their head, but they have limited memory.
...they quite literally have a number of kilobytes each to remember a finite amount of space.
Intelligence `-6`: The Wolf
===========================
At this level of intelligence, the creature begins to think with others.
They do this by voting on a leader, then each of the creatures follows that leader.
.so flow-6.graph
Intelligence `-5`: The Goblin
=============================
This stage should probably be left until the previous intelligence levels have been dealt with.
Options include:
- Simulation: play out possible scenarios in the creature's head by simulating the segment of the map which it knows, at 10x normal speed.
- Skills: Just list off particular things, like 'fishing', or 'crafting spears', then deal with them individually.

38
Mechanics/Stats.md Normal file
View File

@ -0,0 +1,38 @@
Attribute + Skill
=================
Theory
------
Everything is two things: An attribute, plus a Skill.
They combine in different ways.
| Strength | Dexterity | Speed | Intelligence | Wits | Charisma |
|:--------:|:--------:|:--------:|:--------:|:--------:|:--------:|
| Academics | Orating to a massive crowd | Forgery | Courier Runs | Recalling facts | Resisting an enchantment spell | Storytelling |
| Athletics | Lifting heavy loads | Climbing | Sprinting | Finding the easiest route to climb | Identifying optimal climbing conditions | Stage acrobatics |
| Deceit | Intimidation | Feigning an injury | Spreading a rumour across an entire town | Crafting a plausible lie | Making a quick excuse | Implausible lies |
| Stealth | Hiding in a hay bail | Moving quietly | Escaping into a crowd | Identifying the best hiding spot | Quickly hiding | Slipping into a party uninvited |
None of this should ever be hard coded.
The programmer should - at any point - decide that a creature's `X + Y` will affect how the environment responds.
For the most part, this will be a simple comparison.
```pseudo code
if ( Strength + Wyldcrafting > 3 ) {
self.pickup(object)
}
```
Application
-----------
Within the game, the main combinations will probably be:
- **Running**: Speed + Athletics
- **Gathering**: Dexterity + Wyldcrafting
- **Swimming**: Speed + Seafaring

20
Mechanics/flow-6.graph Normal file
View File

@ -0,0 +1,20 @@
[ START ] --> [ damage? ]
[ Anyone know where food is? ] <-- me! --> [ We go to food! ]
[ Anyone know where food is? ] -- someone? --> [ I follow them ]
[ Anyone know where food is? ] -- nobody... --> [ Do I see someone bigger than me? ]
[ Do I see someone bigger than me? ] -- No --> [ howl! ]
[ Do I see someone bigger than me? ] -- Yes --> [ silence ]
[ silence ], [ howl! ] --> [ listen ]
[ listen ] -- one howl --> [ we follow, you lead ]
[ listen ] -- some howls --> [ howlers fight (one punch only) ]
[ listen ] -- no howls --> [ (unreachable state) RUN AWAY! ]
[ howlers fight (one punch only) ] --> [ Do I see someone bigger than me? ]
[ damage? ] -- yes --> [ run opposite way! ]
[ damage? ] -- no --> [ am I alone? ]
[ am I alone? ] -- yes --> [ food? ]
[ am I alone? ] -- no --> [ Anyone know where food is? ]
[ food? ] -- here --> [ eat ]
[ eat ] -- X=1 --> [ food? ]
[ food? ] -- near --> [ move to food ]
[ food? ] -- no --> [ move X squares in random direction ]
[ move X squares in random direction ] -- increase-X --> [ food? ]

8
Mechanics/flow-8.graph Normal file
View File

@ -0,0 +1,8 @@
[ START ] --> [ damage? ]
[ damage? ] -- yes --> [ run opposite way! ]
[ damage? ] -- no --> [ food? ]
[ food? ] -- here --> [ eat ]
[ eat ] -- X=1 --> [ food? ]
[ food? ] -- near --> [ move to food ]
[ food? ] -- no --> [ move X squares in random direction ]
[ move X squares in random direction ] -- increase-X --> [ food? ]

View File

@ -10,7 +10,7 @@ Plan
Read the overview.
PDF Dependencies
Dependencies
============
- `texlive`
@ -23,3 +23,24 @@ PDF Dependencies
* `lmodern`
* `hyperref`
- `lowdown`
- `graph-easy`
Godot Note
===========
If your [graphics card does not support vulcan](https://github.com/godotengine/godot/issues/58927), you may need to start godot like this:
```bash
godot --rendering-driver opengl3
```
Git Large File Server
=====================
Git's large-file-server (LFS) lets you track your fat binary files, without making the repository bloated and awful for everyone else in the future.
If you want to track 'jpg' files, you can track them like this:
```bash
git lfs track "*jpg"
```

21
parse.sh Executable file
View File

@ -0,0 +1,21 @@
#!/bin/sh
target="$1"
cd "$(dirname "$target")"
fileName="$(basename "$target")"
sectionName="$(basename -s .md "$target" | tr '_' ' ')"
printf "\n\n# $sectionName\n"
while read -r line; do
echo "$line" | grep -q '^.so ' && \
file="$(echo "$line" | grep '^.so ' | cut -d' ' -f2 )" && \
[ -e "$file" ] && \
echo '```graph' && \
cat "$file" | graph-easy --boxart && \
echo '```' || \
echo "$line"
done < "$fileName"

1
src/.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
*.jpeg filter=lfs diff=lfs merge=lfs -text

View File

@ -0,0 +1,3 @@
source_md5="9a4104dff00df852016292feb74c969d"
dest_md5="751dd545e5a5763328b952d739c01fd6"

View File

@ -0,0 +1,3 @@
source_md5="d452341a0992cf84787acc1df8149fa7"
dest_md5="5a05aa8c2f602d12f8dd18be7600637b"

View File

@ -0,0 +1,3 @@
source_md5="d452341a0992cf84787acc1df8149fa7"
dest_md5="7a8bde47de61359d339cd9ab39972258"

View File

@ -0,0 +1,3 @@
source_md5="5718adcd74e730a5786a66f5303d55d0"
dest_md5="bde353017c7147330bebe01b8e0b9081"

View File

@ -0,0 +1,3 @@
source_md5="47313fa4c47a9963fddd764e1ec6e4a8"
dest_md5="2ded9e7f9060e2b530aab678b135fc5b"

View File

@ -0,0 +1,3 @@
source_md5="11aa5994678b65327c09e0cf048cc960"
dest_md5="5a2ebb8d76a3fd626f8148b380c8452a"

View File

@ -0,0 +1,3 @@
source_md5="11aa5994678b65327c09e0cf048cc960"
dest_md5="5a2ebb8d76a3fd626f8148b380c8452a"

View File

@ -0,0 +1,3 @@
source_md5="5c49c03355dba6f69dd7db043dcf285e"
dest_md5="127a63ab2cee1694af5226e606fbefde"

View File

@ -0,0 +1,3 @@
source_md5="5c49c03355dba6f69dd7db043dcf285e"
dest_md5="127a63ab2cee1694af5226e606fbefde"

View File

@ -0,0 +1,3 @@
source_md5="ab47a8fed0ae7444d44586235a4d5fee"
dest_md5="9f637ed36157171de2c9855859ffb703"

View File

@ -0,0 +1,3 @@
source_md5="ab47a8fed0ae7444d44586235a4d5fee"
dest_md5="5ac92b9ef3914f94598597d4ab0792a0"

View File

@ -0,0 +1,3 @@
source_md5="2ccb885e506f1c1dc85ae533ed064e28"
dest_md5="bc6f3037a9e45f5a87a3ff64eff32a45"

12
src/NPCs/Goblin.tscn Normal file
View File

@ -0,0 +1,12 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://NPCs/goblin.png" type="Texture" id=1]
[node name="Goblin" type="KinematicBody2D"]
[node name="goblin" type="Sprite" parent="."]
position = Vector2( 0.380203, -0.127379 )
texture = ExtResource( 1 )
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
polygon = PoolVector2Array( -2.66919, -3.30936, -2.58081, 2.92202, 2.41314, 2.92202, 2.36894, -3.35355 )

12
src/NPCs/Ooze.tscn Normal file
View File

@ -0,0 +1,12 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://NPCs/ooze.png" type="Texture" id=1]
[node name="Ooze" type="KinematicBody2D"]
[node name="ooze" type="Sprite" parent="."]
position = Vector2( -0.061738, 0.18198 )
texture = ExtResource( 1 )
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
polygon = PoolVector2Array( 4.09251, -4.06066, 4.04832, 4.15946, -4.1276, 4.02687, -4.1718, -4.06066 )

BIN
src/NPCs/goblin.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/goblin.png-555c4de3e7de7d249da453933b804842.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/goblin.png"
dest_files=[ "res://.import/goblin.png-555c4de3e7de7d249da453933b804842.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

BIN
src/NPCs/moss.png (Stored with Git LFS) Normal file

Binary file not shown.

34
src/NPCs/moss.png.import Normal file
View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/moss.png-61d539c9df559a4b157329d26994cee7.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/moss.png"
dest_files=[ "res://.import/moss.png-61d539c9df559a4b157329d26994cee7.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

12
src/NPCs/moss.tscn Normal file
View File

@ -0,0 +1,12 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://NPCs/moss.png" type="Texture" id=1]
[node name="Moss" type="StaticBody2D"]
[node name="moss" type="Sprite" parent="."]
position = Vector2( 0.110608, -0.127491 )
texture = ExtResource( 1 )
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
polygon = PoolVector2Array( -3.90663, -4.01647, -3.77405, 3.8501, 4.04832, 3.8059, 4.09251, -4.01647 )

BIN
src/NPCs/ooze.png (Stored with Git LFS) Normal file

Binary file not shown.

34
src/NPCs/ooze.png.import Normal file
View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/ooze.png-0a3aed31cac3950abca695916d8e15ef.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/ooze.png"
dest_files=[ "res://.import/ooze.png-0a3aed31cac3950abca695916d8e15ef.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

BIN
src/Tilesets/dirt.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/dirt.png-ff175a3e6b1e0d87d0f80d5ca7a3d29e.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Tilesets/dirt.png"
dest_files=[ "res://.import/dirt.png-ff175a3e6b1e0d87d0f80d5ca7a3d29e.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

BIN
src/Tilesets/stone.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/stone.png-4f7def60038ccb460a48436a729efec6.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Tilesets/stone.png"
dest_files=[ "res://.import/stone.png-4f7def60038ccb460a48436a729efec6.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

BIN
src/Tilesets/water.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/water.png-154297d676290e71bc3fa3868b532a65.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Tilesets/water.png"
dest_files=[ "res://.import/water.png-154297d676290e71bc3fa3868b532a65.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

163
src/World.tscn Normal file
View File

@ -0,0 +1,163 @@
[gd_scene load_steps=14 format=2]
[ext_resource path="res://Tilesets/stone.png" type="Texture" id=1]
[ext_resource path="res://Tilesets/dirt.png" type="Texture" id=2]
[ext_resource path="res://Tilesets/water.png" type="Texture" id=3]
[ext_resource path="res://NPCs/Goblin.tscn" type="PackedScene" id=4]
[ext_resource path="res://NPCs/Ooze.tscn" type="PackedScene" id=5]
[ext_resource path="res://NPCs/moss.tscn" type="PackedScene" id=6]
[sub_resource type="ConvexPolygonShape2D" id=1]
points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
[sub_resource type="ConvexPolygonShape2D" id=2]
points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
[sub_resource type="ConvexPolygonShape2D" id=3]
points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
[sub_resource type="ConvexPolygonShape2D" id=4]
points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
[sub_resource type="ConvexPolygonShape2D" id=5]
points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
[sub_resource type="ConvexPolygonShape2D" id=6]
points = PoolVector2Array( 0, 0, 8, 0, 8, 8, 0, 8 )
[sub_resource type="TileSet" id=7]
0/name = "dirt.png 0"
0/texture = ExtResource( 2 )
0/tex_offset = Vector2( 0, 0 )
0/modulate = Color( 1, 1, 1, 1 )
0/region = Rect2( 0, 0, 24, 8 )
0/tile_mode = 1
0/autotile/bitmask_mode = 2
0/autotile/bitmask_flags = [ Vector2( 0, 0 ), 511, Vector2( 1, 0 ), 511, Vector2( 2, 0 ), 511 ]
0/autotile/icon_coordinate = Vector2( 0, 0 )
0/autotile/tile_size = Vector2( 8, 8 )
0/autotile/spacing = 0
0/autotile/occluder_map = [ ]
0/autotile/navpoly_map = [ ]
0/autotile/priority_map = [ ]
0/autotile/z_index_map = [ ]
0/occluder_offset = Vector2( 0, 0 )
0/navigation_offset = Vector2( 0, 0 )
0/shape_offset = Vector2( 0, 0 )
0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
0/shape_one_way = false
0/shape_one_way_margin = 0.0
0/shapes = [ ]
0/z_index = 0
1/name = "stone.png 1"
1/texture = ExtResource( 1 )
1/tex_offset = Vector2( 0, 0 )
1/modulate = Color( 1, 1, 1, 1 )
1/region = Rect2( 0, 0, 24, 16 )
1/tile_mode = 1
1/autotile/bitmask_mode = 2
1/autotile/bitmask_flags = [ Vector2( 0, 0 ), 511, Vector2( 0, 1 ), 511, Vector2( 1, 0 ), 511, Vector2( 1, 1 ), 511, Vector2( 2, 0 ), 511, Vector2( 2, 1 ), 511 ]
1/autotile/icon_coordinate = Vector2( 0, 0 )
1/autotile/tile_size = Vector2( 8, 8 )
1/autotile/spacing = 0
1/autotile/occluder_map = [ ]
1/autotile/navpoly_map = [ ]
1/autotile/priority_map = [ ]
1/autotile/z_index_map = [ ]
1/occluder_offset = Vector2( 0, 0 )
1/navigation_offset = Vector2( 0, 0 )
1/shape_offset = Vector2( 0, 0 )
1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
1/shape = SubResource( 1 )
1/shape_one_way = false
1/shape_one_way_margin = 1.0
1/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 1 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
}, {
"autotile_coord": Vector2( 1, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 2 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
}, {
"autotile_coord": Vector2( 2, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 3 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
}, {
"autotile_coord": Vector2( 0, 1 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 4 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
}, {
"autotile_coord": Vector2( 1, 1 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 5 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
}, {
"autotile_coord": Vector2( 2, 1 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 6 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
1/z_index = 0
2/name = "water.png 2"
2/texture = ExtResource( 3 )
2/tex_offset = Vector2( 0, 0 )
2/modulate = Color( 1, 1, 1, 1 )
2/region = Rect2( 0, 0, 24, 24 )
2/tile_mode = 1
2/autotile/bitmask_mode = 2
2/autotile/bitmask_flags = [ Vector2( 0, 0 ), 432, Vector2( 0, 1 ), 438, Vector2( 0, 2 ), 54, Vector2( 1, 0 ), 504, Vector2( 1, 1 ), 511, Vector2( 1, 2 ), 63, Vector2( 2, 0 ), 216, Vector2( 2, 1 ), 219, Vector2( 2, 2 ), 27 ]
2/autotile/icon_coordinate = Vector2( 1, 1 )
2/autotile/tile_size = Vector2( 8, 8 )
2/autotile/spacing = 0
2/autotile/occluder_map = [ ]
2/autotile/navpoly_map = [ ]
2/autotile/priority_map = [ ]
2/autotile/z_index_map = [ ]
2/occluder_offset = Vector2( 0, 0 )
2/navigation_offset = Vector2( 0, 0 )
2/shape_offset = Vector2( 0, 0 )
2/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
2/shape_one_way = false
2/shape_one_way_margin = 0.0
2/shapes = [ ]
2/z_index = 0
[node name="World" type="Node2D"]
[node name="TileMap" type="TileMap" parent="."]
position = Vector2( 2, 0 )
tile_set = SubResource( 7 )
cell_size = Vector2( 8, 8 )
cell_quadrant_size = 8
cell_custom_transform = Transform2D( 8, 0, 0, 8, 0, 0 )
format = 1
tile_data = PoolIntArray( 0, 1, 0, 1, 1, 0, 2, 1, 0, 3, 1, 0, 4, 1, 0, 5, 1, 0, 6, 1, 0, 7, 1, 0, 8, 1, 0, 9, 1, 0, 65536, 1, 0, 65537, 0, 0, 65538, 0, 0, 65539, 0, 0, 65540, 2, 65537, 65541, 2, 65537, 65542, 2, 65537, 65543, 1, 0, 65544, 1, 0, 65545, 1, 0, 131072, 1, 0, 131073, 0, 0, 131074, 1, 0, 131075, 0, 0, 131076, 0, 0, 131077, 1, 0, 131078, 2, 65537, 131079, 1, 0, 131080, 1, 0, 131081, 1, 0, 196608, 1, 0, 196609, 0, 0, 196610, 1, 0, 196611, 0, 0, 196612, 0, 0, 196613, 0, 0, 196614, 2, 65537, 196615, 2, 65537, 196616, 2, 2, 196617, 1, 0, 262144, 1, 0, 262145, 0, 0, 262146, 1, 0, 262147, 0, 0, 262148, 0, 0, 262149, 1, 0, 262150, 2, 65536, 262151, 2, 65537, 262152, 2, 65538, 262153, 1, 0, 327680, 1, 0, 327681, 0, 0, 327682, 1, 0, 327683, 0, 0, 327684, 0, 0, 327685, 0, 0, 327686, 2, 65536, 327687, 2, 65537, 327688, 2, 65538, 327689, 1, 0, 393216, 1, 0, 393217, 0, 0, 393218, 0, 0, 393219, 0, 0, 393220, 0, 0, 393221, 0, 0, 393222, 2, 131072, 393223, 2, 131073, 393224, 2, 131074, 393225, 1, 0, 458752, 1, 0, 458753, 1, 0, 458754, 1, 0, 458755, 1, 0, 458756, 1, 0, 458757, 1, 0, 458758, 1, 0, 458759, 1, 0, 458760, 1, 0, 458761, 1, 0 )
[node name="Moss" parent="TileMap" instance=ExtResource( 6 )]
position = Vector2( 35.5938, 20.699 )
[node name="Moss2" parent="TileMap" instance=ExtResource( 6 )]
position = Vector2( 44.5283, 44.7697 )
[node name="Ooze" parent="TileMap" instance=ExtResource( 5 )]
position = Vector2( 27.8155, 44.3492 )
[node name="Goblin" parent="TileMap" instance=ExtResource( 4 )]
position = Vector2( 13.9407, 21.5399 )
[node name="Goblin2" parent="TileMap" instance=ExtResource( 4 )]
position = Vector2( 35.4887, 33.6278 )
[node name="Ooze2" parent="TileMap" instance=ExtResource( 5 )]
position = Vector2( 35.3835, 52.6531 )

7
src/default_env.tres Normal file
View File

@ -0,0 +1,7 @@
[gd_resource type="Environment" load_steps=2 format=2]
[sub_resource type="ProceduralSky" id=1]
[resource]
background_mode = 2
background_sky = SubResource( 1 )

BIN
src/icon.png (Stored with Git LFS) Normal file

Binary file not shown.

34
src/icon.png.import Normal file
View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://icon.png"
dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

37
src/project.godot Normal file
View File

@ -0,0 +1,37 @@
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=4
_global_script_classes=[ ]
_global_script_class_icons={
}
[application]
config/name="Fishtank"
run/main_scene="res://World.tscn"
config/icon="res://icon.png"
[display]
window/size/width=80
window/size/height=64
window/size/resizable=false
window/size/fullscreen=true
window/size/test_width=1280
window/size/test_height=720
window/stretch/mode="2d"
[rendering]
quality/driver/driver_name="GLES2"
vram_compression/import_etc=true
vram_compression/import_etc2=false
environment/default_environment="res://default_env.tres"

View File

@ -1,19 +1,29 @@
# Blobs
- Abundant oozes will split into smaller pieces, which then go up to the exit, or down river.
- Death is final: the ooze leaves the environment. Other may enter later, from a river, or entrance.
- Death is final for that ooze: it leaves the environment. Other may enter later, from a river, or entrance.
## Numbers
- Metabolism 3
- Speed = `6- HP` (the weaker it becomes, the faster it runs).
- Metabolism: 3
- Strength: -2/6
- Dexterity: 0
- Speed: `6- HP`
* (the weaker it becomes, the faster it runs).
- Wits: -4
- Intelligence: -8
* (mindless)
### Special
Property Thief: this jelly steals the properties of everything it consumes.
It is acidic because it eats acidic moss.
If it ate glowing mushrooms, it would glow for a while.
**Property Thief:** this jelly steals the properties of everything it consumes.
- When eating acidic moss, it becomes acidic.
- When eating glowing mushrooms, it glows.
When it eats, it gains +1 HP, and puts one property in that 'HP slot'.
Once Damaged, it loses HP, and may lose a property if that HP slot had a property.
(first in, last out)
Once Damaged, it loses HP, and may lose a property if that HP slot had a property (first in, last out).
## Skills
Athletics 1