// File: angelapwen[P]text-based-game/game.cpp
// Function: Game::weaponValidation[abi:cxx11]() const
string Game::weaponValidation() const {
	string input;
	bool hasWeapon = false;

	while (!hasWeapon) {
		cout << "\nMake your choice: ";
		cin >> input;

		// While input is not a valid weapon name, ask user to try again
		while (input != "knife" && input != "revolver" && input != "rope" && input
		       !="wrench" && input != "candlestick" && input != "pipe") {
			cout << "Input must be a valid weapon name." << endl;
			cout << "Please try again: ";
			cin.clear();
			cin.ignore(256, '\n');
			cin >> input;
		}

		cin.clear();
		cin.ignore(256, '\n');

		// If input is a valid weapon, check to see if satchel contains this weapon
		if (input == "knife" && !satchel->getKnife()) {
			cout << "You do not carry a knife in your satchel. Try again.";
		}
		else if (input == "revolver" && !satchel->getRevolver()) {
			cout << "You do not carry a revolver in your satchel. Try again.";
		}
		else if (input == "rope" && !satchel->getRope()) {
			cout << "You do not carry a rope in your satchel. Try again.";
		}
		else if (input == "wrench" && !satchel->getWrench()) {
			cout << "You do not carry a wrench in your satchel. Try again.";
		}
		else if (input == "candlestick" && !satchel->getCandlestick()) {
			cout << "You do not carry a knife in your satchel. Try again.";
		}
		else if (input == "pipe" && !satchel->getPipe()) {
			cout << "You do not carry a lead pipe in your satchel. Try again.";
		}
			// Else the satchel contains the weapon
		else {
			hasWeapon = true;
		}
	}
	return input;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x40(%rbp)
movq %rdi, %rax
movq %rax, -0x38(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x30(%rbp)
movb $0x0, -0x11(%rbp)
callq 0x32f0
movb $0x0, -0x12(%rbp)
movb -0x12(%rbp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x886e
jmp 0x8c4e
movq 0x1275b(%rip), %rdi     # 0x1afd0
leaq 0xc0dd(%rip), %rsi      # 0x14959
callq 0x3200
jmp 0x8883
movq -0x40(%rbp), %rsi
movq 0x12752(%rip), %rdi     # 0x1afe0
callq 0x32b0
jmp 0x8895
jmp 0x8897
movq -0x40(%rbp), %rdi
leaq 0x9ca2(%rip), %rsi      # 0x12544
callq 0x8fe0
movb %al, -0x41(%rbp)
jmp 0x88ac
movb -0x41(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x42(%rbp)
jne 0x88be
jmp 0x896e
movq -0x40(%rbp), %rdi
leaq 0x9c83(%rip), %rsi      # 0x1254c
callq 0x8fe0
movb %al, -0x43(%rbp)
jmp 0x88d3
movb -0x43(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x42(%rbp)
jne 0x88e5
jmp 0x896e
movq -0x40(%rbp), %rdi
leaq 0x9c67(%rip), %rsi      # 0x12557
callq 0x8fe0
movb %al, -0x44(%rbp)
jmp 0x88fa
movb -0x44(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x42(%rbp)
jne 0x8909
jmp 0x896e
movq -0x40(%rbp), %rdi
leaq 0x9c4a(%rip), %rsi      # 0x1255e
callq 0x8fe0
movb %al, -0x45(%rbp)
jmp 0x891e
movb -0x45(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x42(%rbp)
jne 0x892d
jmp 0x896e
movq -0x40(%rbp), %rdi
leaq 0x9bfe(%rip), %rsi      # 0x12536
callq 0x8fe0
movb %al, -0x46(%rbp)
jmp 0x8942
movb -0x46(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x42(%rbp)
jne 0x8951
jmp 0x896e
movq -0x40(%rbp), %rdi
leaq 0x9c0b(%rip), %rsi      # 0x12567
callq 0x8fe0
movb %al, -0x47(%rbp)
jmp 0x8966
movb -0x47(%rbp), %al
movb %al, -0x42(%rbp)
jmp 0x896e
movb -0x42(%rbp), %al
testb $0x1, %al
jne 0x897a
jmp 0x8a1d
movq 0x1264f(%rip), %rdi     # 0x1afd0
leaq 0xbfe5(%rip), %rsi      # 0x1496d
callq 0x3200
movq %rax, -0x50(%rbp)
jmp 0x8993
movq -0x50(%rbp), %rdi
movq 0x12622(%rip), %rsi     # 0x1afc0
callq 0x3230
jmp 0x89a5
movq 0x12624(%rip), %rdi     # 0x1afd0
leaq 0xbcf8(%rip), %rsi      # 0x146ab
callq 0x3200
jmp 0x89ba
movq 0x1261f(%rip), %rdi     # 0x1afe0
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
xorl %esi, %esi
callq 0x3350
jmp 0x89d4
movq 0x12605(%rip), %rdi     # 0x1afe0
movl $0x100, %esi            # imm = 0x100
movl $0xa, %edx
callq 0x3140
jmp 0x89ec
movq -0x40(%rbp), %rsi
movq 0x125e9(%rip), %rdi     # 0x1afe0
callq 0x32b0
jmp 0x89fe
jmp 0x8897
movq -0x40(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
callq 0x3130
jmp 0x8c6b
movq 0x125bc(%rip), %rdi     # 0x1afe0
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
xorl %esi, %esi
callq 0x3350
jmp 0x8a37
movq 0x125a2(%rip), %rdi     # 0x1afe0
movl $0x100, %esi            # imm = 0x100
movl $0xa, %edx
callq 0x3140
jmp 0x8a4f
movq -0x40(%rbp), %rdi
leaq 0x9aea(%rip), %rsi      # 0x12544
callq 0x3f80
movb %al, -0x51(%rbp)
jmp 0x8a64
movb -0x51(%rbp), %al
testb $0x1, %al
jne 0x8a6d
jmp 0x8aa2
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xd450
movb %al, -0x52(%rbp)
jmp 0x8a7f
movb -0x52(%rbp), %al
testb $0x1, %al
jne 0x8aa2
jmp 0x8a88
movq 0x12541(%rip), %rdi     # 0x1afd0
leaq 0xbefa(%rip), %rsi      # 0x14990
callq 0x3200
jmp 0x8a9d
jmp 0x8c49
movq -0x40(%rbp), %rdi
leaq 0x9a9f(%rip), %rsi      # 0x1254c
callq 0x3f80
movb %al, -0x53(%rbp)
jmp 0x8ab7
movb -0x53(%rbp), %al
testb $0x1, %al
jne 0x8ac0
jmp 0x8af5
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xd410
movb %al, -0x54(%rbp)
jmp 0x8ad2
movb -0x54(%rbp), %al
testb $0x1, %al
jne 0x8af5
jmp 0x8adb
movq 0x124ee(%rip), %rdi     # 0x1afd0
leaq 0xbedc(%rip), %rsi      # 0x149c5
callq 0x3200
jmp 0x8af0
jmp 0x8c47
movq -0x40(%rbp), %rdi
leaq 0x9a57(%rip), %rsi      # 0x12557
callq 0x3f80
movb %al, -0x55(%rbp)
jmp 0x8b0a
movb -0x55(%rbp), %al
testb $0x1, %al
jne 0x8b13
jmp 0x8b48
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xd3f0
movb %al, -0x56(%rbp)
jmp 0x8b25
movb -0x56(%rbp), %al
testb $0x1, %al
jne 0x8b48
jmp 0x8b2e
movq 0x1249b(%rip), %rdi     # 0x1afd0
leaq 0xbec1(%rip), %rsi      # 0x149fd
callq 0x3200
jmp 0x8b43
jmp 0x8c45
movq -0x40(%rbp), %rdi
leaq 0x9a0b(%rip), %rsi      # 0x1255e
callq 0x3f80
movb %al, -0x57(%rbp)
jmp 0x8b5d
movb -0x57(%rbp), %al
testb $0x1, %al
jne 0x8b66
jmp 0x8b9b
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xd470
movb %al, -0x58(%rbp)
jmp 0x8b78
movb -0x58(%rbp), %al
testb $0x1, %al
jne 0x8b9b
jmp 0x8b81
movq 0x12448(%rip), %rdi     # 0x1afd0
leaq 0xbea2(%rip), %rsi      # 0x14a31
callq 0x3200
jmp 0x8b96
jmp 0x8c43
movq -0x40(%rbp), %rdi
leaq 0x9990(%rip), %rsi      # 0x12536
callq 0x3f80
movb %al, -0x59(%rbp)
jmp 0x8bb0
movb -0x59(%rbp), %al
testb $0x1, %al
jne 0x8bb9
jmp 0x8beb
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xd3d0
movb %al, -0x5a(%rbp)
jmp 0x8bcb
movb -0x5a(%rbp), %al
testb $0x1, %al
jne 0x8beb
jmp 0x8bd4
movq 0x123f5(%rip), %rdi     # 0x1afd0
leaq 0xbdae(%rip), %rsi      # 0x14990
callq 0x3200
jmp 0x8be9
jmp 0x8c41
movq -0x40(%rbp), %rdi
leaq 0x9971(%rip), %rsi      # 0x12567
callq 0x3f80
movb %al, -0x5b(%rbp)
jmp 0x8c00
movb -0x5b(%rbp), %al
testb $0x1, %al
jne 0x8c09
jmp 0x8c3b
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xd430
movb %al, -0x5c(%rbp)
jmp 0x8c1b
movb -0x5c(%rbp), %al
testb $0x1, %al
jne 0x8c3b
jmp 0x8c24
movq 0x123a5(%rip), %rdi     # 0x1afd0
leaq 0xbe35(%rip), %rsi      # 0x14a67
callq 0x3200
jmp 0x8c39
jmp 0x8c3f
movb $0x1, -0x12(%rbp)
jmp 0x8c41
jmp 0x8c43
jmp 0x8c45
jmp 0x8c47
jmp 0x8c49
jmp 0x8860
movb $0x1, -0x11(%rbp)
testb $0x1, -0x11(%rbp)
jne 0x8c61
movq -0x40(%rbp), %rdi
callq 0x3130
movq -0x38(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq
movq -0x20(%rbp), %rdi
callq 0x3370
nopw %cs:(%rax,%rax)