board_col_heights = [5, 6, 7, 8, 7, 6, 5]
+# code and css will need adjusting if you change HP_MAX
+HP_MAX = 10
##############################################################
############## fix javascript some more ################
encoded = get_cookie 'hexbog'
if encoded? and encoded.length > board_tiles
new_letter_queue = (encoded.substr 0, board_tiles).split ''
- score = parseInt(encoded.substr(board_tiles), 10)
+ score = parseInt(encoded.substr(board_tiles), HP_MAX)
# work out which grid spaces are connected
# (neighbors, above, down)
# 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
faders = selected.num_sort()
selected = []
update_selection_display()
+ neighbors = {}
+ nneighbors = {}
for i in faders
tiles[i].dom.unbind('click').fadeOut fade_ms
+ tiles[i].new_hp = tiles[i].hp
+ for n in board_neighbors[i]
+ neighbors[n] = tiles[n]
+ for nn in board_neighbors[n]
+ nneighbors[nn] = tiles[nn]
+ for i in faders
+ delete nneighbors[i]
+ delete neighbors[i]
+ for k, v of neighbors
+ delete nneighbors[k]
+ # 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
for i in tiles
- unless i in faders
- unless i.hp < 1
- i.dom.removeClass "hp#{i.hp}"
- i.hp -= 1
- i.dom.addClass "hp#{i.hp}"
+ i.new_hp ?= i.hp - 1
+ if i.new_hp < 0
+ i.new_hp = 0
+ else if i.new_hp > HP_MAX
+ i.new_hp = HP_MAX
+ if i.new_hp isnt i.hp
+ i.dom.removeClass "hp#{i.hp}"
+ i.dom.addClass "hp#{i.new_hp}"
+ i.hp = i.new_hp
+ delete i.new_hp
timeout fade_ms + 1, ->
# which tiles need to be slid down
sliders = (false for i in tiles)
new_tile = (num, x, y) ->
letter = new_letter()
- html_tile = $("<div class=\"tile hp10\" style=\"left: #{x}px; top: #{y}px\" unselectable=\"on\">#{letter}</div>")
+ hp = 1 + Math.floor(Math.random() * (HP_MAX - 1))
+
+ html_tile = $("<div class=\"tile hp#{hp}\" style=\"left: #{x}px; top: #{y}px\" unselectable=\"on\">#{letter}</div>")
$board.append(html_tile)
html_tile.data 'tile_number', num
- tiles[num] = text: letter, dom: html_tile, hp: 10, id: num
+ tiles[num] = text: letter, dom: html_tile, hp: hp, id: num
html_tile.click ->
me = $(this)
num = me.data 'tile_number'
+ return if tiles[num].hp < 1
if num in selected
if selected.length > 2 and num is selected.last()
activate_selection()
when 27
unselect_all()
-$log = undefined
-init_log = ->
- $log = $('#log')
log = (msg) ->
- console.log msg if console.log?
+ console.log msg if console?.log?
init_game = ->
- init_log()
if $(window).height() >= 440
$('#centerer').css('margin-top', '25px')
init_keybinding()