diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index b8b67ba9eb..5df12bf46e 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -33012,7 +33012,7 @@ (define-extern ogreboss-bounce-boulder-init-by-other (function int entity-actor none :behavior ogreboss-bounce-boulder)) (define-extern ogreboss-set-stage1-camera (function none)) (define-extern ogreboss-move-near (function time-frame float none :behavior ogreboss)) -(define-extern ogreboss-shoot-boulder (function int none :behavior ogreboss)) +(define-extern ogreboss-shoot-boulder (function pickup-type none :behavior ogreboss)) (define-extern ogreboss-inc-try-count (function none :behavior ogreboss)) (define-extern ogreboss-emerge (function float none :behavior ogreboss)) (define-extern ogreboss-pick-target (function int :behavior ogreboss)) diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index ff53c9e3cb..c2fab39ce2 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -1645,7 +1645,6 @@ ["L370", "attack-info"], ["L371", "attack-info"], ["L384", "float", true], - ["L384", "float", true], ["L385", "float", true], ["L386", "float", true], ["L387", "float", true], diff --git a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc index 7abc82803d..a9dd69ef14 100644 --- a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc @@ -4054,5 +4054,11 @@ } }, + "(code ogreboss-stage1)": { + "vars": { + "s5-0": ["boulder-pickup", "pickup-type"] + } + }, + "aaaaaaaaaaaaaaaaaaaaaaa": {} } diff --git a/decompiler/config/jak1_pal.jsonc b/decompiler/config/jak1_pal.jsonc index 27fb62058f..c3ac3fcfb4 100644 --- a/decompiler/config/jak1_pal.jsonc +++ b/decompiler/config/jak1_pal.jsonc @@ -6,7 +6,7 @@ // if you want to filter to only some object names. // it will make the decompiler much faster. - "allowed_objects": ["powerups", "windmill-sail-ag", "medres-beach3-ag", "mayorgears-ag", "medres-village11-ag", "revcycleprop-ag", "medres-jungle2-ag", "revcycle-ag", "medres-misty-ag", "sagesail-ag", "windspinner-ag", "medres-jungle1-ag", "medres-village12-ag", "hutlamp-ag", "medres-jungle-ag", "medres-village13-ag", "medres-beach2-ag", "villa-starfish-ag", "medres-training-ag", "medres-beach-ag", "reflector-middle-ag", "medres-beach1-ag", "evilplant-ag", "swamp-rock-ag", "swamp-spike-ag", "swampcam-ag", "tar-plat-ag", "balance-plat-ag", "eichar-ag"], + "allowed_objects": ["ogreboss", "ogreboss-ag", "windmill-sail-ag", "medres-beach3-ag", "mayorgears-ag", "medres-village11-ag", "revcycleprop-ag", "medres-jungle2-ag", "revcycle-ag", "medres-misty-ag", "sagesail-ag", "windspinner-ag", "medres-jungle1-ag", "medres-village12-ag", "hutlamp-ag", "medres-jungle-ag", "medres-village13-ag", "medres-beach2-ag", "villa-starfish-ag", "medres-training-ag", "medres-beach-ag", "reflector-middle-ag", "medres-beach1-ag", "evilplant-ag", "swamp-rock-ag", "swamp-spike-ag", "swampcam-ag", "tar-plat-ag", "balance-plat-ag", "eichar-ag"], "banned_objects": [], //////////////////////////// diff --git a/decompiler/config/jak1_pal/label_types.jsonc b/decompiler/config/jak1_pal/label_types.jsonc index e3675b4929..7580bef843 100644 --- a/decompiler/config/jak1_pal/label_types.jsonc +++ b/decompiler/config/jak1_pal/label_types.jsonc @@ -1576,103 +1576,6 @@ ["L145", "vector"] ], - "ogreboss": [ - ["L359", "attack-info"], - ["L367", "attack-info"], - ["L370", "attack-info"], - ["L371", "attack-info"], - ["L384", "float", true], - ["L384", "float", true], - ["L385", "float", true], - ["L386", "float", true], - ["L387", "float", true], - ["L388", "float", true], - ["L389", "float", true], - ["L390", "float", true], - ["L391", "float", true], - ["L392", "float", true], - ["L393", "float", true], - ["L394", "float", true], - ["L395", "float", true], - ["L396", "float", true], - ["L397", "float", true], - ["L398", "float", true], - ["L399", "float", true], - ["L400", "float", true], - ["L401", "float", true], - ["L402", "float", true], - ["L403", "float", true], - ["L404", "float", true], - ["L405", "float", true], - ["L406", "float", true], - ["L407", "float", true], - ["L408", "float", true], - ["L409", "float", true], - ["L410", "float", true], - ["L411", "float", true], - ["L412", "float", true], - ["L413", "float", true], - ["L414", "float", true], - ["L415", "float", true], - ["L416", "float", true], - ["L417", "float", true], - ["L418", "float", true], - ["L419", "float", true], - ["L420", "float", true], - ["L421", "float", true], - ["L422", "float", true], - ["L423", "float", true], - ["L424", "float", true], - ["L425", "float", true], - ["L426", "float", true], - ["L427", "float", true], - ["L428", "float", true], - ["L429", "float", true], - ["L430", "float", true], - ["L431", "float", true], - ["L432", "float", true], - ["L433", "float", true], - ["L434", "float", true], - ["L435", "float", true], - ["L436", "float", true], - ["L437", "float", true], - ["L438", "float", true], - ["L439", "float", true], - ["L440", "float", true], - ["L441", "float", true], - ["L442", "float", true], - ["L443", "float", true], - ["L444", "float", true], - ["L445", "float", true], - ["L446", "float", true], - ["L447", "float", true], - ["L448", "float", true], - ["L449", "float", true], - ["L450", "float", true], - ["L451", "float", true], - ["L452", "float", true], - ["L453", "float", true], - ["L454", "float", true], - ["L455", "float", true], - ["L456", "float", true], - ["L457", "float", true], - ["L458", "float", true], - ["L459", "float", true], - ["L460", "float", true], - ["L461", "rgba", true], - ["L462", "uint64", true], - ["L463", "uint64", true], - ["L464", "uint64", true], - ["L465", "uint64", true], - ["L466", "uint64", true], - ["L525", "float", true], - ["L526", "uint64", true], - ["L527", "uint64", true], - ["L528", "uint64", true], - ["L529", "uint64", true], - ["L530", "uint64", true] - ], - "target-flut": [ ["L399", "attack-info"], ["L406", "float", true], @@ -2100,6 +2003,102 @@ "sequence-a-village1": [["L40", "vector"]], + "ogreboss": [ + ["L360", "attack-info"], + ["L368", "attack-info"], + ["L371", "attack-info"], + ["L372", "attack-info"], + ["L385", "float", true], + ["L386", "float", true], + ["L387", "float", true], + ["L388", "float", true], + ["L389", "float", true], + ["L390", "float", true], + ["L391", "float", true], + ["L392", "float", true], + ["L393", "float", true], + ["L394", "float", true], + ["L395", "float", true], + ["L396", "float", true], + ["L397", "float", true], + ["L398", "float", true], + ["L399", "float", true], + ["L400", "float", true], + ["L401", "float", true], + ["L402", "float", true], + ["L403", "float", true], + ["L404", "float", true], + ["L405", "float", true], + ["L406", "float", true], + ["L407", "float", true], + ["L408", "float", true], + ["L409", "float", true], + ["L410", "float", true], + ["L411", "float", true], + ["L412", "float", true], + ["L413", "float", true], + ["L414", "float", true], + ["L415", "float", true], + ["L416", "float", true], + ["L417", "float", true], + ["L418", "float", true], + ["L419", "float", true], + ["L420", "float", true], + ["L421", "float", true], + ["L422", "float", true], + ["L423", "float", true], + ["L424", "float", true], + ["L425", "float", true], + ["L426", "float", true], + ["L427", "float", true], + ["L428", "float", true], + ["L429", "float", true], + ["L430", "float", true], + ["L431", "float", true], + ["L432", "float", true], + ["L433", "float", true], + ["L434", "float", true], + ["L435", "float", true], + ["L436", "float", true], + ["L437", "float", true], + ["L438", "float", true], + ["L439", "float", true], + ["L440", "float", true], + ["L441", "float", true], + ["L442", "float", true], + ["L443", "float", true], + ["L444", "float", true], + ["L445", "float", true], + ["L446", "float", true], + ["L447", "float", true], + ["L448", "float", true], + ["L449", "float", true], + ["L450", "float", true], + ["L451", "float", true], + ["L452", "float", true], + ["L453", "float", true], + ["L454", "float", true], + ["L455", "float", true], + ["L456", "float", true], + ["L457", "float", true], + ["L458", "float", true], + ["L459", "float", true], + ["L460", "float", true], + ["L461", "float", true], + ["L462", "rgba", true], + ["L463", "uint64", true], + ["L464", "uint64", true], + ["L465", "uint64", true], + ["L466", "uint64", true], + ["L467", "uint64", true], + ["L526", "float", true], + ["L527", "uint64", true], + ["L528", "uint64", true], + ["L529", "uint64", true], + ["L530", "uint64", true], + ["L531", "uint64", true] + ], + // please do not add things after this entry! git is dumb. "object-file-that-doesnt-actually-exist-and-i-just-put-this-here-to-prevent-merge-conflicts-with-this-file": [] } diff --git a/goal_src/levels/ogre/ogreboss.gc b/goal_src/levels/ogre/ogreboss.gc index aa867daa6c..0103ed19fa 100644 --- a/goal_src/levels/ogre/ogreboss.gc +++ b/goal_src/levels/ogre/ogreboss.gc @@ -471,15 +471,17 @@ (defbehavior ogreboss-super-boulder-event-handler ogreboss-super-boulder ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 - (('touch) + ;; PAL patch here + (('touch 'attack) (when (and *target* ((method-of-type touching-shapes-entry prims-touching?) (the-as touching-shapes-entry (-> arg3 param 0)) (-> self root-override) (the-as uint 1) ) ) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode 'ogreboss-super-boulder)))) - (go ogreboss-super-boulder-killed-player) + (if (send-event arg0 'attack-invinc (-> arg3 param 0) (static-attack-info ((mode 'ogreboss-super-boulder)))) + #f + ) ) ) (('effect) @@ -817,7 +819,8 @@ (set! (-> self root-override quat vec quad) (-> self parent-override 0 root quat vec quad)) (vector-identity! (-> self root-override scale)) (initialize-skeleton self *ogreboss-super-boulder-sg* '()) - (logclear! (-> self mask) (process-mask actor-pause)) + ;; PAL patch here + (logclear! (-> self mask) (process-mask actor-pause enemy)) (set! (-> self lava) (entity-actor-lookup (-> self entity) 'water-actor 0)) (logior! (-> self skel effect flags) 1) (set! (-> self draw origin-joint-index) (the-as uint 3)) @@ -1248,14 +1251,15 @@ gp-0 ) -(defbehavior ogreboss-shoot-boulder ogreboss ((arg0 int)) +(defbehavior ogreboss-shoot-boulder ogreboss ((arg0 pickup-type)) + ;; TODO non U1 v1 compatibility!! (let ((gp-0 (new 'stack-no-clear 'ogreboss-missile-init-data))) (let ((s5-0 (new 'stack-no-clear 'vector))) (set! (-> gp-0 src) (-> self node-list data 52 bone transform vector 3)) (set! (-> gp-0 duration) (the-as time-frame (the int (* 300.0 (+ 1.25 (* -0.25 (-> self level)) (/ 0.5 (-> self difficulty)))))) ) - (set! (-> gp-0 pickup-type) (the-as pickup-type arg0)) + (set! (-> gp-0 pickup-type) arg0) (set! (-> gp-0 blast-radius) 32768.0) (cond (*target* @@ -1506,7 +1510,7 @@ (ja :num! (seek! max f30-0)) ) (countdown (gp-1 (+ gp-0 -1)) - (let ((s5-0 0)) + (let ((s5-0 (pickup-type none))) (let ((f28-0 0.0)) (cond ((>= 1.0 (-> *target* fact-info-target health)) @@ -1530,7 +1534,7 @@ ) ) (if (and *target* (< (rand-vu) f28-0)) - (set! s5-0 4) + (set! s5-0 (pickup-type eco-green)) ) ) (ogreboss-shoot-boulder s5-0) @@ -1542,7 +1546,7 @@ ) (ogreboss-inc-try-count) ) - (ogreboss-shoot-boulder 3) + (ogreboss-shoot-boulder (pickup-type eco-blue)) (ja-no-eval :group! ogreboss-attack2-last-ja :num! (seek! max f30-0) :frame-num 0.0) (until (ja-done? 0) (suspend) diff --git a/test/decompiler/reference/levels/ogre/ogreboss_REF.gc b/test/decompiler/reference/levels/ogre/ogreboss_REF.gc index c0d7530345..2a13424ffd 100644 --- a/test/decompiler/reference/levels/ogre/ogreboss_REF.gc +++ b/test/decompiler/reference/levels/ogre/ogreboss_REF.gc @@ -1349,14 +1349,14 @@ ;; definition for function ogreboss-shoot-boulder ;; INFO: Return type mismatch int vs none. ;; Used lq/sq -(defbehavior ogreboss-shoot-boulder ogreboss ((arg0 int)) +(defbehavior ogreboss-shoot-boulder ogreboss ((arg0 pickup-type)) (let ((gp-0 (new 'stack-no-clear 'ogreboss-missile-init-data))) (let ((s5-0 (new 'stack-no-clear 'vector))) (set! (-> gp-0 src) (-> self node-list data 52 bone transform vector 3)) (set! (-> gp-0 duration) (the-as time-frame (the int (* 300.0 (+ 1.25 (* -0.25 (-> self level)) (/ 0.5 (-> self difficulty)))))) ) - (set! (-> gp-0 pickup-type) (the-as pickup-type arg0)) + (set! (-> gp-0 pickup-type) arg0) (set! (-> gp-0 blast-radius) 32768.0) (cond (*target* @@ -1620,7 +1620,7 @@ (ja :num! (seek! max f30-0)) ) (countdown (gp-1 (+ gp-0 -1)) - (let ((s5-0 0)) + (let ((boulder-pickup (pickup-type none))) (let ((f28-0 0.0)) (cond ((>= 1.0 (-> *target* fact-info-target health)) @@ -1644,10 +1644,10 @@ ) ) (if (and *target* (< (rand-vu) f28-0)) - (set! s5-0 4) + (set! boulder-pickup (pickup-type eco-green)) ) ) - (ogreboss-shoot-boulder s5-0) + (ogreboss-shoot-boulder (the-as pickup-type boulder-pickup)) ) (ja-no-eval :group! ogreboss-attack2-loop-ja :num! (seek! max f30-0) :frame-num 0.0) (until (ja-done? 0) @@ -1656,7 +1656,7 @@ ) (ogreboss-inc-try-count) ) - (ogreboss-shoot-boulder 3) + (ogreboss-shoot-boulder (pickup-type eco-blue)) (ja-no-eval :group! ogreboss-attack2-last-ja :num! (seek! max f30-0) :frame-num 0.0) (until (ja-done? 0) (suspend)