We're using cookies to ensure you get the best experience on our website. More info
Understood
@joness105639Registered February 16, 2019Active 4 years, 9 months ago
28 Replies made

Why does the ball keep disappearing?

Ok, so here’s some detail on the shap resource found in Spectre VR

First of all there is a res edit template (TMPL resource) called shap which defines the structure of every shap resource used by spectre VR. The data is organized in words (2 bytes). The structure is as follows according to the template.

Number of verticies: ZCNT
**V**: LSTC
X (left & right) whole: DWRD
X (left & right) fraction: HWRD
Y (altitude) whole: DWRD
Y (altitude) fraction: HWRD
Z (distance from camera) whole: DWRD
Z (distance from camera) fraction: HWRD
**V**LSTE

Number of planes: ZCNT
**P**LSTC

Verticies in this plane: ZCNT
*V*P*: LSTC
Vertex number:DWRD
*V*P*:LSTE

Plane ColorDWRD
**P**:LSTE

Number of points (Top View): ZCNT
*P*T*:LSTC
X (left & right) whole: DWRD
X (left & right) fraction: HWRD
Y (altitude) whole: DWRD
Y (altitude) fraction: HWRD
Z (distance from camera) whole: DWRD
Z (distance from camera) fraction: HWRD
*P*T*:LSTE

Number of lines (Top View):ZCNT
*L*T*:LSTC
starting point:DWRD
ending point:DWRD
*L*T*LSTE:

Plane SidesDWRD

Thats really all you need to parse the shap resource. DWRD means “Decimal Word” HWRD means “Hexadecimal word” ZCNT, LSTC, and LSTE are used to loop a list of feilds, with ZCNT indicating the number of times the list is looped. In other words, if ZCNT had a value of 2 in the number of verticies secion at the top, it would look for LSTC in the template, then repeat though everything between LSTC and LSTE 3 times.

Here’s an actual example. This is the “acid” shap. In the game its just a triangle on the gound that damages your tank when you run over it.

0002FFEE 00000000 0000FFEE 0000FFEE
00000000 00000012 00000012 00000000
0000FFF7 00000000 00020001 00020003
17750002 FFEE0000 00000000 FFEE0000
FFEE0000 00000000 00120000 00120000
00000000 FFF70000 00020001 00020002
00030003 00010000

Now lets chop it up into words

0002 FFEE 0000 0000 0000 FFEE 0000 FFEE
0000 0000 0000 0012 0000 0012 0000 0000
0000 FFF7 0000 0000 0002 0001 0002 0003
1775 0002 FFEE 0000 0000 0000 FFEE 0000
FFEE 0000 0000 0000 0012 0000 0012 0000
0000 0000 FFF7 0000 0002 0001 0002 0002
0003 0003 0001 0000

Next lets change the formatting a bit to divide up the relevent data. LSTC and LSTE data types don’t actually contain any data, so if you’re following along in the template, just use those as a reminder to go back through the template list.

0002

FFEE 0000 0000 0000 FFEE 0000
FFEE 0000 0000 0000 0012 0000
0012 0000 0000 0000 FFF7 0000

0000

0002

0001 0002 0003

1775

0002

FFEE 0000 0000 0000 FFEE 0000
FFEE 0000 0000 0000 0012 0000
0012 0000 0000 0000 FFF7 0000

0002

0001 0002
0002 0003
0003 0001

0000

That should be perfectly clear, but if it isn’t lets add some labels

Number of Verticies: 0002

//Verticies
1) Xint:FFEE Xfrac:0000 Yint:0000 Yfrac:0000 Zint:FFEE Zfrac:0000
2) Xint:FFEE Xfrac:0000 Yint:0000 Yfrac:0000 Zint:0012 Zfrac:0000
3) Xint:0012 Xfrac:0000 Yint:0000 Yfrac:0000 Zint:FFF7 Zfrac:0000

Number of Planes: 0000

Verticies in this plane: 0002

Vertex Numbers in this plane: 0001 0002 0003

Plane Color:1775

Number of points (Top View) 0002

1) Xint:FFEE Xfrac:0000 Yint:0000 Yfrac:0000 Zint:FFEE Zfrac:0000
2) Xint:FFEE Xfrac:0000 Yint:0000 Yfrac:0000 Zint:0012 Zfrac:0000
3) Xint:0012 Xfrac:0000 Yint:0000 Yfrac:0000 Zint:FFF7 Zfrac:0000

Number of Lines: 0002
1) starting point: 0001 ending point: 0002
1) starting point: 0002 ending point: 0003
1) starting point: 0003 ending point: 0001

Plane Sides: 0000

Of course all of these figures are in hexidecimal. This is what res edit shows for the same data

Number of Verticies: 0002

//Verticies
1) Xint:-18 Xfrac:$0000 Yint:0 Yfrac:$0000 Zint:-18 Zfrac:$0000
2) Xint:-18 Xfrac:$0000 Yint:0 Yfrac:$0000 Zint:18 Zfrac:$0000
3) Xint: 18 Xfrac:$0000 Yint:0 Yfrac:$0000 Zint:-9 Zfrac:$0000

