Fairlight 3d logo

So you want to make your own 3d logo in flash?
OK so we will begin by recreating the original by using all the data from the original. For this we will need the original exe file (get from herekestra site)

Download the file and run it in WInuae + AR3 rom

When it starts to run enter AR by pressing the Page-up key. Then we need to find out where all the data is. We do this by pressing D to disassemble the code that is running at the moment we broke into it.
Now we should find ourselves in and around memory location 3aXXX

So lets take a snoop around the hex starting from location 3A000
M 3a000
and keep pressing enter to scroll down. You are probably wondering what the hell are we looking for!!!, well if you have done this a few times you get use to what hex values to hunt for, and if you haven’t done this before then watch and learn. What we are looking for are word values most probably starting from FF ??. and in my experience they normally follow a code break RTS which in hex looks like Nu (4e 75).
Why FF ??, well a word value that starts with FF normally means its a negative number so FFFF would be -1 FFFE would be -2 and so on and for me most 3d objects start with negative numbers.

Keep scrolling down until you reach something like I described above

hmmm this looks interesting at memory location 3A500 we have FFB4 FFFD ect…..
Now this looks promising. To test it we need to change a value and then exit AR to see if the logo has changed.
at address 3A510 we have the value FF FD lets change this to FF CD.

Then exit AR to see if anything has changed.
X + Enter

As you can see the top line on the F has become smaller. It became smaller because we made the value smaller from FF FD (-3) yo FF CD (-51).
This tells us that these values are the X values of our 3d coordinates.
What we need to do now is now is find where in the code is pointing to these 3d coordinates.
We know where they start (3A50E) so lets do a Find Address search for this
FA 3A50E
we end up with 2 locations
Lets snoop around the first
D 3A1E8
LEA 0003A50E,A0
LEA 0003A596,A1
This is interesting we have another address 136 bytes after the start of our coordinates
Could this be the Y coordinates? well lets mess around with them and find out.

M 3A596
change the 00 1c to 00 2c and see if our logo changes

The Y position of the F top line has gone down so I think it is safe to say this is our Y position data and I bet if we go 136 more bytes we will find our Z data
M 3A596+88 (88 hex = 136)

A lot of 00 0A 00 0A 00 0A. Lets change some of them to 00 2a

and exit AR to see what changes it has made

As you can see part of the F has protruded out so this must be our Z data

Now we need to save out this data to disk
SM 3dpoints,3A50E 3A50E+88+88+88

save from the start position and add 88*3 for X, Y and Z

Next we need to convert our bin file to hex and then that hex data to Decimal (or just convert it to hex data and put 0x in front of the hex) so we can use it with flash
I use a little tool called Bin2hex (find it on the net)

Don’t forget that FF = minus
Convert your data from bin>hex then hex>dec
68 points for each of the X, Y and Z
Now we are ready to put it into a flash 3d engine
For this tutorial I will use the excellent 3d engine made by Senocular over at Kirupa
Modified for AS3
Load our 3d points data into the pointsArray

