Hextrategy オープニングとエンディングができた


2020年 4月 9日
 
 
 最後の製作物としてオープニングとエンディングが完成した。

 プログラム的には前作のカルギナカーディアのを参照して流用したのでサクッとできた。

 オープニング
 

 カードは三角関数(sincos)を使って楕円軌道を移動する。
 
 

 くるりんくるりん

 ちょっと難しい事として、手前のカードを前に表示するという事をやっている。

 基準はこの場合 y座標で、手前のものほど y座標が下になるので 1フレーム毎にカードの表示順列を比較計算している。
 
 
 ここではカードは下から上へ移動する

 カード表示は横の大きさを sin値を使って変化させる事によって回転してるように見せてる。

 zf=sin(double(opcdz(n))*0.01)
 celput cw,cn-1,zf

 文字は全部下から上へスクロールするだけ。
 
 
 タイトル画面ではカードの下から上への表示がそのまま継続される。


 
 
 
 エンディング

 カードは右から左へ流れる

 エンディングでは難しい事は何もしてない。
 
 
 スタッフロールが続く

 そんな感じだ。
 
 
 BGMは DOVA-SYNDROMEさんより。

 オープニングは春秋冬さんの狩り

 エンディングは清水裕介さんの濡れたヴィオラ

 どちらも素晴らしい楽曲でオープニングとエンディングを引き立ててくれる。

 ちなみに濡れたヴィオラはテイペンで使ってました(笑)
 
 
 
 それではオープニングとエンディングのソースを公開する。

; オープニング、エンディング

*opening ; オープニング

	repeat oemjb : oemjf(cnt)=0 : loop ; リセット
	repeat cdswb : cdswf(cnt)=0 : loop
	repeat opcdb : opcdf(cnt)=0 : loop

	mmplays 7

	edc=0 : csfn=0
	repeat
	 stick ky : if ky!0 : break

	 if edc\57=0 and edc<610 : opcd_set
	 if edc>1000 and edc\100=0 : cdsw_set 2

	 if edc=0	 : oemj_set 1,1,48,2
	 if edc=65   : oemj_set 1,2,48,2
	 if edc=130  : oemj_set 1,3,48,2
	 if edc=195  : oemj_set 1,4,48,2

	 if edc=285  : oemj_set 1,5,48,2
	 if edc=350  : oemj_set 1,6,48,2

	 if edc=440	 : oemj_set 1,7,48,2
	 if edc=505	 : oemj_set 1,8,48,2
	 if edc=570	 : oemj_set 1,9,48,2
	 if edc=635  : oemj_set 1,10,48,2

	 if edc=725  : oemj_set 1,11,48,2
	 if edc=790  : oemj_set 1,12,48,2
	 if edc=855  : oemj_set 1,13,48,2
	 if edc=920  : oemj_set 1,14,48,2
	 if edc=975  : oemj_set 1,15,48,2
	 if edc=1040 : oemj_set 1,16,48,2

	 if edc=1150 : oemj_set 1,17,48,2
	 if edc=1215 : oemj_set 1,18,48,2
	 if edc=1280 : oemj_set 1,19,48,2

	 if edc=1370 : oemj_set 1,20,48,2
	 if edc=1435 : oemj_set 1,21,48,2
	 if edc=1500 : oemj_set 1,22,48,2
	 if edc=1565 : oemj_set 1,23,48,2

	 if edc=1655 : oemj_set 1,24,48,2
	 if edc=1720 : oemj_set 1,25,48,2


	 if edc=1930 : break

	 redraw 0
	  color 1,1,1 : boxf : color 255,255,255
	  pos 0,0 : celput groundw
	  opcd_put
	  cdsw_put
	  oemj_put
	  dg_put
	 redraw 1
	 await 1000/20
	 edc+
	loop

	mmstop : mmplays 8

	return


