Register - Login
Views: 87822342
Main - Memberlist - Active users - Calendar - Wiki - IRC Chat - Online users
Ranks - Rules/FAQ - JCS - Stats - Latest Posts - Color Chart - Smilies
12-14-17 08:56:42 AM

Jul - Game Research/Hacking/Modding - I offer 50$ to restore GIB routine in Cruis'n USA New poll - New thread - New reply
Pages: 1 2 3Next newer thread | Next older thread
BoringPerson
Member
Level: 10


Posts: 12/33
EXP: 3387
For next: 1027

Since: 01-28-17


Since last post: 31 days
Last activity: 7 days

Posted on 06-15-17 05:46:06 PM (last edited by BoringPerson at 06-27-17 08:57:28 PM) Link | Quote
When you started talking about looking for invisible roadkill chunks, I started to think "Really? That doesn't seem very likely."

But then I remembered....

Back when I was messing with those codes, I set a breakpoint that would go off whenever a car (anyone's car) runs into a movable obstacle (such as a barrel or orange-and-white sign). For some reason, after I ran into a barrel and spun out, I could only drive a little bit further before that would breakpoint go off again, even though my car wasn't touching anything. Back then, I thought maybe another car behind me was hitting something offscreen... but it always seemed to happen when my car was at a certain place in the road.
- In other words, my car may have been touching an invisible object.

So, as you might have guessed, testing for invisible roadkill chunks is kind of tricky.

Test #1: Turn on wireframe rendering and look for invisible chunks.
Alas, wireframes are the same color as the original polygons. For example, trees are made from two triangles, i.e. two halves of a rectangle, but the rectangle's edges are invisible because the tree texture is transparent around the edges.
- So this means if there are invisible chunks on the road, they have invisible wireframes and I can't see them.

Test #2: Drive around and see if I slow down from hitting invisible chunks.
I don't know if my codes are screwy or if the game's function is buggy. Either way, there's a problem: once you run into a movable obstacle and your car spins out, you can't hit another movable obstacle-- you'll pass right through. So I can't test for invisible chunks this way.
(An exception: One time I was quick with save states and I was able to hit two obstacles instead of just one. So I could hit a barrel, spin out, hit another barrel, then spin out, then I would pass though the other barrels. However, sometimes instead of hitting a second barrel, I'd spin out on nothing-- maybe an invisible object.)

You might be thinking, "Can't you hit something, spin out, then turn off the codes and hit the invisible chunks instead of passing through them?" Well unfortunately, even if you put back the original instructions you NOP'd out, the problem still remains.
- I know a little bit about why this happens, but when I tried to fix it the game would freeze.


Let's be clear, I don't actually know if there are invisible chunks on the road or not.



Originally posted by CruisnEma
I was a bit confused with Cruis'n World, when you hit the deer in Cruis'n USA, also if you walk slow, you spin ALWAYS out!

Actually, with the codes, if you go really slowly on the N64 version, you don't spin out. Late edit: Wait no, it matches your observation after all—with the codes on, your car always spins out on N64 too. (The object you ran into still disappears.)

Originally posted by CruisnEma
Also the deer and the cow uses 2 different meat pieces, the animation is the same, but the objects are different.

You made a code to hit an object and force this routine, maybe the game normally freeze with other objects 'cause have to choose the pieces animation? The code for disable the freeze actually disable an object's check to check what object is stricken?

That's definitely possible and I'll keep it in mind.


Edit: Actually, there's something you can look for if you want: See if you can find a Nintendo 64 emulator or video plugin that displays everything as solid polygons instead of textures. Hopefully that will make the invisible chunks show up if they exist.
CruisnEma
Member
Level: 19


Posts: 65/81
EXP: 33744
For next: 2033

Since: 02-01-12


Since last post: 8 days
Last activity: 8 days

Posted on 06-15-17 06:13:41 PM Link | Quote
I don't know if exists.

However could try to put a cow object in the road of a random track (also the first track to check the ASM) the cow have an existing texture group already mounted in the ending cutscene, then if the routine freeze 'cause mismatch couldn't do it with the cow and show it's exploding routine?

Can you put a cow in the street in a choosen track to try to hit it?

What you have discovered for now is promising!
CruisnEma
Member
Level: 19


Posts: 66/81
EXP: 33744
For next: 2033

Since: 02-01-12


Since last post: 8 days
Last activity: 8 days

Posted on 06-18-17 02:25:35 PM Link | Quote
Sorry, I tried with all the Project 64 mod video plugins (like Rice, 1964, OpenGL etc) but didn't found a plugin to see only 3D models without textures. Can you do something trying to add objects in the street to test if the routine choose the object to see the animation? The cow is an object present in the ending cutscene, then I think could be putted in the street to try.
BoringPerson
Member
Level: 10


Posts: 13/33
EXP: 3387
For next: 1027

Since: 01-28-17


Since last post: 31 days
Last activity: 7 days

Posted on 06-19-17 04:58:53 AM (last edited by BoringPerson at 06-19-17 05:12:01 AM) Link | Quote
I wasn't going to say anything until I got some results... but eh I might as well let you know I'm still working on it. Honestly it's only a matter of time until I burn out, but until then I may as well keep trying. I'll get back to you in a bit.

Edit: I don't know how to add objects to the street... For now, I'm trying out a ROM corrupter (this one) because maybe it will randomly turn an object into something else (or change its location, which would give me an idea of where to start looking).

Unfortunately it's a pain in the butt. If you change too much at once, the game crashes, so you have to make a smaller changes, play the game, make another change, play the game again... I've gone through like 75%(?) of the rom so far, and I've found parts of the rom that corrupt 3D models and music, but nothing for object type/placement yet. (It doesn't help that I'm only checking the beginning of Iowa for this. I don't have the patience to check every stage every time, unfortunately.)

Edit 2: Actually right now I'm curious about whether the invisible chunks exist, so I'm trying to modify a Mupen64Plus video plugin to show plain polygons instead of textures. But honestly that isn't going well at all, so if I don't make progress soon I might just go back and finish corrupting the rest of the rom.
brian151
Banned
The administration (as well as a few users) have decided that you're creepy/weird enough that it's time to activate the sploded clause.
Laters.


Level: NaN


Posts: 176/-249
EXP: NaN
For next: 0

Since: 08-09-16
From: USA

Since last post: 133 days
Last activity: 106 days

Posted on 06-21-17 01:02:17 AM Link | Quote
If for some reason, anyone should wonder why I am not replying.

Firstly, I was away last week.
Secondly, as I stated before, I really cannot really hep with this, at all... it'd be a waste of everybody's time for me to say anything further here. I'll just lurk for now.

Good luck with this!
CruisnEma
Member
Level: 19


Posts: 67/81
EXP: 33744
For next: 2033

Since: 02-01-12


Since last post: 8 days
Last activity: 8 days

Posted on 06-21-17 12:41:26 PM Link | Quote
Originally posted by BoringPerson
I wasn't going to say anything until I got some results... but eh I might as well let you know I'm still working on it. Honestly it's only a matter of time until I burn out, but until then I may as well keep trying. I'll get back to you in a bit.

Edit: I don't know how to add objects to the street... For now, I'm trying out a ROM corrupter (this one) because maybe it will randomly turn an object into something else (or change its location, which would give me an idea of where to start looking).

Unfortunately it's a pain in the butt. If you change too much at once, the game crashes, so you have to make a smaller changes, play the game, make another change, play the game again... I've gone through like 75%(?) of the rom so far, and I've found parts of the rom that corrupt 3D models and music, but nothing for object type/placement yet. (It doesn't help that I'm only checking the beginning of Iowa for this. I don't have the patience to check every stage every time, unfortunately.)

