ゲーム「今日も何処かで」公開しました

投稿者:User icon mini taki 投稿日:2018/01/02 23:09


お借りした素材など

キャラ画像
REFMAP 様
FSM若い男性1画像
FSM中年女性1画像
FSM中年女性6画像
FSM武器屋の親父画像
FSM道具屋の親父画像
FSMドワーフ画像
FSMスライム画像
FSM大蛇画像
FSM少年剣士(旅装束)画像
FSM妖精画像
FSM樹の精画像
FSM兵士画像
FSM光の精画像
FSM中年男性7画像
FSM老爺2画像
FSM若い女性1画像
FSMやぎ画像
FSMひつじ1画像
FSMひつじ3画像
FSM白鳥画像
FSM火の玉画像
FSM船員(力仕事)画像
FSM占い師画像
FSM盗賊紳士画像
敦煌回廊 様
tonkou職人系キャラクタ5画像
tonkouメイドさん3号画像
MACK 様
Loose Leafキャラクター素材合成シミュレータ
ぴぽや 様
pochi 様

一枚絵
hainu 様
青空エンディング

マップチップ
REFMAP 様
https://rmake.jp/published_items/16571
ぴぽや 様
MACK 様

BGM
うさぎ529 様
牧場にて
ちょっとやる気の出る荒野
mochi3kan様
南海の海

リンク

今日も何処かで - 2DRPG

遊び方

飛行船を調べると飛べます
矢印キーで上下左右に移動
Zキー押しっぱなしでスピードアップ
Xキーで着陸可能な場合は着陸
一通り飛んだ後スタート地点の城を調べるとクリア

スクリプトとか

