LoginSignup
1
1

More than 5 years have passed since last update.

【TIC-80】架空のゲーム機のゲームをFantasyConsoleに移植する(その4)

Last updated at Posted at 2018-10-03

「国盗りす」にはフィーバーモードなるものがあります。

  • 光っているエリアに兵糧を落とし、全て埋めると次のエリアが光る
  • 埋める際に一発で埋めるとフィーバーモードとなり全てのエリアが対象となる

fever3.gif

こんな感じですね。

一つのエリアを光らせる場合は、該当位置の参照タイルIDを差し替えていました。
茶色のタイルから黄色のタイルに差し替えるイメージですね。

ただフィーバーモードで全てのタイルを差し替えるのは重いかなと思い(HHEM)、
パレットの色データを書き込むといいかなと考え「TIC-80 wiki」を覗いてみると
パレットの差し替え(というよりカラーインデックスの参照先のみ変更?)の
関数が紹介されているみたい。

おーこれを使えば一定間隔で、パレット差し替え ⇔ 元に戻す ということができるかな?

ただ、現在光っているかどうか?というフラグ?(状態?)はどのデータに持たすのが
妥当なんだろう。指定色はすべて差し替わるってことはフィールドではないような‥。

あ、色を変えるという操作(関数)に持たせればいいのかな、Luaはそれが楽にできる、
みたいな紹介を読んだ覚えが。

それっぽいコードを参考にしつつ実装
(ON-OFFのフラグのものがあるかなと探しましたが、調べ方が悪かったのか
カウンターのサンプルが大半でした)

palette_toggle.lua
do
SEA_COL=13
LAND_COL=4
SHINE_COL=14
end
-- common function from TIC-80 wiki
function pal(c0,c1)
    if(c0==nil and c1==nil)then for i=0,15 do poke4(0x3FF0*2+i,i)end
    else poke4(0x3FF0*2+c0,c1)end
end

pal_toggle=function(offcol,oncol)
    local ofc,onc=offcol or LAND_COL,oncol or SHINE_COL
    local onflag=false
    local f
    f=function()
        onflag=not onflag
        if onflag then pal(ofc,onc)
        else pal() end
    end
    return f
end

function test()
    landshine=pal_toggle()
    seashine=pal_toggle(SEA_COL)
end

test()

function TIC()
    map()
    if btnp(0,1,30) then landshine() end
    if btnp(1,1,30) then seashine() end
end

パレット2.png
パレットテスト.gif

だいたい想定通りですかね。
ただ pal() が全色リセットなので、両方ON時に一方を解除するともう片方も解除されますね。
‥‥、まいいか。
(ゲーム中は landshine() のみ一定間隔で呼ぶ)

そういえば、エリアがつながっているか、の判定関数を再帰で呼び出すみたいなことを
する時にすでにチェック済か、という情報を記録する時も、関数に持たせた方が
自然に書けるのかな?
気がする‥けど気がするだけで実装方法は分からないので今後の課題とします。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1