// File: giovifazi[P]knossos-bloodbath/ClassPlayer.cpp
// Function: Player::Player_move(char, Map&, Node&)
bool Player::Player_move(char dir, Map& map, Node& curr_node)
{
   // Alias per usare nomi di variabili piu corte
   int xx = pos->get_x();
   int yy = pos->get_y();
   bool ret;                  // true se move in nuovo nodo, false su vecchio nodo

   // Movimento verso un nodo non ancora esistente
   if (pos->get_cardinal(dir)==NULL)
   {
      // Crea il nuovo nodo e aggiorna il valore nella mappa
      pos->add_node((*pos), dir, map, curr_node);
      map.changeValue(xx, yy, map.getValueAt(xx, yy) - numPlay, (-1));
      
      // Sposta il giocatore
      pos = pos->get_cardinal(dir);
      
      // Aggiorna le coordinate alias
      xx = pos->get_x();
      yy = pos->get_y();
    
      // Aggiorna i valori dello spostamento sulla mappa
      map.changeValue(xx, yy, map.getValueAt(xx, yy) + numPlay, 1);
   
      // Contenuto della nuova stanze random, tramite dado
      hud_movement(diceRoll_nr());
      
      ret = true;
   }
   // Movimento verso un nodo già esistente
   else 
   {
      // Toglie sulla mappa il valore del simbolo nella vecchia posizione
      map.changeValue(xx, yy, map.getValueAt(xx, yy) - numPlay, (-1));
      
      // Sposta la posizione del giocatore
      pos = pos->get_cardinal(dir);
      
      // Aggiorna le coordinate alias
      xx = pos->get_x();
      yy = pos->get_y();
      
      // Aggiunge il valore del simbolo nella nuova posizione sulla mappa
      map.changeValue(xx, yy, map.getValueAt(xx, yy) + numPlay, 1);
   
      // Stampo righe vuote per separare schermate
      for(int j=0; j < 40; j++)
         std::cout << "\n"; 
   
      ret = false;
   }            

   return ret;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movb %sil, %al
movq %rdi, -0x8(%rbp)
movb %al, -0x9(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x38(%rbp)
movq 0x50(%rax), %rdi
callq 0x3510
movl %eax, %ecx
movq -0x38(%rbp), %rax
movl %ecx, -0x24(%rbp)
movq 0x50(%rax), %rdi
callq 0x3530
movl %eax, %ecx
movq -0x38(%rbp), %rax
movl %ecx, -0x28(%rbp)
movq 0x50(%rax), %rdi
movsbl -0x9(%rbp), %esi
callq 0x3590
cmpq $0x0, %rax
jne 0x8b24
movq -0x38(%rbp), %rax
movq 0x50(%rax), %rdi
movq 0x50(%rax), %rsi
movb -0x9(%rbp), %al
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %r8
movsbl %al, %edx
callq 0x3aa0
movq -0x18(%rbp), %rax
movq %rax, -0x58(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x50(%rbp)
movl -0x28(%rbp), %eax
movl %eax, -0x4c(%rbp)
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
movl -0x28(%rbp), %edx
callq 0x4e60
movq -0x58(%rbp), %rdi
movl -0x50(%rbp), %esi
movl -0x4c(%rbp), %edx
movl %eax, %ecx
movq -0x38(%rbp), %rax
subl 0x28(%rax), %ecx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x4f50
movq -0x38(%rbp), %rax
movq 0x50(%rax), %rdi
movsbl -0x9(%rbp), %esi
callq 0x3590
movq %rax, %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x50(%rax)
movq 0x50(%rax), %rdi
callq 0x3510
movl %eax, %ecx
movq -0x38(%rbp), %rax
movl %ecx, -0x24(%rbp)
movq 0x50(%rax), %rdi
callq 0x3530
movl %eax, -0x28(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x48(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x40(%rbp)
movl -0x28(%rbp), %eax
movl %eax, -0x3c(%rbp)
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
movl -0x28(%rbp), %edx
callq 0x4e60
movq -0x48(%rbp), %rdi
movl -0x40(%rbp), %esi
movl -0x3c(%rbp), %edx
movl %eax, %ecx
movq -0x38(%rbp), %rax
addl 0x28(%rax), %ecx
movl $0x1, %r8d
callq 0x4f50
movq -0x38(%rbp), %rdi
callq 0x8c20
movl %eax, %edi
callq 0x6460
movb $0x1, -0x29(%rbp)
jmp 0x8c0f
movq -0x18(%rbp), %rax
movq %rax, -0x78(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x70(%rbp)
movl -0x28(%rbp), %eax
movl %eax, -0x6c(%rbp)
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
movl -0x28(%rbp), %edx
callq 0x4e60
movq -0x78(%rbp), %rdi
movl -0x70(%rbp), %esi
movl -0x6c(%rbp), %edx
movl %eax, %ecx
movq -0x38(%rbp), %rax
subl 0x28(%rax), %ecx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x4f50
movq -0x38(%rbp), %rax
movq 0x50(%rax), %rdi
movsbl -0x9(%rbp), %esi
callq 0x3590
movq %rax, %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x50(%rax)
movq 0x50(%rax), %rdi
callq 0x3510
movl %eax, %ecx
movq -0x38(%rbp), %rax
movl %ecx, -0x24(%rbp)
movq 0x50(%rax), %rdi
callq 0x3530
movl %eax, -0x28(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x68(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x60(%rbp)
movl -0x28(%rbp), %eax
movl %eax, -0x5c(%rbp)
movq -0x18(%rbp), %rdi
movl -0x24(%rbp), %esi
movl -0x28(%rbp), %edx
callq 0x4e60
movq -0x68(%rbp), %rdi
movl -0x60(%rbp), %esi
movl -0x5c(%rbp), %edx
movl %eax, %ecx
movq -0x38(%rbp), %rax
addl 0x28(%rax), %ecx
movl $0x1, %r8d
callq 0x4f50
movl $0x0, -0x30(%rbp)
cmpl $0x28, -0x30(%rbp)
jge 0x8c0b
movq 0xb3dc(%rip), %rdi      # 0x13fd0
leaq 0x7d7e(%rip), %rsi      # 0x10979
callq 0x21a0
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
jmp 0x8be7
movb $0x0, -0x29(%rbp)
movb -0x29(%rbp), %al
andb $0x1, %al
addq $0x80, %rsp
popq %rbp
retq
nopl (%rax)