*ending ; エンディング

	repeat oemjb : oemjf(cnt)=0 : loop ; リセット
	repeat cdswb : cdswf(cnt)=0 : loop
	repeat opcdb : opcdf(cnt)=0 : loop

	mmplays 9

	edc=0 : edcy=1800 : crc=0
	repeat
	 stick ky : if ky!0 : break

	 if edc\150=0 and edc<3100 : cdsw_set 3

	 if edc=0	 : oemj_set 2,1,48,1
	 if edc=100  : oemj_set 2,2,48,1
	 if edc=200  : oemj_set 2,3,48,1
	 if edc=300  : oemj_set 2,4,48,1
	 if edc=400  : oemj_set 2,5,48,1

	 if edc=550	 : oemj_set 2,6,48,1
	 if edc=650	 : oemj_set 2,7,48,1

	 if edc=800	 : oemj_set 2,8,48,1
	 if edc=900	 : oemj_set 2,9,48,1
	 if edc=1000 : oemj_set 2,10,48,1
	 if edc=1100 : oemj_set 2,11,48,1
	 if edc=1200 : oemj_set 2,12,48,1

	 if edc=1350 : oemj_set 2,13,48,1
	 if edc=1450 : oemj_set 2,14,48,1

; クレジット
	 x1=120 : x2=160 : x3=200 : x4=80
	 k1=35 : k2=50 : k3=70
	 repeat 1
	  if crc=0  : if edc=edcy : oemj_set 3,1 ,x1,2,1 : edcy+=k1 : crc+ : break
	  if crc=1  : if edc=edcy : oemj_set 3,2 ,x2,2,0 : edcy+=k2 : crc+ : break
	  if crc=2  : if edc=edcy : oemj_set 3,3 ,x1,2,1 : edcy+=k1 : crc+ : break
	  if crc=3  : if edc=edcy : oemj_set 3,4 ,x2,2,0 : edcy+=k2 : crc+ : break
	  if crc=4  : if edc=edcy : oemj_set 3,5 ,x1,2,1 : edcy+=k1 : crc+ : break
	  if crc=5  : if edc=edcy : oemj_set 3,6 ,x2,2,0 : edcy+=k2 : crc+ : break
	  if crc=6  : if edc=edcy : oemj_set 3,7 ,x1,2,1 : edcy+=k1 : crc+ : break
	  if crc=7  : if edc=edcy : oemj_set 3,8 ,x2,2,0 : edcy+=k3 : crc+ : break

	  if crc=8  : if edc=edcy : oemj_set 3,9 ,x1,2,2 : edcy+=k1 : crc+ : break
	  if crc=9  : if edc=edcy : oemj_set 3,10,x2,2,0 : edcy+=k2 : crc+ : break
	  if crc=10 : if edc=edcy : oemj_set 3,11,x1,2,2 : edcy+=k1 : crc+ : break
	  if crc=11 : if edc=edcy : oemj_set 3,12,x2,2,0 : edcy+=k2 : crc+ : break
	  if crc=12 : if edc=edcy : oemj_set 3,13,x1,2,2 : edcy+=k1 : crc+ : break
	  if crc=13 : if edc=edcy : oemj_set 3,14,x2,2,0 : edcy+=k1 : crc+ : break
	  if crc=14 : if edc=edcy : oemj_set 3,15,x2,2,0 : edcy+=k1 : crc+ : break
	  if crc=15 : if edc=edcy : oemj_set 3,16,x2,2,0 : edcy+=k3 : crc+ : break

	  if crc=16 : if edc=edcy : oemj_set 3,18,x1,2,2 : edcy+=k1 : crc+ : break
	  if crc=17 : if edc=edcy : oemj_set 3,19,x2,2,0 : edcy+=k1 : crc+ : break
	  if crc=18 : if edc=edcy : oemj_set 3,20,x2,2,0 : edcy+=k1 : crc+ : break
	  if crc=19 : if edc=edcy : oemj_set 3,21,x2,2,0 : edcy+=k1 : crc+ : break
	  if crc=20 : if edc=edcy : oemj_set 3,22,x2,2,0 : edcy+=k1 : crc+ : break
	  if crc=21 : if edc=edcy : oemj_set 3,23,x2,2,0 : edcy+=k1 : crc+ : break
	  if crc=22 : if edc=edcy : oemj_set 3,24,x2,2,0 : edcy+=k3 : crc+ : break

	  if crc=23 : if edc=edcy {
	   oemj_set 3,26,x4    ,2,3
	   oemj_set 3,27,x4+77 ,2,3
	   oemj_set 3,28,x4+111,2,3
	   edcy+=k1 : crc+ : break
	  }
	  if crc=24 : if edc=edcy : oemj_set 3,33,x1,2,1 : edcy+=k1 : crc+ : break
	  if crc=25 : if edc=edcy : oemj_set 3,35,x2,2,0 : edcy+=k2 : crc+ : break
	  if crc=26 : if edc=edcy : oemj_set 3,29,x1,2,1 : edcy+=k1 : crc+ : break
	  if crc=27 : if edc=edcy : oemj_set 3,34,x2,2,0 : edcy+=k2 : crc+ : break
	  if crc=28 : if edc=edcy : oemj_set 3,30,x1,2,1 : edcy+=k1 : crc+ : break
	  if crc=29 : if edc=edcy : oemj_set 3,36,x2,2,0 : edcy+=k2 : crc+ : break
	  if crc=30 : if edc=edcy : oemj_set 3,31,x1,2,1 : edcy+=k1 : crc+ : break
	  if crc=31 : if edc=edcy : oemj_set 3,37,x2,2,0 : edcy+=k1 : crc+ : break
	  if crc=32 : if edc=edcy : oemj_set 3,40,x2,2,0 : edcy+=k1 : crc+ : break
	  if crc=33 : if edc=edcy : oemj_set 3,41,x2,2,0 : edcy+=k1 : crc+ : break
	  if crc=34 : if edc=edcy : oemj_set 3,38,x2,2,0 : edcy+=30 : crc+ : break
	  if crc=35 : if edc=edcy : oemj_set 3,39,x2+200,2,0 : edcy+=k3 : crc+ : break

	  if crc=36 : if edc=edcy : oemj_set 3,32,x1,2,1 : edcy+=k1 : crc+ : break
	  if crc=37 : if edc=edcy {
	   oemj_set 4,1 ,x2,2,4
	   oemj_set 3,43,x2+50,2,0
	   edcy+=k1 : crc+ : break
	  }
	  if crc=38 : if edc=edcy {
	   oemj_set 4,2 ,x2,2,5
	   oemj_set 3,44,x2+50,2,0
	   edcy+=k1 : crc+ : break
	  }
	  if crc=39 : if edc=edcy {
	   oemj_set 4,3 ,x2,2,6
	   oemj_set 3,45,x2+50,2,0
	   edcy+=k1 : crc+ : break
	  }
	  if crc=40 : if edc=edcy {
	   oemj_set 4,4 ,x2,2,7
	   oemj_set 3,46,x2+50,2,0
	   edcy+=k1 : crc+ : break
	  }
	  if crc=41 : if edc=edcy {
	   oemj_set 4,5 ,x2,2,8
	   oemj_set 3,47,x2+50,2,0
	   edcy+=k1 : crc+ : break
	  }
	  if crc=42 : if edc=edcy {
	   oemj_set 4,6 ,x2,2,9
	   oemj_set 3,48,x2+50,2,0
	   edcy+=k1 : crc+ : break
	  }
	 loop

	 if edc=3720 : cdsw_set 0

	 if edc=3715 : oemj_set 2,15,48,1
	 ;if edc=3820 : oemj_set 2,16,48,1
	 if edc=3940 : oemj_set 2,17,48,1
	 if edc=4000 : oemj_set 2,18,48,1

	 if edc=4050 { ; ストップ
	  repeat oemjb
	   oemjd(cnt)=0
	  loop
	 }