とりあえず全文
def  aircraft()
  setMenuOpenKeyEnable(false)
  deleteAllSprite()
  x=getPlayerPosX()
  y=getPlayerPosY()
  case getEventDirection("playerCharacterEvent")
  when 0
    dx=0
    dy=4
  when 1
    dx=-4
    dy=0
  when 2
    dx=4
    dy=0
  when 3
    dx=0
    dy=-4
  end
  hidePlayer()
  j=0
  while j<9
    x=x+dx
    y=y+dy
    moveCamera(true,x, y)
    waitTime(20)
    j=j+1
  end
  fadeOutMusicStop(1000)
  fadeOut(0, 0, 0)
  setEventCharacter("hikousen", 29574)
  s=createSprite(320728)
  setSpriteRect(s, 0, 64*2, 32, 64, 0, 0, 32, 64)
  setSpritePosition(s, 240, 32*4.5)
  setSpriteZOrder(s, 5)
  setCanvasVisible(true)
  textid=createText(16,16,352,48)
  dscrp="Z:スピードアップ"
  drawCanvas()
  fadeIn()
  playBGM(187542)
  judge=getVariable("jl")
  xmax=32*100-32*8
  xmin=32*8
  ymax=32*100-32*6
  ymin=32*6
  dx0=8
  dy0=8
  dt=16
  drct=2
  ttotal=0
  dash=1
  #入力の取得を始めます
  startInput()

  #ループし続けるように変数を設定します。
  loop = true

  #loop変数がtrueの間はループし続けます。
  while loop

    #入力が入っているかどうか調べます。
    while hasInput()
      #内部にたまっている入力を処理対象とします。
      takeInput()
      if isKeyDown("RIGHT")
        setFlag("right",true)
      elsif isKeyUp("RIGHT")
        setFlag("right",false)
      end
      if isKeyDown("LEFT")
        setFlag("left",true)
      elsif isKeyUp("LEFT")
        setFlag("left",false)
      end
      if isKeyDown("UP")
        setFlag("up",true)
      elsif isKeyUp("UP")
        setFlag("up",false)
      end
      if isKeyDown("DOWN")
        setFlag("down",true)
      elsif isKeyUp("DOWN")
        setFlag("down",false)
      end 

     if isKeyDown("Z")
        dash=4
      elsif isKeyUp("Z")
        dash=1
      end 
 
      if isKeyDown("X") #キーXが押された場合
        #ループを終了します。
        x2=floor(x/32)
        y2=floor(y/32)
        if getFlag("land")==true
          loop = false
        end
      end

    end

    dx=dx0*dash
    dy=dy0*dash

    if getFlag("right")
       drct=2
       x=x+dx
       if x>xmax
         x=xmin+dx
       end
    end
    if getFlag("left")
       drct=1
       x=x-dx
       if x<xmin
         x=xmax-dx
       end
    end
    if getFlag("up")
       drct=3
       y=y-dy
       if y<ymin
         y=ymax-dy
       end
    end
    if getFlag("down")
       drct=0
       y=y+dy
       if y>ymax
         y=ymin+dy
       end
    end
    moveCamera(true, x, y)
    phase=floor(ttotal/6/dt)%4
    phase=phase*32
    setSpriteRect(s, phase, drct*64, 32, 64, 0, 0, 32, 64)
    x2=floor(x/32)
    y2=floor(y/32)
    if judge[x2][y2]==0
      setText(textid,dscrp)
      setFlag("land",false)
    else
      setText(textid,dscrp,"\nX:着陸")
      setFlag("land",true)
    end
    drawCanvas()
    #入力がないときに無駄に処理をしないように30ミリ秒waitを入れます。
    waitTime(dt)
    ttotal=ttotal+dt
  end

  x=floor(x/32)
  y=floor(y/32)
  case judge[x][y]
  when 1
    dx=0
    dy=1
  when 2
    dx=1
    dy=0
  when 3
    dx=0
    dy=-1
  when 4
    dx=-1
    dy=0
  end
  #入力の取得を終了します。
  endInput()
  deleteTextAll()
  fadeOutMusicStop(1000)
  fadeOut(0, 0, 0)
  deleteAllSprite()
  s=createSprite(247580)
  setSpriteRect(s, 0, 0, 512, 384, 0, 0, 512, 384)
  drawCanvas()
  setFadeInterval(1)
  fadeIn()
  warpEvent("playerCharacterEvent", x+dx, y+dy)
  setEventCharacter("hikousen", 35742)
  warpEvent("hikousen", x, y)
  x=getPlayerPosX()
  y=getPlayerPosY()
  moveCamera(true,x, y)
  showPlayer()
  waitTime(1)
  moveCamera(false)
  fadeOut(0, 0, 0)
  setCanvasVisible(false)
  setFadeInterval(500)
  fadeIn()
  playBGM(187657)
  setMenuOpenKeyEnable(true)
end #_/_/_/end function_/_/_/

やっていることは
キャラクタを透明にして
代わりにスプライトを表示して
moveCamera()関数を使って画面を動かす
の3点です。
ミニマップを見るとこんな感じ

ある程度画面の端っこに近づいたら
カメラの座標を反対側にワープさせています

言い訳とか

某ファイナルなファンタジーでおなじみの(実際はやったことないのでよく知らない)
飛行船を作る方法を突然思いついたのでやってみた。
せっかくなので作りこんだ世界観の中を散歩するだけのゲームにチャレンジしてみた。
RPGで架空の世界を旅する感じがすきなのでそこだけを取り出してみたかった。
途中からめんどくさくなってきてグダッてしまったものの
作りたいゲームのイメージがもうちょっと固まった。
今回の制作では着陸可能な座標のデータの入力がダントツにめんどくさかった。
着陸可能な地点をある程度絞るようにすれば楽なものを変なこだわりが発動して
歩けるところはだいたい着陸できるようにした。
100×100マスのマップを手作業で調べてデータを入力していたのは我ながら馬鹿だと思う。
もっと効率のいい方法はあるだろうが、思いつかなかったので仕方ない。効率は悪くてもやればいつかは終わるし。
ここはある程度割り切ってもっとお使いイベントの数を増やすとかやったほうが良かったかな。

コメントする

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

コメント一覧

コメントはありません。