src/core1: more documentation and renaming

neue Datei:     include/core1/framebufferdraw.h
        neue Datei:     include/core1/sprite.h
        umbenannt:      src/core1/code_ABB0.c -> src/core1/framebufferdraw.c
        umbenannt:      src/core1/code_13680.c -> src/core1/sprite.c
        umbenannt:      src/core1/code_3A70.c -> src/core1/stub_3A70.c
This commit is contained in:
mariob92
2024-10-15 22:14:17 +02:00
parent fe54c1d7ce
commit 05fe65d6e8
22 changed files with 306 additions and 297 deletions

View File

@@ -7,10 +7,6 @@
#define MAIN_THREAD_STACK_SIZE 0x17F0
void setBootMap(enum map_e);
void func_8023DFF0(s32);
#if VERSION == VERSION_PAL
extern s32 D_80000300;
#endif

View File

@@ -1,33 +0,0 @@
#include <ultra64.h>
#include "core1/core1.h"
#include "functions.h"
#include "variables.h"
u32 func_802510A0(BKSprite *this){
return this->unk8;
}
u32 func_802510A8(BKSprite *this){
return this->unkA;
}
u32 func_802510B0(BKSprite *this){
return this->unk6;
}
u32 func_802510B8(BKSprite *this){
return this->unk4;
}
s32 spriteGetFrameCount(BKSprite *this){
return this->frameCnt;
}
BKSpriteFrame *spriteGetFramePtr(BKSprite *this, u32 frame)
{
BKSpriteFrame * new_var;
new_var = this->offsets[frame] + ((s32) ((*this).offsets + this->frameCnt));
return new_var;
}

View File

