draft tutorial revisions
This commit is contained in:
parent
838da4571d
commit
48359b5a48
70 changed files with 6216 additions and 28 deletions
210
docs/templates/complete/constants.py
vendored
Normal file
210
docs/templates/complete/constants.py
vendored
Normal file
|
|
@ -0,0 +1,210 @@
|
|||
"""
|
||||
constants.py - Game Constants for McRogueFace Complete Roguelike Template
|
||||
|
||||
All configuration values in one place for easy tweaking.
|
||||
"""
|
||||
|
||||
# =============================================================================
|
||||
# WINDOW AND DISPLAY
|
||||
# =============================================================================
|
||||
SCREEN_WIDTH = 1024
|
||||
SCREEN_HEIGHT = 768
|
||||
|
||||
# Grid display area (where the dungeon is rendered)
|
||||
GRID_X = 0
|
||||
GRID_Y = 0
|
||||
GRID_WIDTH = 800
|
||||
GRID_HEIGHT = 600
|
||||
|
||||
# Tile dimensions (must match your texture)
|
||||
TILE_WIDTH = 16
|
||||
TILE_HEIGHT = 16
|
||||
|
||||
# =============================================================================
|
||||
# DUNGEON GENERATION
|
||||
# =============================================================================
|
||||
# Size of the dungeon in tiles
|
||||
DUNGEON_WIDTH = 80
|
||||
DUNGEON_HEIGHT = 45
|
||||
|
||||
# Room size constraints
|
||||
ROOM_MIN_SIZE = 6
|
||||
ROOM_MAX_SIZE = 12
|
||||
MAX_ROOMS = 15
|
||||
|
||||
# Enemy spawning per room
|
||||
MAX_ENEMIES_PER_ROOM = 3
|
||||
MIN_ENEMIES_PER_ROOM = 0
|
||||
|
||||
# =============================================================================
|
||||
# SPRITE INDICES (for kenney_tinydungeon.png - 16x16 tiles)
|
||||
# Adjust these if using a different tileset
|
||||
# =============================================================================
|
||||
# Terrain
|
||||
SPRITE_FLOOR = 48 # Dungeon floor
|
||||
SPRITE_WALL = 33 # Wall tile
|
||||
SPRITE_STAIRS_DOWN = 50 # Stairs going down
|
||||
SPRITE_DOOR = 49 # Door tile
|
||||
|
||||
# Player sprites
|
||||
SPRITE_PLAYER = 84 # Player character (knight)
|
||||
|
||||
# Enemy sprites
|
||||
SPRITE_GOBLIN = 111 # Goblin enemy
|
||||
SPRITE_ORC = 112 # Orc enemy
|
||||
SPRITE_TROLL = 116 # Troll enemy
|
||||
|
||||
# Items (for future expansion)
|
||||
SPRITE_POTION = 89 # Health potion
|
||||
SPRITE_CHEST = 91 # Treasure chest
|
||||
|
||||
# =============================================================================
|
||||
# COLORS (R, G, B, A)
|
||||
# =============================================================================
|
||||
# Map colors
|
||||
COLOR_DARK_WALL = (50, 50, 100, 255)
|
||||
COLOR_DARK_FLOOR = (30, 30, 50, 255)
|
||||
COLOR_LIGHT_WALL = (100, 100, 150, 255)
|
||||
COLOR_LIGHT_FLOOR = (80, 80, 100, 255)
|
||||
|
||||
# FOV overlay colors
|
||||
COLOR_FOG = (0, 0, 0, 200) # Unexplored areas
|
||||
COLOR_REMEMBERED = (0, 0, 0, 128) # Seen but not visible
|
||||
COLOR_VISIBLE = (0, 0, 0, 0) # Currently visible (transparent)
|
||||
|
||||
# UI Colors
|
||||
COLOR_UI_BG = (20, 20, 30, 230)
|
||||
COLOR_UI_BORDER = (80, 80, 120, 255)
|
||||
COLOR_TEXT = (255, 255, 255, 255)
|
||||
COLOR_TEXT_HIGHLIGHT = (255, 255, 100, 255)
|
||||
|
||||
# Health bar colors
|
||||
COLOR_HP_BAR_BG = (80, 0, 0, 255)
|
||||
COLOR_HP_BAR_FILL = (0, 180, 0, 255)
|
||||
COLOR_HP_BAR_WARNING = (180, 180, 0, 255)
|
||||
COLOR_HP_BAR_CRITICAL = (180, 0, 0, 255)
|
||||
|
||||
# Message log colors
|
||||
COLOR_MSG_DEFAULT = (255, 255, 255, 255)
|
||||
COLOR_MSG_DAMAGE = (255, 100, 100, 255)
|
||||
COLOR_MSG_HEAL = (100, 255, 100, 255)
|
||||
COLOR_MSG_INFO = (100, 100, 255, 255)
|
||||
COLOR_MSG_IMPORTANT = (255, 255, 100, 255)
|
||||
|
||||
# =============================================================================
|
||||
# PLAYER STATS
|
||||
# =============================================================================
|
||||
PLAYER_START_HP = 30
|
||||
PLAYER_START_ATTACK = 5
|
||||
PLAYER_START_DEFENSE = 2
|
||||
|
||||
# =============================================================================
|
||||
# ENEMY STATS
|
||||
# Each enemy type: (hp, attack, defense, xp_reward, name)
|
||||
# =============================================================================
|
||||
ENEMY_STATS = {
|
||||
'goblin': {
|
||||
'hp': 10,
|
||||
'attack': 3,
|
||||
'defense': 0,
|
||||
'xp': 35,
|
||||
'sprite': SPRITE_GOBLIN,
|
||||
'name': 'Goblin'
|
||||
},
|
||||
'orc': {
|
||||
'hp': 16,
|
||||
'attack': 4,
|
||||
'defense': 1,
|
||||
'xp': 50,
|
||||
'sprite': SPRITE_ORC,
|
||||
'name': 'Orc'
|
||||
},
|
||||
'troll': {
|
||||
'hp': 24,
|
||||
'attack': 6,
|
||||
'defense': 2,
|
||||
'xp': 100,
|
||||
'sprite': SPRITE_TROLL,
|
||||
'name': 'Troll'
|
||||
}
|
||||
}
|
||||
|
||||
# Enemy spawn weights per dungeon level
|
||||
# Format: {level: [(enemy_type, weight), ...]}
|
||||
# Higher weight = more likely to spawn
|
||||
ENEMY_SPAWN_WEIGHTS = {
|
||||
1: [('goblin', 100)],
|
||||
2: [('goblin', 80), ('orc', 20)],
|
||||
3: [('goblin', 60), ('orc', 40)],
|
||||
4: [('goblin', 40), ('orc', 50), ('troll', 10)],
|
||||
5: [('goblin', 20), ('orc', 50), ('troll', 30)],
|
||||
}
|
||||
|
||||
# Default weights for levels beyond those defined
|
||||
DEFAULT_SPAWN_WEIGHTS = [('goblin', 10), ('orc', 50), ('troll', 40)]
|
||||
|
||||
# =============================================================================
|
||||
# FOV (Field of View) SETTINGS
|
||||
# =============================================================================
|
||||
FOV_RADIUS = 8 # How far the player can see
|
||||
FOV_LIGHT_WALLS = True # Whether walls at FOV edge are visible
|
||||
|
||||
# =============================================================================
|
||||
# INPUT KEYS
|
||||
# Key names as returned by McRogueFace keypressScene
|
||||
# =============================================================================
|
||||
KEY_UP = ['Up', 'W', 'Numpad8']
|
||||
KEY_DOWN = ['Down', 'S', 'Numpad2']
|
||||
KEY_LEFT = ['Left', 'A', 'Numpad4']
|
||||
KEY_RIGHT = ['Right', 'D', 'Numpad6']
|
||||
|
||||
# Diagonal movement (numpad)
|
||||
KEY_UP_LEFT = ['Numpad7']
|
||||
KEY_UP_RIGHT = ['Numpad9']
|
||||
KEY_DOWN_LEFT = ['Numpad1']
|
||||
KEY_DOWN_RIGHT = ['Numpad3']
|
||||
|
||||
# Actions
|
||||
KEY_WAIT = ['Period', 'Numpad5'] # Skip turn
|
||||
KEY_DESCEND = ['Greater', 'Space'] # Go down stairs (> key or space)
|
||||
|
||||
# =============================================================================
|
||||
# GAME MESSAGES
|
||||
# =============================================================================
|
||||
MSG_WELCOME = "Welcome to the dungeon! Find the stairs to descend deeper."
|
||||
MSG_DESCEND = "You descend the stairs to level %d..."
|
||||
MSG_PLAYER_ATTACK = "You attack the %s for %d damage!"
|
||||
MSG_PLAYER_KILL = "You have slain the %s!"
|
||||
MSG_PLAYER_MISS = "You attack the %s but do no damage."
|
||||
MSG_ENEMY_ATTACK = "The %s attacks you for %d damage!"
|
||||
MSG_ENEMY_MISS = "The %s attacks you but does no damage."
|
||||
MSG_BLOCKED = "You can't move there!"
|
||||
MSG_STAIRS = "You see stairs leading down here. Press > or Space to descend."
|
||||
MSG_DEATH = "You have died! Press R to restart."
|
||||
MSG_NO_STAIRS = "There are no stairs here."
|
||||
|
||||
# =============================================================================
|
||||
# UI LAYOUT
|
||||
# =============================================================================
|
||||
# Health bar
|
||||
HP_BAR_X = 10
|
||||
HP_BAR_Y = 620
|
||||
HP_BAR_WIDTH = 200
|
||||
HP_BAR_HEIGHT = 24
|
||||
|
||||
# Message log
|
||||
MSG_LOG_X = 10
|
||||
MSG_LOG_Y = 660
|
||||
MSG_LOG_WIDTH = 780
|
||||
MSG_LOG_HEIGHT = 100
|
||||
MSG_LOG_MAX_LINES = 5
|
||||
|
||||
# Dungeon level display
|
||||
LEVEL_DISPLAY_X = 700
|
||||
LEVEL_DISPLAY_Y = 620
|
||||
|
||||
# =============================================================================
|
||||
# ASSET PATHS
|
||||
# =============================================================================
|
||||
TEXTURE_PATH = "assets/kenney_tinydungeon.png"
|
||||
FONT_PATH = "assets/JetbrainsMono.ttf"
|
||||
Loading…
Add table
Add a link
Reference in a new issue