ゲーム「リング王国物語」公開しました
投稿者: 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 |
面白かったです!
これはすごい・・・。
でわ!
すごいと言ってもらえるように頑張っているので
コメント頂けてとても嬉しいです