;dg edc,2

	 redraw 0
	  pos 0,0 : celput thronew
	  cdsw_put
	  oemj_put
	  dg_put
	 redraw 1
	 await 1000/20
	 edc+
	loop

	mmstop

	syoki2

	return


; op、ed表示 ------------------------------------------------------
#deffunc oemj_set int oemj_setn1,int oemj_setn2,int oemj_setn3,int oemj_setn4,int oemj_setn5 ; ed文字セット

	f=0
	repeat oemjb : n=cnt
	 if oemjf(n)=0 : f=1 : break
	loop
	if f=0 : return

	oemjf(n)=oemj_setn1 ; グラNo.
	oemjn(n)=oemj_setn2 ; 文字No.
	oemjx(n)=oemj_setn3	; x座標
	oemjy(n)=wy			; y座標
	oemjd(n)=oemj_setn4	; スピード
	oemjc(n)=oemj_setn5 ; カラー

	return


#deffunc oemj_put ; ed文字表示

	gmode 2

	repeat oemjb : n=cnt
	 if oemjf(n)=0 : continue

	 if oemjc(n)=0 : gmulcolor 255,255,255	; 白
	 if oemjc(n)=1 : gmulcolor 160,160,255	; 青
	 if oemjc(n)=2 : gmulcolor 128,255,128	; 緑
	 if oemjc(n)=3 : gmulcolor 228+27,85+27,139+27 ; ピンク
	 if oemjc(n)=4 : gmulcolor 255,96,96	; 火
	 if oemjc(n)=5 : gmulcolor 96,96,255	; 水
	 if oemjc(n)=6 : gmulcolor 96,255,96	; 風
	 if oemjc(n)=7 : gmulcolor 255,255,96	; 地
	 if oemjc(n)=8 : gmulcolor 255,255,255	; 光
	 if oemjc(n)=9 : gmulcolor 160,160,160	; 闇

	 oemjy(n)-=oemjd(n)
	  if oemjy(n)<-35 : oemjf(n)=0 : continue

	 pos oemjx(n),oemjy(n)
	  if oemjf(n)=1 : celput mj32_opw,oemjn(n)-1 ; op
	  if oemjf(n)=2 : celput mj32_edw,oemjn(n)-1 ; ed
	  if oemjf(n)=3 : celput cre_ftw ,oemjn(n)-1 ; クレ1
	  if oemjf(n)=4 : celput cre_ft2w,oemjn(n)-1 ; クレ2
	loop

	gmulcolor 255,255,255

	return


