jak-project/goal_src/jak3/engine/game/penetrate-h.gc
Hat Kid 36f1592b90
decomp3: lightning renderer, nav code, texture remap, fix progress menu crash (#3461)
Also adds:

- BLERC
- Minimap (with missing texture for the map, sprites work)
- Eco Mine files
- Precursor robot boss files
- Sewer files
- Vehicle files
2024-04-12 18:44:38 -04:00

357 lines
11 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: penetrate-h.gc
;; name in dgo: penetrate-h
;; dgos: GAME
;; +++knocked-type
(defenum knocked-type
:type uint8
(none 0)
(mech-punch 1)
(explode-or-darkjak 2)
(dark-shot 3)
(yellow-shot 4)
(red-shot 5)
(blue-shot 6)
(vehicle 7)
(knocked-off 8)
)
;; ---knocked-type
;; +++penetrate
(defenum penetrate
:type uint64
:bitfield #t
(touch 0)
(generic-attack 1)
(lunge 2)
(flop 3)
(punch 4)
(spin 5)
(roll 6)
(uppercut 7)
(bonk 8)
(tube 9)
(vehicle 10)
(flut-attack 11)
(board 12)
(mech 13)
(mech-punch 14)
(mech-bonk 15)
(dark-skin 16)
(dark-punch 17)
(dark-bomb 18)
(dark-smack 19)
(flut 20)
(shield 21)
(explode 22)
(jak-yellow-shot 23)
(jak-red-shot 24)
(jak-blue-shot 25)
(jak-dark-shot 26)
(enemy-yellow-shot 27)
(enemy-dark-shot 28)
(eco-yellow 29)
(eco-red 30)
(eco-blue 31)
(eco-green 32)
(knocked 33)
(jak-red-shockwave 34)
(jak-dark-nuke 35)
(jak-dark-blackhole 36)
(emp-blast 37)
(penetrate38 38)
(penetrate39 39)
(penetrate40 40)
(penetrate41 41)
(penetrate42 42)
(penetrate43 43)
(penetrate44 44)
(penetrate45 45)
(penetrate46 46)
(penetrate47 47)
(penetrate48 48)
(penetrate49 49)
(penetrate50 50)
(penetrate51 51)
(penetrate52 52)
(penetrate53 53)
(penetrate54 54)
(penetrate55 55)
(penetrate56 56)
(penetrate57 57)
(penetrate58 58)
(penetrate59 59)
(penetrate60 60)
(penetrate61 61)
(penetrate64 62)
(penetrate63 63)
)
;; ---penetrate
;; DECOMP BEGINS
;; WARN: Return type mismatch object vs string.
(defun-debug penetrate->string ((arg0 penetrate))
(if (= (logand (penetrate jak-red-shockwave) arg0) (shl 4 32))
(format #t "jak-red-shockwave ")
)
(if (= (logand arg0 (penetrate mech-bonk)) (penetrate mech-bonk))
(format #t "mech-bonk ")
)
(if (= (logand (penetrate eco-blue) arg0) (shl #x8000 16))
(format #t "eco-blue ")
)
(if (= (logand (penetrate explode) arg0) (penetrate explode))
(format #t "explode ")
)
(if (= (logand arg0 (penetrate bonk)) (penetrate bonk))
(format #t "bonk ")
)
(if (= (logand (penetrate eco-red) arg0) (penetrate eco-red))
(format #t "eco-red ")
)
(if (= (logand arg0 (penetrate roll)) (penetrate roll))
(format #t "roll ")
)
(if (= (logand arg0 (penetrate mech)) (penetrate mech))
(format #t "mech ")
)
(if (= (logand arg0 (penetrate flut-attack)) (penetrate flut-attack))
(format #t "flut-attack ")
)
(if (= (logand arg0 (penetrate mech-punch)) (penetrate mech-punch))
(format #t "mech-punch ")
)
(if (= (logand (penetrate jak-dark-shot) arg0) (penetrate jak-dark-shot))
(format #t "jak-dark-shot ")
)
(if (= (logand (penetrate dark-smack) arg0) (penetrate dark-smack))
(format #t "dark-smack ")
)
(if (= (logand arg0 (penetrate flop)) (penetrate flop))
(format #t "flop ")
)
(if (= (logand arg0 (penetrate spin)) (penetrate spin))
(format #t "spin ")
)
(if (= (logand (penetrate dark-bomb) arg0) (penetrate dark-bomb))
(format #t "dark-bomb ")
)
(if (= (logand arg0 (penetrate vehicle)) (penetrate vehicle))
(format #t "vehicle ")
)
(if (= (logand arg0 (penetrate generic-attack)) (penetrate generic-attack))
(format #t "generic-attack ")
)
(if (= (logand arg0 (penetrate touch)) (penetrate touch))
(format #t "touch ")
)
(if (= (logand (penetrate eco-green) arg0) (shl 1 32))
(format #t "eco-green ")
)
(if (= (logand (penetrate jak-red-shot) arg0) (penetrate jak-red-shot))
(format #t "jak-red-shot ")
)
(if (= (logand arg0 (penetrate lunge)) (penetrate lunge))
(format #t "lunge ")
)
(if (= (logand arg0 (penetrate punch)) (penetrate punch))
(format #t "punch ")
)
(if (= (logand arg0 (penetrate tube)) (penetrate tube))
(format #t "tube ")
)
(if (= (logand (penetrate jak-dark-nuke) arg0) (shl 8 32))
(format #t "jak-dark-nuke ")
)
(if (= (logand (penetrate enemy-yellow-shot) arg0) (penetrate enemy-yellow-shot))
(format #t "enemy-yellow-shot ")
)
(if (= (logand (penetrate knocked) arg0) (shl 2 32))
(format #t "knocked ")
)
(if (= (logand (penetrate emp-blast) arg0) (shl 32 32))
(format #t "emp-blast ")
)
(if (= (logand arg0 (penetrate uppercut)) (penetrate uppercut))
(format #t "uppercut ")
)
(if (= (logand (penetrate dark-punch) arg0) (penetrate dark-punch))
(format #t "dark-punch ")
)
(if (= (logand (penetrate shield) arg0) (penetrate shield))
(format #t "shield ")
)
(if (= (logand (penetrate jak-yellow-shot) arg0) (penetrate jak-yellow-shot))
(format #t "jak-yellow-shot ")
)
(if (= (logand arg0 (penetrate board)) (penetrate board))
(format #t "board ")
)
(if (= (logand (penetrate flut) arg0) (penetrate flut))
(format #t "flut ")
)
(if (= (logand (penetrate eco-yellow) arg0) (penetrate eco-yellow))
(format #t "eco-yellow ")
)
(if (= (logand (penetrate dark-skin) arg0) (penetrate dark-skin))
(format #t "dark-skin ")
)
(if (= (logand (penetrate jak-dark-blackhole) arg0) (shl 16 32))
(format #t "jak-dark-blackhole ")
)
(if (= (logand (penetrate enemy-dark-shot) arg0) (penetrate enemy-dark-shot))
(format #t "enemy-dark-shot ")
)
(the-as string (if (= (logand (penetrate jak-blue-shot) arg0) (penetrate jak-blue-shot))
(format #t "jak-blue-shot ")
)
)
)
(defun penetrate-using->damage ((arg0 penetrate))
(cond
((logtest? (penetrate dark-bomb dark-smack flut) arg0)
15.0
)
((logtest? arg0 (penetrate mech-punch mech-bonk))
5.0
)
((logtest? (penetrate) arg0)
4.0
)
((logtest? (penetrate punch spin jak-dark-shot enemy-dark-shot) arg0)
3.0
)
((logtest? (penetrate
flop
uppercut
tube
flut-attack
dark-punch
explode
jak-yellow-shot
jak-red-shot
jak-blue-shot
enemy-yellow-shot
eco-yellow
)
arg0
)
2.0
)
((logtest? arg0 (penetrate generic-attack roll bonk board))
1.0
)
(else
0.0
)
)
)
;; WARN: Return type mismatch uint vs penetrate.
(defun penetrated-by-all&hit-points->penetrated-by ((arg0 penetrate) (arg1 int))
(let ((a0-1 arg1))
(the-as penetrate (logior (logclear arg0 (penetrate
generic-attack
flop
punch
spin
roll
uppercut
bonk
tube
flut-attack
board
mech-punch
mech-bonk
dark-skin
dark-punch
dark-bomb
dark-smack
flut
shield
explode
jak-yellow-shot
jak-red-shot
jak-blue-shot
jak-dark-shot
enemy-yellow-shot
enemy-dark-shot
eco-yellow
knocked
)
)
(cond
((or (zero? a0-1) (= a0-1 1))
(the-as int (the-as uint #x23fffdbfa))
)
((= a0-1 2)
#x3fdecab8
)
((= a0-1 3)
#x141cc030
)
((= a0-1 4)
#x1cc000
)
((= a0-1 5)
#x1cc000
)
((or (= a0-1 6)
(= a0-1 7)
(= a0-1 8)
(= a0-1 9)
(= a0-1 10)
(= a0-1 11)
(= a0-1 12)
(= a0-1 13)
(= a0-1 14)
(= a0-1 15)
)
#x1c0000
)
(else
0
)
)
)
)
)
)
;; WARN: Return type mismatch int vs knocked-type.
(defun pu->knocked-type ((arg0 penetrate))
(the-as knocked-type (cond
((logtest? arg0 (penetrate vehicle))
7
)
((logtest? (penetrate jak-blue-shot) arg0)
6
)
((logtest? (penetrate jak-yellow-shot enemy-yellow-shot) arg0)
4
)
((logtest? (penetrate jak-red-shot) arg0)
5
)
((logtest? (penetrate explode jak-dark-shot enemy-dark-shot) arg0)
2
)
((logtest? (penetrate dark-bomb dark-smack) arg0)
3
)
((logtest? arg0 (penetrate mech-punch))
1
)
(else
0
)
)
)
)