Jul 17 2011, 01:58 AM Post #1 | |
Coding like a Rockstar! Posts: 1,468 From: ??? Joined: 28-May 09 | 'Live TV Screens' This is the line found in cull.ipl that was found to have control over the 8-Track screen: CODE -1399.83, -208.103, 1039.34, 0, 120.187, 1039.34, 173.006, 0, 1157.71, 2, 0, 0, 0, 0 CODE Center X, Center Y, Center Z, Unknown, X Radius, Bottom Z, Y Radius, Unknown, Top Z, Flags, MirrorParam1, MirrorParam2, MirrorParam3, MirrorParam4 Flags (binary) CODE 1 - Mirror 10 - Screen This line actually just controls where the camera has to be in order to see the TV Screen (or for any other culling to take effect, actually). The camera positions are indeed hardcoded. They can be found, changed, etc. in this function: 0x7266B0 Some math is used to switch the camera positions (modular operations on the current time) and transverse it. The process (which I learned from NTA is 'multirendering') involves setting the camera position, 'capturing' what it sees and writing it to a RenderWare structure. The image is then drawn in the game. This is a similar method to how pictures can be taken with the camera in SA. The TV camera position matrix is saved in the CCamera structure (CCamera+ADC). By writing the main camera position matrix to it, we can make the TV Screen show what the main camera shows: SANNY 0A8C: write_memory 0x50B538 size 1 value 0xEB virtual_protect 1 // stops the game from updating the matrix 0A8E: 0@ = 0xB6F028 + 0x14 0A8D: 1@ = read_memory 0@ size 4 virtual_protect 0 0A8E: 0@ = 0xB6F028 + 0xADC 0AA6: call_method 0x59BBC0 struct 0@ num_params 1 pop 0 1@ // CMatrix__Copy(&CCamera.TvCamMatrix, CCamera.placeable.pMatrix) Now onto moving the actual screen... Here are the coordinate locations for the two screens in the stadium, as well as their default values: CODE East Screen-TopRightX - 0x8D5DD8 (-1333.453) East Screen-TopRightY - 0x8D5DDC (-221.89799) East Screen-TopRightZ - 0x8D5DE0 (1079.141) East Screen-TopLeftX - 0x8D5DE4 (-1333.453) East Screen-TopLeftY - 0x8D5DE8 (-189.89799) East Screen-TopLeftZ - 0x8D5DEC (1079.141) East Screen-BottomLeftX - 0x8D5DF0 (-1333.453) East Screen-BottomLeftY - 0x8D5DF4 (-189.89799) East Screen-BottomLeftZ - 0x8D5DF8 (1067.141) East Screen-BottomRightX - 0x8D5DFC (-1333.453) East Screen-BottomRightY - 0x8D5E00 (-221.89799) East Screen-BottomRightZ - 0x8D5E04 (1067.141) West Screen-TopRightX - 0x8D5E08 (-1477.845) West Screen-TopRightY - 0x8D5E0C (-189.96899) West Screen-TopRightZ - 0x8D5E10 (1079.141) West Screen-TopLeftX - 0x8D5E14 (-1477.845) West Screen-TopLeftY - 0x8D5E18 (-221.96899) West Screen-TopLeftZ - 0x8D5E1C (1079.141) West Screen-BottomLeftX - 0x8D5E20 (-1477.845) West Screen-BottomLeftY - 0x8D5E24 (-221.96899) West Screen-BottomLeftZ - 0x8D5E28 (1067.141) West Screen-BottomRightX - 0x8D5E2C (-1477.845) West Screen-BottomRightY - 0x8D5E30 (-189.96899) West Screen-BottomRightZ - 0x8D5E34 (1067.141) I moved the West Screen to Grove Street, cause Westside is da best: Here's a function so you can do the same: SANNY //0AB1: call_scm_func @SetupLiveScreen 7 ScreenID 0 Position 2512.1816 -1669.3521 21.0431 Width 20.0 Height 10.0 Angle 90.0 :SetupLiveScreen 0012: 0@ *= 0x30 000A: 0@ += 0x8D5DD8 0017: 4@ /= 2.0 0017: 5@ /= 2.0 02F6: 8@ = sine 6@ 02F7: 7@ = cosine 6@ 0013: 7@ *= 4@ 0013: 8@ *= 4@ 0087: 9@ = 1@ 0087: 10@ = 2@ 005B: 9@ += 7@ 005B: 10@ += 8@ 0087: 11@ = 3@ 005B: 11@ += 5@ 0087: 12@ = 1@ 0087: 13@ = 2@ 0063: 12@ -= 7@ 0063: 13@ -= 8@ 0087: 17@ = 3@ 0063: 17@ -= 5@ 0A8C: write_memory 0@ size 4 value 9@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 10@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 11@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 12@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 13@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 11@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 12@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 13@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 17@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 9@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 10@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 17@ virtual_protect 0 0AB2: ret 0 You should only use 0 or 1 for the ScreenID (unless you were smart enough to add another). I should mention that while the TV was showing in Grove Street, my FPS dropped a bit (by about 10 fps). In interiors, the FPS decrease isn't noticable because not that much has to be rendered. So take that into account when adding screens to places. Still, the FPS difference won't be as much with lower graphics settings. -------------------- | CLEO 4.3.22 | A?i?a?o?3D | UI SDK | Black Market Mod 1.0.1 | GInput 0.3 | Cheat Keyboard | Tactile Cheat Activation | Stream Ini Extender 0.7 | SuperVars | ScrDebug | Vigilante Justice: San Andreas | |
Jul 17 2011, 04:35 AM Post #2 | |
Devil's Advocate Posts: 413 From: CA US Joined: 26-July 09 | TOO COOL!!! I recommended you for a medal by the way lol. Still can't believe you did this in a day!! -------------------- |
Jul 17 2011, 02:47 PM Post #3 | |
In motus... Posts: 361 From: Portugal Joined: 28-May 09 | I must say I'm amazed, superb job! |
Jul 17 2011, 03:03 PM Post #4 | |
Coding like a Rockstar! Posts: 1,468 From: ??? Joined: 28-May 09 | Another issue arises with this, which unfortunately can't be bypassed in CLEO (unless you use a great deal of ASM). Reflections will also use the position you have overwritten the TV camera position with. This includes mirrors and shiny floors in interiors. -------------------- | CLEO 4.3.22 | A?i?a?o?3D | UI SDK | Black Market Mod 1.0.1 | GInput 0.3 | Cheat Keyboard | Tactile Cheat Activation | Stream Ini Extender 0.7 | SuperVars | ScrDebug | Vigilante Justice: San Andreas | |
Jul 17 2011, 06:36 PM Post #5 | |
Devil's Advocate Posts: 413 From: CA US Joined: 26-July 09 | Another issue arises with this, which unfortunately can't be bypassed in CLEO (unless you use a great deal of ASM). Reflections will also use the position you have overwritten the TV camera position with. This includes mirrors and shiny floors in interiors. Errmmm that is to say that reflections will be replaced by live TV? -------------------- |
Jul 19 2011, 11:48 AM Post #6 | |
Coding like a Rockstar! Posts: 1,468 From: ??? Joined: 28-May 09 | Yes. Basically, they interfere with cull zones. Even just culling the screen itself prevents other cull zones from being used properly. For example, if you change the data in CCamera+0xADC, it will show on the shiny floor of CJ's house. If you add a cull zone in CJ's house (above the line that adds the reflection on the floor), the floor will be ugly and have a blue tint (the floor is semi-transparent, which is how it shows the copy of the interior, which is underneath). I've tried to add a TV screen in CJ's house while preserving the shiny floor. No luck yet but I'll keep trying. -------------------- | CLEO 4.3.22 | A?i?a?o?3D | UI SDK | Black Market Mod 1.0.1 | GInput 0.3 | Cheat Keyboard | Tactile Cheat Activation | Stream Ini Extender 0.7 | SuperVars | ScrDebug | Vigilante Justice: San Andreas | |
Jul 19 2011, 08:46 PM Post #7 | |
Devil's Advocate Posts: 413 From: CA US Joined: 26-July 09 | TOO COOL!!! I recommended you for a medal by the way lol. Urp... turns out they only gave you a Verbal Commendation lol. Weird things - these CULLs. -------------------- |
Jul 23 2011, 06:16 PM Post #8 | |
In motus... Posts: 361 From: Portugal Joined: 28-May 09 | |
Oct 15 2011, 07:36 AM Post #9 | |
The New Guy! Posts: 5 From: Moscow, Russia Joined: 15-October 11 | Hi all. I've registered here specifically to ask after reading this topic... 1) Is there a way to make a rear view mirror while CJ driving a car using this or similar (example: Ryosuke has made some mods which divided the screen) technic ? 2) Is there a way to play external video file on an in game screen like that liveTV? p.s.: Sorry for bad english p.s.2: Deji, please fix links on the Opcode database page to an updated SASCM.ini and opcodes.txt files... This post has been edited by Yoda2604: Oct 15 2011, 07:40 AM -------------------- QUOTE Try not. Do or do not, there is no try. |
Oct 15 2011, 05:04 PM Post #10 | |
Coding like a Rockstar! Posts: 1,468 From: ??? Joined: 28-May 09 | Trust me, we all want to do both of those things. But at the moment it's still a pretty distant dream. -------------------- | CLEO 4.3.22 | A?i?a?o?3D | UI SDK | Black Market Mod 1.0.1 | GInput 0.3 | Cheat Keyboard | Tactile Cheat Activation | Stream Ini Extender 0.7 | SuperVars | ScrDebug | Vigilante Justice: San Andreas | |
Dec 2 2011, 11:39 PM Post #11 | |
Ameteur Member Posts: 49 Joined: 5-August 09 | Could this also be a variant of off-screen rendering in RW? |
Dec 3 2011, 01:34 AM Post #12 | |
Coding like a Rockstar! Posts: 1,468 From: ??? Joined: 28-May 09 | Off screen rendering? -------------------- | CLEO 4.3.22 | A?i?a?o?3D | UI SDK | Black Market Mod 1.0.1 | GInput 0.3 | Cheat Keyboard | Tactile Cheat Activation | Stream Ini Extender 0.7 | SuperVars | ScrDebug | Vigilante Justice: San Andreas | |
Dec 3 2011, 03:50 PM Post #13 | |
I will kill you Posts: 126 Joined: 13-May 11 | I think that he mean render that "video display" out of this screen. |
Dec 10 2011, 10:58 AM Post #14 | |
Ameteur Member Posts: 49 Joined: 5-August 09 | Off screen rendering? I'm actually referring to this: http://en.wikipedia.org/wiki/Render_Target AFAIK it allows the hardware to draw stuff to a texture, and then apply it to some surface like a TV or some other ingame display. Or a mirror, perhaps: http://www.youtube.com/watch?v=6Co5vySMOaU http://www.youtube.com/watch?v=DPmvq_biMFM...feature=related This post has been edited by Huckleberry Pie: Dec 10 2011, 11:08 AM |
Dec 10 2011, 02:42 PM Post #15 | |
Coding like a Rockstar! Posts: 1,468 From: ??? Joined: 28-May 09 | Yeah, I guess... NTA called it Multirendering (probably the RenderWare name for it). It's just rendering the game, with less stuff and quality, but storing it to a separate buffer and drawing the output on the billboard instead of on the screen. -------------------- | CLEO 4.3.22 | A?i?a?o?3D | UI SDK | Black Market Mod 1.0.1 | GInput 0.3 | Cheat Keyboard | Tactile Cheat Activation | Stream Ini Extender 0.7 | SuperVars | ScrDebug | Vigilante Justice: San Andreas | |
Feb 19 2012, 08:23 AM Post #16 | |
Trained Newbie Posts: 21 Joined: 19-February 12 | how to use this code? i tried my self but i'm n00b i couldn't use this. so please help! i'm using US 2nd version with no-dvd patch and cleo4 sorry for my bad english CODE {$CLEO .cs} thread 'SCREEN' :main wait 0 0AB1: call_scm_func @SetupLiveScreen 7 ScreenID 0 Position 2512.1816 -1669.3521 21.0431 Width 20.0 Height 10.0 Angle 90.0 0A93: end_custom_thread :SetupLiveScreen 0012: 0@ *= 0x30 000A: 0@ += 0x8D5DD8 0017: 4@ /= 2.0 0017: 5@ /= 2.0 02F6: 8@ = sine 6@ 02F7: 7@ = cosine 6@ 0013: 7@ *= 4@ 0013: 8@ *= 4@ 0087: 9@ = 1@ 0087: 10@ = 2@ 005B: 9@ += 7@ 005B: 10@ += 8@ 0087: 11@ = 3@ 005B: 11@ += 5@ 0087: 12@ = 1@ 0087: 13@ = 2@ 0063: 12@ -= 7@ 0063: 13@ -= 8@ 0087: 17@ = 3@ 0063: 17@ -= 5@ 0A8C: write_memory 0@ size 4 value 9@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 10@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 11@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 12@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 13@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 11@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 12@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 13@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 17@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 9@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 10@ virtual_protect 0 000A: 0@ += 4 0A8C: write_memory 0@ size 4 value 17@ virtual_protect 0 0AB2: ret 0 |
Feb 19 2012, 02:18 PM Post #17 | |
Coding like a Rockstar! Posts: 1,468 From: ??? Joined: 28-May 09 | QUOTE i'm using US 2nd version with no-dvd patch This function only supports 1.0 US exe's. -------------------- | CLEO 4.3.22 | A?i?a?o?3D | UI SDK | Black Market Mod 1.0.1 | GInput 0.3 | Cheat Keyboard | Tactile Cheat Activation | Stream Ini Extender 0.7 | SuperVars | ScrDebug | Vigilante Justice: San Andreas | |
Feb 19 2012, 03:50 PM Post #18 | |
Trained Newbie Posts: 21 Joined: 19-February 12 | i'm using us 1.0 exe and does my script has problems? This post has been edited by Albreht: Feb 19 2012, 03:50 PM |
Feb 19 2012, 04:09 PM Post #19 | |
Coding like a Rockstar! Posts: 1,468 From: ??? Joined: 28-May 09 | Well, the best way to know that is to test it... but nah, there don't appear to be any problems. -------------------- | CLEO 4.3.22 | A?i?a?o?3D | UI SDK | Black Market Mod 1.0.1 | GInput 0.3 | Cheat Keyboard | Tactile Cheat Activation | Stream Ini Extender 0.7 | SuperVars | ScrDebug | Vigilante Justice: San Andreas | |
Feb 23 2012, 09:19 AM Post #20 | |
Trained Newbie Posts: 21 Joined: 19-February 12 | i downloaded gta_sa.exe us1.0(link removed) and tried again. but it doesn't work either :/ which CLEO version do u using? Reason for edit: No links to warez, please. |