// File: t0mm4rx[P]piscine_cpp/day03/ex04/SuperTrap.cpp
// Function: SuperTrap::SuperTrap(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
SuperTrap::SuperTrap(std::string name) : ClapTrap(name), NinjaTrap(name), FragTrap(name)
{
	this->hitPoints = FragTrap::hitPoints;
	this->maxHit = FragTrap::maxHit;
	this->energyPoints = NinjaTrap::energyPoints;
	this->maxEnergyPoints = NinjaTrap::maxEnergyPoints;
	this->level = 1.0;
	this->meleeAttackDamage = NinjaTrap::meleeAttackDamage;
	this->rangedAttackDamage = FragTrap::rangedAttackDamage;
	this->armorDamageReduction = FragTrap::armorDamageReduction;
	std::cout << this->name << ": I'm a SuperTrap!" << std::endl;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movq %rsi, -0xa0(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x98(%rbp)
addq $0x10, %rax
movq %rax, -0x90(%rbp)
leaq -0x30(%rbp), %rdi
movq %rdi, -0x88(%rbp)
callq 0x2080
movq -0x90(%rbp), %rdi
movq -0x88(%rbp), %rsi
callq 0x24e0
jmp 0x44b5
leaq -0x30(%rbp), %rdi
callq 0x20a0
movq -0xa0(%rbp), %rsi
leaq -0x60(%rbp), %rdi
callq 0x2080
jmp 0x44d0
movq -0x98(%rbp), %rdi
leaq 0x476a(%rip), %rsi      # 0x8c48
leaq -0x60(%rbp), %rdx
callq 0x3350
jmp 0x44e9
leaq -0x60(%rbp), %rdi
callq 0x20a0
movq -0x98(%rbp), %rax
movq -0xa0(%rbp), %rsi
addq $0x8, %rax
movq %rax, -0xa8(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x2080
jmp 0x4516
movq -0xa8(%rbp), %rdi
leaq 0x4734(%rip), %rsi      # 0x8c58
leaq -0x80(%rbp), %rdx
callq 0x2ab0
jmp 0x452f
leaq -0x80(%rbp), %rdi
callq 0x20a0
movq -0x98(%rbp), %rax
leaq 0x465a(%rip), %rcx      # 0x8ba0
movq %rcx, (%rax)
leaq 0x46d0(%rip), %rcx      # 0x8c20
movq %rcx, 0x10(%rax)
leaq 0x467d(%rip), %rcx      # 0x8bd8
movq %rcx, 0x8(%rax)
movq (%rax), %rcx
movq 0x8(%rax), %rdx
movq -0x18(%rdx), %rdx
movl 0x10(%rax,%rdx), %edx
movq -0x18(%rcx), %rcx
movl %edx, 0x8(%rax,%rcx)
movq (%rax), %rcx
movq 0x8(%rax), %rdx
movq -0x18(%rdx), %rdx
movl 0x14(%rax,%rdx), %edx
movq -0x18(%rcx), %rcx
movl %edx, 0xc(%rax,%rcx)
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
movl $0x3f800000, 0x18(%rax,%rcx) # imm = 0x3F800000
movq (%rax), %rcx
movq 0x8(%rax), %rdx
movq -0x18(%rdx), %rdx
movl 0x4c(%rax,%rdx), %edx
movq -0x18(%rcx), %rcx
movl %edx, 0x44(%rax,%rcx)
movq (%rax), %rcx
movq 0x8(%rax), %rdx
movq -0x18(%rdx), %rdx
movl 0x50(%rax,%rdx), %edx
movq -0x18(%rcx), %rcx
movl %edx, 0x48(%rax,%rcx)
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
leaq 0x20(%rax,%rcx), %rsi
movq 0x49fb(%rip), %rdi      # 0x8fd8
callq 0x2100
movq %rax, -0xb0(%rbp)
jmp 0x45eb
movq -0xb0(%rbp), %rdi
leaq 0x1e2c(%rip), %rsi      # 0x6425
callq 0x2130
movq %rax, -0xb8(%rbp)
jmp 0x4607
movq -0xb8(%rbp), %rdi
movq 0x49b3(%rip), %rsi      # 0x8fc8
callq 0x2150
jmp 0x461c
addq $0xc0, %rsp
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x20a0
jmp 0x46d7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x46c7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x20a0
jmp 0x46c7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x46b0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x20a0
jmp 0x46b0
movq -0x98(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
addq $0x8, %rdi
leaq 0x4599(%rip), %rsi      # 0x8c40
addq $0x18, %rsi
callq 0x2e50
movq -0x98(%rbp), %rdi
leaq 0x4582(%rip), %rsi      # 0x8c40
addq $0x8, %rsi
callq 0x3730
movq -0x98(%rbp), %rdi
addq $0x10, %rdi
callq 0x2730
movq -0x38(%rbp), %rdi
callq 0x2220