JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
gets harder (way too slowly) as you play
[hexbog.git] / main.coffee
index 14c8cb5..900295d 100644 (file)
@@ -371,107 +371,105 @@ unsink = (tile) ->
        tile.dom.html tile.text
 
 
-default_booms = {
+# top-level key is word length
+# arrays are [difficulty] level, easiest to hardest
+booms = {
        3: {
                neighbors: {
-                       flips: 1
-                       force: 2
+                       flips: [1,1,1,1,0]
+                       force: [2,2,1,1,1,1,0]
                }
                neighbor_neighbors: {
-                       flips: 0
-                       force: 0
+                       flips: [0]
+                       force: [0]
                }
                board: {
-                       flips: 0
-                       force: 0
+                       flips: [0]
+                       force: [0]
                }
        }
        4: {
                neighbors: {
-                       flips: 'all'
-                       force: 4
+                       flips: ['all', 4,4,4,4,4,3,3,2,2,1]
+                       force: [4,3,3,3,3,3,2]
                }
                neighbor_neighbors: {
-                       flips: 0
-                       force: 2
+                       flips: [0]
+                       force: [2,2,2,1,1,1,0]
                }
                board: {
-                       flips: 0
-                       force: 0
+                       flips: [0]
+                       force: [0]
                }
        }
        5: {
                neighbors: {
-                       flips: 'all'
-                       force: 6
+                       flips: ['all','all','all','all',5,5,5,4,4,4,3,3,3,2]
+                       force: [6,6,6,6,5,5,5,4,4,4,3]
                }
                neighbor_neighbors: {
-                       flips: 2
-                       force: 4
+                       flips: [2,2,2,2,2,2,1,1,1,1,0]
+                       force: [4,3,3,3,3,2,2,2,1]
                }
                board: {
-                       flips: 0
-                       force: 0
+                       flips: [0]
+                       force: [0]
                }
        }
        6: {
                neighbors: {
-                       flips: 'all'
-                       force: 10
+                       flips: ['all','all','all','all','all',9,9,9,9,8,8,8,7,7,7,6,6,6,5,5,5,4]
+                       force: [9,9,9,9,9,8,8,8,7]
                }
                neighbor_neighbors: {
-                       flips: 5
-                       force: 6
+                       flips: [5,5,5,5,5,5,5,4,4,4,3,3,3,2,2,2,1]
+                       force: [6,6,5,5,4,4,3,3,2]
                }
                board: {
-                       flips: 0
-                       force: 0
+                       flips: [0]
+                       force: [0]
                }
        }
        7: {
                neighbors: {
-                       flips: 'all'
-                       force: 10
+                       flips: ['all']
+                       force: [10]
                }
                neighbor_neighbors: {
-                       flips: 'all'
-                       force: 10
+                       flips: ['all','all','all','all',9,8,7,6,5,4,3,2]
+                       force: [10]
                }
                board: {
-                       flips: 0
-                       force: 2
+                       flips: [0]
+                       force: [5,4,3,2,1]
                }
        }
        lots: {
                neighbors: {
-                       flips: 0
-                       force: 0
+                       flips: [0]
+                       force: [0]
                }
                neighbor_neighbors: {
-                       flips: 0
-                       force: 0
+                       flips: [0]
+                       force: [0]
                }
                board: {
-                       flips: 'all'
-                       force: 10
+                       flips: ['all']
+                       force: [10]
                }
        }
 }
-booms = null
-init_booms = ->
-       booms = {}
-       for  level, areas of default_booms
-               new_level = {}
-               for area, effects of areas
-                       new_area = {}
-                       for effect, amount of effects
-                               new_area[effect] = amount
-                       new_level[area] = new_area
-               booms[level] = new_level
-       return
+difficulty_level = 0
+next_level_at = 200
+adjust_difficulty_level = ->
+       while score > next_level_at
+               difficulty_level += 1
+               next_level_at *= 1.4
+
 
 # remove the selected tiles from the board, create new tiles, and slide everything into place
 blip_selection = ->
+       adjust_difficulty_level()
        word_length = selected_word().length
        faders = selected
        selected = []
@@ -523,12 +521,16 @@ blip_selection = ->
                boom = booms.lots
        for area_name, effects of boom
                area = areas[area_name]
-               if effects.flips is 'all' or effects.flips >= area.down.length
+               if difficulty_level < effects.flips.length
+                       flips = effects.flips[difficulty_level]
+               else
+                       flips = effects.flips.last()
+               if flips is 'all' or flips >= area.down.length
                        for t in area.down
                                unsink t
                else
                        down_count = area.down.length
-                       flips_left = effects.flips
+                       flips_left = flips
                        while flips_left > 0 and down_count > 0
                                flips_left -= 1
                                flipper = Math.floor(Math.random() * down_count)
@@ -536,9 +538,13 @@ blip_selection = ->
                                down_count -= 1
                                # move the last tile back into range
                                area.down[flipper] = area.down[down_count]
-               if effects.force > 0
+               if difficulty_level < effects.force.length
+                       force = effects.force[difficulty_level]
+               else
+                       force = effects.force.last()
+               if force > 0
                        for tile in area.up
-                               tile.new_hp = tile.hp + effects.force
+                               tile.new_hp = tile.hp + force
        for s in spaces
                s.tile.new_hp ?= s.tile.hp - 1
                if s.tile.new_hp < 0
@@ -791,11 +797,12 @@ look_up_definition = (word) ->
 start_over = ->
        selected = []
        score = 0
+       difficulty_level = 0
+       next_level_at = 200
        $score_display.html score
        for s in spaces
                selected.push s.tile
        blip_selection()
-       init_booms()
 
 init_start_over_link = ->
        $('#start-over').click (event) ->
@@ -836,6 +843,5 @@ init_game = ->
        init_html_board()
        init_start_over_link()
        update_selection_display()
-       init_booms()
 
 $(init_game)