| 1 |
|
#include <stdio.h> |
| 2 |
+ |
#include <stdbool.h> |
| 3 |
|
#include <time.h> |
| 4 |
|
#include <ffi.h> |
| 5 |
|
|
| 6 |
+ |
#include "inifile.h" |
| 7 |
+ |
|
| 8 |
|
#include "Daodan_BSL.h" |
| 9 |
|
#include "Daodan_Utility.h" |
| 10 |
|
#include "Daodan_Patch.h" |
| 151 |
|
returnval = &(Chr[index].Inventory_.hasLSI); |
| 152 |
|
is_lsi = 1; |
| 153 |
|
} |
| 154 |
< |
else if(!strcmp(args[1].value_str32,"bossshield")) |
| 155 |
< |
{ |
| 156 |
< |
ret->value_int32 = Chr[index].Flags & char_bossshield; |
| 157 |
< |
ret->type = sl_int32; |
| 158 |
< |
if (numargs >=3) { |
| 159 |
< |
if (Chr[index].Flags & char_bossshield) Chr[index].Flags = Chr[index].Flags & ~char_bossshield; |
| 160 |
< |
else Chr[index].Flags = Chr[index].Flags | char_bossshield; |
| 161 |
< |
} |
| 162 |
< |
return 0; |
| 163 |
< |
} |
| 154 |
> |
// else if(!strcmp(args[1].value_str32,"bossshield")) |
| 155 |
> |
// { |
| 156 |
> |
// ret->value_int32 = Chr[index].Flags & char_bossshield; |
| 157 |
> |
// ret->type = sl_int32; |
| 158 |
> |
// if (numargs >=3) { |
| 159 |
> |
// if (Chr[index].Flags & char_bossshield) Chr[index].Flags = Chr[index].Flags & ~char_bossshield; |
| 160 |
> |
// else Chr[index].Flags = Chr[index].Flags | char_bossshield; |
| 161 |
> |
// } |
| 162 |
> |
// return 0; |
| 163 |
> |
// } |
| 164 |
|
else return 1; |
| 165 |
|
//todo, add setting |
| 166 |
|
|
| 230 |
|
Character* Chr = ONgGameState + 0x1260; |
| 231 |
|
ActiveCharacter* Active = (ActiveCharacter*)ONrGetActiveCharacter(&Chr[index]); |
| 232 |
|
if ((int)Active == 0) return 1; |
| 233 |
< |
ret->value_int32 = Active->LastDamageSourceCharacter; |
| 233 |
> |
// ret->value_int32 = Active->LastDamageSourceCharacter; |
| 234 |
|
ret->type = sl_int32; |
| 235 |
|
return 0; |
| 236 |
|
} |
| 388 |
|
return ((sl_func)(OniExe + 0x000f3830))(callinfo, numargs, args, dontuse1, dontuse2, ret); |
| 389 |
|
} |
| 390 |
|
|
| 391 |
+ |
bool ini_inbsl = false; |
| 392 |
+ |
bool SLrIniCallback(char* section, bool newsection, char* name, char* value) |
| 393 |
+ |
{ |
| 394 |
+ |
if (newsection && !stricmp(section, "bsl")) |
| 395 |
+ |
ini_inbsl = true; |
| 396 |
+ |
|
| 397 |
+ |
if (ini_inbsl) |
| 398 |
+ |
{ |
| 399 |
+ |
bool isptr = false; |
| 400 |
+ |
sl_type bsl_type; |
| 401 |
+ |
|
| 402 |
+ |
if (value[0] == 'p' && value[1] == 't' && value[2] == 'r' && value[3] == ':') |
| 403 |
+ |
{ |
| 404 |
+ |
isptr = true; |
| 405 |
+ |
value += 4; |
| 406 |
+ |
} |
| 407 |
+ |
|
| 408 |
+ |
char* type = value; |
| 409 |
+ |
|
| 410 |
+ |
for (; *type; type++) |
| 411 |
+ |
if (*type == ':') |
| 412 |
+ |
{ |
| 413 |
+ |
*type = '\0'; |
| 414 |
+ |
type++; |
| 415 |
+ |
break; |
| 416 |
+ |
} |
| 417 |
+ |
|
| 418 |
+ |
if (!*type) |
| 419 |
+ |
DDrStartupMessage("badly formed bsl definition for \"%s\"", name); |
| 420 |
+ |
|
| 421 |
+ |
if (!strcmp(type, "int")) |
| 422 |
+ |
bsl_type = sl_int32; |
| 423 |
+ |
else if (!strcmp(type, "string")) |
| 424 |
+ |
bsl_type = sl_str32; |
| 425 |
+ |
else if (!strcmp(type, "float")) |
| 426 |
+ |
bsl_type = sl_float; |
| 427 |
+ |
else if (!strcmp(type, "bool")) |
| 428 |
+ |
bsl_type = sl_bool; |
| 429 |
+ |
else |
| 430 |
+ |
{ |
| 431 |
+ |
DDrStartupMessage("unknown type in bsl definition for \"%s\"", name); |
| 432 |
+ |
return true; |
| 433 |
+ |
} |
| 434 |
+ |
|
| 435 |
+ |
if (isptr) |
| 436 |
+ |
{ |
| 437 |
+ |
char* bsl_var = malloc(strlen(name) + 1); |
| 438 |
+ |
memcpy(bsl_var, name, strlen(name) + 1); |
| 439 |
+ |
switch (bsl_type) |
| 440 |
+ |
{ |
| 441 |
+ |
case sl_int32: |
| 442 |
+ |
SLrGlobalVariable_Register_Int32(bsl_var, "see daodan.ini", (int32_t*)(uint32_t)inifile_parseint(value, false)); |
| 443 |
+ |
break; |
| 444 |
+ |
case sl_float: |
| 445 |
+ |
SLrGlobalVariable_Register_Float(bsl_var, "see daodan.ini", (float*)(uint32_t)inifile_parseint(value, false)); |
| 446 |
+ |
break; |
| 447 |
+ |
default: |
| 448 |
+ |
break; |
| 449 |
+ |
} |
| 450 |
+ |
} |
| 451 |
+ |
else |
| 452 |
+ |
{ |
| 453 |
+ |
char* bsl_var = malloc(strlen(name) + 1 + sizeof(int32_t)); |
| 454 |
+ |
int32_t* bsl_val = (int32_t*)bsl_var; |
| 455 |
+ |
bsl_var += sizeof(int32_t); |
| 456 |
+ |
memcpy(bsl_var, name, strlen(name) + 1); |
| 457 |
+ |
|
| 458 |
+ |
switch (bsl_type) |
| 459 |
+ |
{ |
| 460 |
+ |
case sl_int32: |
| 461 |
+ |
*bsl_val = inifile_parseint(value, false); |
| 462 |
+ |
SLrGlobalVariable_Register_Int32(bsl_var, "see daodan.ini", bsl_val); |
| 463 |
+ |
break; |
| 464 |
+ |
case sl_float: |
| 465 |
+ |
break; |
| 466 |
+ |
default: |
| 467 |
+ |
break; |
| 468 |
+ |
} |
| 469 |
+ |
} |
| 470 |
+ |
} |
| 471 |
+ |
return true; |
| 472 |
+ |
} |
| 473 |
+ |
|
| 474 |
+ |
void SLrConfig() |
| 475 |
+ |
{ |
| 476 |
+ |
DDrStartupMessage("re-parsing daodan.ini for bsl..."); |
| 477 |
+ |
inifile_read("daodan.ini", SLrIniCallback); |
| 478 |
+ |
DDrStartupMessage("finished parsing"); |
| 479 |
+ |
} |
| 480 |
+ |
|
| 481 |
|
void SLrDaodan_Initalize() |
| 482 |
|
{ |
| 483 |
+ |
SLrConfig(); |
| 484 |
+ |
|
| 485 |
|
SLrScript_Command_Register_ReturnType("int32mul", "Multiplies two numbers", "n1:int n2:int", sl_int32, bsl_int32mul); |
| 486 |
|
SLrScript_Command_Register_ReturnType("mul", "Multiplies two numbers", "[int1:int|float1:float] [int2:int|float2:float]", sl_float, bsl_mul); |
| 487 |
|
|
| 505 |
|
|
| 506 |
|
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); |
| 508 |
< |
|
| 414 |
< |
|
| 415 |
< |
|
| 508 |
> |
|
| 509 |
|
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); |
| 510 |
|
} |
| 511 |
+ |
|
| 512 |
|
void SLrDaodan_Patch() |
| 513 |
|
{ |
| 514 |
|
DDrPatch_Int32(OniExe + 0x000f3755, (int)cinematic_start_patch); |
| 515 |
|
} |
| 422 |
– |
|