2020年 4月 9日
最後の製作物としてオープニングとエンディングが完成した。
プログラム的には前作のカルギナカーディアのを参照して流用したのでサクッとできた。
オープニング
カードは三角関数(sin、cos)を使って楕円軌道を移動する。
くるりんくるりん
ちょっと難しい事として、手前のカードを前に表示するという事をやっている。
基準はこの場合 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さんがタイトルの島の絵を完成させてくれればほぼ完成となる(本稿でも表示されているが、まだ途中だとさ)
公開の準備にも入ってるので、まもなく公開できると思う。
しかし公開手続きは引き篭もりにはストレスで胃が痛い。