Number of Planes: 0

Verticies in this plane: 2

Vertex Numbers in this plane: 1, 2, 3

Plane Color: 6005

Number of points (Top View) 2

1) Xint:-18 Xfrac:$0000 Yint:0 Yfrac:$0000 Zint:-18 Zfrac:$0000
2) Xint:-18 Xfrac:$0000 Yint:0 Yfrac:$0000 Zint:18 Zfrac:$0000
3) Xint: 18 Xfrac:$0000 Yint:0 Yfrac:$0000 Zint:-9 Zfrac:$0000

Number of Lines: 0002
1) starting point: 1 ending point: 2
1) starting point: 2 ending point: 3
1) starting point: 3 ending point: 1

Plane Sides: 0

Java tool to parse the data is finished. Attached is all the resource fork data separated out into individual binary files. Resedit uses templates to be able to edit and interpret the data within a resource. The TMPL resource contains templates. OS7 doubtless has several built in. Anyway, the TMPL structure is not documented but is easy enough to understand. Just by playing around in resedit I was able to confirm that a TMPL resource consists of a byte tat defines the length of the feild name, a feild name, then 4 bytes for a data type, then the next feild name size byte follows etc. It should be very simple to exploit this to dump the shap resource in the later releases to get to the original 3d models and even reformat them into a .obj file or whatever we want.

Attachments:

Work continues on the Java tool, but in the meantime I managed to copy all the PICT resources out of the first game. There is no easy way I know of to just copy and paste the resources into new PICT files that are readable by OSX, but I can copy the file from within baselisk, and go to photoshop CS5 and create a new document which at least gets the new image to be sized correctly. Then I take a screenshot of the resource in ResEdit in baselisk, open the screenshot, then copy and past THAT into the photoshop document I just created. Alignment is of course critical. I’m confident I’m absolutely spot on with most files, but large screen filling images may be off by a pixel. The prites can be done as a series of small screen shots and then resized with an automated batch process in photoshop, so that made it all go quicker.

Attachments:

3-d tetris is also an awful lot like welltris

Ok, so I’m at the momment working on a java program that will parse throughthe MacBinaryII executable and let me copy thiungs out of it or run it through a disassembler. I’ve already used ResEdit for some of this, but unfortunately ResEdit wont let me copy some things very easily. I also need a betterway of dumping the shap resource than copying the data from resedit by hand.

Anyway, Ithought I’d share some developments. First of all the header of a macbinary is well known and is documented here

https://files.stairways.com/other/macbinaryii-standard-info.txt

It is also known that all macintosh applications have both a data fork and a resource fork. It was important to know which comes first in the binary. This sint something that is easy to find in documentation. So, time for some exparimentation. I found I can use BinHex 5.0 in baselisk to export binaries out of baselisk. Next I created a copy of Spectre 1.0 and exported it as a binary. Then I took the same copy and opened teh readme file for Spectre Supreme. Text files are purely data and show up in resedit as having a data fork. Its impoirtant to note that you cannot add data to the fork in an ID other than 128. Believe me, I tried. Anyway, open up the data resource in the readme with resEdit’s hex editor and copy the whole thing. Now back to the Spectre 1.0 copy. Open the data fork, then open data resource 128 in the hex editor, and past it in, then save. Run BinHex 5.0 on it and save this as Spectre 1.0 copy2

Now we have two binaries that we can compare in a hex editor. I used Hex Fiend. Anyway, The data stream size is listed as being located at offset 83 and its a long word, which means it will be offset 83, 84, 85, 86 and further down it says it must be in the range of 0000 0000-$007F FFFF. As we would expect, this value changes from 0000 0000 to 0000 0463 which in decimal is 1123 and corresponds exactly to the length of the data I copied into the data fork. The data I copied begins at offset 128

This same test method can be applied to locate any resource in the binary to confirm the documentation. I also tried deleting the ALRT resource and compared the one without an ALRT to the one that had it.

So in short, there is a header which is described in the link I include here, then comes a data fork, then a resource fork. The data fork may have a map, but I cant say for sure yet. What I do know is that the resource fork does have a map. Presumably this is at the start of the resource fork.

This is a screenshot of the mac version of the game set to black and white then tinted red with the filled polygons turned off

The second is what it might looklike with filled polys turned on.

I have then reduced the resolution to 324×224

I am no where near getting this working on a real VB. I have no idea if it can handle rendering filled polygons in 3d at 50 fps.

  • This reply was modified 5 years ago by SpectreVR.
  • This reply was modified 5 years ago by SpectreVR.
  • This reply was modified 5 years ago by SpectreVR.

With eyesheild and game I weight 1 lb 13.5 oz. The game and eyesheild must be very light weight

I’ve done 3-4 few ebay rescues and have gotten a very high degree of sucess so long as the cable is still attached to the board and nothing else is damaged. I’m willing to do repairs for others. Go on and add me to the list. I’ll charge $10 per display plus return shipping. See attached photo for an example of my work