#deffunc cdsw_set int cdsw_setf ; カードショーセット

	f=0
	repeat cdswb : n=cnt
	 if cdswf(n)=0 : f=1 : break
	loop
	if f=0 : return

	zk=rnd(6)+1 ; 属性種類
	 r=rnd(cha_syu(zk))
	  cn=cha_zoks(zk)+r ; キャラNo.
	cdswf(n)=cn ; フラグ
	if cdsw_setf=0 { ; 真ん中
	 cdswx(n)=wx/2
	 cdswy(n)=77
	 cdswz(n)=0
	}
	if cdsw_setf=2 { ; 下から上へ
	 if csfn\2=0 : cdswx(n)=rnd(wx/2-cox)+cox/2
	 if csfn\2=1 : cdswx(n)=rnd(wx/2-cox)+wx/2+cox/2
	 csfn+
	 cdswy(n)=wy
	 cdswz(n)=rnd(157)
	  if cdswz(n)\2=1 : cdswz(n)+=1
	}
	if cdsw_setf=3 { ; 右から左へ
	 cdswx(n)=wx+10
	 cdswy(n)=rnd(wy-coy)
	 cdswz(n)=rnd(157)
	  if cdswz(n)\2=1 : cdswz(n)+=1
	}

	cdswd(n)=cdsw_setf ; 移動方向

	return