Edit 2: Actually right now I'm curious about whether the invisible chunks exist, so I'm trying to modify a Mupen64Plus video plugin to show plain polygons instead of textures. But honestly that isn't going well at all, so if I don't make progress soon I might just go back and finish corrupting the rest of the rom.

Ok, I'll wait. Sorry if I reply just now, but I had problems to login due to forgotten password in another PC, I solved just now.
Originally posted by ihadtnowegtum
If for some reason, anyone should wonder why I am not replying.

Firstly, I was away last week.
Secondly, as I stated before, I really cannot really hep with this, at all... it'd be a waste of everybody's time for me to say anything further here. I'll just lurk for now.

Good luck with this!

Don't worry. Is however precious talking about, thank you for this.
BoringPerson
Member
Level: 10


Posts: 14/33
EXP: 3387
For next: 1027

Since: 01-28-17


Since last post: 31 days
Last activity: 7 days

Posted on 06-23-17 02:56:25 AM (last edited by BoringPerson at 06-23-17 05:32:32 AM) Link | Quote
I gave up on modifying the Mupen64Plus plugin I lost track of how many times I thought "Okay it should work this time" and it didn't... It doesn't help that I don't know much about OpenGL. I swear there should be some simple elegant solution to enable untextured, flat-colored polygons, but since the ROM controls when things happen, I have no idea when it is setting textures and vertex colors (or lack thereof) and aaaargh

