These videos might hang your browser, sorry!
Big Guns
//$FG,2$This will soon be an artillery game$FG$

#define MAP_WIDTH        2048
#define MAP_HEIGHT        (GR_HEIGHT-3*FONT_HEIGHT)

I8 gun_x,gun_y,active_map=0,gun_recoil;
double gun_theta;
GrBitMap *maps[2]={NULL,NULL};
I2 elevs[MAP_WIDTH];

double wind_x;
#define NUM_DUST        512
I4 dust_x[NUM_DUST],dust_y[NUM_DUST];

Ode *o=NULL;




    $PI,"<1>",1$




    $PI,"<2>",2$






void UpdateWin(TssStruct *tss)
{
GrBitMap *base=GrAlias(grbase,tss),
        *map=maps[active_map&1];
MassStruct *tempm;
double theta=gun_theta;
I8 i,x,y,w,
        h=-tss->horz_scroll.pos,
        v=-tss->vert_scroll.pos;
tss->horz_scroll.min=0;
tss->horz_scroll.max=MAP_WIDTH-tss->win_pixel_width;
tss->vert_scroll.min=0;
tss->vert_scroll.max=MAP_HEIGHT-tss->win_pixel_height;
GrBlot(base,h,v,map);

GrElemsPlot(base,gun_x+h,gun_y+v,0,$IB,"<2>",2$);

if (theta<-pi/2) {
    base->flags|=BMF_SYMMETRY|BMF_JUST_MIRROR;
    GrSetSymmetry(base,gun_x+h,0,gun_x+h,1);
    theta=-pi-theta;
}
GrElemsPlotRotZ(base,
        gun_x+h-gun_recoil*Cos(theta),
        gun_y+v-gun_recoil*Sin(theta)-10,0,$IB,"<1>",1$,theta);
base->flags&=~(BMF_SYMMETRY|BMF_JUST_MIRROR);

tempm=o->next_mass;
base->color=BLACK;
map->bkcolor=ROP_COLLISION+LTCYAN;
map->color=ROP_COLLISION+BLACK;
while (tempm!=&o->next_mass) {
    map->collision_cnt=0;
    GrCircle(map,tempm->state->x,tempm->state->y,2);
    if (map->collision_cnt)
        tempm->user_data=1;

    GrCircle(base,tempm->state->x+h,tempm->state->y+v,2);

    tempm=tempm->next;
}

base->color=LTGRAY;
w=t*wind_x;
for (i=0;i<NUM_DUST;i++) {
    x=(dust_x[i]+w)%MAP_WIDTH;
    y=dust_y[i];
    if (y<elevs[x])
        GrPlot(base,x+h,y+v);
}
GrDel(base);
}

void MyDerivative(Ode *ode,double t,Order2D3 *state,Order2D3 *DstateDt)
{
nounusedwarn t,DstateDt,state;
MassStruct *tempm=ode->next_mass;
while (tempm!=&ode->next_mass) {
    tempm->DstateDt->DyDt+=1000.0*tempm->mass;
    tempm->DstateDt->DxDt+=25.0*wind_x;
    tempm=tempm->next;
}
}

void DrawMap()
{
GrBitMap *map=maps[(active_map+1)&1];
I8 x;

map->color=LTCYAN;
GrBox(map,0,0,MAP_WIDTH,MAP_HEIGHT);

map->color=BLACK;
for (x=1;x<MAP_WIDTH;x++)
    GrLine(map,x-1,elevs[x-1],x,elevs[x]);

map->color=BROWN;
GrFloodFill(map,0,MAP_HEIGHT-1,FALSE);

active_map++;
}

void FireTsk()
{ //by default preempt is off on new tasks
MassStruct *tempm;
I8 i;
if (gun_recoil) return;

tempm=MAllocZ(sizeof(MassStruct),Fs->parent_tss);
tempm->mass=10.0;
tempm->drag_profile_factor=0.1;
tempm->x=gun_x+27*Cos(gun_theta);
tempm->y=gun_y-15+27*Sin(gun_theta);
tempm->DxDt=600.0*Cos(gun_theta);
tempm->DyDt=600.0*Sin(gun_theta);
tempm->user_data=0;
while (Bt(&Fs->parent_tss->task_flags,TSSf_SUSPENDED))
    SwapInNextTask;
InsQue(tempm,o->last_mass);

music_mute=TRUE;
for (i=0;i<60;i++) {
    Sound(RandU4&511+15);
    Sleep(2);
    gun_recoil=i/12;
}
Sound(0);
music_mute=FALSE;
for (i=0;i<=60;i++) {
    Sleep(1);
    gun_recoil=5-i/12;
}
}

void ManageShots()
{
I8 i;
MassStruct *tempm,*tempm1;
BoolI1 changed=FALSE;
tempm=o->next_mass;
while (tempm!=&o->next_mass) {
    tempm1=tempm->next;
    if (!(0<=tempm->state->x<MAP_WIDTH) ||
              tempm->user_data) {
        RemQue(tempm);
        for (i=tempm->state->x-4;i<=tempm->state->x+4;i++)
            if (0<=i<MAP_WIDTH)
                elevs[i]=LimitI8(elevs[i]+10-2*AbsI8(i-tempm->state->x),0,MAP_HEIGHT-2);
        Free(tempm);
        changed=TRUE;
    }
    tempm=tempm1;
}
if (changed)
    DrawMap;
}

