ゲーム「リング王国物語」公開しました
投稿者:
taki
投稿日:2015/05/17 18:12
お借りした素材一覧
キャラクタ
1262057768_final様
勇者
qhqh123様
お姫様
tarutaru82様
王様
キャラクタ画像
REFMAP様
FSM兵士画像
マップチップ
gomez様
FSM内装
cdv30200様
お城系の家具
BGM
うさぎ529様
あなたにボディーブロー
地獄に向かう
星の海
ronto様
Battle of Soul
@knatech様
BGM フィールド系
aoshi様
何ですとっ!?
djraxe様
Let's Stroll
効果音
ルティゲル様
打撃音_01
打撃音_02
ronto様
楽しい感じのジングル
悲しい感じのジングル
hightoller様
効果音源/hit
池ちゃん様
ゲーム_祝福される_拍手_口笛
一枚絵・画像
nisikigoi様
青空01
hainu様
青空エンディング
Special Thanks
は~げん様
~~~~~~~~~~~~~~~~~~~
謝辞
このゲームを作るにあたって
ファンタジー世界で王様と勇者が
姫の結婚を巡って殴り合う話を作って!
という無茶振りに対して快くストーリー制作を
引受けてくださったは~げんさんには本当に感謝しています
ありがとうございました
~~~~~~~~~~~~~~~~~~~
操作説明
z:ジャブ
x:ストレート
↓:ガード
←→:移動
上の緑色のバーが残りHP
~~~~~~~~~~~~~~~~~~~
リンク
リング王国物語 - 【2DRPG】
~~~~~~~~~~~~~~~~~~~
余談
このゲームはもともとネタゲー杯に向けて
年末頃から作り始めたものでした。
締め切りに間に合うと思っていたあたり
当時、リアルが充実()していた影響で
頭がおかしくなっていた事が分かります。
かれこれ4ヶ月ほどいじくり続けたので
率直に言って途中で飽きました。
それでも完成させる事ができたのは
掲示板で暖かいコメントをくださった
idohakaさんと黒いリボンさん
それからストーリーを提供してくださった
は〜げんさんのおかげです
ありがとうございました。
今回一番やりたかったのはあたり判定の部分です。
シューティングの様な方法ではなくて、お互いの位置関係と
攻撃しているかガードしているかという状態に対応する変数を使って
プログラミングの教科書に載っているジャンケンゲームの要領で
楽なスクリプトで格ゲーっぽいものができるはず!
という狙いでした。
結果的に修正できずに残ってしまった不具合もありますが
概ね満足しています。
今回のスクリプトには飽きたので再挑戦はしません。
殴り合っている部分のスクリプト
ツイート
キャラクタ
1262057768_final様
勇者
qhqh123様
お姫様
tarutaru82様
王様
キャラクタ画像
REFMAP様
FSM兵士画像
マップチップ
gomez様
FSM内装
cdv30200様
お城系の家具
BGM
うさぎ529様
あなたにボディーブロー
地獄に向かう
星の海
ronto様
Battle of Soul
@knatech様
BGM フィールド系
aoshi様
何ですとっ!?
djraxe様
Let's Stroll
効果音
ルティゲル様
打撃音_01
打撃音_02
ronto様
楽しい感じのジングル
悲しい感じのジングル
hightoller様
効果音源/hit
池ちゃん様
ゲーム_祝福される_拍手_口笛
一枚絵・画像
nisikigoi様
青空01
hainu様
青空エンディング
Special Thanks
は~げん様
~~~~~~~~~~~~~~~~~~~
謝辞
このゲームを作るにあたって
ファンタジー世界で王様と勇者が
姫の結婚を巡って殴り合う話を作って!
という無茶振りに対して快くストーリー制作を
引受けてくださったは~げんさんには本当に感謝しています
ありがとうございました
~~~~~~~~~~~~~~~~~~~
操作説明
z:ジャブ
x:ストレート
↓:ガード
←→:移動
上の緑色のバーが残りHP
~~~~~~~~~~~~~~~~~~~
リンク
リング王国物語 - 【2DRPG】
~~~~~~~~~~~~~~~~~~~
余談
このゲームはもともとネタゲー杯に向けて
年末頃から作り始めたものでした。
締め切りに間に合うと思っていたあたり
当時、リアルが充実()していた影響で
頭がおかしくなっていた事が分かります。
かれこれ4ヶ月ほどいじくり続けたので
率直に言って途中で飽きました。
それでも完成させる事ができたのは
掲示板で暖かいコメントをくださった
idohakaさんと黒いリボンさん
それからストーリーを提供してくださった
は〜げんさんのおかげです
ありがとうございました。
今回一番やりたかったのはあたり判定の部分です。
シューティングの様な方法ではなくて、お互いの位置関係と
攻撃しているかガードしているかという状態に対応する変数を使って
プログラミングの教科書に載っているジャンケンゲームの要領で
楽なスクリプトで格ゲーっぽいものができるはず!
という狙いでした。
結果的に修正できずに残ってしまった不具合もありますが
概ね満足しています。
今回のスクリプトには飽きたので再挑戦はしません。
殴り合っている部分のスクリプト
playBGM(107793)
speakFullScreen(true, "ここで唐突に操作説明!!\nz:ジャブ \nx:ストレート \n↓:ガード \n←→:移動\n上にある緑のバーが残りHP\n時間無制限1ラウンドマッチ\n貴方は勇者を叩きのめす事ができるか!!")
idp=createArray()
i=0
while i<12
idp[i]=createSprite(276105)
setSpritePosition(idp[i], 224,200)
setSpriteZOrder(idp[i], 5)
i=i+1
end
i=0
m=0
while m<3
n=0
while n<4
setSpriteRect(idp[i], 96*n, 96*m, 96, 96, 0, 0, 96*1.5, 96*1.5)
n=n+1
i=i+1
end
m=m+1
end
setCanvasVisible(true)
ide=createArray()
i=0
while i<12
ide[i]=createSprite(280135)
setSpritePosition(ide[i], 200,200)
setSpriteZOrder(ide[i], 5)
i=i+1
end
i=0
m=0
while m<3
n=0
while n<4
setSpriteRect(ide[i], 96*n, 96*m, 96, 96, 0, 0, 96*1.5, 96*1.5)
n=n+1
i=i+1
end
m=m+1
end
i=0
while i<12
setSpriteScale(idp[i],0 ,0 )
setSpriteScale(ide[i],0 ,0 )
i=i+1
end
#下準備
setMenuOpenKeyEnable(false)
textID = createText(10, 20, 512, 128)
#HPの表示
hpbp=createSprite(263560)
setSpriteRect(hpbp,0, 0, 32, 32, 0, 0, 32, 32)
setSpritePosition(hpbp,304,80 )
hpbe=createSprite(263560)
setSpriteRect(hpbe,0, 0, 32, 32, 0, 0, 32, 32)
setSpritePosition(hpbe,208,80 )
#プレイヤー関連の変数
posp=312
spidp=1
jp=0
kp=0
statep=0
nop=10
hpp=1300
#敵関連の変数
pose=200
spide=13
je=0
ke=0
statee=0
noe=10
hpe=1000
#あたり判定,ダメージ
atari=createArray()
i=0
while i< 10
atari[i]=createArray()
i=i+1
end
i=0
while i<10
j=0
while j<10
atari[i][j]=-1
j=j+1
end
i=i+1
end
#時機の攻撃がヒット
atari[1][0]=1
atari[1][2]=1
atari[1][3]=1
atari[1][4]=1
atari[3][0]=1
atari[3][2]=1
atari[3][4]=1
#敵の攻撃がヒット
atari[0][1]=2
atari[2][1]=2
atari[3][1]=2
atari[4][1]=2
atari[0][3]=2
atari[3][2]=2
atari[4][3]=2
#自機がガード
atari[5][1]=3
atari[5][3]=3
#敵がガード
atari[1][5]=4
atari[3][5]=4
#相打ち
atari[1][1]=0
atari[3][3]=0
i=0
#入力の取得を始めます
startInput()
#ループし続けるように変数を設定します。
loop = true
#loop変数がtrueの間はループし続けます。
while loop
#入力が入っているかどうか調べます。
while hasInput()
#内部にたまっている入力を処理対象とします。
takeInput()
if isKeyDown("RIGHT")
setFlag("right",true)
elsif isKeyUp("RIGHT")
setFlag("right",false)
elsif isKeyDown("LEFT")
setFlag("left",true)
elsif isKeyUp("LEFT")
setFlag("left",false)
end
if statep==0
if isKeyDown("DOWN")
setFlag("guard",true)
elsif isKeyDown("Z")
setFlag("jab",true)
elsif isKeyDown("X")
setFlag("straight",true)
end
elsif statep==6
elsif isKeyUp("DOWN")
setFlag("guard",false)
statep=0
end
end
#時機関連
spidp=idp[0]
if statep==6
if nop<11
nop=nop+1
setSpriteScale(idp[0],0,0 )
spidp=idp[11]
else
statep=0
spidp=idp[0]
end
end
if getFlag("right")
if posp<312
posp=posp+10
end
elsif getFlag("left")
if posp>pose-128
posp=posp-10
end
end
if getFlag("guard")
setSpriteScale(idp[0],0 ,0 )
spidp=idp[1]
statep=5
end
if getFlag("jab")
setSpriteScale(idp[0],0 ,0 )
if jp<3
spidp=idp[jp+2]
jp=jp+1
statep=1
damagep=10
sdp=228149
elsif j<5
spidp=idp[6-jp]
jp=jp+1
statep=2
else
setFlag("jab",false)
jp=0
spidp=idp[0]
statep=0
end
end
if getFlag("straight")
setSpriteScale(idp[0],0 ,0 )
if kp<5
spidp=idp[kp+6]
kp=kp+1
statep=3
damagep=30
sdp=228148
elsif kp<9
spidp=idp[14-kp]
kp=kp+1
statep=4
else
setFlag("straight",false)
kp=0
spidp=idp[0]
statep=0
end
end
#敵のAI関連
if statee==0
case rand(12)
when 0
if pose<posp+128
pose=pose+10
end
when 1
if pose>200
pose=pose-10
end
when 2
setFlag("jabE",true)
when 3
setFlag("straightE",true)
when 4
setFlag("guardE",true)
else
end
end
spide=ide[0]
if statee==6
if noe<11
noe=noe+1
setSpriteScale(ide[0],0,0 )
spide=ide[11]
else
statee=0
spide=ide[0]
end
end
if statee==5
if rand(5)==0
setFlag("guardE",false)
statee=0
spide=ide[0]
end
end
if getFlag("guardE")
setSpriteScale(ide[0],0 ,0 )
spide=ide[1]
statee=5
end
if getFlag("jabE")
setSpriteScale(ide[0],0 ,0 )
if je<3
spide=ide[je+2]
je=je+1
statee=1
damagee=10
sde=228149
elsif j<5
spide=ide[6-je]
je=je+1
statee=2
else
setFlag("jabE",false)
je=0
spide=ide[0]
statee=0
end
end
if getFlag("straightE")
setSpriteScale(ide[0],0 ,0 )
if ke<5
spide=ide[ke+6]
ke=ke+1
statee=3
damagee=30
sde=228148
elsif ke<9
spide=ide[14-ke]
ke=ke+1
statee=4
else
setFlag("straightE",false)
ke=0
spide=ide[0]
statee=0
end
end
#あたり判定
if pose-posp>=88&&pose-posp<=128
case atari[statep][statee]
when 0
statep=6
spidp=idp[11]
hpp=hpp-damagee
if posp<312
posp=posp+10
end
playSound(sde)
nop=0
statee=6
spide=ide[11]
hpe=hpe-damagep
if pose>200
pose=pose-10
end
playSound(sdp)
noe=0
when 1
statee=6
spide=ide[11]
hpe=hpe-damagep
playSound(sdp)
if pose>200
pose=pose-10
end
noe=0
when 2
statep=6
spidp=idp[11]
hpp=hpp-damagee
playSound(sde)
if posp<312
posp=posp+10
end
nop=0
when 3
hpp=hpp-damagee*0.1
if posp<312
posp=posp+10
end
when 4
hpe=hpe-damagep*0.1
if pose>200
pose=pose-10
end
else
end
end
setSpriteScale(spidp,1 ,1 )
setSpritePosition(spidp,posp,200)
setSpriteScale(spide,-1 ,1 )
setSpritePosition(spide,pose,200)
setSpriteScale(hpbp,5*hpp/1300 ,1 )
setSpriteScale(hpbe,-5*hpe/1000 ,1 )
drawCanvas()
#入力がないときに無駄に処理をしないように30ミリ秒waitを入れます。
waitTime(30)
i=0
while i<12
setSpriteScale(idp[i],0 ,0 )
setSpriteScale(ide[i],0 ,0 )
i=i+1
end
if hpe<=0&&hpp>0
stopBGM()
loop=false
setVariable("result",0)
playSound(149411)
setTextFontSize(32)
setTextFontColor(255, 0, 0)
speak("YOU WIN")
waitTime(1000)
elsif hpe<=0&&hpp<=0||hpe>=0&&hpp<=0
stopBGM()
loop=false
setVariable("result",2)
playSound(228588)
setTextFontSize(32)
setTextFontColor(0, 0, 255)
speak("YOU LOSE")
waitTime(1000)
end
end
#入力の取得を終了します。
endInput()
setTextFontSize(18)
setTextFontColor(255, 255, 255)
warp(38746, 4, 1)
コメントする
コメントするには、ログインする必要があります。
コメント一覧
|
おひさしぶりです。 takiさんのゲームにはいつも、 新鮮な驚きを感じておりますが、 今回も驚きながら、楽しくプレイさせていただきました♪ |
|
特筆すべきは、レスポンスの良さですな。 操作性が快適で当たり判定もちょうどよく、 誰でもすぐに入っていける気軽さがありながら、 他のRmakeのゲームには無い斬新さがあるという・・・ 目からウロコが落ちる思いがいたしました。 |
|
手軽に遊べるゲームとして、 ひとつの理想形ではないかと思います。 ゲーム制作お疲れ様でした。 は~げんさんもストーリーの制作お疲れ様でした。 安定のおもしろさでしたw |
面白かったです!
これはすごい・・・。
でわ!
すごいと言ってもらえるように頑張っているので
コメント頂けてとても嬉しいです