#deffunc cdsw_put ; カードショー表示

	gmode 2

	repeat cdswb : n=cnt
	 if cdswf(n)=0 : continue
	 cn=cdswf(n)
	 if cdswd(n)=2 : cdswy(n)-=1 : if cdswy(n)<(0-coy) : cdswf(n)=0 : continue ; 左へ
	 if cdswd(n)=3 : cdswx(n)-=1 : if cdswx(n)<(0-cox) : cdswf(n)=0 : continue ; 左へ
	 cdswz(n)+=2
	 if cdswz(n)\314=0 {
	  zk=rnd(6)+1 ; 属性種類
	   r=rnd(cha_syu(zk))
	    cdswf(n)=cha_zoks(zk)+r ; キャラNo.
	 }
	 zf=sin(double(cdswz(n))*0.01)

	 pos cdswx(n),cdswy(n) : celput cw,cn-1,zf
	loop

	return


#deffunc opcd_set ; カード楕円ショーセット

	f=0
	repeat opcdb : n=cnt+1
	 if opcdf(n)=0 : f=1 : break
	loop
	if f=0 : return

	zk=rnd(6)+1			; 属性種類
	 r=rnd(cha_syu(zk))
	  cn=cha_zoks(zk)+r ; キャラNo.
	opcdf(n)=cn			; フラグ

	opcdp(n)=-rag90		; pai
	opcdz(n)=rnd(157)	; 回転
	 if opcdz(n)\2=1 : opcdz(n)+=1

	return


#deffunc opcd_put ; カード楕円ショー表示

	repeat opcdb : opcdn(cnt)=0 : loop

	repeat opcdb : n=cnt+1
	 if opcdf(n)=0 : continue

	 opcdy(n)=sin(opcdp(n))*opcdyln ; 先にy座標を計算する

	 repeat opcdb
	  if opcdn(cnt)=0 : opcdn(cnt)=n : break
	  if opcdy(opcdn(cnt))<opcdy(n) : continue
	  n2=opcdn(cnt) : opcdn(cnt)=n : n=n2 ; 入れ替え
	 loop
	loop

	repeat opcdb : n=opcdn(cnt);cnt
	 if opcdf(n)=0 : continue

	 cn=opcdf(n)
	 xf=cos(opcdp(n))*opcdxln
	 yf=opcdy(n);sin(opcdp(n))*opcdyln
	 zf=sin(double(opcdz(n))*0.01)

	 opcdc=255
	 if opcdp(n)<0.0 { ; 透明度
	  opcdc=(157+int(opcdp(n)*100))*10
	  if opcdc>255 : opcdc=255
	 }
	 if opcdp(n)>3.14 {
	  opcdc=(471-int(opcdp(n)*100))*10
	  if opcdc<0 : opcdc=0
	  if opcdc>255 : opcdc=255
	 }

	 gmode 3,,,opcdc
	 pos double(wx/2)+xf,100.0+yf : celput cw,cn-1,zf

	 opcdp(n)+=0.01 : if opcdp(n)>pai2-rag90 : opcdf(n)=0 : continue ; opcdp(n)=opcdp(n)-6.28

	 opcdz(n)+=2
	 if opcdz(n)\314=0 {
	  zk=rnd(6)+1 ; 属性種類
	   r=rnd(cha_syu(zk))
	    opcdf(n)=cha_zoks(zk)+r ; キャラNo.
	 }
	loop

	return

 
 
 これにて、後は ANGEL MAKERさんがタイトルの島の絵を完成させてくれればほぼ完成となる(本稿でも表示されているが、まだ途中だとさ)

 公開の準備にも入ってるので、まもなく公開できると思う。

 しかし公開手続きは引き篭もりにはストレスで胃が痛い。
 
 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です