Bad servo borad. I had something similar on one I bought on ebay with controller and ac adapter, and eye sheild $50 no less. Anyway, one of the mirrors woas rattlling against the frame. it was vibrating too much. The servo board controlls the vibrations. It makes sure that the display leds are synced to the mirrors as I understand it. If the mirrors cant reach a stabile oicillation after three tries it shuts off. I swapped out the servo board on the one I got, and it powered on and I got sound out of it. next I checked for picture by swapping in a known good display, and since it looked like the motherboard was outputing video, I went ahead and solder fixed the displays it came with. Now it’s good as new. I havent diagnosed the problem with the bad servo board yet. I’ll figure that out later. The servo board is on the side opposite to the red lenses and is mounted vertically in the VB. You will need to unscrew the bottom case, unscrew the controller port board, and the sound amp board, then lift everything out of the upper shell inorder to get to the servo board. There are 3 cables connecting to it. One plug for each mirror mechanism, and one for the motherboard. The motherboard wires are disconnected by carefully pulling out the black plastic connetctor clamp without breaking it (thats the tricky part). The other two plugs are easy. Just carefully wiggle them out.

I don’t have foobar, but the other challenge is that the sound system you intend to play the sound through will also affect the results. It’s going to sound different on a smartphone than it will offer some good computer speakers, some good headphones, or a $4000 surround system with good subwoofers and a proper eq for the room.

Imho this is going to be a wild goose chase. It’s not just the eq that will be part of the “VB sound” it’s also going to be any distortion caused by the amp, the speakers etc, all if which may get worse ad time goes on and components age.

I’m of the opinion that the headphone jack is the best way to play these games. The sterio is a lot cleaner and more immersive.

If you still want to pursue this, you will need reference quality speakers, some way to measure the frequency response of original hardware and some way to compare your filter to original hardware. Otherwise it’s all subjective and wether or not the results sound like a VB is anyone’s guess.

ok update time. Im getting a primer in cc, and java. Ive gotten a ma emulater up and running, and managed to decompress spectre supreme, and I’ve rediscovered my favorite program of all time Super Res Edit. As we speak I’m pulling apart all its resources and separating its assets into descrete sound, image, and code files.

That staid, it will probibly be while before cybernet login is confirmed. I am doing my best to figure this out. I’ll keep you all posted.

The sigal on those 4 wires to the VUE-AMP-01 board has to be analogue. There are no ICs on that board and nothing that looks even close to being a digital to analogue converter. One wire (probibly red) is battery power for the amplifier board, one is probibly signal ground, and the other two are the left and right channels respectivey. Its here that you would tap into. If these had a digital signal, all you could hope to hear would be noise that sounded like static.

Here’s pictures

It’s the virtual boy advance!

A big part of that is that you’re dealing with very tiny speakers that don’t output much bass. Looking at the amplifier board there aren’t any obvious induction coils for setting a bass roll off. I’m seeing capacitors and transistors mostly. It’s possible that some high frequencies have been somewhat attenuated, but most of the sound again is going to be the cheap tiny speakers.

Honestly I don’t see a whole lot of difference between the VB internal speakers and the ones used on the DMG-01 or GBC. It’s just that it sounds louder because now it’s stereo. I like using headphones because it sounds a lot better and I feel more immersed when playing red alarm, but to each his own.

To accurately come up with some sort of frequency filter that would do as you ask, you would need to somehow rig up an audio input into a virtual boy amp board, install the thing into a virtual boy shell (doesn’t matter if the VB works as long as the amp does and gets power), then play a frequency sweep through the speakers in an anechoic chamber into a perfectly flat test calibration microphone. That’s going to be $$$$$ to pull off.

It would be less expensive to just buy a VB amp with speakers ($15 on eBay), build a wooden box and stick the speakers and mic inside. Play your sound through the VB amp and speakers, record off the mic to get the effect. It won’t be the same as listening to the speakers in open air, but it might be close enough.

All. I’ve tried getting pictures, but my Olympus doesn’t know how to focus on a vibrating mirror.

Essentially some lines of the image are extra bright in one eye, and less bright in the other. I suppose I should also mention that one of the solder pads on one cap next to one ribbon connectors may have been slightly lifted which might also be a problem.

I’ll post the best images I have as soon as I can.

I’ll try to get pictures,

Basically there are lines that only show up in the sprites. They don’t go all the way across the screen.

I’ve tried swapping displays and there was no change. I tried swapping the motherboard and that also didn’t improve anything. Motherboard caps are all fine as far as I can tell. All are in spec, except the 1000 microfarad cap is now rated 16v instead of 10.

I’m worried that maybe they either sold me some bad caps, or one or more overheated while I soldered them in.

Long term this will be essential as I’m seeing signs in every VB ribbon cable I’ve looked at of the copper in the ribbon starting to corrode. First the glue goes bad, then the copper and everyone discovers that the solder fix permenantly fixes one problem, but doesn’t do anything to prevent the inevitable.

Left eye is now wired up, but won’t turn on :-\