Changeset 124


Ignore:
Timestamp:
Mar 18, 2008, 9:36:56 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • Get rid of ugly tabs and trailing spaces everywhere.
Location:
abuse/trunk/src
Files:
212 edited

Legend:

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

    r56 r124  
    1313#include "chars.hpp"
    1414
    15 /*int abil[TOTAL_OBJECTS*TOTAL_ABILITIES]= { 
     15/*int abil[TOTAL_OBJECTS*TOTAL_ABILITIES]= {
    1616/                 hp starta stopa jumpxv  jumpyv crouch_tops run_tops jmp_tops wlk_tops    /
    1717/ human    /     50,     3,    4,    8,     -24,     3,        6,      8,        4,
    18 / iguana   /     4,      3,    4,    10,     -34,    0,        8,      10,       6, 
     18/ iguana   /     4,      3,    4,    10,     -34,    0,        8,      10,       6,
    1919/ who      /     2,      2,    4,    20,      0,     0,        18,      20,      18,
    2020
     
    4141
    4242long abil_def[TOTAL_ABILITIES]=
    43    {6,   3,     4,    2,    -16,   10,       6,         0,         
     43   {6,   3,     4,    2,    -16,   10,       6,         0,
    4444/* hp starta stopa jumpxv  jumpyv run_tops jmp_tops blood_type */
    45    
     45
    4646/* push_xrange wlk_tops */
    4747      0,            6 };
  • abuse/trunk/src/ability.hpp

    r57 r124  
    1212
    1313enum ability
    14 {       start_hp,
    15         start_accel,
    16         stop_accel,
     14{    start_hp,
     15    start_accel,
     16    stop_accel,
    1717        jump_xvel,
    18         jump_yvel,
    19         run_top_speed,
    20         jump_top_speed,
     18    jump_yvel,
     19    run_top_speed,
     20    jump_top_speed,
    2121
    22         tint_color,
    23         push_xrange,
    24         walk_top_speed                  // keep as last entry!
     22    tint_color,
     23    push_xrange,
     24    walk_top_speed                  // keep as last entry!
    2525} ;
    2626
  • abuse/trunk/src/ant.cpp

    r123 r124  
    2424
    2525enum {  ANT_need_to_dodge,     // ant vars
    26         ANT_no_see_time,
    27         ANT_hide_flag };
     26    ANT_no_see_time,
     27    ANT_hide_flag };
    2828
    2929int can_see(game_object *o, int32_t x1, int32_t y1, int32_t x2, int32_t y2)
     
    4444  {
    4545    if (o->lvars[ANT_no_see_time]==0 || o->lvars[ANT_no_see_time]>20)
    46       the_game->play_sound(S_ASCREAM_SND,127,o->x,o->y);     
     46      the_game->play_sound(S_ASCREAM_SND,127,o->x,o->y);
    4747    o->lvars[ANT_no_see_time]=1;
    4848  } else o->lvars[ANT_no_see_time]++;
     
    6969      if (!can_see(o,o->x,o->y,o->x,o->y-120))   // is there a roof above?
    7070      {
    71         o->set_yvel(-17);
    72         o->set_xvel(0);
    73         o->set_aistate(ANT_JUMP_ROOF);
    74         ant_ai();
     71    o->set_yvel(-17);
     72    o->set_xvel(0);
     73    o->set_aistate(ANT_JUMP_ROOF);
     74    ant_ai();
    7575      } else
    7676      {
    77         o->set_yvel(-12);
    78         if (o->direction>0)
    79           o->set_xvel(22);
    80         else o->set_xvel(-22);
    81         o->set_aistate(ANT_JUMP);
     77    o->set_yvel(-12);
     78    if (o->direction>0)
     79      o->set_xvel(22);
     80    else o->set_xvel(-22);
     81    o->set_aistate(ANT_JUMP);
    8282      }
    8383    }
     
    9999
    100100static int can_hit_player(game_object *o, game_object *b)
    101 { 
     101{
    102102  return can_see(o,o->x+(o->direction>0?15:-15),o->y-15,b->x,b->y-15);
    103103}
     
    158158      if (o->otype!=S_HIDDEN_ANT)
    159159      {
    160         o->change_type(S_HIDDEN_ANT);      // switch types so noone hurts us.
    161         o->set_state(stopped);
    162         o->set_aistate(ANT_HIDING);
     160    o->change_type(S_HIDDEN_ANT);      // switch types so noone hurts us.
     161    o->set_state(stopped);
     162    o->set_aistate(ANT_HIDING);
    163163      }
    164164
     
    166166      if (o->total_objects()==0)
    167167      {
    168         if (player_list->next)
    169           b=current_level->attacker(current_object);
    170         else b=player_list->focus;
    171         if (abs(b->x-o->x)<130 && (o->y<b->y))
    172           fall=1;
    173       }     
     168    if (player_list->next)
     169      b=current_level->attacker(current_object);
     170    else b=player_list->focus;
     171    if (abs(b->x-o->x)<130 && (o->y<b->y))
     172      fall=1;
     173      }
    174174      else if (o->get_object(0)->aistate()!=0)
    175175        fall=1;
    176      
     176
    177177      if (fall)
    178178      {
    179         o->change_type(S_ANT_ROOF);
    180         o->set_state((character_state)S_falling);
    181         o->set_aistate(ANT_FALL_DOWN);
    182         o->set_targetable(1);
     179    o->change_type(S_ANT_ROOF);
     180    o->set_state((character_state)S_falling);
     181    o->set_aistate(ANT_FALL_DOWN);
     182    o->set_targetable(1);
    183183      } else o->set_targetable(0);
    184184    } break;
     
    191191      else
    192192      {
    193         o->set_state((character_state)S_hanging);
    194         if (o->total_objects())
    195         {
    196           if (o->get_object(0)->aistate()!=0)
    197           fall=1;
    198         } else
    199         {
    200           if (player_list->next)
    201             b=current_level->attacker(current_object);
    202           else b=player_list->focus;
    203           if (abs(b->x-o->x)<130 && (o->y<b->y))
    204           fall=1;
    205         }
    206         if (fall)
    207         {
    208           o->set_state((character_state)S_fall_start);
    209           o->set_aistate(ANT_FALL_DOWN);
    210           o->set_targetable(1);
    211         } else o->set_targetable(0);
    212       }
    213      
     193    o->set_state((character_state)S_hanging);
     194    if (o->total_objects())
     195    {
     196      if (o->get_object(0)->aistate()!=0)
     197      fall=1;
     198    } else
     199    {
     200      if (player_list->next)
     201        b=current_level->attacker(current_object);
     202      else b=player_list->focus;
     203      if (abs(b->x-o->x)<130 && (o->y<b->y))
     204      fall=1;
     205    }
     206    if (fall)
     207    {
     208      o->set_state((character_state)S_fall_start);
     209      o->set_aistate(ANT_FALL_DOWN);
     210      o->set_targetable(1);
     211    } else o->set_targetable(0);
     212      }
     213
    214214    } break;
    215215    case ANT_FALL_DOWN :
    216216    {
    217217      o->set_state((character_state)S_falling);
    218        
     218
    219219      if (player_list->next)
    220220      b=current_level->attacker(current_object);
    221221      else b=player_list->focus;
    222      
     222
    223223      scream_check(o,b);
    224224      int ret=o->mover(0,0,0);
    225225      if ((ret&BLOCKED_DOWN) || !can_see(o,o->x,o->y,o->x,o->y+1))
    226226      {
    227         o->set_state((character_state)S_landing);
    228         the_game->play_sound(S_ALAND_SND,127,o->x,o->y);
    229         o->set_aistate(ANT_LANDING);
     227    o->set_state((character_state)S_landing);
     228    the_game->play_sound(S_ALAND_SND,127,o->x,o->y);
     229    o->set_aistate(ANT_LANDING);
    230230      }
    231231    } break;
     
    234234      if (!o->next_picture())
    235235      {
    236         int32_t xv=0,yv=2;
    237         o->try_move(o->x,o->y,xv,yv,1);
    238         if (yv!=0)
    239         {
    240           o->set_gravity(1);
    241           o->set_aistate(ANT_FALL_DOWN);
    242         }
    243         else
    244         {
    245           o->set_state(stopped);
    246           o->set_aistate(ANT_RUNNING);
    247           return (void *)ant_ai;
    248         }
     236    int32_t xv=0,yv=2;
     237    o->try_move(o->x,o->y,xv,yv,1);
     238    if (yv!=0)
     239    {
     240      o->set_gravity(1);
     241      o->set_aistate(ANT_FALL_DOWN);
     242    }
     243    else
     244    {
     245      o->set_state(stopped);
     246      o->set_aistate(ANT_RUNNING);
     247      return (void *)ant_ai;
     248    }
    249249      }
    250250    } break;
     
    255255      else b=player_list->focus;
    256256      scream_check(o,b);
    257      
    258      
    259       if ((jrand()%16)==0) 
     257
     258
     259      if ((jrand()%16)==0)
    260260      o->lvars[ANT_need_to_dodge]=1;
    261261      if (!ant_dodge(o))
    262262      {
    263         if ((o->x>b->x && o->direction==-1) || (o->x<b->x && o->direction==1))
    264         {
    265           o->next_picture();
    266           if ((jrand()%4)==0 && abs(o->x-b->x)<180 && abs(o->y-b->y)<100 && can_hit_player(o,b))
    267           {
    268             o->set_state((character_state)S_weapon_fire);
    269             o->set_aistate(ANT_FIRE);
    270           } else if (abs(o->x-b->x)<100 && abs(o->y-b->y)<10 && (jrand()%4)==0)
    271             o->set_aistate(ANT_POUNCE_WAIT);
    272           else if (abs(o->x-b->x)>140 && !ant_congestion(o))
    273             o->set_aistate(ANT_JUMP);
    274           else
    275           {
    276             int32_t xm=o->direction>0 ? get_ability(o->otype,run_top_speed) : -get_ability(o->otype,run_top_speed);
    277             int32_t ym=0,new_xm=xm;
    278             if (o->state!=running) o->set_state(running);
    279 
    280             o->try_move(o->x,o->y,new_xm,ym,3);
    281             if (new_xm!=xm)    // blocked, see if we can climb ramp
    282             {
    283               new_xm=xm;
    284               ym=-abs(xm);
    285               o->try_move(o->x,o->y,new_xm,ym,3);
    286               if (new_xm==xm)
    287               {
    288                 o->x+=new_xm;
    289                 o->y+=ym;
    290                 new_xm=0;
    291                 ym=abs(xm);      // now get back on the ground
    292                 o->try_move(o->x,o->y,new_xm,ym,3);
    293                 o->x+=new_xm;
    294                 o->y+=ym;
    295               } else
    296               {
    297                 o->direction=0-o->direction;
    298                 o->set_aistate(ANT_JUMP);
    299               }
    300             } else
    301               o->x+=new_xm;
    302             new_xm=0;
    303             ym=10;       // see if we should fall
    304             o->try_move(o->x,o->y,new_xm,ym,3);
    305             if (ym==10)
    306               o->set_aistate(ANT_FALL_DOWN);
    307             else o->y+=ym;
    308           }
    309         } else
    310         {
    311           o->direction=o->x>b->x ? -1 : 1;
    312           o->set_aistate(ANT_LANDING);
    313         }
    314       }
    315     } break;
    316    
     263    if ((o->x>b->x && o->direction==-1) || (o->x<b->x && o->direction==1))
     264    {
     265      o->next_picture();
     266      if ((jrand()%4)==0 && abs(o->x-b->x)<180 && abs(o->y-b->y)<100 && can_hit_player(o,b))
     267      {
     268        o->set_state((character_state)S_weapon_fire);
     269        o->set_aistate(ANT_FIRE);
     270      } else if (abs(o->x-b->x)<100 && abs(o->y-b->y)<10 && (jrand()%4)==0)
     271        o->set_aistate(ANT_POUNCE_WAIT);
     272      else if (abs(o->x-b->x)>140 && !ant_congestion(o))
     273        o->set_aistate(ANT_JUMP);
     274      else
     275      {
     276        int32_t xm=o->direction>0 ? get_ability(o->otype,run_top_speed) : -get_ability(o->otype,run_top_speed);
     277        int32_t ym=0,new_xm=xm;
     278        if (o->state!=running) o->set_state(running);
     279
     280        o->try_move(o->x,o->y,new_xm,ym,3);
     281        if (new_xm!=xm)    // blocked, see if we can climb ramp
     282        {
     283          new_xm=xm;
     284          ym=-abs(xm);
     285          o->try_move(o->x,o->y,new_xm,ym,3);
     286          if (new_xm==xm)
     287          {
     288        o->x+=new_xm;
     289        o->y+=ym;
     290        new_xm=0;
     291        ym=abs(xm);      // now get back on the ground
     292        o->try_move(o->x,o->y,new_xm,ym,3);
     293        o->x+=new_xm;
     294        o->y+=ym;
     295          } else
     296          {
     297        o->direction=0-o->direction;
     298        o->set_aistate(ANT_JUMP);
     299          }
     300        } else
     301          o->x+=new_xm;
     302        new_xm=0;
     303        ym=10;       // see if we should fall
     304        o->try_move(o->x,o->y,new_xm,ym,3);
     305        if (ym==10)
     306          o->set_aistate(ANT_FALL_DOWN);
     307        else o->y+=ym;
     308      }
     309    } else
     310    {
     311      o->direction=o->x>b->x ? -1 : 1;
     312      o->set_aistate(ANT_LANDING);
     313    }
     314      }
     315    } break;
     316
    317317    case ANT_POUNCE_WAIT :
    318318    {
    319319      if (!ant_dodge(o))
    320320      {
    321         o->set_state((character_state)S_pounce_wait);
    322         if (o->aistate_time()>alien_wait_time())
    323         {
    324           the_game->play_sound(S_ASLASH_SND,127,o->x,o->y);
    325           o->set_state(stopped);
    326           o->set_aistate(ANT_JUMP);
    327         }
     321    o->set_state((character_state)S_pounce_wait);
     322    if (o->aistate_time()>alien_wait_time())
     323    {
     324      the_game->play_sound(S_ASLASH_SND,127,o->x,o->y);
     325      o->set_state(stopped);
     326      o->set_aistate(ANT_JUMP);
     327    }
    328328      }
    329329    } break;
     
    333333      o->lvars[ANT_need_to_dodge]=0;
    334334      if (o->move(o->direction,-1,0)&BLOCKED_DOWN)
    335       o->set_aistate(ANT_RUNNING);     
     335      o->set_aistate(ANT_RUNNING);
    336336    } break;
    337337    case ANT_FIRE :
     
    339339      if (!ant_dodge(o))
    340340      {
    341         if (o->state==S_fire_wait)
    342         {
    343           if (!o->next_picture() || symbol_value(l_difficulty)==l_extreme)
    344           {
    345             if (player_list->next)
    346             b=current_level->attacker(current_object);
    347             else b=player_list->focus;
    348             fire_at_player(o,b);
    349             o->set_state(stopped);
    350             o->set_aistate(ANT_RUNNING);
    351           }
    352         } else o->set_state((character_state)S_fire_wait);
     341    if (o->state==S_fire_wait)
     342    {
     343      if (!o->next_picture() || symbol_value(l_difficulty)==l_extreme)
     344      {
     345        if (player_list->next)
     346        b=current_level->attacker(current_object);
     347        else b=player_list->focus;
     348        fire_at_player(o,b);
     349        o->set_state(stopped);
     350        o->set_aistate(ANT_RUNNING);
     351      }
     352    } else o->set_state((character_state)S_fire_wait);
    353353      }
    354354    } break;
     
    365365      if (yv!=o->yvel())
    366366      {
    367         if (o->yvel()>0)
    368         {
    369           o->set_state(stopped);
    370           o->set_aistate(ANT_RUNNING);
    371         } else
    372         {
    373           o->set_state((character_state)S_top_walk);
    374           o->set_aistate(ANT_ROOF_WALK);
    375         }
    376         o->set_yvel(0);
     367    if (o->yvel()>0)
     368    {
     369      o->set_state(stopped);
     370      o->set_aistate(ANT_RUNNING);
     371    } else
     372    {
     373      o->set_state((character_state)S_top_walk);
     374      o->set_aistate(ANT_ROOF_WALK);
     375    }
     376    o->set_yvel(0);
    377377      }
    378378    } break;
     
    382382      b=current_level->attacker(current_object);
    383383      else b=player_list->focus;
    384       scream_check(o,b);     
     384      scream_check(o,b);
    385385      if (((jrand()%8)==0 && abs(o->x-b->x)<10 && o->y<b->y) ||
    386           o->lvars[ANT_need_to_dodge]==1)
    387       {
    388         o->set_gravity(1);
    389         o->set_state(run_jump);
    390         o->set_aistate(ANT_JUMP);
    391         ant_ai();
     386      o->lvars[ANT_need_to_dodge]==1)
     387      {
     388    o->set_gravity(1);
     389    o->set_state(run_jump);
     390    o->set_aistate(ANT_JUMP);
     391    ant_ai();
    392392      }
    393393      else
    394394      {
    395         if ((o->x>b->x && o->direction>0) || (o->x<b->x && o->direction<0))
    396         o->direction=-o->direction;
    397         else if (abs(o->x-b->x)<120 && (jrand()%4)==0)
    398         {
    399           o->set_state((character_state)S_ceil_fire);
    400           o->set_aistate(ANT_CEIL_SHOOT);
    401           ant_ai();
    402         } else
    403         {
    404           int speed=o->direction>0 ? get_ability(o->otype,run_top_speed) :
    405                     -get_ability(o->otype,run_top_speed);
    406           if (can_see(o,o->x,o->y-31,o->x+speed,o->y-31) &&
    407               !can_see(o,o->x+speed,o->y-31,o->x+speed,o->y-32))
    408           {
    409             o->x+=speed;
    410             if (!o->next_picture()) o->set_state((character_state)S_top_walk);
    411            
    412           } else o->set_aistate(ANT_FALL_DOWN);
    413         }
     395    if ((o->x>b->x && o->direction>0) || (o->x<b->x && o->direction<0))
     396    o->direction=-o->direction;
     397    else if (abs(o->x-b->x)<120 && (jrand()%4)==0)
     398    {
     399      o->set_state((character_state)S_ceil_fire);
     400      o->set_aistate(ANT_CEIL_SHOOT);
     401      ant_ai();
     402    } else
     403    {
     404      int speed=o->direction>0 ? get_ability(o->otype,run_top_speed) :
     405                -get_ability(o->otype,run_top_speed);
     406      if (can_see(o,o->x,o->y-31,o->x+speed,o->y-31) &&
     407          !can_see(o,o->x+speed,o->y-31,o->x+speed,o->y-32))
     408      {
     409        o->x+=speed;
     410        if (!o->next_picture()) o->set_state((character_state)S_top_walk);
     411   
     412      } else o->set_aistate(ANT_FALL_DOWN);
     413    }
    414414      }
    415415    } break;
     
    418418      if (!o->next_picture())
    419419      {
    420         if (player_list->next)
    421           b=current_level->attacker(current_object);
    422         else b=player_list->focus;
    423         fire_at_player(o,b);
    424         o->set_state((character_state)S_top_walk);
    425         o->set_aistate(ANT_ROOF_WALK);
    426       }
    427     } break;
    428   }
    429  
    430  
    431  
     420    if (player_list->next)
     421      b=current_level->attacker(current_object);
     422    else b=player_list->focus;
     423    fire_at_player(o,b);
     424    o->set_state((character_state)S_top_walk);
     425    o->set_aistate(ANT_ROOF_WALK);
     426      }
     427    } break;
     428  }
     429
     430
     431
    432432  return true_symbol;
    433433}
     
    457457    char dig2=name[strlen(name)-strlen(".spe")-1];
    458458
    459    
     459
    460460    char msg[50];
    461461
     
    468468    } else sprintf(msg,"%s : %s",symbol_str("lev_complete"),current_level->original_name());
    469469
    470     int w=wm->font()->width()*strlen(msg),h=wm->font()->height();   
     470    int w=wm->font()->width()*strlen(msg),h=wm->font()->height();
    471471    int x=(x1+x2)/2-w/2,y=(y1+y2)/2-h/2;
    472472    screen->bar(x-10,y-10,x+w+10,y+h+10,wm->bright_color());
    473473    screen->bar(x-9,y-9,x+w+9,y+h+9,wm->medium_color());
    474474
    475     wm->font()->put_string(screen,x+1,y+1,msg,wm->dark_color());   
     475    wm->font()->put_string(screen,x+1,y+1,msg,wm->dark_color());
    476476    wm->font()->put_string(screen,x,y,msg,wm->bright_color());
    477477    wm->flush_screen();
  • abuse/trunk/src/automap.cpp

    r123 r124  
    1919  if (!automap_window) return ;
    2020  image *screen=automap_window->screen;
    21  
     21
    2222  long sx,ex,sy,ey,x,y,window_xstart,window_ystart,
    2323                       window_xend,window_yend,centerx,centery,
    2424                       draw_xstart,draw_ystart,
    2525                       i,j;
    26  
     26
    2727  x=the_game->first_view->x_center();
    2828  y=the_game->first_view->y_center();
    2929
    30  
    31   window_xstart=automap_window->x1();       
     30
     31  window_xstart=automap_window->x1();
    3232  window_ystart=automap_window->y1();
    33   window_xend=automap_window->x2();       
     33  window_xend=automap_window->x2();
    3434  window_yend=automap_window->y2();
    3535  centerx=(window_xstart+window_xend)/2;
    3636  centery=(window_ystart+window_yend)/2;
    37    
    38   sx=x/f_wid-w/2;                // start drawing with this foretile 
     37
     38  sx=x/f_wid-w/2;                // start drawing with this foretile
    3939  sy=y/f_hi-h/2;
    40   ex=sx+w; 
    41   ey=sy+h; 
     40  ex=sx+w;
     41  ey=sy+h;
    4242
    4343  if (sx<0)                       // does the map scroll past the left side ?
    44   { sx=0;                         // yes, start drawing at 0 
     44  { sx=0;                         // yes, start drawing at 0
    4545    draw_xstart=centerx-(x*AUTOTILE_WIDTH/f_wid);
    4646  }
    4747  else
    4848    draw_xstart=centerx-(x*AUTOTILE_WIDTH/f_wid-sx*AUTOTILE_WIDTH);
    49                            
    50   if (sy<0) 
    51   { 
    52     sy=0;   
     49
     50  if (sy<0)
     51  {
     52    sy=0;
    5353    draw_ystart=centery-(y*AUTOTILE_HEIGHT/f_hi);
    5454  }
     
    5757
    5858  // if view position hasn't changed, only update the binking dot and return
    59   if (draw_xstart==old_dx && draw_ystart==old_dy) 
     59  if (draw_xstart==old_dx && draw_ystart==old_dy)
    6060  {
    6161   automap_window->screen->lock();
     
    6363    if ((tick++)&4)
    6464      automap_window->screen->putpixel(centerx,centery,255);
    65     else 
     65    else
    6666      automap_window->screen->putpixel(centerx,centery,27);
    6767   automap_window->screen->unlock();
    68     return ;   
     68    return ;
    6969  }
    7070
    7171  old_dx=draw_xstart;
    72   old_dy=draw_ystart; 
    73 
    74 
    75   if (ex>=cur_lev->foreground_width()) 
     72  old_dy=draw_ystart;
     73
     74
     75  if (ex>=cur_lev->foreground_width())
    7676    ex=cur_lev->foreground_width()-1;
    7777  if (ey>=cur_lev->foreground_height())
     
    8181  screen->bar(window_xstart,window_ystart,draw_xstart,window_yend,0);
    8282  screen->bar(window_xstart,window_ystart,window_xend,draw_ystart,0);
    83  
     83
    8484
    8585/*  if (ex>=cur_lev->foreground_width())
    86   {   
     86  {
    8787    draw_xend=center
    8888    ex=foreground_width()-1; */
    8989
    90    
     90
    9191
    9292
     
    9595  screen->add_dirty(window_xstart,window_ystart,window_xend,window_yend);
    9696
    97  
     97
    9898
    9999
     
    116116
    117117
    118    
     118
    119119  unsigned short *fgline;
    120120  for (j=draw_ystart,y=sy;y<=ey;j+=AUTOTILE_HEIGHT,y++)
    121   {   
     121  {
    122122    fgline=cur_lev->get_fgline(y)+sx;
    123123    for (i=draw_xstart,x=sx;x<=ex;i+=AUTOTILE_WIDTH,x++,fgline++)
     
    125125      if ((*fgline)&0x8000)
    126126      {
    127         int id=foretiles[ (*fgline)&0x7fff];
    128         if (id>=0)
     127    int id=foretiles[ (*fgline)&0x7fff];
     128    if (id>=0)
    129129          cache.foret(id)->micro_image->put_image(screen,i,j,0);
    130         else
     130    else
    131131          cache.foret(foretiles[0])->micro_image->put_image(screen,i,j,0);
    132132      }
     
    137137    }
    138138
    139   } 
     139  }
    140140
    141141
     
    145145  if ((tick++)&4)
    146146    automap_window->screen->putpixel(centerx,centery,255);
    147   else 
     147  else
    148148    automap_window->screen->putpixel(centerx,centery,27);
    149149  automap_window->screen->unlock();
    150150
    151151  // set the clip back to full window size because soemthing else could mess with the area
    152   automap_window->screen->set_clip(0,0,screen->width()-1,screen->height()-1); 
     152  automap_window->screen->set_clip(0,0,screen->width()-1,screen->height()-1);
    153153}
    154154
     
    157157{
    158158    if (automap_window)
    159     {   
     159    {
    160160        wm->close_window(automap_window);
    161161        automap_window = NULL;
    162162    }
    163163    else
    164     {   
     164    {
    165165        old_dx = -1000; // make sure the map gets drawn the first time
    166166        old_dy = -1000;
     
    169169                                        h * AUTOTILE_HEIGHT, NULL, "Map");
    170170        automap_window->screen->bar(17, 1, 17 + 8 * 6 + 3, 6,
    171                                     wm->medium_color());   
     171                                    wm->medium_color());
    172172        wm->font()->put_string(automap_window->screen, 20, 2, "Automap",
    173173                               wm->dark_color());
    174         draw();   
    175     } 
     174        draw();
     175    }
    176176}
    177177
     
    181181  w=width;
    182182  h=height;
    183  
    184   tick=0; 
     183
     184  tick=0;
    185185  cur_lev=l;
    186186  automap_window=NULL;
    187   toggle_window();   
     187  toggle_window();
    188188}
    189189
     
    198198      case EV_KEY :
    199199        switch(ev.key)
    200         {
    201           case 'A' :   
    202           case 'a' :
    203             toggle_window();
    204             break;         
    205         } 
    206         break; 
     200    {
     201      case 'A' :   
     202      case 'a' :
     203          toggle_window();
     204        break;   
     205    }
     206    break;   
    207207      case EV_CLOSE_WINDOW :
    208208        wm->close_window(automap_window);
    209         automap_window=NULL;
    210         break;              
    211     }   
    212   }     
    213 }
    214 
    215 
    216 
    217 
    218 
    219 
    220 
     209    automap_window=NULL;
     210    break;   
     211    }
     212  }
     213}
     214
     215
     216
     217
     218
     219
     220
  • abuse/trunk/src/automap.hpp

    r120 r124  
    1515
    1616class automap
    17 { 
     17{
    1818  Jwindow *automap_window;
    1919  level *cur_lev;
  • abuse/trunk/src/cache.cpp

    r123 r124  
    3434
    3535#define touch(x) { (x)->last_access=last_access++; \
    36                    if ((x)->last_access<0) { normalize(); (x)->last_access=1; } }
     36           if ((x)->last_access<0) { normalize(); (x)->last_access=1; } }
    3737
    3838CrcManager crc_manager;
     
    6262      if (!fp->open_failure())
    6363      {
    64         set_crc(i,crc_file(fp));
    65         total++;
     64    set_crc(i,crc_file(fp));
     65    total++;
    6666      }
    6767      delete fp;
     
    7575  {
    7676    delete fp;
    77     return 0; 
     77    return 0;
    7878  }
    7979
     
    9595  }
    9696  delete fp;
    97   return 1; 
     97  return 1;
    9898}
    9999
     
    119119    delete fp;
    120120  }
    121   return 1; 
     121  return 1;
    122122}
    123123
     
    137137}
    138138
    139 CrcedFile::CrcedFile(char const *name) 
    140 { 
     139CrcedFile::CrcedFile(char const *name)
     140{
    141141  filename=strcpy((char *)jmalloc(strlen(name)+1,"crc_file"),name);
    142142  crc_calculated=0;
     
    166166
    167167uint32_t CrcManager::get_crc(int32_t filenumber, int &failed)
    168 {   
     168{
    169169  CHECK(filenumber>=0 && filenumber<total_files);
    170   if (files[filenumber]->crc_calculated) 
     170  if (files[filenumber]->crc_calculated)
    171171  {
    172172    failed=0;
     
    210210  if (prof_data)
    211211    jfree(prof_data);
    212  
     212
    213213  prof_data=(int *)jmalloc(sizeof(int)*total,"cache profile");
    214214  memset(prof_data,0,sizeof(int)*total);
     
    262262      for (i=0;i<crc_manager.total_filenames();i++)
    263263      {
    264         int l=strlen(crc_manager.get_filename(i))+1;
     264    int l=strlen(crc_manager.get_filename(i))+1;
    265265        fp->write_uint8(l);
    266         fp->write(crc_manager.get_filename(i),l);
     266    fp->write(crc_manager.get_filename(i),l);
    267267      }
    268268
     
    274274      for (i=0;i<total;i++)
    275275      {
    276         int id=ordered_ids[i];
    277         if (list[id].last_access>0)       // don't save unaccessed counts     
    278         {
    279           fp->write_uint8(list[id].type);    // save type, if type changed on reload
    280                                             // don't cache in-> its a different refrence
    281           fp->write_uint16(list[id].file_number);
    282           fp->write_uint32(list[id].offset);
    283         }
    284       }     
     276    int id=ordered_ids[i];
     277        if (list[id].last_access>0)       // don't save unaccessed counts
     278    {
     279      fp->write_uint8(list[id].type);    // save type, if type changed on reload
     280                                        // don't cache in-> its a different refrence
     281      fp->write_uint16(list[id].file_number);
     282      fp->write_uint32(list[id].offset);
     283    }
     284      }
    285285    }
    286286
     
    330330    CacheItem *e=list+sarray[split];
    331331
    332     if (e->offset<offset)      // search to the right   
     332    if (e->offset<offset)      // search to the right
    333333      x1=split+1;
    334334    else if (e->offset>offset)
     
    356356  }
    357357  return 1;
    358  
     358
    359359}
    360360
     
    372372  {
    373373    if (!figures[type]->get_cflag(CFLAG_NEED_CACHE_IN))  // see if it's already marked
    374     {       
     374    {
    375375      figures[type]->set_cflag(CFLAG_NEED_CACHE_IN,1);
    376376      void *cache_fun=figures[type]->get_fun(OFUN_GET_CACHE_LIST);
     
    378378      if (cache_fun)
    379379      {
    380         int sp=current_space;
    381         current_space=PERM_SPACE;
    382 
    383         void *call_with=NULL;
    384         push_onto_list(new_lisp_number(type),call_with);
    385 
    386         void *CacheList=eval_function((lisp_symbol *)cache_fun,call_with);
    387         p_ref r1(CacheList);
    388 
    389         if (CacheList && lcar(CacheList))
    390         {
    391           void *obj_list=lcar(CacheList);
    392           while (obj_list)
    393           {
    394             int t=lnumber_value(CAR(obj_list));
    395             if (t<0 || t>=total_objects)
    396               lbreak("Get cache list returned a bad object number %d\n",t);
    397             else
    398               preload_cache_object(t);
    399             obj_list=CDR(obj_list);
    400           }
    401         }
    402         if (CacheList && lcdr(CacheList))
    403         {
    404           void *id_list=lcar(lcdr(CacheList));
    405           while (id_list)
    406           {
    407             int id=lnumber_value(CAR(id_list));
    408             if (id<0 || id>=total)
    409               lbreak("Get cache list returned a bad id number %d\n",id);
    410             else if (list[id].last_access<0)
    411               list[id].last_access=-2;
    412             else list[id].last_access=2;
    413 
    414             id_list=CDR(id_list);
    415           }
    416         }
    417         current_space=sp;
     380    int sp=current_space;
     381    current_space=PERM_SPACE;
     382
     383    void *call_with=NULL;
     384    push_onto_list(new_lisp_number(type),call_with);
     385
     386    void *CacheList=eval_function((lisp_symbol *)cache_fun,call_with);
     387    p_ref r1(CacheList);
     388
     389    if (CacheList && lcar(CacheList))
     390    {
     391      void *obj_list=lcar(CacheList);
     392      while (obj_list)
     393      {
     394        int t=lnumber_value(CAR(obj_list));
     395        if (t<0 || t>=total_objects)
     396          lbreak("Get cache list returned a bad object number %d\n",t);
     397        else
     398          preload_cache_object(t);
     399        obj_list=CDR(obj_list);
     400      }
     401    }
     402    if (CacheList && lcdr(CacheList))
     403    {
     404      void *id_list=lcar(lcdr(CacheList));
     405      while (id_list)
     406      {
     407        int id=lnumber_value(CAR(id_list));
     408        if (id<0 || id>=total)
     409          lbreak("Get cache list returned a bad id number %d\n",id);
     410        else if (list[id].last_access<0)
     411          list[id].last_access=-2;
     412        else list[id].last_access=2;
     413
     414        id_list=CDR(id_list);
     415      }
     416    }
     417    current_space=sp;
    418418
    419419      }
     
    443443      if (id>=0 && id<nforetiles)
    444444      {
    445         if (list[id].last_access<0)
     445    if (list[id].last_access<0)
    446446          list[id].last_access=-2;
    447         else list[id].last_access=2;     
    448       }
    449     }     
     447    else list[id].last_access=2;
     448      }
     449    }
    450450  }
    451451
     
    455455    bg_line=lev->get_bgline(j);
    456456    for (i=0;i<lev->background_width();i++,bg_line++)
    457     {   
     457    {
    458458      int id=backtiles[bgvalue(*bg_line)];
    459459      if (id>=0 && id<nbacktiles)
    460460      {
    461         if (list[id].last_access<0)
     461    if (list[id].last_access<0)
    462462          list[id].last_access=-2;
    463         else list[id].last_access=2;     
    464       }
    465     }     
     463    else list[id].last_access=2;
     464      }
     465    }
    466466  }
    467467
     
    491491      int tnames=0;
    492492      int *fnum_remap;    // remaps old filenumbers into current ones
    493      
     493
    494494      tnames=fp->read_uint16();
    495495      if (tnames)                     /// make sure there isn't bad info in the file
    496496      {
    497         fnum_remap=(int *)jmalloc(sizeof(int)*tnames,"pfname remap");
    498 
    499         int i;
    500         for (i=0;i<tnames;i++)
    501         {
    502           fp->read(name,fp->read_uint8());
    503           fnum_remap[i]=-1;                    // initialize the map to no-map
    504 
    505           int j;
    506           for (j=0;j<crc_manager.total_filenames();j++)
    507             if (!strcmp(crc_manager.get_filename(j),name))
    508               fnum_remap[i]=j;
    509         }
    510        
    511         uint32_t tsaved=fp->read_uint32();
    512 
    513 
    514         int *priority=(int *)jmalloc(tsaved*sizeof(int),"priorities");
    515         memset(priority,0xff,tsaved*sizeof(int));   // initialize to -1
    516         int tmatches=0;
    517 
    518         sorted_id_list=(int *)jmalloc(sizeof(int)*total,"sorted ids");
    519         for (j=0;j<total;j++) sorted_id_list[j]=j;
    520         qsort(sorted_id_list,total,sizeof(int),s_offset_compare);
    521 
    522         for (i=0;i<tsaved;i++)
    523         {
    524           uint8_t type=fp->read_uint8();
    525           short file_num=fp->read_uint16();
    526           if (file_num>=tnames)  // bad data?
    527             file_num=-1;
    528           else file_num=fnum_remap[file_num];
    529 
    530           uint32_t offset=fp->read_uint32();
    531 
    532           // search for a match
    533           j=search(sorted_id_list,file_num,offset);     
    534           if (j!=-1)
    535           {          
    536             if (list[j].last_access<0)  // if not loaded
    537               list[j].last_access=-2;      // mark as needing loading
    538             else list[j].last_access=2;   // mark as loaded and needing to stay that way
    539             priority[i]=j;
    540             tmatches++;
    541           }
    542         }
    543 
    544         jfree(sorted_id_list);            // was used for searching, no longer needed
    545 
    546         for (j=0;j<total;j++)
    547           if (list[j].last_access==0)
    548             unmalloc(list+j);             // free any cache entries that are not accessed at all in the level
    549 
    550 
    551         ful=0;
    552         int tcached=0;
    553         for (j=0;j<total;j++)    // now load all of the objects until full
    554         {
    555 //        stat_man->update(j*70/total+25);
    556           if (list[j].file_number>=0 && list[j].last_access==-2)
    557           {
    558             list[j].last_access=-1;
    559             if (!ful)
    560             {
    561               switch (list[j].type)
    562               {
    563                 case SPEC_BACKTILE : backt(j); break;
    564                 case SPEC_FORETILE : foret(j); break;
    565                 case SPEC_CHARACTER :
    566                 case SPEC_CHARACTER2 : fig(j); break;
    567                 case SPEC_IMAGE : img(j); break;
    568                 case SPEC_PARTICLE : part(j); break;
    569                 case SPEC_EXTERN_SFX : sfx(j); break;
    570                 case SPEC_EXTERNAL_LCACHE : lblock(j); break;
    571                 case SPEC_PALETTE : ctint(j); break;
    572               }
    573               tcached++;
    574             }
    575           }
    576         }
    577         load_fail=0;
    578 //      if (full())
    579 //        dprintf("Cache filled while loading\n");
    580 
    581         if (tsaved>tmatches)
    582           tmatches=tsaved+1;
    583 
    584         last_access=tmatches+1;
    585         for (i=0;i<tsaved;i++)      // reorder the last access of each cache to reflect prioirties
    586         {
    587           if (priority[i]!=-1)
    588           {
    589             if (list[priority[i]].last_access!=-1)            // make sure this wasn't the last item
    590               list[priority[i]].last_access=tmatches--;
    591           }
    592         }
    593 
    594         jfree(priority);
    595         jfree(fnum_remap);
    596 
    597 
    598       }
    599     }   
     497    fnum_remap=(int *)jmalloc(sizeof(int)*tnames,"pfname remap");
     498
     499    int i;
     500    for (i=0;i<tnames;i++)
     501    {
     502      fp->read(name,fp->read_uint8());
     503      fnum_remap[i]=-1;                    // initialize the map to no-map
     504
     505      int j;
     506      for (j=0;j<crc_manager.total_filenames();j++)
     507        if (!strcmp(crc_manager.get_filename(j),name))
     508          fnum_remap[i]=j;
     509    }
     510   
     511    uint32_t tsaved=fp->read_uint32();
     512
     513
     514    int *priority=(int *)jmalloc(tsaved*sizeof(int),"priorities");
     515    memset(priority,0xff,tsaved*sizeof(int));   // initialize to -1
     516    int tmatches=0;
     517
     518    sorted_id_list=(int *)jmalloc(sizeof(int)*total,"sorted ids");
     519    for (j=0;j<total;j++) sorted_id_list[j]=j;
     520    qsort(sorted_id_list,total,sizeof(int),s_offset_compare);
     521
     522    for (i=0;i<tsaved;i++)
     523    {
     524      uint8_t type=fp->read_uint8();
     525      short file_num=fp->read_uint16();
     526      if (file_num>=tnames)  // bad data?
     527        file_num=-1;
     528      else file_num=fnum_remap[file_num];
     529
     530      uint32_t offset=fp->read_uint32();
     531
     532      // search for a match
     533      j=search(sorted_id_list,file_num,offset);   
     534      if (j!=-1)
     535      {   
     536        if (list[j].last_access<0)  // if not loaded
     537          list[j].last_access=-2;      // mark as needing loading
     538        else list[j].last_access=2;   // mark as loaded and needing to stay that way
     539        priority[i]=j;
     540        tmatches++;
     541      }
     542    }
     543
     544    jfree(sorted_id_list);            // was used for searching, no longer needed
     545
     546    for (j=0;j<total;j++)
     547      if (list[j].last_access==0)
     548        unmalloc(list+j);             // free any cache entries that are not accessed at all in the level
     549
     550
     551    ful=0;
     552    int tcached=0;
     553    for (j=0;j<total;j++)    // now load all of the objects until full
     554    {
     555//      stat_man->update(j*70/total+25);
     556      if (list[j].file_number>=0 && list[j].last_access==-2)
     557      {
     558        list[j].last_access=-1;
     559        if (!ful)
     560        {
     561          switch (list[j].type)
     562          {
     563        case SPEC_BACKTILE : backt(j); break;
     564        case SPEC_FORETILE : foret(j); break;
     565        case SPEC_CHARACTER :
     566        case SPEC_CHARACTER2 : fig(j); break;
     567        case SPEC_IMAGE : img(j); break;
     568        case SPEC_PARTICLE : part(j); break;
     569        case SPEC_EXTERN_SFX : sfx(j); break;
     570        case SPEC_EXTERNAL_LCACHE : lblock(j); break;
     571        case SPEC_PALETTE : ctint(j); break;
     572          }
     573          tcached++;
     574        }
     575      }
     576    }
     577    load_fail=0;
     578//    if (full())
     579//      dprintf("Cache filled while loading\n");
     580
     581    if (tsaved>tmatches)
     582      tmatches=tsaved+1;
     583
     584    last_access=tmatches+1;
     585    for (i=0;i<tsaved;i++)      // reorder the last access of each cache to reflect prioirties
     586    {
     587      if (priority[i]!=-1)
     588      {
     589        if (list[priority[i]].last_access!=-1)            // make sure this wasn't the last item
     590          list[priority[i]].last_access=tmatches--;
     591      }
     592    }
     593
     594    jfree(priority);
     595    jfree(fnum_remap);
     596
     597
     598      }
     599    }
    600600  }
    601601
     
    609609      if (list[j].file_number>=0 && list[j].last_access==-2)
    610610      {
    611         list[j].last_access=-1;
    612         if (!ful)
    613         {
    614           switch (list[j].type)
    615           {
    616             case SPEC_BACKTILE : backt(j); break;
    617             case SPEC_FORETILE : foret(j); break;
    618             case SPEC_CHARACTER :
    619             case SPEC_CHARACTER2 : fig(j); break;
    620             case SPEC_IMAGE : img(j); break;
    621             case SPEC_PARTICLE : part(j); break;
    622             case SPEC_EXTERN_SFX : sfx(j); break;
    623             case SPEC_EXTERNAL_LCACHE : lblock(j); break;
    624             case SPEC_PALETTE : ctint(j); break;
    625           }
    626         }
     611    list[j].last_access=-1;
     612    if (!ful)
     613    {
     614      switch (list[j].type)
     615      {
     616        case SPEC_BACKTILE : backt(j); break;
     617        case SPEC_FORETILE : foret(j); break;
     618        case SPEC_CHARACTER :
     619        case SPEC_CHARACTER2 : fig(j); break;
     620        case SPEC_IMAGE : img(j); break;
     621        case SPEC_PARTICLE : part(j); break;
     622        case SPEC_EXTERN_SFX : sfx(j); break;
     623        case SPEC_EXTERNAL_LCACHE : lblock(j); break;
     624        case SPEC_PALETTE : ctint(j); break;
     625      }
     626    }
    627627      }
    628628    }
     
    636636void CacheList::prof_poll_start()
    637637{
    638   poll_start_access=last_access; 
     638  poll_start_access=last_access;
    639639}
    640640
     
    659659    list[id].file_number=-1;
    660660  }
    661   else 
     661  else
    662662    printf("Error : trying to unregister free object\n");
    663663}
    664664
    665665static void cache_cleanup2()
    666 { unlink(lfname); 
     666{ unlink(lfname);
    667667}
    668668
    669669static void cache_cleanup(int ret, void *arg)
    670 { unlink(lfname); 
     670{ unlink(lfname);
    671671}
    672672
     
    674674{
    675675#ifdef WIN32
    676         char *prefix="c:\\";
     676    char *prefix="c:\\";
    677677#else
    678         char const *prefix = "/tmp/";     // for UNIX store lisp cache in tmp dir
    679         int flags = O_CREAT | O_RDWR;
     678    char const *prefix = "/tmp/";     // for UNIX store lisp cache in tmp dir
     679    int flags = O_CREAT | O_RDWR;
    680680#endif
    681681
    682         int cfail = 1, num = 0;
    683         do
    684         {
    685                 sprintf(lfname,"%slcache%02d.tmp",prefix,num);
     682    int cfail = 1, num = 0;
     683    do
     684    {
     685        sprintf(lfname,"%slcache%02d.tmp",prefix,num);
    686686
    687687#if defined( __APPLE__ )
    688                 unlink(lfname);
    689                 FILE *fp=fopen(lfname,"wb");
    690                 if (fp)
    691                 {
    692                         fclose(fp);
    693                         cfail=0;
    694                 }
     688        unlink(lfname);
     689        FILE *fp=fopen(lfname,"wb");
     690        if (fp)
     691        {
     692            fclose(fp);
     693            cfail=0;
     694        }
    695695#else
    696                 int fd=open(lfname,flags,S_IRWXU | S_IRWXG | S_IRWXO);     // can we get exclusive rights to this file?
    697                 if (fd<0) close(fd); else cfail=0;
     696        int fd=open(lfname,flags,S_IRWXU | S_IRWXG | S_IRWXO);     // can we get exclusive rights to this file?
     697        if (fd<0) close(fd); else cfail=0;
    698698#endif
    699699
    700                 if (cfail)
    701                         num++;
    702 
    703         } while (cfail && num<15);
    704 
    705         if (cfail)
    706         {
    707                 fprintf(stderr,"Error : Unable to open cache file for compiled code.\n"
    708                         "        Please delete all files named lcacheXX.tmp\n"
    709                         "        and make sure you have write permission to\n"
    710                         "        directory (%s)\n",prefix);
    711                 exit(0);
    712         }
    713         else
    714         {
    715                 exit_proc(cache_cleanup,cache_cleanup2);    // make sure this file gets deleted on exit..
    716         }
    717         lcache_number=-1;
     700        if (cfail)
     701            num++;
     702
     703    } while (cfail && num<15);
     704
     705    if (cfail)
     706    {
     707        fprintf(stderr,"Error : Unable to open cache file for compiled code.\n"
     708            "        Please delete all files named lcacheXX.tmp\n"
     709            "        and make sure you have write permission to\n"
     710            "        directory (%s)\n",prefix);
     711        exit(0);
     712    }
     713    else
     714    {
     715        exit_proc(cache_cleanup,cache_cleanup2);    // make sure this file gets deleted on exit..
     716    }
     717    lcache_number=-1;
    718718}
    719719
    720720CacheList::CacheList()
    721721{
    722   // start out with a decent sized cache buffer because it's going to get allocated anyway. 
    723   total=0; 
     722  // start out with a decent sized cache buffer because it's going to get allocated anyway.
     723  total=0;
    724724  list=NULL;
    725   last_registered=-1;   
    726   cache_file=fp=NULL; 
     725  last_registered=-1;
     726  cache_file=fp=NULL;
    727727  last_access=1;
    728728  used=ful=0;
     
    735735
    736736CacheList::~CacheList()
    737 { 
     737{
    738738}
    739739
     
    751751  {
    752752    delete cache_file;
    753     cache_file=NULL;   
    754   }
    755   unlink(lfname); 
     753    cache_file=NULL;
     754  }
     755  unlink(lfname);
    756756
    757757  if (prof_data)
     
    763763  total=0;                    // reinitalize
    764764  list=NULL;
    765   last_registered=-1;   
    766   cache_file=fp=NULL; 
    767   if (cache_read_file) 
     765  last_registered=-1;
     766  cache_file=fp=NULL;
     767  if (cache_read_file)
    768768  {
    769769    delete cache_read_file;
     
    784784  {
    785785    if (fp) delete fp;
    786     if (last_dir) delete last_dir; 
     786    if (last_dir) delete last_dir;
    787787    if (local_only)
    788788      fp=new jFILE(crc_manager.get_filename(i->file_number),"rb");
     
    820820
    821821  // see if we previously allocated an id, if so check the next spot in the array
    822   // otherwise we will have to scan the whole list for a free id and possible 
     822  // otherwise we will have to scan the whole list for a free id and possible
    823823  // grow the list.
    824824  if (last_registered+1<total && list[last_registered+1].file_number<0)
     
    841841      {
    842842        list[total+i].file_number=-1;         // mark new entries as new
    843         list[total+i].last_access=-1;
    844         list[total+i].data=NULL;
     843    list[total+i].last_access=-1;
     844    list[total+i].data=NULL;
    845845      }
    846846      id=total;
     
    857857
    858858int32_t CacheList::reg_lisp_block(Cell *block)
    859 { 
     859{
    860860  uint32_t s;
    861861  if (lcache_number==-1)
     
    868868      if (cache_read_file)
    869869      {
    870         delete cache_read_file;
    871         cache_read_file=NULL;
    872 
    873         cache_file=new jFILE(lfname,"ab");     
    874       } else cache_file=new jFILE(lfname,"wb");  // first time we opened
    875     }
    876     if (cache_file->open_failure()) 
    877     { 
     870    delete cache_read_file;
     871    cache_read_file=NULL;
     872
     873    cache_file=new jFILE(lfname,"ab");   
     874      } else cache_file=new jFILE(lfname,"wb");    // first time we opened
     875    }
     876    if (cache_file->open_failure())
     877    {
    878878      delete cache_file;
    879879      lprint(block);
     
    889889  ci->last_access=-1;
    890890  ci->type=SPEC_EXTERNAL_LCACHE;
    891   if (!can_cache_lisp()) 
     891  if (!can_cache_lisp())
    892892  {
    893893    ci->data=(void *)block;                // we can't cache it out so it must be in memory
    894894    return id;
    895   } 
     895  }
    896896  ci->data=NULL;                  // assume that it is in tmp memory, need to cache in on access
    897897  ci->offset=cache_file->tell();
     
    900900  cache_file->write_uint32(s);
    901901  write_level(cache_file,block);
    902   return id;   
     902  return id;
    903903}
    904904
    905905int32_t CacheList::reg_object(char const *filename, void *object, int type, int rm_dups)
    906 { 
     906{
    907907  char *name;
    908908  if (item_type(object)==L_CONS_CELL)      // see if we got a object with a filename included
     
    919919int32_t CacheList::reg(char const *filename, char const *name, int type, int rm_dups)
    920920{
    921         int id=alloc_id(),i,fn=crc_manager.get_filenumber(filename);
    922         CacheItem *ci=list+id;
    923         CHECK(id<total && list[id].file_number<0);
    924 
    925         if( type == SPEC_EXTERN_SFX ) // If a extern sound effect then just make sure it's there
    926         {
    927                 bFILE *check=open_file(filename,"rb");
    928                 if (check->open_failure())
    929                 {
    930                         delete check;
    931                         if( sound_avail )
    932                         {
    933                                 printf("Unable to open file '%s' for reading\n",filename);
    934                                 exit(0);
    935                         }
    936                         else
    937                         {
    938                                 // Sound is disabled, we don't really care if the sound file
    939                                 // is there or not, just pretend it's all ok.
    940                                 return id;
    941                         }
    942                 }
    943                 char buf[4];
    944                 check->read(buf,4);
    945                 delete check;
    946                 if (memcmp(buf,"RIFF",4))
    947                 {
    948                         printf("File %s is not a WAV file\n",filename);
    949                         exit(0);
    950                 }
    951                 ci->file_number=fn;
    952                 ci->last_access=-1;
    953                 ci->data=NULL;
    954                 ci->offset=0;
    955                 ci->type=type;
    956                 return id;
    957         }
    958 
    959         spec_directory *sd=sd_cache.get_spec_directory(filename);
    960 
    961         if (!sd)
    962         {
    963                 printf("Unable to open filename %s for requested item %s\n",filename,name);
    964                 exit(0);
    965         }
    966 
    967         spec_entry *se;
    968         if (type!=-1)
    969         {
    970                 se=sd->find(name,type);
    971                 if (!se) se=sd->find(name);
    972         }
    973         else se=sd->find(name);
    974 
    975 
    976         if (!se)
    977         {
    978                 printf("No such item %s in file %s\n",name,filename);
    979                 exit(0);
    980         }
    981         else if (type>=0 && (type!=se->type && ((type!=SPEC_CHARACTER2 && type!=SPEC_CHARACTER)  ||
    982                                                 (se->type!=SPEC_CHARACTER && se->type!=SPEC_CHARACTER2))))
    983         {
    984                 printf("Item %s of file %s should be type %s\n",name,filename,spec_types[type]);
    985                 exit(0);
    986         }
    987 
    988         if (rm_dups)
    989         {
    990                 for (i=0;i<total;i++)
    991                         if (list[i].file_number == fn && (unsigned)list[i].offset == se->offset)
    992                                 return i;
    993         }
    994 
    995         ci->file_number=fn;
    996         ci->last_access=-1;
    997         ci->data=NULL;
    998         ci->offset=se->offset;
    999         ci->type=se->type; 
    1000         return id; 
     921    int id=alloc_id(),i,fn=crc_manager.get_filenumber(filename);
     922    CacheItem *ci=list+id;
     923    CHECK(id<total && list[id].file_number<0);
     924
     925    if( type == SPEC_EXTERN_SFX ) // If a extern sound effect then just make sure it's there
     926    {
     927        bFILE *check=open_file(filename,"rb");
     928        if (check->open_failure())
     929        {
     930            delete check;
     931            if( sound_avail )
     932            {
     933                printf("Unable to open file '%s' for reading\n",filename);
     934                exit(0);
     935            }
     936            else
     937            {
     938                // Sound is disabled, we don't really care if the sound file
     939                // is there or not, just pretend it's all ok.
     940                return id;
     941            }
     942        }
     943        char buf[4];
     944        check->read(buf,4);
     945        delete check;
     946        if (memcmp(buf,"RIFF",4))
     947        {
     948            printf("File %s is not a WAV file\n",filename);
     949            exit(0);
     950        }
     951        ci->file_number=fn;
     952        ci->last_access=-1;
     953        ci->data=NULL;
     954        ci->offset=0;
     955        ci->type=type;
     956        return id;
     957    }
     958
     959    spec_directory *sd=sd_cache.get_spec_directory(filename);
     960
     961    if (!sd)
     962    {
     963        printf("Unable to open filename %s for requested item %s\n",filename,name);
     964        exit(0);
     965    }
     966
     967    spec_entry *se;
     968    if (type!=-1)
     969    {
     970        se=sd->find(name,type);
     971        if (!se) se=sd->find(name);
     972    }
     973    else se=sd->find(name);
     974
     975
     976    if (!se)
     977    {
     978        printf("No such item %s in file %s\n",name,filename);
     979        exit(0);
     980    }
     981    else if (type>=0 && (type!=se->type && ((type!=SPEC_CHARACTER2 && type!=SPEC_CHARACTER)  ||
     982                        (se->type!=SPEC_CHARACTER && se->type!=SPEC_CHARACTER2))))
     983    {
     984        printf("Item %s of file %s should be type %s\n",name,filename,spec_types[type]);
     985        exit(0);
     986    }
     987
     988    if (rm_dups)
     989    {
     990        for (i=0;i<total;i++)
     991            if (list[i].file_number == fn && (unsigned)list[i].offset == se->offset)
     992                return i;
     993    }
     994
     995    ci->file_number=fn;
     996    ci->last_access=-1;
     997    ci->data=NULL;
     998    ci->offset=se->offset;
     999    ci->type=se->type;
     1000    return id;
    10011001}
    10021002
     
    10221022  CONDITION(id<total && id>=0 && me->file_number>=0,"Bad id");
    10231023
    1024   if (me->last_access>=0) 
     1024  if (me->last_access>=0)
    10251025  {
    10261026    touch(me);
     
    10361036    last_offset=fp->tell();
    10371037    return (backtile *)me->data;
    1038   } 
     1038  }
    10391039}
    10401040
     
    10451045  CONDITION(id<total && id>=0 && me->file_number>=0,"Bad id");
    10461046
    1047   if (me->last_access>=0) 
     1047  if (me->last_access>=0)
    10481048  {
    10491049    touch(me);
     
    10591059    last_offset=fp->tell();
    10601060    return (foretile *)me->data;
    1061   } 
     1061  }
    10621062}
    10631063
     
    10661066  CacheItem *me=list+id;
    10671067//  CONDITION(id<total && id>=0 && me->file_number>=0,"Bad id");
    1068   if (me->last_access>=0) 
     1068  if (me->last_access>=0)
    10691069  {
    10701070    touch(me);
     
    10801080    last_offset=fp->tell();
    10811081    return (figure *)me->data;
    1082   } 
     1082  }
    10831083}
    10841084
     
    10871087  CacheItem *me=list+id;
    10881088  CONDITION(id<total && id>=0 && me->file_number>=0,"Bad id");
    1089   if (me->last_access>=0) 
     1089  if (me->last_access>=0)
    10901090  {
    10911091    touch(me);
     
    11031103
    11041104    return (image *)me->data;
    1105   } 
     1105  }
    11061106}
    11071107
     
    11101110  CacheItem *me=list+id;
    11111111  CONDITION(id<total && id>=0 && me->file_number>=0,"Bad id");
    1112   if (me->last_access>=0) 
     1112  if (me->last_access>=0)
    11131113  {
    11141114    touch(me);                                           // hold me, feel me, be me!
     
    11231123    alloc_space=sp;
    11241124    return (sound_effect *)me->data;
    1125   } 
     1125  }
    11261126}
    11271127
     
    11311131  CacheItem *me=list+id;
    11321132  CONDITION(id<total && id>=0 && me->file_number>=0,"Bad id");
    1133   if (me->last_access>=0) 
     1133  if (me->last_access>=0)
    11341134  {
    11351135    touch(me);                                           // hold me, feel me, be me!
     
    11451145    last_offset=fp->tell();
    11461146    return (part_frame *)me->data;
    1147   } 
     1147  }
    11481148}
    11491149
     
    11541154  CONDITION(id<total && id>=0 && me->file_number>=0,"Bad id");
    11551155  if (!can_cache_lisp()) return (Cell *)me->data;
    1156   if (me->last_access>=0) 
     1156  if (me->last_access>=0)
    11571157  {
    11581158    touch(me);
     
    11651165      delete cache_file;
    11661166      cache_file=NULL;
    1167     } 
     1167    }
    11681168    touch(me);
    11691169
     
    11711171    {
    11721172      cache_read_file=new jFILE(crc_manager.get_filename(me->file_number),"rb");
    1173      
     1173
    11741174      int cache_size=80*1024;                   // 80K
    1175       cache_read_file->set_read_buffer_size(cache_size); 
     1175      cache_read_file->set_read_buffer_size(cache_size);
    11761176      uint8_t mini_buf;
    11771177      cache_read_file->read(&mini_buf,1);       // prime the buffer
     
    11901190
    11911191    int cs=current_space;
    1192     use_user_space(space,size);   
     1192    use_user_space(space,size);
    11931193    load_block(cache_read_file);
    11941194    current_space=cs;
    1195    
     1195
    11961196    alloc_space=sp;
    11971197    if (size)
     
    11991199    else me->data=NULL;
    12001200    return (Cell *)me->data;
    1201   } 
     1201  }
    12021202}
    12031203
     
    12261226  {
    12271227    dprintf("mem_maker : freeing %s\n",spec_types[oldest->type]);
    1228     unmalloc(oldest);   
     1228    unmalloc(oldest);
    12291229  }
    12301230  else
     
    12341234    mem_report("out_of_mem");
    12351235    exit(0);
    1236   }         
     1236  }
    12371237}
    12381238
     
    12421242  int old=last_access,new_old_accessed;
    12431243  CacheItem *ci,*new_old;
    1244  
     1244
    12451245  do
    12461246  {
     
    12481248    new_old=NULL;
    12491249    ci=list;
    1250     for (int i=0;i<total;i++,ci++) 
    1251     {
    1252       if (ci->last_access<old && ci->last_access>0 && ci->last_access>new_old_accessed)   
    1253       {
    1254         new_old_accessed=ci->last_access;
    1255         new_old=ci;   
     1250    for (int i=0;i<total;i++,ci++)
     1251    {
     1252      if (ci->last_access<old && ci->last_access>0 && ci->last_access>new_old_accessed)
     1253      {
     1254    new_old_accessed=ci->last_access;
     1255        new_old=ci;
    12561256      }
    12571257    }
     
    12611261      old=ci->last_access;
    12621262      printf("type=(%20s) file=(%20s) access=(%6ld)\n",spec_types[ci->type],
    1263              crc_manager.get_filename(ci->file_number),
    1264              (long int)ci->last_access);
     1263         crc_manager.get_filename(ci->file_number),
     1264         (long int)ci->last_access);
    12651265    }
    12661266  } while (new_old);
     
    12721272  CacheItem *me=list+id;
    12731273  CONDITION(id<total && id>=0 && me->file_number>=0,"Bad id");
    1274   if (me->last_access>=0) 
     1274  if (me->last_access>=0)
    12751275    return 1;
    12761276  else return 0;
     
    12831283  CacheItem *me=list+id;
    12841284  CONDITION(id<total && id>=0 && me->file_number>=0,"Bad id" && me->type==SPEC_PALETTE);
    1285   if (me->last_access>=0) 
     1285  if (me->last_access>=0)
    12861286  {
    12871287    touch(me);
     
    12971297    last_offset=fp->tell();
    12981298    return (char_tint *)me->data;
    1299   }   
    1300 }
    1301 
    1302 
    1303 
    1304 
     1299  }
     1300}
     1301
     1302
     1303
     1304
  • abuse/trunk/src/cache.hpp

    r123 r124  
    7070protected:
    7171    void *data;
    72     int32_t last_access;   
     72    int32_t last_access;
    7373    uint8_t type;
    7474    int16_t file_number;
  • abuse/trunk/src/calctrig.cpp

    r56 r124  
    2525
    2626  printf("uint16_t atan_table[1662]={\n  ");
    27  
     27
    2828  for (i=1;i<1662;i++)
    29   {   
     29  {
    3030    if (i<29) x=0;
    3131    else x=(long)(atan(i/(double)29)/3.14152654*180)-45;
     
    3535    if ((i%12)==11) printf("\n  ");
    3636  }
    37   printf("};\n"); 
     37  printf("};\n");
    3838}
  • abuse/trunk/src/chars.cpp

    r123 r124  
    4242};
    4343
    44 /*                             "start_still_jump","still_jump","still_jump_fall","end_still_jump",
    45 
    46                                "morph_pose",
    47                                
    48                                "walking",
    49                                
    50 
    51                                "weapon_draw",
    52                                "weapon_put_away",
    53                                "weapon_fire",
    54                                "weapon_end_fire",
    55                                "weapon_fire_up",
    56                                "weapon_end_fire_up",
    57 
    58                                "blocking",
    59                                "block_recoil",
    60 
    61                                "turn_around",
    62                                "flinch_up","flinch_down","flinch_back",
    63                                "flinch_air","flinch_ground","flinch_getup","woze",
    64                                "stance"
    65                              } ; */
     44/*                   "start_still_jump","still_jump","still_jump_fall","end_still_jump",
     45
     46                   "morph_pose",
     47            
     48                   "walking",
     49            
     50
     51                   "weapon_draw",
     52                   "weapon_put_away",
     53                   "weapon_fire",
     54                   "weapon_end_fire",
     55                   "weapon_fire_up",
     56                   "weapon_end_fire_up",
     57
     58                   "blocking",
     59                   "block_recoil",
     60
     61                   "turn_around",
     62                   "flinch_up","flinch_down","flinch_back",
     63                   "flinch_air","flinch_ground","flinch_getup","woze",
     64                   "stance"
     65                 } ; */
    6666
    6767
     
    104104    }
    105105    num=lnumber_value(val);
    106   } else 
     106  } else
    107107  {
    108108    num=ts;
     
    118118    lprint(symbol);
    119119    lbreak("symbol has been assigned value %d, but value already in use by state %s\n"
    120            "use a different symbol for this state\n",
    121            lstring_value(symbol_name(seq_syms[num])));
     120       "use a different symbol for this state\n",
     121       lstring_value(symbol_name(seq_syms[num])));
    122122    exit(0);
    123123  } else if (num>=ts)
    124124  {
    125     seq=(sequence **)jrealloc(seq,sizeof(sequence *)*(num+1),"state list");   
    126     seq_syms=(void **)jrealloc(seq_syms,sizeof(void *)*(num+1),"state sym list");   
     125    seq=(sequence **)jrealloc(seq,sizeof(sequence *)*(num+1),"state list");
     126    seq_syms=(void **)jrealloc(seq_syms,sizeof(void *)*(num+1),"state sym list");
    127127
    128128    memset(&seq[ts],0,sizeof(sequence *)*((num+1)-ts));
     
    162162  if (seq[which])
    163163    delete seq[which];
    164   seq[which]=new_seq; 
    165 } 
     164  seq[which]=new_seq;
     165}
    166166
    167167void *l_obj_get(long number) // exten lisp function switches on number
     
    173173    return 0;
    174174  }
    175   return new_lisp_number(current_object->lvars[t->var_index[number]]); 
     175  return new_lisp_number(current_object->lvars[t->var_index[number]]);
    176176}
    177177
     
    195195    return;
    196196  }
    197   dprintf("%d",current_object->lvars[t->var_index[number]]); 
     197  dprintf("%d",current_object->lvars[t->var_index[number]]);
    198198}
    199199
     
    214214    {
    215215      if (vars[index])
    216       {       
    217         lbreak("While defining object %s :\n"
    218                "  var '%s' was previously defined by another\n"
    219                "  with index %d, but %s has a var listed '%s' with same index\n"
    220                "  try moving definition of %s before previously declared object",
    221                lstring_value(symbol_name(name)),
    222                lstring_value(symbol_name(symbol)),
    223                index,
    224                lstring_value(symbol_name(name)),
    225                lstring_value(symbol_name(vars[index])),
    226                lstring_value(symbol_name(name))
    227                );
    228         exit(0);
    229       } else 
    230       {
    231         var_index[index]=tv;
    232         vars[index]=symbol;
    233         tv++;
     216      {
     217    lbreak("While defining object %s :\n"
     218           "  var '%s' was previously defined by another\n"
     219           "  with index %d, but %s has a var listed '%s' with same index\n"
     220           "  try moving definition of %s before previously declared object",
     221           lstring_value(symbol_name(name)),
     222           lstring_value(symbol_name(symbol)),
     223           index,
     224           lstring_value(symbol_name(name)),
     225           lstring_value(symbol_name(vars[index])),
     226           lstring_value(symbol_name(name))
     227           );
     228    exit(0);
     229      } else
     230      {
     231    var_index[index]=tv;
     232    vars[index]=symbol;
     233    tv++;
    234234      }
    235235    } else
     
    245245      vars[index]=symbol;
    246246      tv++;
    247     }   
     247    }
    248248  } else  /** Nope, looks like we have to add the variable ourself and define the assesor funs */
    249249  {
     
    267267
    268268    add_c_object(symbol,free_index);
    269    
     269
    270270    vars[free_index]=symbol;
    271271    var_index[free_index]=tv;
     
    285285  }
    286286  for (i=0;i<tiv;i++)
    287     if (!strcmp(lstring_value(symbol_name(vars[i])),name)) 
     287    if (!strcmp(lstring_value(symbol_name(vars[i])),name))
    288288      return 1;
    289289  return 0;
    290290}
    291291
    292 character_type::character_type(void *args, void *name) 
     292character_type::character_type(void *args, void *name)
    293293{
    294294  p_ref r2(args);
     
    322322
    323323  for (i=0;i<TOTAL_ABILITIES;i++)
    324     abil[i]=get_ability_default((ability)i);         
     324    abil[i]=get_ability_default((ability)i);
    325325  void *field=args;
    326326  p_ref r7(field);
     
    329329    void *f=CAR(CAR(field));
    330330    p_ref r1(f);
    331    
     331
    332332    if (f==l_abil)
    333333    {
     
    336336      for (i=0;i<TOTAL_ABILITIES;i++)
    337337      {
    338         Cell *ab=assoc(make_find_symbol(ability_names[i]),l);
    339         p_ref r5(ab);
    340         if (!NILP(ab))
    341           abil[i]=lnumber_value(eval(lcar(lcdr(ab))));
     338    Cell *ab=assoc(make_find_symbol(ability_names[i]),l);
     339    p_ref r5(ab);
     340    if (!NILP(ab))
     341      abil[i]=lnumber_value(eval(lcar(lcdr(ab))));
    342342      }
    343343    } else if (f==l_funs)
     
    347347      for (i=0;i<TOTAL_OFUNS;i++)
    348348      {
    349         Cell *ab=assoc(make_find_symbol(ofun_names[i]),l);
    350         p_ref r5(ab);
    351         if (!NILP(ab) && lcar(lcdr(ab)))
    352         fun_table[i]=lcar(lcdr(ab));
     349    Cell *ab=assoc(make_find_symbol(ofun_names[i]),l);
     350    p_ref r5(ab);
     351    if (!NILP(ab) && lcar(lcdr(ab)))
     352    fun_table[i]=lcar(lcdr(ab));
    353353      }
    354354    } else if (f==l_flags)
     
    358358      for (i=0;i<TOTAL_CFLAGS;i++)
    359359      {
    360         Cell *ab=assoc(make_find_symbol(cflag_names[i]),l);
    361         p_ref r5(ab);
    362         if (!NILP(ab) && eval(lcar(lcdr(ab))))
    363         cflags|=(1<<i);
    364       }
    365      
     360    Cell *ab=assoc(make_find_symbol(cflag_names[i]),l);
     361    p_ref r5(ab);
     362    if (!NILP(ab) && eval(lcar(lcdr(ab))))
     363    cflags|=(1<<i);
     364      }
     365
    366366      if (get_cflag(CFLAG_IS_WEAPON))  // if this is a weapon add to weapon array
    367367      {
    368         total_weapons++;
    369         weapon_types=(int *)jrealloc(weapon_types,sizeof(int)*total_weapons,"weapon map");
    370         weapon_types[total_weapons-1]=total_objects;
     368    total_weapons++;
     369    weapon_types=(int *)jrealloc(weapon_types,sizeof(int)*total_weapons,"weapon map");
     370    weapon_types[total_weapons-1]=total_objects;
    371371      }
    372372    } else if (f==l_range)
     
    386386      while (l)
    387387      {
    388           int index;
    389           void *e;
    390           sequence *mem;
    391           index = add_state(CAR((CAR(l))));
    392           e = eval(CAR(CDR(CAR(l))));
    393           mem = new sequence(fn,e,NULL);
    394         seq[index]=mem;
    395         l=CDR(l);
    396       } 
     388      int index;
     389      void *e;
     390      sequence *mem;
     391      index = add_state(CAR((CAR(l))));
     392      e = eval(CAR(CDR(CAR(l))));
     393      mem = new sequence(fn,e,NULL);
     394    seq[index]=mem;
     395    l=CDR(l);
     396      }
    397397    } else if (f==l_fields)
    398398    {
     
    401401      while (!NILP(mf))
    402402      {
    403         char *real=lstring_value(eval(lcar(lcar(mf))));
    404         char *fake=lstring_value(eval(lcar(lcdr(lcar(mf)))));
    405         if (!isa_var_name(real))
    406         {
    407           lprint(field);
    408           lbreak("fields : no such var name \"%s\"\n",name);
    409           exit(0);
    410         }
    411         total_fields++;
    412 
    413         fields=(named_field **)jrealloc(fields,sizeof(named_field *)*total_fields,"named_fields");
    414         fields[total_fields-1]=new named_field(real,fake);
    415         mf=lcdr(mf);
     403    char *real=lstring_value(eval(lcar(lcar(mf))));
     404    char *fake=lstring_value(eval(lcar(lcdr(lcar(mf)))));
     405    if (!isa_var_name(real))
     406    {
     407      lprint(field);
     408      lbreak("fields : no such var name \"%s\"\n",name);
     409      exit(0);
     410    }
     411    total_fields++;
     412
     413    fields=(named_field **)jrealloc(fields,sizeof(named_field *)*total_fields,"named_fields");
     414    fields[total_fields-1]=new named_field(real,fake);
     415    mf=lcdr(mf);
    416416      }
    417417    } else if (f==l_logo)
     
    426426      while (l)
    427427      {
    428         add_var(CAR(l),name);
    429         l=CDR(l);
    430       }       
     428    add_var(CAR(l),name);
     429    l=CDR(l);
     430      }
    431431    }
    432432    else
     
    435435      lbreak("Unknown field for character definition");
    436436      exit(0);
    437     }   
     437    }
    438438  }
    439439
    440440  if (!seq[stopped])
    441441    lbreak("object (%s) has no stopped state, please define one!\n",
    442            lstring_value(symbol_name(name)));
     442       lstring_value(symbol_name(name)));
    443443
    444444/*  char *fn=lstring_value(lcar(desc));
     
    465465    printf("missing state state art in def-character (%s)\n",name);
    466466    exit(0);
    467   } 
    468  
     467  }
     468
    469469  sa=lcdr(sa);   // list of state sequences
    470470  while (!NILP(sa))
    471471  {
    472472    int num=lnumber_value(lcar(lcar(sa)));
    473     if (seq[num])   
     473    if (seq[num])
    474474      printf("Warning : state '%s' defined multiply for object %s\n"
    475              "          using first definition\n",state_names[num],name);
    476     else   
     475         "          using first definition\n",state_names[num],name);
     476    else
    477477      seq[lnumber_value(lcar(lcar(sa)))]=new sequence(fn,lcar(lcdr(lcar(sa))),lcar(lcdr(lcdr(lcar(sa)))));
    478     sa=lcdr(sa);   
     478    sa=lcdr(sa);
    479479  }
    480480
     
    483483  {
    484484    rangex=lnumber_value(lcar(lcdr(range)));
    485     rangey=lnumber_value(lcar(lcdr(lcdr(range)))); 
    486   } else 
     485    rangey=lnumber_value(lcar(lcdr(lcdr(range))));
     486  } else
    487487  {
    488488    rangex=100;
     
    504504      for (int i=0;find<0 && i<t;i++)
    505505        if (!strcmp(default_simple.var_name(i),name))
    506           find=i;
     506      find=i;
    507507      if (find<0)
    508508      {
    509         lprint(assoc(l_fields,desc));
    510         printf("fields : no such var name \"%s\"\n",name);
    511         printf("current possiblities are : \n");
    512         for (int i=0;i<t;i++) printf("\"%s\" ",default_simple.var_name(i));
    513         printf("\n");
    514         exit(0);
    515       } 
     509    lprint(assoc(l_fields,desc));
     510    printf("fields : no such var name \"%s\"\n",name);
     511    printf("current possiblities are : \n");
     512    for (int i=0;i<t;i++) printf("\"%s\" ",default_simple.var_name(i));
     513    printf("\n");
     514    exit(0);
     515      }
    516516      char *new_name=lstring_value(lcar(lcdr(lcar(mf))));
    517517      total_fields++;
     
    525525
    526526  Cell *lg=assoc(l_logo,desc);
    527   if (NILP(lg)) 
     527  if (NILP(lg))
    528528  {
    529529    if (get_cflag(CFLAG_IS_WEAPON))
     
    531531      lprint(desc);
    532532      lbreak("object must have a logo defined if it is a weapon\n"
    533              "example '(logo . (""art/misc.spe"" . ""big waepon""))\n");
     533         "example '(logo . (""art/misc.spe"" . ""big waepon""))\n");
    534534    }
    535535    logo=-1;
    536536  }
    537   else 
    538     logo=cache.reg_object(fn,lcdr(lg),SPEC_IMAGE,1); 
     537  else
     538    logo=cache.reg_object(fn,lcdr(lg),SPEC_IMAGE,1);
    539539    */
    540540}
     
    551551character_type::~character_type()
    552552{
    553   for (int i=0;i<ts;i++) 
    554     if (seq[i]) 
     553  for (int i=0;i<ts;i++)
     554    if (seq[i])
    555555      delete seq[i];
    556556  if (ts) jfree(seq);
     
    565565  if (ts)
    566566    jfree(seq_syms);
    567  
     567
    568568  if (tiv)
    569569  {
  • abuse/trunk/src/chars.hpp

    r66 r124  
    2121
    2222
    23 enum character_state {dead, 
    24                       dieing,
    25                       stopped,               
    26                       start_run_jump,run_jump, run_jump_fall, end_run_jump,
    27                       flinch_up,flinch_down,
    28                       morph_pose,
    29                       running
    30                     } ;
     23enum character_state {dead,
     24              dieing,
     25              stopped,       
     26              start_run_jump,run_jump, run_jump_fall, end_run_jump,
     27              flinch_up,flinch_down,
     28              morph_pose,
     29              running
     30            } ;
    3131
    3232
     
    4040  char *real_name;
    4141  char *descript_name;
    42   named_field(char *real, char *fake) 
    43   { real_name=strcpy((char *)jmalloc(strlen(real)+1,"var_name"),real); 
    44     descript_name=strcpy((char *)jmalloc(strlen(fake)+1,"var_name"),fake); 
     42  named_field(char *real, char *fake)
     43  { real_name=strcpy((char *)jmalloc(strlen(real)+1,"var_name"),real);
     44    descript_name=strcpy((char *)jmalloc(strlen(fake)+1,"var_name"),fake);
    4545  }
    4646  ~named_field() { jfree(real_name); jfree(descript_name); }
     
    6161       CFLAG_CACHED_IN,
    6262       CFLAG_NEED_CACHE_IN,
    63        CFLAG_UNACTIVE_SHIELD      // if object is not active (i.e. link 0 aistate==0) 
     63       CFLAG_UNACTIVE_SHIELD      // if object is not active (i.e. link 0 aistate==0)
    6464                                  // then objects will not draw a damage when hitting it
    6565     };
     
    7272       OFUN_DRAW,
    7373       OFUN_MAP_DRAW,
    74        OFUN_DAMAGE,               // called when the object receives damage 
     74       OFUN_DAMAGE,               // called when the object receives damage
    7575       OFUN_NEXT_STATE,           // called at the end of an object sequence
    7676       OFUN_USER_FUN,             // can by called (user_fun x y z)
     
    8484
    8585class character_type
    86 { 
     86{
    8787public :
    8888  ushort ts,tiv,tv; // total states, total index vars, total local vars
     
    9797  int abil[TOTAL_ABILITIES];
    9898  void *fun_table[TOTAL_OFUNS];             // pointers to lisp function for this object
    99   int logo,morph_mask,morph_power; 
     99  int logo,morph_mask,morph_power;
    100100  long rangex,rangey,draw_rangex,draw_rangey;             // range off screen before character is skipped
    101101
     
    104104  int get_cflag(int name) { return cflags&(1<<name); }
    105105  void set_cflag(int name, int x) { if (x) cflags|=(1<<name);  else cflags&=~(1<<name); }
    106   int total_fields;                         // used by game editor to replace field names 
     106  int total_fields;                         // used by game editor to replace field names
    107107  named_field **fields;
    108   character_type(void *args, void *name);   // lisp object describes object 
     108  character_type(void *args, void *name);   // lisp object describes object
    109109
    110110  sequence *get_sequence(character_state s);
    111   void add_sequence(character_state which, sequence *new_seq); 
     111  void add_sequence(character_state which, sequence *new_seq);
    112112  int has_sequence(character_state s) { return s<ts && (seq[s]!=NULL); }
    113113  int cache_in();    // returns false if out of cache memory
  • abuse/trunk/src/chat.cpp

    r111 r124  
    3636{
    3737  memmove(screen,screen+w,w*(h-3));
    38   memset(screen+w*(h-3),' ',w); 
     38  memset(screen+w*(h-3),' ',w);
    3939  memcpy(screen+w*(h-3),st,strlen(st));
    4040  redraw();
  • abuse/trunk/src/chat.hpp

    r106 r124  
    2222  void clear();
    2323  chat_console(JCFont *font, int width, int height);
    24  
     24
    2525} ;
    2626
  • abuse/trunk/src/client.hpp

    r57 r124  
    1717       - Send current inputs
    1818
    19        - read server commands until 
     19       - read server commands until
    2020       - process commands
    2121       - ability to detach from server
    2222       - ability to "talk" with a local server
    2323         through global local_server
    24            and functions local_server->insert_received_packet(pk);
    25                          local_server->get_output_packet(pk);
     24       and functions local_server->insert_received_packet(pk);
     25                     local_server->get_output_packet(pk);
    2626
    2727
  • abuse/trunk/src/clisp.cpp

    r123 r124  
    4848     *l_sneaky_image,*l_draw_fast,*l_player_tints,*l_save_order,*l_next_song,
    4949     *l_level_load_start,
    50      *l_level_load_end,     *l_cdc_logo,
     50     *l_level_load_end,        *l_cdc_logo,
    5151     *l_keep_backup,
    5252     *l_switch_to_powerful,
     
    6666void        *l_statbar_ammo_x,*l_statbar_ammo_y,
    6767            *l_statbar_ammo_w,*l_statbar_ammo_h,
    68             *l_statbar_ammo_bg_color,
     68        *l_statbar_ammo_bg_color,
    6969
    7070            *l_statbar_health_x,*l_statbar_health_y,
    7171            *l_statbar_health_w,*l_statbar_health_h,
    72             *l_statbar_health_bg_color,
    73 
    74             *l_statbar_logo_x,*l_statbar_logo_y;
    75 uint8_t chatting_enabled=0; 
     72        *l_statbar_health_bg_color,
     73
     74        *l_statbar_logo_x,*l_statbar_logo_y;
     75uint8_t chatting_enabled=0;
    7676
    7777extern void scatter_line(int x1, int y1, int x2, int y2, int c, int s);
     
    189189    set_symbol_number(make_find_symbol(cflag_names[i]),i);
    190190
    191   l_song_list=make_find_symbol("song_list"); 
     191  l_song_list=make_find_symbol("song_list");
    192192  l_post_render=make_find_symbol("post_render");
    193193
     
    224224  add_c_function("y",0,0,                      31);
    225225  add_c_bool_fun("set_x",1,1,                  32);
    226   add_c_bool_fun("set_y",1,1,                  33); 
     226  add_c_bool_fun("set_y",1,1,                  33);
    227227  add_c_bool_fun("push_characters",2,2,        34);
    228228
     
    252252  add_c_bool_fun("freeze_player",1,1,          58);   // freeze time
    253253
    254   add_c_function("menu",1,-1,                  59); 
     254  add_c_function("menu",1,-1,                  59);
    255255  add_c_bool_fun("do_command",1,1,             60);   // command string
    256256  add_c_bool_fun("set_game_state",1,1,         61);
    257  
     257
    258258
    259259// scene control functions, game must first be set to scene mode.
     
    285285  add_c_function("morph_detail",0,0,           89);
    286286  add_c_bool_fun("morph_into",3,3,             90);       // type aneal frames
    287   add_c_bool_fun("link_object",1,1,            91); 
    288 
    289   add_c_bool_fun("draw_line",5,5,              92); 
    290   add_c_function("dark_color",0,0,             93); 
    291   add_c_function("medium_color",0,0,           94); 
    292   add_c_function("bright_color",0,0,           95); 
    293 
    294   add_c_bool_fun("remove_object",1,1,          99); 
    295   add_c_bool_fun("link_light",1,1,            100); 
    296   add_c_bool_fun("remove_light",1,1,          101); 
    297   add_c_function("total_objects",0,0,         102); 
    298   add_c_function("total_lights",0,0,          103); 
     287  add_c_bool_fun("link_object",1,1,            91);
     288
     289  add_c_bool_fun("draw_line",5,5,              92);
     290  add_c_function("dark_color",0,0,             93);
     291  add_c_function("medium_color",0,0,           94);
     292  add_c_function("bright_color",0,0,           95);
     293
     294  add_c_bool_fun("remove_object",1,1,          99);
     295  add_c_bool_fun("link_light",1,1,            100);
     296  add_c_bool_fun("remove_light",1,1,          101);
     297  add_c_function("total_objects",0,0,         102);
     298  add_c_function("total_lights",0,0,          103);
    299299
    300300  add_c_bool_fun("set_light_r1",2,2,          104);
     
    314314  add_c_function("xacel",0,0,                 116);
    315315  add_c_function("yacel",0,0,                 117);
    316   add_c_bool_fun("delete_light",1,1,          118); 
     316  add_c_bool_fun("delete_light",1,1,          118);
    317317
    318318  add_c_bool_fun("set_fx",1,1,                119);
     
    336336  add_c_bool_fun("hurt_radius",6,6,           143);  // x y radius max_damage exclude_object max_push
    337337
    338   add_c_bool_fun("add_ammo",2,2,              144);  // weapon_type, amount 
     338  add_c_bool_fun("add_ammo",2,2,              144);  // weapon_type, amount
    339339  add_c_function("ammo_total",1,1,            145);  // returns total for type weapon
    340340  add_c_function("current_weapon",0,0,        146);  // weapon_type, amount
     
    349349  add_c_bool_fun("set_course",2,2,            154);  // angle, magnitude
    350350  add_c_bool_fun("set_frame_angle",3,3,       155);  // ang1,ang2, ang
    351   add_c_bool_fun("jump_state",1,1,            156);  // don't reset current_frame 
     351  add_c_bool_fun("jump_state",1,1,            156);  // don't reset current_frame
    352352
    353353  add_c_bool_fun("morphing",0,0,              168);
     
    369369  add_c_bool_fun("set_otype",1,1,             182);  // otype
    370370
    371   add_c_function("current_frame",0,0,         184); 
     371  add_c_function("current_frame",0,0,         184);
    372372  add_c_function("fx",0,0,                    185);
    373373  add_c_function("fy",0,0,                    186);
     
    391391  add_c_function("load_small_font",2,2,       204);  // filename, name
    392392  add_c_function("load_console_font",2,2,     205);  // filename, name
    393   add_c_function("set_current_frame",1,1,     206); 
     393  add_c_function("set_current_frame",1,1,     206);
    394394
    395395  add_c_bool_fun("draw_transparent",2,2,      208);  // count, max
     
    415415  add_c_function("def_tint",1,1,              227);  // filename
    416416  add_c_function("tint_palette",3,3,          228);  // radd,gadd,badd
    417   add_c_function("player_number",0,0,         229); 
     417  add_c_function("player_number",0,0,         229);
    418418  add_c_bool_fun("set_current_weapon",1,1,    230);  // type
    419419  add_c_bool_fun("has_weapon",1,1,            231);  // type
     
    482482  add_c_bool_fun("demo_break_enable",0,0,     291);
    483483  add_c_bool_fun("am_a_client",0,0,           292);
    484   add_c_bool_fun("time_for_next_level",0,0,   293); 
     484  add_c_bool_fun("time_for_next_level",0,0,   293);
    485485  add_c_bool_fun("reset_kills",0,0,           294);
    486486  add_c_bool_fun("set_game_name",1,1,         295);  // name
    487   add_c_bool_fun("set_net_min_players",1,1,   296); 
    488  
     487  add_c_bool_fun("set_net_min_players",1,1,   296);
     488
    489489
    490490  add_lisp_function("go_state",1,1,              0);
     
    494494  add_lisp_function("bg",0,0,                    4);
    495495  add_lisp_function("find_closest",1,1,          5);
    496   add_lisp_function("find_xclosest",1,1,         6); 
    497   add_lisp_function("find_xrange",2,2,           7); 
     496  add_lisp_function("find_xclosest",1,1,         6);
     497  add_lisp_function("find_xrange",2,2,           7);
    498498  add_lisp_function("add_object",3,4,            8);    // type, x,y (type)
    499499  add_lisp_function("first_focus",0,0,           9);
     
    554554
    555555  add_lisp_function("score_draw",0,0,           61);
    556   add_lisp_function("show_kills",0,0,           62); 
    557   add_lisp_function("mkptr",1,1,                63); 
     556  add_lisp_function("show_kills",0,0,           62);
     557  add_lisp_function("mkptr",1,1,                63);
    558558  add_lisp_function("seq",3,3,                  64);
    559559}
     
    566566  switch (number)
    567567  {
    568     case 0 : 
    569     {
    570       current_object->set_aistate(lnumber_value(eval(CAR(args)))); 
     568    case 0 :
     569    {
     570      current_object->set_aistate(lnumber_value(eval(CAR(args))));
    571571      current_object->set_aistate_time(0);
    572572      void *ai=figures[current_object->otype]->get_fun(OFUN_AI);
    573573      if (!ai)
    574574      {
    575         lbreak("hrump... call to go_state, and no ai function defined?\n"
    576                "Are you calling from move function (not mover)?\n");
    577         exit(0);
     575    lbreak("hrump... call to go_state, and no ai function defined?\n"
     576           "Are you calling from move function (not mover)?\n");
     577    exit(0);
    578578      }
    579579      return eval_function((lisp_symbol *)ai,NULL);
     
    582582    {
    583583      game_object *old_cur=current_object;
    584       current_object=(game_object *)lpointer_value(eval(CAR(args))); 
     584      current_object=(game_object *)lpointer_value(eval(CAR(args)));
    585585      void *ret=eval_block(CDR(args));
    586586      current_object=old_cur;
     
    604604
    605605    case 3 : return new_lisp_pointer(current_object); break;
    606     case 4 : 
     606    case 4 :
    607607    { if (player_list->next)
    608608        return new_lisp_pointer(current_level->attacker(current_object));
    609609      else return new_lisp_pointer(player_list->focus); } break;
    610610    case 5 : return new_lisp_pointer(current_level->find_closest(current_object->x,
    611                                                                 current_object->y,
    612                                                        lnumber_value(eval(CAR(args))),
    613                                                        current_object)); break;
     611                                current_object->y,
     612                               lnumber_value(eval(CAR(args))),
     613                                       current_object)); break;
    614614    case 6 : return new_lisp_pointer(current_level->find_xclosest(current_object->x,
    615                                                                   current_object->y,
    616                                                                   lnumber_value(eval(CAR(args))),
    617                                                                   current_object
    618                                                                   )); break;
    619     case 7 : 
     615                                  current_object->y,
     616                                  lnumber_value(eval(CAR(args))),
     617                                  current_object
     618                                  )); break;
     619    case 7 :
    620620    {
    621621      long n1=lnumber_value(eval(CAR(args)));
    622622      long n2=lnumber_value(eval(CAR(CDR(args))));
    623623      return new_lisp_pointer(current_level->find_xrange(current_object->x,
    624                                                         current_object->y,
    625                                                         n1,
    626                                                         n2
    627                                                         ));
    628     } break;
    629     case 8 : 
     624                            current_object->y,
     625                            n1,
     626                            n2
     627                            ));
     628    } break;
     629    case 8 :
    630630    {
    631631      int type=lnumber_value(eval(CAR(args)));          args=CDR(args);
     
    641641      return new_lisp_pointer(o);
    642642    } break;
    643     case 22 : 
     643    case 22 :
    644644    {
    645645      int type=lnumber_value(eval(CAR(args)));          args=CDR(args);
     
    657657
    658658    case 9 : return new_lisp_pointer(the_game->first_view->focus); break;
    659     case 10 : 
     659    case 10 :
    660660    {
    661661      view *v=((game_object *)lpointer_value(eval(CAR(args))))->controller()->next;
     
    664664      else return NULL;
    665665    } break;
    666     case 11 : 
    667     { 
     666    case 11 :
     667    {
    668668      return new_lisp_pointer
    669669      ((void *)current_object->get_object(lnumber_value(eval(CAR(args)))));
    670670    } break;
    671     case 12 : 
    672     { 
     671    case 12 :
     672    {
    673673      return new_lisp_pointer
    674674      ((void *)current_object->get_light(lnumber_value(eval(CAR(args)))));
     
    679679      void *ret=NULL;
    680680      for (int i=0;i<old_cur->total_objects();i++)
    681       { 
    682         current_object=old_cur->get_object(i);
    683         ret=eval(CAR(args));
     681      {   
     682    current_object=old_cur->get_object(i);
     683    ret=eval(CAR(args));
    684684      }
    685685      current_object=old_cur;
     
    705705      void *f=figures[current_object->otype]->get_fun(OFUN_USER_FUN);
    706706      if (!f) return NULL;
    707       return eval_function((lisp_symbol *)f,args);     
     707      return eval_function((lisp_symbol *)f,args);
    708708    } break;
    709709    case 17 :
     
    714714      for (int x=0;x<trials;x++)
    715715      {
    716         clear_tmp();
    717         eval(CAR(args));
     716    clear_tmp();
     717    eval(CAR(args));
    718718      }
    719719      time_marker end;
     
    733733      void *list=eval(CAR(args));
    734734      game_object *find=current_level->find_object_in_area(current_object->x,
    735                                               current_object->y,
    736                                               x1,y1,x2,y2,list,current_object);
    737       if (find) return new_lisp_pointer(find); 
     735                          current_object->y,
     736                          x1,y1,x2,y2,list,current_object);
     737      if (find) return new_lisp_pointer(find);
    738738      else return NULL;
    739739    } break;
     
    747747      p_ref r1(list);
    748748      game_object *find=current_level->find_object_in_angle(current_object->x,
    749                                                         current_object->y,
    750                                                         a1,a2,list,current_object);
    751       if (find) return new_lisp_pointer(find); 
     749                            current_object->y,
     750                            a1,a2,list,current_object);
     751      if (find) return new_lisp_pointer(find);
    752752      else return NULL;
    753753    } break;
     
    757757      if (item_type(sym)!=L_SYMBOL)
    758758      {
    759         lbreak("expecting first arg to def-character to be a symbol!\n");
    760         exit(0);
     759    lbreak("expecting first arg to def-character to be a symbol!\n");
     760    exit(0);
    761761      }
    762762      int sp=current_space;
     
    767767      {
    768768        object_names=(char **)jmalloc(sizeof(char *)*(total_objects+1),"object name list");
    769         figures=(character_type **)jmalloc(sizeof(character_type *)*(total_objects+1),"character types");
     769    figures=(character_type **)jmalloc(sizeof(character_type *)*(total_objects+1),"character types");
    770770      }
    771771      else
    772772      {
    773773        object_names=(char **)jrealloc(object_names,sizeof(char *)*(total_objects+1),
    774                                        "object name list");
    775         figures=(character_type **)jrealloc(figures,sizeof(character_type *)*(total_objects+1),
    776                                             "character types");
     774                       "object name list");
     775    figures=(character_type **)jrealloc(figures,sizeof(character_type *)*(total_objects+1),
     776                        "character types");
    777777      }
    778778
    779779      object_names[total_objects]=strcpy(
    780           (char *)jmalloc(strlen(lstring_value(symbol_name(sym)))+1,"object name"),
    781                                         lstring_value(symbol_name(sym)));
     780      (char *)jmalloc(strlen(lstring_value(symbol_name(sym)))+1,"object name"),
     781                    lstring_value(symbol_name(sym)));
    782782      figures[total_objects]=new character_type(CDR(args),sym);
    783783      total_objects++;
     
    823823    case 36 :
    824824    {
    825      
     825
    826826      int32_t xm,ym,but;
    827827      xm=lnumber_value(CAR(args)); args=CDR(args);
     
    889889      void *ret=NULL;
    890890      {
    891         p_ref r1(ret);
    892         push_onto_list(new_lisp_number((last_demo_mbut&4)==4),ret);
    893         push_onto_list(new_lisp_number((last_demo_mbut&2)==2),ret);
    894         push_onto_list(new_lisp_number((last_demo_mbut&1)==1),ret);
    895         push_onto_list(new_lisp_number(last_demo_my),ret);
    896         push_onto_list(new_lisp_number(last_demo_mx),ret);
     891    p_ref r1(ret);
     892    push_onto_list(new_lisp_number((last_demo_mbut&4)==4),ret);
     893    push_onto_list(new_lisp_number((last_demo_mbut&2)==2),ret);
     894    push_onto_list(new_lisp_number((last_demo_mbut&1)==1),ret);
     895    push_onto_list(new_lisp_number(last_demo_my),ret);
     896    push_onto_list(new_lisp_number(last_demo_mx),ret);
    897897      }
    898898      return ret;
     
    907907      void *ret=NULL;
    908908      {
    909         p_ref r1(ret);
    910         push_onto_list(new_lisp_number(ry),ret);
    911         push_onto_list(new_lisp_number(rx),ret);
     909    p_ref r1(ret);
     910    push_onto_list(new_lisp_number(ry),ret);
     911    push_onto_list(new_lisp_number(rx),ret);
    912912      }
    913913      return ret;
     
    922922      void *ret=NULL;
    923923      {
    924         p_ref r1(ret);
    925         push_onto_list(new_lisp_number(ry),ret);
    926         push_onto_list(new_lisp_number(rx),ret);
     924    p_ref r1(ret);
     925    push_onto_list(new_lisp_number(ry),ret);
     926    push_onto_list(new_lisp_number(rx),ret);
    927927      }
    928928      return ret;
    929929    } break;
    930930    case 51 :   return new_lisp_pointer(wm->font()); break;
    931     case 52 : 
     931    case 52 :
    932932    {
    933933      view *c=current_object->controller();
     
    958958      char tmp[200];
    959959      {
    960         p_ref r1(fn);
    961         char *slash=lstring_value(eval(CAR(args)));
    962         char *filename=lstring_value(fn);
    963 
    964         char *s=filename,*tp;
    965        
    966         for (tp=tmp;*s;s++,tp++)
    967         {
    968           if (*s=='/' || *s=='\\')
    969           *tp=*slash;
    970           else *tp=*s;
    971         }
    972         *tp=0;
     960    p_ref r1(fn);
     961    char *slash=lstring_value(eval(CAR(args)));
     962    char *filename=lstring_value(fn);
     963
     964    char *s=filename,*tp;
     965   
     966    for (tp=tmp;*s;s++,tp++)
     967    {
     968      if (*s=='/' || *s=='\\')
     969      *tp=*slash;
     970      else *tp=*s;
     971    }
     972    *tp=0;
    973973      }
    974974      return new_lisp_string(tmp);
     
    986986      void *fl=NULL,*dl=NULL,*rl=NULL;
    987987      {
    988         p_ref r1(fl),r2(dl);
    989        
    990         for (i=tfiles-1;i>=0;i--) { push_onto_list(new_lisp_string(files[i]),fl); jfree(files[i]); }
    991         jfree(files);
    992 
    993         for (i=tdirs-1;i>=0;i--) { push_onto_list(new_lisp_string(dirs[i]),dl); jfree(dirs[i]); }
    994         jfree(dirs);
    995        
    996         push_onto_list(dl,rl);
    997         push_onto_list(fl,rl);
    998       }
    999      
     988    p_ref r1(fl),r2(dl);
     989   
     990    for (i=tfiles-1;i>=0;i--) { push_onto_list(new_lisp_string(files[i]),fl); jfree(files[i]); }
     991    jfree(files);
     992
     993    for (i=tdirs-1;i>=0;i--) { push_onto_list(new_lisp_string(dirs[i]),dl); jfree(dirs[i]); }
     994    jfree(dirs);
     995   
     996    push_onto_list(dl,rl);
     997    push_onto_list(fl,rl);
     998      }
     999
    10001000      return rl;
    10011001    } break;
     
    10071007    case 61 : return score_draw();  break;
    10081008    case 62 : return show_kills(); break;
    1009     case 63 : 
    1010     {
    1011         long x;
    1012         sscanf(lstring_value(eval(CAR(args))),"%lx",&x);
    1013         return new_lisp_pointer((void *)(intptr_t)x);
     1009    case 63 :
     1010    {
     1011        long x;
     1012        sscanf(lstring_value(eval(CAR(args))),"%lx",&x);
     1013        return new_lisp_pointer((void *)(intptr_t)x);
    10141014    } break;
    10151015    case 64 :
     
    10371037          push_onto_list(new_lisp_string(name2),ret);
    10381038        }
    1039       }     
     1039      }
    10401040      return ret;
    10411041    }
     
    10491049long c_caller(long number, void *args)
    10501050{
    1051         p_ref r1(args);
    1052         switch (number)
    1053         {
    1054                 case 1:
    1055                 {
    1056                         return abs(current_object->x-current_level->attacker(current_object)->x);
    1057                 } break;
    1058                 case 2:
    1059                 {
    1060                         return abs(current_object->y-current_level->attacker(current_object)->y);
    1061                 } break;
    1062                 case 3:
    1063                 {
    1064                         if( !current_object->controller() )
    1065                         {
    1066                                 lbreak("object is not a player, cannot determine keypresses");
    1067                         }
    1068                         else
    1069                         {
    1070                                 return current_object->controller()->key_down(lnumber_value(CAR(args)));
    1071                         }
    1072                 } break;
    1073                 case 4:
    1074                 {
    1075                         return the_game->key_down(lnumber_value(CAR(args)));
    1076                 } break;
    1077                 case 5:
    1078                 {
    1079                         return current_level->attacker(current_object)->state;
    1080                 } break;
    1081                 case 6:
    1082                 {
    1083                         return current_object->aitype();
    1084                 } break;
    1085                 case 7:
    1086                 {
    1087                         if (!current_object->keep_ai_info())
    1088                                 current_object->set_aistate(0);
    1089                         return current_object->aistate();
    1090                 } break;
    1091                 case 8:
    1092                 {
    1093                         int ns=lnumber_value(CAR(args));
    1094                         current_object->set_aistate_time(0);     
    1095                         current_object->set_aistate(ns); return 1;
    1096                 } break;
    1097                 case 9:
    1098                 {
     1051    p_ref r1(args);
     1052    switch (number)
     1053    {
     1054        case 1:
     1055        {
     1056            return abs(current_object->x-current_level->attacker(current_object)->x);
     1057        } break;
     1058        case 2:
     1059        {
     1060            return abs(current_object->y-current_level->attacker(current_object)->y);
     1061        } break;
     1062        case 3:
     1063        {
     1064            if( !current_object->controller() )
     1065            {
     1066                lbreak("object is not a player, cannot determine keypresses");
     1067            }
     1068            else
     1069            {
     1070                return current_object->controller()->key_down(lnumber_value(CAR(args)));
     1071            }
     1072        } break;
     1073        case 4:
     1074        {
     1075            return the_game->key_down(lnumber_value(CAR(args)));
     1076        } break;
     1077        case 5:
     1078        {
     1079            return current_level->attacker(current_object)->state;
     1080        } break;
     1081        case 6:
     1082        {
     1083            return current_object->aitype();
     1084        } break;
     1085        case 7:
     1086        {
     1087            if (!current_object->keep_ai_info())
     1088                current_object->set_aistate(0);
     1089            return current_object->aistate();
     1090        } break;
     1091        case 8:
     1092        {
     1093            int ns=lnumber_value(CAR(args));
     1094            current_object->set_aistate_time(0);
     1095            current_object->set_aistate(ns); return 1;
     1096        } break;
     1097        case 9:
     1098        {
    10991099/*      if (rcheck_lp)
    11001100      {
    1101         char str[100];
    1102         sprintf(str,"\n\nTick %d, Rand_on %d\n",current_level->tick_counter(),rand_on);
    1103         rcheck_lp->write(str,strlen(str)+1);
    1104         current_print_file=rcheck_lp;
    1105         print_trace_stack(6);
    1106         current_print_file=NULL;
     1101    char str[100];
     1102    sprintf(str,"\n\nTick %d, Rand_on %d\n",current_level->tick_counter(),rand_on);
     1103    rcheck_lp->write(str,strlen(str)+1);
     1104    current_print_file=rcheck_lp;
     1105    print_trace_stack(6);
     1106    current_print_file=NULL;
    11071107      }*/
    11081108
    1109                         return jrandom(lnumber_value(CAR(args)));
    1110                 } break;
    1111                 case 10 : return current_object->aistate_time(); break;
    1112                 case 11 : return current_object->state; break;
    1113                 case 12:
    1114                 {
    1115                         if (current_level->attacker(current_object)->x>current_object->x)
    1116                                 return 1;
    1117                         else
    1118                                 return -1;
    1119                 } break;
    1120                 case 13:
    1121                 {
    1122                         return current_object->move(lnumber_value(CAR(args)),lnumber_value(CAR(CDR(args))), lnumber_value(CAR(CDR(CDR(args)))));
    1123                 } break;
    1124                 case 14:
    1125                 {
    1126                         if (current_object->direction>0)
    1127                                 return 1;
    1128                         else
    1129                                 return -1;
    1130                 } break;
     1109            return jrandom(lnumber_value(CAR(args)));
     1110        } break;
     1111        case 10 : return current_object->aistate_time(); break;
     1112        case 11 : return current_object->state; break;
     1113        case 12:
     1114        {
     1115            if (current_level->attacker(current_object)->x>current_object->x)
     1116                return 1;
     1117            else
     1118                return -1;
     1119        } break;
     1120        case 13:
     1121        {
     1122            return current_object->move(lnumber_value(CAR(args)),lnumber_value(CAR(CDR(args))), lnumber_value(CAR(CDR(CDR(args)))));
     1123        } break;
     1124        case 14:
     1125        {
     1126            if (current_object->direction>0)
     1127                return 1;
     1128            else
     1129                return -1;
     1130        } break;
    11311131    case 15 : return current_object->otype; break;
    11321132    case 16 : return current_object->next_picture(); break;
    11331133    case 17 : current_object->set_fade_dir(lnumber_value(CAR(args))); return 1; break;
    1134     case 18 : 
    1135     { 
     1134    case 18 :
     1135    {
    11361136      int cx=lnumber_value(CAR(args));
    11371137      args=CDR(args);
     
    11591159    case 28 :
    11601160    { return (dev & EDIT_MODE); } break;
    1161     case 29 : 
     1161    case 29 :
    11621162    { current_object->draw_above(current_view); return 1; } break;
    11631163    case 30 : return current_object->x; break;
    11641164    case 31 : return current_object->y; break;
    1165     case 32 : 
     1165    case 32 :
    11661166    { int32_t v=lnumber_value(CAR(args));
    11671167      current_object->x=v;
    11681168//      current_object->last_x=v;
    1169       return 1; 
    1170     } break;
    1171     case 33 : 
     1169      return 1;
     1170    } break;
     1171    case 33 :
    11721172    { int32_t v=lnumber_value(CAR(args));
    11731173      current_object->y=v;
    11741174//      current_object->last_y=v;
    1175       return 1; 
     1175      return 1;
    11761176    } break;
    11771177
    11781178    case 34 : { return current_level->push_characters(current_object,lnumber_value(CAR(args)),
    1179                                             lnumber_value(CAR(CDR(args))));
    1180               } break;
    1181 
    1182     case 37 : 
     1179                        lnumber_value(CAR(CDR(args))));
     1180          } break;
     1181
     1182    case 37 :
    11831183    {
    11841184      int32_t s=lnumber_value(CAR(args));
    1185       current_object->set_state((character_state)s); 
     1185      current_object->set_state((character_state)s);
    11861186      return (s==current_object->state);
    11871187    } break;
     
    11951195    case 44 : current_object->set_xvel(lnumber_value(CAR(args))); return 1; break;
    11961196    case 45 : current_object->set_yvel(lnumber_value(CAR(args))); return 1; break;
    1197     case 46 : if (current_level->attacker(current_object)->x>current_object->x) return -1; 
     1197    case 46 : if (current_level->attacker(current_object)->x>current_object->x) return -1;
    11981198              else return 1; break;
    11991199    case 47 : return lnumber_value(CAR(args))&BLOCKED_LEFT; break;
     
    12081208    case 56 : return current_object->direction; break;
    12091209    case 57 : current_object->direction=lnumber_value(CAR(args)); break;
    1210     case 58 : 
     1210    case 58 :
    12111211    {
    12121212      int x1=lnumber_value(CAR(args));
    1213       if (!current_object->controller())     
     1213      if (!current_object->controller())
    12141214      { lbreak("set_freeze_time : object is not a focus\n"); }
    12151215      else current_object->controller()->freeze_time=x1; return 1;
    12161216    } break;
    12171217    case 59 : return menu(args,big_font); break;
    1218     case 60 : 
     1218    case 60 :
    12191219    { event ev; dev_cont->do_command(lstring_value(CAR(args)),ev); return 1; } break;
    12201220    case 61 : the_game->set_state(lnumber_value(CAR(args))); break;
    12211221
    1222     case 62 : 
     1222    case 62 :
    12231223    {
    12241224      int x1=lnumber_value(CAR(args)); args=CDR(args);
     
    12331233    case 66 : scene_director.scroll_text(lstring_value(CAR(args))); break;
    12341234    case 67 : scene_director.set_pan(lnumber_value(CAR(args)),
    1235                                 lnumber_value(CAR(CDR(args))),
    1236                                 lnumber_value(CAR(CDR(CDR(args))))); break;
     1235                lnumber_value(CAR(CDR(args))),
     1236                lnumber_value(CAR(CDR(CDR(args))))); break;
    12371237    case 68 : scene_director.wait(CAR(args)); break;
    12381238
    12391239
    12401240    case 73 : the_game->set_level(new level(lnumber_value(CAR(args)),
    1241                                             lnumber_value(CAR(CDR(args))),
    1242                                             lstring_value(CAR(CDR(CDR(args)))))); break;
    1243     case 74 : 
    1244     { if (current_level) delete current_level; 
    1245       current_level=new level(100,100,"new_level"); 
    1246     } break;
    1247     case 75 : 
     1241                        lnumber_value(CAR(CDR(args))),
     1242                        lstring_value(CAR(CDR(CDR(args)))))); break;
     1243    case 74 :
     1244    { if (current_level) delete current_level;
     1245      current_level=new level(100,100,"new_level");
     1246    } break;
     1247    case 75 :
    12481248    {
    12491249      int amount=lnumber_value(CAR(args)); args=CDR(args);
     
    12521252      if (args)
    12531253      {
    1254         xv=lnumber_value(CAR(args)); args=CDR(args);
    1255         yv=lnumber_value(CAR(args));
     1254    xv=lnumber_value(CAR(args)); args=CDR(args);
     1255    yv=lnumber_value(CAR(args));
    12561256      }
    12571257      o->do_damage(amount,current_object,current_object->x,current_object->y,xv,yv);
    12581258    } break;
    12591259    case 76 : return current_object->hp(); break;
    1260     case 77 : 
     1260    case 77 :
    12611261    {
    12621262      game_object *o=(game_object *)lpointer_value(CAR(args));
    1263       if (!o->controller())     
    1264         printf("set shift : object is not a focus\n");
     1263      if (!o->controller())
     1264    printf("set shift : object is not a focus\n");
    12651265      else o->controller()->shift_down=lnumber_value(CAR(CDR(args))); return 1;
    12661266    } break;
    1267     case 78 : 
     1267    case 78 :
    12681268    {
    12691269      game_object *o=(game_object *)lpointer_value(CAR(args));
    1270       if (!o->controller())     
    1271         printf("set shift : object is not a focus\n");
     1270      if (!o->controller())
     1271    printf("set shift : object is not a focus\n");
    12721272      else o->controller()->shift_right=lnumber_value(CAR(CDR(args))); return 1;
    12731273    } break;
     
    12831283    case 89 : return morph_detail; break;
    12841284    case 90 : current_object->morph_into(lnumber_value(CAR(args)),NULL,
    1285                                         lnumber_value(CAR(CDR(args))),
    1286                                         lnumber_value(CAR(CDR(CDR(args))))); return 1; break;
     1285                    lnumber_value(CAR(CDR(args))),
     1286                    lnumber_value(CAR(CDR(CDR(args))))); return 1; break;
    12871287    case 91 : current_object->add_object((game_object *)lpointer_value(CAR(args))); return 1; break;
    1288     case 92 : 
     1288    case 92 :
    12891289    {
    12901290      int32_t cx1,x1=lnumber_value(CAR(args)); args=lcdr(args);
     
    13081308    case 103 : return current_object->total_lights(); break;
    13091309
    1310     case 104 : 
     1310    case 104 :
    13111311    { light_source *l=(light_source *)lpointer_value(CAR(args));
    13121312      int32_t x=lnumber_value(CAR(CDR(args)));
     
    13161316      return 1;
    13171317    } break;
    1318     case 105 : 
     1318    case 105 :
    13191319    { light_source *l=(light_source *)lpointer_value(CAR(args));
    13201320      int32_t x=lnumber_value(CAR(CDR(args)));
     
    13241324      return 1;
    13251325    } break;
    1326     case 106 : 
     1326    case 106 :
    13271327    { light_source *l=(light_source *)lpointer_value(CAR(args));
    13281328      l->x=lnumber_value(CAR(CDR(args)));
     
    13301330      return 1;
    13311331    } break;
    1332     case 107 : 
     1332    case 107 :
    13331333    { light_source *l=(light_source *)lpointer_value(CAR(args));
    13341334      l->y=lnumber_value(CAR(CDR(args)));
     
    13361336      return 1;
    13371337    } break;
    1338     case 108 : 
     1338    case 108 :
    13391339    { light_source *l=(light_source *)lpointer_value(CAR(args));
    13401340      l->xshift=lnumber_value(CAR(CDR(args)));
     
    13421342      return 1;
    13431343    } break;
    1344     case 109 : 
     1344    case 109 :
    13451345    { light_source *l=(light_source *)lpointer_value(CAR(args));
    13461346      l->yshift=lnumber_value(CAR(CDR(args)));
     
    13671367    case 127 : { dprintf("trap\n"); } break;   // I use this to set gdb break points
    13681368    case 128 : { return current_level->platform_push(current_object,lnumber_value(CAR(args)),
    1369                                             lnumber_value(CAR(CDR(args))));
    1370                                             } break;
     1369                        lnumber_value(CAR(CDR(args))));
     1370                        } break;
    13711371    case 133 :  // def_sound
    13721372    {
     
    13741374      if (CDR(args))
    13751375      {
    1376         sym=(lisp_symbol *)lcar(args);
    1377         if (item_type(sym)!=L_SYMBOL)
    1378         {
    1379           lbreak("expecting first arg to def-character to be a symbol!\n");
    1380           exit(0);
    1381         }
    1382         args=CDR(args);
     1376    sym=(lisp_symbol *)lcar(args);
     1377    if (item_type(sym)!=L_SYMBOL)
     1378    {
     1379      lbreak("expecting first arg to def-character to be a symbol!\n");
     1380      exit(0);
     1381    }
     1382    args=CDR(args);
    13831383      }
    13841384
     
    13871387      int id=cache.reg(lstring_value(lcar(args)),NULL,SPEC_EXTERN_SFX,1);
    13881388      if (sym)
    1389         set_symbol_number(sym,id);    // set the symbol value to sfx id                              
     1389        set_symbol_number(sym,id);    // set the symbol value to sfx id                
    13901390      current_space=sp;
    13911391      return id;
     
    14021402      else
    14031403      {
    1404         int vol=lnumber_value(lcar(a)); a=CDR(a);
    1405         if (a)
    1406         {
    1407           int32_t x=lnumber_value(lcar(a)); a=CDR(a);
    1408           if (!a)
    1409           {
    1410             lprint(args);
    1411             lbreak("expecting y after x in play_sound\n");
    1412             exit(1);
    1413           }
    1414           int32_t y=lnumber_value(lcar(a));
    1415           the_game->play_sound(id,vol,x,y);
    1416         } else cache.sfx(id)->play(vol);       
     1404    int vol=lnumber_value(lcar(a)); a=CDR(a);
     1405    if (a)
     1406    {
     1407      int32_t x=lnumber_value(lcar(a)); a=CDR(a);
     1408      if (!a)
     1409      {
     1410        lprint(args);
     1411        lbreak("expecting y after x in play_sound\n");
     1412        exit(1);
     1413      }
     1414      int32_t y=lnumber_value(lcar(a));
     1415      the_game->play_sound(id,vol,x,y);
     1416    } else cache.sfx(id)->play(vol);
    14171417      }
    14181418
     
    14311431      int32_t x=lnumber_value(CAR(args)); args=CDR(args);
    14321432      if (x<0 || x>=total_weapons)
    1433       { 
    1434         lbreak("weapon out of range (%d)\n",x);
    1435         exit(0);
     1433      {
     1434    lbreak("weapon out of range (%d)\n",x);
     1435    exit(0);
    14361436      }
    14371437      return weapon_types[x];
     
    14541454      else
    14551455      {
    1456         int32_t x=lnumber_value(CAR(args)); args=CDR(args);
    1457         int32_t y=lnumber_value(CAR(args)); args=CDR(args);
    1458         if (x<0 || x>=total_weapons)
    1459         { lbreak("weapon out of range (%d)\n",x); exit(0); }
    1460         v->add_ammo(x,y);
    1461       }     
     1456    int32_t x=lnumber_value(CAR(args)); args=CDR(args);
     1457    int32_t y=lnumber_value(CAR(args)); args=CDR(args);
     1458    if (x<0 || x>=total_weapons)
     1459    { lbreak("weapon out of range (%d)\n",x); exit(0); }
     1460    v->add_ammo(x,y);
     1461      }
    14621462    } break;
    14631463    case 145 :
     
    14761476      view *v=current_object->controller();
    14771477      if (!v) { lbreak("current_weapon_type : object cannot hold weapons\n");
    1478                 return 0; }
     1478        return 0; }
    14791479      else return v->current_weapon;
    14801480    } break;
     
    14891489      if (v) v->give_weapon(x);
    14901490    } break;
    1491     case 151 : 
     1491    case 151 :
    14921492    {
    14931493      int a=lnumber_value(CAR(args));
    14941494      if (a<0 || a>=TOTAL_ABILITIES)
    14951495      {
    1496         lprint(args);
    1497         lbreak("bad ability number for get_ability, should be 0..%d, not %d\n",
    1498                 TOTAL_ABILITIES,a);
    1499         exit(0);
     1496    lprint(args);
     1497    lbreak("bad ability number for get_ability, should be 0..%d, not %d\n",
     1498        TOTAL_ABILITIES,a);
     1499    exit(0);
    15001500      }
    15011501      return get_ability(current_object->otype,(ability)a);
     
    15061506      if (!v) dprintf("Can't use reset_player on non-players\n");
    15071507      else
    1508         v->reset_player();           
     1508        v->reset_player();   
    15091509    } break;
    15101510    case 153 :
     
    15241524      int32_t yvel=-(lisp_sin(ang)>>8)*(mag>>8);
    15251525      current_object->set_yvel(yvel>>16);
    1526       current_object->set_fyvel((yvel&0xffff)>>8);     
     1526      current_object->set_fyvel((yvel&0xffff)>>8);
    15271527    } break;
    15281528    case 155 :
     
    15301530      int tframes=current_object->total_frames(),f;
    15311531
    1532       int32_t ang1=lnumber_value(CAR(args)); args=CDR(args);     
    1533       if (ang1<0) ang1=(ang1%360)+360; 
     1532      int32_t ang1=lnumber_value(CAR(args)); args=CDR(args);
     1533      if (ang1<0) ang1=(ang1%360)+360;
    15341534      else if (ang1>=360) ang1=ang1%360;
    1535       int32_t ang2=lnumber_value(CAR(args)); args=CDR(args);     
    1536       if (ang2<0) ang2=(ang2%360)+360; 
     1535      int32_t ang2=lnumber_value(CAR(args)); args=CDR(args);
     1536      if (ang2<0) ang2=(ang2%360)+360;
    15371537      else if (ang2>=360) ang2=ang2%360;
    15381538
     
    15401540      if (ang1>ang2)
    15411541      {
    1542         if (ang<ang1 && ang>ang2)      
    1543           return 0;
    1544         else if (ang>=ang1)     
    1545           f=(ang-ang1)*tframes/(359-ang1+ang2+1);
    1546         else
    1547           f=(359-ang1+ang)*tframes/(359-ang1+ang2+1);
     1542        if (ang<ang1 && ang>ang2)    
     1543      return 0;
     1544    else if (ang>=ang1)   
     1545      f=(ang-ang1)*tframes/(359-ang1+ang2+1);
     1546    else
     1547      f=(359-ang1+ang)*tframes/(359-ang1+ang2+1);
    15481548      } else if (ang<ang1 || ang>ang2)
    15491549        return 0;
     
    15671567      int32_t am=lnumber_value(CAR(args)); args=CDR(args);
    15681568      game_object *from=(game_object *)lpointer_value(CAR(args)); args=CDR(args);
    1569       int32_t hitx=lnumber_value(CAR(args)); args=CDR(args);     
    1570       int32_t hity=lnumber_value(CAR(args)); args=CDR(args);     
    1571       int32_t px=lnumber_value(CAR(args)); args=CDR(args);     
     1569      int32_t hitx=lnumber_value(CAR(args)); args=CDR(args);
     1570      int32_t hity=lnumber_value(CAR(args)); args=CDR(args);
     1571      int32_t px=lnumber_value(CAR(args)); args=CDR(args);
    15721572      int32_t py=lnumber_value(CAR(args)); args=CDR(args);
    15731573      current_object->damage_fun(am,from,hitx,hity,px,py);
     
    15791579      if (!v) dprintf("make_view_solid : object has no view\n");
    15801580      else
    1581         v->draw_solid=lnumber_value(CAR(args));     
     1581        v->draw_solid=lnumber_value(CAR(args));
    15821582    } break;
    15831583    case 172 :
     
    15891589      if (r<0 || b<0 || g<0 || r>255 || g>255 || b>255)
    15901590      {
    1591         lprint(args);
    1592         lbreak("color out of range (0..255) in color lookup\n");
    1593         exit(0);
     1591    lprint(args);
     1592    lbreak("color out of range (0..255) in color lookup\n");
     1593    exit(0);
    15941594      }
    15951595      return color_table->lookup_color(r>>3,g>>3,b>>3);
     
    16301630      bg_xdiv=lnumber_value(CAR(args)); args=CDR(args);
    16311631      bg_ymul=lnumber_value(CAR(args)); args=CDR(args);
    1632       bg_ydiv=lnumber_value(CAR(args)); 
     1632      bg_ydiv=lnumber_value(CAR(args));
    16331633      if (bg_xdiv==0) { bg_xdiv=1; lprint(args); dprintf("bg_set_scroll : cannot set xdiv to 0\n"); }
    16341634      if (bg_ydiv==0) { bg_ydiv=1; lprint(args); dprintf("bg_set_scroll : cannot set ydiv to 0\n"); }
    16351635    } break;
    1636     case 179 : 
     1636    case 179 :
    16371637    {
    16381638      view *v=lget_view(CAR(args),"set_ambient_light");       args=CDR(args);
     
    16411641    } break;
    16421642    case 180 : return lget_view(CAR(args),"ambient_light")->ambient; break;
    1643     case 181 : 
     1643    case 181 :
    16441644    {
    16451645      int x=current_object->total_objects();
     
    16581658    case 189 : return current_object->fxacel(); break;
    16591659    case 190 : return current_object->fyacel(); break;
    1660     case 191 : 
    1661     {
    1662 //      char *fn=lstring_value(CAR(args)); args=CDR(args);     
     1660    case 191 :
     1661    {
     1662//      char *fn=lstring_value(CAR(args)); args=CDR(args);
    16631663//      stat_bar=cache.reg_object(fn,CAR(args),SPEC_IMAGE,1);
    16641664    } break;
    1665     case 192 : 
    1666     {     
     1665    case 192 :
     1666    {
    16671667      int32_t x=lnumber_value(CAR(args)); args=CDR(args);
    16681668      int32_t y=lnumber_value(CAR(args)); args=CDR(args);
     
    16701670      if (x<0 || y<0 || x>=current_level->foreground_width() || y>=current_level->foreground_width())
    16711671        lbreak("%d %d is out of range of fg map",x,y);
    1672       else     
     1672      else   
    16731673        current_level->put_fg(x,y,type);
    16741674    } break;
    16751675    case 193 :
    1676     { 
     1676    {
    16771677      int32_t x=lnumber_value(CAR(args)); args=CDR(args);
    16781678      int32_t y=lnumber_value(CAR(args));
     
    16811681      else return current_level->get_fg(x,y);
    16821682    } break;
    1683     case 194 : 
    1684     {     
     1683    case 194 :
     1684    {
    16851685      int32_t x=lnumber_value(CAR(args)); args=CDR(args);
    16861686      int32_t y=lnumber_value(CAR(args)); args=CDR(args);
     
    16881688      if (x<0 || y<0 || x>=current_level->background_width() || y>=current_level->background_width())
    16891689        lbreak("%d %d is out of range of fg map",x,y);
    1690       else     
     1690      else   
    16911691        current_level->put_bg(x,y,type);
    16921692    } break;
    16931693    case 195 :
    1694     { 
     1694    {
    16951695      int32_t x=lnumber_value(CAR(args)); args=CDR(args);
    16961696      int32_t y=lnumber_value(CAR(args));
     
    17051705      if (fp->open_failure())
    17061706      {
    1707         delete fp;
     1707    delete fp;
    17081708        lbreak("load_palette : could not open file %s for reading",lstring_value(CAR(args)));
    1709         exit(1);
     1709    exit(1);
    17101710      } else
    17111711      {
    1712         spec_directory sd(fp);
    1713         spec_entry *se=sd.find(SPEC_PALETTE);
    1714         if (!se) lbreak("File %s has no palette!\n",lstring_value(CAR(args)));
    1715         else
    1716         {
    1717           if (pal) delete pal;
    1718           pal=new palette(se,fp);
    1719         }
    1720         delete fp;
     1712    spec_directory sd(fp);
     1713    spec_entry *se=sd.find(SPEC_PALETTE);
     1714    if (!se) lbreak("File %s has no palette!\n",lstring_value(CAR(args)));
     1715    else
     1716    {
     1717      if (pal) delete pal;
     1718      pal=new palette(se,fp);
     1719    }
     1720    delete fp;
    17211721      }
    17221722    } break;
     
    17261726      if (fp->open_failure())
    17271727      {
    1728         delete fp;
     1728    delete fp;
    17291729        lbreak("load_color_filter : could not open file %s for reading",lstring_value(CAR(args)));
    1730         exit(1);
     1730    exit(1);
    17311731      } else
    17321732      {
    1733         spec_directory sd(fp);
    1734         spec_entry *se=sd.find(SPEC_COLOR_TABLE);
    1735         if (!se) lbreak("File %s has no color filter!",lstring_value(CAR(args)));
    1736         else
    1737         {
    1738           if (color_table) delete color_table;
    1739           color_table=new color_filter(se,fp);
    1740         }
    1741         delete fp;
     1733    spec_directory sd(fp);
     1734    spec_entry *se=sd.find(SPEC_COLOR_TABLE);
     1735    if (!se) lbreak("File %s has no color filter!",lstring_value(CAR(args)));
     1736    else
     1737    {
     1738      if (color_table) delete color_table;
     1739      color_table=new color_filter(se,fp);
     1740    }
     1741    delete fp;
    17421742      }
    17431743    } break;
     
    17541754      if (args)
    17551755        if (!CAR(args)) top=0;
    1756        
     1756
    17571757      int32_t oxv=xv,oyv=yv;
    17581758      current_object->try_move(current_object->x,current_object->y,xv,yv,1|top);
     
    17671767    } break;
    17681768    case 202 :
    1769     { 
     1769    {
    17701770      int32_t x1=lnumber_value(CAR(args)); args=CDR(args);
    17711771      int32_t y1=lnumber_value(CAR(args)); args=CDR(args);
     
    17761776      current_level->foreground_intersect(x1,y1,x2,y2);
    17771777      if (x2!=nx2 || y2!=ny2) return 0;
    1778      
     1778
    17791779      if (block_all)
    17801780        current_level->all_boundary_setback(current_object,x1,y1,x2,y2);
     
    17881788      char *fn=lstring_value(CAR(args)); args=CDR(args);
    17891789      char *name=lstring_value(CAR(args));
    1790       big_font_pict=cache.reg(fn,name,SPEC_IMAGE,1);     
     1790      big_font_pict=cache.reg(fn,name,SPEC_IMAGE,1);
    17911791    } break;
    17921792    case 204 :
     
    17941794      char *fn=lstring_value(CAR(args)); args=CDR(args);
    17951795      char *name=lstring_value(CAR(args));
    1796       small_font_pict=cache.reg(fn,name,SPEC_IMAGE,1);     
     1796      small_font_pict=cache.reg(fn,name,SPEC_IMAGE,1);
    17971797    } break;
    17981798    case 205 :
     
    18001800      char *fn=lstring_value(CAR(args)); args=CDR(args);
    18011801      char *name=lstring_value(CAR(args));
    1802       console_font_pict=cache.reg(fn,name,SPEC_IMAGE,1);     
     1802      console_font_pict=cache.reg(fn,name,SPEC_IMAGE,1);
    18031803    } break;
    18041804    case 206 :
     
    18071807      if (x<current_object->total_frames())
    18081808        current_object->current_frame=x;
    1809       else     
    1810         lbreak("%d out of range for set_current_frame",x);
    1811     } break;
    1812    
     1809      else
     1810    lbreak("%d out of range for set_current_frame",x);
     1811    } break;
     1812
    18131813    case 208 :
    18141814    {
     
    18901890    case 224 :
    18911891    {
    1892       current_object->set_hp(lnumber_value(CAR(args)));   
     1892      current_object->set_hp(lnumber_value(CAR(args)));
    18931893    } break;
    18941894    case 225 :
     
    19241924      for (int i=0;i<256;i++)
    19251925      {
    1926         r=(int)*addr+ra; if (r>255) r=255; else if (r<0) r=0; *addr=(uint8_t)r; addr++;
    1927         g=(int)*addr+ga; if (g>255) g=255; else if (g<0) g=0; *addr=(uint8_t)g; addr++;
    1928         b=(int)*addr+ba; if (b>255) b=255; else if (b<0) b=0; *addr=(uint8_t)b; addr++;
     1926    r=(int)*addr+ra; if (r>255) r=255; else if (r<0) r=0; *addr=(uint8_t)r; addr++;
     1927    g=(int)*addr+ga; if (g>255) g=255; else if (g<0) g=0; *addr=(uint8_t)g; addr++;
     1928    b=(int)*addr+ba; if (b>255) b=255; else if (b<0) b=0; *addr=(uint8_t)b; addr++;
    19291929      }
    19301930      p->load();
     
    19411941      view *v=current_object->controller();
    19421942      if (!v) lbreak("object has no view : local_player");
    1943       else 
    1944       {
    1945         int32_t x=lnumber_value(CAR(args));
    1946         if (x<0 || x>=total_weapons)
    1947         { lbreak("weapon out of range (%d)\n",x); exit(0); }
    1948         v->current_weapon=x;   
     1943      else
     1944      {
     1945    int32_t x=lnumber_value(CAR(args));
     1946    if (x<0 || x>=total_weapons)
     1947    { lbreak("weapon out of range (%d)\n",x); exit(0); }
     1948    v->current_weapon=x;   
    19491949      }
    19501950    } break;
     
    19601960    } break;
    19611961
    1962     case 233 : 
     1962    case 233 :
    19631963    { int x=0; view *v=player_list; for (;v;v=v->next,x++); return x; } break;
    19641964
     
    19781978    } break;
    19791979    case 235 :
    1980     { if (current_level) return current_level->tick_counter(); 
     1980    { if (current_level) return current_level->tick_counter();
    19811981      else return 0; } break;
    19821982    case 236 :
     
    19971997    { current_level->to_back(current_object); } break;
    19981998    case 241 :
    1999     { 
     1999    {
    20002000      view *v=current_object->controller();
    20012001      if (!v) { lprint(args); printf("get_player_inputs : object has no view!\n"); }
     
    20032003    } break;
    20042004    case 242 :
    2005     { 
     2005    {
    20062006      view *v=current_object->controller();
    20072007      if (!v) { lprint(args); printf("get_player_inputs : object has no view!\n"); }
     
    20442044      int32_t cx2=lnumber_value(CAR(args)); args=lcdr(args);
    20452045      int32_t cy2=lnumber_value(CAR(args)); args=lcdr(args);
    2046       int32_t c1=lnumber_value(CAR(args)); args=lcdr(args);     
     2046      int32_t c1=lnumber_value(CAR(args)); args=lcdr(args);
    20472047      screen->bar(cx1,cy1,cx2,cy2,c1);
    20482048    } break;
     
    20552055      if ((sound_avail&MUSIC_INITIALIZED))
    20562056      {
    2057         char *fn=lstring_value(CAR(args));
    2058         if (current_song)
    2059         {
    2060           if (current_song->playing())
    2061           current_song->stop();
    2062           delete current_song;
    2063         }
    2064         current_song=new song(fn);
    2065         current_song->play(music_volume);
    2066         dprintf("Playing %s at volume %d\n",fn,music_volume);
     2057    char *fn=lstring_value(CAR(args));
     2058    if (current_song)
     2059    {
     2060      if (current_song->playing())
     2061      current_song->stop();
     2062      delete current_song;
     2063    }
     2064    current_song=new song(fn);
     2065    current_song->play(music_volume);
     2066    dprintf("Playing %s at volume %d\n",fn,music_volume);
    20672067      }
    20682068    } break;
     
    21052105      view *v=current_object->controller();
    21062106      if (!v) { lprint(args); printf("get_player_inputs : object has no view!\n"); }
    2107       else v->kills=lnumber_value(CAR(args)); 
     2107      else v->kills=lnumber_value(CAR(args));
    21082108    } break;
    21092109    case 259 :
     
    21112111      view *v=current_object->controller();
    21122112      if (!v) { lprint(args); printf("get_player_inputs : object has no view!\n"); }
    2113       else v->tkills=lnumber_value(CAR(args)); 
     2113      else v->tkills=lnumber_value(CAR(args));
    21142114    } break;
    21152115    case 260 :
     
    21172117      view *v=current_object->controller();
    21182118      if (!v) { lprint(args); printf("get_player_inputs : object has no view!\n"); }
    2119       else v->secrets=lnumber_value(CAR(args)); 
     2119      else v->secrets=lnumber_value(CAR(args));
    21202120    } break;
    21212121    case 261 :
     
    21232123      view *v=current_object->controller();
    21242124      if (!v) { lprint(args); printf("get_player_inputs : object has no view!\n"); }
    2125       else v->tsecrets=lnumber_value(CAR(args)); 
     2125      else v->tsecrets=lnumber_value(CAR(args));
    21262126    } break;
    21272127    case 262 :
     
    21882188    } break;
    21892189    case 276 :
    2190     {     
     2190    {
    21912191      if (!main_net_cfg) return 0;
    21922192      return become_server(game_name);
     
    22102210      view *v=current_object->controller();
    22112211      if (!v) { lbreak("get_player_name : object has no view!\n"); }
    2212       else strcpy(v->name,lstring_value(CAR(args))); 
     2212      else strcpy(v->name,lstring_value(CAR(args)));
    22132213    } break;
    22142214    case 282 :
     
    22482248      if (change_dir(lstring_value(CAR(args))))
    22492249        return 1;
    2250       else return 0;     
     2250      else return 0;
    22512251    } break;
    22522252    case 287 :
     
    22542254      void *title=CAR(args); args=CDR(args);
    22552255      void *source=CAR(args); args=CDR(args);
    2256       void *dest=CAR(args); args=CDR(args); 
    2257 
    2258       return nice_copy(lstring_value(title),lstring_value(source),lstring_value(dest));     
     2256      void *dest=CAR(args); args=CDR(args);
     2257
     2258      return nice_copy(lstring_value(title),lstring_value(source),lstring_value(dest));
    22592259    } break;
    22602260    case 288 :
     
    22642264    case 289 :
    22652265    {
    2266       set_login(lstring_value(CAR(args)));   
     2266      set_login(lstring_value(CAR(args)));
    22672267    } break;
    22682268    case 290 :
     
    22832283      if (main_net_cfg && (main_net_cfg->state==net_configuration::CLIENT || main_net_cfg->state==net_configuration::SERVER))
    22842284      {
    2285         view *v=player_list;
    2286         for (;v;v=v->next)
    2287            if (v->kills>=main_net_cfg->kills)
    2288              return 1;
    2289        
     2285    view *v=player_list;
     2286    for (;v;v=v->next)
     2287       if (v->kills>=main_net_cfg->kills)
     2288         return 1;
     2289   
    22902290
    22912291      } else return 0;
     
    22962296      for (;v;v=v->next)
    22972297      {
    2298         v->tkills+=v->kills;
     2298    v->tkills+=v->kills;
    22992299
    23002300        v->kills=0;
    2301         game_object *o=current_object;
    2302         current_object=v->focus;
    2303 
    2304         eval_function((lisp_symbol *)l_restart_player,NULL);
    2305         v->reset_player();
    2306         v->focus->set_aistate(0);
    2307         current_object=o;       
     2301    game_object *o=current_object;
     2302    current_object=v->focus;
     2303
     2304    eval_function((lisp_symbol *)l_restart_player,NULL);
     2305    v->reset_player();
     2306    v->focus->set_aistate(0);
     2307    current_object=o;   
    23082308      }
    23092309
     
    23372337    {
    23382338      case L_FIXED_POINT :
    2339       case L_NUMBER : 
    2340       { return lnumber_value(v); } break; 
    2341       default : return def;                  
     2339      case L_NUMBER :
     2340      { return lnumber_value(v); } break;
     2341      default : return def;       
    23422342    }
    23432343  } else return def;
  • abuse/trunk/src/clisp.hpp

    r58 r124  
    1616extern void *l_statbar_ammo_x,*l_statbar_ammo_y,
    1717            *l_statbar_ammo_w,*l_statbar_ammo_h,
    18             *l_statbar_ammo_bg_color,
     18        *l_statbar_ammo_bg_color,
    1919
    2020            *l_statbar_health_x,*l_statbar_health_y,
    2121            *l_statbar_health_w,*l_statbar_health_h,
    22             *l_statbar_health_bg_color,
     22        *l_statbar_health_bg_color,
    2323
    24             *l_statbar_logo_x,*l_statbar_logo_y,
    25             *l_object,*l_tile,*l_fire_object,
    26             *l_player_draw,*l_sneaky_draw,
    27             *l_draw_fast,*l_player_tints,*l_next_song,
    28             *l_level_load_start,
    29             *l_level_load_end,
    30             *l_cdc_logo,
    31             *l_keep_backup,
    32             *l_switch_to_powerful,
    33             *l_mouse_can_switch,
    34             *l_ask_save_slot,
    35             *l_get_local_input,
    36             *l_post_render,
    37             *l_chat_input,
    38             *l_player_text_color,
    39             *l_level_loaded;        // called when a new level is loaded
     24        *l_statbar_logo_x,*l_statbar_logo_y,
     25        *l_object,*l_tile,*l_fire_object,
     26        *l_player_draw,*l_sneaky_draw,
     27        *l_draw_fast,*l_player_tints,*l_next_song,
     28        *l_level_load_start,
     29        *l_level_load_end,
     30        *l_cdc_logo,
     31        *l_keep_backup,
     32        *l_switch_to_powerful,
     33        *l_mouse_can_switch,
     34        *l_ask_save_slot,
     35        *l_get_local_input,
     36        *l_post_render,
     37        *l_chat_input,
     38        *l_player_text_color,
     39        *l_level_loaded;        // called when a new level is loaded
    4040
    4141
  • abuse/trunk/src/collide.cpp

    r56 r124  
    1717  public :
    1818  int32_t total,x1,y1,x2,y2;
    19   game_object **touch; 
     19  game_object **touch;
    2020  collide_patch *next;
    2121  collide_patch(int32_t X1, int32_t Y1, int32_t X2, int32_t Y2, collide_patch *Next)
    22   { 
     22  {
    2323    x1=X1; y1=Y1; x2=X2; y2=Y2;
    2424    next=Next;
     
    3333
    3434collide_patch *collide_patch::copy(collide_patch *Next)
    35 { 
    36   collide_patch *p=new collide_patch(x1,y1,x2,y2,Next); 
     35{
     36  collide_patch *p=new collide_patch(x1,y1,x2,y2,Next);
    3737  p->total=total;
    38   if (total)   
     38  if (total)
    3939  {
    4040    p->touch=(game_object **)jmalloc(total*sizeof(game_object *),"collide patches");
    4141    memcpy(p->touch,touch,total*(sizeof(game_object *)));
    4242  }
    43   else 
    44     p->touch=NULL; 
     43  else
     44    p->touch=NULL;
    4545  return p;
    4646}
    4747
    4848
    49 void add_collide(collide_patch *&first, int32_t x1, int32_t y1, int32_t x2, int32_t y2, 
    50                             game_object *who)
     49void add_collide(collide_patch *&first, int32_t x1, int32_t y1, int32_t x2, int32_t y2,
     50                game_object *who)
    5151{
    5252  collide_patch *next;
     
    5959      if (x1>p->x1)
    6060      {
    61         first=p->copy(first);
    62         first->x2=x1-1;
     61    first=p->copy(first);
     62    first->x2=x1-1;
    6363      }
    6464      if (x2<p->x2)
    6565      {
    66         first=p->copy(first);
    67         first->x1=x2+1;
     66    first=p->copy(first);
     67    first->x1=x2+1;
    6868      }
    6969      if (y1>p->y1)
    7070      {
    71         first=p->copy(first);
    72         first->x1=x1;
    73         first->x2=x2;
    74         first->y2=y1-1;
     71    first=p->copy(first);
     72    first->x1=x1;
     73    first->x2=x2;
     74    first->y2=y1-1;
    7575      }
    7676      if (y2<p->y2)
    7777      {
    78         first=p->copy(first);
    79         first->x1=x1;
    80         first->x2=x2;
    81         first->y1=y2+1;
     78    first=p->copy(first);
     79    first->x1=x1;
     80    first->x2=x2;
     81    first->y1=y2+1;
    8282      }
    8383      p->x1=x1; p->y1=y1; p->x2=x2; p->y2=y2;
    8484
    85       p->total++;     
     85      p->total++;
    8686      p->touch=(game_object **)jrealloc(p->touch,sizeof(game_object *)*p->total,"object_patch_list");
    8787      p->touch[p->total-1]=who;
     
    100100      if (y2>p->y2)
    101101        add_collide(first,p->x1,p->y2+1,p->x2,y2,who);
    102       p->total++;     
     102      p->total++;
    103103      p->touch=(game_object **)jrealloc(p->touch,sizeof(game_object *)*p->total,"object_patch_list");
    104104      p->touch[p->total-1]=who;
     
    107107
    108108    // see if we intersect another rect
    109     if (!(x2<p->x1 || y2<p->y1 || x1>p->x2 || y1>p->y2)) 
     109    if (!(x2<p->x1 || y2<p->y1 || x1>p->x2 || y1>p->y2))
    110110    {
    111111      int ax1,ay1,ax2,ay2;
     
    113113      {
    114114        add_collide(first,x1,max(y1,p->y1),p->x1-1,min(y2,p->y2),who);
    115         ax1=p->x1;
     115    ax1=p->x1;
    116116      } else
    117         ax1=x1;
     117    ax1=x1;
    118118
    119119      if (x2>p->x2)
    120120      {
    121121        add_collide(first,p->x2+1,max(y1,p->y1),x2,min(y2,p->y2),who);
    122         ax2=p->x2;
    123       } 
     122    ax2=p->x2;
     123      }
    124124      else
    125         ax2=x2;
     125    ax2=x2;
    126126
    127127      if (y1<p->y1)
    128       {       
     128      {
    129129        add_collide(first,x1,y1,x2,p->y1-1,who);
    130         ay1=p->y1;
    131       } else 
    132         ay1=y1;
     130    ay1=p->y1;
     131      } else
     132    ay1=y1;
    133133
    134134      if (y2>p->y2)
    135135      {
    136136        add_collide(first,x1,p->y2+1,x2,y2,who);
    137         ay2=p->y2;
    138       } else 
    139         ay2=y2;
    140 
    141        
    142       add_collide(first,ax1,ay1,ax2,ay2,who);     
    143 
    144       return ;   
    145     }
    146 
    147   }
    148  
     137    ay2=p->y2;
     138      } else
     139    ay2=y2;
     140
     141
     142      add_collide(first,ax1,ay1,ax2,ay2,who);
     143
     144      return ;
     145    }
     146
     147  }
     148
    149149  first=new collide_patch(x1,y1,x2,y2,first);
    150150  first->total=1;
     
    166166    subject->picture_space(sx1,sy1,sx2,sy2);
    167167    rec=NULL;
    168    
     168
    169169
    170170    for (int j=0;j<target_total && !rec;j++)
    171171    {
    172       target=target_list[j];   
     172      target=target_list[j];   
    173173      target->picture_space(tx1,ty1,tx2,ty2);
    174174      if (!(sx2<tx1 || sy2<ty1 || sx1>tx2 || sy1>ty2))  // check to see if picture spaces collide
    175175      {
    176176
    177         try_pushback(subject,target);
    178 
    179         if (subject->can_hurt(target))    // see if we can hurt him before calculating
    180         {
    181           t_centerx=target->x_center();
    182           point_list *s_hit,*t_damage;
    183          
    184           s_hit=subject->current_figure()->hit;
    185 
    186           if (target->direction>0)
    187             t_damage=target->current_figure()->f_damage;
    188           else
    189             t_damage=target->current_figure()->b_damage;
    190 
    191           unsigned char *s_dat=s_hit->data,*t_dat;
    192           int i,j;
    193           for (i=(int)s_hit->tot-1;i>0 && !rec;i--)
    194           {
    195             for (t_dat=t_damage->data,j=(int)t_damage->tot-1;j>0 && !rec;j--)
    196             {
    197               int32_t x1,y1,x2,y2,          // define the two line segments to check
    198               xp1,yp1,xp2,yp2;
    199 
    200               xp1=target->x+target->tx(*t_dat);  t_dat++;            
    201               yp1=target->y+target->ty(*t_dat);  t_dat++;
    202               xp2=target->x+target->tx(*t_dat);
    203               yp2=target->y+target->ty(t_dat[1]);
    204 
    205               x1=subject->x+subject->tx(s_dat[0]); 
    206               y1=subject->y+subject->ty(s_dat[1]);
    207               x2=subject->x+subject->tx(s_dat[2]);
    208               y2=subject->y+subject->ty(s_dat[3]);
    209              
    210 
    211               // ok, now we know which line segemnts to check for intersection
    212               // now check to see if (x1,y1-x2,y2) intercest with (xp1,yp1-xp2,yp2)
    213               int32_t _x2=x2,_y2=y2;         
    214               setback_intersect(x1, y1, x2, y2, xp1, yp1, xp2, yp2,0);
    215 
    216 
    217               if (x2!=_x2 || _y2!=y2)
    218               {
    219                 rec=target;
    220                 hitx=((x1+x2)/2+(xp1+xp2)/2)/2;
    221                 hity=((y1+y1)/2+(yp1+yp2)/2)/2;
    222               }
    223             }
    224             s_dat+=2;
    225           }     
    226         }
     177    try_pushback(subject,target);
     178
     179    if (subject->can_hurt(target))    // see if we can hurt him before calculating
     180    {
     181      t_centerx=target->x_center();
     182      point_list *s_hit,*t_damage;
     183   
     184      s_hit=subject->current_figure()->hit;
     185
     186      if (target->direction>0)
     187        t_damage=target->current_figure()->f_damage;
     188      else
     189        t_damage=target->current_figure()->b_damage;
     190
     191      unsigned char *s_dat=s_hit->data,*t_dat;
     192      int i,j;
     193      for (i=(int)s_hit->tot-1;i>0 && !rec;i--)
     194      {
     195        for (t_dat=t_damage->data,j=(int)t_damage->tot-1;j>0 && !rec;j--)
     196        {
     197          int32_t x1,y1,x2,y2,          // define the two line segments to check
     198          xp1,yp1,xp2,yp2;
     199
     200          xp1=target->x+target->tx(*t_dat);  t_dat++;   
     201          yp1=target->y+target->ty(*t_dat);  t_dat++;
     202          xp2=target->x+target->tx(*t_dat);
     203          yp2=target->y+target->ty(t_dat[1]);
     204
     205          x1=subject->x+subject->tx(s_dat[0]);
     206          y1=subject->y+subject->ty(s_dat[1]);
     207          x2=subject->x+subject->tx(s_dat[2]);
     208          y2=subject->y+subject->ty(s_dat[3]);
     209   
     210
     211          // ok, now we know which line segemnts to check for intersection
     212          // now check to see if (x1,y1-x2,y2) intercest with (xp1,yp1-xp2,yp2)
     213          int32_t _x2=x2,_y2=y2;   
     214          setback_intersect(x1, y1, x2, y2, xp1, yp1, xp2, yp2,0);
     215
     216
     217          if (x2!=_x2 || _y2!=y2)
     218          {
     219        rec=target;
     220        hitx=((x1+x2)/2+(xp1+xp2)/2)/2;
     221        hity=((y1+y1)/2+(yp1+yp2)/2)/2;
     222          }
     223        }
     224        s_dat+=2;
     225      }       
     226    }
    227227      }
    228228    }
     
    231231      rec->do_damage((int)subject->current_figure()->hit_damage,subject,hitx,hity,0,0);
    232232      subject->note_attack(rec);
    233     }   
     233    }
    234234  }
    235235}
  • abuse/trunk/src/compiled.cpp

    r56 r124  
    149149void compiled_uninit()
    150150{
    151   if (bad_guy_array) 
     151  if (bad_guy_array)
    152152    jfree(bad_guy_array);
    153153}
  • abuse/trunk/src/compiled.hpp

    r57 r124  
    1414            S_turn_around,S_fire_wait,S_ceil_fire,S_top_walk,
    1515            S_blown_back_dead,S_jump_up,S_hiding,S_weapon_fire,
    16             S_hanging,S_blocking,S_rotate,S_climbing,S_climb_off,
    17             S_fly_stopped,S_fast_stopped,S_fast_running,S_fly_running,
    18             S_fly_start_run_jump,S_fly_run_jump,S_fly_run_jump_fall,S_fly_end_run_jump,
    19             S_fast_start_run_jump,S_fast_run_jump,S_fast_run_jump_fall,S_fast_end_run_jump,
    20             S_bright_tint,S_climb_on,
     16        S_hanging,S_blocking,S_rotate,S_climbing,S_climb_off,
     17        S_fly_stopped,S_fast_stopped,S_fast_running,S_fly_running,
     18        S_fly_start_run_jump,S_fly_run_jump,S_fly_run_jump_fall,S_fly_end_run_jump,
     19        S_fast_start_run_jump,S_fast_run_jump,S_fast_run_jump_fall,S_fast_end_run_jump,
     20        S_bright_tint,S_climb_on,
    2121
    22             S_ALAND_SND,S_ASCREAM_SND,S_ASLASH_SND,
    23             S_ROCKET_TOP,S_BFG_TOP,S_GRENADE_TOP,S_DFRIS_TOP,S_FIREBOMB_TOP,S_ANT_ROOF,
    24             S_MGUN_TOP,S_CLOUD,S_HIDDEN_ANT,
    25             S_health_image,S_fly_image,S_fast_image,
    26             S_sneaky_image,S_EXPLODE5,S_EXPLODE3,S_ROCKET,
    27             S_TRACK_GUN,S_SPRAY_GUN,S_LPING_SND,S_FLY_SND,S_SPEED_SND,S_SCARE_SND,
    28             S_LOW_HEALTH_SND,S_BUTTON_PRESS_SND,
    29             S_LINK_SND,S_DELETE_SND;
     22        S_ALAND_SND,S_ASCREAM_SND,S_ASLASH_SND,
     23        S_ROCKET_TOP,S_BFG_TOP,S_GRENADE_TOP,S_DFRIS_TOP,S_FIREBOMB_TOP,S_ANT_ROOF,
     24        S_MGUN_TOP,S_CLOUD,S_HIDDEN_ANT,
     25        S_health_image,S_fly_image,S_fast_image,
     26        S_sneaky_image,S_EXPLODE5,S_EXPLODE3,S_ROCKET,
     27        S_TRACK_GUN,S_SPRAY_GUN,S_LPING_SND,S_FLY_SND,S_SPEED_SND,S_SCARE_SND,
     28        S_LOW_HEALTH_SND,S_BUTTON_PRESS_SND,
     29        S_LINK_SND,S_DELETE_SND;
    3030
    31            
     31   
    3232
    3333void compiled_init();
  • abuse/trunk/src/config.cpp

    r106 r124  
    2727struct player_keys
    2828{
    29         int joy, left, right, up, down, b1, b2, b3, b4;
     29    int joy, left, right, up, down, b1, b2, b3, b4;
    3030};
    3131
     
    3434static int binding_for_player( int player )
    3535{
    36         char tmp[40];
    37         sprintf( tmp, "player%d", player );
    38         Cell *f = find_symbol( tmp );
    39         if( !NILP( f ) && DEFINEDP( symbol_value( f ) ) )
    40         {
    41                 void *what = symbol_value( f );
    42                 if( what == make_find_symbol( "keyboard" ) )
    43                         return 1;
    44                 else if( what == make_find_symbol( "joystick" ) )
    45                         return 2;
    46         }
    47         return 0;
     36    char tmp[40];
     37    sprintf( tmp, "player%d", player );
     38    Cell *f = find_symbol( tmp );
     39    if( !NILP( f ) && DEFINEDP( symbol_value( f ) ) )
     40    {
     41        void *what = symbol_value( f );
     42        if( what == make_find_symbol( "keyboard" ) )
     43            return 1;
     44        else if( what == make_find_symbol( "joystick" ) )
     45            return 2;
     46    }
     47    return 0;
    4848}
    4949
     
    5151int get_key_binding(char const *dir, int i)
    5252{
    53         char tmp[100], kn[50];
    54         sprintf( tmp, "player%d-%s", i, dir );
    55         Cell *f = find_symbol( tmp );
    56         if( NILP(f) || !DEFINEDP( symbol_value( f ) ) )
    57                 return 0;
    58         void *k = symbol_value( f );
    59 
    60         if( item_type( k ) != L_SYMBOL )
    61                 return 0;
     53    char tmp[100], kn[50];
     54    sprintf( tmp, "player%d-%s", i, dir );
     55    Cell *f = find_symbol( tmp );
     56    if( NILP(f) || !DEFINEDP( symbol_value( f ) ) )
     57        return 0;
     58    void *k = symbol_value( f );
     59
     60    if( item_type( k ) != L_SYMBOL )
     61        return 0;
    6262
    6363#ifdef SCADALISP
    64         strcpy( tmp, symbol_name( k ) );
     64    strcpy( tmp, symbol_name( k ) );
    6565#else
    66         strcpy( tmp, lstring_value( symbol_name( k ) ) );
     66    strcpy( tmp, lstring_value( symbol_name( k ) ) );
    6767#endif
    6868
    69         for( char *c = tmp; *c; c++ )
    70         {
    71                 *c = tolower( *c );
    72                 if( *c == '_' )
    73                         *c = ' ';
    74         }
    75 
    76         for( int j = 0; j < JK_MAX_KEY; j++ )
    77         {
    78                 key_name( j, kn );
    79                 for( char *c = kn; *c; c++ )
    80                 {
    81                         *c = tolower(*c);
    82                 }
    83                 if( !strcmp( kn, tmp ) )
    84                         return j;
    85         }
    86         return 0;
     69    for( char *c = tmp; *c; c++ )
     70    {
     71        *c = tolower( *c );
     72        if( *c == '_' )
     73            *c = ' ';
     74    }
     75
     76    for( int j = 0; j < JK_MAX_KEY; j++ )
     77    {
     78        key_name( j, kn );
     79        for( char *c = kn; *c; c++ )
     80        {
     81            *c = tolower(*c);
     82        }
     83        if( !strcmp( kn, tmp ) )
     84            return j;
     85    }
     86    return 0;
    8787}
    8888*/
     
    9191void get_key_bindings()
    9292{
    93         if( key_map )
    94         {
    95                 jfree( key_map );
    96         }
    97         key_map = NULL;
    98 
    99         for( key_players = 0; binding_for_player( key_players + 1); key_players++ );
    100         if( key_players )
    101         {
    102                 key_map = ( player_keys *)jmalloc(sizeof(player_keys)*key_players,"key bindings");
    103                 for( int i = 0; i < key_players; i++ )
    104                 {
    105                         key_map[i].joy = ( binding_for_player( i + 1 ) == 2 );
    106                         if( !key_map[i].joy )
    107                         {
    108                                 key_map[i].left = get_key_binding( "left", i + 1 );
    109                                 key_map[i].right = get_key_binding( "right", i + 1 );
    110                                 key_map[i].up = get_key_binding( "up", i + 1 );
    111                                 key_map[i].down = get_key_binding( "down", i + 1 );
    112                                 key_map[i].b4 = get_key_binding( "b4", i + 1 );
    113                                 key_map[i].b3 = get_key_binding( "b3", i + 1 );
    114                                 key_map[i].b2 = get_key_binding( "b2", i + 1 );
    115                                 key_map[i].b1 = get_key_binding( "b1", i + 1 );
    116                         }
    117                 }
    118         }
    119         else
    120         {
    121                 key_map = NULL;
    122         }
     93    if( key_map )
     94    {
     95        jfree( key_map );
     96    }
     97    key_map = NULL;
     98
     99    for( key_players = 0; binding_for_player( key_players + 1); key_players++ );
     100    if( key_players )
     101    {
     102        key_map = ( player_keys *)jmalloc(sizeof(player_keys)*key_players,"key bindings");
     103        for( int i = 0; i < key_players; i++ )
     104        {
     105            key_map[i].joy = ( binding_for_player( i + 1 ) == 2 );
     106            if( !key_map[i].joy )
     107            {
     108                key_map[i].left = get_key_binding( "left", i + 1 );
     109                key_map[i].right = get_key_binding( "right", i + 1 );
     110                key_map[i].up = get_key_binding( "up", i + 1 );
     111                key_map[i].down = get_key_binding( "down", i + 1 );
     112                key_map[i].b4 = get_key_binding( "b4", i + 1 );
     113                key_map[i].b3 = get_key_binding( "b3", i + 1 );
     114                key_map[i].b2 = get_key_binding( "b2", i + 1 );
     115                key_map[i].b1 = get_key_binding( "b1", i + 1 );
     116            }
     117        }
     118    }
     119    else
     120    {
     121        key_map = NULL;
     122    }
    123123}*/
    124124
     
    126126void get_key_bindings()
    127127{
    128         if( key_map )
    129         {
    130                 jfree( key_map );
    131         }
    132         key_map = NULL;
    133 
    134         key_players = 1;
    135         key_map = (player_keys *)jmalloc( sizeof( player_keys ) * key_players, "key bindings" );
    136         for( int i = 0; i < key_players; i++ )
    137         {
    138                 key_map[i].joy = 0;
    139                 key_map[i].left = get_key_binding( "left", i + 1 );
    140                 key_map[i].right = get_key_binding( "right", i + 1 );
    141                 key_map[i].up = get_key_binding( "up", i + 1 );
    142                 key_map[i].down = get_key_binding( "down", i + 1 );
    143                 key_map[i].b4 = get_key_binding( "b4", i + 1 );
    144                 key_map[i].b3 = get_key_binding( "b3", i + 1 );
    145                 key_map[i].b2 = get_key_binding( "b2", i + 1 );
    146                 key_map[i].b1 = get_key_binding( "b1", i + 1 );
    147         }
     128    if( key_map )
     129    {
     130        jfree( key_map );
     131    }
     132    key_map = NULL;
     133
     134    key_players = 1;
     135    key_map = (player_keys *)jmalloc( sizeof( player_keys ) * key_players, "key bindings" );
     136    for( int i = 0; i < key_players; i++ )
     137    {
     138        key_map[i].joy = 0;
     139        key_map[i].left = get_key_binding( "left", i + 1 );
     140        key_map[i].right = get_key_binding( "right", i + 1 );
     141        key_map[i].up = get_key_binding( "up", i + 1 );
     142        key_map[i].down = get_key_binding( "down", i + 1 );
     143        key_map[i].b4 = get_key_binding( "b4", i + 1 );
     144        key_map[i].b3 = get_key_binding( "b3", i + 1 );
     145        key_map[i].b2 = get_key_binding( "b2", i + 1 );
     146        key_map[i].b1 = get_key_binding( "b1", i + 1 );
     147    }
    148148}
    149149
     
    153153void get_movement(int player, int &x, int &y, int &b1, int &b2, int &b3, int &b4)
    154154{
    155         if( player < key_players )
    156         {
    157 /*              if( key_map[player].joy )
    158                 {
    159                         joy_status( b1,b2,b3,x,y );
    160                         b3 = ( b1 && b2 );
    161                         b4 = 0;
    162                 }
    163                 else if( !wm )
    164                 {
    165                         x = y = b1 = b2 = b3 = b4 = 0;
    166                 }
    167                 else*/
    168                 {
    169                         if( is_pressed( key_map[player].left ) )
    170                                 x = -1;
    171                         else if( is_pressed( key_map[player].right ) )
    172                                 x=1;
    173                         else
    174                                 x = 0;
    175 
    176                         if( is_pressed( key_map[player].up ) )
    177                                 y = -1;
    178                         else if( is_pressed( key_map[player].down ) )
    179                                 y = 1;
    180                         else y = 0;
    181 
    182                         if( is_pressed( key_map[player].b1 ) )
    183                                 b1 = 1;
    184                         else
    185                                 b1 = 0;
    186 
    187                         if( is_pressed( key_map[player].b2 ) )
    188                                 b2 = 1;
    189                         else
    190                                 b2 = 0;
    191 
    192                         if( is_pressed( key_map[player].b3 ) )
    193                                 b3 = 1;
    194                         else
    195                                 b3 = 0;
    196 
    197                         if( is_pressed( key_map[player].b4 ) )
    198                                 b4 = 1;
    199                         else
    200                                 b4 = 0;
    201                 }
    202         }
    203         else
    204         {
    205                 x = y = b1 = b2 = b3 = 0;
    206         }
     155    if( player < key_players )
     156    {
     157/*        if( key_map[player].joy )
     158        {
     159            joy_status( b1,b2,b3,x,y );
     160            b3 = ( b1 && b2 );
     161            b4 = 0;
     162        }
     163        else if( !wm )
     164        {
     165            x = y = b1 = b2 = b3 = b4 = 0;
     166        }
     167        else*/
     168        {
     169            if( is_pressed( key_map[player].left ) )
     170                x = -1;
     171            else if( is_pressed( key_map[player].right ) )
     172                x=1;
     173            else
     174                x = 0;
     175
     176            if( is_pressed( key_map[player].up ) )
     177                y = -1;
     178            else if( is_pressed( key_map[player].down ) )
     179                y = 1;
     180            else y = 0;
     181
     182            if( is_pressed( key_map[player].b1 ) )
     183                b1 = 1;
     184            else
     185                b1 = 0;
     186
     187            if( is_pressed( key_map[player].b2 ) )
     188                b2 = 1;
     189            else
     190                b2 = 0;
     191
     192            if( is_pressed( key_map[player].b3 ) )
     193                b3 = 1;
     194            else
     195                b3 = 0;
     196
     197            if( is_pressed( key_map[player].b4 ) )
     198                b4 = 1;
     199            else
     200                b4 = 0;
     201        }
     202    }
     203    else
     204    {
     205        x = y = b1 = b2 = b3 = 0;
     206    }
    207207}
    208208
    209209void key_bindings(int player, int &left, int &right, int &up, int &down, int &b1, int &b2, int &b3, int &b4)
    210210{
    211         left = key_map[player].left;
    212         right = key_map[player].right;
    213         up = key_map[player].up;
    214         down = key_map[player].down;
    215         b1 = key_map[player].b1;
    216         b2 = key_map[player].b2;
    217         b3 = key_map[player].b3;
    218         b3 = key_map[player].b4;
     211    left = key_map[player].left;
     212    right = key_map[player].right;
     213    up = key_map[player].up;
     214    down = key_map[player].down;
     215    b1 = key_map[player].b1;
     216    b2 = key_map[player].b2;
     217    b3 = key_map[player].b3;
     218    b3 = key_map[player].b4;
    219219}
    220220
     
    235235int get_keycode(char const *str)
    236236{
    237         if( !str[0] )
    238         {
    239                 return -1;
    240         }
    241         else if( !str[1] )
    242         {
    243                 return str[0];
    244         }
    245         else
    246         {
    247                 int j;
    248                 char buf[20];
    249                 for( j = 256; j < JK_MAX_KEY; j++ )
    250                 {
    251                         key_name( j, buf );
    252                         char *c = buf;
    253                         for( ; *c; c++ )
    254                         {
    255                                 if( *c == ' ' )
    256                                 {
    257                                         *c = '_';
    258                                 }
    259                                 else
    260                                 {
    261                                         *c = tolower( *c );
    262                                 }
    263                         }
    264                         if( strcmp( str, buf ) == 0 )
    265                         {
    266                                 return j;
    267                         }
    268                 }
    269         }
    270         return -1;
    271 }
     237    if( !str[0] )
     238    {
     239        return -1;
     240    }
     241    else if( !str[1] )
     242    {
     243        return str[0];
     244    }
     245    else
     246    {
     247        int j;
     248        char buf[20];
     249        for( j = 256; j < JK_MAX_KEY; j++ )
     250        {
     251            key_name( j, buf );
     252            char *c = buf;
     253            for( ; *c; c++ )
     254            {
     255                if( *c == ' ' )
     256                {
     257                    *c = '_';
     258                }
     259                else
     260                {
     261                    *c = tolower( *c );
     262                }
     263            }
     264            if( strcmp( str, buf ) == 0 )
     265            {
     266                return j;
     267            }
     268        }
     269    }
     270    return -1;
     271}
  • abuse/trunk/src/console.cpp

    r106 r124  
    3939      for (i=0,dx=wx();i<w;i++,s++,dx+=xa)
    4040      {
    41         if (*s)
    42           fnt->put_char(con_win->screen,dx,dy,*s);
     41    if (*s)
     42      fnt->put_char(con_win->screen,dx,dy,*s);
    4343      }
    4444    }
     
    104104    int dx=wx()+x*fw,dy=wy()+y*fh;
    105105    con_win->screen->bar(dx,dy,dx+fw-1,dy+fh-1,wm->black());
    106     fnt->put_char(con_win->screen,dx,dy,ch); 
     106    fnt->put_char(con_win->screen,dx,dy,ch);
    107107  }
    108108}
     
    112112  if (cx<w && cy<h)  draw_char(cx,cy,screen[cy*w+cx]);
    113113  cx=0;
    114   cy++; 
     114  cy++;
    115115  if (cy>=h)
    116116  {
     
    123123      wm->flush_screen();
    124124    }
    125   } else draw_cursor();   
     125  } else draw_cursor();
    126126}
    127127
     
    129129{
    130130
    131  
     131
    132132  switch (ch)
    133133  {
     
    136136      if (cx)
    137137      {
    138         if (con_win)
    139           draw_char(cx,cy,screen[cy*w+cx]);
    140         cx--;
    141         if (con_win)
    142           draw_cursor();
     138    if (con_win)
     139      draw_char(cx,cy,screen[cy*w+cx]);
     140    cx--;
     141    if (con_win)
     142      draw_cursor();
    143143      }
    144144    } break;
     
    154154        draw_char(cx,cy,ch);
    155155      cx++;
    156       if (cx>=w) do_cr(); else 
     156      if (cx>=w) do_cr(); else
    157157      if (con_win) draw_cursor();
    158158    }
    159   } 
     159  }
    160160}
    161161
     
    198198      case EV_KEY :
    199199      {
    200         switch (ev.key)
    201         {
    202           case JK_BACKSPACE:
    203           {
    204             if (shcmd[0]!=0)
    205             {
    206               shcmd[strlen(shcmd)-1]=0;
    207               put_char(ev.key);
    208             }
    209           } break;
    210           case JK_ENTER :
    211           {
    212             put_char(ev.key);
    213             execute(shcmd);
    214             prompt();
    215             shcmd[0]=0;
    216           } break;
    217           default :
    218           {
    219             if (ev.key<256 && isprint(ev.key))
    220             {
    221               int x=strlen(shcmd);
    222               shcmd[x+1]=0;
    223               shcmd[x]=ev.key;
    224               put_char(ev.key);
    225             }
    226           } break;
    227         } break;
     200    switch (ev.key)
     201    {
     202      case JK_BACKSPACE:
     203      {
     204        if (shcmd[0]!=0)
     205        {
     206          shcmd[strlen(shcmd)-1]=0;
     207          put_char(ev.key);
     208        }
     209      } break;
     210      case JK_ENTER :
     211      {
     212        put_char(ev.key);
     213        execute(shcmd);
     214        prompt();
     215        shcmd[0]=0;
     216      } break;
     217      default :
     218      {
     219        if (ev.key<256 && isprint(ev.key))
     220        {
     221          int x=strlen(shcmd);
     222          shcmd[x+1]=0;
     223          shcmd[x]=ev.key;
     224          put_char(ev.key);
     225        }
     226      } break;
     227    } break;
    228228      }
    229229    }
    230230    return 1;
    231   } 
     231  }
    232232  return 0;
    233233}
  • abuse/trunk/src/control.cpp

    r56 r124  
    2424
    2525void controlled_character::note_hp_change(int new_hp, game_object *who)
    26 { 
    27   if (cur_char==who) 
    28     the_game->set_hit_points(hp); 
     26{
     27  if (cur_char==who)
     28    the_game->set_hit_points(hp);
    2929}
    3030
     
    3434/*  switch (char_type)
    3535  {
    36     case CHAR_HUMAN : my_figure=human_figure; curbreak;   
     36    case CHAR_HUMAN : my_figure=human_figure; curbreak;
    3737    case CHAR_IGUANA : my_figure=iguana_figure; break;
    3838    default : CONDITION(0,"change_character, bad character type\n");
     
    4040  cur_char=char_type;
    4141  set_state(stopped);
    42  
     42
    4343  the_game->change_logos(abilities,cur_char);*/
    44  
    45 } 
     44
     45}
    4646
    4747
    48    
     48
    4949
    5050controlled_character::controlled_character(game_object *who)
    5151{
    5252  cur_char=who;
    53   abilities=0; 
     53  abilities=0;
    5454  morphing_to=-1;
    5555}
     
    6060  int button,c_x,c_y;
    6161  the_game->get_movement(button,c_x,c_y);
    62   cur_char->move(c_x,c_y,button); 
     62  cur_char->move(c_x,c_y,button);
    6363  return 1;
    6464}
  • abuse/trunk/src/control.hpp

    r57 r124  
    3434  void change_character(int char_type);
    3535
    36 public :   
     36public :
    3737  controlled_character(long X, long Y);
    3838  controlled_character(FILE *fp);
  • abuse/trunk/src/cop.cpp

    r123 r124  
    3434  { 17,20,     // 1
    3535    17,23,     // 2
    36     17,28,     
    37     15,33,     
     36    17,28,
     37    15,33,
    3838    11,39,     // 5
    3939    7,43,
    4040    -3,44,     // 7
    41     -10,42,   
     41    -10,42,
    4242    -16,39,
    4343    -20,34,
     
    8282    15,18,
    8383    16,21 };
    84  
     84
    8585
    8686enum { in_climbing_area,
    87         disable_top_draw,
    88         just_hit,
    89         ship_pan_x,
    90         special_power,
    91         used_special_power,
    92         last1_x, last1_y,
    93         last2_x, last2_y,
    94         has_saved_this_level,
    95         r_ramp, g_ramp, b_ramp,
     87    disable_top_draw,
     88    just_hit,
     89    ship_pan_x,
     90    special_power,
     91    used_special_power,
     92    last1_x, last1_y,
     93    last2_x, last2_y,
     94    has_saved_this_level,
     95    r_ramp, g_ramp, b_ramp,
    9696        is_teleporting,
    9797       just_fired};
     
    112112       HEALTH_POWER } ;
    113113
    114 enum { top_point_angle, 
    115        top_fire_delay1, 
     114enum { top_point_angle,
     115       top_fire_delay1,
    116116       top_just_fired };
    117117
     
    135135  game_object *o=current_object;
    136136  if (o->total_objects())            // make sure we are linked to the main character
    137   { 
     137  {
    138138    game_object *q=o->get_object(0);
    139139
     
    143143      if (!v->freeze_time)
    144144      {
    145         o->direction=1;                 // always face right
    146 
    147         if (q->direction<0)
     145    o->direction=1;                 // always face right
     146
     147    if (q->direction<0)
    148148          q->x+=4;
    149         int i;
    150         signed char *fire_off=o->otype==S_DFRIS_TOP ? large_fire_off :
    151                                         (o->otype==S_ROCKET_TOP ? large_fire_off :
    152                                         (o->otype==S_BFG_TOP ? large_fire_off : small_fire_off));
    153         signed char *f=fire_off,*fb=NULL;
    154         int best_diff=200,best_num=0;
    155         int iy=f[1],ix=f[6*2];
    156        
    157         int best_angle=lisp_atan2(q->y-iy-v->pointer_y,v->pointer_x-q->x-ix);
    158         for (i=0;i<24;i++,f+=2)             // check all the angles to see which would best fit animation wise
    159         {
    160           int this_angle=lisp_atan2(f[1]-iy,f[0]-ix);
    161           int this_diff=angle_diff(this_angle,best_angle);
    162           if (this_diff<best_diff)
    163           {
    164             best_diff=this_diff;
    165             best_num=i;
    166             fb=f;
    167           }
    168         }
    169 
    170 
    171         // if the pointer is too close to the player go with the angle shown, not the angle through the pointer
    172         if (abs(q->y-fb[1]-v->pointer_y)<45 & abs(v->pointer_x-q->x+fb[0])<40)
    173           o->lvars[point_angle]=lisp_atan2(fb[1]-iy,fb[0]-ix);
    174         else
    175           o->lvars[point_angle]=lisp_atan2(q->y-fb[1]-v->pointer_y,v->pointer_x-(q->x+fb[0]));
    176        
    177 
    178         if (q->direction<0)
     149    int i;
     150    signed char *fire_off=o->otype==S_DFRIS_TOP ? large_fire_off :
     151                                    (o->otype==S_ROCKET_TOP ? large_fire_off :
     152                    (o->otype==S_BFG_TOP ? large_fire_off : small_fire_off));
     153    signed char *f=fire_off,*fb=NULL;
     154    int best_diff=200,best_num=0;
     155    int iy=f[1],ix=f[6*2];
     156   
     157    int best_angle=lisp_atan2(q->y-iy-v->pointer_y,v->pointer_x-q->x-ix);
     158    for (i=0;i<24;i++,f+=2)             // check all the angles to see which would best fit animation wise
     159    {
     160      int this_angle=lisp_atan2(f[1]-iy,f[0]-ix);
     161      int this_diff=angle_diff(this_angle,best_angle);
     162      if (this_diff<best_diff)
     163      {
     164        best_diff=this_diff;
     165        best_num=i;
     166        fb=f;
     167      }
     168    }
     169
     170
     171    // if the pointer is too close to the player go with the angle shown, not the angle through the pointer
     172    if (abs(q->y-fb[1]-v->pointer_y)<45 & abs(v->pointer_x-q->x+fb[0])<40)
     173      o->lvars[point_angle]=lisp_atan2(fb[1]-iy,fb[0]-ix);
     174    else
     175      o->lvars[point_angle]=lisp_atan2(q->y-fb[1]-v->pointer_y,v->pointer_x-(q->x+fb[0]));
     176   
     177
     178    if (q->direction<0)
    179179          q->x-=4;
    180180
    181         o->x=q->x;
    182         o->y=q->y+29-q->picture()->height();
    183 
    184         rand_on+=o->lvars[point_angle];
    185         o->current_frame=best_num;
    186 
    187 
    188         if (o->lvars[fire_delay1])
    189           o->lvars[fire_delay1]--;
    190 
    191         o->otype=weapon_types[v->current_weapon];  // switch to correct top part   
     181    o->x=q->x;
     182    o->y=q->y+29-q->picture()->height();
     183
     184    rand_on+=o->lvars[point_angle];
     185    o->current_frame=best_num;
     186
     187
     188    if (o->lvars[fire_delay1])
     189      o->lvars[fire_delay1]--;
     190
     191    o->otype=weapon_types[v->current_weapon];  // switch to correct top part
    192192      }
    193193    }
     
    207207  int firex=other->x+fire_off[o->current_frame*2];
    208208  int firey=other->y-fire_off[o->current_frame*2+1];