ゲーム「リング王国物語」公開しました

投稿者:User icon mini 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さんと黒いリボンさん
それからストーリーを提供してくださった
は〜げんさんのおかげです
ありがとうございました。

今回一番やりたかったのはあたり判定の部分です。
シューティングの様な方法ではなくて、お互いの位置関係と
攻撃しているかガードしているかという状態に対応する変数を使って
プログラミングの教科書に載っているジャンケンゲームの要領で
楽なスクリプトで格ゲーっぽいものができるはず!
という狙いでした。

結果的に修正できずに残ってしまった不具合もありますが
概ね満足しています。
今回のスクリプトには飽きたので再挑戦はしません。

殴り合っている部分のスクリプト
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)


コメントする

コメントするには、ログインする必要があります。

コメント一覧

      mini ✰❁ゆっくりんご❁✰(投稿日:2015/05/17 20:59, 履歴)
すごいですね~
面白かったです!

これはすごい・・・。

でわ!
User icon mini taki(投稿日:2015/05/25 01:07, 履歴)
プレイして頂きありがとうございます

すごいと言ってもらえるように頑張っているので
コメント頂けてとても嬉しいです
Material 204926 1 mini 井戸乃博士(投稿日:2015/05/17 19:38, 履歴)
おひさしぶりです。
takiさんのゲームにはいつも、
新鮮な驚きを感じておりますが、
今回も驚きながら、楽しくプレイさせていただきました♪


特筆すべきは、レスポンスの良さですな。
操作性が快適で当たり判定もちょうどよく、
誰でもすぐに入っていける気軽さがありながら、
他のRmakeのゲームには無い斬新さがあるという・・・
目からウロコが落ちる思いがいたしました。


手軽に遊べるゲームとして、
ひとつの理想形ではないかと思います。
ゲーム制作お疲れ様でした。
は~げんさんもストーリーの制作お疲れ様でした。
安定のおもしろさでしたw
User icon mini taki(投稿日:2015/05/25 01:05, 履歴)
プレイして頂いてありがとうございます
楽しんで頂けたようで幸いです

ご無沙汰してます
存在感が順調に薄くなっています

今作はRPGのミニゲームに
ちょうど良いかもしれません

User icon mini 退会したユーザー(投稿日:2015/05/17 18:54, 履歴)
凄く面白かったです!

ゲームの完成おめでとうございます。
黒いリボンでした★
User icon mini taki(投稿日:2015/05/25 00:59, 履歴)
プレイして頂き、ありがとうございます

ストーリーをは〜げんさんに丸投げさせて頂いて
どうにか完成しました

次はもうチョット早く作りたいです