mirror of
https://github.com/softdorothy/Pararena2.git
synced 2024-06-11 01:29:28 +00:00
1 line
9.1 KiB
C
1 line
9.1 KiB
C
|
//============================================================
//============================================================
//== ==
//== DissBits Routines ==
//== ==
//============================================================
//============================================================
//======================================================== Includes
#include "Globals.h"
#include "UnivUtilities.h"
#include "DissBits.h"
//======================================================== DissBitsMed13QD
void DissBits13QD (Rect *clippedRect)
{
Rect transRect;
RgnHandle clipRgn;
register short value = 1;
register short mask = 0x0CA0;
short rectH, rectV;
clipRgn = NewRgn();
RectRgn(clipRgn, clippedRect);
do
{
if (value & 1) // pseudo-random # between 1 and 4095
value = (value >> 1) ^ mask;
else
value = (value >> 1);
rectH = (value % 80) * 8; // convert value into screen coords
rectV = ((value / 80) * 10) + clippedRect->top;
SetRect(&transRect, rectH, rectV, rectH + 8, rectV + 10);
if (isColor) // copy bits within rect to mainWndo
CopyBits(&((GrafPtr)offCWorkPtr)->portBits, &(((GrafPtr)mainWndo)->portBits),
&transRect, &transRect, srcCopy, clipRgn);
else
CopyBits(&offWorkBits, &(mainWndo->portBits), &transRect, &transRect,
srcCopy, clipRgn);
} while (value != 1);
rectH = 0; // handle special case for zero
rectV = clippedRect->top;
SetRect(&transRect, rectH, rectV, rectH + 8, rectV + 10);
if (isColor)
CopyBits(&((GrafPtr)offCWorkPtr)->portBits, &(((GrafPtr)mainWndo)->portBits),
&transRect, &transRect, srcCopy, clipRgn);
else
CopyBits(&offWorkBits, &(mainWndo->portBits), &transRect, &transRect,
srcCopy, clipRgn);
DisposeRgn(clipRgn);
}
//======================================================== DissBits12QD
void DissBits12QD (Rect *clippedRect)
{
Rect transRect;
RgnHandle clipRgn;
register short value = 1;
register short mask = 0x0500;
short rectH, rectV;
clipRgn = NewRgn();
RectRgn(clipRgn, clippedRect);
do
{
if (value & 1) // pseudo-random # between 1 and 2047
value = (value >> 1) ^ mask;
else
value = (value >> 1);
rectH = (value % 64) * 8; // convert # into screen coords
rectV = ((value / 64) * 12) + clippedRect->top;
SetRect(&transRect, rectH, rectV, rectH + 8, rectV + 12);
if (isColor) // copy bits within rect to mainWndo
CopyBits(&((GrafPtr)offCWorkPtr)->portBits, &(((GrafPtr)mainWndo)->portBits),
&transRect, &transRect, srcCopy, clipRgn);
else
CopyBits(&offWorkBits, &(mainWndo->portBits), &transRect, &transRect,
srcCopy, clipRgn);
} while (value != 1);
rectH = 0; // handle special case for zero
rectV = clippedRect->top;
SetRect(&transRect, rectH, rectV, rectH + 8, rectV + 12);
if (isColor)
CopyBits(&((GrafPtr)offCWorkPtr)->portBits, &(((GrafPtr)mainWndo)->portBits),
&transRect, &transRect, srcCopy, clipRgn);
else
CopyBits(&offWorkBits, &(mainWndo->portBits), &transRect, &transRect,
srcCopy, clipRgn);
DisposeRgn(clipRgn);
}
//======================================================== DissBits13Assm4
void DissBits13Assm4 (Rect *clippedRect)
{
Point zeroPt;
long screenOffset, workOffset;
short mask = 0x3500;
short value = 1;
short rectH, rectV, rowsThen;
char theMode;
SetPt(&zeroPt, 0, 0);
ShieldCursor(clippedRect, zeroPt);
theMode = true32b;
SwapMMUMode(&theMode);
do
{
if (value & 1) // produces # between 1 and 16383
value = (value >> 1) ^ mask;
else
value = (value >> 1);
rectH = (value % 160) * 4; // convert to screen coords
rectV = ((value / 160) * 5) + clippedRect->top;
if (rectV > (clippedRect->bottom - 5))
{
rowsThen = clippedRect->bottom - rectV;
if (rowsThen > 0)
{
workOffset = (long)((long)rectH >> 1) + workRowOffsets[rectV] +
(long)offWorkPix;
screenOffset = (long)((long)rectH >> 1) + screenRowAddrs[rectV];
asm 68000
{
move.l workOffset, a0
|