mirror of
https://github.com/open-goal/jak-project
synced 2026-07-10 15:14:15 -04:00
[graphics] first half of shadow renderer (#1246)
* start on dma stuff * temp * temp * add shadow cpu
This commit is contained in:
@@ -1020,6 +1020,7 @@ Mips2C_Line handle_normal_instr(Mips2C_Output& output,
|
||||
case InstructionKind::PSRAH:
|
||||
case InstructionKind::PSRLH:
|
||||
case InstructionKind::PSLLW:
|
||||
case InstructionKind::PSLLH:
|
||||
return handle_generic_op2_u16(i0, instr_str);
|
||||
case InstructionKind::SLL:
|
||||
return handle_sll(i0, instr_str);
|
||||
|
||||
@@ -526,6 +526,7 @@
|
||||
(bucket-45 45)
|
||||
(bucket-46 46)
|
||||
|
||||
(shadow 47)
|
||||
(pris-tex0 48)
|
||||
(bucket-49 49)
|
||||
(bucket-50 50)
|
||||
@@ -9026,6 +9027,7 @@
|
||||
(fade-start float :offset-assert 68)
|
||||
(dummy-2 int32 :offset-assert 72)
|
||||
(dummy-3 int32 :offset-assert 76)
|
||||
(fade-vec vector :inline :offset 64) ;; added
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x50
|
||||
@@ -9045,8 +9047,8 @@
|
||||
(set-top-plane-offset (shadow-control float) int 11)
|
||||
(set-bottom-plane-offset (shadow-control float) int 12)
|
||||
(dummy-13 (_type_) none 13)
|
||||
(dummy-14 (_type_) none 14)
|
||||
(dummy-15 (_type_ vector float float float) none 15)
|
||||
(update-direction-from-time-of-day (_type_) none 14)
|
||||
(collide-to-find-planes (_type_ vector float float float) none 15)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -9055,9 +9057,9 @@
|
||||
(texscale vector :inline :offset-assert 16)
|
||||
(clrs vector 2 :inline :offset-assert 32)
|
||||
(dma-unpack-template dma-packet :inline :offset-assert 64)
|
||||
(dma-cnt uint64 :offset-assert 80)
|
||||
(vif-nop uint32 :offset-assert 88)
|
||||
(vif-unpack-v4-8 uint32 :offset-assert 92)
|
||||
(dma-cnt dma-tag :offset-assert 80)
|
||||
(vif-nop vif-tag :offset-assert 88)
|
||||
(vif-unpack-v4-8 vif-tag :offset-assert 92)
|
||||
(pdc basic :offset-assert 96)
|
||||
(dist float :offset-assert 100)
|
||||
(oddeven uint8 :offset-assert 104)
|
||||
@@ -9078,8 +9080,8 @@
|
||||
)
|
||||
|
||||
(deftype shadow-run (structure)
|
||||
((first uint32 :offset-assert 0)
|
||||
(next uint32 :offset-assert 4)
|
||||
((first dma-packet :offset-assert 0)
|
||||
(next (pointer dma-packet) :offset-assert 4)
|
||||
)
|
||||
:allow-misaligned
|
||||
:method-count-assert 9
|
||||
@@ -13651,7 +13653,8 @@
|
||||
)
|
||||
|
||||
(deftype foreground-area (structure)
|
||||
((joint-work joint-work :inline :offset-assert 0 :score 1999999999)
|
||||
(
|
||||
(joint-work joint-work :inline :offset-assert 0 :score 1999999999)
|
||||
(generic-work generic-work :inline :offset 0)
|
||||
(bone-mem bone-memory :inline :offset 0)
|
||||
(shadow-work shadow-work :inline :offset 0)
|
||||
@@ -16642,7 +16645,7 @@
|
||||
(define-extern dump-qword (function qword none))
|
||||
(define-extern bones-debug (function none))
|
||||
(define-extern dump-bone-mem (function none))
|
||||
(define-extern draw-bones-shadow (function draw-control object object pointer))
|
||||
(define-extern draw-bones-shadow (function draw-control pointer pointer pointer))
|
||||
(define-extern draw-bones-generic-merc (function draw-control pointer pointer int pointer))
|
||||
(define-extern draw-bones-merc (function draw-control object object int int pointer))
|
||||
(define-extern draw-bones-check-longest-edge (function draw-control float none))
|
||||
@@ -16860,10 +16863,10 @@
|
||||
|
||||
;; - Functions
|
||||
|
||||
(define-extern shadow-vu0-upload function)
|
||||
(define-extern shadow-dma-init function)
|
||||
(define-extern shadow-execute function)
|
||||
(define-extern shadow-dma-end function)
|
||||
(define-extern shadow-vu0-upload (function none))
|
||||
(define-extern shadow-dma-init (function dma-buffer none))
|
||||
(define-extern shadow-execute (function shadow-dma-packet pointer pointer))
|
||||
(define-extern shadow-dma-end (function dma-buffer none))
|
||||
(define-extern shadow-vu1-init-buffer (function dma-buffer none))
|
||||
(define-extern shadow-xform-verts function)
|
||||
(define-extern shadow-calc-dual-verts function)
|
||||
|
||||
@@ -169,7 +169,6 @@
|
||||
"generic-tie-dma-to-spad-sync",
|
||||
|
||||
// shadow-cpu
|
||||
"shadow-execute",
|
||||
"shadow-add-double-edges",
|
||||
"shadow-add-double-tris",
|
||||
"shadow-add-single-edges",
|
||||
@@ -596,7 +595,24 @@
|
||||
"draw-large-polygon-ocean",
|
||||
"render-ocean-quad",
|
||||
"ocean-generate-verts",
|
||||
"ocean-interp-wave"
|
||||
"ocean-interp-wave",
|
||||
|
||||
// shadow
|
||||
"shadow-execute",
|
||||
"shadow-add-double-edges",
|
||||
"shadow-add-double-tris",
|
||||
"shadow-add-single-edges",
|
||||
"shadow-add-facing-single-tris",
|
||||
"shadow-add-verts",
|
||||
"shadow-find-double-edges",
|
||||
"shadow-find-facing-double-tris",
|
||||
"shadow-find-single-edges",
|
||||
"shadow-find-facing-single-tris",
|
||||
"shadow-init-vars",
|
||||
"shadow-scissor-top",
|
||||
"shadow-scissor-edges",
|
||||
"shadow-calc-dual-verts",
|
||||
"shadow-xform-verts"
|
||||
],
|
||||
|
||||
"mips2c_jump_table_functions": {
|
||||
|
||||
@@ -5486,5 +5486,11 @@
|
||||
|
||||
"ocean-mid-add-matrices": [[16, "vector"]],
|
||||
|
||||
"(method 15 shadow-control)": [
|
||||
[16, "collide-tri-result"],
|
||||
[112, "vector"],
|
||||
[128, "vector"]
|
||||
],
|
||||
|
||||
"placeholder-do-not-add-below!": []
|
||||
}
|
||||
|
||||
@@ -7586,5 +7586,110 @@
|
||||
[[30, 38], "a2", "dma-packet"]
|
||||
],
|
||||
|
||||
"draw-bones-shadow" : [
|
||||
[10, "t0", "terrain-context"],
|
||||
[[36, 100], "t0", "shadow-dma-packet"],
|
||||
[[53, 58], "t6", "(inline-array vector)"],
|
||||
[[64, 71], "a0", "vector"],
|
||||
[[103, 106], "v1", "dma-packet"]
|
||||
],
|
||||
|
||||
"shadow-execute-all" : [
|
||||
[108, "gp", "shadow-dcache"],
|
||||
[113, "gp", "shadow-dcache"],
|
||||
[118, "gp", "shadow-dcache"],
|
||||
[123, "gp", "shadow-dcache"],
|
||||
[[54, 58], "v1", "shadow-dcache"],
|
||||
[[86, 89], "v1", "dma-packet"]
|
||||
],
|
||||
|
||||
"shadow-dma-init": [
|
||||
[[25, 29], "t6", "dma-packet"],
|
||||
[[34,37], "t6", "gs-gif-tag"],
|
||||
[41, "t4", "(pointer gs-reg)"],
|
||||
[43, "t4", "(pointer gs-reg)"],
|
||||
[45, "t4", "(pointer gs-test)"],
|
||||
[47, "t4", "(pointer gs-reg)"],
|
||||
[49, "t4", "(pointer gs-alpha)"],
|
||||
[51, "t4", "(pointer gs-reg)"],
|
||||
[56, "t4", "(pointer gs-frame)"],
|
||||
[58, "t4", "(pointer gs-reg)"],
|
||||
[60, "t4", "(pointer gs-zbuf)"],
|
||||
[62, "t4", "(pointer gs-reg)"],
|
||||
[69, "t4", "(pointer gs-xy-offset)"],
|
||||
[71, "t4", "(pointer gs-reg)"],
|
||||
[77, "t4", "(pointer gs-tex0)"],
|
||||
[79, "t4", "(pointer gs-reg)"],
|
||||
[80, "t4", "(pointer gs-tex1)"],
|
||||
[82, "t4", "(pointer gs-reg)"],
|
||||
[83, "t4", "(pointer gs-miptbp)"],
|
||||
[85, "t4", "(pointer gs-reg)"],
|
||||
[94, "t4", "(pointer gs-clamp)"],
|
||||
[101, "t3", "gs-gif-tag"],
|
||||
[103, "t3", "gs-gif-tag"],
|
||||
[109, "t3", "(pointer gs-prim)"],
|
||||
[111, "t3", "(pointer gs-rgbaq)"],
|
||||
[[120, 123], "t3", "gs-gif-tag"],
|
||||
[141, "t5", "(pointer gs-xyzf)"],
|
||||
[154, "t5", "(pointer gs-xyzf)"],
|
||||
[[165, 168], "a3", "gs-gif-tag"],
|
||||
[175, "a3", "(pointer gs-test)"],
|
||||
[177, "a3", "(pointer gs-reg64)"],
|
||||
[179, "a3", "(pointer gs-zbuf)"],
|
||||
[181, "a3", "(pointer gs-reg64)"],
|
||||
[186, "a3", "(pointer gs-frame)"],
|
||||
[188, "a3", "(pointer gs-reg64)"],
|
||||
[189, "a3", "(pointer uint64)"],
|
||||
[191, "a3", "(pointer gs-reg64)"],
|
||||
[198, "a3", "(pointer gs-test)"],
|
||||
[200, "a3", "(pointer gs-reg64)"],
|
||||
[202, "a3", "(pointer gs-zbuf)"],
|
||||
[204, "a3", "(pointer gs-reg64)"],
|
||||
[209, "a3", "(pointer gs-frame)"],
|
||||
[211, "a3", "(pointer gs-reg64)"],
|
||||
[212, "a3", "(pointer uint64)"],
|
||||
[214, "a3", "(pointer gs-reg64)"],
|
||||
[[223, 234], "v1", "(pointer uint64)"]
|
||||
],
|
||||
|
||||
"shadow-dma-end": [
|
||||
[137, "f2", "int"],
|
||||
[[27, 32], "t3", "dma-packet"],
|
||||
[[38, 41], "t3", "gs-gif-tag"],
|
||||
[45, "t3", "(pointer uint64)"],
|
||||
[47, "t3", "(pointer gs-reg64)"],
|
||||
[49, "t3", "(pointer gs-test)"],
|
||||
[51, "t3", "(pointer gs-reg64)"],
|
||||
[56, "t3", "(pointer gs-frame)"],
|
||||
[58, "t3", "(pointer gs-reg64)"],
|
||||
[59, "t3", "(pointer uint64)"],
|
||||
[61, "t3", "(pointer gs-reg64)"],
|
||||
[[68, 73], "t4", "dma-packet"],
|
||||
[[111, 114], "t4", "gs-gif-tag"],
|
||||
[115, "t4", "(pointer gs-prim)"],
|
||||
[[107, 117], "t5", "gs-rgbaq"],
|
||||
// [[75, 106], "t4", "gs-rgbaq"]
|
||||
[116, "t4", "(pointer gs-rgbaq)"],
|
||||
[[121, 124], "t4", "(inline-array gs-gif-tag)"],
|
||||
[165, "t7", "(pointer gs-xyzf)"],
|
||||
[184, "t7", "(pointer gs-st)"],
|
||||
[197, "t7", "(pointer gs-xyzf)"],
|
||||
[[216, 222], "t2", "(pointer uint64)"],
|
||||
[[228, 232], "t0", "dma-packet"],
|
||||
[[238, 241], "t0", "gs-gif-tag"],
|
||||
[246, "t0", "(pointer gs-test)"],
|
||||
[248, "t0", "(pointer gs-reg64)"],
|
||||
[255, "t0", "(pointer gs-xy-offset)"],
|
||||
[257, "t0", "(pointer gs-reg64)"],
|
||||
[259, "t0", "(pointer gs-alpha)"],
|
||||
[261, "t0", "(pointer gs-reg64)"],
|
||||
[266, "t0", "(pointer gs-frame)"],
|
||||
[268, "t0", "(pointer gs-reg64)"],
|
||||
[270, "t0", "(pointer gs-zbuf)"],
|
||||
[272, "t0", "(pointer gs-reg64)"],
|
||||
[273, "t0", "(pointer uint64)"],
|
||||
[275, "t0", "(pointer gs-reg64)"]
|
||||
],
|
||||
|
||||
"placeholder-do-not-add-below": []
|
||||
}
|
||||
|
||||
@@ -52,6 +52,7 @@ set(RUNTIME_SOURCE
|
||||
mips2c/functions/ocean.cpp
|
||||
mips2c/functions/ocean_vu0.cpp
|
||||
mips2c/functions/ripple.cpp
|
||||
mips2c/functions/shadow.cpp
|
||||
mips2c/functions/sky_tng.cpp
|
||||
mips2c/functions/sparticle.cpp
|
||||
mips2c/functions/sparticle_launcher.cpp
|
||||
@@ -108,6 +109,7 @@ set(RUNTIME_SOURCE
|
||||
graphics/opengl_renderer/OpenGLRenderer.cpp
|
||||
graphics/opengl_renderer/Profiler.cpp
|
||||
graphics/opengl_renderer/Shader.cpp
|
||||
graphics/opengl_renderer/ShadowRenderer.cpp
|
||||
graphics/opengl_renderer/SkyBlendCPU.cpp
|
||||
graphics/opengl_renderer/SkyBlendGPU.cpp
|
||||
graphics/opengl_renderer/SkyRenderer.cpp
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "game/graphics/opengl_renderer/background/Tie3.h"
|
||||
#include "game/graphics/opengl_renderer/MercRenderer.h"
|
||||
#include "game/graphics/opengl_renderer/EyeRenderer.h"
|
||||
#include "game/graphics/opengl_renderer/ShadowRenderer.h"
|
||||
#include "game/graphics/opengl_renderer/GenericRenderer.h"
|
||||
#include "game/graphics/opengl_renderer/ocean/OceanMidAndFar.h"
|
||||
#include "game/graphics/opengl_renderer/ocean/OceanNear.h"
|
||||
@@ -183,8 +184,8 @@ void OpenGLRenderer::init_bucket_renderers() {
|
||||
BucketId::MERC_AFTER_ALPHA);
|
||||
|
||||
init_bucket_renderer<GenericRenderer>("common-alpha-generic", BucketCategory::GENERIC_MERC,
|
||||
BucketId::GENERIC_ALPHA); // 46
|
||||
// 47?
|
||||
BucketId::GENERIC_ALPHA); // 46
|
||||
init_bucket_renderer<ShadowRenderer>("shadow", BucketCategory::OTHER, BucketId::SHADOW); // 47
|
||||
|
||||
//-----------------------
|
||||
// LEVEL 0 pris texture
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
#include "ShadowRenderer.h"
|
||||
|
||||
ShadowRenderer::ShadowRenderer(const std::string& name, BucketId my_id)
|
||||
: BucketRenderer(name, my_id), m_direct(name, my_id, 0x4000) {}
|
||||
|
||||
void ShadowRenderer::draw_debug_window() {
|
||||
m_direct.draw_debug_window();
|
||||
}
|
||||
|
||||
void ShadowRenderer::render(DmaFollower& dma,
|
||||
SharedRenderState* render_state,
|
||||
ScopedProfilerNode& /*prof*/) {
|
||||
while (dma.current_tag_offset() != render_state->next_bucket) {
|
||||
dma.read_and_advance();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
#include "game/graphics/opengl_renderer/BucketRenderer.h"
|
||||
#include "game/graphics/opengl_renderer/DirectRenderer.h"
|
||||
|
||||
class ShadowRenderer : public BucketRenderer {
|
||||
public:
|
||||
ShadowRenderer(const std::string& name, BucketId my_id);
|
||||
void render(DmaFollower& dma, SharedRenderState* render_state, ScopedProfilerNode& prof) override;
|
||||
void draw_debug_window() override;
|
||||
|
||||
private:
|
||||
DirectRenderer m_direct;
|
||||
};
|
||||
@@ -50,7 +50,7 @@ enum class BucketId {
|
||||
// 44
|
||||
MERC_AFTER_ALPHA = 45,
|
||||
GENERIC_ALPHA = 46,
|
||||
// 47
|
||||
SHADOW = 47,
|
||||
PRIS_TEX_LEVEL0 = 48,
|
||||
MERC_PRIS_LEVEL0 = 49,
|
||||
GENERIC_PRIS_LEVEL0 = 50,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -652,6 +652,13 @@ struct ExecutionContext {
|
||||
}
|
||||
}
|
||||
|
||||
void psllh(int dest, int src, int sa) {
|
||||
auto s = gpr_src(src);
|
||||
for (int i = 0; i < 8; i++) {
|
||||
gprs[dest].ds16[i] = s.ds16[i] << (sa & 0x1f);
|
||||
}
|
||||
}
|
||||
|
||||
void prot3w(int dst, int src) {
|
||||
auto s = gpr_src(src);
|
||||
gprs[dst].du32[0] = s.du32[1];
|
||||
@@ -949,6 +956,10 @@ struct ExecutionContext {
|
||||
gprs[dst].du64[0] = (gpr_src(src0).du64[0] < gpr_src(src1).du64[0]) ? 1 : 0;
|
||||
}
|
||||
|
||||
void sltiu(int dst, int src, u64 imm) {
|
||||
gprs[dst].du64[0] = (gpr_src(src).du64[0] < imm) ? 1 : 0;
|
||||
}
|
||||
|
||||
void sll(int dst, int src, int sa) {
|
||||
u32 value = gpr_src(src).du32[0] << sa;
|
||||
s32 value_signed = value;
|
||||
|
||||
@@ -275,6 +275,51 @@ extern void link();
|
||||
namespace ocean_generate_verts {
|
||||
extern void link();
|
||||
}
|
||||
namespace shadow_execute {
|
||||
extern void link();
|
||||
}
|
||||
namespace shadow_add_double_edges {
|
||||
extern void link();
|
||||
}
|
||||
namespace shadow_add_double_tris {
|
||||
extern void link();
|
||||
}
|
||||
namespace shadow_add_single_edges {
|
||||
extern void link();
|
||||
}
|
||||
namespace shadow_add_facing_single_tris {
|
||||
extern void link();
|
||||
}
|
||||
namespace shadow_add_verts {
|
||||
extern void link();
|
||||
}
|
||||
namespace shadow_find_double_edges {
|
||||
extern void link();
|
||||
}
|
||||
namespace shadow_find_facing_double_tris {
|
||||
extern void link();
|
||||
}
|
||||
namespace shadow_find_single_edges {
|
||||
extern void link();
|
||||
}
|
||||
namespace shadow_find_facing_single_tris {
|
||||
extern void link();
|
||||
}
|
||||
namespace shadow_init_vars {
|
||||
extern void link();
|
||||
}
|
||||
namespace shadow_scissor_top {
|
||||
extern void link();
|
||||
}
|
||||
namespace shadow_scissor_edges {
|
||||
extern void link();
|
||||
}
|
||||
namespace shadow_calc_dual_verts {
|
||||
extern void link();
|
||||
}
|
||||
namespace shadow_xform_verts {
|
||||
extern void link();
|
||||
}
|
||||
LinkedFunctionTable gLinkedFunctionTable;
|
||||
Rng gRng;
|
||||
std::unordered_map<std::string, std::vector<void (*)()>> gMips2CLinkCallbacks = {
|
||||
@@ -321,7 +366,14 @@ std::unordered_map<std::string, std::vector<void (*)()>> gMips2CLinkCallbacks =
|
||||
{ripple_execute_init::link, ripple_create_wave_table::link, ripple_apply_wave_table::link,
|
||||
ripple_matrix_scale::link}},
|
||||
{"ocean", {init_ocean_far_regs::link, render_ocean_quad::link, draw_large_polygon_ocean::link}},
|
||||
{"ocean-vu0", {ocean_interp_wave::link, ocean_generate_verts::link}}};
|
||||
{"ocean-vu0", {ocean_interp_wave::link, ocean_generate_verts::link}},
|
||||
{"shadow-cpu",
|
||||
{shadow_execute::link, shadow_add_double_edges::link, shadow_add_double_tris::link,
|
||||
shadow_add_single_edges::link, shadow_add_facing_single_tris::link, shadow_add_verts::link,
|
||||
shadow_find_double_edges::link, shadow_find_facing_double_tris::link,
|
||||
shadow_find_single_edges::link, shadow_find_facing_single_tris::link, shadow_init_vars::link,
|
||||
shadow_scissor_top::link, shadow_scissor_edges::link, shadow_calc_dual_verts::link,
|
||||
shadow_xform_verts::link}}};
|
||||
|
||||
void LinkedFunctionTable::reg(const std::string& name, u64 (*exec)(void*), u32 stack_size) {
|
||||
const auto& it = m_executes.insert({name, {exec, Ptr<u8>()}});
|
||||
|
||||
@@ -380,8 +380,8 @@
|
||||
(format #t "Too many shadow-queues!!~%")
|
||||
)
|
||||
(let ((v1-13 (-> gp-1 run (-> gp-1 cur-run))))
|
||||
(set! (-> v1-13 first) (the-as uint 0))
|
||||
(set! (-> v1-13 next) (the-as uint 0))
|
||||
(set! (-> v1-13 first) (the-as dma-packet 0))
|
||||
(set! (-> v1-13 next) (the-as (pointer dma-packet) 0))
|
||||
)
|
||||
)
|
||||
0
|
||||
@@ -660,7 +660,109 @@
|
||||
)
|
||||
)
|
||||
|
||||
;; TODO draw-bones-shadow
|
||||
(defun draw-bones-shadow ((arg0 draw-control) (arg1 pointer) (arg2 pointer))
|
||||
;; (local-vars (ra-0 int))
|
||||
|
||||
;; the dma packet we'll use for shadow in the end.
|
||||
(let* ((v1-0 (the-as dma-packet (&+ arg2 0)))
|
||||
;; the shadow to draw
|
||||
(t1-0 (-> arg0 shadow))
|
||||
;; the shadow run to add to
|
||||
(a3-4 (-> *shadow-queue* run (-> *shadow-queue* cur-run)))
|
||||
;; the dma data to add to
|
||||
(a2-1 (&+ arg2 16))
|
||||
;; the distance of the thing we're drawing
|
||||
(t4-0 (-> (scratchpad-object terrain-context) work foreground bone-mem work distance w))
|
||||
;; the shadow packet we'll build here
|
||||
(t0-2 (the-as shadow-dma-packet a2-1))
|
||||
(t2-0 (-> t1-0 header num-joints))
|
||||
(t3-0 (-> a3-4 next))
|
||||
(t5-2 (if (-> arg0 shadow-ctrl)
|
||||
(-> arg0 shadow-ctrl settings)
|
||||
*default-shadow-settings*
|
||||
)
|
||||
)
|
||||
(t6-0 (-> t5-2 flags))
|
||||
)
|
||||
(-> arg0 cur-lod)
|
||||
(when (zero? (logand t6-0 2))
|
||||
(if (< (-> t5-2 fade-dist) t4-0)
|
||||
(set! t6-0 (logior t6-0 32))
|
||||
)
|
||||
)
|
||||
(cond
|
||||
((zero? (logand t6-0 32))
|
||||
(let ((t2-1 (* t2-0 8))
|
||||
(t4-4 (-> t1-0 total-size))
|
||||
)
|
||||
0
|
||||
(set! (-> t0-2 tag dma) (new 'static 'dma-tag :qwc #x5 :id (dma-tag-id cnt)))
|
||||
(set! (-> t0-2 tag vif0) (new 'static 'vif-tag))
|
||||
(set! (-> t0-2 tag vif1) (new 'static 'vif-tag))
|
||||
(if (nonzero? t3-0)
|
||||
(set! (-> t3-0 0) (the-as dma-packet t0-2))
|
||||
)
|
||||
(if (zero? (-> a3-4 first))
|
||||
(set! (-> a3-4 first) (the-as dma-packet t0-2))
|
||||
)
|
||||
(let ((t3-5 (&-> t0-2 tag vif1)))
|
||||
(let ((t6-4 (the-as (inline-array vector) (-> t0-2 settings)))
|
||||
(t7-3 (-> t5-2 center quad))
|
||||
(t8-0 (-> t5-2 shadow-dir quad))
|
||||
(t9-0 (-> t5-2 bot-plane quad))
|
||||
(ra-0 (-> t5-2 top-plane quad))
|
||||
)
|
||||
;; (.lq ra-0 48 t5-2)
|
||||
(let ((t5-3 (-> t5-2 fade-vec quad)))
|
||||
(set! (-> t6-4 0 quad) t7-3)
|
||||
(set! (-> t6-4 1 quad) t8-0)
|
||||
(set! (-> t6-4 2 quad) t9-0)
|
||||
(set! (-> t6-4 3 quad) ra-0)
|
||||
(set! (-> t6-4 4 quad) t5-3)
|
||||
)
|
||||
)
|
||||
(let ((a0-3
|
||||
(the-as
|
||||
vector
|
||||
(+ (the-as uint (-> arg0 skeleton bones 0 transform vector 3))
|
||||
(* (the-as uint 96) (-> arg0 shadow-joint-index))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(set! (-> t0-2 settings center x) (-> a0-3 x))
|
||||
(set! (-> t0-2 settings center y) (-> a0-3 y))
|
||||
(set! (-> t0-2 settings center z) (-> a0-3 z))
|
||||
)
|
||||
(set! (-> t0-2 geo-ref dma)
|
||||
(new 'static 'dma-tag :id (dma-tag-id ref) :addr (the-as int (&-> t1-0 total-size)) :qwc t4-4)
|
||||
)
|
||||
(set! (-> t0-2 geo-ref vif0) (new 'static 'vif-tag))
|
||||
(set! (-> t0-2 geo-ref vif1) (new 'static 'vif-tag))
|
||||
(set! (-> t0-2 mtx-ref dma)
|
||||
(new 'static 'dma-tag :id (dma-tag-id ref) :addr (the-as int (&+ arg1 256)) :qwc t2-1)
|
||||
)
|
||||
(set! (-> t0-2 mtx-ref vif0) (new 'static 'vif-tag))
|
||||
(set! (-> t0-2 mtx-ref vif1) (new 'static 'vif-tag))
|
||||
(set! (-> t0-2 end-tag dma) (new 'static 'dma-tag :id (dma-tag-id end)))
|
||||
(set! (-> t0-2 end-tag vif0) (new 'static 'vif-tag))
|
||||
(set! (-> t0-2 end-tag vif1) (new 'static 'vif-tag))
|
||||
(let ((v0-0 (&+ a2-1 144)))
|
||||
(set! (-> a3-4 next) (the-as (pointer dma-packet) t3-5))
|
||||
(set! (-> v1-0 dma) (new 'static 'dma-tag :id (dma-tag-id next) :addr (the-as int v0-0)))
|
||||
(set! (-> v1-0 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> v1-0 vif1) (new 'static 'vif-tag))
|
||||
v0-0
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(else
|
||||
(the-as pointer v1-0)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;(def-mips2c draw-bones-generic-merc (function draw-control pointer pointer int pointer))
|
||||
(defun draw-bones-generic-merc ((arg0 draw-control) (arg1 pointer) (arg2 pointer) (arg3 int))
|
||||
@@ -1198,12 +1300,12 @@
|
||||
|
||||
;; draw shadow!
|
||||
;; TODO
|
||||
; (when (-> arg0 shadow)
|
||||
; (when #t
|
||||
; (set! s2-0 (draw-bones-shadow arg0 matrix-data s2-0))
|
||||
; (set! (-> dma-buf base) (the-as pointer s2-0))
|
||||
; )
|
||||
; )
|
||||
(when (-> arg0 shadow)
|
||||
(when #t
|
||||
(set! s2-0 (draw-bones-shadow arg0 (the pointer matrix-data) (the pointer s2-0)))
|
||||
(set! (-> dma-buf base) (the-as pointer s2-0))
|
||||
)
|
||||
)
|
||||
|
||||
;; draw merc!
|
||||
|
||||
|
||||
@@ -259,6 +259,8 @@
|
||||
|
||||
(bucket-45 45) ;; merc
|
||||
(bucket-46 46)
|
||||
|
||||
(shadow 47)
|
||||
|
||||
(pris-tex0 48)
|
||||
(bucket-49 49) ;; merc
|
||||
|
||||
@@ -1140,7 +1140,7 @@
|
||||
(let ((gp-9 (-> *display* frames (-> *display* on-screen) frame global-buf)))
|
||||
(bones-mtx-calc-execute) ;; skinning matrix calculation
|
||||
(generic-merc-execute-all gp-9) ;; mercneric conversion.
|
||||
;;(shadow-execute-all gp-9 *shadow-queue*)
|
||||
(shadow-execute-all gp-9 *shadow-queue*)
|
||||
(update-eyes)
|
||||
)
|
||||
|
||||
|
||||
@@ -1435,8 +1435,8 @@
|
||||
(let ((gp-0 (-> obj draw shadow-ctrl)))
|
||||
(cond
|
||||
((and (-> obj draw shadow) (zero? (-> obj draw cur-lod)) (logtest? (-> obj draw status) (draw-status was-drawn)))
|
||||
;(dummy-15 gp-0 (-> obj draw origin) -4096.0 4096.0 32768.0)
|
||||
(dummy-14 gp-0)
|
||||
(collide-to-find-planes gp-0 (-> obj draw origin) -4096.0 4096.0 32768.0)
|
||||
(update-direction-from-time-of-day gp-0)
|
||||
)
|
||||
(else
|
||||
(let ((v1-10 gp-0))
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
(fade-start float :offset-assert 68)
|
||||
(dummy-2 int32 :offset-assert 72)
|
||||
(dummy-3 int32 :offset-assert 76)
|
||||
(fade-vec vector :inline :offset 64) ;; added
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x50
|
||||
@@ -35,8 +36,8 @@
|
||||
(set-top-plane-offset (shadow-control float) int 11)
|
||||
(set-bottom-plane-offset (shadow-control float) int 12)
|
||||
(dummy-13 (_type_) none 13)
|
||||
(dummy-14 (_type_) none 14)
|
||||
(dummy-15 (_type_ vector float float float) none 15)
|
||||
(update-direction-from-time-of-day (_type_) none 14)
|
||||
(collide-to-find-planes (_type_ vector float float float) none 15)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -74,9 +75,9 @@
|
||||
(texscale vector :inline :offset-assert 16)
|
||||
(clrs vector 2 :inline :offset-assert 32)
|
||||
(dma-unpack-template dma-packet :inline :offset-assert 64)
|
||||
(dma-cnt uint64 :offset-assert 80)
|
||||
(vif-nop uint32 :offset-assert 88)
|
||||
(vif-unpack-v4-8 uint32 :offset-assert 92)
|
||||
(dma-cnt dma-tag :offset-assert 80)
|
||||
(vif-nop vif-tag :offset-assert 88)
|
||||
(vif-unpack-v4-8 vif-tag :offset-assert 92)
|
||||
(pdc basic :offset-assert 96)
|
||||
(dist float :offset-assert 100)
|
||||
(oddeven uint8 :offset-assert 104)
|
||||
@@ -97,8 +98,8 @@
|
||||
)
|
||||
|
||||
(deftype shadow-run (structure)
|
||||
((first uint32 :offset-assert 0)
|
||||
(next uint32 :offset-assert 4)
|
||||
((first dma-packet :offset-assert 0)
|
||||
(next (pointer dma-packet) :offset-assert 4)
|
||||
)
|
||||
:allow-misaligned
|
||||
:method-count-assert 9
|
||||
|
||||
@@ -5,13 +5,577 @@
|
||||
;; name in dgo: shadow-cpu
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
;; TODO - for video
|
||||
(define-extern *shadow-data* shadow-data)
|
||||
(defmethod asize-of shadow-geo ((obj shadow-geo))
|
||||
(the-as int (-> obj total-size))
|
||||
)
|
||||
|
||||
;; todo
|
||||
(define *shadow-data* (new 'static 'shadow-data))
|
||||
(defmethod mem-usage shadow-geo ((obj shadow-geo) (arg0 memory-usage-block) (arg1 int))
|
||||
(set! (-> arg0 length) (max 108 (-> arg0 length)))
|
||||
(set! (-> arg0 data 107 name) "shadow-geo")
|
||||
(+! (-> arg0 data 107 count) 1)
|
||||
(let ((v1-5 (-> obj total-size)))
|
||||
(+! (-> arg0 data 107 used) v1-5)
|
||||
(+! (-> arg0 data 107 total) (logand -16 (+ v1-5 15)))
|
||||
)
|
||||
obj
|
||||
)
|
||||
|
||||
(defmethod dummy-14 shadow-control ((obj shadow-control))
|
||||
(define *shadow-data* (new 'static 'shadow-data
|
||||
:texoffset (new 'static 'vector :x 256.5 :y 112.5)
|
||||
:texscale
|
||||
(new 'static 'vector :x 0.001953125 :y 0.00390625)
|
||||
:clrs
|
||||
(new 'static 'inline-array vector 2
|
||||
(new 'static 'vector :x (the-as float #x80) :w (the-as float #x82))
|
||||
(new 'static 'vector :y (the-as float #x80) :w (the-as float #x7f))
|
||||
)
|
||||
:dma-unpack-template
|
||||
(new 'static 'dma-packet
|
||||
:dma
|
||||
(new 'static 'dma-tag :id (dma-tag-id cnt))
|
||||
:vif0
|
||||
(new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1)
|
||||
:vif1
|
||||
(new 'static 'vif-tag :cmd (vif-cmd unpack-v4-32))
|
||||
)
|
||||
:dma-cnt
|
||||
(new 'static 'dma-tag :id (dma-tag-id cnt))
|
||||
:vif-unpack-v4-8
|
||||
(new 'static 'vif-tag :cmd (vif-cmd unpack-v4-8))
|
||||
)
|
||||
)
|
||||
|
||||
(defun shadow-dma-init ((arg0 dma-buffer))
|
||||
(let* ((v1-0 *display*)
|
||||
(a1-2 (-> v1-0 frames (-> v1-0 on-screen) draw frame1 fbp))
|
||||
)
|
||||
(* a1-2 32)
|
||||
(let ((t3-0 512)
|
||||
(t2-0 (-> *video-parms* screen-sy))
|
||||
(a2-0 1792)
|
||||
(a3-0 (-> *video-parms* screen-miny))
|
||||
)
|
||||
2304
|
||||
(let ((t0-0 (-> *video-parms* screen-maxy))
|
||||
(t1-0 (/ t3-0 32))
|
||||
(t5-0 (* a3-0 16))
|
||||
(v1-11 (-> arg0 base))
|
||||
)
|
||||
(let* ((t4-0 arg0)
|
||||
(t6-0 (the-as object (-> t4-0 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet t6-0) dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet t6-0) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet t6-0) vif1) (new 'static 'vif-tag :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> t4-0 base) (&+ (the-as pointer t6-0) 16))
|
||||
)
|
||||
(let* ((t4-1 arg0)
|
||||
(t6-2 (the-as object (-> t4-1 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t6-2) tag) (new 'static 'gif-tag64 :nloop #xa :eop #x1 :nreg #x1))
|
||||
(set! (-> (the-as gs-gif-tag t6-2) regs) (new 'static 'gif-tag-regs :regs0 (gif-reg-id a+d)))
|
||||
(set! (-> t4-1 base) (&+ (the-as pointer t6-2) 16))
|
||||
)
|
||||
(let ((t4-2 (-> arg0 base)))
|
||||
(set! (-> (the-as (pointer gs-reg) t4-2) 8) (gs-reg texflush))
|
||||
(set! (-> (the-as (pointer gs-reg) t4-2) 24) (gs-reg test-1))
|
||||
(set! (-> (the-as (pointer gs-test) t4-2) 2)
|
||||
(new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg) t4-2) 40) (gs-reg alpha-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) t4-2) 4) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg) t4-2) 56) (gs-reg frame-1))
|
||||
(set! (-> (the-as (pointer gs-frame) t4-2) 6) (new 'static 'gs-frame :fbw #x8 :fbmsk #xffffff :fbp a1-2))
|
||||
(set! (-> (the-as (pointer gs-reg) t4-2) 72) (gs-reg zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-zbuf) t4-2) 8) (new 'static 'gs-zbuf :zbp #x1c0 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(set! (-> (the-as (pointer gs-reg) t4-2) 88) (gs-reg xyoffset-1))
|
||||
(set! (-> (the-as (pointer gs-xy-offset) t4-2) 10) (new 'static 'gs-xy-offset :ofx (* a2-0 16) :ofy t5-0))
|
||||
(set! (-> (the-as (pointer gs-reg) t4-2) 104) (gs-reg tex0-1))
|
||||
(set! (-> (the-as (pointer gs-tex0) t4-2) 12)
|
||||
(new 'static 'gs-tex0 :tbw #x8 :tw #x9 :th #x8 :tcc #x1 :tbp0 (* a1-2 32))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg) t4-2) 120) (gs-reg tex1-1))
|
||||
(set! (-> (the-as (pointer gs-tex1) t4-2) 14) (new 'static 'gs-tex1))
|
||||
(set! (-> (the-as (pointer gs-reg) t4-2) 136) (gs-reg miptbp1-1))
|
||||
(set! (-> (the-as (pointer gs-miptbp) t4-2) 16) (new 'static 'gs-miptbp))
|
||||
(set! (-> (the-as (pointer gs-reg) t4-2) 152) (gs-reg clamp-1))
|
||||
(set! (-> (the-as (pointer gs-clamp) t4-2) 18)
|
||||
(new 'static 'gs-clamp
|
||||
:wms (gs-tex-wrap-mode region-clamp)
|
||||
:wmt (gs-tex-wrap-mode region-clamp)
|
||||
:maxv (+ t2-0 -1)
|
||||
:maxu (+ t3-0 -1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(&+! (-> arg0 base) 160)
|
||||
(let* ((t2-7 arg0)
|
||||
(t3-5 (the-as object (-> t2-7 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t3-5) tag)
|
||||
(new 'static 'gif-tag64 :nloop #x1 :eop #x1 :flg (gif-flag reg-list) :nreg #x2)
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t3-5) regs) (new 'static 'gif-tag-regs :regs1 (gif-reg-id rgbaq)))
|
||||
(set! (-> t2-7 base) (&+ (the-as pointer t3-5) 16))
|
||||
)
|
||||
(let* ((t2-8 arg0)
|
||||
(t3-7 (-> t2-8 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-prim) t3-7) 0) (new 'static 'gs-prim :prim (gs-prim-type sprite)))
|
||||
(set! (-> (the-as (pointer gs-rgbaq) t3-7) 1) (new 'static 'gs-rgbaq :a #x60))
|
||||
(set! (-> t2-8 base) (&+ t3-7 16))
|
||||
)
|
||||
(let* ((t2-9 arg0)
|
||||
(t3-9 (the-as object (-> t2-9 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t3-9) tag)
|
||||
(new 'static 'gif-tag64 :eop #x1 :flg (gif-flag reg-list) :nreg #x2 :nloop t1-0)
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t3-9) regs)
|
||||
(new 'static 'gif-tag-regs :regs0 (gif-reg-id xyz2) :regs1 (gif-reg-id xyz2))
|
||||
)
|
||||
(set! (-> t2-9 base) (&+ (the-as pointer t3-9) 16))
|
||||
)
|
||||
(let ((t2-10 0))
|
||||
(dotimes (t3-11 t1-0)
|
||||
(let* ((t4-10 arg0)
|
||||
(t5-12 (-> t4-10 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-xyzf) t5-12) 0)
|
||||
(new 'static 'gs-xyzf :z #x1ffff :y (* a3-0 16) :x (* (+ a2-0 t2-10) 16))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-xyzf) t5-12) 1)
|
||||
(new 'static 'gs-xyzf :z #x1ffff :y (* t0-0 16) :x (* (+ t2-10 32 a2-0) 16))
|
||||
)
|
||||
(set! (-> t4-10 base) (&+ t5-12 16))
|
||||
)
|
||||
(+! t2-10 32)
|
||||
)
|
||||
)
|
||||
(let* ((a2-3 arg0)
|
||||
(a3-1 (the-as object (-> a2-3 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag a3-1) tag) (new 'static 'gif-tag64 :nloop #x4 :eop #x1 :nreg #x1))
|
||||
(set! (-> (the-as gs-gif-tag a3-1) regs) (new 'static 'gif-tag-regs :regs0 (gif-reg-id a+d)))
|
||||
(set! (-> a2-3 base) (&+ (the-as pointer a3-1) 16))
|
||||
)
|
||||
(cond
|
||||
(*shadow-debug*
|
||||
(let* ((a2-5 arg0)
|
||||
(a3-3 (-> a2-5 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a3-3) 0)
|
||||
(new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest greater-equal))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a3-3) 1) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-zbuf) a3-3) 2) (new 'static 'gs-zbuf :zbp #x1c0 :psm (gs-psm ct24)))
|
||||
(set! (-> (the-as (pointer gs-reg64) a3-3) 3) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-frame) a3-3) 4) (new 'static 'gs-frame :fbw #x8 :fbp a1-2))
|
||||
(set! (-> (the-as (pointer gs-reg64) a3-3) 5) (gs-reg64 frame-1))
|
||||
(set! (-> (the-as (pointer uint64) a3-3) 6) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) a3-3) 7) (gs-reg64 texflush))
|
||||
(set! (-> a2-5 base) (&+ a3-3 64))
|
||||
)
|
||||
)
|
||||
(else
|
||||
(let* ((a2-6 arg0)
|
||||
(a3-4 (-> a2-6 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a3-4) 0)
|
||||
(new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest greater-equal))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a3-4) 1) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-zbuf) a3-4) 2) (new 'static 'gs-zbuf :zbp #x1c0 :psm (gs-psm ct24) :zmsk #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a3-4) 3) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer gs-frame) a3-4) 4) (new 'static 'gs-frame :fbw #x8 :fbmsk #xffffff :fbp a1-2))
|
||||
(set! (-> (the-as (pointer gs-reg64) a3-4) 5) (gs-reg64 frame-1))
|
||||
(set! (-> (the-as (pointer uint64) a3-4) 6) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) a3-4) 7) (gs-reg64 texflush))
|
||||
(set! (-> a2-6 base) (&+ a3-4 64))
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((a2-10 (/ (the-as int (+ (- -16 (the-as int v1-11)) (the-as int (-> arg0 base)))) 16)))
|
||||
(cond
|
||||
((nonzero? a2-10)
|
||||
(logior! (-> (the-as (pointer uint64) v1-11) 0) (shr (shl a2-10 48) 48))
|
||||
(logior! (-> (the-as (pointer uint64) v1-11) 1) (shl (shr (shl a2-10 48) 48) 32))
|
||||
)
|
||||
(else
|
||||
(set! (-> arg0 base) v1-11)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(none)
|
||||
)
|
||||
|
||||
(defun shadow-dma-end ((arg0 dma-buffer))
|
||||
(local-vars (t9-2 int) (ra-0 int) (ra-1 int) (ra-2 int))
|
||||
(let* ((v1-0 *display*)
|
||||
(v1-5 (-> v1-0 frames (-> v1-0 on-screen) draw frame1 fbp))
|
||||
)
|
||||
(* v1-5 32)
|
||||
(let ((a2-0 512)
|
||||
(a3-0 (-> *video-parms* screen-sy))
|
||||
(a1-5 1792)
|
||||
(t0-1 (-> *video-parms* screen-miny))
|
||||
)
|
||||
2304
|
||||
(-> *video-parms* screen-maxy)
|
||||
(let ((t1-3 (/ a2-0 32))
|
||||
(a2-3 (+ (* *oddeven* 8) (* t0-1 16)))
|
||||
)
|
||||
(let* ((t2-1 arg0)
|
||||
(t3-0 (the-as object (-> t2-1 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet t3-0) dma) (new 'static 'dma-tag :qwc #x5 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet t3-0) vif0) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1))
|
||||
(set! (-> (the-as dma-packet t3-0) vif1) (new 'static 'vif-tag :imm #x5 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> t2-1 base) (&+ (the-as pointer t3-0) 16))
|
||||
)
|
||||
(let* ((t2-2 arg0)
|
||||
(t3-2 (the-as object (-> t2-2 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t3-2) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x4))
|
||||
(set! (-> (the-as gs-gif-tag t3-2) regs)
|
||||
(new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id a+d)
|
||||
:regs1 (gif-reg-id a+d)
|
||||
:regs2 (gif-reg-id a+d)
|
||||
:regs3 (gif-reg-id a+d)
|
||||
:regs4 (gif-reg-id a+d)
|
||||
:regs5 (gif-reg-id a+d)
|
||||
:regs6 (gif-reg-id a+d)
|
||||
:regs7 (gif-reg-id a+d)
|
||||
:regs8 (gif-reg-id a+d)
|
||||
:regs9 (gif-reg-id a+d)
|
||||
:regs10 (gif-reg-id a+d)
|
||||
:regs11 (gif-reg-id a+d)
|
||||
:regs12 (gif-reg-id a+d)
|
||||
:regs13 (gif-reg-id a+d)
|
||||
:regs14 (gif-reg-id a+d)
|
||||
:regs15 (gif-reg-id a+d)
|
||||
)
|
||||
)
|
||||
(set! (-> t2-2 base) (&+ (the-as pointer t3-2) 16))
|
||||
)
|
||||
(let* ((t2-3 arg0)
|
||||
(t3-4 (-> t2-3 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer uint64) t3-4) 0) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 1) (gs-reg64 texflush))
|
||||
(set! (-> (the-as (pointer gs-test) t3-4) 2)
|
||||
(new 'static 'gs-test :ate #x1 :atst (gs-atest not-equal) :aref #x60 :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 3) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-frame) t3-4) 4) (new 'static 'gs-frame :fbw #x8 :fbp v1-5))
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 5) (gs-reg64 frame-1))
|
||||
(set! (-> (the-as (pointer uint64) t3-4) 6) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) t3-4) 7) (gs-reg64 texflush))
|
||||
(set! (-> t2-3 base) (&+ t3-4 64))
|
||||
)
|
||||
(let ((t2-4 (-> arg0 base)))
|
||||
(let* ((t3-6 arg0)
|
||||
(t4-13 (the-as object (-> t3-6 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet t4-13) dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet t4-13) vif0) (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1))
|
||||
(set! (-> (the-as dma-packet t4-13) vif1) (new 'static 'vif-tag :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> t3-6 base) (&+ (the-as pointer t4-13) 16))
|
||||
)
|
||||
(let* ((t4-15 (the-as uint #x3f80000080404040))
|
||||
(t3-8 (-> *time-of-day-context* current-shadow-color))
|
||||
(t5-14
|
||||
(the-as
|
||||
gs-rgbaq
|
||||
(logior (logand (logior (logand (logior (logand t4-15 -256) (shr (shl (the int (* 128.0 (-> t3-8 x))) 56) 56)) -65281)
|
||||
(shr (shl (the int (* 128.0 (-> t3-8 y))) 56) 48)
|
||||
)
|
||||
-16711681
|
||||
)
|
||||
(shr (shl (the int (* 128.0 (-> t3-8 z))) 56) 40)
|
||||
)
|
||||
)
|
||||
)
|
||||
(t3-12 arg0)
|
||||
(t4-21 (the-as object (-> t3-12 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t4-21) tag)
|
||||
(new 'static 'gif-tag64 :nloop #x1 :flg (gif-flag reg-list) :nreg #x2)
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t4-21) regs) (new 'static 'gif-tag-regs :regs1 (gif-reg-id rgbaq)))
|
||||
(set! (-> (the-as (pointer gs-prim) t4-21) 2)
|
||||
(new 'static 'gs-prim :prim (gs-prim-type sprite) :tme #x1 :abe #x1)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-rgbaq) t4-21) 3) t5-14)
|
||||
(set! (-> (the-as (inline-array gs-gif-tag) t4-21) 2 tag)
|
||||
(new 'static 'gif-tag64 :eop #x1 :flg (gif-flag reg-list) :nreg #x4 :nloop t1-3)
|
||||
)
|
||||
(set! (-> (the-as (inline-array gs-gif-tag) t4-21) 2 regs)
|
||||
(new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id st)
|
||||
:regs1 (gif-reg-id xyz2)
|
||||
:regs2 (gif-reg-id st)
|
||||
:regs3 (gif-reg-id xyz2)
|
||||
)
|
||||
)
|
||||
(set! (-> t3-12 base) (&+ (the-as pointer t4-21) 48))
|
||||
)
|
||||
(let ((t3-13 0)
|
||||
(t4-23 0)
|
||||
)
|
||||
(dotimes (t5-18 t1-3)
|
||||
(let ((t8-0 t3-13))
|
||||
(+! t3-13 32)
|
||||
(let* ((t6-5 arg0)
|
||||
(t7-0 (-> t6-5 base))
|
||||
)
|
||||
(let ((t9-1 (shl (the-as int (* 0.00390625 (+ 0.5 (the float (the-as int t4-23))))) 32)))
|
||||
(let ((f0-12 (* 0.001953125 (+ 0.5 (the float t8-0)))))
|
||||
(.mov ra-0 f0-12)
|
||||
)
|
||||
;;(.dsll32 ra-1 ra-0 0)
|
||||
(set! ra-1 (shl ra-0 32))
|
||||
;;(.dsrl32 ra-2 ra-1 0)
|
||||
(set! ra-2 (shr ra-1 32))
|
||||
;(.or t9-2 t9-1 ra-2)
|
||||
(set! t9-2 (logior t9-1 ra-2))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) t7-0)) t9-2)
|
||||
(set! (-> (the-as (pointer gs-xyzf) t7-0) 1)
|
||||
(new 'static 'gs-xyzf :z #x1ffff :y (* (+ t0-1 t4-23) 16) :x (* (+ a1-5 t8-0) 16))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-st) t7-0) 2)
|
||||
(new 'static 'gs-st
|
||||
:s (* 0.001953125 (+ 0.5 (the float t3-13)))
|
||||
:t (* 0.00390625 (+ 0.5 (the float a3-0)))
|
||||
)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-xyzf) t7-0) 3)
|
||||
(new 'static 'gs-xyzf :z #x1ffff :y (* (+ t0-1 a3-0) 16) :x (* (+ a1-5 t3-13) 16))
|
||||
)
|
||||
(set! (-> t6-5 base) (&+ t7-0 32))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((t0-5 (/ (the-as int (+ (- -16 (the-as int t2-4)) (the-as int (-> arg0 base)))) 16)))
|
||||
(cond
|
||||
((nonzero? t0-5)
|
||||
(logior! (-> (the-as (pointer uint64) t2-4)) (shr (shl t0-5 48) 48))
|
||||
(logior! (-> (the-as (pointer uint64) t2-4) 1) (shl (shr (shl t0-5 48) 48) 32))
|
||||
)
|
||||
(else
|
||||
(set! (-> arg0 base) t2-4)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let* ((a3-3 arg0)
|
||||
(t0-11 (the-as object (-> a3-3 base)))
|
||||
)
|
||||
(set! (-> (the-as dma-packet t0-11) dma) (new 'static 'dma-tag :qwc #x7 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet t0-11) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet t0-11) vif1) (new 'static 'vif-tag :imm #x7 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> a3-3 base) (&+ (the-as pointer t0-11) 16))
|
||||
)
|
||||
(let* ((a3-4 arg0)
|
||||
(t0-13 (the-as object (-> a3-4 base)))
|
||||
)
|
||||
(set! (-> (the-as gs-gif-tag t0-13) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x6))
|
||||
(set! (-> (the-as gs-gif-tag t0-13) regs) (new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id a+d)
|
||||
:regs1 (gif-reg-id a+d)
|
||||
:regs2 (gif-reg-id a+d)
|
||||
:regs3 (gif-reg-id a+d)
|
||||
:regs4 (gif-reg-id a+d)
|
||||
:regs5 (gif-reg-id a+d)
|
||||
:regs6 (gif-reg-id a+d)
|
||||
:regs7 (gif-reg-id a+d)
|
||||
:regs8 (gif-reg-id a+d)
|
||||
:regs9 (gif-reg-id a+d)
|
||||
:regs10 (gif-reg-id a+d)
|
||||
:regs11 (gif-reg-id a+d)
|
||||
:regs12 (gif-reg-id a+d)
|
||||
:regs13 (gif-reg-id a+d)
|
||||
:regs14 (gif-reg-id a+d)
|
||||
:regs15 (gif-reg-id a+d)
|
||||
)
|
||||
)
|
||||
(set! (-> a3-4 base) (&+ (the-as pointer t0-13) 16))
|
||||
)
|
||||
(let* ((a3-5 arg0)
|
||||
(t0-15 (-> a3-5 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) t0-15) 0)
|
||||
(new 'static 'gs-test :atst (gs-atest not-equal) :zte #x1 :ztst (gs-ztest greater-equal))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) t0-15) 1) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-xy-offset) t0-15) 2) (new 'static 'gs-xy-offset :ofx (* a1-5 16) :ofy a2-3))
|
||||
(set! (-> (the-as (pointer gs-reg64) t0-15) 3) (gs-reg64 xyoffset-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) t0-15) 4) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) t0-15) 5) (gs-reg64 alpha-1))
|
||||
(set! (-> (the-as (pointer gs-frame) t0-15) 6) (new 'static 'gs-frame :fbw #x8 :fbp v1-5))
|
||||
(set! (-> (the-as (pointer gs-reg64) t0-15) 7) (gs-reg64 frame-1))
|
||||
(set! (-> (the-as (pointer gs-zbuf) t0-15) 8) (new 'static 'gs-zbuf :zbp #x1c0 :psm (gs-psm ct24)))
|
||||
(set! (-> (the-as (pointer gs-reg64) t0-15) 9) (gs-reg64 zbuf-1))
|
||||
(set! (-> (the-as (pointer uint64) t0-15) 10) (the-as uint 0))
|
||||
(set! (-> (the-as (pointer gs-reg64) t0-15) 11) (gs-reg64 texflush))
|
||||
(set! (-> a3-5 base) (&+ t0-15 96))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(none)
|
||||
)
|
||||
|
||||
(deftype shadow-stats (structure)
|
||||
((num-single-tris uint32 :offset-assert 0)
|
||||
(num-double-tris uint32 :offset-assert 4)
|
||||
(num-single-edges uint32 :offset-assert 8)
|
||||
(num-double-edges uint32 :offset-assert 12)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x10
|
||||
:flag-assert #x900000010
|
||||
)
|
||||
|
||||
(deftype shadow-dcache (structure)
|
||||
((vtx-table uint32 :offset-assert 0)
|
||||
(single-edge-table uint32 :offset-assert 4)
|
||||
(double-edge-table uint32 :offset-assert 8)
|
||||
(double-tri-table uint32 :offset-assert 12)
|
||||
(dcache-top uint32 :offset-assert 16)
|
||||
(num-facing-single-tris uint32 :offset-assert 20)
|
||||
(num-single-edges uint32 :offset-assert 24)
|
||||
(num-double-edges uint32 :offset-assert 28)
|
||||
(single-tri-list uint32 :offset-assert 32)
|
||||
(single-edge-list uint32 :offset-assert 36)
|
||||
(double-edge-list uint32 :offset-assert 40)
|
||||
(ptr-dual-verts uint32 :offset-assert 44)
|
||||
(stats shadow-stats :inline :offset-assert 48)
|
||||
(center vector :inline :offset-assert 64)
|
||||
(plane vector :inline :offset-assert 80)
|
||||
(top-plane vector :inline :offset-assert 96)
|
||||
(near-plane vector :inline :offset-assert 112)
|
||||
(light-dir vector :inline :offset-assert 128)
|
||||
(vtx-min vector :inline :offset-assert 144)
|
||||
(data uint8 :dynamic :offset-assert 160)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #xa0
|
||||
:flag-assert #x9000000a0
|
||||
)
|
||||
|
||||
(define shadow-vu0-block (new 'static 'vu-function #|:length 88 :qlength 44|#))
|
||||
|
||||
(def-mips2c shadow-xform-verts function)
|
||||
(def-mips2c shadow-execute (function shadow-dma-packet pointer pointer))
|
||||
|
||||
(defun shadow-vu0-upload ()
|
||||
(#unless PC_PORT
|
||||
(let ((gp-0 *vu0-dma-list*))
|
||||
(let ((v1-0 gp-0))
|
||||
(set! (-> v1-0 base) (-> v1-0 data))
|
||||
(set! (-> v1-0 end) (&-> v1-0 data-buffer (-> v1-0 allocated-length)))
|
||||
)
|
||||
(dma-buffer-add-vu-function gp-0 shadow-vu0-block 0)
|
||||
(let* ((v1-1 gp-0)
|
||||
(a0-5 (-> v1-1 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-5)) #x70000000)
|
||||
(s.d! (+ a0-5 8) 0)
|
||||
(set! (-> v1-1 base) (&+ a0-5 16))
|
||||
)
|
||||
(.sync.l)
|
||||
(dma-buffer-send-chain (the-as dma-bank-source #x10008000) gp-0)
|
||||
)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
(defun shadow-execute-all ((arg0 dma-buffer) (arg1 shadow-queue))
|
||||
(if *debug-segment*
|
||||
(add-frame
|
||||
(-> *display* frames (-> *display* on-screen) frame profile-bar 0)
|
||||
'draw
|
||||
(new 'static 'rgba :r #x40 :b #x40 :a #x80)
|
||||
)
|
||||
)
|
||||
(when (logtest? (vu1-renderer-mask shadow) *vu1-enable-user*)
|
||||
(when (> (-> arg1 cur-run) 0)
|
||||
(let ((v1-12 #f))
|
||||
(dotimes (a0-6 (the-as int (-> arg1 cur-run)))
|
||||
(if (nonzero? (-> arg1 run a0-6 first))
|
||||
(set! v1-12 #t)
|
||||
)
|
||||
)
|
||||
(when v1-12
|
||||
(shadow-vu0-upload)
|
||||
(let* ((s4-0 (-> *display* frames (-> *display* on-screen) frame global-buf))
|
||||
(s5-0 (-> s4-0 base))
|
||||
)
|
||||
(shadow-vu1-init-buffer s4-0)
|
||||
(flush-cache 0)
|
||||
(let ((v1-17 (the-as shadow-dcache *gsf-buffer*)))
|
||||
(set! (-> v1-17 stats num-single-tris) (the-as uint 0))
|
||||
(set! (-> v1-17 stats num-double-tris) (the-as uint 0))
|
||||
(set! (-> v1-17 stats num-single-edges) (the-as uint 0))
|
||||
(set! (-> v1-17 stats num-double-edges) (the-as uint 0))
|
||||
)
|
||||
0
|
||||
(shadow-dma-init s4-0)
|
||||
(dotimes (s3-0 (the-as int (-> arg1 cur-run)))
|
||||
(let ((v1-21 (-> arg1 run s3-0)))
|
||||
(if (nonzero? (-> v1-21 first))
|
||||
(set! (-> s4-0 base) (shadow-execute (the-as shadow-dma-packet (-> v1-21 first)) (-> s4-0 base)))
|
||||
)
|
||||
)
|
||||
)
|
||||
(shadow-dma-end s4-0)
|
||||
(let ((a3-0 (-> s4-0 base)))
|
||||
(let ((v1-25 (the-as object (-> s4-0 base))))
|
||||
(set! (-> (the-as dma-packet v1-25) dma) (new 'static 'dma-tag :id (dma-tag-id next)))
|
||||
(set! (-> (the-as dma-packet v1-25) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet v1-25) vif1) (new 'static 'vif-tag))
|
||||
(set! (-> s4-0 base) (&+ (the-as pointer v1-25) 16))
|
||||
)
|
||||
(dma-bucket-insert-tag
|
||||
(-> *display* frames (-> *display* on-screen) frame bucket-group)
|
||||
(bucket-id shadow)
|
||||
s5-0
|
||||
(the-as (pointer dma-tag) a3-0)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(when #f
|
||||
(let ((gp-1 (the-as structure *gsf-buffer*)))
|
||||
(format *stdcon* "#single tris : ~4d~%" (-> (the-as shadow-dcache gp-1) stats num-single-tris))
|
||||
(format *stdcon* "#double tris : ~4d~%" (-> (the-as shadow-dcache gp-1) stats num-double-tris))
|
||||
(format *stdcon* "#single edges: ~4d~%" (-> (the-as shadow-dcache gp-1) stats num-single-edges))
|
||||
(format *stdcon* "#double edges: ~4d~%" (-> (the-as shadow-dcache gp-1) stats num-double-edges))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(if *debug-segment*
|
||||
(add-frame
|
||||
(-> *display* frames (-> *display* on-screen) frame profile-bar 0)
|
||||
'draw
|
||||
(new 'static 'rgba :r #x40 :g #x42 :b #xe0 :a #x80)
|
||||
)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
(defmethod update-direction-from-time-of-day shadow-control ((obj shadow-control))
|
||||
(let ((v1-1 (-> *time-of-day-context* current-shadow)))
|
||||
(set! (-> obj settings shadow-dir x) (-> v1-1 x))
|
||||
(set! (-> obj settings shadow-dir y) (-> v1-1 y))
|
||||
@@ -19,4 +583,41 @@
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
(defmethod collide-to-find-planes shadow-control ((obj shadow-control) (arg0 vector) (arg1 float) (arg2 float) (arg3 float))
|
||||
(with-pp
|
||||
(let ((s4-0 (new 'stack-no-clear 'collide-tri-result))
|
||||
(v1-0 (new 'stack-no-clear 'vector))
|
||||
(a2-1 (new 'stack-no-clear 'vector))
|
||||
)
|
||||
(set! (-> v1-0 quad) (-> arg0 quad))
|
||||
(set! (-> v1-0 y) (+ 4096.0 (-> v1-0 y)))
|
||||
(set-vector! a2-1 0.0 (- arg3) 0.0 1.0)
|
||||
(cond
|
||||
((>= (fill-and-probe-using-line-sphere *collide-cache* v1-0 a2-1 8192.0 (collide-kind background) pp s4-0 1)
|
||||
0.0
|
||||
)
|
||||
(let ((v1-2 obj))
|
||||
(set! (-> v1-2 settings flags) (logand -33 (-> v1-2 settings flags)))
|
||||
)
|
||||
0
|
||||
(let ((v1-4 obj))
|
||||
(set! (-> v1-4 settings bot-plane w) (- (+ (-> s4-0 intersect y) arg1)))
|
||||
)
|
||||
0
|
||||
(set! (-> obj settings top-plane w) (- (+ (-> s4-0 intersect y) arg2)))
|
||||
0
|
||||
)
|
||||
(else
|
||||
(let ((v1-7 obj))
|
||||
(logior! (-> v1-7 settings flags) 32)
|
||||
)
|
||||
0
|
||||
)
|
||||
)
|
||||
)
|
||||
0
|
||||
(none)
|
||||
)
|
||||
)
|
||||
@@ -6,3 +6,4 @@
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
;; empty!
|
||||
(define-extern shadow-vu1-init-buffer (function dma-buffer none))
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
@@ -542,7 +542,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
@@ -659,7 +659,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
@@ -781,7 +781,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
(set-collide-offense (-> obj collide-info) 2 (collide-offense touch))
|
||||
(set! (-> obj nav-enemy-flags) (logand -257 (-> obj nav-enemy-flags)))
|
||||
)
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
(when *target*
|
||||
(if *target*
|
||||
(look-at-enemy!
|
||||
|
||||
@@ -852,7 +852,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
:trans
|
||||
(behavior ()
|
||||
(set! (-> self root trans quad) (-> (the-as process-drawable (-> self parent 0)) root trans quad))
|
||||
(dummy-14 (-> self draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> self draw shadow-ctrl))
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
@@ -232,7 +232,7 @@ yakow-default-event-handler
|
||||
)
|
||||
|
||||
(defbehavior yakow-common-post yakow ()
|
||||
(dummy-14 (-> self draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> self draw shadow-ctrl))
|
||||
(if *target*
|
||||
(look-at-enemy! (-> *target* neck) (the-as vector (-> self root-override root-prim prim-core)) #f self)
|
||||
)
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
@@ -260,7 +260,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
@@ -327,7 +327,7 @@
|
||||
(set! (-> a0-8 settings flags) (logand -33 (-> a0-8 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 v1-1)
|
||||
(update-direction-from-time-of-day v1-1)
|
||||
)
|
||||
(else
|
||||
(logior! (-> v1-1 settings flags) 32)
|
||||
|
||||
@@ -320,7 +320,7 @@
|
||||
:post
|
||||
(behavior ()
|
||||
(ja-post)
|
||||
(dummy-14 (-> self draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> self draw shadow-ctrl))
|
||||
(none)
|
||||
)
|
||||
)
|
||||
@@ -419,7 +419,7 @@
|
||||
(set! (-> v1-34 settings top-plane w) (- 4096.0))
|
||||
)
|
||||
0
|
||||
(dummy-14 a0-16)
|
||||
(update-direction-from-time-of-day a0-16)
|
||||
)
|
||||
)
|
||||
(cond
|
||||
|
||||
+41
-32
@@ -1157,43 +1157,52 @@
|
||||
(gp-7 (-> s5-3 base))
|
||||
)
|
||||
(let* ((v1-137 s5-3)
|
||||
(a0-43 (-> v1-137 base))
|
||||
(a0-43 (the-as object (-> v1-137 base)))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-43)) #x10000004)
|
||||
(s.w! (+ a0-43 8) 0)
|
||||
(let ((a1-23 #x50000004))
|
||||
(s.w! (+ a0-43 12) a1-23)
|
||||
)
|
||||
(set! (-> v1-137 base) (&+ a0-43 16))
|
||||
(set! (-> (the-as dma-packet a0-43) dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
|
||||
(set! (-> (the-as dma-packet a0-43) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet a0-43) vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
|
||||
(set! (-> v1-137 base) (&+ (the-as pointer a0-43) 16))
|
||||
)
|
||||
(let* ((v1-138 s5-3)
|
||||
(a0-45 (-> v1-138 base))
|
||||
(a0-45 (the-as object (-> v1-138 base)))
|
||||
)
|
||||
(set! (-> (the-as (pointer uint64) a0-45)) (make-u128 0 (the-as uint #x3000000000008001)))
|
||||
(let ((a1-26 (the-as uint #xeeeeeeeeeeeeeeee)))
|
||||
(s.d! (+ a0-45 8) a1-26)
|
||||
)
|
||||
(set! (-> v1-138 base) (&+ a0-45 16))
|
||||
(set! (-> (the-as gs-gif-tag a0-45) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
|
||||
(set! (-> (the-as gs-gif-tag a0-45) regs)
|
||||
(new 'static 'gif-tag-regs
|
||||
:regs0 (gif-reg-id a+d)
|
||||
:regs1 (gif-reg-id a+d)
|
||||
:regs2 (gif-reg-id a+d)
|
||||
:regs3 (gif-reg-id a+d)
|
||||
:regs4 (gif-reg-id a+d)
|
||||
:regs5 (gif-reg-id a+d)
|
||||
:regs6 (gif-reg-id a+d)
|
||||
:regs7 (gif-reg-id a+d)
|
||||
:regs8 (gif-reg-id a+d)
|
||||
:regs9 (gif-reg-id a+d)
|
||||
:regs10 (gif-reg-id a+d)
|
||||
:regs11 (gif-reg-id a+d)
|
||||
:regs12 (gif-reg-id a+d)
|
||||
:regs13 (gif-reg-id a+d)
|
||||
:regs14 (gif-reg-id a+d)
|
||||
:regs15 (gif-reg-id a+d)
|
||||
)
|
||||
)
|
||||
(set! (-> v1-138 base) (&+ (the-as pointer a0-45) 16))
|
||||
)
|
||||
(let* ((v1-139 s5-3)
|
||||
(a0-47 (-> v1-139 base))
|
||||
)
|
||||
(set! (-> (the-as (pointer int64) a0-47)) #x10001c0)
|
||||
(set! (-> (the-as (pointer gs-zbuf) a0-47) 0) (new 'static 'gs-zbuf :zbp #x1c0 :psm (gs-psm ct24)))
|
||||
(let ((a1-28 78))
|
||||
(s.d! (+ a0-47 8) a1-28)
|
||||
)
|
||||
(let ((a1-29 #x30003))
|
||||
(s.d! (+ a0-47 16) a1-29)
|
||||
)
|
||||
(let ((a1-30 71))
|
||||
(s.d! (+ a0-47 24) a1-30)
|
||||
)
|
||||
(let ((a1-31 68))
|
||||
(s.d! (+ a0-47 32) a1-31)
|
||||
)
|
||||
(let ((a1-32 66))
|
||||
(s.d! (+ a0-47 40) a1-32)
|
||||
(s.d! (+ (the-as (pointer gs-reg) a0-47) 8) a1-28)
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-test) a0-47) 2)
|
||||
(new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always))
|
||||
)
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-47) 3) (gs-reg64 test-1))
|
||||
(set! (-> (the-as (pointer gs-alpha) a0-47) 4) (new 'static 'gs-alpha :b #x1 :d #x1))
|
||||
(set! (-> (the-as (pointer gs-reg64) a0-47) 5) (gs-reg64 alpha-1))
|
||||
(set! (-> v1-139 base) (&+ a0-47 48))
|
||||
)
|
||||
(screen-gradient
|
||||
@@ -1204,11 +1213,11 @@
|
||||
(-> *time-of-day-context* erase-color)
|
||||
)
|
||||
(let ((a3-3 (-> s5-3 base)))
|
||||
(let ((v1-144 (-> s5-3 base)))
|
||||
(set! (-> (the-as (pointer int64) v1-144)) #x20000000)
|
||||
(s.w! (+ v1-144 8) 0)
|
||||
(s.w! (+ v1-144 12) 0)
|
||||
(set! (-> s5-3 base) (&+ v1-144 16))
|
||||
(let ((v1-144 (the-as object (-> s5-3 base))))
|
||||
(set! (-> (the-as dma-packet v1-144) dma) (new 'static 'dma-tag :id (dma-tag-id next)))
|
||||
(set! (-> (the-as dma-packet v1-144) vif0) (new 'static 'vif-tag))
|
||||
(set! (-> (the-as dma-packet v1-144) vif1) (new 'static 'vif-tag))
|
||||
(set! (-> s5-3 base) (&+ (the-as pointer v1-144) 16))
|
||||
)
|
||||
(dma-bucket-insert-tag
|
||||
(-> *display* frames (-> *display* on-screen) frame bucket-group)
|
||||
|
||||
+2
-2
@@ -1493,8 +1493,8 @@
|
||||
(zero? (-> obj draw cur-lod))
|
||||
(logtest? (-> obj draw status) (draw-status was-drawn))
|
||||
)
|
||||
(dummy-15 gp-0 (-> obj draw origin) -4096.0 4096.0 32768.0)
|
||||
(dummy-14 gp-0)
|
||||
(collide-to-find-planes gp-0 (-> obj draw origin) -4096.0 4096.0 32768.0)
|
||||
(update-direction-from-time-of-day gp-0)
|
||||
)
|
||||
(else
|
||||
(let ((v1-10 gp-0))
|
||||
|
||||
+1
-1
@@ -61,7 +61,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
+1
-1
@@ -69,7 +69,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
+3
-3
@@ -610,7 +610,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
@@ -744,7 +744,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
@@ -883,7 +883,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
+1
-1
@@ -88,7 +88,7 @@
|
||||
(set-collide-offense (-> obj collide-info) 2 (collide-offense touch))
|
||||
(set! (-> obj nav-enemy-flags) (logand -257 (-> obj nav-enemy-flags)))
|
||||
)
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
(when *target*
|
||||
(if *target*
|
||||
(look-at-enemy!
|
||||
|
||||
+1
-1
@@ -937,7 +937,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
+1
-1
@@ -185,7 +185,7 @@
|
||||
:trans
|
||||
(behavior ()
|
||||
(set! (-> self root trans quad) (-> (the-as process-drawable (-> self parent 0)) root trans quad))
|
||||
(dummy-14 (-> self draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> self draw shadow-ctrl))
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
+1
-1
@@ -63,7 +63,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
+1
-1
@@ -61,7 +61,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
+1
-1
@@ -290,7 +290,7 @@ yakow-default-event-handler
|
||||
|
||||
;; definition for function yakow-common-post
|
||||
(defbehavior yakow-common-post yakow ()
|
||||
(dummy-14 (-> self draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> self draw shadow-ctrl))
|
||||
(if *target*
|
||||
(look-at-enemy! (-> *target* neck) (the-as vector (-> self root-override root-prim prim-core)) #f self)
|
||||
)
|
||||
|
||||
+1
-1
@@ -101,7 +101,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
+2
-2
@@ -87,7 +87,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
@@ -293,7 +293,7 @@
|
||||
(set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 (-> obj draw shadow-ctrl))
|
||||
(update-direction-from-time-of-day (-> obj draw shadow-ctrl))
|
||||
)
|
||||
(else
|
||||
(let ((v1-14 (-> obj draw shadow-ctrl)))
|
||||
|
||||
+1
-1
@@ -347,7 +347,7 @@
|
||||
(set! (-> a0-8 settings flags) (logand -33 (-> a0-8 settings flags)))
|
||||
)
|
||||
0
|
||||
(dummy-14 v1-1)
|
||||
(update-direction-from-time-of-day v1-1)
|
||||
)
|
||||
(else
|
||||
(logior! (-> v1-1 settings flags) 32)
|
||||
|
||||
Reference in New Issue
Block a user