// File: /workspace/github_cpp_makefile_star2_O3/Oralf[P]Heros/Hero.cpp
// Function: Hero::AttackHero(Hero&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>) const
void Hero:: AttackHero(Hero& defenceHero, string defenceCreature, string attackCreature)const{
	int numOfAttackC=0;
	Creature* attack;
	Creature* defence;
	if(attackCreature== "Black_Dragon"){
		numOfAttackC= numOfCretures[blackDragon_e];
		attack = new Black_Dragon;
	}
	else if( attackCreature== "Wizard"){
		numOfAttackC= numOfCretures[wizard_e];
		attack = new Wizard;
	}
	else if( attackCreature== "Archer"){
		numOfAttackC= numOfCretures[archer_e];
		attack = new Archer;
	}
	else if(attackCreature== "Vampire"){
		numOfAttackC= numOfCretures[vampire_e];
		attack = new Vampire;
	}
	else if(attackCreature== "Zombie"){
		numOfAttackC= numOfCretures[zombie_e];
		attack = new Zombie;
	}

	int  numOfDefenceC=0;
	creatureType place;
	if( defenceCreature== "Black_Dragon"){
		numOfDefenceC= defenceHero.numOfCretures[blackDragon_e];
		place = blackDragon_e;
		defence = new Black_Dragon;
	}
	else if( defenceCreature== "Wizard"){
		numOfDefenceC= defenceHero.numOfCretures[wizard_e];
		place = wizard_e;
		defence = new Wizard;
	}
	else if( defenceCreature== "Archer"){
		numOfDefenceC= defenceHero.numOfCretures[archer_e];
		place = archer_e;
		defence = new Archer;
	}
	else if(defenceCreature== "Vampire"){
		numOfDefenceC= defenceHero.numOfCretures[vampire_e];
		place = vampire_e;
		defence = new Vampire;
	}
	else if( defenceCreature== "Zombie"){
		numOfDefenceC= defenceHero.numOfCretures[zombie_e];
		place = zombie_e;
		defence = new Zombie;
	}
	int numOfDead=attack->CreatureAttack(numOfAttackC,*defence,numOfDefenceC);
	defenceHero.numOfCretures[place]-=numOfDead;
	defenceHero.setTotalCreatures(-numOfDead);
	delete attack;
	delete defence;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %r15
movq %rdx, %r13
movq %rsi, -0x30(%rbp)
movq %rdi, %r14
leaq 0x5edd(%rip), %rsi      # 0xa0b3
movq %rcx, %rdi
callq 0x3090
testl %eax, %eax
je 0x4235
leaq 0x5ed8(%rip), %rsi      # 0xa0c1
movq %r15, %rdi
callq 0x3090
testl %eax, %eax
je 0x4250
leaq 0x5ecd(%rip), %rsi      # 0xa0c9
movq %r15, %rdi
callq 0x3090
testl %eax, %eax
je 0x426b
leaq 0x5ec2(%rip), %rsi      # 0xa0d1
movq %r15, %rdi
callq 0x3090
testl %eax, %eax
je 0x4289
leaq 0x5eb8(%rip), %rsi      # 0xa0da
movq %r15, %rdi
callq 0x3090
testl %eax, %eax
je 0x42a7
xorl %ebx, %ebx
jmp 0x42c6
movl 0x78(%r14), %ebx
movl $0x18, %edi
callq 0x31c0
movq %rax, %r15
movq %rax, %rdi
callq 0x3888
jmp 0x42c3
movl 0x7c(%r14), %ebx
movl $0x18, %edi
callq 0x31c0
movq %rax, %r15
movq %rax, %rdi
callq 0x9ba0
jmp 0x42c3
movl 0x80(%r14), %ebx
movl $0x18, %edi
callq 0x31c0
movq %rax, %r15
movq %rax, %rdi
callq 0x36bc
jmp 0x42c3
movl 0x84(%r14), %ebx
movl $0x18, %edi
callq 0x31c0
movq %rax, %r15
movq %rax, %rdi
callq 0x993c
jmp 0x42c3
movl 0x88(%r14), %ebx
movl $0x18, %edi
callq 0x31c0
movq %rax, %r15
movq %rax, %rdi
callq 0x9c68
movq %r15, %r12
leaq 0x5de6(%rip), %rsi      # 0xa0b3
movq %r13, %rdi
callq 0x3090
testl %eax, %eax
je 0x4332
leaq 0x5de1(%rip), %rsi      # 0xa0c1
movq %r13, %rdi
callq 0x3090
testl %eax, %eax
je 0x4357
leaq 0x5dd6(%rip), %rsi      # 0xa0c9
movq %r13, %rdi
callq 0x3090
testl %eax, %eax
je 0x437c
leaq 0x5dcb(%rip), %rsi      # 0xa0d1
movq %r13, %rdi
callq 0x3090
testl %eax, %eax
je 0x43a4
leaq 0x5dbd(%rip), %rsi      # 0xa0da
movq %r13, %rdi
callq 0x3090
testl %eax, %eax
je 0x43cc
xorl %r13d, %r13d
jmp 0x434f
movq -0x30(%rbp), %rax
movl 0x78(%rax), %r13d
movl $0x18, %edi
callq 0x31c0
movq %rax, %r15
movq %rax, %rdi
callq 0x3888
xorl %r14d, %r14d
jmp 0x43f2
movq -0x30(%rbp), %rax
movl 0x7c(%rax), %r13d
movl $0x18, %edi
callq 0x31c0
movq %rax, %r15
movl $0x1, %r14d
movq %rax, %rdi
callq 0x9ba0
jmp 0x43f2
movq -0x30(%rbp), %rax
movl 0x80(%rax), %r13d
movl $0x18, %edi
callq 0x31c0
movq %rax, %r15
movl $0x2, %r14d
movq %rax, %rdi
callq 0x36bc
jmp 0x43f2
movq -0x30(%rbp), %rax
movl 0x84(%rax), %r13d
movl $0x18, %edi
callq 0x31c0
movq %rax, %r15
movl $0x3, %r14d
movq %rax, %rdi
callq 0x993c
jmp 0x43f2
movq -0x30(%rbp), %rax
movl 0x88(%rax), %r13d
movl $0x18, %edi
callq 0x31c0
movq %rax, %r15
movl $0x4, %r14d
movq %rax, %rdi
callq 0x9c68
movq (%r12), %rax
movq %r12, %rdi
movl %ebx, %esi
movq %r15, %rdx
movl %r13d, %ecx
callq *0x10(%rax)
movq -0x30(%rbp), %rcx
subl %eax, 0x78(%rcx,%r14,4)
testl %eax, %eax
je 0x4417
subl %eax, 0x8c(%rcx)
movq (%r12), %rax
movq %r12, %rdi
callq *0x8(%rax)
testq %r15, %r15
je 0x443d
movq (%r15), %rax
movq %r15, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmpq *0x8(%rax)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x445e
jmp 0x445e
jmp 0x445e
jmp 0x445e
jmp 0x445e
jmp 0x445e
jmp 0x445e
jmp 0x445e
jmp 0x445e
movq %rax, %rbx
movl $0x18, %esi
movq %r15, %rdi
callq 0x31d0
movq %rbx, %rdi
callq 0x3320