Edit: When I was trying to modify the video plugin, I tried changing vertex colors to be random values... but they refused to change in-game. So I got fed up and decided to randomize something else just to be sure, and uh
Spoiler:

Spoiler'd to save your bleeding eyes

...Let's just say I got exactly what I expected and I was still surprised.

Spoiler:

Personally I don't go for stuff like that in games, but dang if it didn't make me lol when I saw this

Spoiler:

g_vtxNonTransformed[i].x = (float)(vert.x - rand() % 64 + 32);


Anyway, I can still try the ROM corrupter instead, but my hopes aren't too high. I started at the end of the ROM first and worked my way backwards, and now that I'm getting closer to the beginning, things crash very easily if I change too much at once. I have a feeling that since I got impatient and tried to go too fast (and also only tested Iowa), I may have missed it :/

I'll try a bit more with the ROM corrupter as long as it doesn't exceed my patience. If this doesn't work out, there is one more approach I can try, but only if Project64d's debugger is good at following memory changes.
CruisnEma
Member
Level: 19


Posts: 68/81
EXP: 33744
For next: 2033

Since: 02-01-12


Since last post: 8 days
Last activity: 8 days

Posted on 06-23-17 07:19:27 AM Link | Quote
Ok. Cruis'n USA needs to be completed, then please don't leave!
BoringPerson
Member
Level: 10


Posts: 15/33
EXP: 3387
For next: 1027

Since: 01-28-17


Since last post: 31 days
Last activity: 7 days

Posted on 06-27-17 06:52:35 PM (last edited by BoringPerson at 06-27-17 10:28:51 PM) Link | Quote
I had to duck out for some family stuff, but I'm back. (Don't worry, it was fun family stuff.)

Anyway good news and bad news.
Good news: I was right to give up on the corrupter because then I could move on to the debugger, and the debugger gave me what I wanted for less pain. After following some memory changes as the game ran, I found out where some of the object type/placement data is stored in ROM. So at the first toll booth in Iowa, I can change the left-most red bar into other objects.


However, the bad news: I couldn't change it into a deer or cow this way, in fact I can only change it into certain objects (edit: here's a list). I went through and tried all the values that didn't crash the game. What I found is: I can only change it to an object that already appears on this part of the stage. So I can't even change it into a red farmhouse, even though a red farmhouse appears later in the stage.

So if I had to guess, I'd guess that every stage is divided into segments, and the game only has 1 or 2 segments loaded at a time. And in each segment, only certain objects appear, and the game only loads objects that appear in the current segment. Which means if a cow or deer isn't loaded into memory already, I can't make it appear.

So CruisnEma, here's something you can help me with if you're up for it. If you could, I'd like you to play the Arcade version and find a stage where you can hit a cow. Edit: Nevermind, I found a video of someone playing the Indiana stage, and it shows where the cow is.
- So, then I'll try to change objects in that part of the stage. I have a bad feeling the developers may have removed the cow from the stage to save memory, but if we're lucky, maybe it is still loaded in memory.

Oh, there is one more thing you can help with: You said you found a cow texture in the ROM. Do you think you could find the cow texture in the Cruis'n USA (U) (V1.0) ROM and tell me which address it's at? If you aren't sure, let me know which tool you used so I can try to find the address myself.

edit:
Originally posted by ihadtnowegtum
I'll just lurk for now.

Good luck with this!

Thanks for the encouragement! It's easy to forget that other people read the thread, so it's nice to hear someone's lurking.
brian151
Banned
The administration (as well as a few users) have decided that you're creepy/weird enough that it's time to activate the sploded clause.
Laters.


Level: NaN


Posts: 186/-249
EXP: NaN
For next: 0

Since: 08-09-16
From: USA

Since last post: 133 days
Last activity: 106 days

