Changeset 127


Ignore:
Timestamp:
Mar 19, 2008, 2:42:12 AM (14 years ago)
Author:
Sam Hocevar
Message:
  • Renamed the "game" class into "Game" and started cleaning it up. There is still a very long way to go.
Location:
abuse/trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • abuse/trunk/src/game.cpp

    r124 r127  
    6060extern CrcManager *net_crcs;
    6161
    62 game *the_game;
     62Game *the_game = NULL;
    6363WindowManager *wm = NULL;
    6464int dev, shift_down = SHIFT_DOWN_DEFAULT, shift_right = SHIFT_RIGHT_DEFAULT;
     
    125125}
    126126
    127 void game::play_sound(int id, int vol, int32_t x, int32_t y)
     127void Game::play_sound(int id, int vol, int32_t x, int32_t y)
    128128{
    129129    if(!(sound_avail & SFX_INITIALIZED))
    130130        return;
    131     if(vol < 15)
     131    if(vol < 1)
    132132        return;
    133133    if(!player_list)
    134134        return;
    135135
    136     uint32_t mdist = 0xffffffff;
     136    int mindist = 500;
    137137    view *cd = NULL;
    138138    for(view *f = player_list; f; f = f->next)
    139139    {
    140         if(f->local_player())
     140        if(!f->local_player())
     141            continue;
     142
     143        int d, cx = abs(f->x_center() - x), cy = abs(f->y_center() - y);
     144        if(cx < cy)
     145            d = cx + cy - (cx >> 1);
     146        else
     147            d = cx + cy - (cy >> 1);
     148
     149        if(d < mindist)
    141150        {
    142             int32_t cx = abs(f->x_center()-x), cy = abs(f->y_center()-y), d;
    143             if(cx < cy)
    144                 d = cx + cy - (cx >> 1);
    145             else
    146                 d = cx + cy - (cy >> 1);
    147 
    148             if((unsigned)d < mdist)
    149             {
    150                 cd = f;
    151                 mdist = d;
    152             }
     151            cd = f;
     152            mindist = d;
    153153        }
    154154    }
    155     if(mdist > 500 || !cd)
     155    if(mindist >= 500)
    156156        return;
    157     if(mdist < 100)
    158         mdist = 0;
     157
     158    if(mindist < 100)
     159        mindist = 0;
    159160    else
    160         mdist -= 100;
    161 
    162     int v = (400 - mdist) * sfx_volume / 400 - (127 - vol);
     161        mindist -= 100;
    163162
    164163    // Calculate the position of the sound relative to the player
    165     int p = cd->x_center() - x;
    166     if(p > 0)
    167         p = (int)(((double)p / 255.0) * 128.0);
    168     else
    169         p = (int)(((double)abs(p) / 255.0) * -128.0);
    170     p += 128;
    171     if(p < 0) p = 0;
    172     if(p > 255) p = 255;
    173 
     164    int p = (cd->x_center() - x) / 2 + 128;
     165    if(p < 0)
     166        p = 0;
     167    if(p > 255)
     168        p = 255;
     169
     170    int v = (400 - mindist) * sfx_volume / 400 - (127 - vol);
    174171    if(v > 0)
    175172        cache.sfx(id)->play(v, 128, p);
     
    213210}
    214211
    215 void game::grow_views(int amount)
     212void Game::grow_views(int amount)
    216213{
    217214    view *f;
     
    250247}
    251248
    252 void game::pan(int xv, int yv)
     249void Game::pan(int xv, int yv)
    253250{
    254251    first_view->pan_x += xv;
     
    256253}
    257254
    258 view *game::view_in(int mousex, int mousey)
     255view *Game::view_in(int mousex, int mousey)
    259256{
    260257    for(view *f = first_view; f; f = f->next)
     
    270267}
    271268
    272 void game::ftile_on(int screenx, int screeny, int32_t &x, int32_t &y)
     269void Game::ftile_on(int screenx, int screeny, int32_t &x, int32_t &y)
    273270{
    274271    mouse_to_game(screenx, screeny, x, y);
     
    277274}
    278275
    279 void game::btile_on(int screenx, int screeny, int32_t &x, int32_t &y)
     276void Game::btile_on(int screenx, int screeny, int32_t &x, int32_t &y)
    280277{
    281278    view *f = view_in(screenx, screeny);
     
    294291}
    295292
    296 void game::mouse_to_game(int32_t x, int32_t y,
     293void Game::mouse_to_game(int32_t x, int32_t y,
    297294                         int32_t &gamex, int32_t &gamey, view *f)
    298295{
     
    317314}
    318315
    319 void game::game_to_mouse(int32_t gamex, int32_t gamey, view *which,
     316void Game::game_to_mouse(int32_t gamex, int32_t gamey, view *which,
    320317                         int32_t &x, int32_t &y)
    321318{
     
    385382}
    386383
    387 void game::set_state(int new_state)
     384void Game::set_state(int new_state)
    388385{
    389386    int d = 0;
     
    457454}
    458455
    459 void game::joy_calb(event &ev)
     456void Game::joy_calb(event &ev)
    460457{
    461458    if(!joy_win) // make sure the joystick calibration window is open
     
    486483}
    487484
    488 void game::menu_select(event &ev)
     485void Game::menu_select(event &ev)
    489486{
    490487    state = DEV_MOUSE_RELEASE;
     
    500497
    501498
    502 void game::show_help(char const *st)
     499void Game::show_help(char const *st)
    503500{
    504501    strcpy(help_text, st);
     
    507504}
    508505
    509 void game::draw_value(image *screen, int x, int y, int w, int h,
     506void Game::draw_value(image *screen, int x, int y, int w, int h,
    510507                      int val, int max)
    511508{
     
    515512
    516513
    517 void game::set_level(level *nl)
     514void Game::set_level(level *nl)
    518515{
    519516    if(current_level)
     
    522519}
    523520
    524 void game::load_level(char const *name)
     521void Game::load_level(char const *name)
    525522{
    526523    if(current_level)
     
    550547}
    551548
    552 int game::done()
     549int Game::done()
    553550{
    554551  return finished || (main_net_cfg && main_net_cfg->restart_state());
    555 
    556 }
    557 
    558 void game::end_session()
    559 {
    560   finished = 1;
     552}
     553
     554void Game::end_session()
     555{
     556  finished = true;
    561557  if(main_net_cfg)
    562558  {
     
    566562}
    567563
    568 void game::put_block_fg(int x, int y, trans_image *im)
     564void Game::put_block_fg(int x, int y, trans_image *im)
    569565{
    570566  for(view *f = first_view; f; f = f->next)
     
    585581}
    586582
    587 void game::put_block_bg(int x, int y, image *im)
     583void Game::put_block_bg(int x, int y, image *im)
    588584{
    589585  for(view *f = first_view; f; f = f->next)
     
    609605int need_delay = 1;
    610606
    611 void game::dev_scroll()
     607void Game::dev_scroll()
    612608{
    613609  need_delay = 0;
     
    672668void remap_area(image *screen, int x1, int y1, int x2, int y2, uint8_t *remap)
    673669{
    674   uint8_t *sl=(uint8_t *)screen->scan_line(y1)+x1;
    675   int x, y, a = screen->width()-(x2 - x1 + 1);
    676   uint8_t c;
    677   for(y = y1; y <= y2; y++)
    678   {
    679     for(x = x1; x <= x2; x++)
    680     {
    681       c=*sl;
    682       *(sl++)=remap[c];
    683     }
    684     sl += a;
    685   }
     670    screen->lock();
     671
     672    uint8_t *sl = (uint8_t *)screen->scan_line(y1) + x1;
     673    int step = screen->width() - (x2 - x1 + 1);
     674
     675    for(int y = y1; y <= y2; y++)
     676    {
     677        for(int x = x1; x <= x2; x++)
     678        {
     679            uint8_t c = *sl;
     680            *(sl++) = remap[c];
     681        }
     682        sl += step;
     683    }
     684    screen->unlock();
    686685}
    687686
     
    698697}
    699698
    700 void game::draw_map(view *v, int interpolate)
     699void Game::draw_map(view *v, int interpolate)
    701700{
    702701  backtile *bt;
     
    735734  {
    736735    int c = v->draw_solid;
     736    screen->lock();
    737737    for(int y = v->cy1; y <= v->cy2; y++)
    738738      memset(screen->scan_line(y)+v->cx1, c, v->cx2 - v->cx1 + 1);
     739    screen->unlock();
    739740    v->draw_solid = -1;
    740741    return;
     
    761762
    762763
    763 
    764 //  int32_t max_xoff=(current_level->foreground_width()-1)*ftile_width()-(v->cx2 - v->cx1 + 1);
    765 //  int32_t max_yoff=(current_level->foreground_height()-1)*ftile_height()-(v->cy2 - v->cy1 + 1);
    766 
    767764  int32_t xoff, yoff;
    768765  if(interpolate)
     
    786783  nxoff = xoff * bg_xmul / bg_xdiv;
    787784  nyoff = yoff * bg_ymul / bg_ydiv;
    788 
    789 //  int32_t max_bg_xoff=(current_level->background_width())*btile_width()-(v->cx2 - v->cx1 + 1);
    790 //  int32_t max_bg_yoff=(current_level->background_height())*btile_height()-(v->cy2 - v->cy1 + 1);
    791 //  if(nxoff > max_bg_xoff) nxoff = max_xoff;
    792 //  if(nyoff > max_bg_yoff) nyoff = max_yoff;
    793785
    794786
     
    965957      }
    966958    }
    967 /*        if(dev == 0)
    968           current_level->put_fg(x, y, ft->next);  */
    969   }
    970 
    971 //  if(!(dev & EDIT_MODE))
    972 //    server_check();
     959  }
    973960
    974961  int32_t ro = rand_on;
     
    11351122}
    11361123
    1137 void game::put_fg(int x, int y, int type)
     1124void Game::put_fg(int x, int y, int type)
    11381125{
    11391126  if(current_level->get_fg(x, y)!=type)
     
    11431130      if(f->drawable())
    11441131        draw_map(f);
    1145 /*    put_block_bg(x, y, get_bg(current_level->get_bg(x / ASPECT, y / ASPECT))->im);
    1146     if(type > BLACK)
    1147       put_block_fg(x, y, get_fg(type)->im); */
    1148   }
    1149 }
    1150 
    1151 void game::put_bg(int x, int y, int type)
     1132  }
     1133}
     1134
     1135void Game::put_bg(int x, int y, int type)
    11521136{
    11531137  if(current_level->get_bg(x, y)!=type)
     
    11571141      if(f->drawable())
    11581142        draw_map(f);
    1159 /*    put_block_bg(x, y, get_bg(type)->im);
    1160     if(current_level->get_fg(x, y)>BLACK)
    1161       put_block_fg(x, y, get_fg(current_level->get_fg(x, y))->im); */
    1162   }
    1163 }
    1164 
    1165 int game::in_area(event &ev, int x1, int y1, int x2, int y2)
     1143  }
     1144}
     1145
     1146int Game::in_area(event &ev, int x1, int y1, int x2, int y2)
    11661147{
    11671148  return (last_demo_mx >= x1 && last_demo_mx <= x2 &&
     
    11691150}
    11701151
    1171 void game::request_level_load(char *name)
     1152void Game::request_level_load(char *name)
    11721153{
    11731154  strcpy(req_name, name);
     
    12661247        fade_in(cache.img(cdc_logo), 32);
    12671248
    1268         milli_wait(900);
     1249        milli_wait(400);
    12691250
    12701251        void *space_snd = symbol_value(make_find_symbol("SPACE_SND"));
    12711252
    12721253        fade_out(32);
    1273         milli_wait(300);
    1274 
    1275         int i, abort = 0;
     1254        milli_wait(100);
     1255
     1256        int i;
    12761257        char *str = lstring_value(eval(make_find_symbol("plot_start")));
    12771258
     
    13481329        delete fp;
    13491330
    1350         for(i = 0; i < 100 && !abort; i++)
    1351         {
    1352         }
    1353 
    13541331        if(title_screen >= 0)
    13551332            fade_in(cache.img(title_screen), 32);
    1356 
    1357         wm->set_mouse_shape(cache.img(c_normal)->copy(), 1, 1);
    13581333    }
    13591334}
     
    13611336extern int start_edit;
    13621337
    1363 void game::request_end()
     1338void Game::request_end()
    13641339{
    13651340  req_end = 1;
     
    13711346extern void fast_load_stop_reloading();
    13721347
    1373 game::game(int argc, char **argv)
     1348Game::Game(int argc, char **argv)
    13741349{
    13751350  int i;
     
    14251400
    14261401  reset_keymap();                   // we think all the keys are up right now
    1427   finished = 0;
     1402  finished = false;
    14281403
    14291404  calc_light_table(pal);
     
    15461521double avg_fps = 15.0, possible_fps = 15.0;
    15471522
    1548 void game::toggle_delay()
     1523void Game::toggle_delay()
    15491524{
    15501525  no_delay=!no_delay;
     
    15551530}
    15561531
    1557 void game::show_time()
     1532void Game::show_time()
    15581533{
    15591534  if(first_view && fps_on)
     
    15681543}
    15691544
    1570 void game::update_screen()
     1545void Game::update_screen()
    15711546{
    15721547  if(state == HELP_STATE)
     
    16251600}
    16261601
    1627 void game::do_intro()
    1628 {
    1629 
    1630 }
    1631 
    1632 int game::calc_speed()
     1602void Game::do_intro()
     1603{
     1604
     1605}
     1606
     1607int Game::calc_speed()
    16331608{
    16341609    int ret = 0;
     
    16941669extern int start_edit;
    16951670
    1696 void game::get_input()
     1671void Game::get_input()
    16971672{
    16981673    event ev;
     
    17931768                    case DEV_QUIT:
    17941769                    {
    1795                         finished = 1;
     1770                        finished = true;
    17961771                    } break;
    17971772                }
     
    18701845                                    } break;
    18711846                                    case JK_TAB:
    1872                                     {
    18731847                                        if(start_edit)
    18741848                                            toggle_edit_mode();
    18751849                                        need_refresh();
    1876                                     } break;
     1850                                        break;
    18771851                                    case 'c':
    1878                                     {
     1852                                    case 'C':
    18791853                                        if(chatting_enabled && (!(dev & EDIT_MODE) && chat))
    18801854                                            chat->toggle();
    1881                                     } break;
     1855                                        break;
    18821856                                    case '9':
    1883                                     {
    18841857                                        dev = dev ^ PERFORMANCE_TEST_MODE;
    18851858                                        need_refresh();
    1886                                     } break;
    1887 /*                                    case '=':
    1888                                     case '+':
    1889                                     {
    1890                                         if(!dev_cont->need_plus_minus())
    1891                                         {
    1892                                             if(wm->key_pressed(JK_CTRL_L))
    1893                                                 grow_views(20);
    1894                                             else
    1895                                                 grow_views(5);
    1896                                             draw(state == SCENE_STATE);
    1897                                         }
    1898                                     } break;
    1899                                     case JK_F10:
    1900                                     {
    1901                                         make_screen_size(311, 160);
    1902                                     } break;
    1903                                     case '_':
    1904                                     case '-' :
    1905                                     {
    1906                                         if(!dev_cont->need_plus_minus())
    1907                                         {
    1908                                             if(wm->key_pressed(JK_CTRL_L))
    1909                                                 grow_views(-20);
    1910                                             else
    1911                                                 grow_views(-5);
    1912                                             draw(state == SCENE_STATE);
    1913                                         }
    1914                                     } break;
    1915 */
     1859                                        break;
    19161860                                }
    19171861                            } break;
     
    20531997}
    20541998
    2055 void game::step()
     1999void Game::step()
    20562000{
    20572001  clear_tmp();
     
    21102054    main_menu();
    21112055
    2112   if(key_down('x') && (key_down(JK_ALT_L) || key_down(JK_ALT_R)) && confirm_quit()) finished = 1;
     2056  if((key_down('x') || key_down(JK_F4))
     2057      && (key_down(JK_ALT_L) || key_down(JK_ALT_R))
     2058      && confirm_quit())
     2059    finished = true;
    21132060}
    21142061
    21152062extern void *current_demo;
    21162063
    2117 game::~game()
     2064Game::~Game()
    21182065{
    21192066  current_demo = NULL;
     
    21962143
    21972144
    2198 void game::draw(int scene_mode)
     2145void Game::draw(int scene_mode)
    21992146{
    22002147    screen->add_dirty(0, 0, xres, yres);
    2201 //    image *bt = cache.img(border_tile);
    2202 //    int tw = bt->width(), th = bt->height();
    2203   screen->clear();
    2204 //  for(y = 0; y < yt; y++, dy += th)
    2205 //    for(x = 0, dx = 0; x < xt; x++, dx += tw)
    2206 //      bt->put_image(screen, dx, dy);
     2148
     2149    screen->clear();
    22072150
    22082151    if(scene_mode)
     
    24662409}
    24672410
    2468 #if(defined(__APPLE__) && !defined(__MACH__))
    2469 extern int PixMult;
    2470 #if 1
    2471 char cmdline[256];
    2472 #elif 1
    2473 char cmdline[] = "";
    2474 #elif 1
    2475 char cmdline[] = "abuse -server -a deathmat";
    2476 #else
    2477 char cmdline[] = "abuse -net 193.246.40.9";
    2478 #endif
    2479 char delims[] = " ";
    2480 char *tmp_argv[255];
    2481 
    2482 void GetArgs(int &argc, char **(&argv))
    2483 {
    2484     char *s;
    2485 
    2486     printf("Usage:\n"
    2487                     "  abuse [-options]\n\n"
    2488                     "  Options:\n"
    2489                     "    -server -a deathmat        become a server for deathmatch game\n"
    2490                     "    -net <dotted ip address>   connect to a server\n\n"
    2491                     "Options for mac:\n"
    2492                     "  Hold down <control> for single pixel mode\n"
    2493                     "  Hold down <option> for edit mode\n"
    2494                     "  Hold down <left shift> for double size mode\n\n"
    2495                     "If started with no command line options, networking will attempt\n"
    2496                     "  to search the local network for servers\n\n"
    2497 );
    2498     printf("Enter command line:\n");
    2499     gets(cmdline);
    2500 
    2501     argc = 0;
    2502     argv = tmp_argv;
    2503     s = strtok(cmdline, delims);
    2504     while(s)
    2505     {
    2506         argv[argc] = s;
    2507         argc++;
    2508         s = strtok(0, delims);
    2509     }
    2510     argv[argc] = 0;
    2511 }
    2512 
    2513 #endif
    2514 
    2515 int main(int argc, char **argv)
    2516 {
    2517 #if(defined(__APPLE__) && !defined(__MACH__))
    2518     GetArgs(argc, argv);
    2519 #endif
    2520 
     2411int main(int argc, char *argv[])
     2412{
    25212413    start_argc = argc;
    25222414    start_argv = argv;
     
    26302522        dev_init(argc, argv);
    26312523
    2632         game *g = new game(argc, argv);
     2524        Game *g = new Game(argc, argv);
    26332525
    26342526        dev_cont = new dev_controll();
     
    27822674
    27832675    base->packet.packet_reset();
    2784     mem_report("end.mem");
     2676//    mem_report("end.mem");
    27852677  } while(main_net_cfg && main_net_cfg->restart_state());
    27862678
  • abuse/trunk/src/game.hpp

    r124 r127  
    5050
    5151#define tile_type unsigned short
    52 class game;
    53 extern game *the_game;
     52class Game;
     53extern Game *the_game;
    5454extern int dev;
    5555extern int morph_sel_frame_color;
     
    6363extern FILE *open_FILE(char const *filename, char const *mode);
    6464
    65 class game
     65class Game
    6666{
     67private:
    6768  JCFont *fnt;
    68   int finished;
     69  bool finished;
    6970  int bg_top,fg_top;                         // in the fg/bg window which tile is at the top?
    7071  int bright_color,med_color,dark_color,     // for boundaries and windows, etc
     
    9091  int state,zoom;
    9192
     93  Game(int argc, char **argv);
     94  ~Game();
    9295
    93   game(int argc, char **argv);
    9496  void step();
    9597  void show_help(char const *st);
     
    155157  void request_level_load(char *name);
    156158  void request_end();
    157   ~game();
    158159} ;
    159160
Note: See TracChangeset for help on using the changeset viewer.