//// 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;
 
}