void MoveTsk()
{
static I8 quit_time=0;
if (quit_time)
    quit_time=GetTimeStamp+time_stamp_freq/10;
else {
    music_mute=TRUE;
    Sound(100);
    quit_time=GetTimeStamp+time_stamp_freq/10;
    while (quit_time>GetTimeStamp)
        SwapInNextTask;
    Sound(0);
    quit_time=0;
    music_mute=FALSE;
}
}


void Init()
{
GrBitMap *map;
I8 i,x,y,dy;
BoolI1 old_preempt;
if (!maps[0])
    maps[0]=GrNew(BMT_COLOR4,MAP_WIDTH,MAP_HEIGHT);
if (!maps[1])
    maps[1]=GrNew(BMT_COLOR4,MAP_WIDTH,MAP_HEIGHT);
map=maps[active_map&1];
Fs->horz_scroll.pos=0;
Fs->vert_scroll.pos=0;

y=ToI8(0.7*MAP_HEIGHT)<<32;
dy=0;
for (x=0;x<MAP_WIDTH;x++) {
    dy=LimitI8(SignI8(RandI2)<<30+dy,-3<<32,3<<32);
    y=LimitI8(y+dy,ToI8(0.3*MAP_HEIGHT)<<32,(MAP_HEIGHT-2)<<32);
    elevs[x]=y.i4[1];
}
gun_x=RandU4%(MAP_WIDTH-100)+50;
gun_y=elevs[gun_x];
gun_theta=0;
gun_recoil=0;
for (x=gun_x-20;x<=gun_x+20;x++)
    elevs[x]=gun_y;

wind_x=RandI2/250.0;
for (i=0;i<NUM_DUST;i++) {
    dust_x[i]=RandU2%MAP_WIDTH;
    dust_y[i]=RandU2%MAP_HEIGHT;
}

old_preempt=Preempt(OFF);
o=OdeNew(0,1e-4,ODEF_HAS_MASSES);
o->derivative=&MyDerivative;
o->drag_v2=0.002;
o->drag_v3=0.0001;
o->acceleration_limit=5e5;
InsQue(o,Fs->last_ode);
Fs->horz_scroll.min=0;
Fs->horz_scroll.max=MAP_WIDTH-Fs->win_pixel_width;
Fs->horz_scroll.pos=gun_x-Fs->win_pixel_width/2;
Fs->vert_scroll.min=0;
Fs->vert_scroll.max=MAP_HEIGHT-Fs->win_pixel_height;
Fs->vert_scroll.pos=0;
UpdateDerivedTssValues;
Preempt(old_preempt);

DrawMap;
}

void AllDel(Ode *o)
{
MassStruct *tempm,*tempm1;
if (o) {
    RemQue(o);
    tempm=o->next_mass;
    while (tempm!=&o->next_mass) {
        tempm1=tempm->next;
        RemQue(tempm);
        Free(tempm);
        tempm=tempm1;
    }
    OdeDel(o);
}
}

void BigGuns()
{
void *old_update=Fs->update_win;
I8 ch,sc;
BoolI1 old_preempt=Preempt(OFF);

PopUpOk("The map scrolls.\r\n");

WinMax;
WinBorder(ON);
WordStat(OFF);
Init;
Fs->update_win=&UpdateWin;
try {
    do {
        ch=0;
        if (ScanKey(&ch,&sc))
            switch (ch) {
                case 0:
                    switch (sc.u1[0]) {
                        case SC_CURSOR_RIGHT:
                            gun_theta+=2.0*pi/180;
                            if (gun_theta>0)
                                gun_theta=0;
                            else
                                Spawn(&MoveTsk,NULL,"Move",Fs);
                            break;
                        case SC_CURSOR_LEFT:
                            gun_theta-=2.0*pi/180;
                            if (gun_theta<-pi)
                                gun_theta=-pi;
                            else
                                Spawn(&MoveTsk,NULL,"Move",Fs);
                            break;
                    }
                    break;
                case CH_CR:
                    AllDel(o);
                    Init;
                    break;
                case CH_SPACE:
                    Spawn(&FireTsk,NULL,"Fire",Fs);
                    break;
            }
        ManageShots;
        WinSync;
    } while (ch!=CH_CTRLQ && ch!=CH_ESC);
} catch
    Fs->catch_except=TRUE;
Fs->update_win=old_update;
GrDel(maps[0]); maps[0]=NULL;
GrDel(maps[1]); maps[1]=NULL;
AllDel(o);
Preempt(old_preempt);
}

BigGuns;
...........M.......................... .............þÿÿÿ
...þÿÿÿ.............................‰......................ñÿÿÿ...ýÿÿÿ......ýÿÿÿúÿÿÿþÿÿÿ...
úÿÿÿþÿÿÿ...ðÿÿÿ...õÿÿÿÿÿÿÿ ...ÿÿÿÿ.......óÿÿÿ....ýÿÿÿ...ôÿÿÿ...
Home

Flight Simulator
FirstPersonShootr
BigGuns
BirdLand
MultiCore
Tanks
TimeOut
X-Caliber