**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

3A1E8

3A332

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), make3DPoint(76,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…………..

tutorial has been completely re-written

Download is now an AS3 source file

link still dowsn’t work 🙁

Link doen’t work….. 🙁

Thank you for this nice guide musashi9 😀

Btw do any1 know how you could write something under the fairlight logo in Flash MX?

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