Free Look [Vega] This code will allow you to freely move the camera around and navigate it to wherever you want. You can move it to any location and 'spin' it in any direction. Whatever controller you are using must be connected via 'Port/Connection 1'. You need to fill in 4 activators and 1 deactivator. The first four '283BXXXX YYYYZZZZ' lines are the activators. The final '283BXXXX YYYYZZZZ' line is the deactivator. Link to X,Y,Z values - https://mariokartwii.com/nonmkwcodes/dbzbt3/bt3gecko.txt TTTT = Controller WWWW = TTTT + 4 TTTT values: 1BEC = GCN Analog Stick 1BF4 = GCN C Stick 1C54 = Classic Left Analog Stick & Wii Chuck Analog Stick 1C5C = Classic Right Analog Stick 1st activator = Master Activator. Press this button FIRST to enable the ability to allow free camera movement. Immediately after pressing the Master Activator, all Camera movement is disabled. Once you are "master activated", you can pick any of the following 3 modes (XZ Mode, Y Mode, Long/Lat Mode). You can also switch between any of the 3 modes at any time while you are "master activated". 2nd activator = Enable "XZ Mode". Press this button to go into XY Mode. During XZ Mode, you use the Stick to move the camera around via the X and Z coordinates only. Move Stick left to move camera view to the left. Move Stick right to move view to the right. Move C stick up to move view forward. Move Stick down to move view backwards. 3rd activator = Enable "Y Mode". Press this button to go into Y Mode. During Y Mode, you use the Stick to move the camera around via the Y coordinate only. Move Stick up to move camera view up (towards the sky). Move Stick down to move view down (towards the floor). 4th activator = Enable "Long/Lat Mode". Press this button to go into Long/Lat Mode. During Long/Lat Mode, you use the Stick to tilt the camera via a Latitude or Longitude motion. Move Stick left to spin the view counter-clockwise. Move Stick right to spin view clockwise. Move Stick up to tilt the view up. Move Stick down to tilt view down. The only deactivator is called the Master Deactivator. Press it at any time to disable the code completely. Camera will automatically re-sync and function normally again. Code effects 1P's view only. Code can be easily modified to effect 2P/COM instead, but I personally don't see the point other than Human vs Human split screen. One Final Note: Camera 'updates/movements' still occur from cutscenes (transformations, certain attacks, etc). The camera updates/movements from those events can be disabled, but it creates a probability of a glitch to occur in the match where one of the characters will keep repeating the same attack forever, lol. However, if you still want these cutscenes to not effect the camera, then add the following two RAM Writes immediately below the Master Activator... 04045278 60000000 04045378 60000000 .. and the following RAM Writes immediately below the Master Deactivator... 04045278 4BFC40D1 04045378 4BFC3FD1 Happy coding! NTSC-U Rev1 040003B0 41A00000 040003B4 3E800000 283BXXXX YYYYZZZZ 04045268 60000000 04044A9C 60000000 0404535C 60000000 04045368 60000000 04045388 60000000 04045394 60000000 E0000000 00000000 283BXXXX YYYYZZZZ C2045398 0000000A 815B000C 2C0A0000 40820040 3D808000 C00C03B0 3D40803B C18ATTTT FD806050 C1AAWWWW 118C6C20 C15F0000 C17F0008 114A5C20 118C0032 114A602A D15F0000 114A54A0 D15F0008 C0228744 00000000 E0000000 00000000 283BXXXX YYYYZZZZ C2045398 00000007 815B000C 2C0A0000 40820024 3D808000 C00C03B0 3D40803B C02AWWWW EC210032 C01F0004 EC00082A D01F0004 C0228744 60000000 00000000 E0000000 00000000 283BXXXX YYYYZZZZ C2045398 00000009 815B000C 2C0A0000 40820038 3D808000 C00C03B4 3D40803B C18ATTTT C1AAWWWW FDA06850 118C6C20 118C0032 E0030000 100004A0 1000602A 100004A0 F0030000 C0228744 00000000 E0000000 00000000 283BXXXX YYYYZZZZ 04045268 4BFC4479 04044A9C 4BFC47A9 0404535C 4BFC3E99 04045368 4BFFD57D 04045388 4BFC3E6D 04045394 4BFFD551 04045398 C0228744 E0000000 80008000 Code creator: Vega List of sources~ EVA RAM Writes: At address 0x800003B0, is the single precision float value multiplier for XYZ coordinates. It is set to 20.0 in decimal form. At address 0x800003B4, is the single precision float value multiplier for Latitude/Longitude. It is set to 0.25 in decimal form. ###NOT USED: READ NOTE on LAST ASM!###At address 0x800003B8, is the single precision float value to test the upper/lower bound of Latitude/Longitude. It is set to 179.75 in decimal form. =============== Non-EVA RAM Writes: Addresses 0x80045150, 0x80044984, 0x80045244, 0x80045250, 0x800045270, & 0x8004527C are nopped (by the Master Activator) from calling any of their child sub-routines. Master deactivator will write back all the original instructions plus also write back the original instruction at 0x8045280 is 'dactivate' the C2 ASM Codes. 0x80045150 handles XYZ updates 0x80044984 handles XYZ updates if the character is moving back toward your eye's view on the TV/Computer screen 0x80045244, 0x80045250, 0x80045270, & 0x8004527C handle any isntance of latitude/longitude writes. 0x80045280 occurs right after all possible writes from those listed addresses, thus it's a good spot to hook the C2 Codes to. =============== ASM Source for XZ Coordinate: #START ASSEMBLY #Address #NTSC-U = 80045398 #r31 points to Camera X #r31 + 4 points to Camera Y #r31 + 8 points to Camera Z #r3 points to Camera Longitude #r3 + 4 points to Camera Latitude #r27 = Master Pointer #r10 & r0 = safe #f0 and f1 = safe #XZ source #Stick left decreases float, right increases float #Stick up decreases float, down increases float #X coord left = increase float (actually you decrease float when going left but game starts P1 as facing almost 180 degrees backward, so I made it opposite in the code on purpose) #X coord right = decrease float (actually you increase float when going right but game starts P1 as facing almost 180 degrees backward, so I made it opposite in the code on purpose) #Z coord forward = decrease float (actually you increase float when going forward but game starts P1 as facing almost 180 degrees backwards, so I made it opposite in the code on purpose) #Z coord back = increase float (actually you decrease float when going backward but game starts P1 as facing almost 180 degrees backward, so I made it opposite in the code on purpose) #Check slot of Master Pointer lwz r10, 0xC (r27) cmpwi r10, 0 bne- original_instruction #Load float constant (20.0) into f0 lis r12, 0x8000 lfs f0, 0x03B0 (r12) #Load Stick left/right into f12 lis r10, 0x803B lfs f12, 0x1BF4 (r10) #GCN C Stick used for compilation #Because left is decreasing floats and right is increasing on Stick, but X coordinates' left/right is opposite..., we must negate the Stick left/right float value before doing anything else fneg f12, f12 #Load Stick up/down into f13 lfs f13, 0x1BF8 (r10) #GCN C Stick used for compilation #Merge f12 and f13 together. ps0 will = left/right. ps1 will = up/down ps_merge00 f12, f12, f13 #Load X coordinate (left/right) into f10 lfs f10, 0 (r31) #Load Z coordinate (forward/back) into f11 lfs f11, 0x8 (r31) #Merge X and Z into f10 together. ps0 will = X. ps1 will = Z ps_merge00 f10, f10, f11 #Multiply C stick values by the float constant to get X & Z adjuster ps_mul f12, f12, f0 #Update X & Z with its new value! ps_add f10, f10, f12 #Store back X (ps0 gets stored during a stfs) stfs f10, 0 (r31) #Swap Z into f10's ps0 so we can store it ps_merge10 f10, f10, f10 #Store Z now (ps0 gets stored during a stfs) stfs f10, 0x8 (r31) #Original Instruction original_instruction: lfs f1, -0x78BC (rtoc) #END ASSEMBLY ====================== ASM Source for Y Coordinate: #START ASSEMBLY #Address #NTSC-U = 80045398 #r31 points to Camera X #r31 + 4 points to Camera Y #r31 + 8 points to Camera Z #r3 points to Camera Longitude #r3 + 4 points to Camera Latitude #r27 = Master Pointer #r10 & r0 = safe #f0 and f1 = safe #Y source #Stick left decreases float, right increases float #Stick up decreases float, down increases float #Y coord up = decrease float #Y coord down = increase float #Check slot of Master Pointer lwz r10, 0xC (r27) cmpwi r10, 0 bne- original_instruction #Load float constant (50.0) into f0 lis r12, 0x8000 lfs f0, 0x03B0 (r12) #Load Stick up/down float lis r10, 0x803B lfs f1, 0x1BF8 (r10) #GCN C Stick used for compilation #Multiply Stick values by float constant to get Y adjuster fmuls f1, f1, f0 #Load Y Coordinate lfs f0, 0x4 (r31) #Update Y Coordinate value with the Adjuster fadds f0, f0, f1 #Store new Y Coordinate back to memory stfs f0, 0x4 (r31) #OG instruction original_instruction: lfs f1, -0x78BC (rtoc) #END ASSEMBLY ====================== ASM Source for Latitude/Longitude #START ASSEMBLY #Address #NTSC-U = 80045398 #r31 points to Camera X #r31 + 4 points to Camera Y #r31 + 8 points to Camera Z #r3 points to Camera Longitude #r3 + 4 points to Camera Latitude #r27 = Master Pointer #r10 & r0 = safe #f0 and f1 = safe #Lat/Long source #Stick left decreases float, right increases float #Stick up decreases float, down increases float #Longitude tilt up = increase float #Longitude tilt down = decrease float #Latitude spin counter clockwise (turn left) = decrease float #Latitude spin clockwise (turn right) = increase float #Check slot of Master Pointer lwz r10, 0xC (r27) cmpwi r10, 0 bne- original_instruction #Load float constant (0.25) into f0; lfs loads into both ps's lis r12, 0x8000 lfs f0, 0x03B4 (r12) #Load Stick left/right lis r10, 0x803B lfs f12, 0x1BF4 (r10) #GCN C Stick used for compilation #Load Stick up/down lfs f13, 0x1BF8 (r10) #GCN C Stick used for compilation #Because up is -1 and down is 1 on C stick but Longitude does up = 1 and down = -1, we must negate the C stick up/down float value fneg f13, f13 #Merge f12 and f13 together. ps0 = left/right. ps1 = up/down ps_merge00 f12, f12, f13 #Multiply C stick values by the float constant to get Adjuster ps_mul f12, f12, f0 #Load Long/Lat into f0 psq_l f0, 0 (r3), 0, 0 #We need long/lat to swap to lat/long so C stick values update them correctly ps_merge10 f0, f0, f0 #Update Lat/Long with Adjuster ps_add f0, f0, f12 ##################################################### ##NOTE: DBZ doesn't use standard latitude/longitude upper/lower bounds of 180 degress, so the following instructions are all commented out. The game uses negative value of Pi/positive Pi for a full 180 degree rotation. What's weird is that no matter how much you increase/decrease rotation value(s), the game (camera view) doesn't break. There's no upper/lower bound. # #Load 179.75 constant into f1, both ps's get loaded #lfs f1, 0x03B8 (r12) # #Set -179.75 into f12. Can't use fneg because the result will be an undefined value! #ps_neg f12, f1 # #Check Lat against 179.75 #ps_cmpo0 cr1, f0, f1 #bgt- cr1, lat_hi_to_lo # #Check Lat against -179.75 #ps_cmpo0 cr1, f0, f12 #blt- cr1, lat_lo_to_hi # #Check Long against 179.75 #ps_cmpo1 cr1, f0, f1 #bgt- cr1, long_hi_to_lo # #Check Long against -179.75 #ps_cmpo1 cr1, f0, f12 #bge- cr1, update #Constant wasn't overshot, good to go # #long_lo_to_hi; Long go from Negative to Positive #ps_merge01 f0, f0, f1 #Place 179.75 (f1) into f0's ps1 #b update # #Lat go from Positive to Negative #lat_hi_to_lo: #fmr f0, f12 #fmr (when used with single precision) only effect's Destination Register's ps0. Hooray! #b update # #Lat go from Negative to Positive #lat_lo_to_hi: #fmr f0, f1 #fmr (when used with single precision) only effect's Destination Register's ps0. Hooray! #b update # #Long go from Positive to Negative #long_hi_to_lo: #ps_merge01 f0, f0, f12 #Place -179.75 (f12) into f0's ps1 # #We have new updated Lat/Long values now. Re-swap to set FPR back to long/lat, then store back to memory. #update: ####################################################### #Swap lat/long back to be long/lat ps_merge10 f0, f0, f0 #Store back new updated long/lat psq_st f0, 0 (r3), 0, 0 #Original instruction original_instruction: lfs f1, -0x78BC (rtoc) #END ASSEMBLY