ETERNAL_STRIKER_M5 BINARY 2018/10/23

*Overview

-Works that ported STG(shooting game) [ETERNAL STRIKER Rr], which was operating in MIDP environment.
-When using the [M5Stack-SD-Menu] system, set [ETERNAL_STRIKER_M5.bin] to SD
If you write it to [Root folder], it works only by selecting from [Menu].

It is a binary only release.
-On the data side, including the content written to the source, I have only the right to use, so there is no plan to release the source.
-Please contact us at any time for technical parts.

(ガラケー前期、Doja2.1-3.0、あるいはMIDP時代に作った作品 [ETERNAL STRIKER Rr]の移植作です。
[M5Stack-SD-Menu]のシステムを入れて、[ETERNAL_STRIKER_M5.bin]をSDのルートにコピーすれば、
起動できるかと思います。SPIFFSは、スコアセーブ以外に使っていません。
元ゲーの最小構成版は、リソース含めて総計30kbとかで動いていました(一応、有料配信していたタイトルです)。
縦STGを、無理やり横移動だけに調整していますが、こういう制限の元に作るのも個人的には好みです。
時間回復する防壁、[ENE]が有るうちは、被弾しても大丈夫なシステムとしました。
なお、[B]ボタンあるいは[A][C]同時押しで、[ENE]を少し消費して、自発的に無敵モードに入る事も出来ます。)

バイナリのみの公開です。
ソースへ書かれたコンテンツを含む、データ側には、私が使用権のみを持つものがありますので、ソースの公開予定はありません。
技術部分については、随時お問い合わせください。

*FILES

-[ETERNAL_STRIKER_M5.bin]
-For [M5Stack-SD-Menu] system.
+[M5Stack-SD-Menu] > Copyright 2018 tobozo http://github.com/tobozo

-[ETERNAL_STRIKER_M5_APL0.bin]
-Binary image file of the application.
-In “esptool.exe”, transfer to the M5Stack terminal.
-When it does not work well, please start writing something 【sketch】, please write.
-Write “~_APL0” file from address 0x10000

-[ETERNAL_STRIKER_M5.bat]
-Place “esptool.exe” in the folder and execute the batch file, you can transfer the application.
-I’m sorry. It is compatible only with Windows OS.

 
*Excerpt of changes in [M5Stack library].

+[const] version only. [8bitColor] specialized.
+0 value handled transparently, Clipping supported, single color replacement supported.
+Probably so fast processing.
+Hopefully it will be helpful.
(+[const]版のみ。[8bitColor]に特化。
+0値を透過扱い、クリッピング対応、単一色置き換え対応。
+多分まあまあの高速処理。参考になれば幸いです。)

//[Sprite.h]
//2018/10/5 T.K Add Function selector
#define SPR_ZERO_T (1<<4) //Transparent color(0) ON
#define SPR_CLIP (1<<5) //Clipping ON
#define SPR_COLOR (1<<6) //Color Replacement ON (SPR_ZERO_T ONLY)
//
  void     pushImage_D8AD(int32_t x0, int32_t y0, uint32_t w, uint32_t h, const uint8_t *data ,uint16_t mode,uint16_t cl=0xffff);//Add Function Color data for replacement. (uint16_t cl)
// Write an Part of image (colour bitmap) to the sprite 8bit DIRECT 2018/10/5 T.K Add
//Add src x,y size w,h src max_w...
//Valid only for const version. Comment out dynamic pointer version.
  void     pushPartImage_D8(int32_t x0, int32_t y0, uint16_t sx, uint16_t sy, uint16_t w, uint16_t h, uint16_t sw, const uint8_t *data ,uint16_t mode, uint16_t cl=0xffff);
//