Posted on 06-28-17 01:33:11 AM Link | Quote
Those gif screenshots are hilarious!

I'll just pretend to understand or be fully interested in the technical stuff

And NP.
My own threads drive me batshit crazy, because I KNOW people are reading them, but given the lack of such things as replies, or any activity in places I've linked, it makes me feel like no one actually cares about any of it. (Or in cases I asked for help, wants to, or feels I'm worthy of it)
CruisnEma
Member
Level: 19


Posts: 69/81
EXP: 33744
For next: 2033

Since: 02-01-12


Since last post: 8 days
Last activity: 8 days

Posted on 06-28-17 01:53:06 PM Link | Quote
Cow's textures are stored in these (european) offsets:

550680 40x50
550E58 32x35
5512C0 32x35
551728 32x35
551B90 32x35

After the offsets I typed also the resolution 'cause are 5 pieces and the last 4 have the same resolution, but the first is different.
BoringPerson
Member
Level: 10


Posts: 16/33
EXP: 3387
For next: 1027

Since: 01-28-17


Since last post: 31 days
Last activity: 7 days

Posted on 06-28-17 09:03:42 PM (last edited by BoringPerson at 06-28-17 10:46:00 PM) Link | Quote
Thanks! Okay, the equivalent offsets for those textures in the (U) (V1.0) rom seem to be:

550674
550E4C
5512B4
55171C
551B84

(I just went to each offset in the European rom, copied a bunch of bytes there, then opened the US V1.0 rom and pasted those bytes into the search box.)

Hmm, now what can I do with this info? I need to think...

Update:
Some unfortunate news... those 5 cow textures are not loaded in memory in Indiana.
(Longer version: In Indiana, I went to both locations where the cow would appear in the arcade version. At both places, I did a memory dump with Project64d, then I searched both memory dumps to see if they contained any of those 5 cow textures. Unfortunately, none of them were in the memory dumps. Just to test, I also tried during the ending, and that memory dump has cow textures loaded.)

Now, to be honest, I'm not sure what the implications are. Maybe it's still possible to load a cow object, or maybe it isn't.

Edit:
Unrelated to the cow textures: Earlier I tried to replace stage objects again. In Indiana, I went to where the first cow appears in the arcade version and changed a bunch of objects there. Unfortunately, I don't think any of the available objects were cows. But I don't know if this rules out their existence or not.


Yet another edit:
Oh, I almost forgot to mention. Back when I was first changing stage objects, I found there's a value that controls the object's collision type. So for example, 0x20 gets flattened like a telephone pole, 0x30 goes flying like a barrel, and 0x40 pushes you back or makes you spin out. 0x15 is used by the coconut-dropping trees in Beverly Hills, but when I tried to use it in other stages, the game crashed.
Anyway, I mention it because 0xF0 has the same effect as the "enable unused collision function" code I posted back on page 1. If you set an object to use 0xF0 collision, running into it will make the game crash, but if you have the "prevent freezing" code enabled, then instead the object will disappear while you spin out.
brian151
Banned
The administration (as well as a few users) have decided that you're creepy/weird enough that it's time to activate the sploded clause.
Laters.


Level: NaN


Posts: 187/-249
EXP: NaN
For next: 0

Since: 08-09-16
From: USA

Since last post: 133 days
Last activity: 106 days

Posted on 06-29-17 12:50:33 AM Link | Quote
Originally posted by BoringPerson
Thanks! Okay, the equivalent offsets for those textures in the (U) (V1.0) rom seem to be:

550674
550E4C
5512B4
55171C
551B84

(I just went to each offset in the European rom, copied a bunch of bytes there, then opened the US V1.0 rom and pasted those bytes into the search box.)

Hmm, now what can I do with this info? I need to think...

Update:
Some unfortunate news... those 5 cow textures are not loaded in memory in Indiana.
(Longer version: In Indiana, I went to both locations where the cow would appear in the arcade version. At both places, I did a memory dump with Project64d, then I searched both memory dumps to see if they contained any of those 5 cow textures. Unfortunately, none of them were in the memory dumps. Just to test, I also tried during the ending, and that memory dump has cow textures loaded.)

Now, to be honest, I'm not sure what the implications are. Maybe it's still possible to load a cow object, or maybe it isn't.

