decomp more level stuff (#932)

* more level stuff

* vi1 to jun load working, with multiple skies

* small fixes

* add level ref test

* clang
This commit is contained in:
water111
2021-10-23 16:00:49 -04:00
committed by GitHub
parent 5220d8b87e
commit d6f631383e
41 changed files with 3641 additions and 402 deletions
+3
View File
@@ -119,6 +119,9 @@ bool check_stopped(const ThreadID& tid, SignalInfo* out) {
case SIGTRAP:
out->kind = SignalInfo::BREAK;
break;
case SIGILL:
out->kind = SignalInfo::ILLEGAL_INSTR;
break;
default:
out->kind = SignalInfo::UNKNOWN;
+1
View File
@@ -83,6 +83,7 @@ struct SignalInfo {
SEGFAULT, // access bad memory
BREAK, // hit a breakpoint or execute int3
MATH_EXCEPTION, // divide by zero
ILLEGAL_INSTR, // bad instruction
UNKNOWN, // some other signal that is unsupported
DISAPPEARED, // process disappeared (maybe killed by the user)
+16 -13
View File
@@ -5099,19 +5099,19 @@
(unload! (_type_) _type_ 12)
(bsp-name (_type_) symbol 13)
(dummy-14 (_type_ object) memory-usage-block 14)
(dummy-15 (_type_ vector) symbol 15)
(point-in-boxes? (_type_ vector) symbol 15)
(update-vis! (_type_ level-vis-info uint uint) symbol 16)
(load-continue (_type_) _type_ 17)
(load-begin (_type_) _type_ 18)
(login (_type_) _type_ 19)
(login-begin (_type_) _type_ 19)
(vis-load (_type_) uint 20)
(dummy-21 (_type_) none 21)
(activate (_type_) _type_ 22)
(birth (_type_) _type_ 22)
(level-status-set! (_type_ symbol) _type_ 23)
(dummy-24 (_type_) _type_ 24)
(dummy-25 (_type_) int 25)
(load-required-packages (_type_) _type_ 24)
(init-vis (_type_) int 25)
(vis-clear (_type_) int 26)
(dummy-27 (_type_ vector string) none 27)
(debug-print-splitbox (_type_ vector string) none 27)
(art-group-get-by-name (_type_ string) art-group 28)
)
)
@@ -6153,7 +6153,7 @@
(collide-y-probe (_type_ int collide-list) none 12)
(collide-ray (_type_ int collide-list) none 13)
(dummy-14 (_type_) none 14)
(dummy-15 (_type_ object object) none 15) ;; something debugging
(debug-draw (_type_ drawable object) none 15)
(dummy-16 (_type_ object object) object 16)
(collect-ambients (_type_ sphere int ambient-list) none 17)
)
@@ -6180,6 +6180,9 @@
((length int16 :offset 6)
(data drawable 1 :offset-assert 32)
)
(:methods
(new (symbol type int) _type_)
)
:flag-assert #x1200000024
)
@@ -6262,7 +6265,7 @@
)
(deftype drawable-tree-array (drawable-group)
()
((trees drawable-tree 1 :offset 32 :score 100))
:flag-assert #x1200000024
)
@@ -7737,7 +7740,7 @@
(login (_type_) _type_ 9)
(dummy-10 (_type_ string type) joint 10)
(dummy-11 (_type_ string type) int 11)
(dummy-12 (_type_) symbol 12)
(needs-link? (_type_) symbol 12)
)
)
@@ -11985,7 +11988,7 @@
(unk-data-5 float :offset-assert 164)
(adgifs adgif-shader-array :offset-assert 168)
(actor-birth-order (pointer uint32) :offset-assert 172)
(unk-data-7 pointer :offset-assert 176)
(split-box-indices (pointer uint16) :offset-assert 176)
(unk-data-8 uint32 55 :offset-assert 180)
)
@@ -11995,7 +11998,7 @@
(:methods
(relocate (_type_ kheap (pointer uint8)) none :replace 7)
(birth (_type_) none 18)
(dummy-19 (_type_) none 19)
(deactivate-entities (_type_) none 19)
)
)
@@ -12704,7 +12707,7 @@
(dma-base uint32 :offset 36)
(dma-level-1 uint32 :offset 40)
(dma-qwc uint32 4 :offset 44)
(shader uint32 :offset 48)
(shader (inline-array adgif-shader) :offset 48)
(num-shaders uint8 :offset 52)
(num-base-colors uint8 :offset 53)
(num-level0-colors uint8 :offset 54)
@@ -16500,7 +16503,7 @@
;; - Functions
(define-extern edge-debug-lines function)
(define-extern vis-cull function)
(define-extern vis-cull (function int symbol))
;; ----------------------
@@ -1787,6 +1787,14 @@
[140, "s1", "(pointer uint128)"]
],
"(method 15 level)": [
[[21, 60], "v1", "(inline-array box8s)"]
],
"(method 27 level)": [
[[23, 68], "s2", "(inline-array box8s)"]
],
"unpack-comp-huf": [[[21, 23], "t3", "(pointer uint16)"]],
"(method 9 merc-fragment)": [[[13, 161], "s3", "adgif-shader"]],
@@ -2287,6 +2295,14 @@
[7, "t9", "(function entity-actor entity-actor)"]
],
"(method 10 drawable-group)": [
[19, "s5", "drawable-group"]
],
"(method 15 drawable-group)": [
[19, "s5", "drawable-group"]
],
"(method 14 level-group)": [
[[54, 164], "s1", "process-drawable"],
[[319, 342], "s0", "process-drawable"],
+2 -1
View File
@@ -22,4 +22,5 @@ VI2.DGO out/iso/VI2.DGO
VI3.DGO out/iso/VI3.DGO
TRA.DGO out/iso/TRA.DGO
FIN.DGO out/iso/FIN.DGO
FIC.DGO out/iso/FIC.DGO
FIC.DGO out/iso/FIC.DGO
JUN.DGO out/iso/JUN.DGO
@@ -15,11 +15,17 @@ enum class BucketId {
BUCKET1 = 1,
SKY_DRAW = 3,
TFRAG_TEX_LEVEL0 = 5,
TFRAG_TEX_LEVEL1 = 12,
SHRUB_TEX_LEVEL0 = 19,
SHRUB_TEX_LEVEL1 = 25,
ALPHA_TEX_LEVEL0 = 31,
SKY_LEVEL0 = 32,
SKY_BLEND_LEVEL0 = 32,
ALPHA_TEX_LEVEL1 = 38,
SKY_BLEND_LEVEL1 = 39,
PRIS_TEX_LEVEL0 = 48,
PRIS_TEX_LEVEL1 = 51,
WATER_TEX_LEVEL0 = 57,
WATER_TEX_LEVEL1 = 60,
// ...
PRE_SPRITE_TEX = 65, // maybe it's just common textures?
SPRITE = 66,
@@ -61,11 +61,18 @@ void OpenGLRenderer::init_bucket_renderers() {
init_bucket_renderer<EmptyBucketRenderer>("bucket0", BucketId::BUCKET0);
init_bucket_renderer<SkyRenderer>("sky", BucketId::SKY_DRAW);
init_bucket_renderer<TextureUploadHandler>("tfrag-tex-0", BucketId::TFRAG_TEX_LEVEL0);
init_bucket_renderer<SkyTextureHandler>("sky-tex-0", BucketId::SKY_LEVEL0);
init_bucket_renderer<TextureUploadHandler>("tfrag-tex-1", BucketId::TFRAG_TEX_LEVEL1);
init_bucket_renderer<TextureUploadHandler>("shrub-tex-0", BucketId::SHRUB_TEX_LEVEL0);
init_bucket_renderer<TextureUploadHandler>("shrub-tex-1", BucketId::SHRUB_TEX_LEVEL1);
init_bucket_renderer<TextureUploadHandler>("alpha-tex-0", BucketId::ALPHA_TEX_LEVEL0);
init_bucket_renderer<TextureUploadHandler>("alpha-tex-1", BucketId::ALPHA_TEX_LEVEL1);
auto sky_blender = std::make_shared<SkyBlender>();
init_bucket_renderer<SkyBlendHandler>("sky-blend-0", BucketId::SKY_BLEND_LEVEL0, sky_blender);
init_bucket_renderer<SkyBlendHandler>("sky-blend-1", BucketId::SKY_BLEND_LEVEL1, sky_blender);
init_bucket_renderer<TextureUploadHandler>("pris-tex-0", BucketId::PRIS_TEX_LEVEL0);
init_bucket_renderer<TextureUploadHandler>("pris-tex-1", BucketId::PRIS_TEX_LEVEL1);
init_bucket_renderer<TextureUploadHandler>("water-tex-0", BucketId::WATER_TEX_LEVEL0);
init_bucket_renderer<TextureUploadHandler>("water-tex-1", BucketId::WATER_TEX_LEVEL1);
init_bucket_renderer<TextureUploadHandler>("pre-sprite-tex", BucketId::PRE_SPRITE_TEX);
init_bucket_renderer<SpriteRenderer>("sprite", BucketId::SPRITE);
init_bucket_renderer<DirectRenderer>("debug-draw-0", BucketId::DEBUG_DRAW_0, 102,
+35 -21
View File
@@ -19,8 +19,7 @@
// size of the sky texture is 64x96, but it's actually a 64x64 (clouds) and a 32x32 (sky)
SkyTextureHandler::SkyTextureHandler(const std::string& name, BucketId my_id)
: BucketRenderer(name, my_id) {
SkyBlender::SkyBlender() {
// generate textures for sky blending
glGenFramebuffers(2, m_framebuffers);
glGenTextures(2, m_textures);
@@ -70,22 +69,16 @@ SkyTextureHandler::SkyTextureHandler(const std::string& name, BucketId my_id)
m_vertex_data[5].y = 1;
}
SkyTextureHandler::~SkyTextureHandler() {
SkyBlender::~SkyBlender() {
glDeleteFramebuffers(2, m_framebuffers);
glDeleteBuffers(1, &m_gl_vertex_buffer);
glDeleteTextures(2, m_textures);
}
void SkyTextureHandler::handle_sky_copies(DmaFollower& dma,
SharedRenderState* render_state,
ScopedProfilerNode& prof) {
if (!m_enabled) {
while (dma.current_tag().qwc == 6) {
dma.read_and_advance();
dma.read_and_advance();
}
return;
}
SkyBlender::Stats SkyBlender::do_sky_blends(DmaFollower& dma,
SharedRenderState* render_state,
ScopedProfilerNode& prof) {
Stats stats;
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
@@ -201,15 +194,15 @@ void SkyTextureHandler::handle_sky_copies(DmaFollower& dma,
if (buffer_idx == 0) {
if (is_first_draw) {
m_stats.sky_draws++;
stats.sky_draws++;
} else {
m_stats.sky_blends++;
stats.sky_blends++;
}
} else {
if (is_first_draw) {
m_stats.cloud_draws++;
stats.cloud_draws++;
} else {
m_stats.cloud_blends++;
stats.cloud_blends++;
}
}
}
@@ -241,11 +234,32 @@ void SkyTextureHandler::handle_sky_copies(DmaFollower& dma,
glBindFramebuffer(GL_FRAMEBUFFER, old_framebuffer);
glBindVertexArray(0);
glDeleteVertexArrays(1, &vao);
return stats;
}
void SkyTextureHandler::render(DmaFollower& dma,
SharedRenderState* render_state,
ScopedProfilerNode& prof) {
SkyBlendHandler::SkyBlendHandler(const std::string& name,
BucketId my_id,
std::shared_ptr<SkyBlender> shared_blender)
: BucketRenderer(name, my_id), m_shared_blender(shared_blender) {}
void SkyBlendHandler::handle_sky_copies(DmaFollower& dma,
SharedRenderState* render_state,
ScopedProfilerNode& prof) {
if (!m_enabled) {
while (dma.current_tag().qwc == 6) {
dma.read_and_advance();
dma.read_and_advance();
}
return;
} else {
m_stats = m_shared_blender->do_sky_blends(dma, render_state, prof);
}
}
void SkyBlendHandler::render(DmaFollower& dma,
SharedRenderState* render_state,
ScopedProfilerNode& prof) {
m_stats = {};
// First thing should be a NEXT with two nops. this is a jump from buckets to sprite data
auto data0 = dma.read_and_advance();
@@ -288,7 +302,7 @@ void SkyTextureHandler::render(DmaFollower& dma,
assert(dma.current_tag_offset() == render_state->next_bucket);
}
void SkyTextureHandler::draw_debug_window() {
void SkyBlendHandler::draw_debug_window() {
ImGui::Separator();
ImGui::Text("Draw/Blend ( sky ): %d/%d", m_stats.sky_draws, m_stats.sky_blends);
ImGui::Text("Draw/Blend (cloud): %d/%d", m_stats.cloud_draws, m_stats.cloud_blends);
+33 -19
View File
@@ -3,21 +3,21 @@
#include "game/graphics/opengl_renderer/BucketRenderer.h"
#include "game/graphics/opengl_renderer/DirectRenderer.h"
/*!
* Handles texture blending for the sky.
* Will insert the result texture into the texture pool.
*/
class SkyTextureHandler : public BucketRenderer {
class SkyBlender {
public:
SkyTextureHandler(const std::string& name, BucketId my_id);
void render(DmaFollower& dma, SharedRenderState* render_state, ScopedProfilerNode& prof) override;
void draw_debug_window() override;
~SkyTextureHandler();
SkyBlender();
~SkyBlender();
struct Stats {
int sky_draws = 0;
int cloud_draws = 0;
int sky_blends = 0;
int cloud_blends = 0;
};
Stats do_sky_blends(DmaFollower& dma, SharedRenderState* render_state, ScopedProfilerNode& prof);
private:
void handle_sky_copies(DmaFollower& dma,
SharedRenderState* render_state,
ScopedProfilerNode& prof);
GLuint m_framebuffers[2]; // sky, clouds
GLuint m_textures[2]; // sky, clouds
int m_sizes[2] = {32, 64};
@@ -29,16 +29,30 @@ class SkyTextureHandler : public BucketRenderer {
float intensity = 0;
};
struct FrameStats {
int sky_draws = 0;
int cloud_draws = 0;
int sky_blends = 0;
int cloud_blends = 0;
} m_stats;
Vertex m_vertex_data[6];
};
/*!
* Handles texture blending for the sky.
* Will insert the result texture into the texture pool.
*/
class SkyBlendHandler : public BucketRenderer {
public:
SkyBlendHandler(const std::string& name,
BucketId my_id,
std::shared_ptr<SkyBlender> shared_blender);
void render(DmaFollower& dma, SharedRenderState* render_state, ScopedProfilerNode& prof) override;
void draw_debug_window() override;
private:
void handle_sky_copies(DmaFollower& dma,
SharedRenderState* render_state,
ScopedProfilerNode& prof);
std::shared_ptr<SkyBlender> m_shared_blender;
SkyBlender::Stats m_stats;
};
/*!
* Handles sky drawing.
*/
+1 -1
View File
@@ -64,7 +64,7 @@ void link_control::begin(Ptr<uint8_t> object_file,
if (link_debug_printfs) {
char* goal_name = object_file.cast<char>().c();
printf("link %s\n", goal_name);
printf("link %s\n", m_object_name);
printf("link_control::begin %c%c%c%c\n", goal_name[0], goal_name[1], goal_name[2],
goal_name[3]);
}
+3
View File
@@ -71,6 +71,9 @@ void* RPC_Loader(unsigned int /*fno*/, void* data, int size) {
}
}
} break;
case SoundCommand::UNLOAD_BANK:
printf("ignoring unload bank command!\n");
break;
case SoundCommand::GET_IRX_VERSION: {
cmd->irx_version.major = IRX_VERSION_MAJOR;
cmd->irx_version.minor = IRX_VERSION_MINOR;
+52
View File
@@ -0,0 +1,52 @@
("JUN.DGO"
("eichar-fish+0-ag-JUN.go" "eichar-fish+0")
("jungle-elevator.o" "jungle-elevator")
("bouncer.o" "bouncer")
("hopper.o" "hopper")
("junglesnake.o" "junglesnake")
("darkvine.o" "darkvine")
("jungle-obs.o" "jungle-obs")
("jungle-mirrors.o" "jungle-mirrors")
("junglefish.o" "junglefish")
("fisher-JUN.o" "fisher")
("jungle-part.o" "jungle-part")
("launcherdoor.o" "launcherdoor")
("tpage-385.go" "tpage-385")
("tpage-531.go" "tpage-531")
("tpage-386.go" "tpage-386")
("tpage-388.go" "tpage-388")
("tpage-765.go" "tpage-765")
("accordian-ag.go" "accordian")
("babak-ag.go" "babak")
("bounceytarp-ag.go" "bounceytarp")
("catch-fisha-ag.go" "catch-fisha")
("catch-fishb-ag.go" "catch-fishb")
("catch-fishc-ag.go" "catch-fishc")
("darkvine-ag-JUN.go" "darkvine")
("ecovalve-ag-JUB-JUN.go" "ecovalve")
("fish-net-ag.go" "fish-net")
("fisher-ag.go" "fisher")
("hopper-ag.go" "hopper")
("junglecam-ag.go" "junglecam")
("junglefish-ag.go" "junglefish")
("junglesnake-ag.go" "junglesnake")
("launcherdoor-ag-JUN.go" "launcherdoor")
("logtrap-ag.go" "logtrap")
("lurkerm-piston-ag.go" "lurkerm-piston")
("lurkerm-tall-sail-ag.go" "lurkerm-tall-sail")
("maindoor-ag.go" "maindoor")
("medres-firecanyon-ag.go" "medres-firecanyon")
("orb-cache-top-ag-JUN.go" "orb-cache-top")
("periscope-ag.go" "periscope")
("plat-button-ag.go" "plat-button")
("plat-eco-ag-JUN.go" "plat-eco")
("precurbridge-ag.go" "precurbridge")
("reflector-mirror-ag.go" "reflector-mirror")
("ropebridge-52-ag.go" "ropebridge-52")
("ropebridge-70-ag.go" "ropebridge-70")
("sharkey-ag-JUN-MIS.go" "sharkey")
("sidedoor-ag.go" "sidedoor")
("towertop-ag.go" "towertop")
("water-anim-jungle-ag.go" "water-anim-jungle")
("jungle-vis.go" "jungle-vis")
)
+20 -1
View File
@@ -12,4 +12,23 @@
(define-extern joint-control-copy! (function joint-control joint-control joint-control))
(define-extern joint-control-remap! (function joint-control art-group art-group pair int string object))
(define-extern joint-control-remap! (function joint-control art-group art-group pair int string object))
(defmethod needs-link? art ((obj art))
#f
)
(defmethod needs-link? art-group ((obj art-group))
(the-as
symbol
(and
(-> obj length)
(type-type? (-> obj data 0 type) art-joint-anim)
(!=
(-> obj name)
(-> (the-as art-joint-anim (-> obj data 0)) master-art-group-name)
)
)
)
)
+1 -1
View File
@@ -132,7 +132,7 @@
(login (_type_) _type_ 9)
(dummy-10 (_type_ string type) joint 10)
(dummy-11 (_type_ string type) int 11)
(dummy-12 (_type_) symbol 12)
(needs-link? (_type_) symbol 12)
)
)
+3
View File
@@ -10,6 +10,9 @@
((length int16 :offset 6)
(data drawable 1 :offset-assert 32)
)
(:methods
(new (symbol type int) _type_)
)
:flag-assert #x1200000024
)
+108
View File
@@ -5,3 +5,111 @@
;; name in dgo: drawable-group
;; dgos: GAME, ENGINE
(defmethod new drawable-group ((allocation symbol) (type-to-make type) (arg0 int))
"Allocate a drawable-group with enough room for arg0 drawables"
(let ((v0-0 (object-new allocation type-to-make
(the-as int (+ (-> type-to-make size) (* (+ arg0 -1) 4)))
)
)
)
(set! (-> v0-0 length) arg0)
v0-0
)
)
(defmethod inspect drawable-group ((obj drawable-group))
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tid: ~D~%" (-> obj id))
(format #t "~Tlength: ~D~%" (-> obj length))
(format #t "~Tdata[~D]: @ #x~X~%" (-> obj length) (-> obj data))
(dotimes (s5-0 (-> obj length))
(format #t "~T [~D] ~A~%" s5-0 (-> obj data s5-0))
)
obj
)
(defmethod print drawable-group ((obj drawable-group))
(format #t "#<~A @ #x~X [~D]" (-> obj type) obj (-> obj length))
(dotimes (s5-0 (-> obj length))
(format #t " ~A" (-> obj data s5-0))
)
(format #t ">")
obj
)
(defmethod length drawable-group ((obj drawable-group))
(-> obj length)
)
(defmethod asize-of drawable-group ((obj drawable-group))
(the-as int (+ (-> drawable-group size) (* (+ (-> obj length) -1) 4)))
)
(defmethod mem-usage drawable-group ((obj drawable-group) (arg0 memory-usage-block) (arg1 int))
(set! (-> arg0 length) (max 1 (-> arg0 length)))
(set! (-> arg0 data 0 name) "drawable-group")
(+! (-> arg0 data 0 count) 1)
(let ((v1-6 (asize-of obj)))
(+! (-> arg0 data 0 used) v1-6)
(+! (-> arg0 data 0 total) (logand -16 (+ v1-6 15)))
)
(dotimes (s3-0 (-> obj length))
(mem-usage (-> obj data s3-0) arg0 arg1)
)
obj
)
(defmethod login drawable-group ((obj drawable-group))
(dotimes (s5-0 (-> obj length))
(login (-> obj data s5-0))
)
obj
)
(defmethod draw drawable-group ((obj drawable-group) (arg0 drawable) (arg1 display-frame))
(when (vis-cull (-> obj id))
(when (sphere-cull (-> obj bsphere))
(dotimes (s3-0 (-> obj length))
(draw (-> obj data s3-0) (-> (the-as drawable-group arg0) data s3-0) arg1)
)
)
)
0
(none)
)
(defmethod dummy-14 drawable-group ((obj drawable-group))
(when (vis-cull (-> obj id))
(when (sphere-cull (-> obj bsphere))
(dotimes (s5-0 (-> obj length))
(dummy-14 (-> obj data s5-0))
)
)
)
0
(none)
)
(defmethod debug-draw drawable-group ((obj drawable-group) (arg0 drawable) (arg1 object))
(when (vis-cull (-> obj id))
(when (sphere-cull (-> obj bsphere))
(dotimes (s3-0 (-> obj length))
(debug-draw
(-> obj data s3-0)
(-> (the-as drawable-group arg0) data s3-0)
arg1
)
)
)
)
0
(none)
)
(defmethod dummy-16 drawable-group ((obj drawable-group) (arg0 object) (arg1 object))
(dotimes (s4-0 (-> obj length))
(set! arg1 (dummy-16 (-> obj data s4-0) arg0 arg1))
)
arg1
)
+2 -1
View File
@@ -29,7 +29,7 @@
(collide-y-probe (_type_ int collide-list) none 12)
(collide-ray (_type_ int collide-list) none 13)
(dummy-14 (_type_) none 14)
(dummy-15 (_type_ object object) none 15)
(debug-draw (_type_ drawable object) none 15)
(dummy-16 (_type_ object object) object 16)
(collect-ambients (_type_ sphere int ambient-list) none 17)
)
@@ -53,3 +53,4 @@
;; for anim-tester
(define-extern dma-add-process-drawable function)
(define-extern vis-cull (function int symbol))
@@ -24,7 +24,7 @@
(none)
)
(defmethod dummy-15 drawable-inline-array ((obj drawable-inline-array) (arg0 object) (arg1 object))
(defmethod debug-draw drawable-inline-array ((obj drawable-inline-array) (arg0 drawable) (arg1 object))
0
(none)
)
+1 -1
View File
@@ -11,6 +11,6 @@
)
(deftype drawable-tree-array (drawable-group)
()
((trees drawable-tree 1 :offset 32))
:flag-assert #x1200000024
)
+199
View File
@@ -1319,7 +1319,206 @@
)
)
)
(when *display-split-boxes*
(dotimes (s5-4 (-> obj length))
(let ((s4-4 (-> obj level s5-4)))
(when (= (-> s4-4 status) 'active)
(when (nonzero? (-> s4-4 bsp boxes))
(let ((s3-4 (-> s4-4 bsp boxes)))
(countdown (s2-4 (-> s3-4 length))
(add-debug-box
#t
(bucket-id debug-draw0)
(the-as vector (-> s3-4 data s2-4))
(the-as vector (+ (the-as uint (-> s3-4 data 0 max)) (* s2-4 32)))
(the-as rgba (if (zero? (-> s4-4 index))
(the-as uint #x80808000)
(the-as uint #x808080ff)
)
)
)
)
)
)
)
)
)
)
(none))
;; birth!
;; entity-deactivate-handler
;; kill!
;; birth bsp-header
(define-extern process-drawable-from-entity! (function process-drawable res-lump none))
(define-extern entity-birth-no-kill (function entity none))
(defmethod run-logic? process-drawable ((obj process-drawable))
(or
(zero? (logand (-> obj mask) (process-mask actor-pause)))
(or
(>=
(+ (-> *ACTOR-bank* pause-dist) (-> obj root pause-adjust-distance))
(vector-vector-distance (-> obj root trans) (math-camera-pos))
)
(and
(nonzero? (-> obj skel))
(!= (-> obj skel root-channel 0) (-> obj skel channel))
)
(and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) 16))
)
)
)
(defmethod deactivate-entities bsp-header ((obj bsp-header))
(let ((s5-0 (-> obj actors)))
(when (nonzero? s5-0)
(dotimes (s4-0 (-> s5-0 length))
(let ((s3-0 (-> s5-0 data s4-0 actor)))
(kill! s3-0)
(remove-from-level! s3-0 *level*)
)
)
)
)
(let ((s5-1 (-> obj cameras)))
(when (nonzero? s5-1)
(dotimes (s4-1 (-> s5-1 length))
(kill! (-> s5-1 s4-1))
)
)
)
(let ((s5-2 (-> *entity-pool* child))
(s4-2 (-> obj level heap base))
(s3-1 (-> obj level heap top-base))
)
(while s5-2
(let ((s2-0 (ppointer->process s5-2)))
(set! s5-2 (-> s5-2 0 brother))
(cond
((-> (the-as process s2-0) entity)
(when (= (-> (the-as process s2-0) entity extra level) (-> obj level))
(format #t "NOTICE: rogue level entity ~A~% still alive~%" s2-0)
(deactivate s2-0)
)
)
((= (-> s2-0 type) part-tracker)
(let ((v1-28 (the-as part-tracker s2-0)))
(if
(and
(nonzero? (-> v1-28 part))
(>= (the-as int (-> v1-28 part group)) (the-as int s4-2))
(< (the-as int (-> v1-28 part group)) (the-as int s3-1))
)
(deactivate s2-0)
)
)
)
(else
(let* ((s1-0 s2-0)
(v1-34
(if
(and
(nonzero? s1-0)
(type-type? (-> s1-0 type) process-drawable)
)
s1-0
)
)
)
(when v1-34
(cond
((and
(nonzero? (-> (the-as process-drawable v1-34) part))
(>=
(the-as int (-> (the-as process-drawable v1-34) part group))
(the-as int s4-2)
)
(<
(the-as int (-> (the-as process-drawable v1-34) part group))
(the-as int s3-1)
)
)
(format
#t
"NOTICE: rogue null level entity (using part ~A) ~A~% still alive~%"
(->
(the-as process-drawable (-> (the-as process-drawable v1-34) part))
brother
)
s2-0
)
(deactivate s2-0)
)
((and
(nonzero? (-> (the-as process-drawable v1-34) draw))
(>=
(the-as int (-> (the-as process-drawable v1-34) draw art-group))
(the-as int s4-2)
)
(<
(the-as int (-> (the-as process-drawable v1-34) draw art-group))
(the-as int s3-1)
)
)
(format
#t
"NOTICE: rogue null level entity (using art ~A) ~A~% still alive~%"
(->
(the-as process-drawable (-> (the-as process-drawable v1-34) draw))
mask
)
s2-0
)
(deactivate s2-0)
)
)
)
)
)
)
)
)
)
(none)
)
(defmethod
update-perm!
entity-perm
((obj entity-perm) (arg0 symbol) (arg1 entity-perm-status))
(cond
((= arg0 'game)
(logclear! (-> obj status) arg1)
)
((nonzero? (-> obj task))
(logclear!
(-> obj status)
(logior (if (logtest? (-> obj status) (entity-perm-status bit-4))
524
0
)
515
)
)
)
(else
(logclear!
(-> obj status)
(logior arg1 (if (logtest? (-> obj status) (entity-perm-status bit-4))
524
0
)
)
)
)
)
(when
(zero? (logand (-> obj status) (entity-perm-status user-set-from-cstage)))
(set! (-> obj user-uint64) (the-as uint 0))
0
)
obj
)
+13
View File
@@ -656,6 +656,19 @@
;; added
(format *stdcon* "~3Lglobal heap at ~,,2fK remaining~0L~%"
(* (1/ 1024) (&- (-> global top) (-> global current))))
#|
;; added, prints some level status.
(dotimes (i 2)
(let ((level-heap (-> *level* level i heap)))
(format *stdcon* "~17Llevel ~d: ~A ~A ~,,2fK remaining~0L~%"
i
(-> *level* level i name)
(-> *level* level i status)
(* (1/ 1024) (&- (-> level-heap top) (-> level-heap current)))
)
)
)
|#
(display-file-info)
) ;; end dma let
+1 -1
View File
@@ -43,7 +43,7 @@
(dma-base uint32 :offset 36)
(dma-level-1 uint32 :offset 40)
(dma-qwc uint32 4 :offset-assert 44)
(shader uint32 :offset 48)
(shader (inline-array adgif-shader) :offset 48)
(num-shaders uint8 :offset 52)
(num-base-colors uint8 :offset 53)
(num-level0-colors uint8 :offset 54)
+13
View File
@@ -5,3 +5,16 @@
;; name in dgo: tfrag
;; dgos: GAME, ENGINE
(defmethod login tfragment ((obj tfragment))
(dotimes (s5-0 (the-as int (-> obj num-shaders)))
(adgif-shader-login-no-remap (-> obj shader s5-0))
)
obj
)
(defmethod login drawable-inline-array-tfrag ((obj drawable-inline-array-tfrag))
(dotimes (s5-0 (-> obj length))
(login (-> obj data s5-0))
)
obj
)
+2 -2
View File
@@ -62,7 +62,7 @@
(unk-data-5 float :offset-assert 164)
(adgifs adgif-shader-array :offset-assert 168)
(actor-birth-order (pointer uint32) :offset-assert 172)
(unk-data-7 pointer :offset-assert 176)
(split-box-indices (pointer uint16) :offset-assert 176)
(unk-data-8 uint32 55 :offset-assert 180)
)
:method-count-assert 20
@@ -71,7 +71,7 @@
(:methods
(relocate (_type_ kheap (pointer uint8)) none :replace 7)
(birth (_type_) none 18)
(dummy-19 (_type_) none 19)
(deactivate-entities (_type_) none 19)
)
)
+5 -5
View File
@@ -129,8 +129,8 @@
(+! (-> mem-use data 57 used) v1-92)
(+! (-> mem-use data 57 total) (logand -16 (+ v1-92 15)))
)
;; add unk-data-7 (reloated to boxes?)
(when (nonzero? (-> obj unk-data-7))
;; add box indices
(when (nonzero? (-> obj split-box-indices))
(set! (-> mem-use length) (max 58 (-> mem-use length)))
(set! (-> mem-use data 57 name) "bsp-misc")
(+! (-> mem-use data 57 count) 1)
@@ -326,8 +326,8 @@
(none)
)
(defmethod dummy-15 bsp-header ((obj bsp-header) (arg0 object) (arg1 object))
"This is some sort of debugging thing. It calls dummy-15 on the drawables
(defmethod debug-draw bsp-header ((obj bsp-header) (arg0 drawable) (arg1 object))
"This is some sort of debugging thing. It calls debug-draw on the drawables
with the scratchpad and vfs set up."
(let ((s4-0 (-> obj level)))
;; set up some stuff in the scratchpad
@@ -372,7 +372,7 @@
)
)
(let ((a1-3 (-> obj drawable-trees)))
(dummy-15 a1-3 a1-3 arg1)
(debug-draw a1-3 a1-3 arg1)
)
(if *debug-segment*
(add-frame (-> *display* frames (-> *display* on-screen) frame profile-bar 0)
+6 -6
View File
@@ -157,19 +157,19 @@
(unload! (_type_) _type_ 12)
(bsp-name (_type_) symbol 13)
(dummy-14 (_type_ object) memory-usage-block 14)
(dummy-15 (_type_ vector) symbol 15)
(point-in-boxes? (_type_ vector) symbol 15)
(update-vis! (_type_ level-vis-info uint uint) symbol 16)
(load-continue (_type_) _type_ 17)
(load-begin (_type_) _type_ 18)
(login (_type_) _type_ 19)
(login-begin (_type_) _type_ 19)
(vis-load (_type_) uint 20)
(dummy-21 (_type_) none 21)
(activate (_type_) _type_ 22)
(birth (_type_) _type_ 22)
(level-status-set! (_type_ symbol) _type_ 23)
(dummy-24 (_type_) _type_ 24)
(dummy-25 (_type_) int 25)
(load-required-packages (_type_) _type_ 24)
(init-vis (_type_) int 25)
(vis-clear (_type_) int 26)
(dummy-27 (_type_ vector string) none 27)
(debug-print-splitbox (_type_ vector string) none 27)
(art-group-get-by-name (_type_ string) art-group 28)
)
)
File diff suppressed because it is too large Load Diff
+4
View File
@@ -264,6 +264,10 @@
)
(set! *display-profile* #t)
(set! *display-split-boxes* #t)
(set! *display-level-border* #t)
(set! *display-split-box-info* #t)
(set! *display-deci-count* #t)
(defun text-randomizer ()
(dotimes (i 10000)
+65
View File
@@ -215,6 +215,7 @@
"out/iso/TRA.DGO"
"out/iso/FIN.DGO"
"out/iso/FIC.DGO"
"out/iso/JUN.DGO"
)
;;;;;;;;;;;;;;;;;;;;;;;;
@@ -245,6 +246,7 @@
"village_common/oracle.gc"
"common/blocking-plane.gc"
"common/launcherdoor.gc"
"racer_common/target-racer-h-FIC-LAV-MIS-OGR-ROL.gc"
"racer_common/racer-part.gc"
@@ -327,6 +329,69 @@
"village1-vis"
)
;;;;;;;;;;;;;;;;;;;;;
;; Jungle
;;;;;;;;;;;;;;;;;;;;;
(cgo "JUN.DGO"
"jun.gd")
(goal-src-sequence
"levels/jungle/"
:deps ;; no idea what these depend on, make it depend on the whole engine
("out/obj/default-menu.o")
"jungle-elevator.gc"
"bouncer.gc"
"hopper.gc"
"junglesnake.gc"
"darkvine.gc"
"jungle-obs.gc"
"jungle-mirrors.gc"
"junglefish.gc"
"fisher-JUN.gc"
"jungle-part.gc"
)
(copy-gos
"eichar-fish+0-ag-JUN"
"accordian-ag"
"bounceytarp-ag"
"catch-fisha-ag"
"catch-fishb-ag"
"catch-fishc-ag"
"darkvine-ag-JUN"
"ecovalve-ag-JUB-JUN"
"fish-net-ag"
"fisher-ag"
"hopper-ag"
"junglecam-ag"
"junglefish-ag"
"junglesnake-ag"
"launcherdoor-ag-JUN"
"logtrap-ag"
"lurkerm-piston-ag"
"lurkerm-tall-sail-ag"
"maindoor-ag"
"medres-firecanyon-ag"
"orb-cache-top-ag-JUN"
"periscope-ag"
"plat-button-ag"
"plat-eco-ag-JUN"
"precurbridge-ag"
"reflector-mirror-ag"
"ropebridge-52-ag"
"ropebridge-70-ag"
"sharkey-ag-JUN-MIS"
"sidedoor-ag"
"towertop-ag"
"water-anim-jungle-ag"
"jungle-vis"
)
(copy-textures 385 531 386 388 765)
;;;;;;;;;;;;;;;;;;;;;
;; Fire Canyon
;;;;;;;;;;;;;;;;;;;;;
+8
View File
@@ -616,6 +616,14 @@ void Debugger::watcher() {
printf("Target has disappeared. Maybe it quit or was killed.\n");
handle_disappearance();
break;
case xdbg::SignalInfo::ILLEGAL_INSTR:
printf(
"Target has crashed due to an illegal instruction. Run (:di) to get more "
"information.\n");
break;
case xdbg::SignalInfo::UNKNOWN:
printf("Target has encountered an unknown signal. Run (:di) to get more information.\n");
break;
default:
printf("[Debugger] unhandled signal in watcher: %d\n", int(signal_info.kind));
assert(false);
+1 -1
View File
@@ -232,7 +232,7 @@
(login (_type_) _type_ 9)
(dummy-10 (_type_ string type) joint 10)
(dummy-11 (_type_ string type) int 11)
(dummy-12 (_type_) symbol 12)
(needs-link? (_type_) symbol 12)
)
)
@@ -9,6 +9,9 @@
:method-count-assert 18
:size-assert #x24
:flag-assert #x1200000024
(:methods
(new (symbol type int) _type_ 0)
)
)
;; definition for symbol *collide-nodes*, type int
+1 -1
View File
@@ -16,7 +16,7 @@
(collide-y-probe (_type_ int collide-list) none 12)
(collide-ray (_type_ int collide-list) none 13)
(dummy-14 (_type_) none 14)
(dummy-15 (_type_ object object) none 15)
(debug-draw (_type_ drawable object) none 15)
(dummy-16 (_type_ object object) object 16)
(collect-ambients (_type_ sphere int ambient-list) none 17)
)
@@ -31,9 +31,9 @@
;; definition for method 15 of type drawable-inline-array
;; INFO: Return type mismatch int vs none.
(defmethod
dummy-15
debug-draw
drawable-inline-array
((obj drawable-inline-array) (arg0 object) (arg1 object))
((obj drawable-inline-array) (arg0 drawable) (arg1 object))
0
(none)
)
@@ -11,7 +11,8 @@
;; definition of type drawable-tree-array
(deftype drawable-tree-array (drawable-group)
()
((trees drawable-tree 1 :offset 32)
)
:method-count-assert 18
:size-assert #x24
:flag-assert #x1200000024
+20 -20
View File
@@ -55,26 +55,26 @@
;; definition of type tfragment
(deftype tfragment (drawable)
((color-index uint16 :offset 6)
(debug-data tfragment-debug-data :offset 8)
(color-indices uint32 :offset 12)
(colors uint32 :offset 12)
(dma-chain uint32 3 :offset-assert 32)
(dma-common uint32 :offset 32)
(dma-level-0 uint32 :offset 32)
(dma-base uint32 :offset 36)
(dma-level-1 uint32 :offset 40)
(dma-qwc uint32 4 :offset 44)
(shader uint32 :offset 48)
(num-shaders uint8 :offset 52)
(num-base-colors uint8 :offset 53)
(num-level0-colors uint8 :offset 54)
(num-level1-colors uint8 :offset 55)
(color-offset uint8 :offset 56)
(color-count uint8 :offset 57)
(pad0 uint8 :offset 58)
(pad1 uint8 :offset 59)
(generic generic-tfragment :offset-assert 60)
((color-index uint16 :offset 6)
(debug-data tfragment-debug-data :offset 8)
(color-indices uint32 :offset 12)
(colors uint32 :offset 12)
(dma-chain uint32 3 :offset-assert 32)
(dma-common uint32 :offset 32)
(dma-level-0 uint32 :offset 32)
(dma-base uint32 :offset 36)
(dma-level-1 uint32 :offset 40)
(dma-qwc uint32 4 :offset 44)
(shader (inline-array adgif-shader) :offset 48)
(num-shaders uint8 :offset 52)
(num-base-colors uint8 :offset 53)
(num-level0-colors uint8 :offset 54)
(num-level1-colors uint8 :offset 55)
(color-offset uint8 :offset 56)
(color-count uint8 :offset 57)
(pad0 uint8 :offset 58)
(pad1 uint8 :offset 59)
(generic generic-tfragment :offset-assert 60)
)
:method-count-assert 18
:size-assert #x40
+2 -2
View File
@@ -54,7 +54,7 @@
(unk-data-5 float :offset-assert 164)
(adgifs adgif-shader-array :offset-assert 168)
(actor-birth-order (pointer uint32) :offset-assert 172)
(unk-data-7 pointer :offset-assert 176)
(split-box-indices (pointer uint16) :offset-assert 176)
(unk-data-8 uint32 55 :offset-assert 180)
)
:method-count-assert 20
@@ -63,7 +63,7 @@
(:methods
(relocate (_type_ kheap (pointer uint8)) none :replace 7)
(birth (_type_) none 18)
(dummy-19 (_type_) none 19)
(deactivate-entities (_type_) none 19)
)
)
+7 -7
View File
@@ -103,7 +103,7 @@
(+! (-> mem-use data 57 used) v1-92)
(+! (-> mem-use data 57 total) (logand -16 (+ v1-92 15)))
)
(when (nonzero? (-> obj unk-data-7))
(when (nonzero? (-> obj split-box-indices))
(set! (-> mem-use length) (max 58 (-> mem-use length)))
(set! (-> mem-use data 57 name) "bsp-misc")
(+! (-> mem-use data 57 count) 1)
@@ -280,7 +280,7 @@
;; definition for method 15 of type bsp-header
;; INFO: Return type mismatch profile-frame vs none.
(defmethod dummy-15 bsp-header ((obj bsp-header) (arg0 object) (arg1 object))
(defmethod debug-draw bsp-header ((obj bsp-header) (arg0 drawable) (arg1 object))
(rlet ((vf16 :class vf)
(vf17 :class vf)
(vf18 :class vf)
@@ -338,7 +338,7 @@
)
)
(let ((a1-3 (-> obj drawable-trees)))
(dummy-15 a1-3 a1-3 arg1)
(debug-draw a1-3 a1-3 arg1)
)
(if *debug-segment*
(add-frame
@@ -453,7 +453,7 @@
(+! (-> *collide-stats* calls) 1)
(let ((s4-0 (-> obj drawable-trees)))
(dotimes (s3-0 (-> s4-0 length))
(collide-with-box (-> s4-0 data s3-0) arg0 arg1)
(collide-with-box (-> s4-0 trees s3-0) arg0 arg1)
)
)
(none)
@@ -468,7 +468,7 @@
(+! (-> *collide-stats* calls) 1)
(let ((s4-0 (-> obj drawable-trees)))
(dotimes (s3-0 (-> s4-0 length))
(collide-y-probe (-> s4-0 data s3-0) arg0 arg1)
(collide-y-probe (-> s4-0 trees s3-0) arg0 arg1)
)
)
(none)
@@ -483,7 +483,7 @@
(+! (-> *collide-stats* calls) 1)
(let ((s4-0 (-> obj drawable-trees)))
(dotimes (s3-0 (-> s4-0 length))
(collide-ray (-> s4-0 data s3-0) arg0 arg1)
(collide-ray (-> s4-0 trees s3-0) arg0 arg1)
)
)
(none)
@@ -497,7 +497,7 @@
((obj bsp-header) (arg0 sphere) (arg1 int) (arg2 ambient-list))
(let ((s3-0 (-> obj drawable-trees)))
(dotimes (s2-0 (-> s3-0 length))
(collect-ambients (-> s3-0 data s2-0) arg0 arg1 arg2)
(collect-ambients (-> s3-0 trees s2-0) arg0 arg1 arg2)
)
)
(none)
+6 -6
View File
@@ -191,19 +191,19 @@
(unload! (_type_) _type_ 12)
(bsp-name (_type_) symbol 13)
(dummy-14 (_type_ object) memory-usage-block 14)
(dummy-15 (_type_ vector) symbol 15)
(point-in-boxes? (_type_ vector) symbol 15)
(update-vis! (_type_ level-vis-info uint uint) symbol 16)
(load-continue (_type_) _type_ 17)
(load-begin (_type_) _type_ 18)
(login (_type_) _type_ 19)
(login-begin (_type_) _type_ 19)
(vis-load (_type_) uint 20)
(dummy-21 (_type_) none 21)
(activate (_type_) _type_ 22)
(birth (_type_) _type_ 22)
(level-status-set! (_type_ symbol) _type_ 23)
(dummy-24 (_type_) _type_ 24)
(dummy-25 (_type_) int 25)
(load-required-packages (_type_) _type_ 24)
(init-vis (_type_) int 25)
(vis-clear (_type_) int 26)
(dummy-27 (_type_ vector string) none 27)
(debug-print-splitbox (_type_ vector string) none 27)
(art-group-get-by-name (_type_ string) art-group 28)
)
)
File diff suppressed because it is too large Load Diff
+3
View File
@@ -112,6 +112,9 @@
// decompiler BUG
"level-hint-task-process",
"(method 26 level)",
"(method 9 level)",
"(method 10 level)", // asm
// cam-states
"cam-los-collide", // vector-dot involving the stack