| 662 |
|
formatnum++; |
| 663 |
|
|
| 664 |
|
} |
| 665 |
– |
//strcpy( output, args[0].value_str32 ); |
| 665 |
|
|
| 666 |
|
for(i = 1; i < numargs; i++) { |
| 667 |
|
//sprintf(output, output, args[i].value_str32); |
| 674 |
|
sprintf(output, buffer, args[i].val.value_int32); |
| 675 |
|
break; |
| 676 |
|
case sl_float: |
| 677 |
< |
//crashes oni, why? |
| 679 |
< |
// sprintf(output, output, args[i].val.value_float); |
| 677 |
> |
sprintf(output, buffer, args[i].val.value_float); |
| 678 |
|
break; |
| 679 |
|
case sl_str32: |
| 680 |
|
sprintf(output, buffer, args[i].val.value_str32); |
| 684 |
|
break; |
| 685 |
|
} |
| 686 |
|
} |
| 689 |
– |
//output[32] = 0; |
| 687 |
|
ret->val.value_str32 = output; |
| 688 |
|
ret->type = sl_str32; |
| 689 |
|
return 0; |
| 690 |
|
} |
| 691 |
|
|
| 695 |
– |
//Sorry rossy, I broke this. FFI isnt in windows |
| 696 |
– |
/* |
| 697 |
– |
uint16_t ONICALL bsl_sprintf(sl_callinfo* callinfo, uint32_t numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret) |
| 698 |
– |
{ |
| 699 |
– |
|
| 700 |
– |
|
| 701 |
– |
int ffi_ret; |
| 702 |
– |
char* str = NULL; |
| 703 |
– |
int size = 0; |
| 704 |
– |
|
| 705 |
– |
ffi_cif cif; |
| 706 |
– |
ffi_type* ffi_args[256]; |
| 707 |
– |
void* values[256]; |
| 708 |
– |
int i; |
| 709 |
– |
numargs = 0; |
| 710 |
– |
for(i = 0; args[i].type <= sl_void; i++) |
| 711 |
– |
{ |
| 712 |
– |
//DDrConsole_PrintF("%i", args[i].type ); |
| 713 |
– |
numargs++; |
| 714 |
– |
|
| 715 |
– |
} |
| 716 |
– |
|
| 717 |
– |
if (numargs < 1 || args[0].type != sl_str32) |
| 718 |
– |
{ |
| 719 |
– |
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); |
| 720 |
– |
return 0; |
| 721 |
– |
} |
| 722 |
– |
|
| 723 |
– |
if (!args[0].value_str32) |
| 724 |
– |
args[0].value_str32 = ""; |
| 725 |
– |
|
| 726 |
– |
|
| 727 |
– |
|
| 728 |
– |
ffi_args[0] = &ffi_type_pointer; |
| 729 |
– |
values[0] = &str; |
| 730 |
– |
ffi_args[1] = &ffi_type_uint32; |
| 731 |
– |
values[1] = &size; |
| 732 |
– |
|
| 733 |
– |
|
| 734 |
– |
for(i = 2; i < numargs + 2; i ++) |
| 735 |
– |
{ |
| 736 |
– |
if (args[i - 2].type == sl_float) |
| 737 |
– |
{ |
| 738 |
– |
float value_float = args[i - 2].value_float; |
| 739 |
– |
double* value_double = (double*)&(args[i - 2]); |
| 740 |
– |
*value_double = value_float; |
| 741 |
– |
|
| 742 |
– |
ffi_args[i] = &ffi_type_double; |
| 743 |
– |
values[i] = value_double; |
| 744 |
– |
} |
| 745 |
– |
else |
| 746 |
– |
{ |
| 747 |
– |
ffi_args[i] = &ffi_type_pointer; |
| 748 |
– |
values[i] = &(args[i - 2].value); |
| 749 |
– |
} |
| 750 |
– |
} |
| 751 |
– |
|
| 752 |
– |
if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, i, &ffi_type_sint32, ffi_args) != FFI_OK) |
| 753 |
– |
return 1; |
| 754 |
– |
ffi_call(&cif, (void*)_snprintf, (void*)&ffi_ret, values); |
| 755 |
– |
str = malloc(ffi_ret + 1); |
| 756 |
– |
size = ffi_ret + 1; |
| 757 |
– |
ffi_call(&cif, (void*)_snprintf, (void*)&ffi_ret, values); |
| 758 |
– |
ret->value_str32 = str; |
| 759 |
– |
ret->type = sl_str32; |
| 760 |
– |
return 0; |
| 761 |
– |
} |
| 762 |
– |
*/ |
| 692 |
|
// Widescreen patch for talking heads. |
| 693 |
|
uint16_t ONICALL cinematic_start_patch(sl_callinfo* callinfo, unsigned int numargs, sl_arg args[], int* dontuse1, int* dontuse2, sl_arg* ret) |
| 694 |
|
{ |
| 696 |
|
return ((sl_func)(OniExe + 0x000f3830))(callinfo, numargs, args, dontuse1, dontuse2, ret); |
| 697 |
|
} |
| 698 |
|
|
| 699 |
+ |
/* |
| 700 |
|
bool ini_inbsl = false; |
| 701 |
|
bool SLrIniCallback(char* section, bool newsection, char* name, char* value) |
| 702 |
|
{ |
| 703 |
< |
if (newsection && !_stricmp(section, "bsl")) |
| 704 |
< |
ini_inbsl = true; |
| 703 |
> |
if (newsection) |
| 704 |
> |
ini_inbsl = !_stricmp(section, "bsl"); |
| 705 |
|
|
| 706 |
|
if (ini_inbsl) |
| 707 |
|
{ |
| 787 |
|
inifile_read("daodan.ini", SLrIniCallback); |
| 788 |
|
DDrStartupMessage("Daodan: Finished parsing"); |
| 789 |
|
} |
| 790 |
+ |
*/ |
| 791 |
|
|
| 792 |
|
void ONICALL SLrDaodan_Register_ReturnType(char* name, char* desc, char* argfmt, sl_type type, sl_func callback) { |
| 793 |
|
char argfmt2[512]; |
| 822 |
|
|
| 823 |
|
void SLrDaodan_Initialize() |
| 824 |
|
{ |
| 825 |
< |
SLrConfig(); |
| 825 |
> |
// SLrConfig(); |
| 826 |
|
|
| 827 |
|
SLrScript_Command_Register_Void("debug_daodan","Adds text to screen", "", new_text); |
| 828 |
|
|
| 858 |
|
SLrScript_Command_Register_ReturnType("d_dprint", "Prints to console in color", "", sl_void, bsl_dprintcolored); |
| 859 |
|
} |
| 860 |
|
|
| 861 |
+ |
// Patch for cinematic_start to work on widescreen resolutions |
| 862 |
|
void SLrDaodan_Patch() |
| 863 |
|
{ |
| 864 |
|
DDrPatch_Int32((int*)(OniExe + 0x000f3755), (int)cinematic_start_patch); |