X-Git-Url: https://jasonwoof.com/gitweb/?p=hexbog.git;a=blobdiff_plain;f=main.coffee;fp=main.coffee;h=20746dc76d4134a79e79a22286372441958735d5;hp=d33d36a7041be52d689144c1d507495819307383;hb=f0502b2e9becd9b874e22f63cad0d0289193ab5f;hpb=82b65a7f06c06d1561a14a9dfb184dbc4ae08627 diff --git a/main.coffee b/main.coffee index d33d36a..20746dc 100644 --- a/main.coffee +++ b/main.coffee @@ -306,10 +306,16 @@ save_game = -> set_cookie 'hexbog', encoded, 365 window.location.hash = encoded +unsink = (tile) -> + tile.new_hp = 10 + tile.text = new_letter() + tile.dom.html tile.text + # remove the selected tiles from the board, create new tiles, and slide everything into place blip_selection = -> - difficulty = 11 - Math.log(100 + score) # higher numbers are easier - unsink = difficulty * score_for selected_word() # how much tile restoration we have left to do + difficulty = 11 - Math.log(400 + score) # higher numbers are easier + force = difficulty * score_for selected_word() # how much tile restoration we have left to do + word_length = selected_word().length faders = selected.num_sort() selected = [] update_selection_display() @@ -330,22 +336,74 @@ blip_selection = -> # convert to arrays so we can sort, etc nneighbors = (v for k, v of nneighbors) neighbors = (v for k, v of neighbors) - # TODO make this apply eavenly to neighbors - # TODO different range for different word lengths - for nei in [neighbors, nneighbors] - if unsink > 0 - for i in nei - if i.hp is 0 and unsink >= 10 - i.new_hp = 10 - unsink -= 10 - i.text = new_letter() - i.dom.html i.text - for nei in [neighbors, nneighbors] - if unsink > 0 - for i in nei - if i.hp > 0 and unsink > 0 - unsink -= 10 - i.hp - i.new_hp = 10 + boom = [ + { + tiles: neighbors, + up: [], + down: [] + }, + { + tiles: nneighbors, + up: [], + down: [] + } + ] + for n in boom + for t in n.tiles + if t.hp is 0 + n.down.push t + else + n.up.push t + switch word_length + when 3 + boom[0].flips = 1 + boom[0].force = 2 + boom[1].flips = 0 + boom[1].force = 0 + when 4 + boom[0].flips = 'all' + boom[0].force = 4 + boom[1].flips = 0 + boom[1].force = 2 + when 5 + boom[0].flips = 'all' + boom[0].force = 6 + boom[1].flips = 2 + boom[1].force = 4 + when 6 + boom[0].flips = 'all' + boom[0].force = 10 + boom[1].flips = 5 + boom[1].force = 6 + when 7 + boom[0].flips = 'all' + boom[0].force = 10 + boom[1].flips = 'all' + boom[1].force = 10 + else + boom[0].flips = 0 + boom[0].force = 0 + boom[1].flips = 0 + boom[1].force = 0 + # unsink/heal the whole board + for t in tiles + if t.hp is 0 + unsink t + else + t.new_hp = 10 + for b in boom + if b.flips is 'all' or b.flips >= b.down.length + for t in b.down + unsink t + else + while b.flips > 0 and b.down.length > 0 + b.flips -= 1 + flipper = Math.floor(Math.random() * b.down.length) + unsink b.down[flipper] + b.down = [b.down[0...flipper]..., b.down[flipper+1...b.down.length]...] + if b.force > 0 + for t in b.up + t.new_hp = t.hp + b.force for i in tiles i.new_hp ?= i.hp - 1 if i.new_hp < 0 @@ -442,7 +500,7 @@ select_tile = (num) -> new_tile = (num, x, y) -> letter = new_letter() - hp = 4 + Math.floor(Math.random() * (HP_MAX - 4)) + hp = 1 + Math.floor(Math.random() * (HP_MAX - 1)) html_tile = $("
#{letter}
") $board.append(html_tile) @@ -455,7 +513,7 @@ new_tile = (num, x, y) -> num = me.data 'tile_number' return if tiles[num].hp < 1 if num in selected - if selected.length > 2 and num is selected.last() + if selected_word().length > 2 and num is selected.last() activate_selection() else if selected.length > 1