ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/Daodan/src/Daodan_BSL.c
(Generate patch)

Comparing Daodan/src/Daodan_BSL.c (file contents):
Revision 469 by rossy, Sun Jul 26 12:04:44 2009 UTC vs.
Revision 470 by gumby, Mon Oct 26 07:58:02 2009 UTC

# Line 117 | Line 117 | uint16_t ONICALL bsl_getdamage(sl_callin
117          return 0;
118   }
119  
120 + uint16_t ONICALL bsl_returnoffset(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
121 + {
122 +        //int offset = 140;
123 +        //if (== 1) offset = 148;
124 +        //else index = args[0].value_int32;
125 +        int* killcount = ONgGameState + args[0].value_int32;
126 +        ret->value_int32 = *killcount;
127 +        ret->type = sl_int32;
128 +        return 0;
129 + }
130 +
131 +
132   uint16_t ONICALL bsl_powerup(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
133   {
134          int index;
# Line 198 | Line 210 | uint16_t ONICALL bsl_health(sl_callinfo*
210          return 0;
211   }
212  
213 + uint16_t ONICALL bsl_regen(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
214 + {
215 +        int index;
216 +        if (numargs == 0) index = 0;
217 +        else if (args[0].type == sl_str32) index = DDrGetCharacterIndexFromName(args[0].value_str32);
218 +        else index = args[0].value_int32;
219 +        Character* Chr = ONgGameState + 0x1260 ;
220 +        int* health = (int*)&Chr[index] + 0x144;
221 +
222 +        ret->value_int32 = *health;
223 +        ret->type = sl_int32;
224 +
225 +        if (numargs >= 2) {
226 +                *health = args[1].value_int32;
227 +        }
228 +        ret->value_int32 = *health;
229 +        ret->type = sl_int32;
230 +        return 0;
231 + }
232 +
233 +
234   uint16_t ONICALL bsl_maxhealth(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
235   {
236          int index;
# Line 221 | Line 254 | uint16_t ONICALL bsl_maxhealth(sl_callin
254  
255   uint16_t ONICALL bsl_getattacker(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
256   {
257 <        //broken...not only does it sometimes blam, but it returns a string when i want an int so i can study it :<
257 >        //broken
258 >        
259          int index;
260          if (numargs == 0) index = 0;
261          else    if (args[0].type == sl_str32) index = DDrGetCharacterIndexFromName(args[0].value_str32);
# Line 308 | Line 342 | uint16_t ONICALL bsl_getactiveoffset(sl_
342          DDrConsole_PrintF("ActiveChar: 0x%x",(int)ONrGetActiveCharacter((void*)((int)ONgGameState + 0x1260)));
343          return 0;
344   }
345 + typedef struct {
346 + char Name[16];
347 + int Bit;
348 + } KeyBit;
349 +
350 + KeyBit Actions1[32] = {
351 +        {"Escape", Action_Escape},
352 +        {"Console", Action_Console},
353 +        {"PauseScreen", Action_PauseScreen},
354 +        {"Cutscene1", Action_Cutscene_1                },
355 +        {"Cutscene2", Action_Cutscene_2                },
356 +        {"F4", Action_F4                      },
357 +        {"F5", Action_F5                        },
358 +        {"F6", Action_F6                       },
359 +        {"F7", Action_F7                        },
360 +        {"F8", Action_F8                        },
361 +        {"StartRecorn", Action_StartRecord        },      
362 +        {"StopRecord", Action_StopRecord            },    
363 +        {"PlayRecord", Action_PlayRecord              },  
364 +        {"F12", Action_F12                       },
365 +        {"Unknown1", Action_Unknown1               },  
366 +        {"LookMode", Action_LookMode           },
367 +        {"Screenshot", Action_Screenshot         },    
368 +        {"Unknown2", Action_Unknown2              },
369 +        {"Unknown3", Action_Unknown3              },  
370 +        {"Unknown4", Action_Unknown4                },
371 +        {"Unknown5", Action_Unknown5                },
372 +        {"Forward", Action_Forward                 },
373 +        {"Backward", Action_Backward                },
374 +        {"TurnLeft", Action_TurnLeft                },
375 +        {"TurnRight", Action_TurnRight               },
376 +        {"StepLeft", Action_StepLeft                },
377 +        {"StepRight", Action_StepRight               },
378 +        {"Jump", Action_Jump                    },
379 +        {"Crouch", Action_Crouch                  },
380 +        {"Punch",Action_Punch                   },
381 +        {"Kick", Action_Kick                    },
382 +        {"Block", Action_Block                   }
383 + };
384 +
385 + KeyBit Actions2[9] = {
386 +        {"Walk", Action2_Walk},
387 +        {"Action", Action2_Action},
388 +        {"Hypo", Action2_Hypo},
389 +        {"Reload", Action2_Reload                },
390 +        {"Swap", Action2_Swap                },
391 +        {"Drop", Action2_Drop                     },
392 +        {"Fire1", Action2_Fire1                       },
393 +        {"Fire2", Action2_Fire2                       },
394 +        {"Fire3", Action2_Fire3                       }
395 + };
396 + uint16_t ONICALL bsl_holdkey(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
397 +        {
398 +                int index;
399 +                if (numargs < 4) index = 0;
400 +                else    if (args[0].type == sl_str32) index = DDrGetCharacterIndexFromName(args[0].value_str32);
401 +                else index = args[0].value_int32;
402 +
403 +                Character* Chr = ONgGameState + 0x1260;
404 +        ActiveCharacter* Active = (ActiveCharacter*)ONrGetActiveCharacter(&Chr[index]);
405 +        if ((int)Active == 0) return 1;
406 +        int i = 2;
407 +        int j = 0;
408 +        int Input1 = 0;
409 +        int Input2 = 0;
410 +        for(i = 1; i < numargs; i++) {
411 +                for(j = 0; j < 32; j++) {
412 +                        if(strcmp(args[i].value_str32, Actions1[j].Name)) Input1 = Input1 | Actions1[j].Bit;
413 +                        DDrConsole_PrintF("Testing %s against %s 0x%x", args[i].value_str32, Actions1[j].Name, Actions1[j].Bit);
414 +                }
415 +                for(j = 0; j < 9; j++) {
416 +                        if(!strcmp(args[i].value_str32, Actions2[j].Name)) Input2 = Input2 | Actions2[j].Bit;
417 +        
418 +                }
419 +                }
420 +        for(i = 0; i < numargs; i++) {
421 +                DDrConsole_PrintF("%s", args[i].value_str32);
422 +        }
423 + //      if
424 +        return 0;
425 + }
426 +        
427 + uint16_t ONICALL bsl_isheld(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
428 +        {
429 + //              int index;
430 + //              if (numargs < 4) index = 0;
431 + //              else    if (args[0].type == sl_str32) index = DDrGetCharacterIndexFromName(args[0].value_str32);
432 + //              else index = args[0].value_int32;
433 +
434 + //              Character* Chr = ONgGameState + 0x1260;
435 + //      ActiveCharacter* Active = (ActiveCharacter*)ONrGetActiveCharacter(&Chr[index]);
436 + //      if ((int)Active == 0) return 1;
437 +        int i = 2;
438 +        int j = 0;
439 +        int Input1 = 0;
440 +        int Input2 = 0;
441 +        for(i = 0; i < numargs; i++) {
442 +                for(j = 0; j < 32; j++) {
443 +                        //DDrConsole_PrintF("Testing %s against %s 0x%x", args[i].value_str32, Actions1[j].Name, Actions1[j].Bit);
444 +                        if(!strcmp(args[i].value_str32, Actions1[j].Name)) {
445 +                                Input1 = Input1 | Actions1[j].Bit;
446 +                                //DDrConsole_PrintF("Success!");
447 +                        }
448 +                        
449 +                }
450 +                for(j = 0; j < 9; j++) {
451 +                        if(!strcmp(args[i].value_str32, Actions2[j].Name)) Input2 = Input2 | Actions2[j].Bit;
452 +        
453 +                }
454 +                }
455 +        //DDrConsole_PrintF("Testing: 0x%x Input: 0x%x",Input1, *(int*)(ONgGameState + 0xB8 + 0x10));
456 +        ret->value_int32 = 0;
457 +        ret->type = sl_int32;
458 +        if ( ((*(int*)(ONgGameState + 0xB8 + 0x10) & Input1) == Input1)  && ((*(int*)(ONgGameState + 0xB8 + 0x14) & Input2) == Input2)) ret->value_int32 = 1;
459 +        return 0;
460 + }
461 +
462 + uint16_t ONICALL bsl_waitforkey(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret)
463 +        {
464 + //              int index;
465 + //              if (numargs < 4) index = 0;
466 + //              else    if (args[0].type == sl_str32) index = DDrGetCharacterIndexFromName(args[0].value_str32);
467 + //              else index = args[0].value_int32;
468 +
469 + //              Character* Chr = ONgGameState + 0x1260;
470 + //      ActiveCharacter* Active = (ActiveCharacter*)ONrGetActiveCharacter(&Chr[index]);
471 + //      if ((int)Active == 0) return 1;
472 +        int i = 2;
473 +        int j = 0;
474 +        int Input1 = 0;
475 +        int Input2 = 0;
476 +        for(i = 0; i < numargs; i++) {
477 +                for(j = 0; j < 32; j++) {
478 +                        //DDrConsole_PrintF("Testing %s against %s 0x%x", args[i].value_str32, Actions1[j].Name, Actions1[j].Bit);
479 +                        if(!strcmp(args[i].value_str32, Actions1[j].Name)) {
480 +                                Input1 = Input1 | Actions1[j].Bit;
481 +                                //DDrConsole_PrintF("Success!");
482 +                        }
483 +                        
484 +                }
485 +                for(j = 0; j < 9; j++) {
486 +                        if(!strcmp(args[i].value_str32, Actions2[j].Name)) Input2 = Input2 | Actions2[j].Bit;
487 +        
488 +                }
489 +                }
490 +        //DDrConsole_PrintF("Waiting...");
491 +        if ( ((*(int*)(ONgGameState + 0xB8 + 0x10) & Input1) == Input1)  && ((*(int*)(ONgGameState + 0xB8 + 0x14) & Input2) == Input2)) {
492 +        }
493 +        else {
494 +        //else (int)*ret = 1;
495 +        *dontuse2 = 1;
496 +        *dontuse1 = 1;
497 +        }
498 + /*
499 +        __asm__(
500 +                "movl 0x10(%esp), %edx\n\t"
501 +                "movl    $1,(%eax)\n\t"
502 +                );
503 +        //ret->type = sl_void
504 + */      return 0;
505 + }
506 +
507   /*
508   uint16_t ONICALL bsl_sprintf(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
509   {
# Line 327 | Line 523 | uint16_t ONICALL bsl_sprintf(sl_callinfo
523   */
524   uint16_t ONICALL bsl_sprintf(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], void* dontuse1, void* dontuse2, sl_arg* ret)
525   {
330        DDrConsole_PrintF("%d", numargs);
331        
526          if (numargs < 1 || args[0].type != sl_str32)
527          {
528                  DDrConsole_PrintF("Func \"%s\", File \"%s\", Line %d: semantic error, \"%s\": parameter list does not match: format:string arg1 arg2 ...", callinfo->name, callinfo->calllocation, callinfo->linenumber, callinfo->name);
# Line 480 | Line 674 | void SLrConfig()
674  
675   void SLrDaodan_Initalize()
676   {
677 +
678 +        //const char regen_patch[] = {0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90};
679 +        //DDrPatch_Const(OniExe + 0x0011BB6D, regen_patch);
680 +        
681 +        //This one should work but doesn't.
682 +        //const char regen_patch[] ={0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x8B, 0x86, 0x44};
683 +        //DDrPatch_Const(OniExe + 0x0011BB64, regen_patch);
684 +
685          SLrConfig();
686          
687 +
688          SLrScript_Command_Register_ReturnType("int32mul", "Multiplies two numbers", "n1:int n2:int", sl_int32, bsl_int32mul);
689          SLrScript_Command_Register_ReturnType("mul", "Multiplies two numbers", "[int1:int|float1:float] [int2:int|float2:float]", sl_float, bsl_mul);
690          
# Line 496 | Line 699 | void SLrDaodan_Initalize()
699          SLrScript_Command_Register_ReturnType("d_name","Gets or sets a character's name", "[ai_name:str | script_id:int] [newname:string]", sl_str32, bsl_chrname);
700          SLrScript_Command_Register_ReturnType("d_getindex","Converts a character's name to its index", "script_id:int", sl_int32, bsl_nametoindex);
701          SLrScript_Command_Register_ReturnType("d_health","Gets or sets a character's health", "[ai_name:str | script_id:int] [newhealth:int]", sl_str32, bsl_health);
702 +        SLrScript_Command_Register_ReturnType("d_regen","Gets or sets a character's health", "[ai_name:str | script_id:int] [newhealth:int]", sl_str32, bsl_regen);
703          SLrScript_Command_Register_ReturnType("d_maxhealth","Gets or sets a character's maximum health", "[ai_name:str | script_id:int] [newmaxhealth:int] [scalehealth:bool]", sl_str32, bsl_maxhealth);
704          SLrScript_Command_Register_ReturnType("d_powerup","Gets or sets a character's powerups", "ai_name:str|script_id:int powerup:str", sl_int32, bsl_powerup);
705 +        SLrScript_Command_Register_ReturnType("d_holdkey","Makes an AI hold a key", "[ai_name:string | script_id:int] keys", sl_int32, bsl_holdkey);
706 +        SLrScript_Command_Register_ReturnType("d_isheld","Checks for a held key", "keys", sl_int32, bsl_isheld);
707 +        SLrScript_Command_Register_Void("d_waitforkey","Waits for a keypress.", "keys", bsl_waitforkey);
708 +
709          //broken. sometimes crashes, and sometimes returns a string... : /
710          SLrScript_Command_Register_ReturnType("d_getattacker","Gets the last person to hurt a character", "[ai_name:string | script_id:int]", sl_int32, bsl_getattacker);
711          
712          SLrScript_Command_Register_ReturnType("d_active","Gets the last person to hurt a character", "[ai_name:string | script_id:int]", sl_int32, bsl_getactiveoffset);
713  
714          SLrScript_Command_Register_ReturnType("sprintf", "C-style sprintf.", "format:string arg1 arg2 ...", sl_str32, bsl_sprintf);
507        SLrScript_Command_Register_ReturnType("dprintcolor", "prints to console in color", "text:string [color: r b g] [color: r b g]", sl_void, bsl_dprintcolored);
715          
716          SLrScript_Command_Register_ReturnType("d_dprint", "prints to console in color", "text:string [color: r b g] [color: r b g]", sl_void, bsl_dprintcolored);
717 +        
718 +        //SLrScript_Command_Register_ReturnType("d_offset", "a test", "thing:int", sl_int32, bsl_returnoffset);
719   }
720  
721   void SLrDaodan_Patch()

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)