Login

Subversion Repositories NedoOS

Rev

Rev 28 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

//// imported
#include "../_sdk/sprite.h"
#include "../_sdk/ayfxplay.h"
#include "../_sdk/runtime.h"

VAR BYTE _CURBORDER;
CONST UINT _IMSTACK = 0x5f00;

PROC halter FORWARD();
PROC border FORWARD(BYTE col);
FUNC BYTE random FORWARD();
PROC prch FORWARD(UINT addr, CHAR c);
PROC testscr FORWARD();

PROC readkeys FORWARD(PBYTE pkeys);
VAR BYTE pkeys[40];
ENUM {
  _KEY_CAPS,
  _KEY_Z,
  _KEY_X,
  _KEY_C,
  _KEY_V,
 
  _KEY_A,
  _KEY_S,
  _KEY_D,
  _KEY_F,
  _KEY_G,
 
  _KEY_Q,
  _KEY_W,
  _KEY_E,
  _KEY_R,
  _KEY_T,
 
  _KEY_1,
  _KEY_2,
  _KEY_3,
  _KEY_4,
  _KEY_5,
 
  _KEY_0,
  _KEY_9,
  _KEY_8,
  _KEY_7,
  _KEY_6,
 
  _KEY_P,
  _KEY_O,
  _KEY_I,
  _KEY_U,
  _KEY_Y,
 
  _KEY_ENTER,
  _KEY_L,
  _KEY_K,
  _KEY_J,
  _KEY_H,
 
  _KEY_SPACE,
  _KEY_SYMBOL,
  _KEY_M,
  _KEY_N,
  _KEY_B
};

EXTERN UINT _emptytile;

CONST UINT tilepic;

CONST UINT doska;
CONST UINT beton;
CONST UINT cherry;
CONST UINT arrspr;
CONST UINT ballspr;
CONST UINT bigspr;
CONST UINT bigspr32;

////

STRUCT sprpos{
  BYTE x;
  BYTE y;
  PBYTE data;
}; //4

VAR UINT _wastimer;
VAR UINT _curtimer;
VAR UINT _logicframes;

CONST BYTE scrx   = 0x01;
CONST BYTE scry   = 0x01;
CONST BYTE scrwid = 0x1e;
CONST BYTE scrhgt = 0x14;

VAR BYTE sprposbuf[1024];
VAR sprpos* psprpos;
VAR UINT nsprpos;

PROC begin_sprites()
{
  psprpos = (sprpos*)sprposbuf;
  nsprpos = 0;
}

PROC prspr_memorize(BYTE x, BYTE y, PBYTE data) //draw sprite in scrbuf, memorize its position in sprpos
{
  prspr(x, y, data);
  psprpos->x = x;
  psprpos->y = y;
  psprpos->data = data;
  psprpos = (sprpos*)((UINT)psprpos + +sizeof(sprpos));
  INC nsprpos;
}

PROC restore_sprites()
{
  psprpos = (sprpos*)sprposbuf;
  WHILE (nsprpos!=0) {
    respr(psprpos->x, psprpos->y, psprpos->data);
    //todo яхЁхяхўрЄрЄ№ х∙╕ эхЄрщыют√х юс·хъЄ√ Їюэр т ¤Єюь яЁ ьюєуюы№эшъх
    psprpos = (sprpos*)((UINT)psprpos + +sizeof(sprpos));
    DEC nsprpos;
  };
}

