Jump to content
A 2021 backup has been restored. Forums are closed and work in progress. Join our Discord server for more updates! ×
SoaH City Message Board

The Taxman

Members
  • Posts

    90
  • Joined

  • Last visited

  • Days Won

    3

Posts posted by The Taxman

  1. He never replies to me. I've sent him a few in the past. Still waiting for a reply in the current one I sent.

    Ok, someone pointed this topic out to me, and I checked every single point of contact I have. No messages from you ever mate.

    FYI : I designed Desert Dazzle and Final Fever during the Sonic CD (2011)'s development. That particular screenshot is property of SEGA as it was included in the final product.

    I will not give permission to use this, just as SEGA never gives you permission to use other graphics. Whether you choose to ignore intellectual property rights is your call. It would be a shame to have my work recognized by an inferior copy though. (less than half of the artwork is even visible to you, nor the actual level design).

    Why not spend some extra time and come up with your own desert level?

  2. Oh hey, people talking about me! I'm not involved in Sonic 4 iPhone or otherwise so uh... sorry? I am working on some awesome stuff though, which I can't discuss publicly (NDA) so sorry again?

    You should see at least one of the things I'm working on this year though so stay tuned.

  3. Here's a simple way to do boss collision

    if Player's CollisionBox Collides with the Boss' Collision Box:

    Player.XSpeed=(Player.XPos-Boss.XPos)*BounceBackStrength

    Player.YSpeed=(Player.YPos-Boss.YPos)*BounceBackStrength

    end if

    BounceBackStrength is usually a fractional value, since the speed would be too great otherwise. Play around with the value to get the optimum bouncing speed.

  4. Hey gang, I wasn't going to make this public for a little while, but given SEGA's latest blog post, and their upcoming discussions on wednesday it's time for some guerilla marketing!

    Recently, I've been in contact with SEGA in regards to doing an enhanced port of Sonic CD for the iPhone. I put together a proof of concept demo and video demonstrating the game fully functional on Apple's iDevice

    http://www.christianwhitehead.com/soniccd/view.html

    http://www.youtube.com/watch?v=4teDIp32mXI

    The question is, do YOU want it? Let SEGA know. This is more than just one of their crappy emulator ports, we're talking iPhone exclusive enhancements and features (I've got some cool plans)

    Discuss

  5. Not really, as I'm assuming they're just making Win32 calls to have the OS handle the EXE; there's no "translation" really going on.

    The Flash version of MMF, works on my mac though, so there isn't any Windows stuff going on here. Like I said, Clickteam most likely took the engine code of MMF and used alchemy to create a flash implementation of it. Then, they'd just have a template swf file that they could insert your mmf game data via the new swf export option.

    http://labs.adobe.com/technologies/alchemy/

  6. Does this mean your rotating stars rotate in your animation frames? I see 12 frames for most of these. Well, I was using only 6 frames. Maybe if I stretched it out to 12, the animation might look better.

    Thank you for the code, Taxman. It gave me some valuable info. I'll get back to work on the invincibility later today.

    Nah, the rotation is handled with sin and cos functions:



    //Draw the 4th Pair of Stars
    TempValue2=Object.Angle2
    TempValue2+=116
    Cos(TempValue0,TempValue2)
    Sin(TempValue1,TempValue2)
    TempValue0<<=11
    TempValue1<<=11

    ArrayPos0=1
    TempValue0+=StarPos7[+ArrayPos0]
    ArrayPos0=2
    TempValue1+=StarPos7[+ArrayPos0]

    DrawSpriteXY(Object.Stars4,TempValue0,TempValue1)

    TempValue2=Object.Angle2
    TempValue2+=372
    Cos(TempValue0,TempValue2)
    Sin(TempValue1,TempValue2)
    TempValue0<<=11
    TempValue1<<=11

    ArrayPos0=1
    TempValue0+=StarPos7[+ArrayPos0]
    ArrayPos0=2
    TempValue1+=StarPos7[+ArrayPos0]

    TempValue2=Object.Stars4
    TempValue2+=3
    DrawSpriteXY(TempValue2,TempValue0,TempValue1)

    //Draw the 3rd Pair of Stars
    Cos(TempValue0,Object.Angle2)
    Sin(TempValue1,Object.Angle2)
    TempValue0<<=11
    TempValue1<<=11

    ArrayPos0=1
    TempValue0+=StarPos5[+ArrayPos0]
    ArrayPos0=2
    TempValue1+=StarPos5[+ArrayPos0]

    DrawSpriteXY(Object.Stars3,TempValue0,TempValue1)

    TempValue2=Object.Angle2
    TempValue2+=256
    Cos(TempValue0,TempValue2)
    Sin(TempValue1,TempValue2)
    TempValue0<<=11
    TempValue1<<=11

    ArrayPos0=1
    TempValue0+=StarPos5[+ArrayPos0]
    ArrayPos0=2
    TempValue1+=StarPos5[+ArrayPos0]

    TempValue2=Object.Stars3
    TempValue2+=5
    DrawSpriteXY(TempValue2,TempValue0,TempValue1)

    //Draw the 2nd Pair of Stars
    TempValue2=Object.Angle2
    TempValue2+=168
    Cos(TempValue0,TempValue2)
    Sin(TempValue1,TempValue2)
    TempValue0<<=11
    TempValue1<<=11

    ArrayPos0=1
    TempValue0+=StarPos3[+ArrayPos0]
    ArrayPos0=2
    TempValue1+=StarPos3[+ArrayPos0]

    DrawSpriteXY(Object.Stars2,TempValue0,TempValue1)

    TempValue2=Object.Angle2
    TempValue2+=424
    Cos(TempValue0,TempValue2)
    Sin(TempValue1,TempValue2)
    TempValue0<<=11
    TempValue1<<=11

    ArrayPos0=1
    TempValue0+=StarPos3[+ArrayPos0]
    ArrayPos0=2
    TempValue1+=StarPos3[+ArrayPos0]

    TempValue2=Object.Stars2
    TempValue2+=3
    DrawSpriteXY(TempValue2,TempValue0,TempValue1)

    //Draw the 1st Pair of Stars
    Cos(TempValue0,Object.Angle1)
    Sin(TempValue1,Object.Angle1)
    TempValue0<<=11
    TempValue1<<=11

    TempValue0+=Player.XPos
    TempValue1+=Player.YPos

    DrawSpriteXY(Object.Stars1,TempValue0,TempValue1)

    TempValue2=Object.Angle1
    TempValue2+=256
    Cos(TempValue0,TempValue2)
    Sin(TempValue1,TempValue2)
    TempValue0<<=11
    TempValue1<<=11

    TempValue0+=Player.XPos
    TempValue1+=Player.YPos

    TempValue2=Object.Stars3
    TempValue2+=5
    DrawSpriteXY(Object.Stars1,TempValue0,TempValue1)


    [/CODE]

    The radius of the rotation stars is 16 pixels so in mmf it'd look more like this

    Star_XPosition = Star_CentreX + ( cos(RotationAngle) * 16 )

    Star_YPosition = Star_CentreY + ( sin(RotationAngle) *16 )

    Star_CentreX and Star_CentreY are the buffered positions of PlayerX and PlayerY. The older the buffer data, the more delayed the star trailing effect is

  7. All I can say is, unless that code works in mmf2's lua object, I doubt it will help much. far too much bulk here.

    Bulky? This one was a fairly basic sized script XD

    No you wouldn't be able to port that code directly, apart from the fact the script syntax is my own, the Retro Engine works very differently to the object system of MMF. For example, MMF would need each star twinkle to be a separate active object, where as using the manual drawing methods in the Retro Engine, the stars are drawn with one script.

    It should still be possible to duplicate the algorithm though. It's just not laid out in an obvious manner, so yeah sorry. I just can't be bothered going into mmf and dealing with it XD

  8. Here's the script file for how it's done in Retro-Sonic XG... bear in mind it's using fixed point math instead of floats hence the bit shifting in areas. It might be a little complex though so sorry if it's no help :P



    //---------Retro Sonic XG Invincibility Stars---------//
    //----Scripted by Christian Whitehead "The Taxman"----//

    //----Player Directions----//
    #alias 1 : FACING_LEFT
    #alias 0 : FACING_RIGHT

    #alias Object.Value0 : Object.Angle1
    #alias Object.Value1 : Object.Angle2

    #alias Object.Value2 : Object.Stars1
    #alias Object.Value3 : Object.Stars2
    #alias Object.Value4 : Object.Stars3
    #alias Object.Value5 : Object.Stars4

    #alias Object.Value0 : StarPos0
    #alias Object.Value1 : StarPos1
    #alias Object.Value2 : StarPos2
    #alias Object.Value3 : StarPos3
    #alias Object.Value4 : StarPos4
    #alias Object.Value5 : StarPos5
    #alias Object.Value6 : StarPos6
    #alias Object.Value7 : StarPos7

    sub ObjectMain
    if Object.State==0
    //Set the Star Positions
    ArrayPos0=1
    StarPos7[+ArrayPos0]=Player.XPos
    StarPos6[+ArrayPos0]=Player.XPos
    StarPos5[+ArrayPos0]=Player.XPos
    StarPos4[+ArrayPos0]=Player.XPos
    StarPos3[+ArrayPos0]=Player.XPos
    StarPos2[+ArrayPos0]=Player.XPos
    StarPos1[+ArrayPos0]=Player.XPos
    StarPos0[+ArrayPos0]=Player.XPos

    ArrayPos0=2
    StarPos7[+ArrayPos0]=Player.YPos
    StarPos6[+ArrayPos0]=Player.YPos
    StarPos5[+ArrayPos0]=Player.YPos
    StarPos4[+ArrayPos0]=Player.YPos
    StarPos3[+ArrayPos0]=Player.YPos
    StarPos2[+ArrayPos0]=Player.YPos
    StarPos1[+ArrayPos0]=Player.YPos
    StarPos0[+ArrayPos0]=Player.YPos

    Object.Angle1=180
    Object.Angle2=0

    Object.Stars4=20
    Object.Stars3=0
    Object.Stars2=32
    Object.Stars1=44

    Object.State=1
    end if
    end sub

    sub ObjectDraw

    //Update the Star Frames
    Object.Stars4++
    if Object.Stars4==26
    Object.Stars4=20
    end if

    Object.Stars3++
    if Object.Stars3==10
    Object.Stars3=0
    end if

    Object.Stars2++
    if Object.Stars2==38
    Object.Stars2=32
    end if

    Object.Stars1++
    if Object.Stars1==56
    Object.Stars1=44
    end if

    //Update the Star Positions
    ArrayPos0=1
    StarPos7[+ArrayPos0]=StarPos6[+ArrayPos0]
    StarPos6[+ArrayPos0]=StarPos5[+ArrayPos0]
    StarPos5[+ArrayPos0]=StarPos4[+ArrayPos0]
    StarPos4[+ArrayPos0]=StarPos3[+ArrayPos0]
    StarPos3[+ArrayPos0]=StarPos2[+ArrayPos0]
    StarPos2[+ArrayPos0]=StarPos1[+ArrayPos0]
    StarPos1[+ArrayPos0]=StarPos0[+ArrayPos0]
    StarPos0[+ArrayPos0]=Player.XPos

    ArrayPos0=2
    StarPos7[+ArrayPos0]=StarPos6[+ArrayPos0]
    StarPos6[+ArrayPos0]=StarPos5[+ArrayPos0]
    StarPos5[+ArrayPos0]=StarPos4[+ArrayPos0]
    StarPos4[+ArrayPos0]=StarPos3[+ArrayPos0]
    StarPos3[+ArrayPos0]=StarPos2[+ArrayPos0]
    StarPos2[+ArrayPos0]=StarPos1[+ArrayPos0]
    StarPos1[+ArrayPos0]=StarPos0[+ArrayPos0]
    StarPos0[+ArrayPos0]=Player.YPos

    if Player.Direction==FACING_RIGHT
    Object.Angle1+=144
    if Object.Angle1>511
    Object.Angle1-=512
    end if

    Object.Angle2+=16
    if Object.Angle2>511
    Object.Angle2-=512
    end if
    else
    Object.Angle1-=144
    if Object.Angle1<0
    Object.Angle1+=512
    end if

    Object.Angle2-=16
    if Object.Angle2<0
    Object.Angle2+=512
    end if
    end if

    //Draw the 4th Pair of Stars
    TempValue2=Object.Angle2
    TempValue2+=116
    Cos(TempValue0,TempValue2)
    Sin(TempValue1,TempValue2)
    TempValue0<<=11
    TempValue1<<=11

    ArrayPos0=1
    TempValue0+=StarPos7[+ArrayPos0]
    ArrayPos0=2
    TempValue1+=StarPos7[+ArrayPos0]

    DrawSpriteXY(Object.Stars4,TempValue0,TempValue1)

    TempValue2=Object.Angle2
    TempValue2+=372
    Cos(TempValue0,TempValue2)
    Sin(TempValue1,TempValue2)
    TempValue0<<=11
    TempValue1<<=11

    ArrayPos0=1
    TempValue0+=StarPos7[+ArrayPos0]
    ArrayPos0=2
    TempValue1+=StarPos7[+ArrayPos0]

    TempValue2=Object.Stars4
    TempValue2+=3
    DrawSpriteXY(TempValue2,TempValue0,TempValue1)

    //Draw the 3rd Pair of Stars
    Cos(TempValue0,Object.Angle2)
    Sin(TempValue1,Object.Angle2)
    TempValue0<<=11
    TempValue1<<=11

    ArrayPos0=1
    TempValue0+=StarPos5[+ArrayPos0]
    ArrayPos0=2
    TempValue1+=StarPos5[+ArrayPos0]

    DrawSpriteXY(Object.Stars3,TempValue0,TempValue1)

    TempValue2=Object.Angle2
    TempValue2+=256
    Cos(TempValue0,TempValue2)
    Sin(TempValue1,TempValue2)
    TempValue0<<=11
    TempValue1<<=11

    ArrayPos0=1
    TempValue0+=StarPos5[+ArrayPos0]
    ArrayPos0=2
    TempValue1+=StarPos5[+ArrayPos0]

    TempValue2=Object.Stars3
    TempValue2+=5
    DrawSpriteXY(TempValue2,TempValue0,TempValue1)

    //Draw the 2nd Pair of Stars
    TempValue2=Object.Angle2
    TempValue2+=168
    Cos(TempValue0,TempValue2)
    Sin(TempValue1,TempValue2)
    TempValue0<<=11
    TempValue1<<=11

    ArrayPos0=1
    TempValue0+=StarPos3[+ArrayPos0]
    ArrayPos0=2
    TempValue1+=StarPos3[+ArrayPos0]

    DrawSpriteXY(Object.Stars2,TempValue0,TempValue1)

    TempValue2=Object.Angle2
    TempValue2+=424
    Cos(TempValue0,TempValue2)
    Sin(TempValue1,TempValue2)
    TempValue0<<=11
    TempValue1<<=11

    ArrayPos0=1
    TempValue0+=StarPos3[+ArrayPos0]
    ArrayPos0=2
    TempValue1+=StarPos3[+ArrayPos0]

    TempValue2=Object.Stars2
    TempValue2+=3
    DrawSpriteXY(TempValue2,TempValue0,TempValue1)

    //Draw the 1st Pair of Stars
    Cos(TempValue0,Object.Angle1)
    Sin(TempValue1,Object.Angle1)
    TempValue0<<=11
    TempValue1<<=11

    TempValue0+=Player.XPos
    TempValue1+=Player.YPos

    DrawSpriteXY(Object.Stars1,TempValue0,TempValue1)

    TempValue2=Object.Angle1
    TempValue2+=256
    Cos(TempValue0,TempValue2)
    Sin(TempValue1,TempValue2)
    TempValue0<<=11
    TempValue1<<=11

    TempValue0+=Player.XPos
    TempValue1+=Player.YPos

    TempValue2=Object.Stars3
    TempValue2+=5
    DrawSpriteXY(Object.Stars1,TempValue0,TempValue1)

    end sub

    sub ObjectStartup

    LoadSpriteSheet("Global/Items.gif")

    //Invincibility Star Frames
    SpriteFrame(0,0,1,1,118,304)
    SpriteFrame(-1,-1,3,3,117,303)
    SpriteFrame(-3,-3,7,7,117,307)
    SpriteFrame(-7,-7,15,15,125,303)
    SpriteFrame(-10,-10,21,21,117,319)
    SpriteFrame(-15,-15,31,31,143,332)
    SpriteFrame(-10,-10,21,21,117,319)
    SpriteFrame(-7,-7,15,15,125,303)
    SpriteFrame(-3,-3,7,7,117,307)
    SpriteFrame(-1,-1,3,3,117,303)
    SpriteFrame(0,0,1,1,118,304)
    SpriteFrame(-1,-1,3,3,117,303)
    SpriteFrame(-3,-3,7,7,117,307)
    SpriteFrame(-7,-7,15,15,125,303)
    SpriteFrame(-10,-10,21,21,117,319)
    SpriteFrame(-15,-15,31,31,143,332)
    SpriteFrame(-10,-10,21,21,117,319)
    SpriteFrame(-7,-7,15,15,125,303)
    SpriteFrame(-3,-3,7,7,117,307)
    SpriteFrame(-1,-1,3,3,117,303)

    //Frame 20
    SpriteFrame(0,0,1,1,118,304)
    SpriteFrame(-1,-1,3,3,117,303)
    SpriteFrame(-3,-3,7,7,117,307)
    SpriteFrame(-7,-7,15,15,125,303)
    SpriteFrame(-3,-3,7,7,117,307)
    SpriteFrame(-1,-1,3,3,117,303)
    SpriteFrame(0,0,1,1,118,304)
    SpriteFrame(-1,-1,3,3,117,303)
    SpriteFrame(-3,-3,7,7,117,307)
    SpriteFrame(-7,-7,15,15,125,303)
    SpriteFrame(-3,-3,7,7,117,307)
    SpriteFrame(-1,-1,3,3,117,303)

    //Frame 32
    SpriteFrame(-3,-3,7,7,117,307)
    SpriteFrame(-7,-7,15,15,125,303)
    SpriteFrame(-10,-10,21,21,117,319)
    SpriteFrame(-15,-15,31,31,143,332)
    SpriteFrame(-10,-10,21,21,117,319)
    SpriteFrame(-7,-7,15,15,125,303)
    SpriteFrame(-3,-3,7,7,117,307)
    SpriteFrame(-7,-7,15,15,125,303)
    SpriteFrame(-10,-10,21,21,117,319)
    SpriteFrame(-15,-15,31,31,143,332)
    SpriteFrame(-10,-10,21,21,117,319)
    SpriteFrame(-7,-7,15,15,125,303)

    //Frame 44
    SpriteFrame(-15,-15,31,31,143,332)
    SpriteFrame(-3,-3,7,7,117,307)
    SpriteFrame(-7,-7,15,15,125,303)
    SpriteFrame(-3,-3,7,7,117,307)
    SpriteFrame(-3,-3,7,7,117,307)
    SpriteFrame(-7,-7,15,15,125,303)
    SpriteFrame(-3,-3,7,7,117,307)
    SpriteFrame(-15,-15,31,31,143,332)
    SpriteFrame(-3,-3,7,7,117,307)
    SpriteFrame(-7,-7,15,15,125,303)
    SpriteFrame(-7,-7,15,15,125,303)
    SpriteFrame(-3,-3,7,7,117,307)

    end sub

    sub RSDK
    LoadSpriteSheet("Global/Items.gif")
    SetEditorIcon(Icon0,SingleIcon,-15,-15,31,31,143,332)
    end sub

    [/CODE]

  9. Actually, the trailing effect is achieved by having a buffer of x,y positions for the centre of the rotating circle of stars. Each frame, the x and y position of the player is copied to the next buffer position.

    Retro Sonic XG has the Sonic2/3 invincibility stars, I could post my script file for it, but you might have trouble reinterpreting it for mmf

  10. It's funny, I play like that all time. I think it comes from testing stuff in my own games. Moving around, marveling at what's achieved on the screen type deal. Of course, it's usually after I've beaten a game for the first time

    Sonic Unleashed for example, I pretty much rushed to get the bare minimum of coins to complete the game, and now I find it's enjoyable just to pick any daytime level or hub even and just cruise around for novelty.

    • Like 1
  11. Ok, for all the Dreamcast fans/nuts out there, I've decided to go ahead with a DC port for RSXG. It won't be out the same time as the PC/Mac/Wii version though since it requires more tweaking than a Vanilla port.

    As with the previous DC port, I have to retool the graphics to use hardware rendering instead of my own software library in order to get the full 60fps speed, and there will probably be minor graphics differences as a result. But hey think of it like Earthworm Jim 2, the graphics for that game looked different between Megadrive/Snes/Saturn etc.

    • Like 1
  12. Ah, I got confused with this merge, I thought Retro Sonic and RSXB were still too separate games. So I haven't kept up with the news, are levels from Retro Sonic going to be RSXG, in that case?

    This is kind of off-topic, but you don't have a Non-Self Booting copy of Retro Sonic for the Dreamcast laying around do you? I can only find the SB ones and I well wanted to make a SBI (Self Boot Inducer) out of the Non-Self Booting one.

    Out of the original Retro-Sonic, 3 and a half levels have made the merge. The 'half' is because Dust Hill zone is somewhat similar to XG's Desert Dash. The Retro-Sonic levels have been completely redesigned for XG though.

    As for the old Dreamcast demo, I don't have it on hand since I've just recently upgraded my desktop and only copied over stuff I wanted. I'd have to look on the old one to see if it's there. You can just use the files from the existing image though can't you?

  13. I'm guessing then at the moment that RSXG is taking priority over just the basic Retro-Sonic then?

    That's cool. But we need moar Dreamcast ports. *Runs*

    What exactly do you mean by 'the basic Retro-Sonic'? If you're talking about the game it got merged with XG, they're one and the same now. If you're talking about the engine, It's always priority one, since I'm using it to make the game ;)

    Don't you worry about ports though... way ahead of you. Although dreamcast is becoming less feasible, I'm pushing the capabilities of my software rendering library harder now, and since the DC is too slow to do software rendering at 60fps I'd have to go the hardware rendering route as I did with the last port. However, I don't want to compromise the neato effects that are in RSXG... so I think you'll most likely be playing it on a certain remote swingin' system

  14. Man, I heard this same exact answer not too long ago and it ends there. Is there a reason at all? It was being touted around forever, even saying there would be a Dreamcast port. It seemed pretty much set that it'd become an eventual public tool rather than just something that a couple of people that approached him would be able to use.

    Does Taxman come here at all? I don't want to sound like I'm begging here as there is the Mettrix engine anyways so it's not a huge issue...but considering it was being promised and then suddenly we only hear about it through other peoples projects now, I think it'd be fair to at least let people know what happened to the tool itself. Considering he even named the scripting or whatever as TaxReciept, it seems odd to give stuff names when it's only gonna be kept to yourself... :P

    Don't consider me pissed, just at a loss on what happened. As it stands, I get the impression the only people that will ever get to use this program will be anyone who messages Taxman and proposes a port of their game to his engine, if it's "worthy" enough(which XG most certainly is :).

    Yeah, I wouldn't expect to see the RSDK around for a while. My focus is on RSXG, since I'm the leading man behind it now. Euan has actually stepped out, since he's too busy to work on it anymore (so it's actually the merger that saved XG from cancellation in a way ;P). Not that he hasn't already done his share already, with all the zone art that came with the merger.

    Also, there's no written documentation with the RSDK at this point. The Nexus gang have learnt it pretty much direct contact with me. Their testing has also given me feedback as to how I could make additions/improvements along the way. If I had to do the same with anyone that wanted to use it, I'd have no time whatsoever. So yeah, perhaps later on... but don't hold your breath for it just yet.

×
×
  • Create New...