/* * Copyright (C) 2002-2007 The Warp Rogue Team * Part of the Warp Rogue Project * * This software is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License. * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY. * * See the license.txt file for more details. */ /* * Module Name: Ui * Description: - */ /* * Colours */ #define Uses_Util #define Uses_ProgramManager #define Uses_Random #include "mheader.h" #include "ui.h" /* * colour data */ typedef struct { const char * name; RGB_DATA rgb; ANSI_COLOUR ansi_colour; } COLOUR_DATA; /* * colour defintions */ static const COLOUR_DATA GameColour[MAX_COLOURS] = { {"Black", {0x00, 0x00, 0x00}, ANSI_BLACK}, {"Dark ash", {0x1C, 0x1C, 0x1C}, ANSI_DARK_GRAY}, {"Ash", {0x36, 0x36, 0x36}, ANSI_DARK_GRAY}, {"Dark metal", {0x18, 0x20, 0x20}, ANSI_DARK_GRAY}, {"Metal", {0x4D, 0x4E, 0x52}, ANSI_DARK_GRAY}, {"Gray", {0x80, 0x80, 0x80}, ANSI_DARK_GRAY}, {"Slate", {0x2F, 0x4F, 0x4F}, ANSI_DARK_GRAY}, {"Silver", {0xC0, 0xC0, 0xC0}, ANSI_LIGHT_GRAY}, {"Blood", {0x99, 0x00, 0x00}, ANSI_RED}, {"Burgundy", {0xA8, 0x00, 0x25}, ANSI_RED}, {"Red", {0xE4, 0x00, 0x00}, ANSI_LIGHT_RED}, {"Purple", {0x99, 0x00, 0x99}, ANSI_MAGENTA}, {"Warlock purple", {0xA3, 0x00, 0x55}, ANSI_MAGENTA}, {"Army", {0x5E, 0x84, 0x50}, ANSI_GREEN}, {"Jade", {0x00, 0xA1, 0x7D}, ANSI_GREEN}, {"Poison green", {0x00, 0x99, 0x00}, ANSI_GREEN}, {"Lime", {0x00, 0xE6, 0x00}, ANSI_LIGHT_GREEN}, {"Olive", {0x80, 0x80, 0x00}, ANSI_BROWN}, {"Steel blue", {0x3C, 0x70, 0x9C}, ANSI_BLUE}, {"Teal", {0x00, 0x99, 0x99}, ANSI_CYAN}, {"Dark radioactive", {0x71, 0xA1, 0x00}, ANSI_LIGHT_GREEN}, {"Radioactive", {0xBA, 0xFF, 0x00}, ANSI_LIGHT_GREEN}, {"Dark gold", {0xCD, 0xAD, 0x00}, ANSI_YELLOW}, {"Gold", {0xFF, 0xD7, 0x00}, ANSI_YELLOW}, {"Yellow", {0xE7, 0xE7, 0x00}, ANSI_YELLOW}, {"Dark rusty", {0x38, 0x2C, 0x28}, ANSI_BROWN}, {"Rusty", {0x65, 0x48, 0x48}, ANSI_BROWN}, {"Vermin brown", {0x8F, 0x5E, 0x2A}, ANSI_BROWN}, {"Sienna", {0xA0, 0x52, 0x2D}, ANSI_BROWN}, {"Tan", {0xCC, 0x99, 0x66}, ANSI_BROWN}, {"Snakebite leather", {0xA2, 0x84, 0x14}, ANSI_BROWN}, {"Fiery orange", {0xEE, 0x9C, 0x00}, ANSI_YELLOW}, {"Khaki", {0xC3, 0xB0, 0x91}, ANSI_BROWN} }; /* * returns the RGB values of a colour */ const RGB_DATA * colour_rgb(COLOUR colour_index) { return &GameColour[colour_index].rgb; } /* * returns the ANSI colour value of a colour */ ANSI_COLOUR colour_ansi(COLOUR colour_index) { return GameColour[colour_index].ansi_colour; } /* * returns a dynamically chosen colour */ COLOUR dynamic_colour(const DYNAMIC_COLOUR *dyn_colour) { COLOUR colour; colour = dyn_colour->primary; if (dyn_colour->secondary == C_NIL) return colour; if (random_int(COLOUR_FREQUENCY_MIN, COLOUR_FREQUENCY_MAX) > dyn_colour->frequency) { return colour; } colour = dyn_colour->secondary; return colour; } /* * colour name -> index */ COLOUR name_to_colour(const char *colour_name) { COLOUR i; for (i = 0; i < MAX_COLOURS; i++) { if (strings_equal(colour_name, GameColour[i].name)) { return i; } } die("*** CORE ERROR *** invalid colour: %s", colour_name); return C_NIL; }