sprites for entities, with text glyph fallback
This commit is contained in:
parent
2c4b4ca143
commit
d6ba6c628c
17 changed files with 1486 additions and 1397 deletions
|
|
@ -2,7 +2,7 @@
|
|||
{
|
||||
"id": "npc_barkeep",
|
||||
"name": "barkeep",
|
||||
"renderable": { "glyph": "@", "fg": "#EE82EE", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "@", "sprite": "@", "fg": "#EE82EE", "bg": "#000000", "order": 1 },
|
||||
"flags": ["NEUTRAL", "IS_HUMAN"],
|
||||
"vision_range": 4,
|
||||
"quips": ["Drink?", "Something to eat?", "Don't go out on an empty stomach."]
|
||||
|
|
@ -10,7 +10,7 @@
|
|||
{
|
||||
"id": "npc_townsperson",
|
||||
"name": "townsperson",
|
||||
"renderable": { "glyph": "@", "fg": "#9fa86c", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "@", "sprite": "@", "fg": "#9fa86c", "bg": "#000000", "order": 1 },
|
||||
"flags": ["NEUTRAL", "RANDOM_PATH", "IS_HUMAN"],
|
||||
"vision_range": 4,
|
||||
"quips": ["Hello!", "Good morning.", "<a quiet complaint about chores>"]
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
{
|
||||
"id": "npc_drunk",
|
||||
"name": "drunk",
|
||||
"renderable": { "glyph": "@", "fg": "#a0a83c", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "@", "sprite": "@", "fg": "#a0a83c", "bg": "#000000", "order": 1 },
|
||||
"flags": ["NEUTRAL", "IS_HUMAN"],
|
||||
"vision_range": 4,
|
||||
"quips": ["Hic!", "H-Hic'.", "Get me 'nother, would you?"]
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
{
|
||||
"id": "npc_fisher",
|
||||
"name": "fisher",
|
||||
"renderable": { "glyph": "@", "fg": "#3ca3a8", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "@", "sprite": "@", "fg": "#3ca3a8", "bg": "#000000", "order": 1 },
|
||||
"flags": ["NEUTRAL", "IS_HUMAN"],
|
||||
"vision_range": 4,
|
||||
"quips": ["Hey."]
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
{
|
||||
"id": "npc_dockworker",
|
||||
"name": "dock worker",
|
||||
"renderable": { "glyph": "@", "fg": "#68d8de", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "@", "sprite": "@", "fg": "#68d8de", "bg": "#000000", "order": 1 },
|
||||
"flags": ["NEUTRAL", "IS_HUMAN"],
|
||||
"vision_range": 4,
|
||||
"quips": ["No boat for a few days.", "Not much for us to do."]
|
||||
|
|
@ -42,7 +42,7 @@
|
|||
{
|
||||
"id": "npc_priest",
|
||||
"name": "priest",
|
||||
"renderable": { "glyph": "@", "fg": "#FFFFFF", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "@", "sprite": "@", "fg": "#FFFFFF", "bg": "#000000", "order": 1 },
|
||||
"flags": ["NEUTRAL", "IS_HUMAN"],
|
||||
"vision_range": 4,
|
||||
"quips": ["Light's givings.", "<a quiet prayer>", "Bless you."]
|
||||
|
|
@ -50,7 +50,7 @@
|
|||
{
|
||||
"id": "npc_miner",
|
||||
"name": "miner",
|
||||
"renderable": { "glyph": "@", "fg": "#946123", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "@", "sprite": "@", "fg": "#946123", "bg": "#000000", "order": 1 },
|
||||
"flags": ["NEUTRAL", "IS_HUMAN"],
|
||||
"vision_range": 4,
|
||||
"attacks": [{ "name": "hits", "hit_bonus": 0, "damage": "1d8" }],
|
||||
|
|
@ -59,7 +59,7 @@
|
|||
{
|
||||
"id": "npc_guard",
|
||||
"name": "smalltown guard",
|
||||
"renderable": { "glyph": "@", "fg": "#034efc", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "@", "sprite": "@", "fg": "#034efc", "bg": "#000000", "order": 1 },
|
||||
"flags": ["NEUTRAL", "RANDOM_PATH", "IS_HUMAN"],
|
||||
"level": 2,
|
||||
"attacks": [{ "name": "hits", "hit_bonus": 0, "damage": "1d8" }],
|
||||
|
|
@ -69,7 +69,7 @@
|
|||
{
|
||||
"id": "rat",
|
||||
"name": "rat",
|
||||
"renderable": { "glyph": "r", "fg": "#aa6000", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "r", "sprite": "r", "fg": "#aa6000", "bg": "#000000", "order": 1 },
|
||||
"flags": [],
|
||||
"bac": 6,
|
||||
"attacks": [{ "name": "bites", "hit_bonus": 0, "damage": "1d2" }],
|
||||
|
|
@ -78,7 +78,7 @@
|
|||
{
|
||||
"id": "chicken",
|
||||
"name": "chicken",
|
||||
"renderable": { "glyph": "c", "fg": "#BB6000", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "c", "sprite": "c", "fg": "#BB6000", "bg": "#000000", "order": 1 },
|
||||
"flags": ["HERBIVORE"],
|
||||
"bac": 8,
|
||||
"attacks": [{ "name": "bites", "hit_bonus": 0, "damage": "1d3" }]
|
||||
|
|
@ -86,7 +86,7 @@
|
|||
{
|
||||
"id": "deer_little",
|
||||
"name": "fawn",
|
||||
"renderable": { "glyph": "q", "fg": "#a57037", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "q", "sprite": "q", "fg": "#a57037", "bg": "#000000", "order": 1 },
|
||||
"flags": ["HERBIVORE"],
|
||||
"bac": 8,
|
||||
"attacks": [{ "name": "kicks", "hit_bonus": 0, "damage": "1d2" }]
|
||||
|
|
@ -94,7 +94,7 @@
|
|||
{
|
||||
"id": "sheep_little",
|
||||
"name": "lamb",
|
||||
"renderable": { "glyph": "q", "fg": "#e7e7e7", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "q", "sprite": "q", "fg": "#e7e7e7", "bg": "#000000", "order": 1 },
|
||||
"flags": ["HERBIVORE", "SMALL_GROUP"],
|
||||
"bac": 10,
|
||||
"attacks": [{ "name": "kicks", "hit_bonus": 0, "damage": "1d2" }]
|
||||
|
|
@ -102,7 +102,7 @@
|
|||
{
|
||||
"id": "chicken_little",
|
||||
"name": "chick",
|
||||
"renderable": { "glyph": "c", "fg": "#fae478", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "c", "sprite": "c", "fg": "#fae478", "bg": "#000000", "order": 1 },
|
||||
"flags": ["HERBIVORE"],
|
||||
"bac": 10,
|
||||
"attacks": [{ "name": "bites", "hit_bonus": 0, "damage": "1d2" }]
|
||||
|
|
@ -110,7 +110,7 @@
|
|||
{
|
||||
"id": "horse_little",
|
||||
"name": "pony",
|
||||
"renderable": { "glyph": "u", "fg": "#b36c29", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "u", "sprite": "u", "fg": "#b36c29", "bg": "#000000", "order": 1 },
|
||||
"flags": ["HERBIVORE", "MULTIATTACK"],
|
||||
"level": 3,
|
||||
"bac": 6,
|
||||
|
|
@ -124,7 +124,7 @@
|
|||
{
|
||||
"id": "horse",
|
||||
"name": "horse",
|
||||
"renderable": { "glyph": "u", "fg": "#744d29", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "u", "sprite": "u", "fg": "#744d29", "bg": "#000000", "order": 1 },
|
||||
"flags": ["MULTIATTACK"],
|
||||
"level": 5,
|
||||
"bac": 5,
|
||||
|
|
@ -137,7 +137,7 @@
|
|||
{
|
||||
"id": "horse_large",
|
||||
"name": "warhorse",
|
||||
"renderable": { "glyph": "u", "fg": "#8a3520", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "u", "sprite": "u", "fg": "#8a3520", "bg": "#000000", "order": 1 },
|
||||
"flags": ["MULTIATTACK"],
|
||||
"level": 7,
|
||||
"bac": 4,
|
||||
|
|
@ -150,7 +150,7 @@
|
|||
{
|
||||
"id": "rat_giant",
|
||||
"name": "giant rat",
|
||||
"renderable": { "glyph": "r", "fg": "#bb8000", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "r", "sprite": "r", "fg": "#bb8000", "bg": "#000000", "order": 1 },
|
||||
"flags": ["SMALL_GROUP"],
|
||||
"level": 1,
|
||||
"bac": 7,
|
||||
|
|
@ -160,7 +160,7 @@
|
|||
{
|
||||
"id": "dog_little",
|
||||
"name": "little dog",
|
||||
"renderable": { "glyph": "d", "fg": "#FFFFFF", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "d", "sprite": "d", "fg": "#FFFFFF", "bg": "#000000", "order": 1 },
|
||||
"flags": ["NEUTRAL"],
|
||||
"level": 2,
|
||||
"bac": 6,
|
||||
|
|
@ -171,7 +171,7 @@
|
|||
{
|
||||
"id": "dog",
|
||||
"name": "dog",
|
||||
"renderable": { "glyph": "d", "fg": "#EEEEEE", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "d", "sprite": "d", "fg": "#EEEEEE", "bg": "#000000", "order": 1 },
|
||||
"flags": [],
|
||||
"level": 4,
|
||||
"bac": 5,
|
||||
|
|
@ -181,7 +181,7 @@
|
|||
{
|
||||
"id": "dog_large",
|
||||
"name": "large dog",
|
||||
"renderable": { "glyph": "d", "fg": "#DDDDDD", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "d", "sprite": "d", "fg": "#DDDDDD", "bg": "#000000", "order": 1 },
|
||||
"flags": [],
|
||||
"level": 6,
|
||||
"bac": 4,
|
||||
|
|
@ -191,7 +191,7 @@
|
|||
{
|
||||
"id": "gnome",
|
||||
"name": "gnome",
|
||||
"renderable": { "glyph": "G", "fg": "#AA5500", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "G", "sprite": "g2", "fg": "#AA5500", "bg": "#000000", "order": 1 },
|
||||
"flags": ["SMALL_GROUP", "IS_GNOME"],
|
||||
"level": 1,
|
||||
"speed": 6,
|
||||
|
|
@ -201,7 +201,7 @@
|
|||
{
|
||||
"id": "zombie_gnome",
|
||||
"name": "gnome zombie",
|
||||
"renderable": { "glyph": "z", "fg": "#AA5500", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "z", "sprite": "z", "fg": "#AA5500", "bg": "#000000", "order": 1 },
|
||||
"flags": ["MINDLESS"],
|
||||
"level": 1,
|
||||
"speed": 6,
|
||||
|
|
@ -212,7 +212,7 @@
|
|||
{
|
||||
"id": "goblin",
|
||||
"name": "goblin",
|
||||
"renderable": { "glyph": "g", "fg": "#00FF00", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "g", "sprite": "g", "fg": "#00FF00", "bg": "#000000", "order": 1 },
|
||||
"flags": [],
|
||||
"level": 1,
|
||||
"speed": 9,
|
||||
|
|
@ -221,7 +221,7 @@
|
|||
{
|
||||
"id": "kobold",
|
||||
"name": "kobold",
|
||||
"renderable": { "glyph": "k", "fg": "#AA5500", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "k", "sprite": "k", "fg": "#AA5500", "bg": "#000000", "order": 1 },
|
||||
"flags": [],
|
||||
"level": 1,
|
||||
"speed": 6,
|
||||
|
|
@ -231,7 +231,7 @@
|
|||
{
|
||||
"id": "zombie_kobold",
|
||||
"name": "kobold zombie",
|
||||
"renderable": { "glyph": "z", "fg": "#AA5500", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "z", "sprite": "z", "fg": "#AA5500", "bg": "#000000", "order": 1 },
|
||||
"flags": ["MINDLESS"],
|
||||
"level": 1,
|
||||
"speed": 6,
|
||||
|
|
@ -242,7 +242,7 @@
|
|||
{
|
||||
"id": "kobold_large",
|
||||
"name": "large kobold",
|
||||
"renderable": { "glyph": "k", "fg": "#70461b", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "k", "sprite": "k", "fg": "#70461b", "bg": "#000000", "order": 1 },
|
||||
"flags": [],
|
||||
"level": 1,
|
||||
"speed": 6,
|
||||
|
|
@ -253,7 +253,7 @@
|
|||
{
|
||||
"id": "zombie_orc",
|
||||
"name": "orc zombie",
|
||||
"renderable": { "glyph": "z", "fg": "#dbd830", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "z", "sprite": "z", "fg": "#dbd830", "bg": "#000000", "order": 1 },
|
||||
"flags": ["MINDLESS"],
|
||||
"level": 2,
|
||||
"bac": 9,
|
||||
|
|
@ -265,7 +265,7 @@
|
|||
{
|
||||
"id": "dwarf",
|
||||
"name": "dwarf",
|
||||
"renderable": { "glyph": "h", "fg": "#d61b1b", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "h", "sprite": "h", "fg": "#d61b1b", "bg": "#000000", "order": 1 },
|
||||
"flags": ["IS_DWARF"],
|
||||
"level": 2,
|
||||
"bac": 10,
|
||||
|
|
@ -277,7 +277,7 @@
|
|||
{
|
||||
"id": "zombie_dwarf",
|
||||
"name": "dwarf zombie",
|
||||
"renderable": { "glyph": "z", "fg": "#d61b1b", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "z", "sprite": "z", "fg": "#d61b1b", "bg": "#000000", "order": 1 },
|
||||
"flags": ["MINDLESS"],
|
||||
"level": 2,
|
||||
"bac": 9,
|
||||
|
|
@ -289,7 +289,7 @@
|
|||
{
|
||||
"id": "kobold_captain",
|
||||
"name": "kobold captain",
|
||||
"renderable": { "glyph": "k", "fg": "#9331ac", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "k", "sprite": "k", "fg": "#9331ac", "bg": "#000000", "order": 1 },
|
||||
"flags": [],
|
||||
"level": 2,
|
||||
"speed": 6,
|
||||
|
|
@ -300,7 +300,7 @@
|
|||
{
|
||||
"id": "spider_cave",
|
||||
"name": "cave spider",
|
||||
"renderable": { "glyph": "s", "fg": "#6b6b6b", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "s", "sprite": "s", "fg": "#6b6b6b", "bg": "#000000", "order": 1 },
|
||||
"flags": ["SMALL_GROUP"],
|
||||
"level": 1,
|
||||
"bac": 3,
|
||||
|
|
@ -311,7 +311,7 @@
|
|||
{
|
||||
"id": "ant_worker",
|
||||
"name": "worker ant",
|
||||
"renderable": { "glyph": "a", "fg": "#ca7631", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "a", "sprite": "a", "fg": "#ca7631", "bg": "#000000", "order": 1 },
|
||||
"flags": ["SMALL_GROUP"],
|
||||
"level": 2,
|
||||
"bac": 3,
|
||||
|
|
@ -322,7 +322,7 @@
|
|||
{
|
||||
"id": "ant_soldier",
|
||||
"name": "soldier ant",
|
||||
"renderable": { "glyph": "a", "fg": "#ca3f26", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "a", "sprite": "a", "fg": "#ca3f26", "bg": "#000000", "order": 1 },
|
||||
"flags": ["SMALL_GROUP", "POISON_RES"],
|
||||
"level": 3,
|
||||
"bac": 3,
|
||||
|
|
@ -336,7 +336,7 @@
|
|||
{
|
||||
"id": "caterpillar_cave",
|
||||
"name": "caterpillar",
|
||||
"renderable": { "glyph": "a", "fg": "#6b6b6b", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "a", "sprite": "a", "fg": "#6b6b6b", "bg": "#000000", "order": 1 },
|
||||
"flags": ["SMALL_GROUP"],
|
||||
"level": 1,
|
||||
"bac": 3,
|
||||
|
|
@ -347,7 +347,7 @@
|
|||
{
|
||||
"id": "caterpillar_giant",
|
||||
"name": "giant caterpillar",
|
||||
"renderable": { "glyph": "a", "fg": "#b9aeae", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "a", "sprite": "a", "fg": "#b9aeae", "bg": "#000000", "order": 1 },
|
||||
"flags": ["SMALL_GROUP"],
|
||||
"level": 2,
|
||||
"bac": 7,
|
||||
|
|
@ -358,7 +358,7 @@
|
|||
{
|
||||
"id": "jackal",
|
||||
"name": "jackal",
|
||||
"renderable": { "glyph": "d", "fg": "#AA5500", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "d", "sprite": "d", "fg": "#AA5500", "bg": "#000000", "order": 1 },
|
||||
"flags": ["CARNIVORE", "SMALL_GROUP"],
|
||||
"bac": 7,
|
||||
"attacks": [{ "name": "bites", "hit_bonus": 0, "damage": "1d2" }]
|
||||
|
|
@ -366,7 +366,7 @@
|
|||
{
|
||||
"id": "fox",
|
||||
"name": "fox",
|
||||
"renderable": { "glyph": "d", "fg": "#FF0000", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "d", "sprite": "d", "fg": "#FF0000", "bg": "#000000", "order": 1 },
|
||||
"flags": ["CARNIVORE"],
|
||||
"bac": 7,
|
||||
"attacks": [{ "name": "bites", "hit_bonus": 0, "damage": "1d3" }]
|
||||
|
|
@ -374,7 +374,7 @@
|
|||
{
|
||||
"id": "coyote",
|
||||
"name": "coyote",
|
||||
"renderable": { "glyph": "d", "fg": "#6E3215", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "d", "sprite": "d", "fg": "#6E3215", "bg": "#000000", "order": 1 },
|
||||
"flags": ["CARNIVORE", "SMALL_GROUP"],
|
||||
"level": 1,
|
||||
"bac": 7,
|
||||
|
|
@ -383,7 +383,7 @@
|
|||
{
|
||||
"id": "wolf",
|
||||
"name": "wolf",
|
||||
"renderable": { "glyph": "d", "fg": "#5E4225", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "d", "sprite": "d", "fg": "#5E4225", "bg": "#000000", "order": 1 },
|
||||
"flags": ["CARNIVORE"],
|
||||
"level": 5,
|
||||
"bac": 4,
|
||||
|
|
@ -392,7 +392,7 @@
|
|||
{
|
||||
"id": "goblin_chieftain",
|
||||
"name": "goblin chieftain",
|
||||
"renderable": { "glyph": "g", "fg": "#9331ac", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "g", "sprite": "g", "fg": "#9331ac", "bg": "#000000", "order": 1 },
|
||||
"flags": [],
|
||||
"level": 2,
|
||||
"speed": 9,
|
||||
|
|
@ -402,7 +402,7 @@
|
|||
{
|
||||
"id": "orc",
|
||||
"name": "orc",
|
||||
"renderable": { "glyph": "o", "fg": "#00FF00", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "o", "sprite": "o", "fg": "#00FF00", "bg": "#000000", "order": 1 },
|
||||
"flags": ["SMALL_GROUP"],
|
||||
"level": 1,
|
||||
"speed": 9,
|
||||
|
|
@ -412,7 +412,7 @@
|
|||
{
|
||||
"id": "orc_hill",
|
||||
"name": "hill orc",
|
||||
"renderable": { "glyph": "o", "fg": "#dbd830", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "o", "sprite": "o", "fg": "#dbd830", "bg": "#000000", "order": 1 },
|
||||
"flags": ["LARGE_GROUP"],
|
||||
"level": 2,
|
||||
"speed": 9,
|
||||
|
|
@ -422,7 +422,7 @@
|
|||
{
|
||||
"id": "orc_captain",
|
||||
"name": "orc captain",
|
||||
"renderable": { "glyph": "o", "fg": "#9331ac", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "o", "sprite": "o", "fg": "#9331ac", "bg": "#000000", "order": 1 },
|
||||
"flags": ["MULTIATTACK"],
|
||||
"level": 5,
|
||||
"speed": 5,
|
||||
|
|
@ -435,7 +435,7 @@
|
|||
{
|
||||
"id": "warg",
|
||||
"name": "warg",
|
||||
"renderable": { "glyph": "d", "fg": "#8b7164", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "d", "sprite": "d", "fg": "#8b7164", "bg": "#000000", "order": 1 },
|
||||
"flags": ["SMALL_GROUP"],
|
||||
"level": 7,
|
||||
"bac": 4,
|
||||
|
|
@ -446,7 +446,7 @@
|
|||
{
|
||||
"id": "jaguar",
|
||||
"name": "jaguar",
|
||||
"renderable": { "glyph": "f", "fg": "#d3b947", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "f", "sprite": "f", "fg": "#d3b947", "bg": "#000000", "order": 1 },
|
||||
"flags": ["MULTIATTACK"],
|
||||
"level": 4,
|
||||
"bac": 6,
|
||||
|
|
@ -461,7 +461,7 @@
|
|||
{
|
||||
"id": "lynx",
|
||||
"name": "lynx",
|
||||
"renderable": { "glyph": "f", "fg": "#b5d347", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "f", "sprite": "f", "fg": "#b5d347", "bg": "#000000", "order": 1 },
|
||||
"flags": ["MULTIATTACK"],
|
||||
"level": 5,
|
||||
"bac": 6,
|
||||
|
|
@ -476,7 +476,7 @@
|
|||
{
|
||||
"id": "panther",
|
||||
"name": "panther",
|
||||
"renderable": { "glyph": "f", "fg": "#58554e", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "f", "sprite": "f", "fg": "#58554e", "bg": "#000000", "order": 1 },
|
||||
"flags": ["MULTIATTACK"],
|
||||
"level": 5,
|
||||
"bac": 6,
|
||||
|
|
@ -491,7 +491,7 @@
|
|||
{
|
||||
"id": "ogre",
|
||||
"name": "ogre",
|
||||
"renderable": { "glyph": "O", "fg": "#10A70d", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "O", "sprite": "o2", "fg": "#10A70d", "bg": "#000000", "order": 1 },
|
||||
"flags": ["SMALL_GROUP"],
|
||||
"level": 5,
|
||||
"bac": 5,
|
||||
|
|
@ -502,7 +502,7 @@
|
|||
{
|
||||
"id": "treant_small",
|
||||
"name": "treant sapling",
|
||||
"renderable": { "glyph": "♠️", "fg": "#10570d", "bg": "#000000", "order": 1 },
|
||||
"renderable": { "glyph": "♠️", "sprite": "spade", "fg": "#10570d", "bg": "#000000", "order": 1 },
|
||||
"flags": ["LARGE_GROUP", "GREEN_BLOOD", "FIRE_WEAK"],
|
||||
"level": 2,
|
||||
"bac": 12,
|
||||
|
|
|
|||
|
|
@ -2,13 +2,13 @@
|
|||
{
|
||||
"id": "door",
|
||||
"name": "door",
|
||||
"renderable": { "glyph": "+", "sprite": 17, "fg": "#00FFFF", "bg": "#000000", "order": 2 },
|
||||
"renderable": { "glyph": "+", "sprite": "door_wood_h_closed", "colour_sprite": false, "fg": "#00FFFF", "bg": "#000000", "order": 2 },
|
||||
"flags": ["DOOR"]
|
||||
},
|
||||
{
|
||||
"id": "prop_altar",
|
||||
"name": "altar",
|
||||
"renderable": { "glyph": "_", "fg": "#FFFFFF", "bg": "#000000", "order": 2 },
|
||||
"renderable": { "glyph": "_", "sprite": "tombstone", "colour_sprite": false, "fg": "#FFFFFF", "bg": "#000000", "order": 2 },
|
||||
"flags": ["ENTRY_TRIGGER"],
|
||||
"effects": { "heal": "8d8" }
|
||||
},
|
||||
|
|
@ -21,64 +21,64 @@
|
|||
{
|
||||
"id": "prop_table",
|
||||
"name": "table",
|
||||
"renderable": { "glyph": "-", "sprite": 52, "fg": "#AAAAAA", "bg": "#000000", "order": 2 },
|
||||
"renderable": { "glyph": "-", "sprite": "table", "colour_sprite": false, "fg": "#AAAAAA", "bg": "#000000", "order": 2 },
|
||||
"flags": []
|
||||
},
|
||||
{
|
||||
"id": "prop_hay",
|
||||
"name": "hay",
|
||||
"renderable": { "glyph": "%", "fg": "#c7ad39", "bg": "#000000", "order": 2 },
|
||||
"renderable": { "glyph": "%", "sprite": "%", "fg": "#c7ad39", "bg": "#000000", "order": 2 },
|
||||
"flags": []
|
||||
},
|
||||
{
|
||||
"id": "prop_statue",
|
||||
"name": "statue",
|
||||
"renderable": { "glyph": "@", "sprite": 29, "fg": "#ffffff", "bg": "#000000", "order": 2 },
|
||||
"renderable": { "glyph": "@", "sprite": "statue_warrior", "colour_sprite": false, "fg": "#ffffff", "bg": "#000000", "order": 2 },
|
||||
"flags": []
|
||||
},
|
||||
{
|
||||
"id": "prop_bed",
|
||||
"name": "bed",
|
||||
"renderable": { "glyph": "=", "sprite": 50, "fg": "#AAAAAA", "bg": "#000000", "order": 2 },
|
||||
"renderable": { "glyph": "=", "sprite": "bed", "colour_sprite": false, "fg": "#AAAAAA", "bg": "#000000", "order": 2 },
|
||||
"flags": []
|
||||
},
|
||||
{
|
||||
"id": "prop_chair",
|
||||
"name": "chair",
|
||||
"renderable": { "glyph": "└", "sprite": 51, "fg": "#AAAAAA", "bg": "#000000", "order": 2 },
|
||||
"renderable": { "glyph": "└", "sprite": "chair", "colour_sprite": false, "fg": "#AAAAAA", "bg": "#000000", "order": 2 },
|
||||
"flags": []
|
||||
},
|
||||
{
|
||||
"id": "prop_candle",
|
||||
"name": "candle",
|
||||
"renderable": { "glyph": "Ä", "sprite": 3, "fg": "#FFA500", "bg": "#000000", "order": 2 },
|
||||
"renderable": { "glyph": "Ä", "sprite": "candles_a1", "colour_sprite": false, "fg": "#FFA500", "bg": "#000000", "order": 2 },
|
||||
"flags": []
|
||||
},
|
||||
{
|
||||
"id": "trap_bear",
|
||||
"name": "bear trap",
|
||||
"renderable": { "glyph": "^", "fg": "#e6e6e6", "bg": "#000000", "order": 2 },
|
||||
"renderable": { "glyph": "^", "sprite": "trap", "colour_sprite": false, "fg": "#e6e6e6", "bg": "#000000", "order": 2 },
|
||||
"flags": ["HIDDEN", "ENTRY_TRIGGER", "SINGLE_ACTIVATION"],
|
||||
"effects": { "damage": "2d4" }
|
||||
},
|
||||
{
|
||||
"id": "trap_mini_mine",
|
||||
"name": "mini-mine",
|
||||
"renderable": { "glyph": "^", "fg": "#ff1e00", "bg": "#000000", "order": 2 },
|
||||
"renderable": { "glyph": "^", "sprite": "^", "fg": "#ff1e00", "bg": "#000000", "order": 2 },
|
||||
"flags": ["ENTRY_TRIGGER", "SINGLE_ACTIVATION"],
|
||||
"effects": { "damage": "2d4", "aoe": "3" }
|
||||
},
|
||||
{
|
||||
"id": "trap_stonefall",
|
||||
"name": "stonefall trap",
|
||||
"renderable": { "glyph": "^", "fg": "#beb5a7", "bg": "#000000", "order": 2 },
|
||||
"renderable": { "glyph": "^", "sprite": "^", "fg": "#beb5a7", "bg": "#000000", "order": 2 },
|
||||
"flags": ["HIDDEN", "ENTRY_TRIGGER", "SINGLE_ACTIVATION"],
|
||||
"effects": { "damage": "2d10" }
|
||||
},
|
||||
{
|
||||
"id": "trap_confusion",
|
||||
"name": "magic trap",
|
||||
"renderable": { "glyph": "^", "fg": "#df07df", "bg": "#000000", "order": 2 },
|
||||
"renderable": { "glyph": "^", "sprite": "magic_e1", "colour_sprite": false, "fg": "#df07df", "bg": "#000000", "order": 2 },
|
||||
"flags": ["HIDDEN", "ENTRY_TRIGGER", "SINGLE_ACTIVATION"],
|
||||
"effects": { "confusion": "3" }
|
||||
}
|
||||
|
|
|
|||
2470
resources/td.json
2470
resources/td.json
File diff suppressed because it is too large
Load diff
BIN
resources/td.png
BIN
resources/td.png
Binary file not shown.
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 27 KiB |
|
|
@ -168,7 +168,7 @@ pub fn render_camera(ecs: &World, ctx: &mut BTerm) {
|
|||
}
|
||||
}
|
||||
if draw {
|
||||
if let Some(sprite) = render.sprite {
|
||||
/* if let Some(sprite) = render.sprite {
|
||||
ctx.set_active_console(0);
|
||||
ctx.add_sprite(
|
||||
Rect::with_size(
|
||||
|
|
@ -182,7 +182,7 @@ pub fn render_camera(ecs: &World, ctx: &mut BTerm) {
|
|||
sprite
|
||||
);
|
||||
ctx.set_active_console(ENTITY_LAYER);
|
||||
} else {
|
||||
} else */ {
|
||||
ctx.set(
|
||||
entity_offset_x + bounds.x_offset,
|
||||
entity_offset_y + bounds.y_offset,
|
||||
|
|
|
|||
|
|
@ -41,7 +41,8 @@ pub struct OtherLevelPosition {
|
|||
#[derive(Component, ConvertSaveload, Clone)]
|
||||
pub struct Renderable {
|
||||
pub glyph: FontCharType,
|
||||
pub sprite: Option<usize>,
|
||||
pub sprite: Option<String>,
|
||||
pub colour_sprite: bool,
|
||||
pub fg: RGB,
|
||||
pub bg: RGB,
|
||||
pub render_order: i32,
|
||||
|
|
|
|||
|
|
@ -18,12 +18,12 @@ pub fn render(draw: bool, gfx: &mut Graphics, font: ¬an::draw::Font) {
|
|||
}
|
||||
}
|
||||
|
||||
/// Render with specific params.
|
||||
/// Render with specificied params.
|
||||
pub fn render_log(gfx: &mut Graphics, font: ¬an::draw::Font, pos: &(f32, f32), width: f32) {
|
||||
let mut text = gfx.create_text();
|
||||
let log = LOG.lock().unwrap();
|
||||
let latest: Vec<_> = log.iter().rev().take(5).collect();
|
||||
let mut init = false;
|
||||
let mut initialised = false;
|
||||
let mut y = pos.1;
|
||||
for (_, entries) in latest {
|
||||
let mut written_on_line = false;
|
||||
|
|
@ -37,14 +37,14 @@ pub fn render_log(gfx: &mut Graphics, font: ¬an::draw::Font, pos: &(f32, f32)
|
|||
.color(Color::from_rgb(frag.colour.r, frag.colour.g, frag.colour.b))
|
||||
.v_align_bottom();
|
||||
written_on_line = true;
|
||||
init = true;
|
||||
initialised = true;
|
||||
} else {
|
||||
text.chain(&frag.text)
|
||||
.color(Color::from_rgb(frag.colour.r, frag.colour.g, frag.colour.b))
|
||||
.size(FONTSIZE);
|
||||
}
|
||||
}
|
||||
if init {
|
||||
if initialised {
|
||||
y = text.last_bounds().min_y();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -275,6 +275,7 @@ pub fn setup_player_ancestry(ecs: &mut World, ancestry: Ancestry) {
|
|||
.insert(*player, Renderable {
|
||||
glyph: to_cp437(DWARF_GLYPH),
|
||||
sprite: None, // TODO: Dwarf sprite
|
||||
colour_sprite: true,
|
||||
fg: RGB::named(DWARF_COLOUR),
|
||||
bg: RGB::named(BLACK),
|
||||
render_order: 0,
|
||||
|
|
@ -287,6 +288,7 @@ pub fn setup_player_ancestry(ecs: &mut World, ancestry: Ancestry) {
|
|||
.insert(*player, Renderable {
|
||||
glyph: to_cp437(ELF_GLYPH),
|
||||
sprite: None, // TODO: Elf sprite
|
||||
colour_sprite: true,
|
||||
fg: RGB::named(ELF_COLOUR),
|
||||
bg: RGB::named(BLACK),
|
||||
render_order: 0,
|
||||
|
|
@ -313,6 +315,7 @@ pub fn setup_player_ancestry(ecs: &mut World, ancestry: Ancestry) {
|
|||
.insert(*player, Renderable {
|
||||
glyph: to_cp437(CATFOLK_GLYPH),
|
||||
sprite: None, // TODO: Catfolk sprite
|
||||
colour_sprite: true,
|
||||
fg: RGB::named(CATFOLK_COLOUR),
|
||||
bg: RGB::named(BLACK),
|
||||
render_order: 0,
|
||||
|
|
|
|||
101
src/main.rs
101
src/main.rs
|
|
@ -253,34 +253,82 @@ fn draw_camera(
|
|||
}
|
||||
// TODO: Use sprites here, not text drawing. Put bitmap font into atlas.
|
||||
let renderable = renderables.get(entry.1.e).unwrap();
|
||||
draw.text(
|
||||
&font,
|
||||
&format!("{}", bracket_lib::terminal::to_char(renderable.glyph as u8))
|
||||
)
|
||||
.position(
|
||||
((entry.0.x as f32) + 0.5) * TILESIZE,
|
||||
((entry.0.y as f32) + 0.5) * TILESIZE
|
||||
if let Some(sprite_id) = &renderable.sprite {
|
||||
let sprite = if let Some(sprite) = atlas.get(sprite_id) {
|
||||
sprite
|
||||
} else {
|
||||
panic!("No entity sprite found for ID: {}", sprite_id);
|
||||
};
|
||||
draw.image(sprite)
|
||||
.position((entry.0.x as f32) * TILESIZE, (entry.0.y as f32) * TILESIZE)
|
||||
.color(
|
||||
if renderable.colour_sprite {
|
||||
Color::from_rgb(
|
||||
renderable.fg.r,
|
||||
renderable.fg.g,
|
||||
renderable.fg.b
|
||||
)
|
||||
} else {
|
||||
Color::WHITE
|
||||
}
|
||||
);
|
||||
} else {
|
||||
// Fallback to drawing text.
|
||||
draw.text(
|
||||
&font,
|
||||
&format!("{}", bracket_lib::terminal::to_char(renderable.glyph as u8))
|
||||
)
|
||||
.color(Color::from_rgb(renderable.fg.r, renderable.fg.g, renderable.fg.b))
|
||||
.size(FONTSIZE)
|
||||
.h_align_center()
|
||||
.v_align_middle();
|
||||
// Draw entity
|
||||
.position(
|
||||
((entry.0.x as f32) + 0.5) * TILESIZE,
|
||||
((entry.0.y as f32) + 0.5) * TILESIZE
|
||||
)
|
||||
.color(
|
||||
Color::from_rgb(renderable.fg.r, renderable.fg.g, renderable.fg.b)
|
||||
)
|
||||
.size(FONTSIZE)
|
||||
.h_align_center()
|
||||
.v_align_middle();
|
||||
}
|
||||
}
|
||||
DrawType::VisibleAndRemember => {
|
||||
// TODO: PUT THIS INTO A FUNCTION!
|
||||
let renderable = renderables.get(entry.1.e).unwrap();
|
||||
draw.text(
|
||||
&font,
|
||||
&format!("{}", bracket_lib::terminal::to_char(renderable.glyph as u8))
|
||||
)
|
||||
.position(
|
||||
((entry.0.x as f32) + 0.5) * TILESIZE,
|
||||
((entry.0.y as f32) + 0.5) * TILESIZE
|
||||
if let Some(sprite_id) = &renderable.sprite {
|
||||
let sprite = if let Some(sprite) = atlas.get(sprite_id) {
|
||||
sprite
|
||||
} else {
|
||||
panic!("No entity sprite found for ID: {}", sprite_id);
|
||||
};
|
||||
draw.image(sprite)
|
||||
.position((entry.0.x as f32) * TILESIZE, (entry.0.y as f32) * TILESIZE)
|
||||
.color(
|
||||
if renderable.colour_sprite {
|
||||
Color::from_rgb(
|
||||
renderable.fg.r,
|
||||
renderable.fg.g,
|
||||
renderable.fg.b
|
||||
)
|
||||
} else {
|
||||
Color::WHITE
|
||||
}
|
||||
);
|
||||
} else {
|
||||
// Fallback to drawing text.
|
||||
draw.text(
|
||||
&font,
|
||||
&format!("{}", bracket_lib::terminal::to_char(renderable.glyph as u8))
|
||||
)
|
||||
.color(Color::from_rgb(renderable.fg.r, renderable.fg.g, renderable.fg.b))
|
||||
.size(FONTSIZE)
|
||||
.h_align_center()
|
||||
.v_align_middle();
|
||||
.position(
|
||||
((entry.0.x as f32) + 0.5) * TILESIZE,
|
||||
((entry.0.y as f32) + 0.5) * TILESIZE
|
||||
)
|
||||
.color(
|
||||
Color::from_rgb(renderable.fg.r, renderable.fg.g, renderable.fg.b)
|
||||
)
|
||||
.size(FONTSIZE)
|
||||
.h_align_center()
|
||||
.v_align_middle();
|
||||
}
|
||||
// TODO: Update map memory.
|
||||
}
|
||||
_ => {}
|
||||
|
|
@ -318,7 +366,12 @@ fn render_map_in_view(
|
|||
&*map,
|
||||
Some(*ecs.fetch::<Point>())
|
||||
);
|
||||
draw.image(atlas.get(id).unwrap())
|
||||
let sprite = if let Some(sprite) = atlas.get(id) {
|
||||
sprite
|
||||
} else {
|
||||
panic!("No sprite found for ID: {}", id);
|
||||
};
|
||||
draw.image(sprite)
|
||||
.position(
|
||||
((x + bounds.x_offset) as f32) * TILESIZE,
|
||||
((y + bounds.y_offset) as f32) * TILESIZE
|
||||
|
|
|
|||
|
|
@ -7,14 +7,11 @@ use std::ops::{ Add, Mul };
|
|||
use notan::prelude::*;
|
||||
|
||||
pub fn get_sprite_for_id(idx: usize, map: &Map, other_pos: Option<Point>) -> (&str, Color) {
|
||||
let x = (idx as i32) % map.width;
|
||||
let y = (idx as i32) / map.width;
|
||||
let sprite = map.tiles[idx].sprite();
|
||||
/*let base = match tile {
|
||||
TileType::Wall => wall_sprite(tile.sprite(), map, x, y),
|
||||
_ => tile.sprite(),
|
||||
let f = map.colour_offset[idx].0.0; // Using offset as a source of random.
|
||||
let sprite = match map.tiles[idx] {
|
||||
TileType::Wall => map.tiles[idx].sprite(check_if_base(idx, map), f),
|
||||
_ => map.tiles[idx].sprite(false, f),
|
||||
};
|
||||
let sprite_id = pick_variant(base, tile.variants(), idx, map);*/
|
||||
let tint = if !map.visible_tiles[idx] {
|
||||
Color::from_rgb(0.75, 0.75, 0.75)
|
||||
} else {
|
||||
|
|
@ -159,18 +156,13 @@ fn is_revealed_and_wall(map: &Map, x: i32, y: i32, debug: Option<bool>) -> bool
|
|||
(if debug.is_none() { map.revealed_tiles[idx] } else { true })
|
||||
}
|
||||
|
||||
fn wall_sprite(id: usize, map: &Map, x: i32, y: i32) -> usize {
|
||||
if y > map.height - (2 as i32) {
|
||||
return id;
|
||||
}
|
||||
fn check_if_base(idx: usize, map: &Map) -> bool {
|
||||
let x = (idx as i32) % map.width;
|
||||
let y = (idx as i32) / map.width;
|
||||
if is_revealed_and_wall(map, x, y + 1, None) {
|
||||
return id + 6;
|
||||
return false;
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
fn pick_variant(base: usize, variants: usize, idx: usize, map: &Map) -> usize {
|
||||
return base + ((map.colour_offset[idx].0.0 * (variants as f32)) as usize);
|
||||
return true;
|
||||
}
|
||||
|
||||
fn wall_glyph(map: &Map, x: i32, y: i32, debug: Option<bool>) -> FontCharType {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
use serde::{ Deserialize, Serialize };
|
||||
use crate::consts::sprites::*;
|
||||
use bracket_lib::random::RandomNumberGenerator;
|
||||
|
||||
#[derive(PartialEq, Eq, Hash, Copy, Clone, Serialize, Deserialize, Debug)]
|
||||
pub enum TileType {
|
||||
|
|
@ -30,52 +30,84 @@ pub enum TileType {
|
|||
}
|
||||
|
||||
impl TileType {
|
||||
pub fn sprite(&self) -> &str {
|
||||
match self {
|
||||
TileType::ImpassableMountain => "statue_warrior",
|
||||
TileType::Wall => "wall_cave_h_a",
|
||||
TileType::DeepWater => "water",
|
||||
TileType::Fence => "wall_cave_h_a",
|
||||
TileType::Bars => "wall_cave_h_a",
|
||||
TileType::Floor => "floor_cobble_a",
|
||||
TileType::WoodFloor => "floor_wood_a",
|
||||
TileType::Gravel => "floor_cobble_b",
|
||||
TileType::Road => "floor_cobble_c",
|
||||
TileType::Grass => "floor_grass_a",
|
||||
TileType::Foliage => "floor_grass_b",
|
||||
TileType::HeavyFoliage => "floor_grass_c",
|
||||
TileType::Sand => "floor_cobble_c",
|
||||
TileType::ShallowWater => "water",
|
||||
TileType::Bridge => "floor_cobble_a",
|
||||
TileType::DownStair => "wall_cave_stair_down",
|
||||
TileType::UpStair => "wall_cave_stair_up",
|
||||
TileType::ToLocal(_) => "wall_crypt_stair_down",
|
||||
TileType::ToOvermap(_) => "wall_crypt_stair_up",
|
||||
pub fn sprite(&self, base: bool, float: f32) -> &str {
|
||||
if base {
|
||||
return self.h(float);
|
||||
}
|
||||
return self.v(float);
|
||||
}
|
||||
|
||||
pub fn variants(&self) -> usize {
|
||||
match self {
|
||||
TileType::ImpassableMountain => 1,
|
||||
TileType::Wall => 4,
|
||||
TileType::DeepWater => 2,
|
||||
TileType::Fence => 1,
|
||||
TileType::Bars => 1,
|
||||
TileType::Floor => 6,
|
||||
TileType::WoodFloor => 3,
|
||||
TileType::Gravel => 1,
|
||||
TileType::Road => 4,
|
||||
TileType::Grass => 6,
|
||||
TileType::Foliage => 1,
|
||||
TileType::HeavyFoliage => 1,
|
||||
TileType::Sand => 1,
|
||||
TileType::ShallowWater => 2,
|
||||
TileType::Bridge => 1,
|
||||
TileType::DownStair => 1,
|
||||
TileType::UpStair => 1,
|
||||
TileType::ToLocal(_) => 1,
|
||||
TileType::ToOvermap(_) => 1,
|
||||
}
|
||||
fn h(&self, float: f32) -> &str {
|
||||
let options = match self {
|
||||
TileType::Wall =>
|
||||
vec![
|
||||
"wall_cave_h_a",
|
||||
"wall_cave_h_b",
|
||||
"wall_cave_h_c",
|
||||
"wall_cave_h_d",
|
||||
"wall_cave_h_crack"
|
||||
],
|
||||
_ => unreachable!("Tried to get a h (base) sprite for a non-wall tile."),
|
||||
};
|
||||
return options[(float * (options.len() as f32)) as usize];
|
||||
}
|
||||
fn v(&self, float: f32) -> &str {
|
||||
let options = match self {
|
||||
TileType::ImpassableMountain => vec!["statue_warrior"],
|
||||
TileType::Wall =>
|
||||
vec![
|
||||
"wall_cave_v_a",
|
||||
"wall_cave_v_b",
|
||||
"wall_cave_v_c",
|
||||
"wall_cave_v_d",
|
||||
"wall_cave_v_crack"
|
||||
],
|
||||
TileType::DeepWater => vec!["water", "water_a1", "water_a2"],
|
||||
TileType::Fence => vec!["wall_cave_h_a"],
|
||||
TileType::Bars => vec!["wall_cave_h_a"],
|
||||
TileType::Floor =>
|
||||
vec![
|
||||
"floor_cobble_a",
|
||||
"floor_cobble_b",
|
||||
"floor_cobble_c",
|
||||
"floor_cobble_d",
|
||||
"floor_cobble_e",
|
||||
"floor_cobble_f"
|
||||
],
|
||||
TileType::WoodFloor =>
|
||||
vec!["floor_wood_a", "floor_wood_b", "floor_wood_c", "floor_wood_d"],
|
||||
TileType::Gravel => vec!["floor_cobble_b"],
|
||||
TileType::Road =>
|
||||
vec![
|
||||
"floor_tile_a",
|
||||
"floor_tile_b",
|
||||
"floor_tile_c",
|
||||
"floor_tile_d",
|
||||
"floor_mossy_a",
|
||||
"floor_mossy_b",
|
||||
"floor_mossy_c",
|
||||
"floor_mossy_d",
|
||||
"floor_mossy_e"
|
||||
],
|
||||
TileType::Grass =>
|
||||
vec![
|
||||
"floor_grass_a",
|
||||
"floor_grass_b",
|
||||
"floor_grass_c",
|
||||
"floor_grass_d",
|
||||
"floor_grass_e",
|
||||
"floor_grass_f"
|
||||
],
|
||||
TileType::Foliage => vec!["floor_grass_b"],
|
||||
TileType::HeavyFoliage => vec!["floor_grass_c"],
|
||||
TileType::Sand => vec!["floor_cobble_c"],
|
||||
TileType::ShallowWater => vec!["water"],
|
||||
TileType::Bridge => vec!["floor_cobble_a"],
|
||||
TileType::DownStair => vec!["wall_cave_stair_down"],
|
||||
TileType::UpStair => vec!["wall_cave_stair_up"],
|
||||
TileType::ToLocal(_) => vec!["wall_crypt_stair_down"],
|
||||
TileType::ToOvermap(_) => vec!["wall_crypt_stair_up"],
|
||||
};
|
||||
return options[(float * (options.len() as f32)) as usize];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ fn create_delayed_particles(ecs: &mut World, ctx: &App) {
|
|||
renderables
|
||||
.insert(p, Renderable {
|
||||
sprite: None, // TODO: Particle sprite
|
||||
colour_sprite: false,
|
||||
fg: handled.fg,
|
||||
bg: handled.bg,
|
||||
glyph: handled.glyph,
|
||||
|
|
@ -309,6 +310,7 @@ impl<'a> System<'a> for ParticleSpawnSystem {
|
|||
renderables
|
||||
.insert(p, Renderable {
|
||||
sprite: None, // TODO: Particle sprite
|
||||
colour_sprite: false,
|
||||
fg: new_particle.fg,
|
||||
bg: new_particle.bg,
|
||||
glyph: new_particle.glyph,
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@ pub fn try_door(i: i32, j: i32, ecs: &mut World) -> RunState {
|
|||
let mut renderables = ecs.write_storage::<Renderable>();
|
||||
let render_data = renderables.get_mut(potential_target).unwrap();
|
||||
render_data.glyph = to_cp437('+'); // Nethack open door, maybe just use '/' instead.
|
||||
render_data.sprite = Some(17); // TODO: Enum
|
||||
render_data.sprite = Some("door_wood_h_closed".to_string()); // TODO: Enum
|
||||
door_pos = Some(Point::new(pos.x + delta_x, pos.y + delta_y));
|
||||
}
|
||||
result = RunState::Ticking;
|
||||
|
|
@ -234,7 +234,7 @@ pub fn open(i: i32, j: i32, ecs: &mut World) -> RunState {
|
|||
let mut renderables = ecs.write_storage::<Renderable>();
|
||||
let render_data = renderables.get_mut(potential_target).unwrap();
|
||||
render_data.glyph = to_cp437('▓'); // Nethack open door, maybe just use '/' instead.
|
||||
render_data.sprite = Some(18); // TODO: Enum
|
||||
render_data.sprite = Some("door_wood_h_open".to_string()); // TODO: Enum
|
||||
door_pos = Some(Point::new(pos.x + delta_x, pos.y + delta_y));
|
||||
}
|
||||
result = RunState::Ticking;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,8 @@ pub struct Equippable {
|
|||
#[derive(Deserialize, Debug)]
|
||||
pub struct Renderable {
|
||||
pub glyph: String,
|
||||
pub sprite: Option<usize>,
|
||||
pub sprite: Option<String>,
|
||||
pub colour_sprite: Option<bool>,
|
||||
pub fg: String,
|
||||
pub bg: String,
|
||||
pub order: i32,
|
||||
|
|
|
|||
|
|
@ -691,10 +691,11 @@ fn get_renderable_component(
|
|||
) -> crate::components::Renderable {
|
||||
crate::components::Renderable {
|
||||
glyph: to_cp437(renderable.glyph.chars().next().unwrap()),
|
||||
sprite: if let Some(sprite) = &renderable.sprite {
|
||||
Some(sprite.clone())
|
||||
sprite: renderable.sprite.clone(),
|
||||
colour_sprite: if renderable.colour_sprite.is_some() {
|
||||
renderable.colour_sprite.clone().unwrap()
|
||||
} else {
|
||||
None
|
||||
true
|
||||
},
|
||||
fg: RGB::from_hex(&renderable.fg).expect("Invalid RGB"),
|
||||
bg: RGB::from_hex(&renderable.bg).expect("Invalid RGB"),
|
||||
|
|
|
|||
|
|
@ -57,7 +57,8 @@ pub fn player(ecs: &mut World, player_x: i32, player_y: i32) -> Entity {
|
|||
.with(BlocksTile {})
|
||||
.with(Renderable {
|
||||
glyph: to_cp437('@'),
|
||||
sprite: None, // TODO: Player sprite
|
||||
sprite: Some("@".to_string()), // TODO: Player sprite
|
||||
colour_sprite: true,
|
||||
fg: RGB::named(YELLOW),
|
||||
bg: RGB::named(BLACK),
|
||||
render_order: 0,
|
||||
|
|
|
|||
|
|
@ -362,7 +362,10 @@ impl State {
|
|||
)
|
||||
);
|
||||
self.mapgen_timer += ctx.timer.delta_f32();
|
||||
if self.mapgen_timer > 10.0 / (self.mapgen_history.len() as f32) {
|
||||
if
|
||||
self.mapgen_timer > 10.0 / (self.mapgen_history.len() as f32) ||
|
||||
self.mapgen_timer > 1.0
|
||||
{
|
||||
self.mapgen_timer = 0.0;
|
||||
self.mapgen_index += 1;
|
||||
if self.mapgen_index >= self.mapgen_history.len() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue