diff options
Diffstat (limited to 'src/main-sdl-iso.c')
-rw-r--r-- | src/main-sdl-iso.c | 1905 |
1 files changed, 0 insertions, 1905 deletions
diff --git a/src/main-sdl-iso.c b/src/main-sdl-iso.c deleted file mode 100644 index 62aa05d9..00000000 --- a/src/main-sdl-iso.c +++ /dev/null @@ -1,1905 +0,0 @@ -/* Copyright (C) 2003-2004 Neil Stevens <neil@hakubi.us> - // Copyright (C) 2004 Ethan Stump <estump@seas.upenn.edu> - // - // Permission is hereby granted, free of charge, to any person obtaining a copy - // of this software and associated documentation files (the "Software"), to deal - // in the Software without restriction, including without limitation the rights - // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - // copies of the Software, and to permit persons to whom the Software is - // furnished to do so, subject to the following conditions: - // - // The above copyright notice and this permission notice shall be included in - // all copies or substantial portions of the Software. - // - // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - // THE AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN - // AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - // - // Except as contained in this notice, the name(s) of the author(s) shall not be - // used in advertising or otherwise to promote the sale, use or other dealings - // in this Software without prior written authorization from the author(s). - */ - -#ifdef USE_SDL - -#include "angband.h" -#include <SDL.h> -#include <SDL_image.h> -#include <SDL_ttf.h> - -#include <math.h> - -#ifdef USE_ISO -/* - * Simugraph system (Hj. Malthaner) - */ -#include "iso/simsys.h" -#include "iso/simgraph.h" -#include "iso/world_adaptor.h" -#include "iso/world_view.h" -/* - * Simugraph specific routines - * by Hj. Malthaner - */ -#include "iso/hackdef.h" - -/* - * Text place marker function protype (Hj. Malthaner) - */ -static void set_spots(int x, int y, int n, bool_ v); - -/** - * we need to track spots with text to avoid overdrawing text with images - * @author Hj. Malthaner (hansjoerg.malthaner@gmx.de) - */ -bool_ spots[80][24]; - -/** - * mouse coordinates for Simugraph engine - * @author Hj. Malthaner (hansjoerg.malthaner@gmx.de) - */ -int mx, my; - -/* - * Hajo: this flags need to be set when opening windows - */ - -static int tex_width; -static int tex_height; -static int tex_xoff; -static int tex_yoff; - -static unsigned int tab16[1 << 16]; - -/** - * this is used if we need to fake an 8 bit array - * @author Hj. Malthaner - */ -static unsigned short * data8; - -// buffers to store char code/attr for graphics -unsigned char **iso_ap; -unsigned char **iso_cp; -unsigned char **iso_atp; -unsigned char **iso_ctp; -unsigned char **iso_aep; -unsigned char **iso_cep; - -#endif /* USE_ISO */ - - -/************************************************* - GLOBAL SDL-ToME PROPERTIES - *************************************************/ - -/* Default window properties - used if none are available -from other places*/ -#define DEF_SCREEN_WIDTH 800 -#define DEF_SCREEN_HEIGHT 600 -#define DEF_SCREEN_BPP 16 - -/*Main window properties that may be loaded at runtime from -a preference file or environmental variables. However, -default values (defined above) can be used. */ -static int arg_width = DEF_SCREEN_WIDTH; -static int arg_height = DEF_SCREEN_HEIGHT; -static int arg_bpp = DEF_SCREEN_BPP; - -/**************/ - -/* Default font properties - used unless otherwise changed. -These properties are the size and also default font to load. */ -#define DEF_FONT_SIZE 16 -#define DEF_FONT_FILE "lib/xtra/font/VeraMono.ttf" - -/* The font properties that may perhaps be changed at runtime, -due to environmental variables, preference files, or in-program -commands.*/ -static int arg_font_size = DEF_FONT_SIZE; -static char arg_font_name[64] = DEF_FONT_FILE; - -/**************/ - -/* The number of term_data structures to set aside mem for */ -#define MAX_CONSOLE_COUNT 8 - -/* The number of consoles that are actually being used. -This number could be changed via preference files, environmental -variables, command-line arguments, or possibly even in-game -keypresses or menu-selections. */ -static int arg_console_count = 1; - -/* When rendering multiple terminals, each is drawn with a -surrounding border. These values control the width of this -border and also the color to use when drawing it. */ -#define BORDER_THICKNESS 1 -static int border_color = 0; - -/**************/ - -/* some miscellaneous settings which have not been dealt -with yet */ -static bool_ arg_old_graphics = FALSE; -static bool_ arg_double_width = FALSE; - -/* not dealt with yet (although full screen toggle -is available using Alt-Enter) */ -static bool_ arg_full_screen = FALSE; - - -/************************************************* - GLOBAL SDL-ToME VARIABLES - *************************************************/ - -/* the main screen to draw to */ -static SDL_Surface *screen; - -/* some helper surfaces that are used for rendering -characters */ -static SDL_Surface *worksurf; -static SDL_Surface *crayon; - -/* the array of pre-rendered characters -(see loadAndRenderFont() below) */ -SDL_Surface *text[128]; - -/* the actual TTF_Font used (XXX should get rid of this)*/ -TTF_Font *font=0; - -/* the width and height of the uniformly-sized pre-rendered -characters */ -int t_width = 1, t_height = 1; - - -/************************************************* - COLOR SETUP - *************************************************/ -int screen_black; -int screen_white; - -static int color_data[16]; -/* The following macro is for color defining... - Note that the color is fully opaque... */ -#define COLOR(r,g,b) \ - SDL_MapRGBA(crayon->format,r,g,b,SDL_ALPHA_OPAQUE) - -/*These color macros will setup the colors to use, but must be called after - the SDL video has been set. That way SDL can correct for any funky video - setttings. */ - -#define BLACK COLOR(0x00,0x00,0x00) -#define WHITE COLOR(0xff,0xff,0xff) -#define MID_GREY COLOR(0x80,0x80,0x80) -#define BRIGHT_ORANGE COLOR(0xff,0x80,0x00) -#define RED COLOR(0xc0,0x00,0x00) -#define GREEN COLOR(0x00,0x80,0x40) -#define BRIGHT_BLUE COLOR(0x00,0x00,0xff) -#define DARK_ORANGE COLOR(0x80,0x40,0x00) -#define DARK_GREY COLOR(0x40,0x40,0x40) -#define BRIGHT_GREY COLOR(0xc0,0xc0,0xc0) -#define PURPLE COLOR(0xff,0x00,0xff) -#define YELLOW COLOR(0xff,0xff,0x00) -#define BRIGHT_RED COLOR(0xff,0x00,0x00) -#define BRIGHT_GREEN COLOR(0x00,0xff,0x00) -#define AQUAMARINE COLOR(0x00,0xff,0xff) -#define BROWN COLOR(0xc0,0x80,0x40) - -/************************************************* - TERMINAL DATA STRUCTURE SETUP - *************************************************/ - -/* Forward declare */ -typedef struct _term_data term_data; - -/* A structure for each "term" */ -struct _term_data -{ - term t; /* the term structure, defined in z-term.h */ - cptr name; /* name of this term sub-window */ - - uint rows, cols; /* row/column count */ - uint pos_x, pos_y; /* upper left corner of rendering box */ - uint size_w, size_h; /* width, height of rendering box */ - - bool_ has_border; /* whether this sub-window has a border or not */ - uint border_thick; /* thickness of border to draw around window */ -#ifdef USE_GRAPHICS -#ifdef USE_TRANSPARENCY -#endif -#endif -}; - -/* The array of term data structures */ -static term_data data[MAX_CONSOLE_COUNT]; - -/************************************************* - FILE-SPECIFIC MACROS - *************************************************/ - -/* Debug macros! */ -#define DB(str) \ - printf("main-sdl: %s\n",str); - -/************************************************* - COLOR SETUP - *************************************************/ - -/* SDL Quitting function... declare a few functions first.*/ -void killFontAndAlphabet(void); -static void sdl_quit(cptr string) -{ - printf("sdl_quit called.\n"); - printf("message: %s\n",string); - /* Need to take care of font and rendered characters */ - killFontAndAlphabet(); - if (TTF_WasInit()) - TTF_Quit(); - /* Then exit SDL */ - SDL_Quit(); - /* And now for the default quit behavior */ - quit_aux = 0; - quit(string); -} - -/************************************************* - FONT SUPPORT FUNCTIONS - *************************************************/ - -/* killFontAndAlphabet will effectively de-initialize the font system; -it does this by closing the font and destroying any pre-rendered -text in memory */ -void killFontAndAlphabet(void) -{ - int i; - /* need to close a font and free all of its corresponding pre-rendered - surfaces */ - if (font) - { - TTF_CloseFont(font); - font = 0; - } - for (i=0;i<128;i++) - { - if(text[i]) - { - SDL_FreeSurface(text[i]); - text[i] = NULL; - } - } -} - -/* loadAndRenderFont is responsible for loading and initializing -a font. First, SDL_ttf calls are made to load and set the style -for the desired font. Next, a character alphabet is rendered and -each character is placed onto a uniformly-sized surface within -the text[] array. Whenever text is needed for displaying on-screen, -this array is referenced and the desired character picture is used. */ -void loadAndRenderFont(char *fname, int size) -{ - int minx,maxx,miny,maxy,advance,i,midline = 0; - SDL_Color base_color = {255,255,255,255}; - SDL_Surface *temp_surf; - SDL_Rect tgt = {0,0,0,0}; - - /* Assuming that the filename is valid, - open the font (pointer is global var)*/ - if (fname == NULL) - sdl_quit("Gimme a font to load!"); - font = TTF_OpenFont(fname,size); - if (font == NULL) - sdl_quit("Error loading that font!"); - /* Set the font style to normal */ - TTF_SetFontStyle(font,TTF_STYLE_NORMAL); - - /* Collect some measurements on this font - - arbitrarily choose the letter 'a' to get width*/ - TTF_GlyphMetrics(font,'a',&minx,&maxx,&miny,&maxy,&advance); - /* the width of each character tile */ - t_width = advance; - /* the height of each character tile */ - t_height = TTF_FontHeight(font); - /* position of the y=0 line in each tile */ - midline = TTF_FontAscent(font); - - /* now... render each of the individual characters */ - for (i=0;i<128;i++) - { - /* make a pretty blended glyph */ - temp_surf=TTF_RenderGlyph_Blended(font,i,base_color); - /* and make sure that we got it right! */ - if (temp_surf == NULL) - sdl_quit("Glyph failed to render!"); - /* get the metrics of this particular glyph so we can position it */ - TTF_GlyphMetrics(font,i,&minx,&maxx,&miny,&maxy,&advance); - /* copy rendered glyph into text queue, at the right position*/ - tgt.x = minx; - tgt.y = midline-maxy; - /* but first... we'll need a surface in the text queue to blit to! */ - text[i] = SDL_CreateRGBSurface(SDL_HWSURFACE,t_width,\ - t_height,16,0xf000,0x0f00,0x00f0,0x000f); - /* turn OFF src-alpha... results in brute - copy of the RGBA contents of surf */ - SDL_SetAlpha(temp_surf,0,0); - SDL_BlitSurface(temp_surf,NULL,text[i],&tgt); - /* turn OFF src-alpha since we'll be using worksurf for blitting */ - SDL_SetAlpha(text[i],0,0); - /* kill the surface to patch up memory leaks */ - SDL_FreeSurface(temp_surf); - } -} - -/***********************************************/ - -#ifdef USE_ISO -/************************************************* - ISO SUPPORT FUNCTIONS - *************************************************/ -/** - * inits operating system stuff - * @author Hj. Malthaner (hansjoerg.malthaner@gmx.de) - */ -int dr_os_init(int n, int *parameter) -{ - // Hajo: - // unused in isov-x11 - return TRUE; -} - - -/** - * opens graphics device/context/window of size w*h - * @param w width - * @param h height - * @author Hj. Malthaner (hansjoerg.malthaner@gmx.de) - */ -int dr_os_open(int w, int h) -{ - const int left = 13; - -/* tex_width = (data[0].fd->dw * (data[0].t.wid - left + 2) + 3) & 0xFFFC; - tex_height = data[0].fd->dh * (data[0].t.hgt - 2); - - tex_xoff = data[0].fd->dw * left; - tex_yoff = data[0].fd->dh * 1 + 1; -*/ - - //tex_width = (data[0].size_w - (left - 2) * (data[0].size_w / data[0].cols) + 3) & 0xFFFC; - // this is too big (but works :-)) - tex_width = data[0].size_w & 0xfffc; - tex_height = (data[0].size_h / data[0].rows) * (data[0].rows-2); - - tex_xoff = (tex_width / data[0].cols) * left; - tex_yoff = (tex_height / data[0].rows) * 1 + 1; - - return TRUE; -} - - -/** - * closes operating system stuff - * @author Hj. Malthaner (hansjoerg.malthaner@gmx.de) - */ -int dr_os_close() -{ - // Hajo: - // unused in isov-x11 - return TRUE; -} - - -/** - * retrieve display width - * @author Hj. Malthaner (hansjoerg.malthaner@gmx.de) - */ -int dr_get_width() -{ - return data[0].size_w; -} - - -/** - * retrieve display height - * @author Hj. Malthaner (hansjoerg.malthaner@gmx.de) - */ -int dr_get_height() -{ - return data[0].size_h; -} - - -/** - * this is used if we need to fake an 8 bit array - * @author Hj. Malthaner - */ -static unsigned short * data8; - - -/** - * creates a (maybe virtual) array of graphics data - * @author Hj. Malthaner - */ -unsigned short * dr_textur_init() -{ - int i; - - printf("isov-sdl::dr_textur_init()\n"); - printf(" width = %d\n", data[0].size_w); - printf(" height = %d\n", data[0].size_h); - - for (i = 0; i < (1 << 16); i++) - { - // FIXME!!! - // must consider color bits, or breaks in anything else but RGB 555 - unsigned int R; - unsigned int G; - unsigned int B; - - // RGB 555 - R = (i & 0x7C00) >> 10; - G = (i & 0x03E0) >> 5; - B = (i & 0x001F) >> 0; - - - tab16[i] = SDL_MapRGB(screen->format, R << 3, G << 3, B << 3); - } - - - - data8 = malloc((data[0].size_w) * (data[0].size_h) * 2); - - printf(" textur = %p\n", data8); - - // fake an 16 bit array and convert data before displaying - return data8; -} - -static void flush_area(int dest_x, int dest_y, - int x, int y, int w, int h) -{ - SDL_Surface *face = screen; - - if (SDL_LockSurface(face) == 0) - { - int i, j; - const int bpp = screen->format->BytesPerPixel; - - for (j = 0; j < h; j++) - { - unsigned short * p = data8 + (y + j) * tex_width + x; - unsigned char * row = face->pixels + (dest_y + j) * face->pitch + dest_x * bpp; - - - for (i = 0; i < w; i++) - { - *((unsigned short*)row) = tab16[ *p++ ]; - row += bpp; - } - } - SDL_UnlockSurface(face); - } -} - -/** - * displays the array of graphics data - * @author Hj. Malthaner - */ -void dr_textur(int xp, int yp, int w, int h) -{ - int y; - - // clipping unten - if (yp + h > tex_height) - { - h = tex_height - yp; - } - - /* debug spots - for(y=0; y<24; y++) { - int x; - - for(x=0; x<80; x++) { - if(spots[x][y]) { - printf("X"); - } else { - printf("."); - } -} - printf("\n"); -} - */ - - for (y = 0; y < SCREEN_HGT; y++) - { - const int left = 13; - const int y1 = y + 1; - int x = 0; - - yp = data[0].size_h / data[0].rows * y; - - spots[79][y1] = FALSE; - - do - { - int n = 0; - while (x + n + left < 80 && !spots[x + n + left][y1]) - { - n++; - } - - xp = data[0].size_w / data[0].cols * x; - - - flush_area(tex_xoff + xp, tex_yoff + yp, - xp, yp, - data[0].size_w / data[0].cols*(n), - data[0].size_h / data[0].rows); - - x += n; - - while (x + left < 80 && spots[x + left][y1]) - { - x++; - } - } - while (x + left < 80); - } -} - - -/** - * use this method to flush graphics pipeline (undrawn stuff) onscreen. - * @author Hj. Malthaner - */ -void dr_flush() -{ - // Iso-view for angband needs no sync. - // XSync(md,FALSE); -} - - -/** - * set colormap entries - * @author Hj. Malthaner - */ -void dr_setRGB8multi(int first, int count, unsigned char * data) -{ - // Hajo: - // unused in isov-x11 -} - - -/** - * display/hide mouse pointer - * @author Hj. Malthaner (hansjoerg.malthaner@gmx.de) - */ -void show_pointer(int yesno) -{ - // Hajo: - // unused in isov-x11 -} - - -/** - * move mouse pointer - * @author Hj. Malthaner (hansjoerg.malthaner@gmx.de) - */ -void move_pointer(int x, int y) -{ - // Hajo: - // unused in isov-x11 -} - - -/** - * update softpointer position - * @author Hj. Malthaner (hansjoerg.malthaner@gmx.de) - */ -void ex_ord_update_mx_my() -{ - // Hajo: - // unused in isov-x11 -} - - -/** - * get events from the system - * @author Hj. Malthaner (hansjoerg.malthaner@gmx.de) - */ -void GetEvents() -{ - // Hajo: - // unused in isov-x11 -} - - -/** - * get events from the system without waiting - * @author Hj. Malthaner (hansjoerg.malthaner@gmx.de) - */ -void GetEventsNoWait() -{ - // Hajo: - // unused in isov-x11 -} - - -/** - * @returns time since progrma start in milliseconds - * @author Hj. Malthaner - */ -long long dr_time(void) -{ - // Hajo: - // unused in isov-x11 - return 0; -} - - -/** - * sleeps some microseconds - * @author Hj. Malthaner - */ -void dr_sleep(unsigned long usec) -{ - // Hajo: - // unused in isov-x11 -} - - -/** - * loads a sample - * @return a handle for that sample or -1 on failure - * @author Hj. Malthaner - */ -int dr_load_sample(const char *filename) -{ - // Hajo: - // unused in isov-x11 - return TRUE; -} - - -/** - * plays a sample - * @param key the key for the sample to be played - * @author Hj. Malthaner - */ -void dr_play_sample(int key, int volume) -{ - // Hajo: - // unused in isov-x11 -} - -static unsigned char ** halloc(int w, int h) -{ - unsigned char **field = (unsigned char **)malloc(sizeof(unsigned char *) * h); - int i; - - for (i = 0; i < h; i++) - { - field[i] = (unsigned char *)malloc(sizeof(unsigned char) * w); - memset(field[i], 32 , w); - } - - return field; -} - -/** - * spot array access procedure. Mark text output spots - * @author Hj. Malthaner (hansjoerg.malthaner@gmx.de) - */ -static void set_spots(const int x, const int y, const int n, const bool_ v) -{ - int i; - - for (i = x; i < x + n; i++) - { - spots[i][y] = v; - } -} - - -/***********************************************/ -#endif /* USE_ISO */ - - -/*** Function hooks needed by "Term" ***/ - -static void Term_init_sdl(term *t) -{ - term_data *td = (term_data*)(t->data); - DB("Term_init_sdl"); - /* XXX XXX XXX */ -} - -static void Term_nuke_sdl(term *t) -{ - term_data *td = (term_data*)(t->data); - DB("Term_nuke_sdl"); - /* XXX XXX XXX */ -} - -static errr Term_user_sdl(int n) -{ - term_data *td = (term_data*)(Term->data); - DB("Term_user_sdl"); - /* XXX XXX XXX */ - - /* Unknown */ - return (1); -} - -/* KEYPRESS_STRING repeatedly sends characters to the terminal -XXX - should implement routine from maim-sdl.c, it's sooo much -cleaner */ -#define KEYPRESS_STRING(str) \ -strcpy(buf,str); \ -n = buf; \ -while (*n != '\0') { \ - Term_keypress((int)(*(n++))); \ -} - -/* This is the main event handling routine that will be called -whenever an event is pulled off of the queue (in Term_xtra_sdl())*/ -void handleEvent(SDL_Event *event) -{ - static char buf[24]; /* a buffer used when passing key names */ - char *n; /* and a pointer to manipulate this buffer */ - - switch( event->type ) - { - case SDL_KEYDOWN: - { - /* handle key presses */ - - /* I'm reading that as long as the upper 9 bits of the unicode - * value are zero, then the lower 7 bits are direct ASCII characters. - * Furthermore, it seems that all basic keys return non-zero values - * for the lower 7 bits, but function keys and other various things - * return 0000000 for the lower 7 bits. - * Basically, if the lower 7 bits are zero, do something special - * (like start a macro), but otherwise just pass along the ASCII - * code! - */ - byte ascii_part = event->key.keysym.unicode & 0x00ff; - - /* gimme the key name */ - printf("Key is: %s\n",SDL_GetKeyName(event->key.keysym.sym)); - - /* allow for full screen toggling! */ - if ((event->key.keysym.sym == SDLK_RETURN) && \ - (SDL_GetModState() & KMOD_ALT)) - { - SDL_WM_ToggleFullScreen(screen); - } -#ifdef USE_ISO - /* toggle tile size */ - if (event->key.keysym.sym == SDLK_SCROLLOCK) - { - switch (display_get_tile_size()) - { - case 32: - display_select_tile_size(0); - break; - case 64: - display_select_tile_size(1); - break; - default: - display_select_tile_size(0); - break; - } - reset_visuals(); - strcpy(buf, "graf-iso.prf"); - process_pref_file(buf); - refresh_display(); - SDL_UpdateRect(screen, 0, 0, data[0].size_w, data[0].size_h); - } - - /* cycle grid type none/objects+monsters only/full */ - if ((event->key.keysym.sym == '#') && \ - (SDL_GetModState() & KMOD_ALT)) - { - set_grid(get_grid()+1); - refresh_display(); - } - -#endif - - /*printf("ascii_part: %d\n",ascii_part);*/ - if (ascii_part) - { - /* We have now determined that the ASCII part is not '0', so - we can safely pass along the ASCII value! */ - Term_keypress(ascii_part); - } - else - { - /* We want to ignore keypresses that are simply the modifier - keys*/ - if (!( (event->key.keysym.sym == SDLK_RSHIFT) | - (event->key.keysym.sym == SDLK_LSHIFT) | - (event->key.keysym.sym == SDLK_RALT) | - (event->key.keysym.sym == SDLK_LALT) | - (event->key.keysym.sym == SDLK_RCTRL) | - (event->key.keysym.sym == SDLK_LCTRL) )) - { - - /* now build a macro string using the modifiers together - with the key that was just pressed*/ - - /* As for the formatting... - * We pass the key press and modifiers as follows: - * \[ctrl-alt-shift-"key name"] - * following the previously established convention... - * - * All of the things that happen are defined in pref-sdl.prf - */ - - KEYPRESS_STRING("\["); /*Output the first part... */ - /* See if a control key is down */ - if (event->key.keysym.mod & KMOD_CTRL) - { - KEYPRESS_STRING("ctrl-"); - } - /* See if an alt key is down */ - if (event->key.keysym.mod & KMOD_ALT) - { - KEYPRESS_STRING("alt-"); - } - /* See if a shift key is down */ - if (event->key.keysym.mod & KMOD_SHIFT) - { - KEYPRESS_STRING("shift-"); - } - - /* Add in the name of whatever key was pressed */ - KEYPRESS_STRING(SDL_GetKeyName(event->key.keysym.sym)); - - /* and end it... */ - KEYPRESS_STRING("]"); - } - } - break; - } - case SDL_QUIT: - { - /* handle quit requests */ - sdl_quit("Quitting!\n"); - break; - } - default: - { - break; - } - } -} - -static errr Term_xtra_sdl(int n, int v) -{ - static SDL_Event event; - term_data *td; - char buf[1024]; - - /* Analyze */ - switch (n) - { - case TERM_XTRA_EVENT: - { - if (v) - { - /* Perform event checking with blocking */ - SDL_WaitEvent( &event ); - handleEvent( &event ); - } else { - /* Perform event checking without blocking */ - if (SDL_PollEvent(&event)){ - /* We found an event! */ - handleEvent(&event); - } - } - return(0); - } - - case TERM_XTRA_FLUSH: - { - /* Keep doing events until the queue is empty! */ - while (SDL_PollEvent(&event)) - { - handleEvent(&event); - } - return (0); - } - - case TERM_XTRA_CLEAR: - { - /* Perform a full screen clear; redraw the sub-window borders.*/ - static SDL_Rect base; - base.x = 0; - base.y = 0; - base.w = arg_width; - base.h = arg_height; - - td = (term_data*)(Term->data); - - /* Lock the screen */ - if (SDL_MUSTLOCK(screen) ){ - if (SDL_LockSurface(screen) < 0) { - printf("Can't lock the screen: %s\n", SDL_GetError()); - exit(1); - } - } - - /* blank the screen area */ - SDL_FillRect(screen, &base, screen_black); - - /* Unlock the screen */ - if (SDL_MUSTLOCK(screen) ){ - SDL_UnlockSurface(screen); - } - - /* And... UPDATE the whole screen */ - SDL_Flip(screen); - - return (0); - } - - case TERM_XTRA_SHAPE: - { - /* - * Set the cursor visibility XXX XXX XXX - * - * This action should change the visibility of the cursor, - * if possible, to the requested value (0=off, 1=on) - * - * This action is optional, but can improve both the - * efficiency (and attractiveness) of the program. - */ - - return (0); - } - - case TERM_XTRA_FROSH: - { - /* - * Flush a row of output XXX XXX XXX - * - * This action should make sure that row "v" of the "output" - * to the window will actually appear on the window. - * - * This action is optional, assuming that "Term_text_xxx()" - * (and similar functions) draw directly to the screen, or - * that the "TERM_XTRA_FRESH" entry below takes care of any - * necessary flushing issues. - */ - - return (1); - } - - case TERM_XTRA_FRESH: - { - /* - * Flush output XXX XXX XXX - * - * This action should make sure that all "output" to the - * window will actually appear on the window. - * - * This action is optional, assuming that "Term_text_xxx()" - * (and similar functions) draw directly to the screen, or - * that the "TERM_XTRA_FROSH" entry above takes care of any - * necessary flushing issues. - */ -#ifdef USE_ISO - // Hajo: - // refresh the graphical view - - refresh_display(); - SDL_UpdateRect(screen, 0, 0, data[0].size_w, data[0].size_h); -// SDL_UpdateRect(td->face, 0, 0, 80*td->w, 24*td->h); -#endif /* USE_ISO */ - return (1); - } - - case TERM_XTRA_NOISE: - { - /* - * Make a noise XXX XXX XXX - * - * This action should produce a "beep" noise. - * - * This action is optional, but convenient. - */ - - return (1); - } - - case TERM_XTRA_SOUND: - { - /* - * Make a sound XXX XXX XXX - * - * This action should produce sound number "v", where the - * "name" of that sound is "sound_names[v]". This method - * is still under construction. - * - * This action is optional, and not very important. - */ - - return (1); - } - - case TERM_XTRA_BORED: - { - /* Perform event checking without blocking */ - if (SDL_PollEvent(&event)){ - /* We found an event! */ - handleEvent(&event); - } - return(0); - } - - case TERM_XTRA_REACT: - { - /* - * React to global changes XXX XXX XXX - * - * For example, this action can be used to react to - * changes in the global "color_table[256][4]" array. - * - * This action is optional, but can be very useful for - * handling "color changes" and the "arg_sound" and/or - * "arg_graphics" options. - */ -#ifdef USE_ISO - strcpy(buf, "graf-iso.prf"); - process_pref_file(buf); -#endif /* USE_ISO */ - return (1); - } - - case TERM_XTRA_ALIVE: - { - /* - * Change the "hard" level XXX XXX XXX - * - * This action is used if the program changes "aliveness" - * by being either "suspended" (v=0) or "resumed" (v=1) - * This action is optional, unless the computer uses the - * same "physical screen" for multiple programs, in which - * case this action should clean up to let other programs - * use the screen, or resume from such a cleaned up state. - * - * This action is currently only used by "main-gcu.c", - * on UNIX machines, to allow proper "suspending". - */ - - return (1); - } - - case TERM_XTRA_LEVEL: - { - /* - * Change the "soft" level XXX XXX XXX - * - * This action is used when the term window changes "activation" - * either by becoming "inactive" (v=0) or "active" (v=1) - * - * This action can be used to do things like activate the proper - * font / drawing mode for the newly active term window. This - * action should NOT change which window has the "focus", which - * window is "raised", or anything like that. - * - * This action is optional if all the other things which depend - * on what term is active handle activation themself, or if only - * one "term_data" structure is supported by this file. - */ - - return (1); - } - - case TERM_XTRA_DELAY: - { - /* - * Delay for some milliseconds XXX XXX XXX - * - * This action is useful for proper "timing" of certain - * visual effects, such as breath attacks. - * - * This action is optional, but may be required by this file, - * especially if special "macro sequences" must be supported. - */ - - /* I think that this command is system independent... */ - /*sleep(v/1000);*/ - /* main-x11 uses usleep(1000*v); */ - /* main-win uses Sleep(v); */ - return (1); - } - - case TERM_XTRA_GET_DELAY: - { - /* - * Get Delay of some milliseconds XXX XXX XXX - * place the result in Term_xtra_long - * - * This action is useful for proper "timing" of certain - * visual effects, such as recording cmovies. - * - * This action is optional, but cmovies wont perform - * good without it - */ - - return (1); - } - } - - /* Unknown or Unhandled action */ - return (1); -} - -#define TYPECOLOR(i) printf(" R:%d\tG:%d\tB:%d\tA:%d\t\n",\ - color_data[i]>>24,(color_data[i]&0x00ff0000)>>16,\ - (color_data[i]&0x0000ff00)>>8,(color_data[i]&0x000000ff)); -/* - * Display the cursor - * - * This routine should display the cursor at the given location - * (x,y) in some manner. On some machines this involves actually - * moving the physical cursor, on others it involves drawing a fake - * cursor in some form of graphics mode. Note the "soft_cursor" - * flag which tells "z-term.c" to treat the "cursor" as a "visual" - * thing and not as a "hardware" cursor. - * - * You may assume "valid" input if the window is properly sized. - * - * You may use the "Term_grab(x, y, &a, &c)" function, if needed, - * to determine what attr/char should be "under" the new cursor, - * for "inverting" purposes or whatever. - */ -static errr Term_curs_sdl(int x, int y) -{ - term_data *td = (term_data*)(Term->data); - DB("Term_curs_sdl"); - /* XXX XXX XXX */ -#ifdef USE_ISO - highlite_spot(x, y); -#endif - - /* Success */ - return (0); -} - - -/* - * Erase some characters - * - * This function should erase "n" characters starting at (x,y). - * - * You may assume "valid" input if the window is properly sized. - */ -static errr Term_wipe_sdl(int x, int y, int n) -{ - static SDL_Rect base; - term_data *td = (term_data*)(Term->data); - DB("Wiping"); - /* calculate boundaries of the area to clear */ - base.x = td->pos_x + x*t_width; - base.y = td->pos_y + y*t_height; - base.w = n*t_width; - base.h = t_height; - - /* Lock the screen */ - if (SDL_MUSTLOCK(screen) ){ - if (SDL_LockSurface(screen) < 0) { - printf("Can't lock the screen: %s\n", SDL_GetError()); - sdl_quit("Bah"); - } - } - - /* blank the screen area */ - SDL_FillRect(screen, &base, screen_black); - - /* Unlock the screen */ - if (SDL_MUSTLOCK(screen) ){ - SDL_UnlockSurface(screen); - } - - /* And... UPDATE the rectangle we just wrote to! */ - SDL_UpdateRects(screen,1,&base); - - /* Success */ - return (0); -} - - -/* - * Draw some text on the screen - * - * This function should actually display an array of characters - * starting at the given location, using the given "attribute", - * and using the given string of characters, which contains - * exactly "n" characters and which is NOT null-terminated. - * - * You may assume "valid" input if the window is properly sized. - * - * You must be sure that the string, when written, erases anything - * (including any visual cursor) that used to be where the text is - * drawn. On many machines this happens automatically, on others, - * you must first call "Term_wipe_xxx()" to clear the area. - * - * In color environments, you should activate the color contained - * in "color_data[a & 0x0F]", if needed, before drawing anything. - * - * You may ignore the "attribute" if you are only supporting a - * monochrome environment, since this routine is normally never - * called to display "black" (invisible) text, including the - * default "spaces", and all other colors should be drawn in - * the "normal" color in a monochrome environment. - * - * Note that if you have changed the "attr_blank" to something - * which is not black, then this function must be able to draw - * the resulting "blank" correctly. - * - * Note that this function must correctly handle "black" text if - * the "always_text" flag is set, if this flag is not set, all the - * "black" text will be handled by the "Term_wipe_xxx()" hook. - */ -static errr Term_text_sdl(int x, int y, int n, byte a, const char *cp) -{ - term_data *td = (term_data*)(Term->data); - static SDL_Rect base; - SDL_Rect base_back; - int i = n; - char old = 0; - - /* calculate place to clear off and draw to */ - base.x = td->pos_x + x*t_width; - base.y = td->pos_y + y*t_height; - base.w = n*t_width; - base.h = t_height; - - base_back = base; - - /* Lock the screen */ - if (SDL_MUSTLOCK(screen) ){ - if (SDL_LockSurface(screen) < 0) { - printf("Can't lock the screen: %s\n", SDL_GetError()); - sdl_quit("Bah"); - } - } - - /* blank the screen area */ - SDL_FillRect(screen, &base, screen_black); - - /* Unlock the screen */ - if (SDL_MUSTLOCK(screen) ){ - SDL_UnlockSurface(screen); - } - - /* Note that SDL docs specify that SDL_BlitSurface should not be called - on locked surfaces... since the character printing routine below revolves - around blitting, the surface has been unlocked first*/ - - /* loop through the input string, drawing characters */ - i = n; - old = 0; - while (i--) - { - /* Output the character... */ - /* If character has not changed, then just blit the old surface into - the new location to save effort*/ - if (*cp == old) - { - /* the desired character/color combo is already on the work surf */ - /* just blit it! */ - SDL_BlitSurface(worksurf,NULL,screen,&base); - } else { - /* copy the desired character onto working surface */ - SDL_BlitSurface(text[*cp],NULL,worksurf,NULL); - /* color our crayon surface with the desired color */ - SDL_FillRect(crayon,NULL,color_data[a&0x0f]); - /* apply the color to the character on the working surface */ - SDL_BlitSurface(crayon,NULL,worksurf,NULL); - /* and blit it onto our screen! */ - SDL_BlitSurface(worksurf,NULL,screen,&base); - } - /* Move to the next position */ - base.x += t_width; - /* Store the old character */ - old = *cp; - /* Increment the character pointer */ - cp++; - } - - // And... UPDATE the rectangle we just wrote to! - SDL_UpdateRects(screen,1,&base_back); - -#ifdef USE_ISO - if (a < 16) - { - set_spots(x, y, n, TRUE); - } - else - { - set_spots(x, y, n, FALSE); - } -#endif /* USE_ISO */ - - /* Success */ - return (0); -} - -/* - * Draw some attr/char pairs on the screen - * - * This routine should display the given "n" attr/char pairs at - * the given location (x,y). This function is only used if one - * of the flags "always_pict" or "higher_pict" is defined. - * - * You must be sure that the attr/char pairs, when displayed, will - * erase anything (including any visual cursor) that used to be at - * the given location. On many machines this is automatic, but on - * others, you must first call "Term_wipe_xxx(x, y, 1)". - * - * With the "higher_pict" flag, this function can be used to allow - * the display of "pseudo-graphic" pictures, for example, by using - * the attr/char pair as an encoded index into a pixmap of special - * "pictures". - * - * With the "always_pict" flag, this function can be used to force - * every attr/char pair to be drawn by this function, which can be - * very useful if this file can optimize its own display calls. - * - * This function is often associated with the "arg_graphics" flag. - * - * This function is only used if one of the "higher_pict" and/or - * "always_pict" flags are set. - */ -#ifndef USE_ISO -static errr Term_pict_sdl(int x, int y, int n, const byte *ap, const char *cp) -{ - term_data *td = (term_data*)(Term->data); - DB("Term_pict_sdl"); - /* XXX XXX XXX */ -#else -// for ISO-view we need USE_TRANSPARENCY and USE_EGO_GRAPHICS defined -static errr Term_pict_sdl(int x, int y, int n, const byte *ap, const char *cp, const byte *tap, const char *tcp, const byte *eap, const char *ecp) -{ - /* Hajo: memorize output */ - memcpy(&iso_ap[y][x], ap, n); - memcpy(&iso_cp[y][x], cp, n); - memcpy(&iso_atp[y][x], tap, n); - memcpy(&iso_ctp[y][x], tcp, n); - memcpy(&iso_aep[y][x], eap, n); - memcpy(&iso_cep[y][x], ecp, n); - - // here is no text - set_spots(x, y, n, FALSE); - -#endif /* USE_ISO */ - - /* Success */ - return (0); -} - -static errr term_data_init(term_data *td, int i) -{ - term *t = &(td->t); - int x = 0; - int y = 0; - int cols = 80; - int rows = 24; - - /* Initialize the term */ - // gets: pointer to address, number of columns, number of rows, number - // of keypresses to queue up (guess 24?) - term_init(t, cols, rows, 24); - - /* Use a "soft" cursor */ - t->soft_cursor = TRUE; - - // Picture routine flags - t->always_pict = FALSE; - t->higher_pict = FALSE; - t->always_text = FALSE; - - /* Erase with "white space" */ - t->attr_blank = TERM_WHITE; - t->char_blank = ' '; - - /* Hooks */ - t->xtra_hook = Term_xtra_sdl; - t->curs_hook = Term_curs_sdl; - t->wipe_hook = Term_wipe_sdl; - t->text_hook = Term_text_sdl; -#ifdef USE_ISO - t->pict_hook = Term_pict_sdl; -#endif /* USE_ISO */ - - - /* Save the data */ - t->data = td; - - /* Activate (important) */ - Term_activate(t); - - // *** Initialize the rest of the term_data stuff.... - td->name = angband_term_name[i];// name of this term window - - td->rows = rows; - td->cols = cols; - td->pos_x = x; - td->pos_y = y; - - - td->size_w = cols*t_width; - td->size_h = rows*t_height; - - /* Turn on a border, thickness specified by BORDER_THICKNESS */ - td->has_border = TRUE; - td->border_thick = BORDER_THICKNESS; - -#ifdef USE_GRAPHICS -#ifdef USE_TRANSPARENCY -#endif -#endif - - /* Success */ - return (0); -} - -/* - * Check and create if needed the directory dirpath -- copied from main.c - */ -bool_ private_check_user_directory(cptr dirpath) -{ - /* Is this used anywhere else in *bands? */ - struct stat stat_buf; - - int ret; - - /* See if it already exists */ - ret = stat(dirpath, &stat_buf); - - /* It does */ - if (ret == 0) - { - /* Now we see if it's a directory */ - if ((stat_buf.st_mode & S_IFMT) == S_IFDIR) return (TRUE); - - /* - * Something prevents us from create a directory with - * the same pathname - */ - return (FALSE); - } - - /* No - this maybe the first time. Try to create a directory */ - else - { - /* Create the ~/.ToME directory */ - ret = mkdir(dirpath, 0700); - - /* An error occured */ - if (ret == -1) return (FALSE); - - /* Success */ - return (TRUE); - } -} - -/* - * Check existence of ".ToME/" directory in the user's - * home directory or try to create it if it doesn't exist. - * Returns FALSE if all the attempts fail. - */ -static bool_ check_create_user_dir(void) -{ - char dirpath[1024]; - char versionpath[1024]; - char savepath[1024]; - - /* Get an absolute path from the filename */ - path_parse(dirpath, 1024, PRIVATE_USER_PATH); - strcpy(versionpath, dirpath); - strcat(versionpath, USER_PATH_VERSION); - strcpy(savepath, versionpath); - strcat(savepath, "/save"); - - return private_check_user_directory(dirpath) && private_check_user_directory(versionpath) && private_check_user_directory(savepath); -} - -/* - * Init some stuff - copied from main.c - */ -static void init_stuff(void) -{ - char path[1024]; - - cptr tail; - - /* Get the environment variable */ - tail = getenv("TOME_PATH"); - - /* Use the angband_path, or a default */ -#ifndef ENABLE_BINRELOC - strcpy(path, tail ? tail : DEFAULT_PATH); -#else /* Runtime lookup of location */ - strcpy(path, br_strcat(DATADIR, "/tome/lib")); -#endif - - /* Hack -- Add a path separator (only if needed) */ - if (!suffix(path, PATH_SEP)) strcat(path, PATH_SEP); - - /* Initialize */ - init_file_paths(path); -} - - -errr init_sdl(int argc, char **argv) -{ - return 0; -} - -int main(int argc, char *argv[]) -{ - int i; - - bool_ done = FALSE; - - bool_ new_game = FALSE; - - int show_score = 0; - - cptr mstr = NULL; - - bool_ args = TRUE; - - float gamma; - char filename[PATH_MAX + 1]; - /* Flags to pass to SDL_SetVideoMode */ - int videoFlags; - /* this holds some info about our display */ - const SDL_VideoInfo *videoInfo; - - -#ifdef CHECK_MEMORY_LEAKS - GC_find_leak = 1; -#endif /* CHECK_MEMORY_LEAKS */ - - - /* Save the "program name" XXX XXX XXX */ - argv0 = argv[0]; - - -#ifdef SET_UID - - /* Default permissions on files */ - (void)umask(022); - -#endif /* SET_UID */ - - - /* Get the file paths */ - init_stuff(); - - -#ifdef SET_UID - - /* Get the user id (?) */ - player_uid = getuid(); - -# ifdef SAFE_SETUID - -# ifdef _POSIX_SAVED_IDS - - /* Save some info for later */ - player_euid = geteuid(); - player_egid = getegid(); - -# endif - -# if 0 /* XXX XXX XXX */ - - /* Redundant setting necessary in case root is running the game */ - /* If not root or game not setuid the following two calls do nothing */ - - if (setgid(getegid()) != 0) - { - sdl_quit("setgid(): cannot set permissions correctly!"); - } - - if (setuid(geteuid()) != 0) - { - sdl_quit("setuid(): cannot set permissions correctly!"); - } - -# endif /* XXX XXX XXX */ - -# endif /* SAFE_SETUID */ - -#endif /* SET_UID */ - - -#ifdef SET_UID - - /* Acquire the "user name" as a default player name */ - user_name(player_name, player_uid); - - - /* - * On multiuser systems, users' private directories are - * used to store pref files, chardumps etc. - */ - { - bool_ ret; - - /* Create a directory for the user's files */ - ret = check_create_user_dir(); - - /* Oops */ - if (ret == FALSE) sdl_quit("Cannot create directory " PRIVATE_USER_PATH); - } - -#endif /* SET_UID */ - - /* Before sdl_quit could possible be called, need to make sure that the text - array is zeroed, so that sdl_quit->killFontAndAlphabet() doesn't try to free - SDL_Surfaces that don't exist ! */ - memset(text,0,sizeof(text)); - - /* Initialize the SDL window*/ - filename[PATH_MAX] = 0; - - /* initialize SDL */ - if ( SDL_Init( SDL_INIT_VIDEO ) < 0 ) - { - sdl_quit("Video initialization failed!"); - } - DB("SDL Initialized!"); - - /* Skip to our arguments -- (Neil)*/ - /* for (i = 1; (i < argc) && (0 != strcmp(argv[i], "--")); ++i); */ - /* Handle our arguments -- (Neil)*/ - /* for (++i; i < argc ; ++i) - { - if (0 == strcmp(argv[i], "-n")) - { - if (++i == argc) - { - printf("Argument missing for option -n\n"); - return -1; - } - - arg_console_count = atoi(argv[i]); - if (arg_console_count <= 0 || arg_console_count > MAX_CONSOLE_COUNT) - { - printf("Invalid console count given.\n"); - arg_console_count = 1; - } - } - else if (0 == strcmp(argv[i], "-o")) - { - arg_old_graphics = TRUE; - } - else if (0 == strcmp(argv[i], "-b")) - { - arg_double_width = TRUE; - } - else if (0 == strcmp(argv[i], "-w")) - { - if (++i == argc) - { - printf("Argument missing for option -w\n"); - return -1; - } - - arg_width = atoi(argv[i]); - } - else if (0 == strcmp(argv[i], "-h")) - { - if (++i == argc) - { - printf("Argument missing for option -h\n"); - return -1; - } - - arg_height = atoi(argv[i]); - } - else if (0 == strcmp(argv[i], "-fs")) - { - arg_full_screen = TRUE; - } - else if (0 == strcmp(argv[i], "-bpp")) - { - if (++i == argc) - { - printf("Argument missing for option -bpp\n"); - return -1; - } - - arg_bpp = atoi(argv[i]); - } - } - */ - - - /* Now for the meat of the initialization -- (Neil)*/ - quit_aux = sdl_quit; - - /* Window Manager stuff -- (Neil)*/ - path_build(filename, PATH_MAX, ANGBAND_DIR_XTRA, "graf/icon.png"); - SDL_WM_SetIcon(IMG_Load(filename), 0); - SDL_WM_SetCaption("ToME", "tome"); - - /* how about a hardware surface with hardware palette? - XXX XXX XXX should probably be chosen at compile-time! */ - videoFlags = SDL_HWSURFACE | SDL_HWPALETTE; - - /* XXX XXX XXX */ - if(getenv("TOME_SCREEN_WIDTH")) arg_width = atoi(getenv("TOME_SCREEN_WIDTH")); - if(getenv("TOME_SCREEN_HEIGHT")) arg_height = atoi(getenv("TOME_SCREEN_HEIGHT")); - if(getenv("TOME_SCREEN_BPP")) arg_bpp = atoi(getenv("TOME_SCREEN_BPP")); - - /* get a SDL surface */ - screen = SDL_SetVideoMode( arg_width, arg_height, arg_bpp, videoFlags ); - - DB("Video Mode Set!"); - - /* Verify there is a surface */ - if ( !screen ) - { - DB("No screen!"); - sdl_quit("Failed to set SDL Surface."); - } - - DB("SDL Window Created!"); - - /* Now ready the fonts! */ - - DB("initializing SDL_ttf"); - if(TTF_Init()==-1) { - printf("TTF_Init: %s\n", TTF_GetError()); - sdl_quit("Bah"); - } - - DB("loading font..."); - /* XXX centralize these environment calls*/ - if(getenv("TOME_FONT_SIZE")) arg_font_size = atoi(getenv("TOME_FONT_SIZE")); - - /* load and render the font */ - loadAndRenderFont(arg_font_name,arg_font_size); - - /* Initialize the working surface and crayon surface used for rendering - text in different colors... */ - worksurf = SDL_CreateRGBSurface(SDL_HWSURFACE,t_width,\ - t_height,16,0xf000,0x0f00,0x00f0,0x000f); - crayon = SDL_CreateRGBSurface(SDL_HWSURFACE,t_width,\ - t_height,16,0xf000,0x0f00,0x00f0,0x000f); - - /* The working surface will blit using alpha values... */ - SDL_SetAlpha(worksurf,SDL_SRCALPHA,0); - - /* Set up the colors using the great little color macros! */ - color_data[0] = BLACK; - color_data[1] = WHITE; - color_data[2] = MID_GREY; - color_data[3] = BRIGHT_ORANGE; - color_data[4] = RED; - color_data[5] = GREEN; - color_data[6] = BRIGHT_BLUE; - color_data[7] = DARK_ORANGE; - color_data[8] = DARK_GREY; - color_data[9] = BRIGHT_GREY; - color_data[10] = PURPLE; - color_data[11] = YELLOW; - color_data[12] = BRIGHT_RED; - color_data[13] = BRIGHT_GREEN; - color_data[14] = AQUAMARINE; - color_data[15] = BROWN; - - /* And setup the screen black color */ - screen_black = SDL_MapRGB(screen->format,0,0,0); - screen_white = SDL_MapRGB(screen->format,255,255,255); - - /* Initialize the windows, or whatever that means in this case */ - for (i = 0; i < MAX_CONSOLE_COUNT; i++) - { - term_data *td = &data[i]; - - /* Initialize the term_data */ - term_data_init(td, i); - /* Save global entry */ - angband_term[i] = Term; - } - - /* Enable UNICODE keysyms */ - SDL_EnableUNICODE(1); - - /* By setting this value, 'pref-sdl.prf' will be loaded on start. - Since this contains mappings for various keys, this is important! */ - ANGBAND_SYS = "sdl"; -#ifdef USE_ISO - DB("Isometric view uses always graphics mode.\n"); - use_graphics = TRUE; - - - /* Hajo: allocate memory for output data */ - /* These arrays are read by the iso-view and written from this file */ - iso_cp = halloc(data[0].t.wid, data[0].t.hgt); - iso_ap = halloc(data[0].t.wid, data[0].t.hgt); - iso_ctp = halloc(data[0].t.wid, data[0].t.hgt); - iso_atp = halloc(data[0].t.wid, data[0].t.hgt); - iso_cep = halloc(data[0].t.wid, data[0].t.hgt); - iso_aep = halloc(data[0].t.wid, data[0].t.hgt); - - // Hmm, no ANGBAND_SYS in old iso-code - // if I change this I don't have to load the *.prf manually? - // - // seems not to work for the following: - /* Hajo: set mode */ - ANGBAND_GRAF = "iso"; - - /* Hajo: init view */ - init_adaptor(); - - center_player = TRUE; -#endif /* USE_ISO */ - - printf("Signals?\n"); - - /* Catch nasty signals */ - signals_init(); - - printf("Initialize Angband!\n"); - /* Initialize */ - init_angband(); - - printf("Angband Initialized!\n"); - - /* Hack -- If requested, display scores and quit */ - if (show_score > 0) display_scores(0, show_score); - - /* Wait for response */ - pause_line(23); - - printf("Play the game!\n"); -#ifdef USE_ISO - // Juergen: HACK, but this all is just for testing ... - data[0].t.higher_pict = TRUE; -#endif - - /* Play the game */ - play_game(new_game); - - /* Quit */ - sdl_quit("Game over, man"); - - /* Exit */ - return (0); - -} - -#endif |