view final_isi/fiscroll.c @ 69:c13a2f8c5b10

Rename files and some minor cleanups.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 01 Jun 2012 17:41:15 +0300
parents acb5694e93d9
children
line wrap: on
line source

#include "wrapper.h"

#include "fisi.h"

/********************** sKROLLER *******************************/

struct{
	int offset;
	int zoom;
}skrl[50];

/*extern char txr_slime[];*/
/*#define skrmap0 txr_slime*/

char skrmap0[256]={
0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,
0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,
0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
0x01,0x01,0x00,0x01,0x01,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x01,0x01,0x01,
0x01,0x01,0x00,0x01,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x01,0x01,
0x01,0x01,0x01,0x01,0x10,0x11,0x11,0x10,0x10,0x10,0x10,0x11,0x11,0x10,0x10,0x01,
0x01,0x01,0x01,0x10,0x10,0x11,0x10,0x10,0x01,0x01,0x10,0x10,0x11,0x11,0x10,0x01,
0x01,0x01,0x01,0x10,0x11,0x11,0x10,0x10,0x01,0x01,0x10,0x10,0x11,0x11,0x10,0x01,
0x01,0x01,0x10,0x10,0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x10,0x01,0x01,
0x01,0x10,0x10,0x11,0x11,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x10,0x10,0x01,0x01,
0x01,0x10,0x11,0x11,0x10,0x01,0x10,0x10,0x11,0x10,0x10,0x10,0x10,0x01,0x01,0x10,
0x01,0x10,0x11,0x10,0x01,0x01,0x01,0x10,0x11,0x10,0x01,0x01,0x01,0x01,0x11,0x10,
0x01,0x10,0x11,0x10,0x10,0x01,0x10,0x10,0x11,0x10,0x01,0x10,0x11,0x10,0x11,0x10,
0x01,0x10,0x10,0x11,0x10,0x10,0x10,0x11,0x10,0x10,0x01,0x10,0x11,0x10,0x01,0x10,
0x01,0x01,0x10,0x11,0x11,0x11,0x11,0x11,0x10,0x01,0x01,0x01,0x01,0x10,0x01,0x00,
0x00,0x01,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x01
};

char skrmap[512];
unsigned char skramble[256];

extern char sini[];

int skr_parms;
int skr_ambles;

extern char lensb[],txr_neon[],txr_dunneon[],txr_slime[];

void scr_txr(int k)
{
      int i;char*j=skrmap;char*txr;
      if(k==0)txr=skrmap0;
      if(k==1)txr=lensb;
      if(k==2)txr=txr_neon;
      if(k==3)txr=txr_dunneon;
      if(k==4)txr=txr_slime;
      for(i=256;i;i--)*j++=*txr++;
}

void scroller_init(int parms)
{
	int y;
	skr_parms=parms;

	if(parms&HORIZON){
        for(y=0;y<50;y++){
		skrl[y].offset=(200/(4+y))<<12; /* 10+ */
                skrl[y].zoom  =1000/(10+y);  /* 2400 */
	}
	}else
        for(y=0;y<50;y++){
		skrl[y].offset=(1200/(20+y))<<12;  /* 1200 */
		skrl[y].zoom  =2000/(10+y);        /* 2000 */
	}

	if(parms&NOSKRAMBLE){
		memcpy(skrmap,skrmap0,256);
		skr_ambles=0;
	}
	else
	{
	memset(skrmap,0,256);
	for(y=0;y<256;y++)skramble[y]=y;
	for(y=0;y<256;y++){
		int j=rand()&255,tmp;
		tmp=skramble[j];skramble[j]=skramble[y];skramble[y]=tmp;
	}
	skr_ambles=256;
	}
}

void scroller_do(char*buf,int t,int hg)
{

	static int lastt=0;
	char*d=buf;int y,offy;

        if(hg<0)hg=0;else if(hg>49)hg=49;

        memset(d,0,80*(50-hg));
        d+=80*(50-hg);

	if(skr_ambles){int tt=t;if(tt>256)tt=256;
  	  while(lastt<tt)if(skr_ambles){
		int j=skramble[skr_ambles--&255];
                skrmap[j]=skrmap0[j];
		/*skrmap[j+256]=skrmap0[j];*/
		lastt++;
	}}

	if(skr_parms&HORIZON)
		offy=-(t<<6)+(t<<12)&~3;else offy=(t<<6);

        for(y=0;y<hg;y++){
		register int ofz=skrl[y].offset+offy,dofz=skrl[y].zoom;
		#ifndef MSDOS_ASM
		  {int x=80;for(;x;x--)*d++=skrmap[((ofz+=dofz)>>8)&255];}
		#else
  		  skr_dorow(d,skrmap,dofz,ofz);
                  d+=80;
                #endif
	}
}