       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

          memberId: body.api_member_id
      when '/kcsapi/api_req_map/start'
        [@mapAreaId, @mapInfoNo, @apiNo, @BosscellNo, @colorNo] = [body.api_maparea_id, body.api_mapinfo_no, body.api_no, body.api_bosscell_no, body.api_color_no]
        @_deck = window._decks[postBody.api_deck_id-1]
        @_ships = window._ships
        @isStart = true
        @dangerousShip = '无'

        @enableRecord = true
        dataItem = []
        nowDate = new Date()
        @deckCombinedFlag = body.api_combined_flag
        if @timeString isnt timeToBString(nowDate.getTime())
          @timeString = timeToBString(nowDate.getTime())
          dataItem = []
