| 430 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 431 | 
   | 
 typedef struct { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 432 | 
   | 
 char Name[16]; | 
 
 
 
 
 
 
 
 
 
 
 
 | 433 | 
 < | 
 int Bit; | 
 
 
 
 
 
 
 
 
 
 | 433 | 
 > | 
 uint64_t Bit; | 
 
 
 
 
 
 
 
 
 
 
 
 | 434 | 
   | 
 } KeyBit; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 435 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 | 436 | 
 < | 
 KeyBit Actions1[32] = { | 
 
 
 
 
 
 
 
 
 
 | 436 | 
 > | 
 static KeyBit Actions[] = { | 
 
 
 
 
 
 
 
 
 
 
 
 | 437 | 
   | 
         {"Escape", Action_Escape}, | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 438 | 
   | 
         {"Console", Action_Console}, | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 439 | 
   | 
         {"PauseScreen", Action_PauseScreen}, | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 444 | 
   | 
         {"F6", Action_F6                       }, | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 445 | 
   | 
         {"F7", Action_F7                        }, | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 446 | 
   | 
         {"F8", Action_F8                        }, | 
 
 
 
 
 
 
 
 
 
 
 
 | 447 | 
 < | 
         {"StartRecord", Action_StartRecord        },        | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 448 | 
 < | 
         {"StopRecord", Action_StopRecord            },     | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 449 | 
 < | 
         {"PlayRecord", Action_PlayRecord              },   | 
 
 
 
 
 
 
 
 
 
 | 447 | 
 > | 
         {"StartRecord", Action_StartRecord        }, | 
 
 
 
 
 
 | 448 | 
 > | 
         {"StopRecord", Action_StopRecord            }, | 
 
 
 
 
 
 | 449 | 
 > | 
         {"PlayRecord", Action_PlayRecord              }, | 
 
 
 
 
 
 
 
 
 
 
 
 | 450 | 
   | 
         {"F12", Action_F12                       }, | 
 
 
 
 
 
 
 
 
 
 | 451 | 
 – | 
         {"Unknown1", Action_Unknown1               },   | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 451 | 
   | 
         {"LookMode", Action_LookMode           }, | 
 
 
 
 
 
 
 
 
 
 
 
 | 452 | 
 < | 
         {"Screenshot", Action_Screenshot         },      | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 454 | 
 < | 
         {"Unknown2", Action_Unknown2              }, | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 455 | 
 < | 
         {"Unknown3", Action_Unknown3              },    | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 456 | 
 < | 
         {"Unknown4", Action_Unknown4                }, | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 457 | 
 < | 
         {"Unknown5", Action_Unknown5                }, | 
 
 
 
 
 
 
 
 
 
 | 452 | 
 > | 
         {"Screenshot", Action_Screenshot         }, | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 453 | 
   | 
         {"Forward", Action_Forward                 }, | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 454 | 
   | 
         {"Backward", Action_Backward                }, | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 455 | 
   | 
         {"TurnLeft", Action_TurnLeft                }, | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 460 | 
   | 
         {"Crouch", Action_Crouch                  }, | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 461 | 
   | 
         {"Punch",Action_Punch                   }, | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 462 | 
   | 
         {"Kick", Action_Kick                    }, | 
 
 
 
 
 
 
 
 
 
 
 
 | 463 | 
 < | 
         {"Block", Action_Block                   } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 463 | 
 > | 
         {"Block", Action_Block                   }, | 
 
 
 
 
 
 | 464 | 
 > | 
         {"Walk", Action_Walk}, | 
 
 
 
 
 
 | 465 | 
 > | 
         {"Action", Action_Action}, | 
 
 
 
 
 
 | 466 | 
 > | 
         {"Hypo", Action_Hypo}, | 
 
 
 
 
 
 | 467 | 
 > | 
         {"Reload", Action_Reload                }, | 
 
 
 
 
 
 | 468 | 
 > | 
         {"Swap", Action_Swap                }, | 
 
 
 
 
 
 | 469 | 
 > | 
         {"Drop", Action_Drop                     }, | 
 
 
 
 
 
 | 470 | 
 > | 
         {"Fire1", Action_Fire1                       }, | 
 
 
 
 
 
 | 471 | 
 > | 
         {"Fire2", Action_Fire2                       }, | 
 
 
 
 
 
 | 472 | 
 > | 
         {"Fire3", Action_Fire3                       } | 
 
 
 
 
 
 
 
 
 
 
 
 | 473 | 
   | 
 }; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 474 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 | 471 | 
 – | 
 KeyBit Actions2[9] = { | 
 
 
 
 
 
 
 
 
 
 | 472 | 
 – | 
         {"Walk", Action2_Walk}, | 
 
 
 
 
 
 
 
 
 
 | 473 | 
 – | 
         {"Action", Action2_Action}, | 
 
 
 
 
 
 
 
 
 
 | 474 | 
 – | 
         {"Hypo", Action2_Hypo}, | 
 
 
 
 
 
 
 
 
 
 | 475 | 
 – | 
         {"Reload", Action2_Reload                }, | 
 
 
 
 
 
 
 
 
 
 | 476 | 
 – | 
         {"Swap", Action2_Swap                }, | 
 
 
 
 
 
 
 
 
 
 | 477 | 
 – | 
         {"Drop", Action2_Drop                     }, | 
 
 
 
 
 
 
 
 
 
 | 478 | 
 – | 
         {"Fire1", Action2_Fire1                       }, | 
 
 
 
 
 
 
 
 
 
 | 479 | 
 – | 
         {"Fire2", Action2_Fire2                       }, | 
 
 
 
 
 
 
 
 
 
 | 480 | 
 – | 
         {"Fire3", Action2_Fire3                       } | 
 
 
 
 
 
 
 
 
 
 | 481 | 
 – | 
 }; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 475 | 
   | 
 uint16_t ONICALL bsl_holdkey(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret) | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 476 | 
   | 
 { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 477 | 
   | 
         uint32_t index; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 478 | 
   | 
         uint32_t i = 2; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 479 | 
   | 
         uint32_t j = 0; | 
 
 
 
 
 
 
 
 
 
 
 
 | 480 | 
 < | 
         int Input1 = 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 488 | 
 < | 
         int Input2 = 0; | 
 
 
 
 
 
 
 
 
 
 | 480 | 
 > | 
         uint64_t Input = 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 481 | 
   | 
         Character* Chr; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 482 | 
   | 
         ActiveCharacter* Active; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 483 | 
   | 
         if (args[0].type == sl_str32) index = DDrGetCharacterIndexFromName(args[0].val.value_str32); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 489 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 490 | 
   | 
         for(i = 1; i < numargs - 1; i++) { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 491 | 
   | 
                 for(j = 0; j < 32; j++) { | 
 
 
 
 
 
 
 
 
 
 
 
 | 492 | 
 < | 
                         if(!strcmp(args[i].val.value_str32, Actions1[j].Name)) { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 493 | 
 < | 
                                 Input1 = Input1 | Actions1[j].Bit; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 502 | 
 < | 
                         } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 503 | 
 < | 
                 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 504 | 
 < | 
                 for(j = 0; j < 9; j++) { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 505 | 
 < | 
                         if(!strcmp(args[i].val.value_str32, Actions2[j].Name)) {  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 506 | 
 < | 
                                 Input2 = Input2 | Actions2[j].Bit; | 
 
 
 
 
 
 
 
 
 
 | 492 | 
 > | 
                         if(!strcmp(args[i].val.value_str32, Actions[j].Name)) { | 
 
 
 
 
 
 | 493 | 
 > | 
                                 Input = Input | Actions[j].Bit; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 494 | 
   | 
                         } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 495 | 
   | 
                 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 496 | 
   | 
         } | 
 
 
 
 
 
 
 
 
 
 
 
 | 497 | 
 < | 
         Active->Input.Current.Actions1 = Active->Input.Current.Actions1 | Input1; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 498 | 
 < | 
         Active->Input.Current.Actions2 = Active->Input.Current.Actions2 | Input2; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 512 | 
 < | 
         if( Input1 + Input2 == 0 ) { | 
 
 
 
 
 
 
 
 
 
 | 497 | 
 > | 
         Active->Input.ActionsDown = Active->Input.ActionsDown | Input; | 
 
 
 
 
 
 | 498 | 
 > | 
         if( Input == 0 ) { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 499 | 
   | 
                 DDrConsole_PrintF("Func \"%s\", File \"%s\", Line %d: semantic error, \"%s\": No valid keys given.", callinfo->name, callinfo->calllocation, callinfo->linenumber, callinfo->name); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 500 | 
   | 
                 return 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 501 | 
   | 
         } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 522 | 
   | 
 //      if ((int)Active == 0) return 1; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 523 | 
   | 
         uint32_t i = 2; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 524 | 
   | 
         uint32_t j = 0; | 
 
 
 
 
 
 
 
 
 
 
 
 | 525 | 
 < | 
         int Input1 = 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 540 | 
 < | 
         int Input2 = 0; | 
 
 
 
 
 
 
 
 
 
 | 525 | 
 > | 
         uint64_t Input = 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 526 | 
   | 
         for(i = 0; i < numargs; i++) { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 527 | 
   | 
                 for(j = 0; j < 32; j++) { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 528 | 
   | 
                         //DDrConsole_PrintF("Testing %s against %s 0x%x", args[i].val.value_str32, Actions1[j].Name, Actions1[j].Bit); | 
 
 
 
 
 
 
 
 
 
 
 
 | 529 | 
 < | 
                         if(!strcmp(args[i].val.value_str32, Actions1[j].Name)) { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 530 | 
 < | 
                                 Input1 = Input1 | Actions1[j].Bit; | 
 
 
 
 
 
 
 
 
 
 | 529 | 
 > | 
                         if(!strcmp(args[i].val.value_str32, Actions[j].Name)) { | 
 
 
 
 
 
 | 530 | 
 > | 
                                 Input = Input | Actions[j].Bit; | 
 
 
 
 
 
 
 
 
 
 
 
 | 531 | 
   | 
                                 //DDrConsole_PrintF("Success!"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 532 | 
   | 
                         } | 
 
 
 
 
 
 
 
 
 
 
 
 | 533 | 
 < | 
                          | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 549 | 
 < | 
                 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 550 | 
 < | 
                 for(j = 0; j < 9; j++) { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 551 | 
 < | 
                         if(!strcmp(args[i].val.value_str32, Actions2[j].Name)) Input2 = Input2 | Actions2[j].Bit; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 552 | 
 < | 
          | 
 
 
 
 
 
 
 
 
 
 | 533 | 
 > | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 534 | 
   | 
                 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 535 | 
   | 
                 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 536 | 
   | 
         //DDrConsole_PrintF("Testing: 0x%x Input: 0x%x",Input1, *(int*)(ONgGameState + 0xB8 + 0x10)); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 537 | 
   | 
         ret->val.value_int32 = 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 538 | 
   | 
         ret->type = sl_int32; | 
 
 
 
 
 
 
 
 
 
 
 
 | 539 | 
 < | 
         if ( (ONgGameState->Input.Current.Actions1 == Input1)  && (ONgGameState->Input.Current.Actions2 == Input2)) ret->val.value_int32 = 1; | 
 
 
 
 
 
 
 
 
 
 | 539 | 
 > | 
         if (ONgGameState->Input.ActionsDown == Input) ret->val.value_int32 = 1; | 
 
 
 
 
 
 
 
 
 
 
 
 | 540 | 
   | 
         return 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 541 | 
   | 
 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 542 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 553 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 554 | 
   | 
         int i = 2; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 555 | 
   | 
         int j = 0; | 
 
 
 
 
 
 
 
 
 
 
 
 | 556 | 
 < | 
         int Input1 = 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 576 | 
 < | 
         int Input2 = 0; | 
 
 
 
 
 
 
 
 
 
 | 556 | 
 > | 
         uint64_t Input = 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 557 | 
   | 
 /* | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 558 | 
   | 
         numargs = 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 559 | 
   | 
         for(i = 0; args[i].type <= sl_void; i++) | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 568 | 
   | 
         i = 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 569 | 
   | 
                 for(j = 0; j < 32; j++) { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 570 | 
   | 
                         //DDrConsole_PrintF("Testing %s against %s 0x%x", args[i].val.value_str32, Actions1[j].Name, Actions1[j].Bit); | 
 
 
 
 
 
 
 
 
 
 
 
 | 571 | 
 < | 
                         if(!strcmp(args[i].val.value_str32, Actions1[j].Name)) { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 572 | 
 < | 
                                 Input1 = Input1 | Actions1[j].Bit; | 
 
 
 
 
 
 
 
 
 
 | 571 | 
 > | 
                         if(!strcmp(args[i].val.value_str32, Actions[j].Name)) { | 
 
 
 
 
 
 | 572 | 
 > | 
                                 Input = Input | Actions[j].Bit; | 
 
 
 
 
 
 
 
 
 
 
 
 | 573 | 
   | 
                                 //DDrConsole_PrintF("Success!"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 574 | 
   | 
                         } | 
 
 
 
 
 
 
 
 
 
 
 
 | 575 | 
 < | 
                          | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 596 | 
 < | 
                 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 597 | 
 < | 
                 for(j = 0; j < 9; j++) { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 598 | 
 < | 
                         if(!strcmp(args[i].val.value_str32, Actions2[j].Name)) Input2 = Input2 | Actions2[j].Bit; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 599 | 
 < | 
          | 
 
 
 
 
 
 
 
 
 
 | 575 | 
 > | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 576 | 
   | 
                 } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 577 | 
   | 
         //      } | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 578 | 
   | 
         DDrConsole_PrintF("Waiting..."); | 
 
 
 
 
 
 
 
 
 
 
 
 | 579 | 
 < | 
         if (  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 604 | 
 < | 
                 (( ONgGameState->Input.Current.Actions1 & Input1) == Input1)  &&  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 605 | 
 < | 
                 (( ONgGameState->Input.Current.Actions2 & Input2) == Input2)  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 606 | 
 < | 
         ) | 
 
 
 
 
 
 
 
 
 
 | 579 | 
 > | 
         if (( ONgGameState->Input.ActionsDown & Input) == Input) | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 580 | 
   | 
         { | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 581 | 
   | 
         DDrConsole_PrintF("Found key!"); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 582 | 
   | 
         } |