Edit:
Unrelated to the cow textures: Earlier I tried to replace stage objects again. In Indiana, I went to where the first cow appears in the arcade version and changed a bunch of objects there. Unfortunately, I don't think any of the available objects were cows. But I don't know if this rules out their existence or not.


Yet another edit:
Oh, I almost forgot to mention. Back when I was first changing stage objects, I found there's a value that controls the object's collision type. So for example, 0x20 gets flattened like a telephone pole, 0x30 goes flying like a barrel, and 0x40 pushes you back or makes you spin out. 0x15 is used by the coconut-dropping trees in Beverly Hills, but when I tried to use it in other stages, the game crashed.
Anyway, I mention it because 0xF0 has the same effect as the "enable unused collision function" code I posted back on page 1. If you set an object to use 0xF0 collision, running into it will make the game crash, but if you have the "prevent freezing" code enabled, then instead the object will disappear while you spin out.


k

k

nothing is impossible "where there's a will, there's a way" while difficult in many cases, adding code at run-time or via debuggers and such is entirely possible. I'm not saying it's easy, or that i generally know how to do it at all. i just know it's a thing, and a thing that cheat engine and similar would be capable of. however, idk if cheat engine would work on an emulator as effectively... i'm certainly not saying that the effort to try and force them to load is worth it, either. i'm just saying, i know that one way or another, what you suggest is possible.

Good luck!
And lol... hard-coded level-specific values are just awesome, huh?
CruisnEma
Member
Level: 19


Posts: 70/81
EXP: 33744
For next: 2033

Since: 02-01-12


Since last post: 8 days
Last activity: 8 days

Posted on 06-29-17 03:51:16 AM Link | Quote
Mhhh... Then the coconut function is exclusively of a coconut plant or of the Beverly Hills stage? This could create problems. Have you tried with another object in the same stage? Maybe Could explain why Unused collision function crash, 'cause need to be the right object (like deer or cow) or maybe 'cause need to be in the right stage.

However, could be a way to force the game to load in memory also textures from another rom address?

I don't know if you can follow the arcade version gameplay to put the cows, in the arcade appear in random places, are always in the right side of the street, but not always in the same points. Then I think that there is a code to load their textures in every segment of the stage, is possible?
brian151
Banned
The administration (as well as a few users) have decided that you're creepy/weird enough that it's time to activate the sploded clause.
Laters.


Level: NaN


Posts: 190/-249
EXP: NaN
For next: 0

Since: 08-09-16
From: USA

Since last post: 133 days
Last activity: 106 days

Posted on 06-29-17 04:15:48 AM Link | Quote
Originally posted by CruisnEma
I don't know if you can follow the arcade version gameplay to put the cows, in the arcade appear in random places, are always in the right side of the street, but not always in the same points. Then I think that there is a code to load their textures in every segment of the stage, is possible?


So much for lurking...

unless the devs were that smart-or-stupid, the randomizer is probably a reusable function, somewhere.
given this is a 3D game, you'd need to determine HOW the game is determining the place to spawn them... My guess is certain regions, most likely of varying shapes, are defined somewhere, and then some routine processing these areas and randomly fills them with objects, in this case, cows. Your best approach would be pinpoint the randomization routine(s), and any object-spawning routines. you also need to find-out where in the code, or data, and in what format, the information determining how to spawn them is. If any of that is not in the 64 ROM, you'd need to extract it from the arcade ROM (or re-create it from scratch...) and somehow inject that into the game. That's my understanding of the situation. What I am explaining to look for, ofc, is based either on how I would implement the feature(s) myself, or that other developers might, or that i've seen other developers do. Not really private knowledge, though.

Loading the textures should be possible, I will not vouch for the difficulty compared to correctly adding the code and data to properly SPAWN cows in the first place. In any language I deal with, it's trivial...XD but, you're working at machine level!

Rena

Star Mario
Fennel
Level: 127


Posts: 5226/5239
EXP: 23369387
For next: 357179

Since: 07-22-07
From: RSP Segment 6

Since last post: 117 days
Last activity: 75 days

Posted on 06-29-17 01:37:31 PM Link | Quote
Probably the random colours didn't work as expected because polygon colours usually only tint the textures. In particular, changing the colour of a polygon with a completely transparent texture applied won't do anything.
brian151
Banned
The administration (as well as a few users) have decided that you're creepy/weird enough that it's time to activate the sploded clause.
Laters.


