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さんがタイトルの島の絵を完成させてくれればほぼ完成となる(本稿でも表示されているが、まだ途中だとさ)
公開の準備にも入ってるので、まもなく公開できると思う。
しかし公開手続きは引き篭もりにはストレスで胃が痛い。