static void tcod_plotChar(uchar inputChar, short xLoc, short yLoc, short foreRed, short foreGreen, short foreBlue, short backRed, short backGreen, short backBlue) { TCOD_color_t fore; TCOD_color_t back; fore.r = (uint8) foreRed * 255 / 100; fore.g = (uint8) foreGreen * 255 / 100; fore.b = (uint8) foreBlue * 255 / 100; back.r = (uint8) backRed * 255 / 100; back.g = (uint8) backGreen * 255 / 100; back.b = (uint8) backBlue * 255 / 100; if (inputChar == STATUE_CHAR) { inputChar = 223; } else if (inputChar > 255) { switch (inputChar) { #ifdef USE_UNICODE case FLOOR_CHAR: inputChar = 128 + 0; break; case CHASM_CHAR: inputChar = 128 + 1; break; case TRAP_CHAR: inputChar = 128 + 2; break; case FIRE_CHAR: inputChar = 128 + 3; break; case FOLIAGE_CHAR: inputChar = 128 + 4; break; case AMULET_CHAR: inputChar = 128 + 5; break; case SCROLL_CHAR: inputChar = 128 + 6; break; case RING_CHAR: inputChar = 128 + 7; break; case WEAPON_CHAR: inputChar = 128 + 8; break; case GEM_CHAR: inputChar = 128 + 9; break; case TOTEM_CHAR: inputChar = 128 + 10; break; case BAD_MAGIC_CHAR: inputChar = 128 + 12; break; case GOOD_MAGIC_CHAR: inputChar = 128 + 13; break; case DOWN_ARROW_CHAR: inputChar = 144 + 1; break; case LEFT_ARROW_CHAR: inputChar = 144 + 2; break; case RIGHT_ARROW_CHAR: inputChar = 144 + 3; break; case UP_TRIANGLE_CHAR: inputChar = 144 + 4; break; case DOWN_TRIANGLE_CHAR: inputChar = 144 + 5; break; case OMEGA_CHAR: inputChar = 144 + 6; break; case THETA_CHAR: inputChar = 144 + 7; break; case LAMDA_CHAR: inputChar = 144 + 8; break; case KOPPA_CHAR: inputChar = 144 + 9; break; // is this right? case CHARM_CHAR: inputChar = 144 + 9; break; case LOZENGE_CHAR: inputChar = 144 + 10; break; case CROSS_PRODUCT_CHAR: inputChar = 144 + 11; break; #endif default: inputChar = '?'; break; } } TCOD_console_put_char_ex(NULL, xLoc, yLoc, (int) inputChar, fore, back); }
void vm_hw_lem1802_write(vm_t* vm, uint16_t pos) { unsigned int i = 0, x = 0, y = 0, fx = 0, fy = 0; uint16_t val, fore, back, chr; TCOD_color_t foreclr, backclr; uint16_t location_font, location_screen; uint16_t char_width, char_height; TCOD_image_t char_image = NULL; uint16_t ax = 0, ay = 0; TCOD_color_t color_black = { 0, 0, 0 }; TCOD_color_t color_white = { 255, 255, 255 }; // Get the current memory-mapping positions. location_font = vm_hw_lem1802_mem_get_font(vm); location_screen = vm_hw_lem1802_mem_get_screen(vm); // Get the font character width / height. char_width = vm_hw_lem1802_mem_get_font_char_width(); char_height = vm_hw_lem1802_mem_get_font_char_height(); char_image = vm_hw_lem1802_mem_get_font_image(); // Are we updating a general cell? if (location_screen != 0 && pos >= location_screen && pos <= location_screen + 0x17F) { // Read memory value. i = pos; val = vm->ram[i]; // Get foreground, background and character components. fore = (val & 0xF000) >> 12; back = (val & 0x0F00) >> 8; chr = (val & 0x00FF); // Create TCOD colours. foreclr = vm_hw_lem1802_mem_get_palette_color(vm, fore); backclr = vm_hw_lem1802_mem_get_palette_color(vm, back); // Calculate X / Y. x = (i - location_screen) % HW_LEM1802_SCREEN_WIDTH; y = (i - location_screen) / HW_LEM1802_SCREEN_WIDTH; // Update TCOD. TCOD_console_put_char_ex(NULL, x + 1, y + 1, chr, foreclr, backclr ); }
void TCOD_console_put_char_ex_wrapper(TCOD_console_t con, int x, int y, int c, colornum_t fore, colornum_t back) { TCOD_console_put_char_ex (con, x, y, c, int_to_color(fore), int_to_color(back)); }
void TCODConsole::putCharEx(int x, int y, int c, const TCODColor &fore, const TCODColor &back) { TCOD_color_t f={fore.r,fore.g,fore.b}; TCOD_color_t b={back.r,back.g,back.b}; TCOD_console_put_char_ex(data,x,y,c,f,b); }