PROC demo()
{
VAR BYTE x;
VAR BYTE y;
VAR BYTE xshift;
//  setborder(0x00);

  //clearscrbuf(0x07); //attr
  cleartilemap((PBYTE)emptytile);
  //prtilebox(0x01, 0x01, 0x05, 0x05); //update scrbuf from portion of tilemap

  pretile(0x01, 0x01, 0x1c, 0x08, (PBYTE)((UINT)tilepic+((/**x_in_tilemap*/0/8)*9)+((/**y_in_tilemap*/0/8)*0x100)));
 
  //pretile(0x02, 0x02, 0x04, 0x01, (PBYTE)doska);
  //pretile(0x02, 0x02, 0x04, 0x01, (PBYTE)((UINT)tilepic+((/**x_in_tilemap*/112/8)*9)+((/**y_in_tilemap*/0/8)*0x100)));

  //pretile(0x03, 0x04, 0x04, 0x01, (PBYTE)beton);
  //pretile(0x03, 0x04, 0x04, 0x01, (PBYTE)((UINT)tilepic+((/**x_in_tilemap*/80/8)*9)+((/**y_in_tilemap*/0/8)*0x100)));

  pretile(0x03, 0x10, 0x05, 0x02, (PBYTE)((UINT)tilepic+((/**x_in_tilemap*/0/8)*9)+((/**y_in_tilemap*/72/8)*0x100)));
 
  prtilebox(scrx, scry, scrwid, scrhgt); //update scrbuf from tilemap

  xshift = 0x00;
 
  _curtimer = _TIMER;
loop:
 
  _wastimer = _curtimer;

  readkeys(pkeys);
 
  begin_sprites();
 
  x = 0x00 + xshift;
  y = 0x00;
  prspr_memorize(x, y, (PBYTE)arrspr); INC x; y = y + 0x11;
  prspr_memorize(x, y, (PBYTE)arrspr); INC x; y = y + 0x11;
  prspr_memorize(x, y, (PBYTE)arrspr); INC x; y = y + 0x11;
  prspr_memorize(x, y, (PBYTE)arrspr); INC x; y = y + 0x11;
  prspr_memorize(x, y, (PBYTE)arrspr); INC x; y = y + 0x11;
  prspr_memorize(x, y, (PBYTE)arrspr); INC x; y = y + 0x11;
  prspr_memorize(x, y, (PBYTE)arrspr); INC x; y = y + 0x11;
  prspr_memorize(x, y, (PBYTE)arrspr); INC x; y = y + 0x11;

  x = 0x40 - xshift;
  y = 0x00;
  prspr_memorize(x, y, (PBYTE)cherry); INC x; y = y + 0x11;
  prspr_memorize(x, y, (PBYTE)ballspr); INC x; y = y + 0x11;
  prspr_memorize(x, y, (PBYTE)cherry); INC x; y = y + 0x11;
  prspr_memorize(x, y, (PBYTE)cherry); INC x; y = y + 0x11;
  prspr_memorize(x, y, (PBYTE)ballspr); INC x; y = y + 0x11;
  prspr_memorize(x, y, (PBYTE)ballspr); INC x; y = y + 0x11;
  prspr_memorize(x, y, (PBYTE)ballspr); INC x; y = y + 0x11;
  prspr_memorize(x, y, (PBYTE)ballspr); INC x; y = y + 0x11;

  x = 0x80 + xshift;
  y = 0x00;
  prspr_memorize(x, y, (PBYTE)bigspr); INC x; y = y + 0x17;
  prspr_memorize(x, y, (PBYTE)bigspr); INC x; y = y + 0x17;
  prspr_memorize(x, y, (PBYTE)bigspr); INC x; y = y + 0x17;
  prspr_memorize(x, y, (PBYTE)bigspr); INC x; y = y + 0x17;
  prspr_memorize(x, y, (PBYTE)bigspr); INC x; y = y + 0x17;
  prspr_memorize(x, y, (PBYTE)bigspr); INC x; y = y + 0x17;
  prspr_memorize(x, y, (PBYTE)bigspr); INC x; y = y + 0x17;
  prspr_memorize(x, y, (PBYTE)bigspr); INC x; y = y + 0x17;

  x = 0xc0 - xshift;
  y = 0x00;
  prspr_memorize(x, y, (PBYTE)bigspr32); INC x; y = y + 0x15;
  prspr_memorize(x, y, (PBYTE)bigspr32); INC x; y = y + 0x15;
  prspr_memorize(x, y, (PBYTE)bigspr32); INC x; y = y + 0x15;
  prspr_memorize(x, y, (PBYTE)bigspr32); INC x; y = y + 0x15;
  prspr_memorize(x, y, (PBYTE)bigspr32); INC x; y = y + 0x15;
  prspr_memorize(x, y, (PBYTE)bigspr32); INC x; y = y + 0x15;
  prspr_memorize(x, y, (PBYTE)bigspr32); INC x; y = y + 0x15;
  prspr_memorize(x, y, (PBYTE)bigspr32); INC x; y = y + 0x15;

  halter();
  showscr();
  testscr();
 
  //prtilebox(scrx, scry, scrwid, scrhgt); //update scrbuf from tilemap
  restore_sprites(); //update portions of scrbuf from tilemap
/**
  x = 0x00 + xshift;
  y = 0x00;
  respr(x, y, (PBYTE)arrspr); INC x; y = y + 0x11;
  respr(x, y, (PBYTE)arrspr); INC x; y = y + 0x11;
  respr(x, y, (PBYTE)arrspr); INC x; y = y + 0x11;
  respr(x, y, (PBYTE)arrspr); INC x; y = y + 0x11;
  respr(x, y, (PBYTE)arrspr); INC x; y = y + 0x11;
*/

  _curtimer = _TIMER;
  _logicframes = _curtimer - _wastimer;
  IF (_logicframes > 4) _logicframes = 4;
  WHILE (_logicframes != 0) {
   
    IF (pkeys[+_KEY_P]==0x00) {
            INC xshift;
            IF ((xshift&0x03) == 0x00) afxPLAY((xshift>>0x02)&0x0f, 0x00);
    };
    IF (pkeys[+_KEY_O]==0x00) DEC xshift;
    DEC _logicframes;
  };
 
  goto loop;
}