// File: LifeAlgorithm[P]RockPaperScissors/RPSGame.cpp
// Function: RPSGame::toolSettingsMenu()
void RPSGame::toolSettingsMenu() {
	bool runToolSettings = true;
	int settingsInput;

	while (runToolSettings) {
		screenClear();
		cout << "Tool Settings Menu" << endl << endl;
		cout << "1) Human Tool Strength" << endl;
		cout << "2) Computer Tool Strength" << endl;
		cout << "3) Back to main menu" << endl;

		//cout << "X) Tempo - (" << getTempo() << " seconds)" << endl;     If we want to add tempo between rounds

		cout << "Enter option (1-3): ";
		cin >> settingsInput;
		settingsInput = validateBetween(settingsInput, 1, 3);

		switch (settingsInput) {
		case 1: //Human tool Strength
		{
			bool humanToolSettingsRun = true;
			int tempUserChoice;


			while (humanToolSettingsRun) {
				screenClear();
				cout << "Human tool strength settings" << endl << endl;
				cout << "1) Rock strength:  " << humanRockStrength << endl;
				cout << "2) Paper strength: " << humanPaperStrength << endl;
				cout << "3) Scissor strength: " << humanScissorStrength << endl;
				cout << "4) Back to Tool settings menu" << endl;
				cout << endl << endl << "Enter 1-4: ";
				cin >> tempUserChoice;
				tempUserChoice = validateBetween(tempUserChoice, 1, 4);
				int tempStrength = 0;

				switch (tempUserChoice) {
				case 1: // Set Human rock strength
				{
					cout << endl << "Enter new rock strength: ";
					cin >> tempStrength;
					humanRockStrength = validateBetween(tempStrength, minStrength, maxStrength);

					break;
				}
				case 2: // Set Human paper strength
				{
					cout << endl << "Enter new paper strength: ";
					cin >> tempStrength;
					humanPaperStrength = validateBetween(tempStrength, minStrength, maxStrength);

					break;
				}
				case 3: // Set Human scissor strength
				{
					cout << endl << "Enter new scissor strength: ";
					cin >> tempStrength;
					humanScissorStrength = validateBetween(tempStrength, minStrength, maxStrength);
					break;
				}
				case 4: {
					humanToolSettingsRun = false;
				}
				}
			}
			break;
		}

		case 2: //Computer tool Strength
		{
			bool computerToolSettingsRun = true;
			int tempUserChoice;


			while (computerToolSettingsRun) {
				screenClear();
				cout << "Computer tool strength settings" << endl << endl;
				cout << "1) Rock strength:  " << computerRockStrength << endl;
				cout << "2) Paper strength: " << computerPaperStrength << endl;
				cout << "3) Scissor strength: " << computerScissorStrength << endl;
				cout << "4) Back to Tool settings menu" << endl;
				cout << endl << endl << "Enter 1-4: ";
				cin >> tempUserChoice;
				tempUserChoice = validateBetween(tempUserChoice, 1, 4);
				int tempStrength = 0;
				switch (tempUserChoice) {
				case 1: // Set Computer rock strength
				{
					cout << endl << "Enter new rock strength: ";
					cin >> tempStrength;
					computerRockStrength = validateBetween(tempStrength, minStrength, maxStrength);
					break;
				}
				case 2: // Set Computer paper strength
				{
					cout << endl << "Enter new paper strength: ";
					cin >> tempStrength;
					computerPaperStrength = validateBetween(tempStrength, minStrength, maxStrength);
					break;
				}
				case 3: // Set Computer scissor strength
				{
					cout << endl << "Enter new scissor strength: ";
					cin >> tempStrength;
					computerScissorStrength = validateBetween(tempStrength, minStrength, maxStrength);
					break;
				}
				case 4: {
					computerToolSettingsRun = false;
				}
				}
			}
			break;
		}
		case 3: {
			runToolSettings = false;
		}
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x30(%rbp)
movb $0x1, -0x9(%rbp)
testb $0x1, -0x9(%rbp)
je 0x4243
movq -0x30(%rbp), %rdi
callq 0x3880
movq 0x534b(%rip), %rdi      # 0x8fd0
movq %rdi, -0x40(%rbp)
leaq 0x24e7(%rip), %rsi      # 0x6177
callq 0x2160
movq %rax, %rdi
movq 0x5321(%rip), %rsi      # 0x8fc0
movq %rsi, -0x48(%rbp)
callq 0x2190
movq -0x48(%rbp), %rsi
movq %rax, %rdi
callq 0x2190
movq -0x40(%rbp), %rdi
leaq 0x24cb(%rip), %rsi      # 0x618a
callq 0x2160
movq -0x48(%rbp), %rsi
movq %rax, %rdi
callq 0x2190
movq -0x40(%rbp), %rdi
leaq 0x24c6(%rip), %rsi      # 0x61a1
callq 0x2160
movq -0x48(%rbp), %rsi
movq %rax, %rdi
callq 0x2190
movq -0x40(%rbp), %rdi
leaq 0x24c4(%rip), %rsi      # 0x61bb
callq 0x2160
movq -0x48(%rbp), %rsi
movq %rax, %rdi
callq 0x2190
movq -0x40(%rbp), %rdi
leaq 0x2446(%rip), %rsi      # 0x6159
callq 0x2160
movq 0x52c1(%rip), %rdi      # 0x8fe0
leaq -0x10(%rbp), %rsi
callq 0x20d0
movq -0x30(%rbp), %rdi
movl -0x10(%rbp), %esi
movl $0x1, %edx
movl $0x3, %ecx
callq 0x39c0
movl %eax, -0x10(%rbp)
movl -0x10(%rbp), %eax
movl %eax, -0x34(%rbp)
subl $0x1, %eax
je 0x3d6d
jmp 0x3d4e
movl -0x34(%rbp), %eax
subl $0x2, %eax
je 0x3fd5
jmp 0x3d5c
movl -0x34(%rbp), %eax
subl $0x3, %eax
je 0x423a
jmp 0x423e
movb $0x1, -0x11(%rbp)
testb $0x1, -0x11(%rbp)
je 0x3fd0
movq -0x30(%rbp), %rdi
callq 0x3880
movq 0x5245(%rip), %rdi      # 0x8fd0
movq %rdi, -0x60(%rbp)
leaq 0x243a(%rip), %rsi      # 0x61d0
callq 0x2160
movq %rax, %rdi
movq 0x521b(%rip), %rsi      # 0x8fc0
movq %rsi, -0x58(%rbp)
callq 0x2190
movq -0x58(%rbp), %rsi
movq %rax, %rdi
callq 0x2190
movq -0x60(%rbp), %rdi
leaq 0x2428(%rip), %rsi      # 0x61ed
callq 0x2160
movq %rax, %rdi
movq -0x30(%rbp), %rax
movl 0x50(%rax), %esi
callq 0x2200
movq -0x58(%rbp), %rsi
movq %rax, %rdi
callq 0x2190
movq -0x60(%rbp), %rdi
leaq 0x2411(%rip), %rsi      # 0x6201
callq 0x2160
movq %rax, %rdi
movq -0x30(%rbp), %rax
movl 0x54(%rax), %esi
callq 0x2200
movq -0x58(%rbp), %rsi
movq %rax, %rdi
callq 0x2190
movq -0x60(%rbp), %rdi
leaq 0x23fa(%rip), %rsi      # 0x6215
callq 0x2160
movq %rax, %rdi
movq -0x30(%rbp), %rax
movl 0x58(%rax), %esi
callq 0x2200
movq -0x58(%rbp), %rsi
movq %rax, %rdi
callq 0x2190
movq -0x60(%rbp), %rdi
leaq 0x23e5(%rip), %rsi      # 0x622b
callq 0x2160
movq -0x58(%rbp), %rsi
movq %rax, %rdi
callq 0x2190
movq -0x60(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x2190
movq -0x58(%rbp), %rsi
movq %rax, %rdi
callq 0x2190
movq %rax, %rdi
leaq 0x23cf(%rip), %rsi      # 0x6249
callq 0x2160
movq 0x515a(%rip), %rdi      # 0x8fe0
leaq -0x18(%rbp), %rsi
callq 0x20d0
movq -0x30(%rbp), %rdi
movl -0x18(%rbp), %esi
movl $0x1, %edx
movl $0x4, %ecx
callq 0x39c0
movl %eax, -0x18(%rbp)
movl $0x0, -0x1c(%rbp)
movl -0x18(%rbp), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x50(%rbp)
subl $0x3, %eax
ja 0x3fcb
movq -0x50(%rbp), %rax
leaq 0x2176(%rip), %rcx      # 0x6044
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x50f2(%rip), %rdi      # 0x8fd0
movq 0x50db(%rip), %rsi      # 0x8fc0
callq 0x2190
movq %rax, %rdi
leaq 0x2361(%rip), %rsi      # 0x6255
callq 0x2160
movq 0x50e0(%rip), %rdi      # 0x8fe0
leaq -0x1c(%rbp), %rsi
callq 0x20d0
movq -0x30(%rbp), %rdi
movl -0x1c(%rbp), %esi
movl 0x4c(%rdi), %edx
movl 0x48(%rdi), %ecx
callq 0x39c0
movl %eax, %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x50(%rax)
jmp 0x3fcb
movq 0x50a0(%rip), %rdi      # 0x8fd0
movq 0x5089(%rip), %rsi      # 0x8fc0
callq 0x2190
movq %rax, %rdi
leaq 0x2329(%rip), %rsi      # 0x626f
callq 0x2160
movq 0x508e(%rip), %rdi      # 0x8fe0
leaq -0x1c(%rbp), %rsi
callq 0x20d0
movq -0x30(%rbp), %rdi
movl -0x1c(%rbp), %esi
movl 0x4c(%rdi), %edx
movl 0x48(%rdi), %ecx
callq 0x39c0
movl %eax, %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x54(%rax)
jmp 0x3fcb
movq 0x5051(%rip), %rdi      # 0x8fd0
movq 0x503a(%rip), %rsi      # 0x8fc0
callq 0x2190
movq %rax, %rdi
leaq 0x22f5(%rip), %rsi      # 0x628a
callq 0x2160
movq 0x503f(%rip), %rdi      # 0x8fe0
leaq -0x1c(%rbp), %rsi
callq 0x20d0
movq -0x30(%rbp), %rdi
movl -0x1c(%rbp), %esi
movl 0x4c(%rdi), %edx
movl 0x48(%rdi), %ecx
callq 0x39c0
movl %eax, %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x58(%rax)
jmp 0x3fcb
movb $0x0, -0x11(%rbp)
jmp 0x3d71
jmp 0x423e
movb $0x1, -0x1d(%rbp)
testb $0x1, -0x1d(%rbp)
je 0x4238
movq -0x30(%rbp), %rdi
callq 0x3880
movq 0x4fdd(%rip), %rdi      # 0x8fd0
movq %rdi, -0x78(%rbp)
leaq 0x22a9(%rip), %rsi      # 0x62a7
callq 0x2160
movq %rax, %rdi
movq 0x4fb3(%rip), %rsi      # 0x8fc0
movq %rsi, -0x70(%rbp)
callq 0x2190
movq -0x70(%rbp), %rsi
movq %rax, %rdi
callq 0x2190
movq -0x78(%rbp), %rdi
leaq 0x21c0(%rip), %rsi      # 0x61ed
callq 0x2160
movq %rax, %rdi
movq -0x30(%rbp), %rax
movl 0x5c(%rax), %esi
callq 0x2200
movq -0x70(%rbp), %rsi
movq %rax, %rdi
callq 0x2190
movq -0x78(%rbp), %rdi
leaq 0x21a9(%rip), %rsi      # 0x6201
callq 0x2160
movq %rax, %rdi
movq -0x30(%rbp), %rax
movl 0x60(%rax), %esi
callq 0x2200
movq -0x70(%rbp), %rsi
movq %rax, %rdi
callq 0x2190
movq -0x78(%rbp), %rdi
leaq 0x2192(%rip), %rsi      # 0x6215
callq 0x2160
movq %rax, %rdi
movq -0x30(%rbp), %rax
movl 0x64(%rax), %esi
callq 0x2200
movq -0x70(%rbp), %rsi
movq %rax, %rdi
callq 0x2190
movq -0x78(%rbp), %rdi
leaq 0x217d(%rip), %rsi      # 0x622b
callq 0x2160
movq -0x70(%rbp), %rsi
movq %rax, %rdi
callq 0x2190
movq -0x78(%rbp), %rdi
movq -0x70(%rbp), %rsi
callq 0x2190
movq -0x70(%rbp), %rsi
movq %rax, %rdi
callq 0x2190
movq %rax, %rdi
leaq 0x2167(%rip), %rsi      # 0x6249
callq 0x2160
movq 0x4ef2(%rip), %rdi      # 0x8fe0
leaq -0x24(%rbp), %rsi
callq 0x20d0
movq -0x30(%rbp), %rdi
movl -0x24(%rbp), %esi
movl $0x1, %edx
movl $0x4, %ecx
callq 0x39c0
movl %eax, -0x24(%rbp)
movl $0x0, -0x28(%rbp)
movl -0x24(%rbp), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x68(%rbp)
subl $0x3, %eax
ja 0x4233
movq -0x68(%rbp), %rax
leaq 0x1efe(%rip), %rcx      # 0x6034
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x4e8a(%rip), %rdi      # 0x8fd0
movq 0x4e73(%rip), %rsi      # 0x8fc0
callq 0x2190
movq %rax, %rdi
leaq 0x20f9(%rip), %rsi      # 0x6255
callq 0x2160
movq 0x4e78(%rip), %rdi      # 0x8fe0
leaq -0x28(%rbp), %rsi
callq 0x20d0
movq -0x30(%rbp), %rdi
movl -0x28(%rbp), %esi
movl 0x4c(%rdi), %edx
movl 0x48(%rdi), %ecx
callq 0x39c0
movl %eax, %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x5c(%rax)
jmp 0x4233
movq 0x4e38(%rip), %rdi      # 0x8fd0
movq 0x4e21(%rip), %rsi      # 0x8fc0
callq 0x2190
movq %rax, %rdi
leaq 0x20c1(%rip), %rsi      # 0x626f
callq 0x2160
movq 0x4e26(%rip), %rdi      # 0x8fe0
leaq -0x28(%rbp), %rsi
callq 0x20d0
movq -0x30(%rbp), %rdi
movl -0x28(%rbp), %esi
movl 0x4c(%rdi), %edx
movl 0x48(%rdi), %ecx
callq 0x39c0
movl %eax, %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x60(%rax)
jmp 0x4233
movq 0x4de9(%rip), %rdi      # 0x8fd0
movq 0x4dd2(%rip), %rsi      # 0x8fc0
callq 0x2190
movq %rax, %rdi
leaq 0x208d(%rip), %rsi      # 0x628a
callq 0x2160
movq 0x4dd7(%rip), %rdi      # 0x8fe0
leaq -0x28(%rbp), %rsi
callq 0x20d0
movq -0x30(%rbp), %rdi
movl -0x28(%rbp), %esi
movl 0x4c(%rdi), %edx
movl 0x48(%rdi), %ecx
callq 0x39c0
movl %eax, %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x64(%rax)
jmp 0x4233
movb $0x0, -0x1d(%rbp)
jmp 0x3fd9
jmp 0x423e
movb $0x0, -0x9(%rbp)
jmp 0x3c6b
addq $0x80, %rsp
popq %rbp
retq
nopl (%rax)