       afterHp[i - 1] -= damage
   afterHp
 
+# combined attack
+
+combinedOpenAttack = (combinedAfterHp, afterHp, openingAttack) ->
+  if openingAttack.api_fdam?
+    for damage, i in openingAttack.api_fdam
+      damage = Math.floor(damage)
+      continue if damage <= 0 or 
+      combinedAfterHp[i - 1] -= damage
+  [combinedAfterHp, afterHp]
+
+combinedHougekiAttack = (combinedAfterHp, afterHp, hougeki) ->
+  for damageFrom, i in hougeki.api_at_list
+    continue if damageFrom == -1
+    for damage, j in hougeki.api_damage[i]
+      damage = Math.floor(damage)
+      damageTo = hougeki.api_df_list[i][j]
+      continue if damage <= 0
+      if damageTo - 1 < 6
+        combinedAfterHp[damageTo - 1] -= damage
+  [combinedAfterHp, afterHp]
+
+combinedRaigekiAttack = (combinedAfterHp, afterHp, raigeki) ->
+  if raigeki.api_fdam?
+    for damage, i in raigeki.api_fdam
+      damage = Math.floor(damage)
+      continue if damage <= 0
+      combinedAfterHp[i - 1] -= damage
+  [combinedAfterHp, afterHp]
+
 judgeFace = (nowHp, afterHp) ->
   notDemageFlag = true
   for hp, i in nowHp

        switch body.api_win_rank
          when 'S'
            # need fix
            if @notDemageFlag and not isCombined
              dataItem.push '完全胜利!!!S'
            else dataItem.push '胜利S'
          when 'A'

        afterHp = Object.clone nowHp
        if body.api_hougeki?
          afterHp = hougekiAttack afterHp, body.api_hougeki
        [dangerFlag, dangerInfo] = judgeDanger afterHp, maxHp, @_deckShip, @_ships
        @dangerousShip = dangerInfo if dangerFlag
        @notDemageFlag = @notDemageFlag and judgeFace nowHp, afterHp
      when '/kcsapi/api_req_sortie/airbattle'
