// File: /workspace/github_cpp_makefile_star2_O3/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
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rcx, -0x30(%rbp)
movq %rdx, %r15
movl %esi, %r13d
movq %rdi, %r14
movq 0x50(%rdi), %rdi
callq 0x2dc2
movl %eax, %r12d
movq 0x50(%r14), %rdi
callq 0x2dcc
movl %eax, %ebx
movq 0x50(%r14), %rdi
movl %r13d, %esi
callq 0x2dea
movq %rax, -0x38(%rbp)
testq %rax, %rax
je 0x7822
movq %r15, %rdi
movl %r12d, %esi
movl %ebx, %edx
callq 0x3b52
subl 0x28(%r14), %eax
movq %r15, %rdi
movl %r12d, %esi
movl %ebx, %edx
movl %eax, %ecx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x3ba6
movq 0x50(%r14), %rdi
movsbl %r13b, %esi
callq 0x2dea
movq %rax, 0x50(%r14)
movq %rax, %rdi
callq 0x2dc2
movl %eax, %ebx
movq 0x50(%r14), %rdi
callq 0x2dcc
movl %eax, %r12d
movq %r15, %rdi
movl %ebx, %esi
movl %eax, %edx
callq 0x3b52
addl 0x28(%r14), %eax
movq %r15, %rdi
movl %ebx, %esi
movl %r12d, %edx
movl %eax, %ecx
movl $0x1, %r8d
callq 0x3ba6
movl $0x28, %r15d
movq 0xa7cf(%rip), %rbx      # 0x11fd0
leaq 0x704d(%rip), %r14      # 0xe855
movl $0x1, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2140
decl %r15d
jne 0x7808
jmp 0x78bc
movq 0x50(%r14), %rdi
movsbl %r13b, %r13d
movq %rdi, %rsi
movl %r13d, %edx
movq %r15, %rcx
movq -0x30(%rbp), %r8
callq 0x3014
movq %r15, %rdi
movl %r12d, %esi
movl %ebx, %edx
callq 0x3b52
subl 0x28(%r14), %eax
movq %r15, %rdi
movl %r12d, %esi
movl %ebx, %edx
movl %eax, %ecx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x3ba6
movq 0x50(%r14), %rdi
movl %r13d, %esi
callq 0x2dea
movq %rax, 0x50(%r14)
movq %rax, %rdi
callq 0x2dc2
movl %eax, %ebx
movq 0x50(%r14), %rdi
callq 0x2dcc
movl %eax, %r12d
movq %r15, %rdi
movl %ebx, %esi
movl %eax, %edx
callq 0x3b52
addl 0x28(%r14), %eax
movq %r15, %rdi
movl %ebx, %esi
movl %r12d, %edx
movl %eax, %ecx
movl $0x1, %r8d
callq 0x3ba6
movq %r14, %rdi
callq 0x78d4
movl %eax, %edi
callq 0x4c2b
cmpq $0x0, -0x38(%rbp)
sete %al
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop