// Property damage

local deadframe = A
local crushedframe = B

freeslot("SPR2_DEA2", "SKINCOLOR_D94XKZ_ELECTRIFIED1", "SKINCOLOR_D94XKZ_ELECTRIFIED2", "sfx_d94ahh")

spr2defaults[SPR2_DEA2] = SPR2_PAIN

skincolors[SKINCOLOR_D94XKZ_ELECTRIFIED1] = {
	name = "Electricity Death 1",
	ramp = {31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31},
	invcolor = SKINCOLOR_D94XKZ_ELECTRIFIED2,
	invshade = 0,
	chatcolor = V_INVERTMAP,
	accessible = false
}

skincolors[SKINCOLOR_D94XKZ_ELECTRIFIED2] = {
	name = "Electricity Death 2",
	ramp = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
	invcolor = SKINCOLOR_D94XKZ_ELECTRIFIED1,
	invshade = 0,
	chatcolor = 0,
	accessible = false
}

addHook("ShouldDamage", function(mo, inflictor, source, dmg, dmgt)
	if mo and mo.valid
		local player = mo.player
		if mo.skin == "dark"
		or mo.skin == "xkz"
			if dmgt == DMG_CRUSHED
				S_StartSound(mo, sfx_cdfm14, player)
				player.d94xkzcrushed = true
				return true
			elseif dmgt == DMG_DEATHPIT
				if not P_InQuicksand(mo)
					if P_RandomChance(FRACUNIT/8)
					and mo.skin == "dark"
						S_StartSound(mo, sfx_d94ahh, player)
					else
						S_StartSound(mo, sfx_s3k51, player)
					end
				end
				player.d94xkzpitmom = mo.momz
				player.d94xkzdeathpit = true
				return true
			elseif dmgt == DMG_DROWNED
				player.d94xkzdrowned = true
				return true
			elseif dmgt == DMG_SPACEDROWN
				player.d94xkzdrowned = true
				return true
			elseif dmgt == DMG_SPECTATOR
				S_StartSound(mo, sfx_cdfm60, player)
				P_SpawnGhostMobj(mo)
				mo.flags2 = $|MF2_DONTDRAW
				return true
			elseif not player.powers[pw_flashing]
			and not player.powers[pw_invulnerability]
				if player.d94xkzduospindash
					if inflictor and inflictor.valid
						P_DamageMobj(inflictor, mo, mo)
					end
					return false
				elseif not player.rings
					S_StartSound(mo, sfx_cdfm23, player)
					mo.momz = 10*mo.scale*P_MobjFlip(mo)
					if dmgt == DMG_ELECTRIC
						S_StartSound(mo, sfx_buzz2, player)
						player.d94xkzelectric = true
					end
					if dmgt == DMG_FIRE
						S_StartSound(mo, sfx_s3k70, player)
						player.d94xkzfire = true
					end
					player.d94xkzdeathtime = 1
					return true
				end
			end
		end
	end
end)

addHook("PlayerSpawn", function(player)
	player.powers[pw_flashing] = 1*TICRATE
end)