make3DPoint(-76 ,28 ,10),
make3DPoint(-19 ,28 ,10),
make3DPoint(-48 ,28 ,10),
make3DPoint(-48 ,-16,10),
make3DPoint(-51 ,11,10),
make3DPoint(-28 ,11,10),
make3DPoint(-44 ,-16,10),
make3DPoint(-44 ,8,10),
make3DPoint(-44 ,8,10),
make3DPoint(-28 ,8,10),
make3DPoint(-28 ,8,10),
make3DPoint(-28 ,-41,10),
make3DPoint(-44 ,-2,10),
make3DPoint(-28 ,-2,10),
make3DPoint(-25 ,19,10),
make3DPoint(-25 ,11,10),
make3DPoint(-25 ,8,10),
make3DPoint(-25 ,-15,10),
make3DPoint(-22 ,-15,10),
make3DPoint(-22 ,8,10),
make3DPoint(-22 ,8,10),
make3DPoint(-10 ,8,10),
make3DPoint(-10 ,8,10),
make3DPoint(-10 ,-2,10),
make3DPoint(-10 ,-2,10),
make3DPoint(4 ,-16,10),
make3DPoint(-22 ,-2,10),
make3DPoint(-10 ,-2,10),
make3DPoint(6 ,41,10),
make3DPoint(6 ,-19,10),
make3DPoint(6 ,-19,10),
make3DPoint(28 ,-19,10),
make3DPoint(9 ,19,10),
make3DPoint(9 ,11,10),
make3DPoint(9 ,8,10),
make3DPoint(9 ,-16,10),
make3DPoint(30 ,-2,10),
make3DPoint(30 ,9,10),
make3DPoint(30 ,9,10),
make3DPoint(12 ,9,10),
make3DPoint(12 ,9,10),
make3DPoint(12 ,-16,10),
make3DPoint(12 ,-16,10),
make3DPoint(30 ,-16,10),
make3DPoint(30 ,-16,10),
make3DPoint(30 ,-5,10),
make3DPoint(30 ,-5,10),
make3DPoint(21 ,-5,10),
make3DPoint(30 ,-17,10),
make3DPoint(30 ,-21,10),
make3DPoint(33 ,9,10),
make3DPoint(33 ,-5,10),
make3DPoint(33 ,-5,10),
make3DPoint(48 ,-5,10),
make3DPoint(48 ,-5,10),
make3DPoint(48 ,9,10),
make3DPoint(48 ,-6,10),
make3DPoint(48 ,-16,10),
make3DPoint(33 ,-6,10),
make3DPoint(33 ,-16,10),
make3DPoint(32 ,-19,10),
make3DPoint(63 ,-19,10),
make3DPoint(63 ,-19,10),
make3DPoint(63 ,9,10),
make3DPoint(63 ,9,10),
make3DPoint(50 ,9,10),
make3DPoint(64 ,9,10),