@@ -1,8 +1,5 @@
#include <ultra64.h>
#include "core1/core1.h"
#include "functions.h"
#include "variables.h"
#define IA8_I(ia) ((ia) >> 4)
#define IA8_A(ia) ((ia) & 0xF)
@@ -15,19 +12,12 @@
#define C5_TO_C8(c5) ((c5) << 3)
#define C8_TO_C5(c5) ((c5) >> 3)
static s32 sPrimColor_r;
static s32 sPrimColor_g;
static s32 sPrimColor_b;
static s32 sBufferIndex;
void func_8024A3C8(s32 x, s32 y);
void draw_prim_rect(s32 x, s32 y, s32 w, s32 h);
void set_prim_color(s32 r, s32 g, s32 b);
void func_8024A85C(s32 buffer_indx);
/* .bss */
s32 D_802806E0;
s32 D_802806E4;
s32 D_802806E8;
s32 D_802806EC;
void draw_sprite_ci4(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enabled)
void framebufferdraw_draw_CI4(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enabled)
{
BKSpriteFrame *sprite_frame;
s32 palette_offset;
@@ -46,11 +36,11 @@ void draw_sprite_ci4(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enable
s32 color1;
s32 color2;
framebuffer = gFramebuffers[D_802806EC];
sprite_frame = spriteGetFramePtr(sprite, (u32) frame);
framebuffer = gFramebuffers[sBufferIndex];
sprite_frame = sprite_getFramePtr(sprite, (u32) frame);
if (!alpha_enabled){
set_prim_color(0, 0, 0x80);
draw_prim_rect(x, y, sprite_frame->w, sprite_frame->h);
framebufferdraw_setPrimColor(0, 0, 0x80);
framebufferdraw_drawRect(x, y, sprite_frame->w, sprite_frame->h);
}
//align palette
@@ -101,7 +91,7 @@ void draw_sprite_ci4(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enable
}
}
void draw_sprite_ci8(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enabled)
void framebufferdraw_draw_CI8(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enabled)
{
static s32 D_80275C00 = 0;
u16 *palette;
@@ -122,11 +112,11 @@ void draw_sprite_ci8(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enable
if (D_80275C00 == 0xA) {
D_80275C00 = 0;
}
framebuffer = gFramebuffers[D_802806EC];
sprite_frame = spriteGetFramePtr(sprite, (u32) frame);
framebuffer = gFramebuffers[sBufferIndex];
sprite_frame = sprite_getFramePtr(sprite, (u32) frame);
if (!alpha_enabled){
set_prim_color(0, 0, 0x80);
draw_prim_rect(x, y, sprite_frame->w, sprite_frame->h);
framebufferdraw_setPrimColor(0, 0, 0x80);
framebufferdraw_drawRect(x, y, sprite_frame->w, sprite_frame->h);
}
palette = (u16 *) (sprite_frame + 1);
@@ -175,7 +165,7 @@ void draw_sprite_ci8(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enable
}
void draw_sprite_rgba16(s32 x, s32 y, BKSprite *sprite, s32 frame, bool alpha_enabled) {
void framebufferdraw_draw_RGBA16(s32 x, s32 y, BKSprite *sprite, s32 frame, bool alpha_enabled) {
BKSpriteFrame *sprite_ptr;
BKSpriteTextureBlock *chunk_ptr;
s16 *tmem;
@@ -188,11 +178,11 @@ void draw_sprite_rgba16(s32 x, s32 y, BKSprite *sprite, s32 frame, bool alpha_en
u16 *pxl_ptr;
u16 rgba;
framebuffer_ptr = &gFramebuffers[D_802806EC][0];
sprite_ptr = spriteGetFramePtr(sprite, frame);
framebuffer_ptr = &gFramebuffers[sBufferIndex][0];
sprite_ptr = sprite_getFramePtr(sprite, frame);
if (!alpha_enabled) {
set_prim_color(0, 0, 0x80);
draw_prim_rect(x, y, sprite_ptr->w, sprite_ptr->h);
framebufferdraw_setPrimColor(0, 0, 0x80);
framebufferdraw_drawRect(x, y, sprite_ptr->w, sprite_ptr->h);
}
chunk_ptr = (BKSpriteTextureBlock *)(sprite_ptr + 1);
for(i_chunk = 0; i_chunk < sprite_ptr->chunkCnt; i_chunk++) {
@@ -220,7 +210,7 @@ void draw_sprite_rgba16(s32 x, s32 y, BKSprite *sprite, s32 frame, bool alpha_en
}
}
void draw_sprite_i4(s32 x, s32 y, BKSprite *sprite, s32 frame, bool aplha_enabled) {
void framebufferdraw_draw_I4(s32 x, s32 y, BKSprite *sprite, s32 frame, bool aplha_enabled) {
BKSpriteFrame *frame_ptr;
BKSpriteTextureBlock *chunk_ptr;
s16 *temp_v0;
@@ -235,11 +225,11 @@ void draw_sprite_i4(s32 x, s32 y, BKSprite *sprite, s32 frame, bool aplha_enable
s32 txtr_x;
u16 *fb_pxl_ptr;
framebuffer_ptr = &gFramebuffers[D_802806EC][0];
frame_ptr = spriteGetFramePtr(sprite, frame);
framebuffer_ptr = &gFramebuffers[sBufferIndex][0];
frame_ptr = sprite_getFramePtr(sprite, frame);
if (!aplha_enabled) {
set_prim_color(0, 0, 0x80);
draw_prim_rect(x, y, frame_ptr->w, frame_ptr->h);
framebufferdraw_setPrimColor(0, 0, 0x80);
framebufferdraw_drawRect(x, y, frame_ptr->w, frame_ptr->h);
}
chunk_ptr = (BKSpriteTextureBlock *)(frame_ptr + 1);
for(i_chunk = 0; i_chunk < frame_ptr->chunkCnt; i_chunk++) {
@@ -273,7 +263,7 @@ void draw_sprite_i4(s32 x, s32 y, BKSprite *sprite, s32 frame, bool aplha_enable
}
}
void draw_sprite_ia4(s32 x, s32 y, BKSprite *sprite, s32 frame, bool aplha_enabled) {
void framebufferdraw_draw_IA4(s32 x, s32 y, BKSprite *sprite, s32 frame, bool aplha_enabled) {
BKSpriteFrame *frame_ptr;
BKSpriteTextureBlock *chunk_ptr;
s16 *temp_v0;
@@ -292,11 +282,11 @@ void draw_sprite_ia4(s32 x, s32 y, BKSprite *sprite, s32 frame, bool aplha_enabl
s32 txtr_x;
u16 *fb_pxl_ptr;
framebuffer_ptr = &gFramebuffers[D_802806EC][0];
frame_ptr = spriteGetFramePtr(sprite, frame);
framebuffer_ptr = &gFramebuffers[sBufferIndex][0];
frame_ptr = sprite_getFramePtr(sprite, frame);
if (!aplha_enabled) {
set_prim_color(0, 0, 0x80);
draw_prim_rect(x, y, frame_ptr->w, frame_ptr->h);
framebufferdraw_setPrimColor(0, 0, 0x80);
framebufferdraw_drawRect(x, y, frame_ptr->w, frame_ptr->h);
}
chunk_ptr = (BKSpriteTextureBlock *)(frame_ptr + 1);
for(i_chunk = 0; i_chunk < frame_ptr->chunkCnt; i_chunk++) {
@@ -334,7 +324,7 @@ void draw_sprite_ia4(s32 x, s32 y, BKSprite *sprite, s32 frame, bool aplha_enabl
}
}
void draw_sprite_i8(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enabled) {
void framebufferdraw_draw_I8(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enabled) {
BKSpriteFrame *frame_ptr;
BKSpriteTextureBlock *chunk_ptr;
s16 *pixel_ptr;
@@ -347,11 +337,11 @@ void draw_sprite_i8(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enabled
s32 i_chunk;
s32 txtr_y;
framebuffer_ptr = &gFramebuffers[D_802806EC][0];
frame_ptr = spriteGetFramePtr(sprite, frame);
framebuffer_ptr = &gFramebuffers[sBufferIndex][0];
frame_ptr = sprite_getFramePtr(sprite, frame);
if (!alpha_enabled) {
set_prim_color(0, 0, 0x80);
draw_prim_rect(x, y, frame_ptr->w, frame_ptr->h);
framebufferdraw_setPrimColor(0, 0, 0x80);
framebufferdraw_drawRect(x, y, frame_ptr->w, frame_ptr->h);
}
chunk_ptr = (BKSpriteTextureBlock *)(frame_ptr + 1);
for(i_chunk = 0; i_chunk < frame_ptr->chunkCnt; i_chunk++){
@@ -382,7 +372,7 @@ void draw_sprite_i8(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enabled
}
}
void draw_sprite_ia8(s32 x, s32 y, BKSprite *sprite, s32 frame, bool alpha_enabled) {
void framebufferdraw_draw_IA8(s32 x, s32 y, BKSprite *sprite, s32 frame, bool alpha_enabled) {
BKSpriteFrame *sprite_frame;
BKSpriteTextureBlock *chunk_ptr;
s16 *temp_a1;
@@ -396,12 +386,12 @@ void draw_sprite_ia8(s32 x, s32 y, BKSprite *sprite, s32 frame, bool alpha_enabl
s32 var_t3;
u32 temp_a2;
framebuffer_ptr = &gFramebuffers[D_802806EC][0];
sprite_frame = spriteGetFramePtr(sprite, frame);
framebuffer_ptr = &gFramebuffers[sBufferIndex][0];
sprite_frame = sprite_getFramePtr(sprite, frame);
if (!alpha_enabled) {
//draw blue rect over display area
set_prim_color(0, 0, 0x80);
draw_prim_rect(x, y, sprite_frame->w, sprite_frame->h);
framebufferdraw_setPrimColor(0, 0, 0x80);
framebufferdraw_drawRect(x, y, sprite_frame->w, sprite_frame->h);
}
chunk_ptr = (BKSpriteTextureBlock *)(sprite_frame + 1);
for(i_chunk = 0; i_chunk < sprite_frame->chunkCnt; i_chunk++) {
@@ -429,7 +419,7 @@ void draw_sprite_ia8(s32 x, s32 y, BKSprite *sprite, s32 frame, bool alpha_enabl
}
}
void draw_sprite_rgba32(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enabled){
void framebufferdraw_draw_RGBA32(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enabled){
BKSpriteTextureBlock *chunk_ptr;
u32 *tmem;
u32 fb_value;
@@ -451,11 +441,11 @@ void draw_sprite_rgba32(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_ena
s32 blue8;
framebuffer = &gFramebuffers[D_802806EC][0];
sprite_frame = spriteGetFramePtr(sprite, frame);
framebuffer = &gFramebuffers[sBufferIndex][0];
sprite_frame = sprite_getFramePtr(sprite, frame);
if (!alpha_enabled) {
set_prim_color(0, 0, 0x80);
draw_prim_rect(x, y, sprite_frame->w, sprite_frame->h);
framebufferdraw_setPrimColor(0, 0, 0x80);
framebufferdraw_drawRect(x, y, sprite_frame->w, sprite_frame->h);
}
chunk_ptr = (BKSpriteTextureBlock *) (sprite_frame + 1);
for (i_chunk = 0; i_chunk < sprite_frame->chunkCnt; i_chunk++) {
@@ -503,13 +493,10 @@ void draw_sprite_rgba32(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_ena
}
}
void func_802499BC(s32 arg0, s32 arg1, s32 arg2, s32 arg3){//signature may have more variables passed in
}
void framebufferdraw_stub1(s32 arg0, s32 arg1, s32 arg2, s32 arg3) {} //signature may have more variables passed in
void framebufferdraw_stub2(s32 arg0, s32 arg1, s32 arg2, s32 arg3) {} //signature may have more variables passed in
void func_802499D0(s32 arg0, s32 arg1, s32 arg2, s32 arg3){//signature may have more variables passed in
}
void draw_texture_ci4(s32 x, s32 y, void *tmem, s32 w, s32 h, bool alpha_enabled){
void framebufferdraw_drawTexture_CI4(s32 x, s32 y, void *tmem, s32 w, s32 h, bool alpha_enabled) {
s32 ix;
s32 iy;
s32 icolor;
@@ -519,7 +506,7 @@ void draw_texture_ci4(s32 x, s32 y, void *tmem, s32 w, s32 h, bool alpha_enabled
palette_ptr = (u16*)tmem;
pixel_ptr = (u8*)&palette_ptr[0x10];
framebuffer_ptr = &gFramebuffers[D_802806EC][x + y * gFramebufferWidth];
framebuffer_ptr = &gFramebuffers[sBufferIndex][x + y * gFramebufferWidth];
for(iy = 0; iy < h; iy++){
for(ix = 0; ix < w; ix++){
icolor = (ix & 1)? pixel_ptr[ix/2 + (iy*w)/2] & 0xF
@@ -531,31 +518,31 @@ void draw_texture_ci4(s32 x, s32 y, void *tmem, s32 w, s32 h, bool alpha_enabled
}
}
void draw_sprite(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enabled) {
s16 temp_v0;
void framebufferdraw_draw(s32 x, s32 y, BKSprite *sprite, s32 frame, s32 alpha_enabled) {
s16 type;
temp_v0 = sprite->type;
if (temp_v0 & SPRITE_TYPE_I4) {
draw_sprite_i4(x, y, sprite, frame, alpha_enabled);
} else if (temp_v0 & SPRITE_TYPE_IA4) {
draw_sprite_ia4(x, y, sprite, frame, alpha_enabled);
} else if (temp_v0 & SPRITE_TYPE_I8) {
draw_sprite_i8(x, y, sprite, frame, alpha_enabled);
} else if (temp_v0 & SPRITE_TYPE_IA8) {
draw_sprite_ia8(x, y, sprite, frame, alpha_enabled);
} else if (temp_v0 & SPRITE_TYPE_RGBA16) {
draw_sprite_rgba16(x, y, sprite, frame, alpha_enabled);
} else if (temp_v0 & SPRITE_TYPE_RGBA32) {
draw_sprite_rgba32(x, y, sprite, frame, alpha_enabled);
} else if (temp_v0 & SPRITE_TYPE_CI4) {
draw_sprite_ci4(x, y, sprite, frame, alpha_enabled);
} else if (temp_v0 & SPRITE_TYPE_CI8) {
draw_sprite_ci8(x, y, sprite, frame, alpha_enabled);
type = sprite->type;
if (type & SPRITE_TYPE_I4) {
framebufferdraw_draw_I4(x, y, sprite, frame, alpha_enabled);
} else if (type & SPRITE_TYPE_IA4) {
framebufferdraw_draw_IA4(x, y, sprite, frame, alpha_enabled);
} else if (type & SPRITE_TYPE_I8) {
framebufferdraw_draw_I8(x, y, sprite, frame, alpha_enabled);
} else if (type & SPRITE_TYPE_IA8) {
framebufferdraw_draw_IA8(x, y, sprite, frame, alpha_enabled);
} else if (type & SPRITE_TYPE_RGBA16) {
framebufferdraw_draw_RGBA16(x, y, sprite, frame, alpha_enabled);
} else if (type & SPRITE_TYPE_RGBA32) {
framebufferdraw_draw_RGBA32(x, y, sprite, frame, alpha_enabled);
} else if (type & SPRITE_TYPE_CI4) {
framebufferdraw_draw_CI4(x, y, sprite, frame, alpha_enabled);
} else if (type & SPRITE_TYPE_CI8) {
framebufferdraw_draw_CI8(x, y, sprite, frame, alpha_enabled);
}
}
//arg4 = alpha enabled?
void func_80249DE0(s32 x, s32 y, s16 *arg2, s32 arg3, s32 arg4) {
void framebufferdraw_func_80249DE0(s32 x, s32 y, s16 *arg2, s32 arg3, s32 arg4) {
s32 ix;
s32 var_t2;
s32 iy;
@@ -567,11 +554,11 @@ void func_80249DE0(s32 x, s32 y, s16 *arg2, s32 arg3, s32 arg4) {
temp_v0 = func_8033EFB0(arg2, arg3);
texture_ptr = (u16*)(temp_v0 + 1);
if (*arg2 == SPRITE_TYPE_CI4) {
draw_texture_ci4(x, y, temp_v0 + 1, temp_v0->w, temp_v0->h, arg4);
framebufferdraw_drawTexture_CI4(x, y, temp_v0 + 1, temp_v0->w, temp_v0->h, arg4);
return;
}
//otherwise RGBA16
framebuffer_ptr = &gFramebuffers[D_802806EC][x + y*gFramebufferWidth];
framebuffer_ptr = &gFramebuffers[sBufferIndex][x + y*gFramebufferWidth];
for(iy = 0; iy < temp_v0->h; iy++){
for(ix = 0; ix < temp_v0->w; ix++){
temp_v1 = *texture_ptr;
@@ -587,7 +574,7 @@ void func_80249DE0(s32 x, s32 y, s16 *arg2, s32 arg3, s32 arg4) {
}
}
void func_80249F34(s32 x, s32 y, Struct84s* maskList, s32 maskIndex, s32 mX, s32 mY, s32 mW, s32 mH, s32 maskColor, s32 mStride, bool dim, s32 replacementColor) {
void framebufferdraw_func_80249F34(s32 x, s32 y, Struct84s* maskList, s32 maskIndex, s32 mX, s32 mY, s32 mW, s32 mH, s32 maskColor, s32 mStride, bool dim, s32 replacementColor) {
BKSpriteTextureBlock* mask_texture;
s32 ix;
s32 iy;
@@ -596,7 +583,7 @@ void func_80249F34(s32 x, s32 y, Struct84s* maskList, s32 maskIndex, s32 mX, s32
mask_texture = func_8033EFB0(maskList, maskIndex);
mask_ptr = (u16*)(mask_texture + 1) + mX + mY * mask_texture->w;
color_ptr = &gFramebuffers[D_802806EC][x + y * gFramebufferWidth];
color_ptr = &gFramebuffers[sBufferIndex][x + y * gFramebufferWidth];
for(iy = 0; iy < mH; iy += mStride){
for(ix = 0; ix < mW; ix++){
@@ -618,122 +605,104 @@ void func_80249F34(s32 x, s32 y, Struct84s* maskList, s32 maskIndex, s32 mX, s32
}
}
//fill framebuffer with vert and horz lines
void func_8024A284(s32 x, s32 y, s32 arg2, s32 arg3, s32 horz_spacing, s32 vert_spacing) {
s32 var_s2;
s32 var_s3;
void framebufferdraw_drawGrid(s32 x, s32 y, s32 arg2, s32 arg3, s32 horz_spacing, s32 vert_spacing) {
s32 x1;
s32 y1;
for(var_s2 = 0; var_s2 < gFramebufferWidth; var_s2 += horz_spacing){
for(var_s3 = 0; var_s3 < gFramebufferHeight; var_s3++){
func_8024A3C8(x + var_s2, y + var_s3);
for (x1 = 0; x1 < gFramebufferWidth; x1 += horz_spacing) {
for (y1 = 0; y1 < gFramebufferHeight; y1++) {
framebufferdraw_setPixel(x + x1, y + y1);
}
}
for(var_s3 = 0; var_s3 < gFramebufferHeight; var_s3 += vert_spacing) {
for(var_s2 = 0; var_s2 < gFramebufferWidth; var_s2++){
func_8024A3C8(x + var_s2, y + var_s3);
for (y1 = 0; y1 < gFramebufferHeight; y1 += vert_spacing) {
for (x1 = 0; x1 < gFramebufferWidth; x1++) {
framebufferdraw_setPixel(x + x1, y + y1);
}
}
}
//fills in pixel in frame buffer with D_802806E0 color
void func_8024A3C8(s32 x, s32 y) {
s32 temp_v0;
if (x >= 0) {
if ((x < gFramebufferWidth) && (y >= 0) && (y < gFramebufferHeight)) {
gFramebuffers[D_802806EC][x + y * gFramebufferWidth] = _SHIFTL(D_802806E0 >> 3, 11, 5) | _SHIFTL(D_802806E4 >> 3, 6, 5) | _SHIFTL(D_802806E8 >> 3, 1, 5) | _SHIFTL(1, 0, 1);
}
void framebufferdraw_setPixel(s32 x, s32 y) {
if ((x >= 0) && (x < gFramebufferWidth) && (y >= 0) && (y < gFramebufferHeight)) {
gFramebuffers[sBufferIndex][x + y * gFramebufferWidth] = _SHIFTL(sPrimColor_r >> 3, 11, 5) | _SHIFTL(sPrimColor_g >> 3, 6, 5) | _SHIFTL(sPrimColor_b >> 3, 1, 5) | _SHIFTL(1, 0, 1);
}
}
//draw rectangular outline
void func_8024A490(s32 x, s32 y, s32 w, s32 h) {
s32 var_s1;
void framebufferdraw_drawOutline(s32 x, s32 y, s32 w, s32 h) {
s32 x1;
for(var_s1 = 0; var_s1 < w; var_s1++){
func_8024A3C8(x + var_s1, y);
func_8024A3C8(x + var_s1, y + h - 1);
for (x1 = 0; x1 < w; x1++) {
framebufferdraw_setPixel(x + x1, y);
framebufferdraw_setPixel(x + x1, y + h - 1);
}
for(var_s1 = 1; var_s1 < h - 1; var_s1++){
func_8024A3C8(x, y + var_s1);
func_8024A3C8(x + w - 1, y + var_s1);
for (x1 = 1; x1 < h - 1; x1++) {
framebufferdraw_setPixel(x, y + x1);
framebufferdraw_setPixel(x + w - 1, y + x1);
}
}
void func_8024A564(s32 x, s32 y, u16 *arg2, s32 arg3, s32 arg4, f32 arg5, f32 arg6)
{
s32 temp_a2;
s32 temp_a2_2;
s32 temp_a2_3;
s32 temp_f6;
s32 temp_f6_2;
s32 temp_lo;
s32 temp_t5;
s32 var_a0;
s32 var_a2;
s32 new_var;
f32 new_var3;
s32 new_var2;
s32 var_t1;
s32 var_t3;
s32 var_v0;
s32 var_v1;
u16 temp_t8;
s16 *var_t0;
s16 *var_t2;
var_v0 = 0;
var_v1 = gFramebufferWidth;
var_t0 = &gFramebuffers[D_802806EC][x + (y * gFramebufferWidth)];
new_var = (s32) (((f64) (256.0f / (new_var3 = arg6))) + 0.5);
new_var2 = (s32) (((f64) (256.0f / arg5)) + 0.5);
for (var_t1 = (arg4 * arg6) + 0.5; var_t1 != 0; var_t1--)
{
temp_lo = (arg3 * arg5) + 0.5;
var_a2 = ((var_v0 >> 8) * arg3) << 8;
var_t2 = var_t0;
for (var_t3 = temp_lo; var_t3 != 0; var_t3--)
void framebufferdraw_func_8024A564(s32 x, s32 y, u16 *arg2, s32 arg3, s32 arg4, f32 arg5, f32 arg6) {
s32 temp_lo;
s32 var_a2;
s32 new_var;
f32 new_var3;
s32 new_var2;
s32 var_t1;
s32 var_t3;
s32 var_v0;
s32 fb_width;
s16 *pixel;
s16 *var_t2;
var_v0 = 0;
fb_width = gFramebufferWidth;
pixel = &gFramebuffers[sBufferIndex][x + (y * gFramebufferWidth)];
new_var = (s32) (((f64) (256.0f / (new_var3 = arg6))) + 0.5);
new_var2 = (s32) (((f64) (256.0f / arg5)) + 0.5);
for (var_t1 = (arg4 * arg6) + 0.5; var_t1 != 0; var_t1--)
{
*var_t2 = arg2[var_a2 >> 8];
var_a2 += new_var2;
var_t2++;
temp_lo = (arg3 * arg5) + 0.5;
var_a2 = ((var_v0 >> 8) * arg3) << 8;
var_t2 = pixel;
for (var_t3 = temp_lo; var_t3 != 0; var_t3--) {
*var_t2 = arg2[var_a2 >> 8];
var_a2 += new_var2;
var_t2++;
}
pixel += gFramebufferWidth;
var_v0 += new_var;
}
var_t0 += gFramebufferWidth;
var_v0 += new_var;
}
}
//fills in rectangle in frame buffer with D_802806E0 color
void draw_prim_rect(s32 x, s32 y, s32 w, s32 h) {
s32 var_s0;
s32 var_s1;
s32 var_s4;
void framebufferdraw_drawRect(s32 x, s32 y, s32 w, s32 h) {
s32 y1, x1;
var_s4 = 0;
for(var_s4 = 0; var_s4 < w; var_s4++) {
for(var_s0 = 0; var_s0 < h; var_s0++){
func_8024A3C8(x + var_s4, y + var_s0);
for (x1 = 0; x1 < w; x1++) {
for (y1 = 0; y1 < h; y1++) {
framebufferdraw_setPixel(x + x1, y + y1);
}
}
}
void func_8024A810(void){
set_prim_color(0, 0x80, 0);
func_8024A85C(0);
void framebufferdraw_resetPrimColorAndBuffer(void) {
framebufferdraw_setPrimColor(0, 128, 0);
framebufferdraw_setBufferIndex(0);
}
void set_prim_color(s32 r, s32 g, s32 b){
D_802806E0 = r;
D_802806E4 = g;
D_802806E8 = b;
void framebufferdraw_setPrimColor(s32 r, s32 g, s32 b) {
sPrimColor_r = r;
sPrimColor_g = g;
sPrimColor_b = b;
}
void func_8024A85C(s32 buffer_indx){
D_802806EC = buffer_indx;
void framebufferdraw_setBufferIndex(s32 buffer_indx) {
sBufferIndex = buffer_indx;
}
s32 func_8024A868(void){
return D_802806EC;
s32 framebufferdraw_getBufferIndex(void) {
return sBufferIndex;
}

28
src/core1/sprite.c Normal file
View File

@@ -0,0 +1,28 @@
#include <ultra64.h>
#include "core1/core1.h"
u32 sprite_getUnk8(BKSprite *this) {
return this->unk8;
}
u32 sprite_getUnkA(BKSprite *this) {
return this->unkA;
}
u32 sprite_getUnk6(BKSprite *this) {
return this->unk6;
}
u32 sprite_getUnk4(BKSprite *this) {
return this->unk4;
}
s32 sprite_getFrameCount(BKSprite *this) {
return this->frameCnt;
}
BKSpriteFrame *sprite_getFramePtr(BKSprite *this, u32 frame_id) {
BKSpriteFrame *sprite_frame;
sprite_frame = (BKSpriteFrame *) (this->offsets[frame_id] + ((s32) ((*this).offsets + this->frameCnt)));
return sprite_frame;
}

View File

@@ -1,13 +1,9 @@
#include <ultra64.h>
#include "core1/core1.h"
#include "functions.h"
#include "variables.h"
// all functions in this file are unsued
extern f32 ml_cos_deg(f32);
extern f32 ml_sin_deg(f32);
Gfx D_80275880[] = {
static Gfx sGfxSublist[] = {
gsSPClearGeometryMode(G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH | G_CLIPPING | 0x0060CD00),
gsSPTexture(0, 0, 0, G_TX_RENDERTILE, G_OFF),
gsDPPipeSync(),
@@ -18,34 +14,37 @@ Gfx D_80275880[] = {
gsSPEndDisplayList()
};
/* .code */
void func_80241490(Gfx **gfx, Vtx **vtx, s32 arg2[3], s32 arg3[3], s32 arg4[3], s32 arg5[3], s32 arg6, s32 arg7) {
s32 spB4[3];
void func_80241490(Gfx **gfx, Vtx **vtx, s32 arg2[3], s32 arg3[3], s32 arg4[3], s32 arg5[3], bool cull_front, s32 arg7) {
s32 vp_position[3];
s32 var_a0;
s32 var_v0;
s32 var_v1;
s32 sp78[3][4];
s32 colors[3][4];
s32 i;
viewport_getPosition_vec3w(spB4);
gSPDisplayList((*gfx)++, D_80275880);
if (arg6 != 0) {
viewport_getPosition_vec3w(vp_position);
gSPDisplayList((*gfx)++, sGfxSublist);
if (cull_front != FALSE) {
gSPSetGeometryMode((*gfx)++, G_ZBUFFER | G_CULL_BACK);
} else {
gSPSetGeometryMode((*gfx)++, G_ZBUFFER | G_CULL_FRONT);
}
gSPVertex((*gfx)++, *vtx, 8, 0);
for(i = 0; i < 2; i++){
for(var_a0 = 0; var_a0 < 2; var_a0++){
for(var_v1 = 0; var_v1 < 2; var_v1++){
var_v0 = (var_v1 == 0) ? arg2[0] : arg3[0];
(*vtx)->v.ob[0] = (s16) (var_v0 - spB4[0]);
(*vtx)->v.ob[0] = (s16) (var_v0 - vp_position[0]);
var_v0 = (i == 0) ? arg2[1] : arg3[1];
(*vtx)->v.ob[1] = (s16) (var_v0 - spB4[1]);
(*vtx)->v.ob[1] = (s16) (var_v0 - vp_position[1]);
var_v0 = (var_a0 == 0) ? arg2[2] : arg3[2];
(*vtx)->v.ob[2] = (s16) (var_v0 - spB4[2]);
(*vtx)->v.ob[2] = (s16) (var_v0 - vp_position[2]);
(*vtx)->v.flag = 0;
(*vtx)->v.tc[0] = 0;
@@ -62,50 +61,50 @@ void func_80241490(Gfx **gfx, Vtx **vtx, s32 arg2[3], s32 arg3[3], s32 arg4[3],
if (arg7 != 0) {
for(i = 0; i < 3; i++){
for(var_v1 = 0; var_v1 < 3; var_v1++){
sp78[i][var_v1] = (arg4[var_v1] * arg5[i]) / 255;
colors[i][var_v1] = (arg4[var_v1] * arg5[i]) / 255;
}
sp78[i][3] = 0xFF;
colors[i][3] = 0xFF;
}
} else {
for(i = 0; i < 3; i++){
for(var_v1 = 0; var_v1 < 3; var_v1++){
sp78[i][var_v1] = arg4[var_v1];
colors[i][var_v1] = arg4[var_v1];
}
sp78[i][3] = arg5[i];
colors[i][3] = arg5[i];
}
}
gDPPipeSync((*gfx)++);
gDPSetPrimColor((*gfx)++, 0, 0, sp78[0][0], sp78[0][1], sp78[0][2], sp78[0][3]);
gDPSetPrimColor((*gfx)++, 0, 0, colors[0][0], colors[0][1], colors[0][2], colors[0][3]);
gSP2Triangles((*gfx)++, 7, 3, 5, 0, 5, 3, 1, 0);
gSP1Quadrangle((*gfx)++, 6, 4, 0, 2, 0);
gDPPipeSync((*gfx)++);
gDPSetPrimColor((*gfx)++, 0, 0, sp78[1][0], sp78[1][1], sp78[1][2], sp78[1][3]);
gDPSetPrimColor((*gfx)++, 0, 0, colors[1][0], colors[1][1], colors[1][2], colors[1][3]);
gSP1Quadrangle((*gfx)++, 7, 6, 2, 3, 0);
gSP2Triangles((*gfx)++, 4, 5, 0, 0, 5, 1, 0, 0);
gDPPipeSync((*gfx)++);
gDPSetPrimColor((*gfx)++, 0, 0, sp78[2][0], sp78[2][1], sp78[2][2], sp78[2][3]);
gDPSetPrimColor((*gfx)++, 0, 0, colors[2][0], colors[2][1], colors[2][2], colors[2][3]);
gSP1Quadrangle((*gfx)++, 5, 4, 6, 7, 0);
gSP2Triangles((*gfx)++, 0, 1, 2, 0, 1, 3, 2, 0);
}
void func_80241928(Gfx** gfx, Vtx** vtx, s32 arg2[3], s32 arg3, s32 arg4[3]) {
s32 spB4[3];
s32 vp_position[3];
f32 var_f26;
s32 var_fp;
s32 var_s0;
viewport_getPosition_vec3w(spB4);
viewport_getPosition_vec3w(vp_position);
for(var_fp = 0; var_fp < 4; var_fp++){
gSPDisplayList((*gfx)++, D_80275880);
gSPDisplayList((*gfx)++, sGfxSublist);
gSPSetGeometryMode((*gfx)++, G_ZBUFFER);
gSPVertex((*gfx)++, *vtx, 10, 0);
for(var_f26 = 0; var_f26 <= 90; var_f26 += 22.5){
for(var_s0 = -300; var_s0 < 900; var_s0 += 600){
(*vtx)->v.ob[0] = ((ml_sin_deg(var_fp*90 + var_f26) * arg3) + (f32) arg2[0]) - spB4[0];
(*vtx)->v.ob[1] = ((var_s0 / 2) + arg2[1]) - spB4[1];
(*vtx)->v.ob[2] = ((ml_cos_deg(var_fp*90 + var_f26) * arg3) + (f32) arg2[2]) - spB4[2];
(*vtx)->v.ob[0] = ((ml_sin_deg(var_fp*90 + var_f26) * arg3) + (f32) arg2[0]) - vp_position[0];
(*vtx)->v.ob[1] = ((var_s0 / 2) + arg2[1]) - vp_position[1];
(*vtx)->v.ob[2] = ((ml_cos_deg(var_fp*90 + var_f26) * arg3) + (f32) arg2[2]) - vp_position[2];
(*vtx)->v.tc[0] = 0;
(*vtx)->v.tc[1] = 0;
(*vtx)->v.cn[0] = 0;
@@ -164,7 +163,7 @@ void func_802424D4(Gfx **gfx, Mtx **mtx, Vtx **vtx, f32 arg3[3], f32 arg4[3], f3
sp68[2] *= arg5;
viewport_getPosition_vec3f(sp5C);
gSPDisplayList((*gfx)++, D_80275880);
gSPDisplayList((*gfx)++, sGfxSublist);
gSPSetGeometryMode((*gfx)++, G_ZBUFFER);
gSPVertex((*gfx)++, *vtx, 8, 0);
for( var_a0 = 0; var_a0 < 2; var_a0++){
@@ -203,51 +202,58 @@ void func_802424D4(Gfx **gfx, Mtx **mtx, Vtx **vtx, f32 arg3[3], f32 arg4[3], f3
}
}
void func_80242BE8(Gfx **gfx, Vtx **arg1, f32 arg2[2][2][2][3], s32 arg3[3], s32 *arg4, s32 arg5)
void func_80242BE8(Gfx **gfx, Vtx **vtx, f32 arg2[2][2][2][3], s32 color[3], s32 alpha_values[3], s32 cull_back)
{
f32 sp84[3];
f32 vp_position[3];
#define var_v0 ((f32*)((u8*)arg2 + (i << 2) * sizeof(f32[3]) + (j << 1) * sizeof(f32[3]) + k * sizeof(f32[3])))
s32 i;
s32 j;
s32 k;
viewport_getPosition_vec3f(sp84);
gSPDisplayList((*gfx)++, D_80275880);
if (arg5){
viewport_getPosition_vec3f(vp_position);
gSPDisplayList((*gfx)++, sGfxSublist);
if (cull_back){
gSPSetGeometryMode((*gfx)++, G_CULL_BACK);
} else {
gSPSetGeometryMode((*gfx)++, G_CULL_FRONT);
}
gSPVertex((*gfx)++, *arg1, 8, 0);
for(i = 0; i < 2; i++){
for(j = 0; j < 2; j++){
for(k = 0; k < 2; k++){
(*arg1)->v.ob[0] = var_v0[0] - sp84[0];
(*arg1)->v.ob[1] = var_v0[1] - sp84[1];
(*arg1)->v.ob[2] = var_v0[2] - sp84[2];
(*arg1)->v.flag = 0;
(*arg1)->v.tc[0] = 0;
(*arg1)->v.tc[1] = 0;
(*arg1)->v.cn[0] = 0;
(*arg1)->v.cn[1] = 0;
(*arg1)->v.cn[2] = 0;
(*arg1)->v.cn[3] = 0;
(*arg1)++;
gSPVertex((*gfx)++, *vtx, 8, 0);
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
for (k = 0; k < 2; k++) {
(*vtx)->v.ob[0] = var_v0[0] - vp_position[0];
(*vtx)->v.ob[1] = var_v0[1] - vp_position[1];
(*vtx)->v.ob[2] = var_v0[2] - vp_position[2];
(*vtx)->v.flag = 0;
(*vtx)->v.tc[0] = 0;
(*vtx)->v.tc[1] = 0;
(*vtx)->v.cn[0] = 0;
(*vtx)->v.cn[1] = 0;
(*vtx)->v.cn[2] = 0;
(*vtx)->v.cn[3] = 0;
(*vtx)++;
}
}
}
#undef var_v0
gDPPipeSync((*gfx)++);
gDPSetPrimColor((*gfx)++, 0, 0, arg3[0], arg3[1], arg3[2], arg4[0]);
gDPSetPrimColor((*gfx)++, 0, 0, color[0], color[1], color[2], alpha_values[0]);
gSP2Triangles((*gfx)++, 7, 3, 5, 0, 5, 3, 1, 0);
gSP1Quadrangle((*gfx)++, 6, 4, 0, 2, 0);
gDPPipeSync((*gfx)++);
gDPSetPrimColor((*gfx)++, 0, 0, arg3[0], arg3[1], arg3[2], arg4[1]);
gDPSetPrimColor((*gfx)++, 0, 0, color[0], color[1], color[2], alpha_values[1]);
gSP1Quadrangle((*gfx)++, 7, 6, 2, 3, 0);
gSP2Triangles((*gfx)++, 4, 5, 0, 0, 5, 1, 0, 0);
gDPPipeSync((*gfx)++);
gDPSetPrimColor((*gfx)++, 0, 0, arg3[0], arg3[1], arg3[2], arg4[2]);
gDPSetPrimColor((*gfx)++, 0, 0, color[0], color[1], color[2], alpha_values[2]);
gSP1Quadrangle((*gfx)++, 5, 4, 6, 7, 0);
gSP2Triangles((*gfx)++, 0, 1, 2, 0, 1, 3, 2, 0);
}