LONG Blank( PrefObject *Prefs ) { struct Screen *Scr; struct Window *Wnd; LONG RetVal = OK; Scr = OpenScreenTags( 0L, SA_DisplayID, Prefs->po_ModeID, SA_Quiet, TRUE, SA_Depth, Prefs->po_Depth, SA_Behind, TRUE, SA_Overscan, OSCAN_STANDARD, TAG_DONE ); if( Scr ) { Triplet *ColorTable = RainbowPalette( Scr, 0L, 1L, 0L ); Wnd = BlankMousePointer( Scr ); while( RetVal == OK ) RetVal = FracBlank( Scr, Scr->Width, Scr->Height ); UnblankMousePointer( Wnd ); RainbowPalette( 0L, ColorTable, 1L, 0L ); CloseScreen( Scr ); } else RetVal = FAILED; return RetVal; }
LONG Blank( PrefObject *Prefs ) { struct Screen *Scr; struct Window *Wnd; LONG RetVal; if( Scr = OpenScreenTags( NULL, SA_Depth, Prefs[0].po_Depth, SA_Quiet, TRUE, SA_DisplayID, Prefs[0].po_ModeID, SA_Behind, TRUE, SA_Overscan, OSCAN_STANDARD, SA_ShowTitle, FALSE, SA_Title, "Garshnescreen", TAG_DONE )) { SetRGB4(&( Scr->ViewPort ), 0, 0, 0, 0 ); ColorTable = RainbowPalette( Scr, 0L, 1L, 0L ); Wnd = BlankMousePointer( Scr ); do RetVal = Dragon( Scr, Scr->Width, Scr->Height ); while( RetVal == OK ); UnblankMousePointer( Wnd ); RainbowPalette( 0L, ColorTable, 1L, 0L ); CloseScreen( Scr ); } else RetVal = FAILED; return RetVal; }
LONG Blank( PrefObject *Prefs ) { LONG ToFrontCount = 0, Wid, Hei, Drops, x, y, r, i, incr, RetVal = OK; struct RastPort *Rast; struct Screen *Scr; struct Window *Wnd; LONG d, xs, ys, rs; Drops = Prefs[0].po_Level; Scr = OpenScreenTags( 0L, SA_Depth, Prefs[2].po_Depth, SA_Quiet, TRUE, SA_Overscan, OSCAN_STANDARD, SA_Behind, TRUE, SA_DisplayID, Prefs[2].po_ModeID, SA_ShowTitle, FALSE, SA_Title, "Garshnescreen", TAG_DONE ); if( Scr ) { Wid = Scr->Width; Hei = Scr->Height; d = min( Wid, Hei ); xs = 3 * Wid; ys = 4 * Hei; Rast = &( Scr->RastPort ); SetRast( Rast, 0 ); for( i = 0; i < 4; i++ ) SetRGB4(&( Scr->ViewPort ), i, 4 * i, 4 * i, 4 * i ); Wnd = BlankMousePointer( Scr ); ScreenToFront( Scr ); while( RetVal == OK ) { if(!( ++ToFrontCount % 60 )) ScreenToFront( Scr ); if(!( ToFrontCount % Drops )) SetRast(&( Scr->RastPort ), 0 ); r = RangeRand( d/13 ) + d/25; if( Wid > Hei ) rs = r * xs / ys; else rs = r * ys / xs; x = RangeRand( Wid - 2*rs ) + rs; y = RangeRand( Hei - 2*rs ) + rs; incr = max( Wid/160, 1 ); for( i = 0; i < r; i += incr ) { WaitTOF(); SetAPen( &Scr->RastPort, ( ULONG )RangeRand(( 1L << Prefs[2].po_Depth ) - 1 ) + 1 ); if( Wid > Hei ) { DrawEllipse(&( Scr->RastPort ), x, y, i * xs / ys, i ); if( i ) { SetAPen(&( Scr->RastPort ), 0 ); DrawEllipse(&( Scr->RastPort ), x, y, xs * ( i - incr ) / ys, i - incr ); } } else { DrawEllipse(&( Scr->RastPort ), x, y, i, ys * i / xs ); if( i ) { SetAPen(&( Scr->RastPort ), 0 ); DrawEllipse(&( Scr->RastPort ), x, y, i - incr, ( i - incr ) * ys / xs ); } } } RetVal = ContinueBlanking(); } UnblankMousePointer( Wnd ); } else RetVal = FAILED; if( Scr ) CloseScreen( Scr ); return RetVal; }
LONG Blank( PrefObject *Prefs ) { struct Screen *LScr; struct Window *Wnd; LONG RetVal = OK,i,goatFlag = 0, ToFrontCount = 0; if (Prefs[SCREEN].po_Active ) LScr = cloneTopScreen( FALSE, TRUE ); else LScr = OpenScreenTags( 0l, SA_DisplayID, Prefs[MODE].po_ModeID, SA_Depth, 2, SA_Overscan, OSCAN_STANDARD, SA_ShowTitle, FALSE, SA_Title, "Garshnescreen", SA_Quiet, TRUE, SA_Behind, TRUE, TAG_DONE ); if( LScr ) { if( GarshnelibBase->lib_Version < 39 || !Prefs[SCREEN].po_Active ) { SetRGB4(&(LScr->ViewPort),0,0x0,0x0,0x0); SetRGB4(&(LScr->ViewPort),1,0x8,0x8,0x8); SetRGB4(&(LScr->ViewPort),2,0x7,0x4,0x2); SetRGB4(&(LScr->ViewPort),3,0x0,0xa,0x0); backgroundClr = 0; grassClr = GRASS; herderClr = HERDER; goatClr = GOAT; } else { backgroundClr = FindColor( LScr->ViewPort.ColorMap, 0, 0, 0, -1 ); grassClr = FindColor( LScr->ViewPort.ColorMap, 0, 0x9L<<28, 0, -1 ); goatClr = FindColor( LScr->ViewPort.ColorMap, 0xAL<<28, 0xAL<<28, 0xAL<<28, -1 ); herderClr = FindColor( LScr->ViewPort.ColorMap, 0xBL<<28, 0x2L<<28, 0x4L<<28, -1 ); } numGoats = Prefs[GOATS].po_Level; numHerders = Prefs[HERDERS].po_Level; reproduction = Prefs[REPRO].po_Level; Width = LScr->Width; Height = LScr->Height; for (i=0;i<numHerders;++i) herderQ[i] = 0; herderQ[0] = 1; herders[0].x = Width/2; herders[0].y = Height/2; for (i=0;i<numGoats;++i) goatQ[i] = 0; Wnd = BlankMousePointer( LScr ); ScreenToFront( LScr ); i = 0; while( RetVal == OK ) { WaitTOF(); if(!( ++ToFrontCount % 60 )) ScreenToFront( LScr ); if( !Prefs[DELAY].po_Level || !( ToFrontCount % Prefs[DELAY].po_Level )) { myBlank( LScr, LScr->Width, LScr->Height ); if (!goatFlag && i == 20) { goatQ[0] = 1; goats[0].x = Width/2; goats[0].y = Height/2; grassEaten[0] = 0; goatFlag = 1; } else ++i; } RetVal = ContinueBlanking(); } UnblankMousePointer( Wnd ); CloseScreen( LScr ); } else RetVal = FAILED; return RetVal; }
long HandleServerMsg(void) { unsigned long PubScreenModes; BlankMsg *CurMsg; while(CurMsg = (BlankMsg *)GetMsg(ServerPort)) { long Type = CurMsg->bm_Type; long Flags = CurMsg->bm_Flags; if(Flags & BF_REPLY) { if(!(Flags & BF_INTERNAL)) FreeVec(CurMsg); } else { CurMsg->bm_Flags |= BF_REPLY; ReplyMsg((struct Message *)CurMsg); } switch(Type) { case BM_DOBLANK: if(Flags & BF_REPLY) { if(!CheckIO((struct IORequest *)TimeOutIO)) { AbortIO((struct IORequest *)TimeOutIO); WaitIO((struct IORequest *)TimeOutIO); SetSignal(0L, SIG_TIMER); } if(ServerScr) { UnblankMousePointer(Wnd); CloseScreen(ServerScr); ServerScr = 0L; } if(!PingTask) PingTask = CreateTask("GarshnePing", -5, PingFunc, 4096); Blanking = TRUE; } break; case BM_DOTESTBLANK: if(Flags & BF_REPLY) { if(!PingTask) PingTask = CreateTask("GarshnePing", -5, PingFunc, 4096); Blanking = TRUE; } break; case BM_INITMSG: if(BlankAfterInit) { BlankAfterInit = FALSE; MessageModule("GarshneClient", BM_DOBLANK); } break; case BM_FAILED: if(PingTask) { Signal(PingTask, SIGBREAKF_CTRL_C); PingTask = 0L; } InternalBlank(); break; case BM_SENDBLANK: if((Flags & BF_REPLY)|| BlankingDisabled) break; if(ServerScr &&(UsagePercent() > 40)) break; PubScreenModes = SetPubScreenModes(0L); if(Stricmp(Prefs->bp_Blanker, "Random")) { if(!Blanking || ServerScr) MessageModule("GarshneClient", BM_DOBLANK); } else { if(!Blanking || Prefs->bp_Flags & BF_REPLACE) { MessageModule("GarshneClient", BM_DELAYEDQUIT); BlankAfterInit = TRUE; LoadModule(Prefs->bp_Dir, Prefs->bp_Blanker); } else if(ServerScr) MessageModule("GarshneClient", BM_DOBLANK); } SetPubScreenModes(PubScreenModes); break; case BM_SENDTEST: if((Flags & BF_REPLY)|| BlankingDisabled) break; PubScreenModes = SetPubScreenModes(0L); MessageModule("GarshneClient", BM_DOTESTBLANK); SetPubScreenModes(PubScreenModes); break; case BM_SENDUNBLANK: if(Flags & BF_REPLY) break; if(ServerScr) { UnblankMousePointer(Wnd); CloseScreen(ServerScr); ServerScr = 0L; } Blanking = FALSE; MessageModule("GarshneClient", BM_UNBLANK); if(PingTask) { Signal(PingTask, SIGBREAKF_CTRL_C); PingTask = 0L; } break; default: break; } } return OK; }
LONG Blank( PrefObject *Prefs ) { LONG delay_rate, i, j, counter = 0, RetVal = OK; struct RastPort *Rast; struct Screen *FTScr; struct Window *FTWin; struct Window *Wnd; NumToasters = Prefs[OBJECTS].po_Level; delay_rate = 11 - Prefs[SPEED].po_Level; Toasters = AllocVec( sizeof( Toaster ) * NumToasters, MEMF_CLEAR ); FTScr = OpenScreenTags( NULL, SA_DisplayID, Prefs[MODE].po_ModeID, SA_Depth, 4, SA_Overscan, OSCAN_STANDARD, SA_Type, CUSTOMSCREEN, SA_Quiet, TRUE, SA_Behind, TRUE, TAG_DONE ); if( Toasters && FTScr ) { for( i = 0; i < 48; i += 3 ) if( GfxBase->lib_Version < 39 ) SetRGB4(&( FTScr->ViewPort ), i/3, ( cmap[i] * 16 ) / 256, ( cmap[i+1] * 16 ) / 256, ( cmap[i+2] * 16 ) / 256 ); else SetRGB32(&( FTScr->ViewPort ), i/3, cmap[i]<<24, cmap[i+1]<<24, cmap[i+2]<<24 ); FTWin = OpenWindowTags( 0L, WA_Width, FTScr->Width, WA_Height, FTScr->Height, WA_IDCMP, 0L, WA_Flags, WFLG_SIMPLE_REFRESH|WFLG_BORDERLESS, WA_CustomScreen, FTScr, TAG_DONE ); if( FTWin ) { Rast = FTWin->RPort; SetAPen( Rast, 0 ); for( i = 0; i < NumToasters; i++ ) if( !FindLaunchPos( i, ( LONG )FTWin->Width, ( LONG )FTWin->Height )) Toasters[i].delay = 30; Wnd = BlankMousePointer( FTScr ); ScreenToFront( FTScr ); while( RetVal == OK ) { WaitTOF(); if(!( ++counter % 60 )) ScreenToFront( FTScr ); if(!( counter % delay_rate )) { for( i = 0; i < NumToasters; i++ ) { if( !Toasters[i].delay ) { Toasters[i].old_x = Toasters[i].x; Toasters[i].old_y = Toasters[i].y; Toasters[i].x -= Toasters[i].xspeed; Toasters[i].y += Toasters[i].yspeed; Toasters[i].xcol = -1; Toasters[i].ycol = -1; } } for( i = 0; i < NumToasters; i++ ) { if( !Toasters[i].delay ) { j = -1; while(( j = TestExtent( j+1, i, Toasters[i].x, Toasters[i].y )) >= 0 ) { if( abs( Toasters[j].old_x - Toasters[i].old_x ) < IM_WIDBUF ) { if( Toasters[i].y < Toasters[j].y ) Toasters[i].ycol = j; if( Toasters[i].xspeed == Toasters[j].xspeed ) Toasters[i].xspeed++; } else { if( Toasters[i].x > Toasters[j].x ) Toasters[i].xcol = j; if( Toasters[i].yspeed == Toasters[j].yspeed ) Toasters[i].yspeed++; } if( abs( Toasters[j].old_y - Toasters[i].old_y ) < IM_HEIBUF ) { if( Toasters[i].x > Toasters[j].x ) Toasters[i].xcol = j; if( Toasters[i].yspeed == Toasters[j].yspeed ) Toasters[i].yspeed++; } } } } for( i = 0; i < NumToasters; i++ ) { if( !Toasters[i].delay ) { Toasters[i].x = Toasters[i].old_x - ActXSpeed( i ); Toasters[i].y = Toasters[i].old_y + ActYSpeed( i ); } } for( i = 0; i < NumToasters; i++ ) { if( !Toasters[i].delay ) { j = -1; while(( j = TestExtent( j+1, i, Toasters[i].x, Toasters[i].y )) >= 0 ) { if( abs( Toasters[j].old_x - Toasters[i].old_x ) < IM_WIDBUF ) if( Toasters[i].x > Toasters[j].x ) Toasters[i].x = Toasters[i].old_x; else if( Toasters[i].y < Toasters[j].y ) Toasters[i].y = Toasters[i].old_y; if( abs( Toasters[j].old_y - Toasters[i].old_y ) < IM_HEIBUF ) if( Toasters[i].y < Toasters[j].y ) Toasters[i].y = Toasters[i].old_y; } } } for( i = 0; i < NumToasters; i++ ) { if( !Toasters[i].delay ) { Toasters[i].phase = ( Toasters[i].phase + 1 ) % IMAGEMAX; EraseRect( Rast, Toasters[i].x + IM_WIDTH, Toasters[i].old_y, Toasters[i].x + IM_WIDTH + Toasters[i].xspeed, Toasters[i].old_y + IM_HEIGHT ); EraseRect( Rast, Toasters[i].old_x, Toasters[i].old_y, Toasters[i].old_x + IM_WIDTH, Toasters[i].old_y + Toasters[i].yspeed ); DrawImage( Rast, img[Toasters[i].phase], Toasters[i].x, Toasters[i].y ); if(( Toasters[i].x < -IM_WIDTH-1 )|| ( Toasters[i].y > FTWin->Height )) Toasters[i].delay = RangeRand( 50 ); } else if(!( --Toasters[i].delay )) Toasters[i].delay = FindLaunchPos( i, ( LONG )FTWin->Width, ( LONG )FTWin->Height ) ? 0 : 30; } } RetVal = ContinueBlanking(); } SetSignal( 0L, SIGBREAKF_CTRL_C ); UnblankMousePointer( Wnd ); CloseWindow( FTWin ); } else RetVal = FAILED; CloseScreen( FTScr ); } else RetVal = FAILED; FreeVec( Toasters ); return RetVal; }
LONG Blank( PrefObject *Prefs ) { LONG ToFrontCount = 0, Wid, Hei, i, x, y, Stars, Speed, RetVal = OK; struct RastPort *Rast; struct Screen *Scr; struct Window *Wnd; Coord3D *p; Coord2D *p2; Stars = Prefs[0].po_Level; Speed = Prefs[2].po_Level; Coords = AllocVec( Stars * sizeof( Coord3D ), MEMF_CLEAR ); OldCoords = AllocVec( Stars * sizeof( Coord2D ), MEMF_CLEAR ); Scr = OpenScreenTags( 0L, SA_Depth, 2, SA_Overscan, OSCAN_STANDARD, SA_DisplayID, Prefs[4].po_ModeID, SA_Behind, TRUE, SA_Quiet, TRUE, SA_ShowTitle, FALSE, SA_Title, "Garshnescreen", TAG_DONE ); if( Coords && OldCoords && Scr ) { Wid = Scr->Width; Hei = Scr->Height; Rast = &( Scr->RastPort ); SetRast( Rast, 0 ); for( i = 0; i < 4; i++ ) SetRGB4(&( Scr->ViewPort ), i, 4 * i, 4 * i, 4 * i ); for( i = 0; i < Stars; i++ ) { InitStar( &Coords[i], Speed ); OldCoords[i].x = 0; OldCoords[i].y = 0; } Wnd = BlankMousePointer( Scr ); ScreenToFront( Scr ); while( RetVal == OK ) { WaitTOF(); if(!( ++ToFrontCount % 60 )) ScreenToFront( Scr ); for( p2 = OldCoords, p = Coords, i = 0; i < Stars; i++, p++, p2++ ) { x = p2->x; y = p2->y; SetAPen( Rast, 0 ); switch( p->z / 200 ) { case 0: WritePixel( Rast, x, y+1 ); WritePixel( Rast, x+1, y+1 ); case 1: case 2: case 3: case 4: WritePixel( Rast, x+1, y ); default: WritePixel( Rast, x, y ); } p->z -= p->speed; if( p->z <= -1000 ) InitStar( p, Speed ); x = Wid/2 + ( 200 * p->x ) / ( p->z + 1000 ); y = Hei/2 + ( 200 * p->y ) / ( p->z + 1000 ); if(( x < 0 )||( x > Wid-2 )||( y < 0 )||( y > Hei-2 )) { InitStar( p, Speed ); p2->x = 0; p2->y = 0; } else { p2->x = x; p2->y = y; SetAPen( Rast, 3 ); /* Warning: This is a little twisted. */ switch( p->z/200 ) { case 9: case 8: SetAPen( Rast, 2 ); break; case 0: WritePixel( Rast, x, y+1 ); WritePixel( Rast, x+1, y+1 ); case 4: case 3: case 2: case 1: WritePixel( Rast, x+1, y ); case 7: case 6: case 5: break; default: SetAPen( Rast, 1 ); break; } WritePixel( Rast, x, y ); } } if(!( ToFrontCount % 5 )) RetVal = ContinueBlanking(); } UnblankMousePointer( Wnd ); } else RetVal = FAILED; if( Scr ) CloseScreen( Scr ); if( Coords ) FreeVec( Coords ); if( OldCoords ) FreeVec( OldCoords ); return RetVal; }
LONG Blank( PrefObject *Prefs ) { struct Screen *Scr; struct Window *Wnd; LONG ToFrontCount = 0, RetVal = OK; MaxFires = Prefs[NUMBER].po_Level; Power = Prefs[POWER].po_Level; Radius = Prefs[RADIUS].po_Level; FireTable = AllocVec( sizeof( struct Fire ) * ( MAX_FIRE + 1 ), MEMF_CLEAR ); if( FireTable ) { Scr = OpenScreenTags( 0L, SA_Depth, Prefs[MODE].po_Depth, SA_Overscan, OSCAN_STANDARD, SA_Quiet, TRUE, SA_DisplayID, Prefs[MODE].po_ModeID, SA_Behind, TRUE, TAG_DONE ); if( Scr ) { LastFire = &( FireTable[MAX_FIRE] ); Wid = Scr->Width; Hei = Scr->Height; if( Prefs[MODE].po_Depth < 3 ) setCopperList( Hei, 1, &( Scr->ViewPort ), &custom ); SetRGB4(&( Scr->ViewPort ), 0, 0, 0, 0 ); SetRGB4(&( Scr->ViewPort ), 1, 0x0F, 0x0F, 0x0F ); SetRast(&( Scr->RastPort ), 0 ); NumFires = 0; Wnd = BlankMousePointer( Scr ); ScreenToFront( Scr ); while( RetVal == OK ) { WaitTOF(); IterateFire(&( Scr->RastPort )); if(!( ToFrontCount++ % 60 )) ScreenToFront( Scr ); if(!( ToFrontCount % 5 )) RetVal = ContinueBlanking(); } UnblankMousePointer( Wnd ); if( Prefs[MODE].po_Depth < 3 ) clearCopperList( &Scr->ViewPort ); CloseScreen( Scr ); } else RetVal = FAILED; FreeVec( FireTable ); } else RetVal = FAILED; return RetVal; }
LONG Blank( PrefObject *Prefs ) { LONG ToFrontCount = 0, Wid, Hei, Drops, x, y, r, i, incr, RetVal = OK; struct RastPort *Rast; struct Screen *Scr; struct Window *Wnd; Drops = Prefs[0].po_Level; Scr = OpenScreenTags( 0L, SA_Depth, Prefs[2].po_Depth, SA_Quiet, TRUE, SA_Overscan, OSCAN_STANDARD, SA_Behind, TRUE, SA_DisplayID, Prefs[2].po_ModeID, TAG_DONE ); if( Scr ) { Wid = Scr->Width; Hei = Scr->Height; Rast = &( Scr->RastPort ); SetRast( Rast, 0 ); for( i = 0; i < 4; i++ ) SetRGB4(&( Scr->ViewPort ), i, 4 * i, 4 * i, 4 * i ); Wnd = BlankMousePointer( Scr ); ScreenToFront( Scr ); while( RetVal == OK ) { if(!( ++ToFrontCount % 60 )) ScreenToFront( Scr ); if(!( ToFrontCount % Drops )) SetRast(&( Scr->RastPort ), 0 ); r = RangeRand( Wid/13 ) + Wid/25; x = RangeRand( Wid - 2*r ) + r; y = RangeRand( Hei - 2*r ) + r; incr = max( Wid/160, 1 ); for( i = 0; i < r; i += incr ) { WaitTOF(); SetAPen( &Scr->RastPort, ( ULONG )RangeRand(( 1L << Prefs[2].po_Depth ) - 1 ) + 1 ); DrawEllipse(&( Scr->RastPort ), x, y, i, i ); if( i ) { SetAPen(&( Scr->RastPort ), 0 ); DrawEllipse(&( Scr->RastPort ), x, y, i - incr, i - incr ); } } RetVal = ContinueBlanking(); } UnblankMousePointer( Wnd ); } else RetVal = FAILED; if( Scr ) CloseScreen( Scr ); return RetVal; }