Start setting up texture animation for jak 3. (#3524)
For now, this just adds sky (clouds and fog), darkjak, and skull gem. There are some unknown issues with drawing the skull gems still, but I think it's unrelated to texture animations. Also fixes https://github.com/open-goal/jak-project/issues/3523pull/3266/head
parent
a61f24a168
commit
271007e552
|
@ -42,7 +42,9 @@ std::vector<std::string> jak2_slots = {
|
|||
"cas-toxic-slime-scroll-dest",
|
||||
};
|
||||
|
||||
std::vector<std::string> jak3_slots = {};
|
||||
std::vector<std::string> jak3_slots = {
|
||||
"skull-gem-dest", "jakc-arm", "jakc-eyebrow", "jakc-face", "jakc-finger", "jakc-hair",
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
|
|
|
@ -6754,7 +6754,12 @@
|
|||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(deftype texture-anim-layer (structure)
|
||||
((extra vector :inline :offset 240)
|
||||
((interpolated-color vector :inline) ;; added
|
||||
(interpolated-scale-offset vector :inline)
|
||||
(interpolated-st-scale-offset vector :inline)
|
||||
(interpolated-qs vector :inline)
|
||||
(interpolated-rot vector :inline)
|
||||
(extra vector :inline :offset 240)
|
||||
(func (function dma-buffer uint int int texture-anim-layer float int) :offset-assert 256) ;; guessed by decompiler
|
||||
(func-id symbol :offset-assert 256 :overlay-at func) ;; guessed by decompiler
|
||||
(init-func (function texture-anim-layer int) :offset-assert 260) ;; guessed by decompiler
|
||||
|
@ -6766,6 +6771,8 @@
|
|||
(test gs-test :offset-assert 280) ;; gs-test
|
||||
(alpha gs-alpha :offset-assert 288) ;; gs-alpha
|
||||
(clamp gs-clamp :offset-assert 296) ;; gs-clamp
|
||||
(start-vectors vector 5 :inline :offset 80 :score -10) ;; added
|
||||
|
||||
(start-color vector :inline :offset 80)
|
||||
(start-scale vector2 :inline :offset 96)
|
||||
(start-offset vector2 :inline :offset 104)
|
||||
|
@ -6774,6 +6781,8 @@
|
|||
(start-qs vector :inline :offset 128)
|
||||
(start-rot degrees :offset 144) ;; degrees
|
||||
(start-st-rot degrees :offset 148) ;; degrees
|
||||
(end-vectors vector 5 :inline :offset 160 :score -10) ;; added
|
||||
|
||||
(end-color vector :inline :offset 160)
|
||||
(end-scale vector2 :inline :offset 176)
|
||||
(end-offset vector2 :inline :offset 184)
|
||||
|
@ -30975,57 +30984,57 @@
|
|||
;; texture-anim ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;; (define-extern *texture-anim-work* object) ;; texture-anim-work
|
||||
;; (define-extern texture-anim-layer-interp function) ;; (function texture-anim-layer float none)
|
||||
;; (define-extern texture-anim-layer-add-shader function) ;; (function dma-buffer texture-anim-layer int none)
|
||||
;; (define-extern texture-anim-layer-add-clut-shader function) ;; (function dma-buffer texture-anim-layer int none)
|
||||
;; (define-extern texture-anim-layer-draw function) ;; (function dma-buffer int int texture-anim-layer none)
|
||||
;; (define-extern default-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int)
|
||||
;; (define-extern blend-clut-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int)
|
||||
;; (define-extern add-clut-texture-anim-layer-func function)
|
||||
;; (define-extern dest-blend-clut-texture-anim-layer-func function)
|
||||
;; (define-extern move-rg-to-ba-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int)
|
||||
;; (define-extern fill-rgb-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int)
|
||||
;; (define-extern texture-anim-draw-mip-shader function)
|
||||
;; (define-extern clear-texture-ids function)
|
||||
;; (define-extern texture-anim-draw-mips function)
|
||||
(define-extern *texture-anim-work* texture-anim-work)
|
||||
(define-extern texture-anim-layer-interp (function texture-anim-layer float none))
|
||||
(define-extern texture-anim-layer-add-shader (function dma-buffer texture-anim-layer int none))
|
||||
(define-extern texture-anim-layer-add-clut-shader (function dma-buffer texture-anim-layer int none))
|
||||
(define-extern texture-anim-layer-draw (function dma-buffer int int texture-anim-layer none))
|
||||
(define-extern default-texture-anim-layer-func (function dma-buffer uint int int texture-anim-layer float int))
|
||||
(define-extern blend-clut-texture-anim-layer-func (function dma-buffer uint int int texture-anim-layer float int))
|
||||
(define-extern add-clut-texture-anim-layer-func (function dma-buffer uint int int texture-anim-layer float int))
|
||||
(define-extern dest-blend-clut-texture-anim-layer-func (function dma-buffer uint int int texture-anim-layer float int))
|
||||
(define-extern move-rg-to-ba-texture-anim-layer-func (function dma-buffer uint int int texture-anim-layer float int))
|
||||
(define-extern fill-rgb-texture-anim-layer-func (function dma-buffer uint int int texture-anim-layer float int))
|
||||
(define-extern texture-anim-draw-mip-shader (function dma-buffer texture int none))
|
||||
(define-extern clear-texture-ids (function texture none))
|
||||
(define-extern texture-anim-draw-mips (function dma-buffer texture none))
|
||||
(define-extern update-texture-anim (function bucket-id texture-anim-array none))
|
||||
;; (define-extern no-alpha-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int)
|
||||
;; (define-extern copy-alpha-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int)
|
||||
;; (define-extern copy-clut-alpha-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int)
|
||||
;; (define-extern set-alpha-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int)
|
||||
;; (define-extern set-clut-alpha-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int)
|
||||
;; (define-extern dest-texture-init function) ;; (function texture-anim none)
|
||||
;; (define-extern src-texture-init function) ;; (function texture-anim-layer none)
|
||||
;; (define-extern src-texture-init-mt8 function) ;; (function texture-anim-layer none)
|
||||
;; (define-extern make-noise-texture function) ;; (function pointer int int int none)
|
||||
;; (define-extern make-cloud-clut function) ;; (function (pointer uint32) float float none)
|
||||
;; (define-extern texture-anim-cloud-clut-upload function) ;; (function dma-buffer texture-anim none)
|
||||
;; (define-extern texture-anim-cloud-clut-init function) ;; (function texture-anim none)
|
||||
;; (define-extern make-slime-clut function) ;; (function (pointer uint32) none)
|
||||
;; (define-extern texture-anim-slime-clut-upload function) ;; (function dma-buffer texture-anim none)
|
||||
;; (define-extern texture-anim-slime-clut-init function) ;; (function texture-anim none)
|
||||
;; (define-extern make-ramp-clut function) ;; (function (pointer uint32) pointer object none)
|
||||
;; (define-extern make-alpha-ramp-clut function) ;; (function (pointer uint32) none)
|
||||
;; (define-extern noise-texture-init function) ;; (function texture-anim-layer none)
|
||||
;; (define-extern texture-anim-alpha-ramp-clut-upload function) ;; (function dma-buffer texture-anim none)
|
||||
;; (define-extern texture-anim-alpha-ramp-clut-init function) ;; (function texture-anim none)
|
||||
;; (define-extern texture-anim-overide-size-init function) ;; (function texture-anim none)
|
||||
;; (define-extern texture-anim-change-mt8h-init function) ;; (function texture-anim none)
|
||||
;; (define-extern *texture-anim-pages-table* object)
|
||||
;; (define-extern *texture-anim-mip-array* object)
|
||||
(define-extern no-alpha-texture-anim-layer-func (function dma-buffer uint int int texture-anim-layer float int))
|
||||
(define-extern copy-alpha-texture-anim-layer-func (function dma-buffer uint int int texture-anim-layer float int))
|
||||
(define-extern copy-clut-alpha-texture-anim-layer-func (function dma-buffer uint int int texture-anim-layer float int))
|
||||
(define-extern set-alpha-texture-anim-layer-func (function dma-buffer uint int int texture-anim-layer float int))
|
||||
(define-extern set-clut-alpha-texture-anim-layer-func (function dma-buffer uint int int texture-anim-layer float int))
|
||||
(define-extern dest-texture-init (function texture-anim none))
|
||||
(define-extern src-texture-init (function texture-anim-layer none))
|
||||
(define-extern src-texture-init-mt8 (function texture-anim-layer none))
|
||||
(define-extern make-noise-texture (function pointer int int int none))
|
||||
(define-extern make-cloud-clut (function (pointer uint32) float float none))
|
||||
(define-extern texture-anim-cloud-clut-upload (function dma-buffer texture-anim none))
|
||||
(define-extern texture-anim-cloud-clut-init (function texture-anim none))
|
||||
(define-extern make-slime-clut (function (pointer uint32) none))
|
||||
(define-extern texture-anim-slime-clut-upload (function dma-buffer texture-anim none))
|
||||
(define-extern texture-anim-slime-clut-init (function texture-anim none))
|
||||
(define-extern make-ramp-clut (function (pointer uint32) pointer object none))
|
||||
(define-extern make-alpha-ramp-clut (function (pointer uint32) none))
|
||||
(define-extern noise-texture-init (function texture-anim-layer none))
|
||||
(define-extern texture-anim-alpha-ramp-clut-upload (function dma-buffer texture-anim none))
|
||||
(define-extern texture-anim-alpha-ramp-clut-init (function texture-anim none))
|
||||
(define-extern texture-anim-overide-size-init (function texture-anim none))
|
||||
(define-extern texture-anim-change-mt8h-init (function texture-anim none))
|
||||
(define-extern *texture-anim-pages-table* (pointer uint8))
|
||||
(define-extern *texture-anim-mip-array* (pointer uint16))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; texture-anim-funcs ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;; (define-extern noise-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int)
|
||||
;; (define-extern cloud-texture-anim-layer-func function) ;; (function dma-buffer uint int int texture-anim-layer float int)
|
||||
;; (define-extern cloud-texture-anim-func function) ;; (function dma-buffer texture-anim int)
|
||||
;; (define-extern fog-texture-anim-init function) ;; (function texture-anim int)
|
||||
(define-extern noise-texture-anim-layer-func (function dma-buffer uint int int texture-anim-layer float int))
|
||||
(define-extern cloud-texture-anim-layer-func (function dma-buffer uint int int texture-anim-layer float int))
|
||||
(define-extern cloud-texture-anim-func (function dma-buffer texture-anim int))
|
||||
(define-extern fog-texture-anim-init (function texture-anim int))
|
||||
(define-extern *fog-texture-work* fog-texture-work)
|
||||
;; (define-extern real-fog-texture-anim-func function) ;; (function dma-buffer texture-anim int)
|
||||
;; (define-extern fog-texture-anim-func function) ;; (function dma-buffer texture-anim int)
|
||||
(define-extern real-fog-texture-anim-func (function dma-buffer texture-anim int))
|
||||
(define-extern fog-texture-anim-func (function dma-buffer texture-anim int))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; texture-anim-tables ;;
|
||||
|
|
|
@ -347,6 +347,19 @@
|
|||
"VAGWAD.INT"
|
||||
],
|
||||
|
||||
"animated_textures": [
|
||||
// dark jak
|
||||
"jakc-arm", "jakc-eyebrow", "jakc-face", "jakc-finger", "jakc-hair",
|
||||
"jakc-arm-norm", "jakc-eyebrow-norm", "jakc-face-norm", "jakc-finger-norm", "jakc-hair-norm",
|
||||
"jakc-arm-dark", "jakc-eyebrow-dark", "jakc-face-dark", "jakc-finger-dark", "jakc-hair-dark",
|
||||
|
||||
// Skull Gem
|
||||
"skull-gem-dest",
|
||||
"skull-gem-alpha-00",
|
||||
"skull-gem-alpha-01",
|
||||
"skull-gem-alpha-02"
|
||||
],
|
||||
|
||||
"levels_to_extract": [
|
||||
// wascity
|
||||
"WASALL.DGO",
|
||||
|
|
|
@ -2460,5 +2460,9 @@
|
|||
["L575", "vector4w"],
|
||||
["L576", "vector4w"],
|
||||
["L577", "vector4w"]
|
||||
],
|
||||
"texture-anim": [
|
||||
["L198", "(pointer uint8)", 16],
|
||||
["L197", "(pointer uint16)", 48]
|
||||
]
|
||||
}
|
||||
|
|
|
@ -2507,5 +2507,6 @@
|
|||
"(post idle precur-bridge-blocks-break)": [
|
||||
[16, "vector"],
|
||||
[32, "vector"]
|
||||
]
|
||||
],
|
||||
"texture-anim-layer-draw": [[16, "matrix"], [80, "matrix"], [144, "matrix"], [208, "matrix"]]
|
||||
}
|
||||
|
|
|
@ -10851,6 +10851,9 @@
|
|||
["_stack_", 76, "float"],
|
||||
["_stack_", 100, "float"]
|
||||
],
|
||||
"real-wang-texture-anim-func": [
|
||||
[[3, 31], "v1", "mood-context"]
|
||||
],
|
||||
"(method 24 sky-work)": [
|
||||
[256, "s4", "(pointer int32)"],
|
||||
[261, "s4", "(pointer int32)"]
|
||||
|
@ -11102,5 +11105,40 @@
|
|||
],
|
||||
"(method 10 neon-baron)": [[11, "s5", "uint"]],
|
||||
"(method 15 neon-baron)": [[29, "s5", "int"]],
|
||||
"(method 16 neon-baron)": [[5, "a1", "int"]]
|
||||
"(method 16 neon-baron)": [[5, "a1", "int"]],
|
||||
"texture-anim-layer-add-clut-shader": [
|
||||
[[23, 30], "a3", "dma-packet"],
|
||||
[[32, 39], "a3", "gs-gif-tag"],
|
||||
[49, "a1", "(pointer gs-tex0)"],
|
||||
[51, "a1", "(pointer gs-reg64)"],
|
||||
[52, "a1", "(pointer gs-tex1)"],
|
||||
[54, "a1", "(pointer gs-reg64)"],
|
||||
[56, "a1", "(pointer gs-test)"],
|
||||
[58, "a1", "(pointer gs-reg64)"],
|
||||
[60, "a1", "(pointer gs-clamp)"],
|
||||
[62, "a1", "(pointer gs-reg64)"],
|
||||
[64, "a1", "(pointer gs-alpha)"],
|
||||
[66, "a1", "(pointer gs-reg64)"]
|
||||
],
|
||||
"texture-anim-layer-draw": [
|
||||
[[24, 182], "s4", "(pointer uint128)"]
|
||||
],
|
||||
"update-texture-anim": [
|
||||
[213, "v1", "(pointer uint128)"],
|
||||
[[214, 230], "t0", "vector4w"],
|
||||
[[230, 238], "t0", "vector4w"],
|
||||
[[239, 247], "v1", "vector4w"]
|
||||
],
|
||||
"(method 9 texture-anim-layer)": [
|
||||
[5, "v1", "symbol"],
|
||||
[11, "v1", "symbol"]
|
||||
],
|
||||
"(method 9 texture-anim)": [
|
||||
[5, "v1", "symbol"],
|
||||
[11, "v1", "symbol"],
|
||||
["_stack_", 16, "texture-page"]
|
||||
],
|
||||
"real-fog-texture-anim-func": [
|
||||
[[6, 160], "s2", "(pointer uint32)"]
|
||||
]
|
||||
}
|
||||
|
|
|
@ -80,6 +80,7 @@ set(RUNTIME_SOURCE
|
|||
graphics/opengl_renderer/sprite/Sprite3_Glow.cpp
|
||||
graphics/opengl_renderer/sprite/Sprite3.cpp
|
||||
graphics/opengl_renderer/TextureAnimator.cpp
|
||||
graphics/opengl_renderer/TextureAnimatorDefs.cpp
|
||||
graphics/opengl_renderer/TextureUploadHandler.cpp
|
||||
graphics/opengl_renderer/VisDataHandler.cpp
|
||||
graphics/opengl_renderer/Warp.cpp
|
||||
|
|
|
@ -97,10 +97,9 @@ OpenGLRenderer::OpenGLRenderer(std::shared_ptr<TexturePool> texture_pool,
|
|||
case GameVersion::Jak1:
|
||||
break;
|
||||
case GameVersion::Jak2:
|
||||
m_texture_animator = std::make_shared<TextureAnimator>(m_render_state.shaders, common_level);
|
||||
break;
|
||||
case GameVersion::Jak3:
|
||||
// for now, no texture animation for jak3...
|
||||
m_texture_animator =
|
||||
std::make_shared<TextureAnimator>(m_render_state.shaders, common_level, m_version);
|
||||
break;
|
||||
default:
|
||||
ASSERT(false);
|
||||
|
@ -130,7 +129,6 @@ void OpenGLRenderer::init_bucket_renderers_jak3() {
|
|||
using namespace jak3;
|
||||
m_bucket_renderers.resize((int)BucketId::MAX_BUCKETS);
|
||||
m_bucket_categories.resize((int)BucketId::MAX_BUCKETS, BucketCategory::OTHER);
|
||||
std::shared_ptr<TextureAnimator> texture_animator = nullptr; // todo tex anim
|
||||
{
|
||||
auto p = scoped_prof("render-inits");
|
||||
|
||||
|
@ -140,7 +138,7 @@ void OpenGLRenderer::init_bucket_renderers_jak3() {
|
|||
|
||||
// 4
|
||||
init_bucket_renderer<TextureUploadHandler>("tex-lcom-sky-pre", BucketCategory::TEX,
|
||||
BucketId::TEX_LCOM_SKY_PRE, texture_animator);
|
||||
BucketId::TEX_LCOM_SKY_PRE, m_texture_animator);
|
||||
init_bucket_renderer<DirectRenderer>("sky", BucketCategory::OTHER, BucketId::SKY, 1024 * 8);
|
||||
|
||||
init_bucket_renderer<OceanMidAndFar>("ocean-mid-far", BucketCategory::OCEAN,
|
||||
|
@ -156,7 +154,7 @@ void OpenGLRenderer::init_bucket_renderers_jak3() {
|
|||
init_bucket_renderer<TextureUploadHandler>(
|
||||
fmt::format("tex-l{}-tfrag", i), BucketCategory::TEX,
|
||||
GET_BUCKET_ID_FOR_LIST(BucketId::TEX_L0_TFRAG, BucketId::TEX_L1_TFRAG, i),
|
||||
texture_animator);
|
||||
m_texture_animator);
|
||||
// 11
|
||||
init_bucket_renderer<TFragment>(
|
||||
fmt::format("tfrag-l{}-tfrag", i), BucketCategory::TFRAG,
|
||||
|
@ -230,7 +228,7 @@ void OpenGLRenderer::init_bucket_renderers_jak3() {
|
|||
|
||||
// 340
|
||||
init_bucket_renderer<TextureUploadHandler>("tex-lcom-tfrag", BucketCategory::TEX,
|
||||
BucketId::TEX_LCOM_TFRAG, texture_animator);
|
||||
BucketId::TEX_LCOM_TFRAG, m_texture_animator);
|
||||
init_bucket_renderer<Merc2BucketRenderer>("merc-lcom-tfrag", BucketCategory::MERC,
|
||||
BucketId::MERC_LCOM_TFRAG, m_merc2);
|
||||
init_bucket_renderer<Generic2BucketRenderer>("gmerc-lcom-tfrag", BucketCategory::GENERIC,
|
||||
|
@ -238,7 +236,7 @@ void OpenGLRenderer::init_bucket_renderers_jak3() {
|
|||
Generic2::Mode::NORMAL);
|
||||
// 345
|
||||
init_bucket_renderer<TextureUploadHandler>("tex-lcom-shrub", BucketCategory::TEX,
|
||||
BucketId::TEX_LCOM_SHRUB, texture_animator);
|
||||
BucketId::TEX_LCOM_SHRUB, m_texture_animator);
|
||||
init_bucket_renderer<Merc2BucketRenderer>("merc-lcom-shrub", BucketCategory::MERC,
|
||||
BucketId::MERC_LCOM_SHRUB, m_merc2);
|
||||
// 351
|
||||
|
@ -247,11 +245,11 @@ void OpenGLRenderer::init_bucket_renderers_jak3() {
|
|||
init_bucket_renderer<TextureUploadHandler>(
|
||||
fmt::format("tex-l{}-pris", i), BucketCategory::TEX,
|
||||
GET_BUCKET_ID_FOR_LIST(BucketId::TEX_L0_PRIS, BucketId::TEX_L1_PRIS, i),
|
||||
texture_animator);
|
||||
m_texture_animator);
|
||||
init_bucket_renderer<TextureUploadHandler>(
|
||||
fmt::format("tex-l{}-pris2", i), BucketCategory::TEX,
|
||||
GET_BUCKET_ID_FOR_LIST(BucketId::TEX_L0_PRIS2, BucketId::TEX_L1_PRIS2, i),
|
||||
texture_animator);
|
||||
m_texture_animator);
|
||||
|
||||
init_bucket_renderer<Merc2BucketRenderer>(
|
||||
fmt::format("merc-l{}-pris", i), BucketCategory::MERC,
|
||||
|
@ -272,7 +270,7 @@ void OpenGLRenderer::init_bucket_renderers_jak3() {
|
|||
|
||||
// 401
|
||||
init_bucket_renderer<TextureUploadHandler>("tex-lcom-pris", BucketCategory::TEX,
|
||||
BucketId::TEX_LCOM_PRIS, texture_animator);
|
||||
BucketId::TEX_LCOM_PRIS, m_texture_animator);
|
||||
init_bucket_renderer<Merc2BucketRenderer>("merc-lcom-pris", BucketCategory::MERC,
|
||||
BucketId::MERC_LCOM_PRIS, m_merc2);
|
||||
init_bucket_renderer<Generic2BucketRenderer>("gmerc-lcom-pris", BucketCategory::GENERIC,
|
||||
|
@ -281,7 +279,7 @@ void OpenGLRenderer::init_bucket_renderers_jak3() {
|
|||
|
||||
// 461
|
||||
init_bucket_renderer<TextureUploadHandler>("tex-lcom-sky-post", BucketCategory::TEX,
|
||||
BucketId::TEX_LCOM_SKY_POST, texture_animator);
|
||||
BucketId::TEX_LCOM_SKY_POST, m_texture_animator);
|
||||
init_bucket_renderer<OceanNear>("ocean-near", BucketCategory::OCEAN, BucketId::OCEAN_NEAR);
|
||||
|
||||
// 463
|
||||
|
@ -291,7 +289,7 @@ void OpenGLRenderer::init_bucket_renderers_jak3() {
|
|||
init_bucket_renderer<TextureUploadHandler>(
|
||||
fmt::format("tex-l{}-water", i), BucketCategory::TEX,
|
||||
GET_BUCKET_ID_FOR_LIST(BucketId::TEX_L0_WATER, BucketId::TEX_L1_WATER, i),
|
||||
texture_animator);
|
||||
m_texture_animator);
|
||||
init_bucket_renderer<Merc2BucketRenderer>(
|
||||
fmt::format("merc-l{}-water", i), BucketCategory::MERC,
|
||||
GET_BUCKET_ID_FOR_LIST(BucketId::MERC_L0_WATER, BucketId::MERC_L1_WATER, i), m_merc2);
|
||||
|
@ -308,20 +306,20 @@ void OpenGLRenderer::init_bucket_renderers_jak3() {
|
|||
|
||||
// 563
|
||||
init_bucket_renderer<TextureUploadHandler>("tex-lcom-water", BucketCategory::TEX,
|
||||
BucketId::TEX_LCOM_WATER, texture_animator);
|
||||
BucketId::TEX_LCOM_WATER, m_texture_animator);
|
||||
init_bucket_renderer<Merc2BucketRenderer>("merc-lcom-water", BucketCategory::MERC,
|
||||
BucketId::MERC_LCOM_WATER, m_merc2);
|
||||
|
||||
// 568
|
||||
init_bucket_renderer<TextureUploadHandler>("tex-sprite", BucketCategory::TEX,
|
||||
BucketId::TEX_SPRITE, texture_animator);
|
||||
BucketId::TEX_SPRITE, m_texture_animator);
|
||||
init_bucket_renderer<Sprite3>("particles", BucketCategory::SPRITE, BucketId::PARTICLES);
|
||||
init_bucket_renderer<Generic2BucketRenderer>("generic-sprite-3", BucketCategory::OTHER,
|
||||
BucketId::GENERIC_SPRITE_3, m_generic2,
|
||||
Generic2::Mode::LIGHTNING);
|
||||
// 575
|
||||
init_bucket_renderer<TextureUploadHandler>("tex-warp", BucketCategory::TEX, BucketId::TEX_WARP,
|
||||
texture_animator);
|
||||
m_texture_animator);
|
||||
init_bucket_renderer<Warp>("generic-warp", BucketCategory::GENERIC, BucketId::GENERIC_WARP,
|
||||
m_generic2);
|
||||
|
||||
|
@ -329,16 +327,16 @@ void OpenGLRenderer::init_bucket_renderers_jak3() {
|
|||
BucketId::DEBUG_NO_ZBUF1, m_texture_animator, true);
|
||||
// 578
|
||||
init_bucket_renderer<TextureUploadHandler>("tex-hud-hud-alpha", BucketCategory::TEX,
|
||||
BucketId::TEX_HUD_HUD_ALPHA, texture_animator);
|
||||
BucketId::TEX_HUD_HUD_ALPHA, m_texture_animator);
|
||||
|
||||
init_bucket_renderer<TextureUploadHandler>("tex-hud-hud-alpha", BucketCategory::TEX,
|
||||
BucketId::TEX_HUD_HUD_ALPHA, texture_animator);
|
||||
BucketId::TEX_HUD_HUD_ALPHA, m_texture_animator);
|
||||
init_bucket_renderer<ProgressRenderer>("hud-draw-hud-alpha", BucketCategory::OTHER,
|
||||
BucketId::HUD_DRAW_HUD_ALPHA, 0x8000);
|
||||
init_bucket_renderer<TextureUploadHandler>("tex-hud-pris2", BucketCategory::TEX,
|
||||
BucketId::TEX_HUD_PRIS2, texture_animator);
|
||||
BucketId::TEX_HUD_PRIS2, m_texture_animator);
|
||||
init_bucket_renderer<TextureUploadHandler>("hud-draw-pris2", BucketCategory::TEX,
|
||||
BucketId::HUD_DRAW_PRIS2, texture_animator);
|
||||
BucketId::HUD_DRAW_PRIS2, m_texture_animator);
|
||||
init_bucket_renderer<ProgressRenderer>("progress", BucketCategory::OTHER, BucketId::BUCKET582,
|
||||
0x8000);
|
||||
|
||||
|
|
|
@ -208,6 +208,9 @@ int output_slot_by_idx(GameVersion version, const std::string& name) {
|
|||
case GameVersion::Jak2:
|
||||
v = &jak2_animated_texture_slots();
|
||||
break;
|
||||
case GameVersion::Jak3:
|
||||
v = &jak3_animated_texture_slots();
|
||||
break;
|
||||
default:
|
||||
case GameVersion::Jak1:
|
||||
ASSERT_NOT_REACHED();
|
||||
|
@ -352,12 +355,26 @@ Psm32ToPsm8Scrambler::Psm32ToPsm8Scrambler(int w, int h, int write_tex_width, in
|
|||
}
|
||||
}
|
||||
|
||||
TextureAnimator::TextureAnimator(ShaderLibrary& shaders, const tfrag3::Level* common_level)
|
||||
const std::vector<std::string>& animated_texture_slots(GameVersion version) {
|
||||
switch (version) {
|
||||
case GameVersion::Jak2:
|
||||
return jak2_animated_texture_slots();
|
||||
case GameVersion::Jak3:
|
||||
return jak3_animated_texture_slots();
|
||||
default:
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
}
|
||||
|
||||
TextureAnimator::TextureAnimator(ShaderLibrary& shaders,
|
||||
const tfrag3::Level* common_level,
|
||||
GameVersion version)
|
||||
: m_common_level(common_level),
|
||||
m_psm32_to_psm8_8_8(8, 8, 8, 64),
|
||||
m_psm32_to_psm8_16_16(16, 16, 16, 64),
|
||||
m_psm32_to_psm8_32_32(32, 32, 16, 64),
|
||||
m_psm32_to_psm8_64_64(64, 64, 64, 64),
|
||||
m_version(version),
|
||||
m_sky_blend_texture(kFinalSkyTextureSize, kFinalSkyTextureSize, GL_UNSIGNED_INT_8_8_8_8_REV),
|
||||
m_sky_final_texture(kFinalSkyTextureSize, kFinalSkyTextureSize, GL_UNSIGNED_INT_8_8_8_8_REV),
|
||||
m_sky_hires_blend_texture(kFinalSkyHiresTextureSize,
|
||||
|
@ -462,12 +479,22 @@ TextureAnimator::TextureAnimator(ShaderLibrary& shaders, const tfrag3::Level* co
|
|||
m_index_to_clut_addr[i] = clx + cly * 16;
|
||||
}
|
||||
|
||||
m_public_output_slots.resize(jak2_animated_texture_slots().size(), m_dummy_texture);
|
||||
m_public_output_slots.resize(animated_texture_slots(m_version).size(), m_dummy_texture);
|
||||
m_private_output_slots = m_public_output_slots;
|
||||
m_output_debug_flags.resize(jak2_animated_texture_slots().size());
|
||||
m_output_debug_flags.resize(animated_texture_slots(m_version).size());
|
||||
|
||||
// animation-specific stuff
|
||||
setup_texture_anims();
|
||||
setup_texture_anims_common();
|
||||
switch (m_version) {
|
||||
case GameVersion::Jak2:
|
||||
setup_texture_anims_jak2();
|
||||
break;
|
||||
case GameVersion::Jak3:
|
||||
setup_texture_anims_jak3();
|
||||
break;
|
||||
default:
|
||||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
|
||||
setup_sky();
|
||||
}
|
||||
|
@ -485,7 +512,7 @@ int TextureAnimator::create_fixed_anim_array(const std::vector<FixedAnimDef>& de
|
|||
anim.def = def;
|
||||
|
||||
// set up the destination texture.
|
||||
anim.dest_slot = output_slot_by_idx(GameVersion::Jak2, anim.def.tex_name);
|
||||
anim.dest_slot = output_slot_by_idx(m_version, anim.def.tex_name);
|
||||
auto* dtex = tex_by_name(m_common_level, anim.def.tex_name);
|
||||
if (anim.def.override_size) {
|
||||
anim.fbt.emplace(anim.def.override_size->x(), anim.def.override_size->y(),
|
||||
|
@ -552,7 +579,7 @@ void TextureAnimator::draw_debug_window() {
|
|||
imgui_show_tex(m_sky_hires_noise_textures[i].new_tex);
|
||||
}
|
||||
|
||||
auto& slots = jak2_animated_texture_slots();
|
||||
auto& slots = animated_texture_slots(m_version);
|
||||
for (size_t i = 0; i < slots.size(); i++) {
|
||||
ImGui::Text("Slot %d %s (%d)", (int)i, slots[i].c_str(), (int)m_private_output_slots[i]);
|
||||
imgui_show_tex(m_private_output_slots[i]);
|
||||
|
@ -562,7 +589,7 @@ void TextureAnimator::draw_debug_window() {
|
|||
}
|
||||
|
||||
void TextureAnimator::copy_private_to_public() {
|
||||
auto& slots = jak2_animated_texture_slots();
|
||||
auto& slots = animated_texture_slots(m_version);
|
||||
for (size_t i = 0; i < slots.size(); i++) {
|
||||
if (m_output_debug_flags[i].b) {
|
||||
m_public_output_slots[i] = m_dummy_texture;
|
||||
|
@ -598,7 +625,7 @@ void TextureAnimator::add_to_clut_blender_group(int idx,
|
|||
grp.blenders.emplace_back(prefix,
|
||||
std::array<std::string, 2>{prefix + suffix0, prefix + suffix1}, dgo,
|
||||
m_common_level, &m_opengl_texture_pool);
|
||||
grp.outputs.push_back(output_slot_by_idx(GameVersion::Jak2, prefix));
|
||||
grp.outputs.push_back(output_slot_by_idx(m_version, prefix));
|
||||
m_private_output_slots.at(grp.outputs.back()) = grp.blenders.back().texture();
|
||||
}
|
||||
}
|
||||
|
@ -984,7 +1011,7 @@ void TextureAnimator::force_to_gpu(int tbp) {
|
|||
PcTextureId TextureAnimator::get_id_for_tbp(TexturePool* pool, u64 tbp, u64 other_id) {
|
||||
const auto& it = m_ids_by_vram.find(tbp | (other_id << 32));
|
||||
if (it == m_ids_by_vram.end()) {
|
||||
auto ret = pool->allocate_pc_port_texture(GameVersion::Jak2);
|
||||
auto ret = pool->allocate_pc_port_texture(m_version);
|
||||
m_ids_by_vram[tbp] = ret;
|
||||
return ret;
|
||||
} else {
|
||||
|
@ -2047,471 +2074,6 @@ void TextureAnimator::run_fixed_animation(FixedAnim& anim, float time) {
|
|||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
}
|
||||
|
||||
void TextureAnimator::setup_texture_anims() {
|
||||
// DARKJAK
|
||||
m_darkjak_clut_blender_idx = create_clut_blender_group(
|
||||
{"jakbsmall-eyebrow", "jakbsmall-face", "jakbsmall-finger", "jakbsmall-hair"}, "-norm",
|
||||
"-dark", {});
|
||||
|
||||
// PRISON
|
||||
// MISSING EYELID
|
||||
m_jakb_prison_clut_blender_idx = create_clut_blender_group(
|
||||
{"jak-orig-arm-formorph", "jak-orig-eyebrow-formorph", "jak-orig-finger-formorph"}, "-start",
|
||||
"-end", "LDJAKBRN.DGO");
|
||||
add_to_clut_blender_group(m_jakb_prison_clut_blender_idx,
|
||||
{"jakb-facelft", "jakb-facert", "jakb-hairtrans"}, "-norm", "-dark",
|
||||
"LDJAKBRN.DGO");
|
||||
|
||||
// ORACLE
|
||||
// MISSING FINGER
|
||||
m_jakb_oracle_clut_blender_idx = create_clut_blender_group(
|
||||
{"jakb-eyebrow", "jakb-eyelid", "jakb-facelft", "jakb-facert", "jakb-hairtrans"}, "-norm",
|
||||
"-dark", "ORACLE.DGO");
|
||||
|
||||
// NEST
|
||||
// MISSING FINGER
|
||||
m_jakb_nest_clut_blender_idx = create_clut_blender_group(
|
||||
{"jakb-eyebrow", "jakb-eyelid", "jakb-facelft", "jakb-facert", "jakb-hairtrans"}, "-norm",
|
||||
"-dark", "NEB.DGO");
|
||||
|
||||
// KOR (doesn't work??)
|
||||
m_kor_transform_clut_blender_idx = create_clut_blender_group(
|
||||
{
|
||||
// "kor-eyeeffect-formorph",
|
||||
// "kor-hair-formorph",
|
||||
// "kor-head-formorph",
|
||||
// "kor-head-formorph-noreflect",
|
||||
// "kor-lowercaps-formorph",
|
||||
// "kor-uppercaps-formorph",
|
||||
},
|
||||
"-start", "-end", {});
|
||||
|
||||
// Skull Gem
|
||||
{
|
||||
FixedAnimDef skull_gem;
|
||||
skull_gem.move_to_pool = true;
|
||||
skull_gem.tex_name = "skull-gem-dest";
|
||||
skull_gem.color = math::Vector4<u8>{0, 0, 0, 0x80};
|
||||
// overriden in texture-finish.gc
|
||||
skull_gem.override_size = math::Vector2<int>(32, 32);
|
||||
|
||||
auto& skull_gem_0 = skull_gem.layers.emplace_back();
|
||||
skull_gem_0.end_time = 300.;
|
||||
skull_gem_0.tex_name = "skull-gem-alpha-00";
|
||||
skull_gem_0.set_blend_b2_d1();
|
||||
skull_gem_0.set_no_z_write_no_z_test();
|
||||
|
||||
auto& skull_gem_1 = skull_gem.layers.emplace_back();
|
||||
skull_gem_1.end_time = 300.;
|
||||
skull_gem_1.tex_name = "skull-gem-alpha-01";
|
||||
skull_gem_1.set_blend_b2_d1();
|
||||
skull_gem_1.set_no_z_write_no_z_test();
|
||||
|
||||
auto& skull_gem_2 = skull_gem.layers.emplace_back();
|
||||
skull_gem_2.end_time = 300.;
|
||||
skull_gem_2.tex_name = "skull-gem-alpha-02";
|
||||
skull_gem_2.set_blend_b2_d1();
|
||||
skull_gem_2.set_no_z_write_no_z_test();
|
||||
|
||||
m_skull_gem_fixed_anim_array_idx = create_fixed_anim_array({skull_gem});
|
||||
}
|
||||
|
||||
// Bomb
|
||||
{
|
||||
FixedAnimDef bomb;
|
||||
bomb.tex_name = "bomb-gradient";
|
||||
bomb.color = math::Vector4<u8>{0, 0, 0, 0x80};
|
||||
|
||||
auto& bomb_0 = bomb.layers.emplace_back();
|
||||
bomb_0.end_time = 300.;
|
||||
bomb_0.tex_name = "bomb-gradient-rim";
|
||||
bomb_0.set_blend_b2_d1();
|
||||
bomb_0.set_no_z_write_no_z_test();
|
||||
// :test (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
bomb_0.channel_masks[3] = false; // no alpha writes.
|
||||
|
||||
auto& bomb_1 = bomb.layers.emplace_back();
|
||||
bomb_1.end_time = 300.;
|
||||
bomb_1.tex_name = "bomb-gradient-flames";
|
||||
bomb_1.set_blend_b2_d1();
|
||||
bomb_1.set_no_z_write_no_z_test();
|
||||
// :test (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
bomb_1.channel_masks[3] = false; // no alpha writes.
|
||||
|
||||
m_bomb_fixed_anim_array_idx = create_fixed_anim_array({bomb});
|
||||
}
|
||||
|
||||
// CAS conveyor
|
||||
{
|
||||
FixedAnimDef conveyor_0;
|
||||
conveyor_0.tex_name = "cas-conveyor-dest";
|
||||
conveyor_0.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
conveyor_0.override_size = math::Vector2<int>(64, 32);
|
||||
auto& c0 = conveyor_0.layers.emplace_back();
|
||||
c0.set_blend_b2_d1();
|
||||
c0.set_no_z_write_no_z_test();
|
||||
// :test (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
c0.channel_masks[3] = false; // no alpha writes.
|
||||
c0.end_time = 300.;
|
||||
c0.tex_name = "cas-conveyor";
|
||||
|
||||
FixedAnimDef conveyor_1;
|
||||
conveyor_1.tex_name = "cas-conveyor-dest-01";
|
||||
conveyor_1.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
conveyor_1.override_size = math::Vector2<int>(64, 32);
|
||||
auto& c1 = conveyor_1.layers.emplace_back();
|
||||
c1.set_blend_b2_d1();
|
||||
c1.set_no_z_write_no_z_test();
|
||||
// :test (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
c1.channel_masks[3] = false; // no alpha writes.
|
||||
c1.end_time = 300.;
|
||||
c1.tex_name = "cas-conveyor";
|
||||
|
||||
FixedAnimDef conveyor_2;
|
||||
conveyor_2.tex_name = "cas-conveyor-dest-02";
|
||||
conveyor_2.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
conveyor_2.override_size = math::Vector2<int>(64, 32);
|
||||
auto& c2 = conveyor_2.layers.emplace_back();
|
||||
c2.set_blend_b2_d1();
|
||||
c2.set_no_z_write_no_z_test();
|
||||
// :test (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
c2.channel_masks[3] = false; // no alpha writes.
|
||||
c2.end_time = 300.;
|
||||
c2.tex_name = "cas-conveyor";
|
||||
|
||||
FixedAnimDef conveyor_3;
|
||||
conveyor_3.tex_name = "cas-conveyor-dest-03";
|
||||
conveyor_3.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
conveyor_3.override_size = math::Vector2<int>(64, 32);
|
||||
auto& c3 = conveyor_3.layers.emplace_back();
|
||||
c3.set_blend_b2_d1();
|
||||
c3.set_no_z_write_no_z_test();
|
||||
// :test (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
c3.channel_masks[3] = false; // no alpha writes.
|
||||
c3.end_time = 300.;
|
||||
c3.tex_name = "cas-conveyor";
|
||||
|
||||
m_cas_conveyor_anim_array_idx =
|
||||
create_fixed_anim_array({conveyor_0, conveyor_1, conveyor_2, conveyor_3});
|
||||
}
|
||||
|
||||
// SECURITY
|
||||
{
|
||||
FixedAnimDef env;
|
||||
env.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
env.tex_name = "security-env-dest";
|
||||
for (int i = 0; i < 2; i++) {
|
||||
auto& env1 = env.layers.emplace_back();
|
||||
env1.tex_name = "security-env-uscroll";
|
||||
// :test (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
env1.set_no_z_write_no_z_test();
|
||||
env1.channel_masks[3] = false; // no alpha writes.
|
||||
// :alpha (new 'static 'gs-alpha :b #x2 :d #x1)
|
||||
env1.set_blend_b2_d1();
|
||||
env1.end_time = 4800.f;
|
||||
}
|
||||
|
||||
FixedAnimDef dot;
|
||||
dot.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
dot.tex_name = "security-dot-dest";
|
||||
|
||||
auto& cwhite = dot.layers.emplace_back();
|
||||
cwhite.set_blend_b2_d1();
|
||||
cwhite.set_no_z_write_no_z_test();
|
||||
cwhite.tex_name = "common-white";
|
||||
cwhite.end_time = 4800.f;
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
auto& dsrc = dot.layers.emplace_back();
|
||||
dsrc.set_blend_b2_d1();
|
||||
dsrc.set_no_z_write_no_z_test();
|
||||
dsrc.end_time = 600.f;
|
||||
dsrc.tex_name = "security-dot-src";
|
||||
}
|
||||
|
||||
m_security_anim_array_idx = create_fixed_anim_array({env, dot});
|
||||
}
|
||||
|
||||
// WATERFALL
|
||||
{
|
||||
FixedAnimDef waterfall;
|
||||
waterfall.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
waterfall.tex_name = "waterfall-dest";
|
||||
for (int i = 0; i < 4; i++) {
|
||||
auto& src = waterfall.layers.emplace_back();
|
||||
src.set_blend_b1_d1();
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.end_time = 450.f;
|
||||
src.tex_name = "waterfall";
|
||||
}
|
||||
m_waterfall_anim_array_idx = create_fixed_anim_array({waterfall});
|
||||
}
|
||||
|
||||
{
|
||||
FixedAnimDef waterfall;
|
||||
waterfall.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
waterfall.tex_name = "waterfall-dest";
|
||||
for (int i = 0; i < 4; i++) {
|
||||
auto& src = waterfall.layers.emplace_back();
|
||||
src.set_blend_b1_d1();
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.end_time = 450.f;
|
||||
src.tex_name = "waterfall";
|
||||
}
|
||||
m_waterfall_b_anim_array_idx = create_fixed_anim_array({waterfall});
|
||||
}
|
||||
|
||||
// LAVA
|
||||
{
|
||||
FixedAnimDef lava;
|
||||
lava.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
lava.tex_name = "dig-lava-01-dest";
|
||||
for (int i = 0; i < 2; i++) {
|
||||
auto& src = lava.layers.emplace_back();
|
||||
src.set_blend_b1_d1();
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.end_time = 3600.f;
|
||||
src.tex_name = "dig-lava-01";
|
||||
}
|
||||
m_lava_anim_array_idx = create_fixed_anim_array({lava});
|
||||
}
|
||||
|
||||
{
|
||||
FixedAnimDef lava;
|
||||
lava.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
lava.tex_name = "dig-lava-01-dest";
|
||||
for (int i = 0; i < 2; i++) {
|
||||
auto& src = lava.layers.emplace_back();
|
||||
src.set_blend_b1_d1();
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.end_time = 3600.f;
|
||||
src.tex_name = "dig-lava-01";
|
||||
}
|
||||
m_lava_b_anim_array_idx = create_fixed_anim_array({lava});
|
||||
}
|
||||
|
||||
// Stadiumb
|
||||
{
|
||||
FixedAnimDef def;
|
||||
def.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
def.tex_name = "stdmb-energy-wall-01-dest";
|
||||
for (int i = 0; i < 2; i++) {
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b1_d1();
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.end_time = 300.f;
|
||||
src.tex_name = "stdmb-energy-wall-01";
|
||||
}
|
||||
m_stadiumb_anim_array_idx = create_fixed_anim_array({def});
|
||||
}
|
||||
|
||||
// Fortress pris
|
||||
{
|
||||
FixedAnimDef l_tread;
|
||||
l_tread.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
l_tread.tex_name = "robotank-tread-l-dest";
|
||||
auto& l_src = l_tread.layers.emplace_back();
|
||||
l_src.set_blend_b1_d1();
|
||||
l_src.set_no_z_write_no_z_test();
|
||||
l_src.channel_masks[3] = false; // no alpha writes.
|
||||
l_src.end_time = 1.f;
|
||||
l_src.tex_name = "robotank-tread";
|
||||
|
||||
FixedAnimDef r_tread;
|
||||
r_tread.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
r_tread.tex_name = "robotank-tread-r-dest";
|
||||
auto& r_src = r_tread.layers.emplace_back();
|
||||
r_src.set_blend_b1_d1();
|
||||
r_src.set_no_z_write_no_z_test();
|
||||
r_src.channel_masks[3] = false; // no alpha writes.
|
||||
r_src.end_time = 1.f;
|
||||
r_src.tex_name = "robotank-tread";
|
||||
|
||||
m_fortress_pris_anim_array_idx = create_fixed_anim_array({l_tread, r_tread});
|
||||
}
|
||||
|
||||
// Fortress Warp
|
||||
{
|
||||
FixedAnimDef def;
|
||||
def.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
def.move_to_pool = true;
|
||||
def.tex_name = "fort-roboscreen-dest";
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.end_time = 300.f;
|
||||
src.tex_name = "fort-roboscreen-env";
|
||||
m_fortress_warp_anim_array_idx = create_fixed_anim_array({def});
|
||||
}
|
||||
|
||||
// metkor
|
||||
{
|
||||
FixedAnimDef def;
|
||||
def.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
def.tex_name = "squid-env-rim-dest";
|
||||
def.move_to_pool = true;
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-head-env-noise";
|
||||
}
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-head-env-scan";
|
||||
}
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-head-env-rim";
|
||||
}
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-head-env-rim";
|
||||
}
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "environment-phong-rim";
|
||||
}
|
||||
m_metkor_anim_array_idx = create_fixed_anim_array({def});
|
||||
}
|
||||
|
||||
// shield
|
||||
{
|
||||
FixedAnimDef def;
|
||||
def.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
def.tex_name = "squid-env-rim-dest";
|
||||
def.move_to_pool = true;
|
||||
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "common-white";
|
||||
}
|
||||
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "squid-env-uscroll";
|
||||
}
|
||||
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "squid-env-uscroll";
|
||||
}
|
||||
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "squid-env-rim-src";
|
||||
}
|
||||
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "squid-env-rim-src";
|
||||
}
|
||||
m_shield_anim_array_idx = create_fixed_anim_array({def});
|
||||
}
|
||||
|
||||
// krew
|
||||
{
|
||||
FixedAnimDef def;
|
||||
def.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
def.tex_name = "krew-holo-dest";
|
||||
def.move_to_pool = true;
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-head-env-noise";
|
||||
}
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-head-env-scan";
|
||||
}
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-head-env-rim";
|
||||
}
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-head-env-rim";
|
||||
}
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-phong-env";
|
||||
}
|
||||
m_krew_holo_anim_array_idx = create_fixed_anim_array({def});
|
||||
}
|
||||
}
|
||||
|
||||
// initial values of the random table for cloud texture generation.
|
||||
constexpr Vector16ub kInitialRandomTable[TextureAnimator::kRandomTableSize] = {
|
||||
{0x20, 0x19, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x89, 0x67, 0x45, 0x23, 0x1},
|
||||
|
@ -2614,28 +2176,6 @@ void TextureAnimator::setup_sky() {
|
|||
m_random_table, dim, m_random_index);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
m_slime_output_slot = output_slot_by_idx(GameVersion::Jak2, "cas-toxic-slime-dest");
|
||||
m_slime_scroll_output_slot =
|
||||
output_slot_by_idx(GameVersion::Jak2, "cas-toxic-slime-scroll-dest");
|
||||
const float max_times[4] = {600.f, 300.f, 150.f, 75.f};
|
||||
const float scales[4] = {0.55, 0.6, 0.3, 0.1f};
|
||||
for (int i = 0, dim = kFinalSlimeTextureSize >> (kNumSlimeNoiseLayers - 1);
|
||||
i < kNumSlimeNoiseLayers; i++, dim *= 2) {
|
||||
auto& tex = m_slime_noise_textures[i];
|
||||
tex.temp_data.resize(dim * dim);
|
||||
tex.max_time = max_times[i];
|
||||
tex.scale = scales[i];
|
||||
tex.dim = dim;
|
||||
glGenTextures(1, &tex.new_tex);
|
||||
m_random_index = update_opengl_noise_texture(tex.new_tex, tex.temp_data.data(),
|
||||
m_random_table, dim, m_random_index);
|
||||
glGenTextures(1, &tex.old_tex);
|
||||
m_random_index = update_opengl_noise_texture(tex.old_tex, tex.temp_data.data(),
|
||||
m_random_table, dim, m_random_index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GLint TextureAnimator::run_clouds(const SkyInput& input, bool hires) {
|
||||
|
|
|
@ -246,7 +246,7 @@ class TexturePool;
|
|||
|
||||
class TextureAnimator {
|
||||
public:
|
||||
TextureAnimator(ShaderLibrary& shaders, const tfrag3::Level* common_level);
|
||||
TextureAnimator(ShaderLibrary& shaders, const tfrag3::Level* common_level, GameVersion version);
|
||||
~TextureAnimator();
|
||||
void handle_texture_anim_data(DmaFollower& dma,
|
||||
const u8* ee_mem,
|
||||
|
@ -259,7 +259,10 @@ class TextureAnimator {
|
|||
|
||||
private:
|
||||
void copy_private_to_public();
|
||||
void setup_texture_anims();
|
||||
void setup_texture_anims_common();
|
||||
void setup_texture_anims_jak2();
|
||||
void setup_texture_anims_jak3();
|
||||
|
||||
void setup_sky();
|
||||
void handle_upload_clut_16_16(const DmaTransfer& tf, const u8* ee_mem);
|
||||
void handle_generic_upload(const DmaTransfer& tf, const u8* ee_mem);
|
||||
|
@ -429,6 +432,7 @@ class TextureAnimator {
|
|||
static constexpr int kNumSlimeNoiseLayers = 4;
|
||||
|
||||
private:
|
||||
GameVersion m_version;
|
||||
Vector16ub m_random_table[kRandomTableSize];
|
||||
int m_random_index = 0;
|
||||
|
||||
|
@ -451,3 +455,10 @@ class TextureAnimator {
|
|||
int m_slime_output_slot = -1;
|
||||
int m_slime_scroll_output_slot = -1;
|
||||
};
|
||||
|
||||
int output_slot_by_idx(GameVersion version, const std::string& name);
|
||||
int update_opengl_noise_texture(GLuint texture,
|
||||
u8* temp,
|
||||
Vector16ub* random_table,
|
||||
int dim,
|
||||
int random_index_in);
|
|
@ -0,0 +1,494 @@
|
|||
#include "game/graphics/opengl_renderer/TextureAnimator.h"
|
||||
|
||||
void TextureAnimator::setup_texture_anims_jak3() {
|
||||
m_darkjak_clut_blender_idx = create_clut_blender_group(
|
||||
{"jakc-arm", "jakc-eyebrow", "jakc-face", "jakc-finger", "jakc-hair"}, "-norm", "-dark", {});
|
||||
}
|
||||
|
||||
void TextureAnimator::setup_texture_anims_common() {
|
||||
// Skull Gem
|
||||
{
|
||||
FixedAnimDef skull_gem;
|
||||
skull_gem.move_to_pool = true;
|
||||
skull_gem.tex_name = "skull-gem-dest";
|
||||
skull_gem.color = math::Vector4<u8>{0, 0, 0, 0x80};
|
||||
// overriden in texture-finish.gc
|
||||
skull_gem.override_size = math::Vector2<int>(32, 32);
|
||||
|
||||
auto& skull_gem_0 = skull_gem.layers.emplace_back();
|
||||
skull_gem_0.end_time = 300.;
|
||||
skull_gem_0.tex_name = "skull-gem-alpha-00";
|
||||
skull_gem_0.set_blend_b2_d1();
|
||||
skull_gem_0.set_no_z_write_no_z_test();
|
||||
|
||||
auto& skull_gem_1 = skull_gem.layers.emplace_back();
|
||||
skull_gem_1.end_time = 300.;
|
||||
skull_gem_1.tex_name = "skull-gem-alpha-01";
|
||||
skull_gem_1.set_blend_b2_d1();
|
||||
skull_gem_1.set_no_z_write_no_z_test();
|
||||
|
||||
auto& skull_gem_2 = skull_gem.layers.emplace_back();
|
||||
skull_gem_2.end_time = 300.;
|
||||
skull_gem_2.tex_name = "skull-gem-alpha-02";
|
||||
skull_gem_2.set_blend_b2_d1();
|
||||
skull_gem_2.set_no_z_write_no_z_test();
|
||||
|
||||
m_skull_gem_fixed_anim_array_idx = create_fixed_anim_array({skull_gem});
|
||||
}
|
||||
}
|
||||
|
||||
void TextureAnimator::setup_texture_anims_jak2() {
|
||||
// DARKJAK
|
||||
m_darkjak_clut_blender_idx = create_clut_blender_group(
|
||||
{"jakbsmall-eyebrow", "jakbsmall-face", "jakbsmall-finger", "jakbsmall-hair"}, "-norm",
|
||||
"-dark", {});
|
||||
|
||||
// PRISON
|
||||
// MISSING EYELID
|
||||
m_jakb_prison_clut_blender_idx = create_clut_blender_group(
|
||||
{"jak-orig-arm-formorph", "jak-orig-eyebrow-formorph", "jak-orig-finger-formorph"}, "-start",
|
||||
"-end", "LDJAKBRN.DGO");
|
||||
add_to_clut_blender_group(m_jakb_prison_clut_blender_idx,
|
||||
{"jakb-facelft", "jakb-facert", "jakb-hairtrans"}, "-norm", "-dark",
|
||||
"LDJAKBRN.DGO");
|
||||
|
||||
// ORACLE
|
||||
// MISSING FINGER
|
||||
m_jakb_oracle_clut_blender_idx = create_clut_blender_group(
|
||||
{"jakb-eyebrow", "jakb-eyelid", "jakb-facelft", "jakb-facert", "jakb-hairtrans"}, "-norm",
|
||||
"-dark", "ORACLE.DGO");
|
||||
|
||||
// NEST
|
||||
// MISSING FINGER
|
||||
m_jakb_nest_clut_blender_idx = create_clut_blender_group(
|
||||
{"jakb-eyebrow", "jakb-eyelid", "jakb-facelft", "jakb-facert", "jakb-hairtrans"}, "-norm",
|
||||
"-dark", "NEB.DGO");
|
||||
|
||||
// KOR (doesn't work??)
|
||||
m_kor_transform_clut_blender_idx = create_clut_blender_group(
|
||||
{
|
||||
// "kor-eyeeffect-formorph",
|
||||
// "kor-hair-formorph",
|
||||
// "kor-head-formorph",
|
||||
// "kor-head-formorph-noreflect",
|
||||
// "kor-lowercaps-formorph",
|
||||
// "kor-uppercaps-formorph",
|
||||
},
|
||||
"-start", "-end", {});
|
||||
|
||||
// Bomb
|
||||
{
|
||||
FixedAnimDef bomb;
|
||||
bomb.tex_name = "bomb-gradient";
|
||||
bomb.color = math::Vector4<u8>{0, 0, 0, 0x80};
|
||||
|
||||
auto& bomb_0 = bomb.layers.emplace_back();
|
||||
bomb_0.end_time = 300.;
|
||||
bomb_0.tex_name = "bomb-gradient-rim";
|
||||
bomb_0.set_blend_b2_d1();
|
||||
bomb_0.set_no_z_write_no_z_test();
|
||||
// :test (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
bomb_0.channel_masks[3] = false; // no alpha writes.
|
||||
|
||||
auto& bomb_1 = bomb.layers.emplace_back();
|
||||
bomb_1.end_time = 300.;
|
||||
bomb_1.tex_name = "bomb-gradient-flames";
|
||||
bomb_1.set_blend_b2_d1();
|
||||
bomb_1.set_no_z_write_no_z_test();
|
||||
// :test (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
bomb_1.channel_masks[3] = false; // no alpha writes.
|
||||
|
||||
m_bomb_fixed_anim_array_idx = create_fixed_anim_array({bomb});
|
||||
}
|
||||
|
||||
// CAS conveyor
|
||||
{
|
||||
FixedAnimDef conveyor_0;
|
||||
conveyor_0.tex_name = "cas-conveyor-dest";
|
||||
conveyor_0.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
conveyor_0.override_size = math::Vector2<int>(64, 32);
|
||||
auto& c0 = conveyor_0.layers.emplace_back();
|
||||
c0.set_blend_b2_d1();
|
||||
c0.set_no_z_write_no_z_test();
|
||||
// :test (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
c0.channel_masks[3] = false; // no alpha writes.
|
||||
c0.end_time = 300.;
|
||||
c0.tex_name = "cas-conveyor";
|
||||
|
||||
FixedAnimDef conveyor_1;
|
||||
conveyor_1.tex_name = "cas-conveyor-dest-01";
|
||||
conveyor_1.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
conveyor_1.override_size = math::Vector2<int>(64, 32);
|
||||
auto& c1 = conveyor_1.layers.emplace_back();
|
||||
c1.set_blend_b2_d1();
|
||||
c1.set_no_z_write_no_z_test();
|
||||
// :test (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
c1.channel_masks[3] = false; // no alpha writes.
|
||||
c1.end_time = 300.;
|
||||
c1.tex_name = "cas-conveyor";
|
||||
|
||||
FixedAnimDef conveyor_2;
|
||||
conveyor_2.tex_name = "cas-conveyor-dest-02";
|
||||
conveyor_2.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
conveyor_2.override_size = math::Vector2<int>(64, 32);
|
||||
auto& c2 = conveyor_2.layers.emplace_back();
|
||||
c2.set_blend_b2_d1();
|
||||
c2.set_no_z_write_no_z_test();
|
||||
// :test (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
c2.channel_masks[3] = false; // no alpha writes.
|
||||
c2.end_time = 300.;
|
||||
c2.tex_name = "cas-conveyor";
|
||||
|
||||
FixedAnimDef conveyor_3;
|
||||
conveyor_3.tex_name = "cas-conveyor-dest-03";
|
||||
conveyor_3.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
conveyor_3.override_size = math::Vector2<int>(64, 32);
|
||||
auto& c3 = conveyor_3.layers.emplace_back();
|
||||
c3.set_blend_b2_d1();
|
||||
c3.set_no_z_write_no_z_test();
|
||||
// :test (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
c3.channel_masks[3] = false; // no alpha writes.
|
||||
c3.end_time = 300.;
|
||||
c3.tex_name = "cas-conveyor";
|
||||
|
||||
m_cas_conveyor_anim_array_idx =
|
||||
create_fixed_anim_array({conveyor_0, conveyor_1, conveyor_2, conveyor_3});
|
||||
}
|
||||
|
||||
// SECURITY
|
||||
{
|
||||
FixedAnimDef env;
|
||||
env.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
env.tex_name = "security-env-dest";
|
||||
for (int i = 0; i < 2; i++) {
|
||||
auto& env1 = env.layers.emplace_back();
|
||||
env1.tex_name = "security-env-uscroll";
|
||||
// :test (new 'static 'gs-test :ate #x1 :afail #x3 :zte #x1 :ztst (gs-ztest always))
|
||||
env1.set_no_z_write_no_z_test();
|
||||
env1.channel_masks[3] = false; // no alpha writes.
|
||||
// :alpha (new 'static 'gs-alpha :b #x2 :d #x1)
|
||||
env1.set_blend_b2_d1();
|
||||
env1.end_time = 4800.f;
|
||||
}
|
||||
|
||||
FixedAnimDef dot;
|
||||
dot.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
dot.tex_name = "security-dot-dest";
|
||||
|
||||
auto& cwhite = dot.layers.emplace_back();
|
||||
cwhite.set_blend_b2_d1();
|
||||
cwhite.set_no_z_write_no_z_test();
|
||||
cwhite.tex_name = "common-white";
|
||||
cwhite.end_time = 4800.f;
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
auto& dsrc = dot.layers.emplace_back();
|
||||
dsrc.set_blend_b2_d1();
|
||||
dsrc.set_no_z_write_no_z_test();
|
||||
dsrc.end_time = 600.f;
|
||||
dsrc.tex_name = "security-dot-src";
|
||||
}
|
||||
|
||||
m_security_anim_array_idx = create_fixed_anim_array({env, dot});
|
||||
}
|
||||
|
||||
// WATERFALL
|
||||
{
|
||||
FixedAnimDef waterfall;
|
||||
waterfall.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
waterfall.tex_name = "waterfall-dest";
|
||||
for (int i = 0; i < 4; i++) {
|
||||
auto& src = waterfall.layers.emplace_back();
|
||||
src.set_blend_b1_d1();
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.end_time = 450.f;
|
||||
src.tex_name = "waterfall";
|
||||
}
|
||||
m_waterfall_anim_array_idx = create_fixed_anim_array({waterfall});
|
||||
}
|
||||
|
||||
{
|
||||
FixedAnimDef waterfall;
|
||||
waterfall.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
waterfall.tex_name = "waterfall-dest";
|
||||
for (int i = 0; i < 4; i++) {
|
||||
auto& src = waterfall.layers.emplace_back();
|
||||
src.set_blend_b1_d1();
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.end_time = 450.f;
|
||||
src.tex_name = "waterfall";
|
||||
}
|
||||
m_waterfall_b_anim_array_idx = create_fixed_anim_array({waterfall});
|
||||
}
|
||||
|
||||
// LAVA
|
||||
{
|
||||
FixedAnimDef lava;
|
||||
lava.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
lava.tex_name = "dig-lava-01-dest";
|
||||
for (int i = 0; i < 2; i++) {
|
||||
auto& src = lava.layers.emplace_back();
|
||||
src.set_blend_b1_d1();
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.end_time = 3600.f;
|
||||
src.tex_name = "dig-lava-01";
|
||||
}
|
||||
m_lava_anim_array_idx = create_fixed_anim_array({lava});
|
||||
}
|
||||
|
||||
{
|
||||
FixedAnimDef lava;
|
||||
lava.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
lava.tex_name = "dig-lava-01-dest";
|
||||
for (int i = 0; i < 2; i++) {
|
||||
auto& src = lava.layers.emplace_back();
|
||||
src.set_blend_b1_d1();
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.end_time = 3600.f;
|
||||
src.tex_name = "dig-lava-01";
|
||||
}
|
||||
m_lava_b_anim_array_idx = create_fixed_anim_array({lava});
|
||||
}
|
||||
|
||||
// Stadiumb
|
||||
{
|
||||
FixedAnimDef def;
|
||||
def.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
def.tex_name = "stdmb-energy-wall-01-dest";
|
||||
for (int i = 0; i < 2; i++) {
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b1_d1();
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.end_time = 300.f;
|
||||
src.tex_name = "stdmb-energy-wall-01";
|
||||
}
|
||||
m_stadiumb_anim_array_idx = create_fixed_anim_array({def});
|
||||
}
|
||||
|
||||
// Fortress pris
|
||||
{
|
||||
FixedAnimDef l_tread;
|
||||
l_tread.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
l_tread.tex_name = "robotank-tread-l-dest";
|
||||
auto& l_src = l_tread.layers.emplace_back();
|
||||
l_src.set_blend_b1_d1();
|
||||
l_src.set_no_z_write_no_z_test();
|
||||
l_src.channel_masks[3] = false; // no alpha writes.
|
||||
l_src.end_time = 1.f;
|
||||
l_src.tex_name = "robotank-tread";
|
||||
|
||||
FixedAnimDef r_tread;
|
||||
r_tread.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
r_tread.tex_name = "robotank-tread-r-dest";
|
||||
auto& r_src = r_tread.layers.emplace_back();
|
||||
r_src.set_blend_b1_d1();
|
||||
r_src.set_no_z_write_no_z_test();
|
||||
r_src.channel_masks[3] = false; // no alpha writes.
|
||||
r_src.end_time = 1.f;
|
||||
r_src.tex_name = "robotank-tread";
|
||||
|
||||
m_fortress_pris_anim_array_idx = create_fixed_anim_array({l_tread, r_tread});
|
||||
}
|
||||
|
||||
// Fortress Warp
|
||||
{
|
||||
FixedAnimDef def;
|
||||
def.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
def.move_to_pool = true;
|
||||
def.tex_name = "fort-roboscreen-dest";
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.end_time = 300.f;
|
||||
src.tex_name = "fort-roboscreen-env";
|
||||
m_fortress_warp_anim_array_idx = create_fixed_anim_array({def});
|
||||
}
|
||||
|
||||
// metkor
|
||||
{
|
||||
FixedAnimDef def;
|
||||
def.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
def.tex_name = "squid-env-rim-dest";
|
||||
def.move_to_pool = true;
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-head-env-noise";
|
||||
}
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-head-env-scan";
|
||||
}
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-head-env-rim";
|
||||
}
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-head-env-rim";
|
||||
}
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "environment-phong-rim";
|
||||
}
|
||||
m_metkor_anim_array_idx = create_fixed_anim_array({def});
|
||||
}
|
||||
|
||||
// shield
|
||||
{
|
||||
FixedAnimDef def;
|
||||
def.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
def.tex_name = "squid-env-rim-dest";
|
||||
def.move_to_pool = true;
|
||||
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "common-white";
|
||||
}
|
||||
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "squid-env-uscroll";
|
||||
}
|
||||
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "squid-env-uscroll";
|
||||
}
|
||||
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "squid-env-rim-src";
|
||||
}
|
||||
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "squid-env-rim-src";
|
||||
}
|
||||
m_shield_anim_array_idx = create_fixed_anim_array({def});
|
||||
}
|
||||
|
||||
// krew
|
||||
{
|
||||
FixedAnimDef def;
|
||||
def.color = math::Vector4<u8>(0, 0, 0, 0x80);
|
||||
def.tex_name = "krew-holo-dest";
|
||||
def.move_to_pool = true;
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-head-env-noise";
|
||||
}
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-head-env-scan";
|
||||
}
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-head-env-rim";
|
||||
}
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-head-env-rim";
|
||||
}
|
||||
{
|
||||
auto& src = def.layers.emplace_back();
|
||||
src.set_blend_b2_d1();
|
||||
src.channel_masks[3] = false; // no alpha writes.
|
||||
src.set_no_z_write_no_z_test();
|
||||
src.set_clamp();
|
||||
src.end_time = 1200.f;
|
||||
src.tex_name = "metkor-phong-env";
|
||||
}
|
||||
m_krew_holo_anim_array_idx = create_fixed_anim_array({def});
|
||||
}
|
||||
|
||||
{
|
||||
m_slime_output_slot = output_slot_by_idx(m_version, "cas-toxic-slime-dest");
|
||||
m_slime_scroll_output_slot = output_slot_by_idx(m_version, "cas-toxic-slime-scroll-dest");
|
||||
const float max_times[4] = {600.f, 300.f, 150.f, 75.f};
|
||||
const float scales[4] = {0.55, 0.6, 0.3, 0.1f};
|
||||
for (int i = 0, dim = kFinalSlimeTextureSize >> (kNumSlimeNoiseLayers - 1);
|
||||
i < kNumSlimeNoiseLayers; i++, dim *= 2) {
|
||||
auto& tex = m_slime_noise_textures[i];
|
||||
tex.temp_data.resize(dim * dim);
|
||||
tex.max_time = max_times[i];
|
||||
tex.scale = scales[i];
|
||||
tex.dim = dim;
|
||||
glGenTextures(1, &tex.new_tex);
|
||||
m_random_index = update_opengl_noise_texture(tex.new_tex, tex.temp_data.data(),
|
||||
m_random_table, dim, m_random_index);
|
||||
glGenTextures(1, &tex.old_tex);
|
||||
m_random_index = update_opengl_noise_texture(tex.old_tex, tex.temp_data.data(),
|
||||
m_random_table, dim, m_random_index);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -349,7 +349,9 @@ void Hfrag::render_hfrag_level(Hfrag::HfragLevel* lev,
|
|||
b = false;
|
||||
}
|
||||
lev->stats = {};
|
||||
for (u32 bucket_idx = 0; bucket_idx < lev->hfrag->buckets.size(); bucket_idx++) {
|
||||
|
||||
// bucket 0 is not drawn, although there is data there.
|
||||
for (u32 bucket_idx = 1; bucket_idx < lev->hfrag->buckets.size(); bucket_idx++) {
|
||||
const auto& bucket = lev->hfrag->buckets[bucket_idx];
|
||||
for (u32 corner_idx : bucket.corners) {
|
||||
const auto& corner = lev->hfrag->corners[corner_idx];
|
||||
|
|
|
@ -678,8 +678,6 @@
|
|||
(mem-copy! (the-as pointer s4-1) (the-as pointer this) #x2814)
|
||||
(setup-stars s4-1 (-> s4-1 star-mat) (-> this upload-data))
|
||||
(when (nonzero? (-> s4-1 star-colors 0 x))
|
||||
(format *stdcon* "doing stars asm!~%")
|
||||
(format *stdcon* "~`matrix`I~%" (-> s4-1 star-mat))
|
||||
(stars-transform-asm s4-1)
|
||||
)
|
||||
(cond
|
||||
|
|
|
@ -9,3 +9,234 @@
|
|||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(defun noise-texture-anim-layer-func ((arg0 dma-buffer) (arg1 uint) (arg2 int) (arg3 int) (arg4 texture-anim-layer) (arg5 float))
|
||||
(format 0 "unsupported noise-texture-anim-layer-func~%")
|
||||
(break!)
|
||||
0
|
||||
)
|
||||
|
||||
(defun cloud-texture-anim-layer-func ((arg0 dma-buffer) (arg1 uint) (arg2 int) (arg3 int) (arg4 texture-anim-layer) (arg5 float))
|
||||
(format 0 "unsupported cloud-texture-anim-layer-func~%")
|
||||
(break!)
|
||||
0
|
||||
)
|
||||
|
||||
(defun cloud-texture-anim-func ((arg0 dma-buffer) (arg1 texture-anim))
|
||||
(format 0 "unsupported cloud-texture-anim-func~%")
|
||||
(break!)
|
||||
0
|
||||
)
|
||||
|
||||
(defun fog-texture-anim-init ((arg0 texture-anim))
|
||||
(let ((gp-0 (new 'loading-level 'fog8x256))
|
||||
(s4-0 (new 'loading-level 'clut16x16))
|
||||
)
|
||||
(when (and gp-0 s4-0)
|
||||
(let ((v1-5 (new 'loading-level 'texture)))
|
||||
(let ((a0-4 (the int (-> arg0 extra x)))
|
||||
(a1-3 (the int (-> arg0 extra y)))
|
||||
)
|
||||
(set! (-> arg0 tex) v1-5)
|
||||
(set! (-> v1-5 pad 0) (the-as uint gp-0))
|
||||
(set! (-> v1-5 pad 1) (the-as uint s4-0))
|
||||
(set! (-> v1-5 w) 256)
|
||||
(set! (-> v1-5 h) 1)
|
||||
(set! (-> v1-5 num-mips) (the-as uint 1))
|
||||
(set! (-> v1-5 psm) (gs-psm mt8))
|
||||
(set! (-> v1-5 clutpsm) (the-as uint 0))
|
||||
(set! (-> v1-5 dest 0) (the-as uint (* a0-4 32)))
|
||||
(set! (-> v1-5 clutdest) (the-as uint (* a1-3 32)))
|
||||
)
|
||||
(set! (-> v1-5 width 0) (the-as uint 4))
|
||||
(set! (-> v1-5 masks data 0 mask quad) (the-as uint128 0))
|
||||
(set! (-> v1-5 masks data 1 mask quad) (the-as uint128 0))
|
||||
(set! (-> v1-5 masks data 2 mask quad) (the-as uint128 0))
|
||||
)
|
||||
0
|
||||
(dotimes (v1-7 256)
|
||||
(nop!)
|
||||
(nop!)
|
||||
(nop!)
|
||||
(nop!)
|
||||
(set! (-> gp-0 image v1-7) (the-as uint v1-7))
|
||||
)
|
||||
)
|
||||
)
|
||||
0
|
||||
)
|
||||
|
||||
(define *fog-texture-work* (new 'static 'fog-texture-work :const (new 'static 'vector :x 0.00390625)))
|
||||
|
||||
|
||||
(defun real-fog-texture-anim-func ((arg0 dma-buffer) (arg1 texture-anim))
|
||||
(local-vars (v1-11 float))
|
||||
(rlet ((vf1 :class vf)
|
||||
(vf2 :class vf)
|
||||
)
|
||||
(let ((s4-0 (new 'stack-no-clear 'vector))
|
||||
(s3-0 (new 'stack-no-clear 'vector))
|
||||
(s1-0 *fog-texture-work*)
|
||||
(s2-0 (the-as (pointer uint32) (-> arg1 tex pad 1)))
|
||||
)
|
||||
(let ((v1-1 (-> s1-0 color)))
|
||||
(dotimes (a0-1 256)
|
||||
(set! (-> s2-0 a0-1) (the-as uint v1-1))
|
||||
)
|
||||
)
|
||||
(vector+! (-> s1-0 max-corner) (the-as vector (-> s1-0 corner)) (-> s1-0 corner 1))
|
||||
(vector-float*! (-> s1-0 max-corner) (-> s1-0 max-corner) 0.5)
|
||||
(vector+! (-> s1-0 min-corner) (-> s1-0 corner 2) (-> s1-0 corner 3))
|
||||
(vector-float*! (-> s1-0 min-corner) (-> s1-0 min-corner) 0.5)
|
||||
(when (< (-> s1-0 max-corner y) (-> s1-0 min-corner y))
|
||||
(.lvf vf1 (&-> s1-0 min-corner quad))
|
||||
(.lvf vf2 (&-> s1-0 max-corner quad))
|
||||
(.svf (&-> s1-0 max-corner quad) vf1)
|
||||
(.svf (&-> s1-0 min-corner quad) vf2)
|
||||
(.mov v1-11 vf2)
|
||||
)
|
||||
(let* ((f0-3 (-> s1-0 corner 0 y))
|
||||
(f2-0 (-> s1-0 corner 1 y))
|
||||
(f1-1 (fmin f0-3 f2-0))
|
||||
(f2-1 (fmax f0-3 f2-0))
|
||||
(f3-0 (-> s1-0 corner 2 y))
|
||||
(f0-4 (-> s1-0 corner 3 y))
|
||||
(f1-3 (fmin (fmin f1-1 f3-0) f0-4))
|
||||
(f0-5 (fmax (fmax f2-1 f3-0) f0-4))
|
||||
)
|
||||
(set! (-> s1-0 min-corner y) f1-3)
|
||||
(set! (-> s1-0 max-corner y) f0-5)
|
||||
)
|
||||
(set! (-> s4-0 quad) (-> s1-0 min-corner quad))
|
||||
(vector-! s3-0 (-> s1-0 max-corner) (-> s1-0 min-corner))
|
||||
(vector-float/! s3-0 s3-0 256.0)
|
||||
0.0
|
||||
0.0
|
||||
(let ((f0-9 (fmax 4096.0 (-> *math-camera* trans y)))
|
||||
(f1-5 (-> arg1 extra z))
|
||||
(f2-3 (-> s1-0 alpha-near))
|
||||
(f3-1 (-> s1-0 alpha-far))
|
||||
(f4-0 (-> s1-0 alpha-delta))
|
||||
(f5-0 (-> s1-0 fog-near))
|
||||
(f6-0 (-> s1-0 fog-far))
|
||||
(f7-0 (-> s1-0 fog-delta))
|
||||
)
|
||||
(dotimes (v1-17 256)
|
||||
(let* ((f8-0 (-> s4-0 y))
|
||||
(f8-1 (cond
|
||||
((= f8-0 0.0)
|
||||
f3-1
|
||||
)
|
||||
((< f8-0 0.0)
|
||||
(let ((f9-4 (fmin f6-0 (/ (* f0-9 (vector-length s4-0)) (- f8-0)))))
|
||||
(+ f2-3 (* f4-0 (/ (fmax 0.0 (- f9-4 f5-0)) f7-0)))
|
||||
)
|
||||
)
|
||||
(else
|
||||
(let ((f9-8 (fmin f6-0 (/ (* f1-5 (vector-length s4-0)) f8-0))))
|
||||
(+ f2-3 (* f4-0 (/ (fmax 0.0 (- f9-8 f5-0)) f7-0)))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(set! (-> s2-0 (-> *clut-translate* v1-17))
|
||||
(logior (logand (-> s2-0 (-> *clut-translate* v1-17)) (the-as uint #xffffffff00ffffff))
|
||||
(shr (shl (the int (* 128.0 f8-1)) 56) 32)
|
||||
)
|
||||
)
|
||||
)
|
||||
(vector+! s4-0 s4-0 s3-0)
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((s5-1 (-> arg1 tex))
|
||||
(v1-20 *display*)
|
||||
(a0-26 144)
|
||||
)
|
||||
(+! (-> v1-20 mem-reserve-size) a0-26)
|
||||
(the-as
|
||||
int
|
||||
(when (not (-> v1-20 dma-buffer-overflow))
|
||||
(let ((a2-3 (-> v1-20 frames (-> v1-20 on-screen) global-buf)))
|
||||
(if (< (-> a2-3 real-buffer-end) (the-as int (&+ (-> a2-3 base) a0-26)))
|
||||
(set! (-> v1-20 dma-buffer-overflow) #t)
|
||||
)
|
||||
)
|
||||
(when (not (-> v1-20 dma-buffer-overflow))
|
||||
;; PC port of texture upload:
|
||||
(pc-texture-anim-flag upload-generic-vram arg0 :qwc 1)
|
||||
(let ((upload-record (the texture-anim-pc-upload (-> arg0 base))))
|
||||
(set! (-> upload-record data) (the-as pointer (-> s5-1 pad 0))) ;; the texture data
|
||||
(set! (-> upload-record width) (-> s5-1 w)) ;; see fog-texture-anim-init, there's not cropping.
|
||||
(set! (-> upload-record height) (-> s5-1 h))
|
||||
(set! (-> upload-record dest) (-> s5-1 dest 0))
|
||||
(set! (-> upload-record format) (-> s5-1 psm))
|
||||
(set! (-> upload-record force-to-gpu) 1)
|
||||
)
|
||||
(&+! (-> arg0 base) 16)
|
||||
;; original upload
|
||||
; (dma-buffer-add-gs-set arg0
|
||||
; (bitbltbuf
|
||||
; (new 'static 'gs-bitbltbuf :dpsm (the-as int (-> s5-1 psm)) :dbp (-> s5-1 dest 0) :dbw (-> s5-1 width 0))
|
||||
; )
|
||||
; (trxpos (new 'static 'gs-trxpos))
|
||||
; (trxreg (new 'static 'gs-trxreg :rrw (-> s5-1 w) :rrh (-> s5-1 h)))
|
||||
; (trxdir (new 'static 'gs-trxdir))
|
||||
; )
|
||||
; (dma-buffer-add-ref-texture arg0 (the-as pointer (-> s5-1 pad 0)) (-> s5-1 w) (-> s5-1 h) (-> s5-1 psm))
|
||||
|
||||
|
||||
;; PC port of clut upload
|
||||
;;(upload-vram-data arg0 (the-as int (-> s5-1 clutdest)) (the-as pointer (-> s5-1 pad 1)) 16 16)
|
||||
(pc-texture-anim-flag upload-clut-16-16 arg0 :qwc 1)
|
||||
(let ((upload-record (the texture-anim-pc-upload (-> arg0 base))))
|
||||
(set! (-> upload-record data) (the-as pointer (-> s5-1 pad 1))) ;; the clut16x16 object
|
||||
(set! (-> upload-record width) 16)
|
||||
(set! (-> upload-record height) 16)
|
||||
(set! (-> upload-record dest) (-> s5-1 clutdest))
|
||||
(set! (-> upload-record format) (gs-psm ct32))
|
||||
)
|
||||
(&+! (-> arg0 base) 16)
|
||||
(set! (-> *texture-pool* ids (shr (-> s5-1 clutdest) 6)) (the-as uint 0))
|
||||
; (let* ((v1-29 arg0)
|
||||
; (a0-39 (-> v1-29 base))
|
||||
; )
|
||||
; (set! (-> (the-as (pointer int64) a0-39)) #x10000002)
|
||||
; (s.w! (+ a0-39 8) 0)
|
||||
; (let ((a1-52 #x50000002))
|
||||
; (s.w! (+ a0-39 12) a1-52)
|
||||
; )
|
||||
; (set! (-> v1-29 base) (&+ a0-39 16))
|
||||
; )
|
||||
; (let* ((v1-30 arg0)
|
||||
; (a0-41 (-> v1-30 base))
|
||||
; )
|
||||
; (set! (-> (the-as (pointer uint64) a0-41)) (make-u128 0 (the-as uint #x1000000000008001)))
|
||||
; (let ((a1-55 (the-as uint #xeeeeeeeeeeeeeeee)))
|
||||
; (s.d! (+ a0-41 8) a1-55)
|
||||
; )
|
||||
; (set! (-> v1-30 base) (&+ a0-41 16))
|
||||
; )
|
||||
; (let ((v1-31 (-> arg0 base)))
|
||||
; (set! (-> (the-as (pointer int64) v1-31)) 0)
|
||||
; (let ((a0-43 63))
|
||||
; (s.d! (+ v1-31 8) a0-43)
|
||||
; )
|
||||
; (set! (-> arg0 base) (&+ v1-31 16))
|
||||
; )
|
||||
(let ((v1-34 (shr (-> s5-1 dest 0) 6)))
|
||||
(dotimes (a0-44 3)
|
||||
(set! (-> *texture-pool* ids (+ v1-34 a0-44)) (the-as uint 0))
|
||||
)
|
||||
)
|
||||
#f
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defun fog-texture-anim-func ((arg0 dma-buffer) (arg1 texture-anim))
|
||||
(real-fog-texture-anim-func arg0 arg1)
|
||||
)
|
||||
|
|
|
@ -11,34 +11,41 @@
|
|||
;; DECOMP BEGINS
|
||||
|
||||
(deftype texture-anim-layer (structure)
|
||||
((extra vector :inline :offset 240)
|
||||
(func (function dma-buffer uint int int texture-anim-layer float int))
|
||||
(func-id symbol :overlay-at func)
|
||||
(init-func (function texture-anim-layer int))
|
||||
(init-func-id symbol :overlay-at init-func)
|
||||
(tex texture)
|
||||
(start-time float)
|
||||
(end-time float)
|
||||
(tex-name string)
|
||||
(test gs-test)
|
||||
(alpha gs-alpha)
|
||||
(clamp gs-clamp)
|
||||
(start-color vector :inline :offset 80)
|
||||
(start-scale vector2 :inline :offset 96)
|
||||
(start-offset vector2 :inline :offset 104)
|
||||
(start-st-scale vector2 :inline :offset 112)
|
||||
(start-st-offset vector2 :inline :offset 120)
|
||||
(start-qs vector :inline :offset 128)
|
||||
(start-rot degrees :offset 144)
|
||||
(start-st-rot degrees :offset 148)
|
||||
(end-color vector :inline :offset 160)
|
||||
(end-scale vector2 :inline :offset 176)
|
||||
(end-offset vector2 :inline :offset 184)
|
||||
(end-st-scale vector2 :inline :offset 192)
|
||||
(end-st-offset vector2 :inline :offset 200)
|
||||
(end-qs vector :inline :offset 208)
|
||||
(end-rot degrees :offset 224)
|
||||
(end-st-rot degrees :offset 228)
|
||||
((interpolated-color vector :inline)
|
||||
(interpolated-scale-offset vector :inline)
|
||||
(interpolated-st-scale-offset vector :inline)
|
||||
(interpolated-qs vector :inline)
|
||||
(interpolated-rot vector :inline)
|
||||
(extra vector :inline :offset 240)
|
||||
(func (function dma-buffer uint int int texture-anim-layer float int))
|
||||
(func-id symbol :overlay-at func)
|
||||
(init-func (function texture-anim-layer int))
|
||||
(init-func-id symbol :overlay-at init-func)
|
||||
(tex texture)
|
||||
(start-time float)
|
||||
(end-time float)
|
||||
(tex-name string)
|
||||
(test gs-test)
|
||||
(alpha gs-alpha)
|
||||
(clamp gs-clamp)
|
||||
(start-vectors vector 5 :inline :offset 80) ;; added
|
||||
(start-color vector :inline :offset 80)
|
||||
(start-scale vector2 :inline :offset 96)
|
||||
(start-offset vector2 :inline :offset 104)
|
||||
(start-st-scale vector2 :inline :offset 112)
|
||||
(start-st-offset vector2 :inline :offset 120)
|
||||
(start-qs vector :inline :offset 128)
|
||||
(start-rot degrees :offset 144)
|
||||
(start-st-rot degrees :offset 148)
|
||||
(end-vectors vector 5 :inline :offset 160) ;; added
|
||||
(end-color vector :inline :offset 160)
|
||||
(end-scale vector2 :inline :offset 176)
|
||||
(end-offset vector2 :inline :offset 184)
|
||||
(end-st-scale vector2 :inline :offset 192)
|
||||
(end-st-offset vector2 :inline :offset 200)
|
||||
(end-qs vector :inline :offset 208)
|
||||
(end-rot degrees :offset 224)
|
||||
(end-st-rot degrees :offset 228)
|
||||
)
|
||||
(:methods
|
||||
(initialize-texture! (_type_) _type_)
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -18,11 +18,11 @@
|
|||
)
|
||||
|
||||
(format #t "skipping init in texture-finish.~%")
|
||||
; (init! *sky-texture-anim-array*)
|
||||
; (init! *darkjak-texture-anim-array*)
|
||||
; (init! *skull-gem-texture-anim-array*)
|
||||
; (init! *default-water-texture-anim-array*)
|
||||
; (init! *default-warp-texture-anim-array*)
|
||||
(init! *sky-texture-anim-array*)
|
||||
(init! *darkjak-texture-anim-array*)
|
||||
(init! *skull-gem-texture-anim-array*)
|
||||
(init! *default-water-texture-anim-array*)
|
||||
(init! *default-warp-texture-anim-array*)
|
||||
|
||||
(kmemclose)
|
||||
|
||||
|
|
|
@ -16,6 +16,10 @@
|
|||
(none)
|
||||
)
|
||||
|
||||
(defmethod cloth-system-cmd-handler ((this cloth-system) (cmds pair))
|
||||
(format 0 "unimplemented cloth-system-cmd-handler~%")
|
||||
(none)
|
||||
)
|
||||
|
||||
(defmethod init! ((this cloth-base))
|
||||
;; this looks more like run! than init to me.
|
||||
|
|
|
@ -3,34 +3,41 @@
|
|||
|
||||
;; definition of type texture-anim-layer
|
||||
(deftype texture-anim-layer (structure)
|
||||
((extra vector :inline :offset 240)
|
||||
(func (function dma-buffer uint int int texture-anim-layer float int))
|
||||
(func-id symbol :overlay-at func)
|
||||
(init-func (function texture-anim-layer int))
|
||||
(init-func-id symbol :overlay-at init-func)
|
||||
(tex texture)
|
||||
(start-time float)
|
||||
(end-time float)
|
||||
(tex-name string)
|
||||
(test gs-test)
|
||||
(alpha gs-alpha)
|
||||
(clamp gs-clamp)
|
||||
(start-color vector :inline :offset 80)
|
||||
(start-scale vector2 :inline :offset 96)
|
||||
(start-offset vector2 :inline :offset 104)
|
||||
(start-st-scale vector2 :inline :offset 112)
|
||||
(start-st-offset vector2 :inline :offset 120)
|
||||
(start-qs vector :inline :offset 128)
|
||||
(start-rot degrees :offset 144)
|
||||
(start-st-rot degrees :offset 148)
|
||||
(end-color vector :inline :offset 160)
|
||||
(end-scale vector2 :inline :offset 176)
|
||||
(end-offset vector2 :inline :offset 184)
|
||||
(end-st-scale vector2 :inline :offset 192)
|
||||
(end-st-offset vector2 :inline :offset 200)
|
||||
(end-qs vector :inline :offset 208)
|
||||
(end-rot degrees :offset 224)
|
||||
(end-st-rot degrees :offset 228)
|
||||
((interpolated-color vector :inline)
|
||||
(interpolated-scale-offset vector :inline)
|
||||
(interpolated-st-scale-offset vector :inline)
|
||||
(interpolated-qs vector :inline)
|
||||
(interpolated-rot vector :inline)
|
||||
(extra vector :inline :offset 240)
|
||||
(func (function dma-buffer uint int int texture-anim-layer float int))
|
||||
(func-id symbol :overlay-at func)
|
||||
(init-func (function texture-anim-layer int))
|
||||
(init-func-id symbol :overlay-at init-func)
|
||||
(tex texture)
|
||||
(start-time float)
|
||||
(end-time float)
|
||||
(tex-name string)
|
||||
(test gs-test)
|
||||
(alpha gs-alpha)
|
||||
(clamp gs-clamp)
|
||||
(start-vectors vector 5 :inline :offset 80)
|
||||
(start-color vector :inline :overlay-at (-> start-vectors 0))
|
||||
(start-scale vector2 :inline :offset 96)
|
||||
(start-offset vector2 :inline :offset 104)
|
||||
(start-st-scale vector2 :inline :offset 112)
|
||||
(start-st-offset vector2 :inline :offset 120)
|
||||
(start-qs vector :inline :overlay-at (-> start-vectors 3))
|
||||
(start-rot degrees :offset 144)
|
||||
(start-st-rot degrees :offset 148)
|
||||
(end-vectors vector 5 :inline :offset 160)
|
||||
(end-color vector :inline :overlay-at (-> end-vectors 0))
|
||||
(end-scale vector2 :inline :offset 176)
|
||||
(end-offset vector2 :inline :offset 184)
|
||||
(end-st-scale vector2 :inline :offset 192)
|
||||
(end-st-offset vector2 :inline :offset 200)
|
||||
(end-qs vector :inline :overlay-at (-> end-vectors 3))
|
||||
(end-rot degrees :offset 224)
|
||||
(end-st-rot degrees :offset 228)
|
||||
)
|
||||
(:methods
|
||||
(initialize-texture! (_type_) _type_)
|
||||
|
|
Loading…
Reference in New Issue