Then make some lines 0>67 (68)

		graphics.lineStyle(1,0xffffff);//1 line thick + white col
		graphics.moveTo(pts2D[0].x, pts2D[0].y);
		graphics.lineTo(pts2D[1].x, pts2D[1].y);
		graphics.moveTo(pts2D[2].x, pts2D[2].y);
		graphics.lineTo(pts2D[3].x, pts2D[3].y);
		graphics.moveTo(pts2D[4].x, pts2D[4].y);
		graphics.lineTo(pts2D[5].x, pts2D[5].y);
		graphics.moveTo(pts2D[6].x, pts2D[6].y);
		graphics.lineTo(pts2D[7].x, pts2D[7].y);
		graphics.moveTo(pts2D[8].x, pts2D[8].y);
		graphics.lineTo(pts2D[9].x, pts2D[9].y);
		graphics.moveTo(pts2D[10].x, pts2D[10].y);
		graphics.lineTo(pts2D[11].x, pts2D[11].y);
		graphics.moveTo(pts2D[12].x, pts2D[12].y);
		graphics.lineTo(pts2D[13].x, pts2D[13].y);
		graphics.moveTo(pts2D[14].x, pts2D[14].y);
		graphics.lineTo(pts2D[15].x, pts2D[15].y);
		graphics.moveTo(pts2D[16].x, pts2D[16].y);
		graphics.lineTo(pts2D[17].x, pts2D[17].y);
		graphics.moveTo(pts2D[18].x, pts2D[18].y);
		graphics.lineTo(pts2D[19].x, pts2D[19].y);
		graphics.moveTo(pts2D[20].x, pts2D[20].y);
		graphics.lineTo(pts2D[21].x, pts2D[21].y);
		graphics.moveTo(pts2D[22].x, pts2D[22].y);
		graphics.lineTo(pts2D[23].x, pts2D[23].y);
		graphics.moveTo(pts2D[24].x, pts2D[24].y);
		graphics.lineTo(pts2D[25].x, pts2D[25].y);
		graphics.moveTo(pts2D[26].x, pts2D[26].y);
		graphics.lineTo(pts2D[27].x, pts2D[27].y);
		graphics.moveTo(pts2D[28].x, pts2D[28].y);
		graphics.lineTo(pts2D[29].x, pts2D[29].y);
		graphics.moveTo(pts2D[30].x, pts2D[30].y);
		graphics.lineTo(pts2D[31].x, pts2D[31].y);
		graphics.moveTo(pts2D[32].x, pts2D[32].y);
		graphics.lineTo(pts2D[33].x, pts2D[33].y);
		graphics.moveTo(pts2D[34].x, pts2D[34].y);
		graphics.lineTo(pts2D[35].x, pts2D[35].y);
		graphics.moveTo(pts2D[36].x, pts2D[36].y);
		graphics.lineTo(pts2D[37].x, pts2D[37].y);
		graphics.moveTo(pts2D[38].x, pts2D[38].y);
		graphics.lineTo(pts2D[39].x, pts2D[39].y);
		graphics.moveTo(pts2D[40].x, pts2D[40].y);
		graphics.lineTo(pts2D[41].x, pts2D[41].y);
		graphics.moveTo(pts2D[42].x, pts2D[42].y);
		graphics.lineTo(pts2D[43].x, pts2D[43].y);
		graphics.moveTo(pts2D[44].x, pts2D[44].y);
		graphics.lineTo(pts2D[45].x, pts2D[45].y);
		graphics.moveTo(pts2D[46].x, pts2D[46].y);
		graphics.lineTo(pts2D[47].x, pts2D[47].y);
		graphics.moveTo(pts2D[48].x, pts2D[48].y);
		graphics.lineTo(pts2D[49].x, pts2D[49].y);
		graphics.moveTo(pts2D[50].x, pts2D[50].y);
		graphics.lineTo(pts2D[51].x, pts2D[51].y);
		graphics.moveTo(pts2D[52].x, pts2D[52].y);
		graphics.lineTo(pts2D[53].x, pts2D[53].y);
		graphics.moveTo(pts2D[54].x, pts2D[54].y);
		graphics.lineTo(pts2D[55].x, pts2D[55].y);
		graphics.moveTo(pts2D[56].x, pts2D[56].y);
		graphics.lineTo(pts2D[57].x, pts2D[57].y);
		graphics.moveTo(pts2D[58].x, pts2D[58].y);
		graphics.lineTo(pts2D[59].x, pts2D[59].y);
		graphics.moveTo(pts2D[60].x, pts2D[60].y);
		graphics.lineTo(pts2D[61].x, pts2D[61].y);
		graphics.moveTo(pts2D[62].x, pts2D[62].y);
		graphics.lineTo(pts2D[63].x, pts2D[63].y);
		graphics.moveTo(pts2D[64].x, pts2D[64].y);
		graphics.lineTo(pts2D[65].x, pts2D[65].y);
		graphics.moveTo(pts2D[66].x, pts2D[66].y);
		graphics.lineTo(pts2D[67].x, pts2D[67].y);

Each moveto > Lineto = 1 line on screen. We need to do this for every line
Line 0 connects to line 1
line 2 connects to line 3
and so on…………..


Publication author

offline 5 days


Comments: 1160Publics: 2780Registration: 06-03-2017

Notify of

Inline Feedbacks
View all comments
15 years ago

link still dowsn’t work 🙁

16 years ago

Link doen’t work….. 🙁

17 years ago

Thank you for this nice guide musashi9 😀
Btw do any1 know how you could write something under the fairlight logo in Flash MX?

19 years ago

excelent !!!!!!!!!!! thanx a lot !


This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.


This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Password generation

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Would love your thoughts, please comment.x