Files
banjo-kazooie/src/core1/code_9D30.c
2024-06-29 14:38:03 -05:00

441 lines
9.6 KiB
C

#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern u16 D_803A5D00[2][0xF660]; //framebuffer
extern s32 framebuffer_width; //framebuffer width
extern s32 framebuffer_height; //framebuffer height
/* .data */
u8 D_80275A50[8][3] = {
{0xFF, 0x00, 0x00},
{0x00, 0xFF, 0x00},
{0x00, 0x00, 0xFF},
{0xFF, 0xFF, 0x00},
{0xFF, 0x00, 0xFF},
{0xFF, 0xFF, 0xFF},
{0xFF, 0x80, 0x00},
{0x00, 0xFF, 0xFF}
};
s32 D_80275A68 = 0xFF;
s32 D_80275A6C = 0xFF;
s32 D_80275A70 = 0xFF;
u8 D_80275A74[] = {1, 7, 3, 4, 0, 6, 5, 0};
u32 D_80275A7C[] = {
3, 0x0F6DE000,
1, 0x0F800000,
3, 0x0C4AE000,
3, 0x0E59E000,
4, 0x088AF200,
3, 0x0F39E000,
3, 0x0F3DE000,
3, 0x0E4A4000,
3, 0x0F7DE000,
3, 0x0F79E000,
3, 0x0F6FA000,
3, 0x0D75C000,
3, 0x0F24E000,
3, 0x0D6DC000,
3, 0x0F34E000,
3, 0x0F348000,
3, 0x0F25E000,
3, 0x0B7DA000,
3, 0x0E92E000,
3, 0x0E928000,
3, 0x0B75A000,
3, 0x0924E000,
5, 0x08EEB188,
4, 0x09DFB900,
4, 0x06999600,
3, 0x0F7C8000,
4, 0x069DB700,
3, 0x0F7EA000,
3, 0x0F39E000,
3, 0x0E924000,
4, 0x09999600,
5, 0x08C62A20,
5, 0x08C63550,
3, 0x0B55A000,
3, 0x0B79E000,
4, 0x0F124F00,
1, 0x00800000,
1, 0x05000000,
3, 0x00380000,
2, 0x00000000
};
s16 D_80275BBC = 0;
s16 D_80275BC0 = 0;
s16 D_80275BC4 = 0;
s16 D_80275BC8 = 0;
s16 D_80275BCC = 0;
s16 D_80275BD0 = 0;
s16 D_80275BD4 = 0;
s16 D_80275BD8 = 0;
s16 D_80275BDC = 0;
u8 D_80275BE0 = 0;
s32 D_80275BE4 = 0;
char D_80275BE8[] = {'a','z','A','Z','0','9','.',':', '-', ' '};
/* .h */
void func_802484D0(void);
void func_8024856C(void);
void func_80248520(void);
/* code */
void func_80247750(s32 r, s32 g, s32 b){
D_80275A68 = r;
D_80275A6C = g;
D_80275A70 = b;
}
void func_8024776C(s32 x, s32 y) {
s32 rgba16;
if( ((x >= 0) && (x < framebuffer_width))
&& ((y >= 0) && (y < framebuffer_height))
) {
D_803A5D00[0][x + y*framebuffer_width] = _SHIFTL(D_80275A68 >> 3, 11, 5) | _SHIFTL(D_80275A6C >> 3, 6, 5) | _SHIFTL(D_80275A70 >> 3, 1, 5) | _SHIFTL(1, 0, 1);
D_803A5D00[1][x + y*framebuffer_width] = _SHIFTL(D_80275A68 >> 3, 11, 5) | _SHIFTL(D_80275A6C >> 3, 6, 5) | _SHIFTL(D_80275A70 >> 3, 1, 5) | _SHIFTL(1, 0, 1);
}
}
void func_80247818(s32 x, s32 y, s32 w, s32 h) {
s32 iy;
s32 var_s1;
s32 ix;
for(ix = 0; ix < w; ix++){
for(iy = 0; iy < h; iy++){
func_8024776C(x + ix, y + iy);
}
}
osWriteBackDCacheAll();
}
void func_802478C0(s32 r, s32 g, s32 b) {
func_80247750(r, g, b);
func_80247818((framebuffer_width - 128) / 2, (framebuffer_height - 100) / 2, 128, 100);
}
void func_8024792C(void){}
void func_80247934(void) {
s32 var_s0;
for(var_s0 = 0; var_s0 < 2000000; var_s0++){
func_8024792C();
}
}
void func_80247978(s32 arg0) {
do{
func_802478C0(D_80275A50[arg0][0], D_80275A50[arg0][1], D_80275A50[arg0][2]);
func_80247934();
func_802478C0(0, 0, 0);
func_80247934();
}
while(1);
}
void func_802479E4(s32 arg0) {
func_802478C0(D_80275A50[arg0][0], D_80275A50[arg0][1], D_80275A50[arg0][2]);
func_80247934();
func_802478C0(0, 0, 0);
func_80247934();
}
void func_80247A40(s32 arg0) {
func_802478C0(D_80275A50[arg0][0], D_80275A50[arg0][1], D_80275A50[arg0][2]);
}
void func_80247A7C(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 r, s32 g, s32 b) {
s32 var_s3;
s32 sp48;
u32 sp44;
u32 sp40;
s32 temp_lo;
s32 temp_s1;
s32 temp_t8;
s32 var_s0;
u32 temp_t4;
u32 var_s4;
u32 *ptr = D_80275A7C + (arg1*2);
var_s4 = 0x10000000;
sp44 = ptr[0];
sp40 = ptr[1];
for(sp48 = 0; sp48 < 5; sp48++){
temp_lo = sp48 * arg2;
for(var_s3 = 0; var_s3 != sp44; var_s3++){
var_s4 >>= 1;
if (sp40 & var_s4) {
func_80247750(r, g, b);
func_80247818((D_80275BC4 + arg2*var_s3) - arg3, (D_80275BC8 + temp_lo) - arg3, (arg2 + arg3) + arg3, (arg2 + arg3) + arg3);
} else {
if (arg4 != 0) {
func_80247750(0, 0, 0);
}
func_80247818((D_80275BC4 + arg2*var_s3) - arg3, (D_80275BC8 + temp_lo) - arg3, (arg2 + arg3) + arg3, (arg2 + arg3) + arg3);
}
}
}
if (arg3 == 0) {
D_80275BC4 += (sp44 * arg2) + 2;
}
}
void func_80247C20(void) {
s16 *var_v0;
s16 *var_v1;
s32 temp_lo;
void *temp_a0;
s32 i;
if (D_80275BE4 == 0) {
D_80275BE4 = func_8023DB5C();
return;
}
if (func_8023DB5C() != D_80275BE4) {
D_80275BE0 = FALSE;
D_80275BE4 = func_8023DB5C();
}
if (D_80275BE0) {
for(i = 0; i < framebuffer_width * framebuffer_height; i++){
D_803A5D00[0][i] = 0;
D_803A5D00[1][i] = 0;
}
osWriteBackDCacheAll();
}
}
void func_80247CEC(s32 arg0, s32 arg1, s32 arg2) {
func_80247A7C(arg0, arg1, arg2, 1, 1, 0, 0, 0);
func_80247A7C(arg0, arg1, arg2, 0, 1, D_80275A50[D_80275A74[arg0]][0], D_80275A50[D_80275A74[arg0]][1], D_80275A50[D_80275A74[arg0]][2]);
}
void func_80247D80(s32 arg0, s32 arg1, s32 arg2) {
s16 temp_v0;
s32 var_a1;
s32 var_s0;
s32 var_s1;
D_80275BC4 = D_80275BBC;
D_80275BD4 = arg2;
if (arg1 < 0) {
func_80247CEC(arg0, 0x26, arg2);
arg1 *= -1;
}
for(var_s0 = 1000000000; var_s0 >= 10 && arg1 < var_s0; var_s0 /= 10){
continue;
}
for(var_s0 = var_s0; var_s0 >= 10; var_s0 /= 10){
for(var_a1 = 0; arg1 >= var_s0; var_a1++){
arg1 -= var_s0;
}
func_80247CEC(arg0, var_a1, arg2);
}
func_80247CEC(arg0, arg1, arg2);
func_8024856C();
if (arg2 == 7) {
D_80275BD8 = D_80275BC4;
D_80275BDC = 0;
}
else if (D_80275BC4 >= D_80275BDC) {
D_80275BDC = D_80275BC4;
}
}
void func_80247F24(s32 arg0, s32 arg1) {
D_80275BD0 = 0;
D_80275BCC = arg0;
D_80275BBC = 0xE;
D_80275BC8 = 0xA;
func_80247D80(arg0, arg1, 7);
func_802484D0();
D_80275BC0 = D_80275BC8;
D_80275BDC = D_80275BBC;
D_80275BE0 = 1;
}
void func_80247F9C(s32 arg0){
func_80247D80(D_80275BCC, arg0, 2);
func_802484D0();
}
void func_80247FD0(u32 arg0) {
s32 var_s0;
D_80275BC4 = D_80275BBC;
D_80275BD4 = 2;
func_80247CEC(D_80275BCC, 0x25, 2);
var_s0 = (arg0 >= 0x01000000U) ? 0x1C
: (arg0 >= 0x10000U) ? 0x14
:0xC;
if (var_s0 >= 0) {
do {
func_80247CEC(D_80275BCC, ((s32) arg0 >> var_s0) & 0xF, 2);
var_s0 -= 4;
} while (var_s0 >= 0);
}
func_80248520();
}
void func_80248098(f32 arg0) {
f32 var_f22;
s32 var_s0;
D_80275BC4 = D_80275BBC;
D_80275BD4 = 2;
if (arg0 < 0.0f) {
func_80247CEC(D_80275BCC, 0x26, 2);
arg0 *= -1.0f;
}
var_f22 = 1e+09;
while((var_f22 >= 10.0f) && (arg0 < var_f22)) {
var_f22 /= 10.0f;
}
while (1e-09 <= var_f22) {
if ((0.09 < var_f22) && (var_f22 < 0.11)) {
func_80247CEC(D_80275BCC, 0x24, 2);
}
var_s0 = 0;
while (var_f22 <= arg0) {
arg0 -= var_f22;
var_s0 += 1;
}
func_80247CEC(D_80275BCC, var_s0, 2);
var_f22 /= 10.0f;
}
func_80248520();
}
//letter to font index???
s32 func_8024824C(s32 arg0) {
//lowercase_letter
if ((arg0 >= (s32) D_80275BE8[0]) && ((s32) D_80275BE8[1] >= arg0)) {
return (arg0 - D_80275BE8[0]) + 0xA;
}
//uppercase_letter
if ((arg0 >= (s32) D_80275BE8[2]) && ((s32) D_80275BE8[3] >= arg0)) {
return (arg0 - D_80275BE8[2]) + 0xA;
}
//number
if ((arg0 >= (s32) D_80275BE8[4]) && ((s32) D_80275BE8[5] >= arg0)) {
return (arg0 - D_80275BE8[4]);
}
//.
if (arg0 == D_80275BE8[6]) {
return 0x24;
}
//:
if (arg0 == D_80275BE8[7]) {
return 0x25;
}
//-
if (arg0 == D_80275BE8[8]) {
return 0x26;
}
//
if (arg0 == D_80275BE8[9]) {
return 0x27;
}
return 0x27;
}
void func_80248330(u8 *arg0){
s32 i;
s32 var_v0;
D_80275BC4 = D_80275BBC;
D_80275BD4 = 2;
for(i = 0; arg0[i] != 0; i++){
var_v0 = arg0[i];
func_80247CEC(D_80275BCC, func_8024824C(var_v0), 2);
}
func_80248520();
}
void func_802483B8(void){
D_80275BD0 = 1;
do{}while(1);
}
void func_802483D8(void){
s32 i;
D_80275BD0 = 1;
for(i = 30000000; i != 0; i--){}
D_80275BD0 = 0;
}
void func_80248404(s32 arg0){
s32 i;
D_80275BD0 = 1;
while(arg0 != 0){
for(i = 30000000; i != 0; i--){}
arg0--;
}
D_80275BD0 = 0;
}
void func_80248444(s32 arg0) {
D_80275BC8 += arg0;
if (D_80275BC8 >= 0xCD) {
D_80275BBC = D_80275BDC + 4;
D_80275BC4 = D_80275BBC;
D_80275BC8 = (D_80275BD8 < D_80275BC4) ? 0xA : D_80275BC0;
D_80275BDC = 0;
}
}
void func_802484D0(void){
func_80248444( D_80275BD4*5 + 2);
}
void func_80248500(void){
func_80248444(2);
}
void func_80248520(void){
func_8024856C();
if(D_80275BC4 >= D_80275BDC){
D_80275BDC = D_80275BC4;
}
func_802484D0();
}
void func_8024856C(void) {
s16 sp1E;
s16 temp_v0;
sp1E = D_80275BC4--;
func_80247CEC(D_80275BCC, 0x27, D_80275BD4);
D_80275BC4 = sp1E;
}
s32 func_802485BC(void){
return D_80275BD0;
}
void func_802485C8(UNK_TYPE(s32) arg0){
}