update*
I found TD's HP is locked at 30000 during the battle.
But after several turns, it suddenly changes to around 1250, that is when you can really kill it.
After checking part of TD's action script, I figured out its HP is divided into four parts and stored in script variables.
30000 is just a large enough value in order to prevent it from being killed directly, for some reason.
In a normal game, TD actually has 4 lives: 5000HP, 2500HP, 1250HP, 1250HP
;;;;;;;;;;;;;;;;;;;;;;;;;;
; Initializing
;;;;;;;;;;;;;;;;;;;;;;;;;;
0x0000: var[0x0080] = 0
0x0482: var[0x0448] = 0
0x0488: var[0x044A] = hp
0x0490: var[0x044C] = var[0x044A]
0x0496: var[0x044C] /= 2
0x049C: var[0x044E] = var[0x044C]
0x04A2: var[0x044E] /= 2
0x04A8: var[0x0450] = var[0x044E]
0x04AE: var[0x0450] /= 2
0x04B4: var[0x0452] = var[0x0450]
0x04BA: var[0x0458] = 30000
0x04C0: hp = var[0x0458]
0x04C8: maxhp = var[0x0458]
;;;;;;;;;;;;;;;;;;;;;;;;;;
; Taking damage
;;;;;;;;;;;;;;;;;;;;;;;;;;
0x058C: var[0x0458] = someflag(0x0801)
0x0591: IF_JUMP(var[0x0458] != 0x0001, 0x068C)
0x0599: IF_JUMP(var[0x0080] < 0x0003, 0x0689)
0x05A1: var[0x0458] = maxhp
0x05A9: var[0x045A] = hp
0x05B1: var[0x0458] -= var[0x045A]
0x05B7: IF_JUMP(var[0x0080] == 0x0000, 0x05C8)
0x05BF: var[0x0464] = var[0x044C]
0x05C5: JUMP(0x05EA)
0x05C8: IF_JUMP(var[0x0080] == 0x0001, 0x05D9)
0x05D0: var[0x0464] = var[0x044E]
0x05D6: JUMP(0x05EA)
0x05D9: IF_JUMP(var[0x0080] == 0x0002, 0x05EA)
0x05E1: var[0x0464] = var[0x0450]
0x05E7: JUMP(0x05EA)
0x05EA: IF_JUMP(var[0x0464] >= var[0x0458], 0x05FB)
0x05F2: var[0x0464] -= var[0x0458]
0x05F8: JUMP(0x0601)
0x05FB: var[0x0464] = 0
0x0601: IF_JUMP(var[0x0464] == 0x0000, 0x0640)
0x0609: var[0x0080]++
0x060C: IF_JUMP(var[0x0080] == 0x0003, 0x0627)
0x0614: maxhp = var[0x0452]
0x061C: hp = var[0x0452]
0x0624: JUMP(0x063D)
0x0627: var[0x0458] = 30000
0x062D: maxhp = var[0x0458]
0x0635: hp = var[0x0458]
0x063D: JUMP(0x0689)
0x0640: var[0x0458] = 30000
0x0646: maxhp = var[0x0458]
0x064E: hp = var[0x0458]
0x0656: IF_JUMP(var[0x0080] == 0x0000, 0x0667)
0x065E: var[0x044C] = var[0x0464]
0x0664: JUMP(0x0689)
0x0667: IF_JUMP(var[0x0080] == 0x0001, 0x0678)
0x066F: var[0x044E] = var[0x0464]
0x0675: JUMP(0x0689)
0x0678: IF_JUMP(var[0x0080] == 0x0002, 0x0689)
0x0680: var[0x0450] = var[0x0464]
0x0686: JUMP(0x0689)
0x0689: JUMP(0x06A2)
0x068C: var[0x0458] = 0
0x0692: maxhp = var[0x0458]
0x069A: hp = var[0x0458]
0x06A3: STOP()
And Radius' HP is locked at 30000 in the US version, so no way to kill him without a cheat. (Still testing)