addHook("PlayerThink", function(player)
	if player.mo and player.mo.valid
		if player.mo.skin == "dark"
		or player.mo.skin == "xkz"
			if player.playerstate != PST_DEAD
				player.d94xkzdeaththrust = false
				player.d94xkzdeathtime = 0
				player.d94xkzcrushed = false
				player.d94xkzdeathpit = false
				player.d94xkzdrowned = false
				player.d94xkzelectric = false
				player.d94xkzfire = false
			else
				player.camerascale = skins[player.mo.skin].camerascale/2
				player.d94xkzdeathtime = $+1
				if player.d94xkzcrushed
					player.camerascale = skins[player.mo.skin].camerascale/2*skins[player.mo.skin].height
					player.mo.fuse = 2
					if P_IsObjectOnGround(player.mo)
						player.mo.z = player.mo.floorz
					else
						player.mo.z = player.mo.ceilingz
					end
					player.mo.momz = 0
					player.mo.height = 1
					player.mo.flags = $|MF_NOGRAVITY & ~MF_NOCLIPHEIGHT
					player.mo.renderflags = $|RF_FLOORSPRITE
					player.mo.sprite2 = SPR2_DEA2
					player.mo.frame = crushedframe
				elseif player.d94xkzdeathpit
					player.mo.momz = player.d94xkzpitmom
					if P_InQuicksand(player.mo)
						player.mo.sprite2 = SPR2_RIDE
					else
						player.mo.sprite2 = SPR2_DRWN
						player.drawangle = $-player.mo.momz*10
						player.mo.rollangle = $-player.mo.momz*10
					end
				elseif player.d94xkzdrowned
					player.mo.fuse = 2
					if player.mo.eflags & MFE_UNDERWATER
						player.mo.momz = player.mo.scale*P_MobjFlip(player.mo)
					elseif P_InSpaceSector(player.mo)
						player.mo.momz = 1
					end
					player.mo.flags = $|MF_NOGRAVITY & ~MF_NOCLIP & ~MF_NOCLIPHEIGHT & ~MF_NOCLIPTHING
					player.drawangle = $+ANG1
					player.mo.rollangle = $-ANG1
				else
					if not player.d94xkzdeaththrust
						P_InstaThrust(player.mo, player.drawangle+ANGLE_180, 10*player.mo.scale)
						player.d94xkzdeaththrust = true
					end
					player.mo.fuse = 2
					player.mo.flags = $ & ~MF_NOCLIP & ~MF_NOCLIPHEIGHT & ~MF_NOCLIPTHING
					if P_IsObjectOnGround(player.mo)
						player.d94xkzdeathonground = true
						player.mo.sprite2 = SPR2_DEA2
						player.mo.frame = deadframe
						player.mo.rollangle = 0
					else
						player.d94xkzdeathonground = false
						player.mo.sprite2 = SPR2_PAIN
						player.mo.frame = A
						player.drawangle = $+ANG10
						player.mo.rollangle = $+ANG10
					end
					if player.d94xkzwaittodrown
						player.d94xkzwaittodrown = $-1
						if player.d94xkzwaittodrown == 1
							S_StartSound(mo, sfx_drown, player)
							player.mo.sprite2 = SPR2_DRWN
							player.mo.frame = A
							player.d94xkzdrowned = true
						end
					else
						if player.mo.eflags & MFE_UNDERWATER
						and not (player.mo.eflags & MFE_TOUCHLAVA)
							player.d94xkzfire = false
							player.d94xkzwaittodrown = TICRATE+1
						end
					end
					if player.mo.eflags & MFE_TOUCHLAVA
					and player.d94xkzdeathtime > 5
						player.mo.flags2 = $|MF2_DONTDRAW
					end
					if player.d94xkzelectric
						if player.d94xkzmenu_flashes // Don't run this if we deactivated the flashes!
							if (leveltime % 2) == 0
								player.mo.color = SKINCOLOR_D94XKZ_ELECTRIFIED1
							else
								player.mo.color = SKINCOLOR_D94XKZ_ELECTRIFIED2
							end
							player.mo.colorized = true
						end
						local d94xkzdeathzap = P_SpawnMobjFromMobj(player.mo, P_RandomRange(-player.mo.radius/FRACUNIT/2, player.mo.radius/FRACUNIT/2)*FRACUNIT, P_RandomRange(-player.mo.radius/FRACUNIT/2, player.mo.radius/FRACUNIT/2)*FRACUNIT, P_RandomRange(0, player.mo.height/FRACUNIT/2)*FRACUNIT*P_MobjFlip(player.mo), MT_WATERZAP)
						d94xkzdeathzap.momx = P_RandomRange(-3, 3)*player.mo.scale
						d94xkzdeathzap.momy = P_RandomRange(-3, 3)*player.mo.scale
						d94xkzdeathzap.momz = P_RandomRange(-3, 3)*player.mo.scale
						d94xkzdeathzap.blendmode = AST_ADD
					elseif player.d94xkzfire
						if not S_SoundPlaying(player.mo, sfx_s3k7f)
							S_StartSound(player.mo, sfx_s3k7f, player)
						end
						player.mo.color = SKINCOLOR_SILVER
						player.mo.colorized = true
						if not (player.mo.flags2 & MF2_DONTDRAW)
							if (leveltime % 5) == 0
								local d94xkzdeathsmoke = P_SpawnMobjFromMobj(player.mo, 0, 0, player.mo.height/2, MT_DUST)
								d94xkzdeathsmoke.momx = P_RandomRange(-1, 1)*player.mo.scale/2
								d94xkzdeathsmoke.momy = P_RandomRange(-1, 1)*player.mo.scale/2
								d94xkzdeathsmoke.momz = 5*player.mo.scale*P_MobjFlip(player.mo)
								d94xkzdeathsmoke.scale = player.mo.scale/3
								d94xkzdeathsmoke.destscale = player.mo.scale*3
							end
							local d94xkzdeathfire = P_SpawnMobjFromMobj(player.mo, P_RandomRange(-player.mo.radius/FRACUNIT/2, player.mo.radius/FRACUNIT/2)*FRACUNIT, P_RandomRange(-player.mo.radius/FRACUNIT/2, player.mo.radius/FRACUNIT/2)*FRACUNIT, P_RandomRange(0, player.mo.height/FRACUNIT)*FRACUNIT*P_MobjFlip(player.mo), MT_THOK)
							d94xkzdeathfire.sprite = SPR_SFLM
							d94xkzdeathfire.frame = $|(leveltime % 5)|FF_FULLBRIGHT
							d94xkzdeathfire.momx = P_RandomRange(-1, 1)*player.mo.scale
							d94xkzdeathfire.momy = P_RandomRange(-1, 1)*player.mo.scale
							d94xkzdeathfire.momz = 2*player.mo.scale*P_MobjFlip(player.mo)
							d94xkzdeathfire.scale = player.mo.scale
							d94xkzdeathfire.destscale = player.mo.scale/4
							d94xkzdeathfire.blendmode = AST_ADD
						end
					end
				end
			end
		end
	end
end)			