Level: NaN


Posts: 191/-249
EXP: NaN
For next: 0

Since: 08-09-16
From: USA

Since last post: 133 days
Last activity: 106 days

Posted on 06-29-17 05:25:44 PM Link | Quote
Originally posted by Rena
Probably the random colours didn't work as expected because polygon colours usually only tint the textures. In particular, changing the colour of a polygon with a completely transparent texture applied won't do anything.


yeah..alpha/opacity/transparency, in general are potential problems both in graphics programming, and developing content packs for applications (i'd say games, but content packs aren't limited to them). I've had some experience, and have heard the horror stories from others! XD
BoringPerson
Member
Level: 10


Posts: 17/33
EXP: 3387
For next: 1027

Since: 01-28-17


Since last post: 31 days
Last activity: 7 days

Posted on 07-01-17 12:29:02 AM (last edited by BoringPerson at 07-01-17 07:47:47 PM) Link | Quote
EPILEPSY/SEIZURE/FLASHING COLORS WARNING for both pictures linked below.

It's even worse than that, Cruis'n USA is just plain stubborn about vertex colors. Randomizing vertex colors has no effect on anything that I've seen, so I'm guessing the game isn't designed to use vertex colors at all, transparent textures or no. Especially since afterwards I tried popping in another game and...

Okay, I guess that's interesti--huh.
brian151
Banned
The administration (as well as a few users) have decided that you're creepy/weird enough that it's time to activate the sploded clause.
Laters.


Level: NaN


Posts: 198/-249
EXP: NaN
For next: 0

Since: 08-09-16
From: USA

Since last post: 133 days
Last activity: 106 days

Posted on 07-01-17 03:24:17 AM Link | Quote
XD

also, you may put a seizure warning with those spoilers, for those whom have such issues. just a friendly suggestion.

how did you get that second one?
randomize vertex positions?
BoringPerson
Member
Level: 10


Posts: 18/33
EXP: 3387
For next: 1027

Since: 01-28-17


Since last post: 31 days
Last activity: 7 days

Posted on 07-01-17 08:19:07 PM (last edited by BoringPerson at 07-01-17 09:20:00 PM) Link | Quote
Originally posted by ihadtnowegtum
also, you may put a seizure warning with those spoilers, for those whom have such issues. just a friendly suggestion.

Oh crap, you're completely right! Alright, that should be better, and I really should be limiting the number of large gifs per page anyway.

Originally posted by ihadtnowegtum
how did you get that second one?
randomize vertex positions?


Yep, correct. I randomized X, Y, and Z positions this time, not just X position like in the Cruis'n USA gifs. It's such a dumb hack and I love it to bits.


Hey CruisnEma, want to try something out?

- Step 1: Start up Cruis'n USA (U) (V1.0). It has to be this verison or else it won't work.

- Step 2: Before you choose a map, enter the options with B and turn off Racers and Traffic. Otherwise it won't work.

- Step 3: Go to Iowa and stop when you see the first toll booth. Don't drive up to it yet.

- Step 4: In the emulator, enter this code and enable it. (Turn off the other codes while you're at it)
801FA36B 00F0
81045418 8015
8104541A 8FC4
81045428 8015
8104542A 8D5C
81045438 8015
8104543A 8E58
81045448 8015
8104544A 8DCC
81041A20 0000
81041A22 0000
81041A2C 0000
81041A2E 0000

(You can enter it before now, but don't enable it until you see the tollbooth.)

- Step 5: Now run into the very first orange-and-white sign, the one circled in the picture.


Have fun!

P.S. This code is very sloppy, and it will probably mess up or crash other parts of the game if you leave it on. If you can't get it to work (very possible, it's a sloppy code) then let me know and I'll put up a few gifs or something.
Pages: 1 2 3Next newer thread | Next older thread
Jul - Game Research/Hacking/Modding - I offer 50$ to restore GIB routine in Cruis'n USA New poll - New thread - New reply




Rusted Logic

Acmlmboard - commit 2f1bc75 [2017-08-27]
©2000-2017 Acmlm, Xkeeper, Inuyasha, et al.

28 database queries, 11 query cache hits.
Query execution time: 0.164911 seconds
Script execution time: 0.021100 seconds
Total render time: 0.186011 seconds