Fix Baby Shadows
This commit is contained in:
parent
fbb3152a70
commit
f5da0f60e5
@ -1,4 +1,5 @@
|
|||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include <cxxabi.h>
|
||||||
|
|
||||||
#include <libreborn/libreborn.h>
|
#include <libreborn/libreborn.h>
|
||||||
#include <symbols/minecraft.h>
|
#include <symbols/minecraft.h>
|
||||||
@ -181,7 +182,10 @@ static void render_shadow_tile(Tile *tile, const float x, const float y, const f
|
|||||||
t.vertexUV(x1, y0, z1, u1, v1);
|
t.vertexUV(x1, y0, z1, u1, v1);
|
||||||
t.vertexUV(x1, y0, z0, u1, v0);
|
t.vertexUV(x1, y0, z0, u1, v0);
|
||||||
}
|
}
|
||||||
static void render_shadow(const EntityRenderer *self, Entity *entity, float x, float y, float z, const float a) {
|
static const __cxxabiv1::__class_type_info *get_type_info(void *vtable) {
|
||||||
|
return *(((__cxxabiv1::__class_type_info **) Cow_vtable_base) - 1);;
|
||||||
|
}
|
||||||
|
static void render_shadow(const EntityRenderer *self, Entity *entity, const float x, const float y, const float z, const float a) {
|
||||||
// Calculate Power
|
// Calculate Power
|
||||||
float pow = 0;
|
float pow = 0;
|
||||||
if (self->shadow_radius > 0) {
|
if (self->shadow_radius > 0) {
|
||||||
@ -200,7 +204,13 @@ static void render_shadow(const EntityRenderer *self, Entity *entity, float x, f
|
|||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
Level *level = EntityRenderer::entityRenderDispatcher->level;
|
Level *level = EntityRenderer::entityRenderDispatcher->level;
|
||||||
glDepthMask(false);
|
glDepthMask(false);
|
||||||
const float r = self->shadow_radius;
|
float r = self->shadow_radius;
|
||||||
|
if (entity->isMob()) {
|
||||||
|
Mob *mob = (Mob *) entity;
|
||||||
|
if (mob->isBaby()) {
|
||||||
|
r *= 0.5f;
|
||||||
|
}
|
||||||
|
}
|
||||||
const float ex = entity->old_x + (entity->x - entity->old_x) * a;
|
const float ex = entity->old_x + (entity->x - entity->old_x) * a;
|
||||||
float ey = entity->old_y + (entity->y - entity->old_y) * a + entity->getShadowHeightOffs() - entity->height_offset;
|
float ey = entity->old_y + (entity->y - entity->old_y) * a + entity->getShadowHeightOffs() - entity->height_offset;
|
||||||
const float ez = entity->old_z + (entity->z - entity->old_z) * a;
|
const float ez = entity->old_z + (entity->z - entity->old_z) * a;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include <optional>
|
#include <optional>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <cxxabi.h>
|
||||||
|
|
||||||
#include <GLES/gl.h>
|
#include <GLES/gl.h>
|
||||||
|
|
||||||
@ -189,6 +190,21 @@ static void Tesselator_normal_injection(__attribute__((unused)) Tesselator *self
|
|||||||
CustomTesselator::instance.normal = xx | (yy << 8) | (zz << 16);
|
CustomTesselator::instance.normal = xx | (yy << 8) | (zz << 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void explore(const __cxxabiv1::__class_type_info *info) {
|
||||||
|
INFO("Test: %s", info->name());
|
||||||
|
const __cxxabiv1::__si_class_type_info *a = dynamic_cast<const __cxxabiv1::__si_class_type_info *>(info);
|
||||||
|
if (a) {
|
||||||
|
explore(a->__base_type);
|
||||||
|
} else {
|
||||||
|
const __cxxabiv1::__vmi_class_type_info *b = dynamic_cast<const __cxxabiv1::__vmi_class_type_info *>(info);
|
||||||
|
if (b) {
|
||||||
|
for (unsigned int i = 0; i < b->__base_count; i++) {
|
||||||
|
explore(b->__base_info[i].__base_type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Init
|
// Init
|
||||||
void _init_custom_tesselator() {
|
void _init_custom_tesselator() {
|
||||||
multidraw_vertex_size = sizeof(CustomVertex);
|
multidraw_vertex_size = sizeof(CustomVertex);
|
||||||
@ -200,4 +216,8 @@ void _init_custom_tesselator() {
|
|||||||
overwrite_call((void *) Tesselator_vertex->backup, (void *) Tesselator_vertex_injection, true);
|
overwrite_call((void *) Tesselator_vertex->backup, (void *) Tesselator_vertex_injection, true);
|
||||||
overwrite_call((void *) Tesselator_normal->backup, (void *) Tesselator_normal_injection, true);
|
overwrite_call((void *) Tesselator_normal->backup, (void *) Tesselator_normal_injection, true);
|
||||||
overwrite_call((void *) Common_drawArrayVT->backup, (void *) drawArrayVT_injection, true);
|
overwrite_call((void *) Common_drawArrayVT->backup, (void *) drawArrayVT_injection, true);
|
||||||
|
|
||||||
|
const std::type_info *info = *(((std::type_info **) Cow_vtable_base) - 1);
|
||||||
|
const __cxxabiv1::__si_class_type_info *info2 = dynamic_cast<const __cxxabiv1::__si_class_type_info *>(info);
|
||||||
|
explore(info2);
|
||||||
}
|
}
|
@ -11,6 +11,7 @@ virtual-method void updateAi() = 0x1cc;
|
|||||||
virtual-method float getWalkingSpeedModifier() = 0x1e8;
|
virtual-method float getWalkingSpeedModifier() = 0x1e8;
|
||||||
virtual-method void aiStep() = 0x180;
|
virtual-method void aiStep() = 0x180;
|
||||||
virtual-method int getMaxHealth() = 0x168;
|
virtual-method int getMaxHealth() = 0x168;
|
||||||
|
virtual-method bool isBaby() = 0x1a8;
|
||||||
|
|
||||||
method bool getSharedFlag(int flag) = 0x81fd8;
|
method bool getSharedFlag(int flag) = 0x81fd8;
|
||||||
method void setSharedFlag(int flag, bool value) = 0x81ef8;
|
method void setSharedFlag(int flag, bool value) = 0x81ef8;
|
||||||
|
Loading…
Reference in New Issue
Block a user