// File: angelapwen[P]text-based-game/game.cpp
// Function: Game::satchelChoice()
void Game::satchelChoice() {
	cout <<
	     "********************************************************************************"
	     << endl;
	cout << "It is time to choose your satchel." << endl;
	cout << "Should you succeed in your missions, your placement in Hydra will"
			" depend upon\nyour demonstrated abilities and desire to challenge "
			"yourself."	<< endl;
	cout << "\n- The Bronze Satchel will provide you with the highest chance "
			"of success." << endl;
	cout << "It will only allow weapons that it does not already contain to be "
			"placed inside." << endl;
	cout << "Its capacity is 4 weapons. Once you fill it, you may proceed "
			"directly to find\nthe room with the secret escape." << endl;
	cout << "\n- The Silver Satchel will provide you with a moderate "
			"chance of success." << endl;
	cout << "It has a capacity of 5 weapons." << endl;
	cout << "It will allow you to add repeated weapons into the bag." << endl;
	cout << "Once you reach capacity and attempt to add more weapons, it will "
			"choose a random\nweapon to drop before adding the new weapon." <<
	     endl;
	cout << "With this satchel, you will need to keep track of its contents so"
			" that you have\n4 unique weapons to be able to commit the murder."
	<< endl;
	cout << "\n- The Gold Satchel will provide you with the lowest chance of "
			"success." << endl;
	cout << "It has a capacity of 4 weapons, and allows repeated weapons." <<
	     endl;
	cout << "Once you reach capacity and attempt to add more weapons, it will "
			"drop the first\nweapon in it (in a First In First Out format)." <<
	     endl;
	cout << "You will need to keep track of its contents and which rooms "
	     << "contain which\nweapons in order to succeed with the Gold Satchel."
			<< endl;
	cout << "\n\tSATCHEL MENU" << endl;
	cout << "1. Bronze Satchel" << endl;
	cout << "2. Silver Satchel" << endl;
	cout << "3. Gold Satchel" << endl;
	cout << "Make your choice: ";

	int satchelChoice = intValidation(1,3);

	// Construct the appropriate satchel based off the user's choice.
	switch (satchelChoice) {
		case 1: {
			satchel = new BasicSatchel;
			cout << "\nYou have selected the Bronze Satchel." << endl;
			cout << "We hope that next time, you will challenge yourself further."
			  << endl;
			break;
		}
		case 2: {
			satchel = new VectorSatchel;
			cout << "\nYou have selected the Silver Satchel." << endl;
			cout << "A safe choice. We will be watching you closely to assess "
			  "your talent." << endl;
			break;
		}
		case 3: {
			satchel = new QueueSatchel;
			cout << "\nYou have selected the Gold Satchel." << endl;
			cout << "You have demonstrated your ambition. Should you succeed, you "
			  "will be rewarded\nbeyond your wildest dreams." << endl;
		}
		default:
			break;
	}

	cout << "\nPress enter to take your satchel and begin your mission."	<< endl;
	getchar();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x28(%rbp)
movq 0x13815(%rip), %rdi     # 0x1afd0
movq %rdi, -0x30(%rbp)
leaq 0xb324(%rip), %rsi      # 0x12aea
callq 0x3200
movq %rax, %rdi
movq 0x137eb(%rip), %rsi     # 0x1afc0
movq %rsi, -0x38(%rbp)
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xc7df(%rip), %rsi      # 0x13fc8
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xc7e6(%rip), %rsi      # 0x13feb
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xc856(%rip), %rsi      # 0x14077
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xc885(%rip), %rsi      # 0x140c2
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xc8ba(%rip), %rsi      # 0x14113
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xc90d(%rip), %rsi      # 0x14182
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xc93b(%rip), %rsi      # 0x141cc
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xc93f(%rip), %rsi      # 0x141ec
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xc95b(%rip), %rsi      # 0x14224
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xc9bd(%rip), %rsi      # 0x142a2
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xca23(%rip), %rsi      # 0x14324
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xca4f(%rip), %rsi      # 0x1436c
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xca70(%rip), %rsi      # 0x143a9
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xcad3(%rip), %rsi      # 0x14428
callq 0x3200
movq %rax, %rdi
leaq 0xcb01(%rip), %rsi      # 0x14465
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xcb26(%rip), %rsi      # 0x144a6
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xcb19(%rip), %rsi      # 0x144b5
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xcb0f(%rip), %rsi      # 0x144c7
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xcb05(%rip), %rsi      # 0x144d9
callq 0x3200
movq -0x38(%rbp), %rsi
movq %rax, %rdi
callq 0x3230
movq -0x30(%rbp), %rdi
leaq 0xcf6a(%rip), %rsi      # 0x1495a
callq 0x3200
movq -0x28(%rbp), %rdi
movl $0x1, %esi
movl $0x3, %edx
callq 0x86e0
movl %eax, -0xc(%rbp)
movl -0xc(%rbp), %eax
movl %eax, -0x20(%rbp)
subl $0x1, %eax
je 0x7a37
jmp 0x7a18
movl -0x20(%rbp), %eax
subl $0x2, %eax
je 0x7ac6
jmp 0x7a26
movl -0x20(%rbp), %eax
subl $0x3, %eax
je 0x7b55
jmp 0x7bc0
movl $0x18, %edi
callq 0x3210
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x40(%rbp)
callq 0x38e0
jmp 0x7a52
movq -0x28(%rbp), %rax
movq -0x40(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq 0x1356b(%rip), %rdi     # 0x1afd0
leaq 0xca7d(%rip), %rsi      # 0x144e9
callq 0x3200
movq %rax, %rdi
movq 0x13545(%rip), %rsi     # 0x1afc0
callq 0x3230
movq 0x13549(%rip), %rdi     # 0x1afd0
leaq 0xca82(%rip), %rsi      # 0x14510
callq 0x3200
movq %rax, %rdi
movq 0x13523(%rip), %rsi     # 0x1afc0
callq 0x3230
jmp 0x7bde
movq -0x40(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
movl $0x18, %esi
callq 0x3220
jmp 0x7c0b
movl $0x30, %edi
callq 0x3210
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x48(%rbp)
callq 0xe510
jmp 0x7ae1
movq -0x28(%rbp), %rax
movq -0x48(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq 0x134dc(%rip), %rdi     # 0x1afd0
leaq 0xca52(%rip), %rsi      # 0x1454d
callq 0x3200
movq %rax, %rdi
movq 0x134b6(%rip), %rsi     # 0x1afc0
callq 0x3230
movq 0x134ba(%rip), %rdi     # 0x1afd0
leaq 0xca57(%rip), %rsi      # 0x14574
callq 0x3200
movq %rax, %rdi
movq 0x13494(%rip), %rsi     # 0x1afc0
callq 0x3230
jmp 0x7bde
movq -0x48(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
movl $0x30, %esi
callq 0x3220
jmp 0x7c0b
movl $0x68, %edi
callq 0x3210
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x50(%rbp)
callq 0xa710
jmp 0x7b70
movq -0x28(%rbp), %rax
movq -0x50(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq 0x1344d(%rip), %rdi     # 0x1afd0
leaq 0xca30(%rip), %rsi      # 0x145ba
callq 0x3200
movq %rax, %rdi
movq 0x13427(%rip), %rsi     # 0x1afc0
callq 0x3230
movq 0x1342b(%rip), %rdi     # 0x1afd0
leaq 0xca33(%rip), %rsi      # 0x145df
callq 0x3200
movq %rax, %rdi
movq 0x13405(%rip), %rsi     # 0x1afc0
callq 0x3230
jmp 0x7bde
movq -0x50(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
movl $0x68, %esi
callq 0x3220
jmp 0x7c0b
movq 0x133eb(%rip), %rdi     # 0x1afd0
leaq 0xca5d(%rip), %rsi      # 0x14649
callq 0x3200
movq %rax, %rdi
movq 0x133c5(%rip), %rsi     # 0x1afc0
callq 0x3230
callq 0x3300
addq $0x50, %rsp
popq %rbp
retq
movq -0x18(%rbp), %rdi
callq 0x3370
nopw %cs:(%rax,%rax)