|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T f
Length: 5949 (0x173d) Types: TextFile Names: »fall.c.orig«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/X/Xwanderer/fall.c.orig«
#include "wand_head.h" extern void draw_symbol(); #ifdef XWANDER extern int tinymode; #endif int fall(mx,my,x,y,sx,sy,screen,howdead) int x,y,sx,sy, *mx, *my; char screen[NOOFROWS][ROWLEN+1], howdead[25]; { int nx = x,nyl = y,nyr = y,retval = 0; if (y>(NOOFROWS-1)) return(0); if((screen[y][x]!='O')&&(screen[y][x]!=' ')&&(screen[y][x]!='M')&&(screen[y][x]!='\\')&&(screen[y][x]!='/')&&(screen[y][x]!='@')) return(0); if(screen[y][x] == 'O') { if((screen[y][x-1] == ' ') && (screen[y-1][x-1] == ' ')) nx--; else { if((screen[y][x+1] == ' ') && (screen[y-1][x+1] == ' ')) nx++; else nx = -1; } if((screen[y-1][x] == ' ') && (screen[y-1][x+1] == ' ')) nyr--; else { if((screen[y+1][x] == ' ') && (screen[y+1][x+1] == ' ')) nyr++; else nyr = -1; } if((screen[y-1][x] == ' ') && (screen[y-1][x-1] == ' ')) nyl--; else { if((screen[y+1][x] == ' ') && (screen[y+1][x-1] == ' ')) nyl++; else nyl = -1; } } if(screen[y][x] == '\\') { if(screen[y-1][++nx] != ' ') nx = -1; if(screen[--nyr][x+1] != ' ') nyr = -1; if(screen[++nyl][x-1] != ' ') nyl = -1; } if(screen[y][x] == '/') { if(screen[y-1][--nx] != ' ') nx = -1; if(screen[++nyr][x+1] != ' ') nyr = -1; if(screen[--nyl][x-1] != ' ') nyl = -1; } if((screen[y][nx] != ' ')&&(screen[y][nx] != ' ')) nx = -1; if((screen[y-1][x] == 'O') && (nx>=0) && (y>0)) /* boulder falls ? */ { screen[y-1][x] = ' '; if(screen[y][nx] == '@') { strcpy(howdead,"a falling boulder"); dobeep(); retval=1; } if(screen[y][nx] == 'M') { dobeep(); *mx = *my = -2; screen[y][nx] = ' '; } screen[y][nx] = 'O'; #ifndef XWANDER if((y<(sy+5)) && (y>(sy-3)) && (x>(sx-6)) && (x<(sx+6))) draw_symbol((x-sx+5)*3,(y-sy+2)*2,' '); #else if((y<(sy+5)) && (y>(sy-3)) && (x>(sx-6)) && (x<(sx+6)) || tinymode) draw_symbol((x-sx+5),(y-sy+2),' '); #endif #ifndef XWANDER if((y<(sy+4)) && (y>(sy-4)) && (nx>(sx-6)) && (nx<(sx+6))) draw_symbol((nx-sx+5)*3,(y-sy+3)*2,'O'); refresh(); #else if((y<(sy+4)) && (y>(sy-4)) && (nx>(sx-6)) && (nx<(sx+6)) || tinymode) draw_symbol((nx-sx+5),(y-sy+3),'O'); #endif retval+=fall(mx,my,nx ,y+1,sx,sy,screen,howdead); retval+=fall(mx,my,nx ,y+1,sx,sy,screen,howdead); retval+=fall(mx,my,nx ,y+1,sx,sy,screen,howdead); retval+=fall(mx,my,x+1,y-1,sx,sy,screen,howdead); retval+=fall(mx,my,x-1,y-1,sx,sy,screen,howdead); retval+=fall(mx,my,x ,y-1,sx,sy,screen,howdead); if(screen[y+1][nx] == '@') { strcpy(howdead,"a falling boulder"); dobeep(); return(1); } if(screen[y+1][nx] == 'M') { dobeep(); *mx = *my = -2; screen[y+1][nx] = ' '; } } if((screen[nyr][x] != ' ')&&(screen[nyr][x] != 'M')) nyr = -1; if((screen[y][x+1] == '<')&&(nyr>=0)) /* arrow moves ( < ) ? */ { screen[y][x+1] = ' '; if(screen[nyr][x] == '@') { strcpy(howdead,"a speeding arrow"); dobeep(); retval = 1; } if(screen[nyr][x] == 'M') { dobeep(); *mx = *my = -2; screen[nyr][x] = ' '; } screen[nyr][x] = '<'; #ifndef XWANDER if((y<(sy+4)) && (y>(sy-4)) && (x<(sx+6)) && (x>(sx-6))) draw_symbol((x-sx+6)*3,(y-sy+3)*2,' '); #else if((y<(sy+4)) && (y>(sy-4)) && (x<(sx+6)) && (x>(sx-6)) || tinymode) draw_symbol((x-sx+6),(y-sy+3),' '); #endif #ifndef XWANDER if((nyr<(sy+4)) && (nyr>(sy-4)) && (x<(sx+7)) && (x>(sx-5))) draw_symbol((x-sx+5)*3,(nyr-sy+3)*2,'<'); refresh(); #else if((nyr<(sy+4)) && (nyr>(sy-4)) && (x<(sx+7)) && (x>(sx-5))||tinymode) draw_symbol((x-sx+5),(nyr-sy+3),'<'); #endif retval+=fall(mx,my,x-1,nyr,sx,sy,screen,howdead); retval+=fall(mx,my,x+1,y-1,sx,sy,screen,howdead); retval+=fall(mx,my,x+1,y+1,sx,sy,screen,howdead); retval+=fall(mx,my,x-1,y-1,sx,sy,screen,howdead); retval+=fall(mx,my,x-1,y+1,sx,sy,screen,howdead); retval+=fall(mx,my,x+1,y ,sx,sy,screen,howdead); if(screen[nyr][x-1] == '@') { strcpy(howdead,"a speeding arrow"); dobeep(); return(1); } if(screen[nyr][x-1] == 'M') { dobeep(); *mx = *my = -2; screen[nyr][x-1] = ' '; } } if((screen[nyl][x] != ' ')&&(screen[nyl][x] != 'M')) nyl = -1; if((screen[y][x-1] == '>')&&(nyl>=0)) /* arrow moves ( > ) ? */ { screen[y][x-1] = ' '; if(screen[nyl][x] == '@') { strcpy(howdead,"a speeding arrow"); dobeep(); retval = 1; } if(screen[nyl][x] == 'M') { dobeep(); *mx = *my = -2; screen[nyl][x] = ' '; } screen[nyl][x] = '>'; #ifndef XWANDER if((y<(sy+4)) && (y>(sy-4)) && (x<(sx+6)) && (x>(sx-6))) draw_symbol((x-sx+4)*3,(y-sy+3)*2,' '); #else if((y<(sy+4)) && (y>(sy-4)) && (x<(sx+6)) && (x>(sx-6)) || tinymode) draw_symbol((x-sx+4),(y-sy+3),' '); #endif #ifndef XWANDER if((nyl<(sy+4)) && (nyl>(sy-4)) && (x<(sx+5)) && (x>(sx-7))) draw_symbol((x-sx+5)*3,(nyl-sy+3)*2,'>'); refresh(); #else if((nyl<(sy+4)) && (nyl>(sy-4)) && (x<(sx+5)) && (x>(sx-7))||tinymode) draw_symbol((x-sx+5),(nyl-sy+3),'>'); #endif retval+=fall(mx,my,x+1,nyl,sx,sy,screen,howdead); retval+=fall(mx,my,x+1,y-1,sx,sy,screen,howdead); retval+=fall(mx,my,x+1,y+1,sx,sy,screen,howdead); retval+=fall(mx,my,x-1,y-1,sx,sy,screen,howdead); retval+=fall(mx,my,x-1,y+1,sx,sy,screen,howdead); retval += fall(mx,my,x-1,y,sx,sy,screen,howdead); if(screen[nyl][x+1] == '@') { strcpy(howdead,"a speeding arrow"); dobeep(); return(1); } if(screen[nyl][x+1] == 'M') { dobeep(); *mx = *my = -2; screen[nyl][x+1] = ' '; } } if(retval>0) return(1); return(0); }