//[Sprite.cpp]
*/
/***************************************************************************************
** Function name:           pushImage 8bitDIRECT ADVANCE Clipping/Transparent 2018/10/5 T.K Add
*************************************************************************************x*/
// TODO Need to add more area boundary checks
void  TFT_eSprite::pushImage_D8AD(int32_t x, int32_t y, uint32_t w, uint32_t h, const uint8_t *data ,uint16_t mode,uint16_t cl)
{
  if (!_created ||_bpp != 8 || (x >= _iwidth) || (y >= _iheight) || (w == 0) || (h == 0) ) return;
	int yp2,dx,dx2,dt;
	byte color;
	if(mode&SPR_CLIP)//Clipping MODE
	for (int32_t yp = 0; yp < h; yp++)
	{
		//Cliping
		if(y+yp>=_iheight){break;}
		else
		if(y+yp<0){data+=w;continue;}
		yp2=(y+yp)*_iwidth;dx=x;dx2=x+w;
		if(dx<0){data+=dx*-1;dx=0;}
		if(dx2>=_iwidth){dt=dx2-_iwidth;dx2=_iwidth;}
		else
		dt=0;
		if(mode&SPR_ZERO_T)//Transparent color(0) ON >Run
		{
			if(mode&SPR_COLOR)
			for (int32_t xp = dx; xp < dx2; xp++){
				color = pgm_read_byte(data++);
			 	if(color)_img8[xp + yp2] = cl;
			}
			else
			for (int32_t xp = dx; xp < dx2; xp++){
				color = pgm_read_byte(data++);
			 	if(color)_img8[xp + yp2] = color;
			}
		}
		else
		for (int32_t xp = dx; xp < dx2; xp++){
			_img8[xp + yp2] = pgm_read_byte(data++);
		}
		data+=dt;
	}
	else//NORMAL
	if(mode&SPR_ZERO_T)//Transparent color(0) ON >Run
		for (uint32_t yp = y; yp < y + h; yp++)
		{
			yp2=yp * _iwidth;
		  for (uint32_t xp = x; xp < x + w; xp++)
		  {
			color = pgm_read_byte(data++);
			if(color)_img8[xp + yp2] = color;
		  }
		}
		else//NO EFFECT
		for (uint32_t yp = y; yp < y + h; yp++)
		{
			yp2=yp * _iwidth;
		  for (uint32_t xp = x; xp < x + w; xp++)
		  {
			_img8[xp + yp2]= pgm_read_byte(data++);
		  }
		}
}
/***************************************************************************************
** Function name:           pushImage 8bitDIRECT Partial transfer 2018/10/5 T.K Add
** Description:             push 565 colour FLASH (PROGMEM) image into a defined area
*************************************************************************************x*/
// TODO Need to add more area boundary checks
void  TFT_eSprite::pushPartImage_D8(int32_t x, int32_t y, uint16_t sx, uint16_t sy, uint16_t w, uint16_t h, uint16_t sw, const uint8_t *data,uint16_t m ,uint16_t cl)
{
  if (!_created ||_bpp != 8 || (x >= _iwidth) || (y >= _iheight) || (w == 0) || (h == 0) ) return;
	uint32_t bp,sbp;
	byte color;
		if(mode&SPR_CLIP);//Clipping MODE //Not supported
		else
		if(mode&SPR_ZERO_T)//Transparent color(0) ON >Run
		for (uint32_t yp = 0; yp < h; yp++)
		{
			bp=(y+yp) * _iwidth +x;sbp=(uint32_t)data+(sy+yp) * sw+sx;
			if(mode&SPR_COLOR)
			  for (uint32_t xp = 0; xp < w; xp++)
			  {
				 color=pgm_read_byte(xp + sbp);
				 if(color!=0)_img8[xp + bp] =cl; 
			  }
			else
			  for (uint32_t xp = 0; xp < w; xp++)
			  {
				 color=pgm_read_byte(xp + sbp);
				 if(color!=0)_img8[xp + bp] =color; 
				}
			}
			else//NOT T
			for (uint32_t yp = 0; yp < h; yp++)
			{
				bp=(y+yp) * _iwidth +x;sbp=(sy+yp) * sw+sx;
				for (uint32_t xp = 0; xp < w; xp++)
                	_img8[xp + bp] = pgm_read_byte(xp + sbp);
			}
}

“ETERNAL_STRIKER_M5 BINARY 2018/10/23” への1件のフィードバック

  1. ピンバック: ETERNAL STRIKER M5 | macsbug

コメントは受け付けていません。