Sonic and Sega Retro Message Board: redhotsonic - Viewing Profile - Sonic and Sega Retro Message Board

Jump to content

Hey there, Guest!  (Log In · Register) Help
Loading News Feed...
 

Group:
Tech Member: Tech Members
Active Posts:
987 (0.33 per day)
Most Active In:
Engineering & Reverse Engineering (520 posts)
Joined:
31-January 05
Profile Views:
548
Last Active:
User is offline Yesterday, 01:03 PM
Currently:
Offline

My Information

Member Title:
Also known as RHS
Age:
24 years old
Birthday:
January 25, 1989
Gender:
Male Male
Location:
United Kingdom

Previous Fields

Other Contact Info:
N/A
Project:
Sonic 2 Recreation
National Flag:
gb
Wiki edits:
24

Latest Visitors

Topics I've Started

  1. Basic ASM guide

    24 May 2013 - 12:51 PM

    Eons ago (26th February 2007 to be precise), I made a basic ASM guide and shared it on the forums here and SSRG. Now there were a few mistakes, and when someone ported it to the Retro wiki, all the colours I did were lost, making my guide quite mis-understanding. For ages now, I've been meaning to update it, but couldn't be arsed.


    Until now: How to work with the Motorola 68000 assembly (Basic ASM guide)


    I finally decided to get on with it and clear up all the mistakes and even improve on it. Now I must stress, this is for beginners or people who don't know ASM at all. If you have an average understanding of ASM, you might get a few tips reading this, but if you're an expert, then this isn't for you. There are other ASM guides that get very technical. This is just the basics and tried to make it easy to understand.


    So to all you new hackers out there, learn the skill to create great MegaDrive hacks today!
  2. How to fix speed issues in Sonic 2

    17 May 2013 - 04:01 PM

    Hello, I've been meaning to make this guide for ages but because of life reasons, I just didn't have the time. But recently, I have found more time and decided to get on with this.


    In Sonic 2, there are multiple speed issue bugs with Sonic and Tails, but for now, let's look at it with Sonic's point of view. It's uncommon, but not exactly rare, and when Super Sonic is enabled, it becomes more apparent. But sometimes, Sonic's top speed, acceleration and deceleration can be set wrong. The most common place for the bugs to occur is around this area of ARZ1 due to where the speed shoes are placed.

    Posted Image


    Like said, it can be uncommon, but with people's hacks putting speedshoes underwater and other places, the bugs can happen more often.



    There are several speed issues:

    • If Super Sonic and you hit speedshoes, his top speed goes a little bit higher which is fine, but his acceleration and deceleration decreases. Technically, it's applying normal Sonic's speedshoes speed.

    • If Normal Sonic and you get speedshoes, if you go underwater, speedshoes's speed are lost. Even if you get out of the water, Sonic's speed is normal.

    • If Super Sonic and you get speedshoes, if you go underwater, speedshoes's speed are lost. Even if you get out of the water, Super Sonic's speed is normal.

    • If underwater and you get speedshoes, Sonic's "out-of-water" speedshoes speed apply, making you go way too fast underwater. Getting out of water or even back in and the speedshoes speeds are lost, even with speedshoes applied.

    • If Super and underwater and you get speedshoes, Normal Sonic's "out-of-water" speedshoes speed apply, making you go way too fast underwater. Getting out of water or even back in and the speedshoes speeds are lost, even with speedshoes applied, but applies Super Sonic's speed settings.

    • If underwater and you get speedshoes, bug above applies but if you never leave the water, once speedshoes wear off, Sonic's normal speed applies, even though you're still underwater, making you still too fast.

    • If Super and underwater and you get speedshoes, bug above the above applies but if you never leave the water, once speedshoes wear off, Super Sonic's speed applies, even though you're still underwater, making you still too fast.

    • If underwater and then you transform into Super Sonic, Super Sonic's "out-of-water" speed applies, making you way too fast.

    • If you have speedshoes and then you transform into Super Sonic, Super Sonic's speed applies, making you lose speedshoes speed, making you that bit slower than you should be.

    • If underwater when you have speedshoes and then you transform into Super Sonic, Super Sonic's "out-of-water" speed applies, and you lose your speedshoes speed.

    • If underwater when you have speedshoes and you're Super Sonic and you transform back to normal Sonic, normal Sonic's "underwater" speed applies, making you lose your speedshoes.



    A lot, eh? The main issue is that the game never checks to see if you have the speedshoes applied or not. Or when becoming Super and etc, it's not checking if underwater, etc, etc. It would have to do a few checks itself to get it right and I suspect Sonic Team didn't have time to do it as it wasn't particularly important. But we're going to fix these ourselves, and it's easier than you think.

    Please note: I am using Xenowhirls disassembly, although this shouldn't be hard to follow if you're using the HG disassembly.




    Step 1 - Back-up your disassembly

    Like all guides you're about to follow, make a back-up before making any changes! I am also not held responsible for any troubles this may bring to your hack.




    Step 2 - Creating new speeds

    First of all, we need to make some new speed settings. Here are some of Sonic's speeds settings listed in Sonic 2 currently:

    ; NORMAL
    	move.w	#$600,(Sonic_top_speed).w
    	move.w	#$C,(Sonic_acceleration).w
    	move.w	#$80,(Sonic_deceleration).w
    
    ; NORMAL SPEED SHOES
    	move.w	#$C00,(Sonic_top_speed).w
    	move.w	#$18,(Sonic_acceleration).w
    	move.w	#$80,(Sonic_deceleration).w
    	
    ; SUPER SONIC
    	move.w	#$A00,(Sonic_top_speed).w
    	move.w	#$30,(Sonic_acceleration).w
    	move.w	#$100,(Sonic_deceleration).w
    	
    ; NORMAL UNDERWATER
    	move.w	#$300,(Sonic_top_speed).w
    	move.w	#6,(Sonic_acceleration).w
    	move.w	#$40,(Sonic_deceleration).w
    
    ; SUPER SONIC UNDERWATER
    	move.w	#$500,(Sonic_top_speed).w
    	move.w	#$18,(Sonic_acceleration).w
    	move.w	#$80,(Sonic_deceleration).w
    



    As you can see, the game doesn't have speed settings for "Normal underwater with speedshoes", "Super Sonic with speedshoes" or "Super Sonic underwater with speedshoes". No wonder why all these bugs exist. Now, we have to come up with these speeds, which I have already done with some maths involved. To get "Normal underwater with speedshoes", I thought, how does normal Sonic get speedshoes speed? Well, everything is doubled except his deceleration, which stays the same. So I did the same and got this new speed setting.

    ; NORMAL UNDERWATER SPEED SHOES
    	move.w	#$600,(Sonic_top_speed).w
    	move.w	#$C,(Sonic_acceleration).w
    	move.w	#$40,(Sonic_deceleration).w
    



    It's almost identical to Sonic's normal speed, except his deceleration is slower. To get "Super Sonic with speedshoes", I left the top speed setting it already does alone, but made it not decrease Super Sonic's acceleration and deceleration, making him that tiny bit faster:

    ; SUPER SONIC SPEED SHOES
    	move.w	#$C00,(Sonic_top_speed).w
    	move.w	#$30,(Sonic_acceleration).w
    	move.w	#$100,(Sonic_deceleration).w
    



    To get "Super Sonic underwater with speedshoes", I followed the same method on how "Normal" does it, and got this:

    ; SUPER SONIC UNDERWATER SPEED SHOES
    	move.w	#$A00,(Sonic_top_speed).w
    	move.w	#$30,(Sonic_acceleration).w
    	move.w	#$80,(Sonic_deceleration).w
    



    You do not need to add any of the ASM above into your hack as yet.




    Step 3 - Creating a new table

    Now we've got all our speeds, we need to convert it into a table. Which I have already done on your behalf:

    ; ===========================================================================
    ; ----------------------------------------------------------------------------
    ; Speed Settings Array
    
    ; This array defines what speeds the character should be set to
    ; ----------------------------------------------------------------------------
    ;		blank	top_speed	acceleration	deceleration	; #	; Comment
    Speedsettings:
    	dc.w	$0,	$600,		$C,		$80		; $00	; Normal
    	dc.w	$0,	$C00,		$18,		$80		; $08	; Normal Speedshoes
    	dc.w	$0,	$300,		$6,		$40		; $16	; Normal Underwater
    	dc.w	$0,	$600,		$C,		$40		; $24	; Normal Underwater Speedshoes
    	dc.w	$0,	$A00,		$30,		$100		; $32	; Super
    	dc.w	$0,	$C00,		$30,		$100		; $40	; Super Speedshoes
    	dc.w	$0,	$500,		$18,		$80		; $48	; Super Underwater
    	dc.w	$0,	$A00,		$30,		$80		; $56	; Super Underwater Speedshoes
    ; ===========================================================================
    



    This will be our new table. We'll insert this into the ASM file shortly. First, let's go onto the next step.




    Step 4 - Creating a new subroutine to apply speeds

    So, we need to create a new subroutine to grab the right speed under Sonic's conditions. Here is what I come up with:

    ; ===========================================================================
    ; ---------------------------------------------------------------------------
    ; Subroutine to collect the right speed setting for a character
    ; a0 must be character
    ; a1 will be the result and have the correct speed settings
    ; a2 is characters' speed
    ; ---------------------------------------------------------------------------
    
    ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
    
    ApplySpeedSettings:
    	moveq	#0,d0				; Quickly clear d0
    	tst.w	speedshoes_time(a0)		; Does character have speedshoes?
    	beq.s	+				; If not, branch
    	addq.b	#1,d0				; Quickly add 1 to d0
    +
    	btst	#6,status(a0)			; Is the character underwater?
    	beq.s	+				; If not, branch
    	addq.b	#2,d0				; Quickly add 2 to d0
    +
    	cmpa.w	#MainCharacter,a0		; Is it Tails currently following this code?
    	bne.s	+				; If so, branch and ignore next question
    	tst.b	(Super_Sonic_flag).w		; Is the character Super?
    	beq.s	+				; If not, branch
    	addq.b	#4,d0				; Quickly add 4 to d0
    +
    	add.b	d0,d0				; Multiply itself
    	add.b	d0,d0				; And again
    	add.b	d0,d0				; And again
    	lea	Speedsettings(pc,d0.w),a1	; Load correct speed settings into a1
    	addq.l	#2,a1				; Increment a1 by 2 quickly
    	move.l	(a1)+,(a2)+			; Set character's new top speed and acceleration
    	move.w	(a1),(a2)			; Set character's deceleration
    	rts					; Finish subroutine
    ; ===========================================================================
    



    What this will do is ask questions like if you're underwater, have speedshoes or are Super and depending on the answers, it will add bytes to d0. Once finished with the questions, whatever d0 is, it will multiply itself 3 times. With the new result in d0 after that multiplication, it will then grab data from the table with its starting position being whatever d0 is. For example, say you're normal Sonic and underwater. After the questions, d0 should be 2. Multiply itself 3 times, d0 becomes 16. If you then look for 16 on the table, you'll see that it does indeed equal "Normal Underwater". So it got the right speed setting.


    So, here is our new code and table so far:

    ; ===========================================================================
    ; ---------------------------------------------------------------------------
    ; Subroutine to collect the right speed setting for a character
    ; a0 must be character
    ; a1 will be the result and have the correct speed settings
    ; a2 is characters' speed
    ; ---------------------------------------------------------------------------
    
    ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
    
    ApplySpeedSettings:
    	moveq	#0,d0				; Quickly clear d0
    	tst.w	speedshoes_time(a0)		; Does character have speedshoes?
    	beq.s	+				; If not, branch
    	addq.b	#1,d0				; Quickly add 1 to d0
    +
    	btst	#6,status(a0)			; Is the character underwater?
    	beq.s	+				; If not, branch
    	addq.b	#2,d0				; Quickly add 2 to d0
    +
    	cmpa.w	#MainCharacter,a0		; Is it Tails currently following this code?
    	bne.s	+				; If so, branch and ignore next question
    	tst.b	(Super_Sonic_flag).w		; Is the character Super?
    	beq.s	+				; If not, branch
    	addq.b	#4,d0				; Quickly add 4 to d0
    +
    	add.b	d0,d0				; Multiply itself
    	add.b	d0,d0				; And again
    	add.b	d0,d0				; And again
    	lea	Speedsettings(pc,d0.w),a1	; Load correct speed settings into a1
    	addq.l	#2,a1				; Increment a1 by 2 quickly
    	move.l	(a1)+,(a2)+			; Set character's new top speed and acceleration
    	move.w	(a1),(a2)			; Set character's deceleration
    	rts					; Finish subroutine
    ; ===========================================================================
    
    ; ----------------------------------------------------------------------------
    ; Speed Settings Array
    
    ; This array defines what speeds the character should be set to
    ; ----------------------------------------------------------------------------
    ;		blank	top_speed	acceleration	deceleration	; #	; Comment
    Speedsettings:
    	dc.w	$0,	$600,		$C,		$80		; $00	; Normal
    	dc.w	$0,	$C00,		$18,		$80		; $08	; Normal Speedshoes
    	dc.w	$0,	$300,		$6,		$40		; $16	; Normal Underwater
    	dc.w	$0,	$600,		$C,		$40		; $24	; Normal Underwater Speedshoes
    	dc.w	$0,	$A00,		$30,		$100		; $32	; Super
    	dc.w	$0,	$C00,		$30,		$100		; $40	; Super Speedshoes
    	dc.w	$0,	$500,		$18,		$80		; $48	; Super Underwater
    	dc.w	$0,	$A00,		$30,		$80		; $56	; Super Underwater Speedshoes
    ; ===========================================================================
    





    Step 5 - Placing your new code in your ASM file

    Thanks to step 4, we've got the majority of the code sorted. You now want to place that new code in your ASM file. My suggestion is to put it between Sonic and Tails object, seeming as they're both the ones that are going to use it more often. So, search for "obj02:" and place it just above.

    Now, if you've put the code in between Sonic and Tails like I said above, the rest of my guide should be fine, although if you do decide to insert the code elsewhere, you may get some “branch out of range” errors, which you must fix yourself. Depending on how heavy you've edited Sonic and/or Tails code, you might get these errors anyway, but they're so simple to fix.




    Step 6 - Replacing some old code in certain places

    Now we have our new code, we need to make some jumps to it. So, let's go.


    First, go to "Obj01_Init:". You only need to do this bit if you have checkpoints starting underwater, otherwise, you can skip this bit of the step. You MUST follow the rest of this step from when you see "************" onwards. Anyway, under the label "Obj01_Init:", find and delete these lines:

    	move.w	#$600,(Sonic_top_speed).w	; set Sonic's top speed
    	move.w	#$C,(Sonic_acceleration).w	; set Sonic's acceleration
    	move.w	#$80,(Sonic_deceleration).w	; set Sonic's deceleration
    


    and replace with this

    	lea	(Sonic_top_speed).w,a2	; Load Sonic_top_speed into a2
    	bsr.w	ApplySpeedSettings	; Fetch Speed settings
    



    "************"


    Under "Obj01_ChkShoes:" find and delete these lines:

    	move.w	#$600,(Sonic_top_speed).w
    	move.w	#$C,(Sonic_acceleration).w
    	move.w	#$80,(Sonic_deceleration).w
    	tst.b	(Super_Sonic_flag).w
    	beq.s	Obj01_RmvSpeed
    	move.w	#$A00,(Sonic_top_speed).w
    	move.w	#$30,(Sonic_acceleration).w
    	move.w	#$100,(Sonic_deceleration).w
    



    and replace with this

    	lea	(Sonic_top_speed).w,a2	; Load Sonic_top_speed into a2
    	bsr.w	ApplySpeedSettings	; Fetch Speed settings
    



    Next, under "Obj01_InWater:" find these lines and delete:

    	move.w	#$300,(Sonic_top_speed).w
    	move.w	#6,(Sonic_acceleration).w
    	move.w	#$40,(Sonic_deceleration).w
    	tst.b	(Super_Sonic_flag).w
    	beq.s	+
    	move.w	#$500,(Sonic_top_speed).w
    	move.w	#$18,(Sonic_acceleration).w
    	move.w	#$80,(Sonic_deceleration).w
    +
    



    and replace with:

    	lea	(Sonic_top_speed).w,a2	; Load Sonic_top_speed into a2
    	bsr.w	ApplySpeedSettings	; Fetch Speed settings
    



    Next, under "Obj01_OutWater:" find these lines and delete:

    	move.w	#$600,(Sonic_top_speed).w
    	move.w	#$C,(Sonic_acceleration).w
    	move.w	#$80,(Sonic_deceleration).w
    	tst.b	(Super_Sonic_flag).w
    	beq.s	+
    	move.w	#$A00,(Sonic_top_speed).w
    	move.w	#$30,(Sonic_acceleration).w
    	move.w	#$100,(Sonic_deceleration).w
    +
    



    and replace with:

    	lea	(Sonic_top_speed).w,a2	; Load Sonic_top_speed into a2
    	bsr.w	ApplySpeedSettings	; Fetch Speed settings
    



    Next, go to "Sonic_CheckGoSuper:" and find and delete these lines:

    	move.w	#$A00,(Sonic_top_speed).w
    	move.w	#$30,(Sonic_acceleration).w
    	move.w	#$100,(Sonic_deceleration).w
    



    and replace with:

    	lea	(Sonic_top_speed).w,a2		; Load Sonic_top_speed into a2
    	bsr.w	ApplySpeedSettings		; Fetch Speed settings
    



    Next, go to "Sonic_RevertToNormal:" and find and delete these lines:

    	move.w	#$600,(Sonic_top_speed).w
    	move.w	#$C,(Sonic_acceleration).w
    	move.w	#$80,(Sonic_deceleration).w
    	btst	#6,status(a0)	; Check if underwater, return if not
    	beq.s	return_1AC3C
    	move.w	#$300,(Sonic_top_speed).w
    	move.w	#6,(Sonic_acceleration).w
    	move.w	#$40,(Sonic_deceleration).w
    



    and replace with this slightly different code:

    	lea	(Sonic_top_speed).w,a2		; Load Sonic_top_speed into a2
    	bra.w	ApplySpeedSettings		; Fetch Speed settings and return
    




    Now onto Tails. Seeming as Tails uses the exact same speeds, we can use the exact same table. So, go to "Obj02_Init:". You only need to do this bit if you have checkpoints starting underwater, otherwise, you can skip this bit of the step. You MUST follow the rest of this step from when you see "~~~~~~~~~~~~" onwards. Anyway, under the label "Obj02_Init:", find and delete these lines:

    	move.w	#$600,(Tails_top_speed).w	; set Tails' top speed
    	move.w	#$C,(Tails_acceleration).w	; set Tails' acceleration
    	move.w	#$80,(Tails_deceleration).w	; set Tails' deceleration
    



    and replace with this slightly different code:

    	lea	(Tails_top_speed).w,a2	; Load Tails_top_speed into a2
    	bsr.w	ApplySpeedSettings	; Fetch Speed settings
    



    "~~~~~~~~~~~~"


    Next, go to "Obj02_ChkShoes:" and find and delete these lines:

    	move.w	#$600,(Tails_top_speed).w
    	move.w	#$C,(Tails_acceleration).w
    	move.w	#$80,(Tails_deceleration).w
    



    and replace with:

    	lea	(Tails_top_speed).w,a2	; Load Tails_top_speed into a2
    	bsr.w	ApplySpeedSettings	; Fetch Speed settings
    



    Next, find "Obj02_InWater:" and find and delete these lines:

    	move.w	#$300,(Tails_top_speed).w
    	move.w	#6,(Tails_acceleration).w
    	move.w	#$40,(Tails_deceleration).w
    



    and replace with:

    	lea	(Tails_top_speed).w,a2	; Load Tails_top_speed into a2
    	bsr.w	ApplySpeedSettings	; Fetch Speed settings
    



    Next, under "Obj02_OutWater:", find and delete:

    	move.w	#$600,(Tails_top_speed).w
    	move.w	#$C,(Tails_acceleration).w
    	move.w	#$80,(Tails_deceleration).w
    



    and replace with:

    	lea	(Tails_top_speed).w,a2	; Load Tails_top_speed into a2
    	bsr.w	ApplySpeedSettings	; Fetch Speed settings
    




    That's Tails. Let's edit the speed shoes object code. Locate label "super_shoes:" and find and delete these lines:

    	move.w	#$C00,(Sonic_top_speed).w
    	move.w	#$18,(Sonic_acceleration).w
    	move.w	#$80,(Sonic_deceleration).w
    



    and replace with this new code:

    	movem.l a0-a2,-(sp)		; Move a0, a1 and a2 onto stack
    	lea	(MainCharacter).w,a0	; Load Sonic to a0
    	lea	(Sonic_top_speed).w,a2	; Load Sonic_top_speed into a2
    	jsr	ApplySpeedSettings	; Fetch Speed settings
    	movem.l (sp)+,a0-a2		; Move a0, a1 and a2 from stack
    



    Then finally, go to "loc_12A10" and delete these lines:

    	move.w	#$C00,(Tails_top_speed).w
    	move.w	#$18,(Tails_acceleration).w
    	move.w	#$80,(Tails_deceleration).w
    



    and replace with this slightly different new code:

    	movem.l a0-a2,-(sp)		; Move a0, a1 and a2 onto stack
    	lea	(MainCharacter).w,a0	; Load Tails to a0
    	lea	(Tails_top_speed).w,a2	; Load Tails_top_speed into a2
    	jsr	ApplySpeedSettings	; Fetch Speed settings
    	movem.l (sp)+,a0-a2		; Move a0, a1 and a2 from stack
    



    All done. Please note, do not edit under the label "loc_3AA22:". This is the only speed settings that can be left alone. This is when Sonic jumps onto the Tornado at the end of WFZ. This code applies to Super Sonic too (so Super Sonic goes slower) but this is to stop Super Sonic over-shooting the Tornado and falling to his death. The speed only applies when Sonic is about to jump onto the plane.


    Be warned! If you have put in other places where you've made the characters change their speed, you'll want to edit them too!




    Step 7 - Fixing another bug

    With the above fixes applied, a new bug has been introduced. The bug? If you're Super Sonic and you die whilst Super, the "Super_Sonic_flag" will still remain set. This means, once the level restarts, the speed settings will fetch speeds with Super Sonic in mind, because of the flag. So if you go underwater or get sppedshoes, it will still think you're Super and take that into account. And if you followed the two steps for when Sonic and Tails get created, then the Super speeds will apply then too.


    Also whilst Super Sonic, if you pause the game and press A to quit, the flag will remain set. You could select Tails in options and Tails will have Super speeds. Anyway, let's fix this.


    Find "Level_ClrRam:" and directly underneath it before the ClearRAM macros, put this:

    	clr.b	(Super_Sonic_flag).w
    



    There we go, all bugs should be fixed.



    Now, when you enter/exit water, enter/exit speedshoes and/or enter/exit Super, the speeds should all be set correctly!


    As per usual, here is a ROM with the bugs fixed.




    Sonic 1?

    Excluding Super Sonic speeds, these bugs technically exist in Sonic 1 too. Although because there isn't any speedshoes in LZ or SBZ3 (unless I'm mistaken but I don't think there is any), these bugs are never seen. But again, if you've made edits to these levels and added speedshoes about especially speedshoes in water, you'll notice these bugs. You can follow this guide as a guideline for a fix.




    Sonic 3 and Knuckles?

    To my knowledge, these bugs are fixed already. But I could be mistaken.




    If anyone wants to add this to the wiki, feel free.




    Cheers,
    redhotsonic


    EDIT: Fixed a bug that MoDule pointed out. ROM download also updated containing this new fix.
  3. FTTC fibre?

    28 December 2012 - 05:10 AM

    Hello, all. Finally, Fibre optic broadband is available in my local area, but there's a catch. It seems it's fibre optic from the exchange, to the green box cabinet thingamajig, but from there to my flat, it's still copper. Luckily, I literally live a 20 second walk from the green box, so the copper wire should be nice and short.


    At the moment, I've got (upto) 20MB broadband (all copper) and getting these results:

    Posted Image

    Posted Image

    Not bad in my opinion.



    Anyway, according to http://www.superfast-openreach.co.uk/ , they're accepting orders for fibre optic. BT and Plusnet are typically saying the best I can get is 80Mbps-down and 20Mbps-up. True or not, I won't find out until I get it.



    For my needs like online-PS3 gaming, Catch-up TV (iplayer for example, and 3D HD movies at times) and downloading large games to my PS3 and/or Android phone, is it worth me paying more money (paying £22, getting fibre will be typically £10 more a month) and getting tied down to an 18-month contract to get FTTC fibre?



    I'm also worried, because other sites like Sky and Virgin are saying I cannot get fibre yet, though OpenReach, BT (I know they're almost the same) and plusnet are saying yes. Maybe Sky and Virgin only do FTTP and/or use different wiring to BT.


    Basically:

    • Is it worth the extra £10 a month getting this for my needs?
    • Will I really get 80Mbps-down/20Mbps-up or do they just say that to everyone?
    • Has anyone upgraded themselves and seen the improvement that they wouldn't go back?



    Any advice I would be grateful.

    redhotsonic
  4. Modify A/S 3D glasses?

    11 December 2012 - 07:42 AM

    Hello, guys. I need some technical help. Even with my green badge, I don't really specialise in this sort of thing.


    Anyone with a 3DTV should know how Active Shutter (A/S) Glasses work (unless you have a Passive 3DTV, then you use them polarise glasses). If you do not know how A/S glasses work with the TV, click here for an explanation.


    Anyway, a lot of you will know about SBS (Side-by-Side) images that you can convert into 3D. When converted, the left picture will display for the left eye and the right for the right eye. Do a lot fo you know about over and under? Works same way as SBS. When in 3D, the above picture is displayed for the left eye and the lower picture for the right eye.


    Now, this is where I am trying to get at. My TV supports both the SBS and Over-under feature, and my TV can display it. So, if I play a game with my friend on the PS3, we have a splitscreen. With splitscreen, the TV will obviously look like a SBS display or Over-under display. If I put 3D mode on over-under (or SBS, depending on what type of splitscreen), then the left/above image will display player 1 on full screen for the left eye only, and the right/below image will display player 2 on full screen for the right eye only. Both of us, full screen on the same TV!

    When I put my A/S glasses on and close my right eye, I can play as player 1 on full screen, whilst my mate puts another A/S glasses on, closes his left eye, and plays on the same TV with him on full screen. See where I am getting at? We've tried it, and it works perfectly. Also tried putting PAP SBS on, PS3 on the left, and Coranation street (my gf's program) on the right. When she wears earphones and we both put the glasses on closing one of our eyes, I have the PS3 full-screen and she with the program full-screen!


    The problem is the glasses. We obviously don't want to keep one of our eyes closed all the way. This will give us a headache. So we want one set of glasses to make both lenses display the left image only, and the other vice-versa. That way, I can just keep the glasses on with both eyes open and only see my screen, with her vice-versa.


    I took my A/S glasses apart and had a look, it's too technical with me, even with this guide (the only guide I could find). My A/S glasses are different as well (Sony branded) so the guide didn't help too much. I've tried searching the internet for anyone selling A/S glasses for left or right display only, but no luck.




    My 2 questions are:

    • Do you know anywhere that sells left-only/right-only A/S glasses?
    • Are you any good at modifying A/S glasses to make this happen?



    If you know the answer to Q1, post your reply here. If you can answer Q2, I will be more than happy to send the glasses to you for modifying. I will pay you to redeliver it back to me too and a fee for doing the job in the first place.


    Any help would be greatly appreciated!


    redhotsonic


    (P.S - I do not believe I've broken any rules making this topic or requesting this sort of thing)
  5. Sonic 2 Time Attack

    24 November 2012 - 02:04 PM

    Hello, guys. It's Sonic the Hedgehog 2's 20th birthday today! Whooo! (Well in Japan, it was 3 days ago, but where I come from, it's today) And to celebrate, I bring you...


    Sonic the Hedgehog 2 - Time Attack



    Note: To download this game and to skip the details, go near the bottom of this post, although I do advise you read this first.


    Sonic the Hedgehog 2 - Time Attack, AKA, Sonic 2 Time Attack, AKA, S2TA, is a hack of Sonic the Hedgehog 2. But as you may have guessed, it's a Time Attack edition. The object of the game is to play the regular levels/acts contained in Sonic 2, but to do it as fast as you can. Once you've past the signpost at the end of the level (or opened the Egg Prison), the timer will stop, and it may record your time. It depends if you were faster. I do know there is a Sonic 1 version of this done by Cinossu (which is a lot more advanced), but from my knowledge, no one has done a Sonic 2 version, so here I go.


    If it's your first time playing, then all levels/acts will have a Best Time of 9'59"99. So, on your first go on each level/act, no matter what you get, it will record it. You can then try to beat your new time, or move on. When you're on a level, the HUD will always display your Best Time, your current time, and the number of rings. If you beat your Best Time, it will record your newer time. If you do not beat it, it will not record it; simple.


    When starting the game, there are 3 options; Stage select (level select), Your Times menu, and Options. All these are accessible at any time during menus. The "Your Times" menu is where you can view all your best times between two pages (couldn't make them all fit to one page without it looking decently clear).


    Features
    • A new HUD that displays your Best Time, your current time, and number of rings.
    • A 10 second warning. When playing a level, if you're 10 seconds away from reaching your best time, a "ding-ding" will play every second until you either finish the level and beat that time, or go over the Best time (or die, or pause, whatever).
    • A fail sound, for if you failed to beat your best time. It will play as soon as the timer reaches/passes your best time.
    • A new "End of Level" results screen. It will play a "fail" sound if you failed to beat your Best Time. If you beat your Best time, it will record your new time and play a "whirl" sound to notify you of the change. (If you're lucky enough to get the exact same time as your best time, it will still play the "fail" sound)
    • Sonic with Tails as a sidekick as only character selection. Otherwise, I'll have too many times to record and too much space on SRAM.
    • The 10 Second Penalty. Because people could invite a friend to control Tails as a sidekick and help get a faster time in varies of ways, a 10 second penalty will apply if any button is pressed on Controller 2. A siren sound will play to warn you of your mistake (unless the jump button was pressed as that SFX has more priority, but the penalty will still apply). You can then keep control of Tails and the penalty won't apply another 10 seconds. Once the CPU has control of Tails again, the 10 second penalty can happen again, so don't press anything on controller 2 unless you want that penalty again.
    • Check-point mode; on or off. If off, there are no check-points. If you die in a level, the game will go back to level select screen. If on, there are check-points. If you die, you will restart from the last check-point you touched. Although, the timer will resume from when you died, and not from when you hit the check-point.
    • Super Sonic mode; on or off. If off, Sonic can never turn Super. If on, once you've collected 50 rings and jump, Sonic will turn Super. There are two separate time recordings for both modes; "Normal Sonic Times" and "Super Sonic Times".
    • Kill Me mode; on or off. If off, during gameplay, if you fail to beat your best time, you will hear the fail sound, but can continue to play the act. If on, during gameplay, if you fail to beat your time, you will hear the fail sound but will die instantly.
    • Mode Show. When you start a level/act, in the bottom right corner, it will briefly display what modes you have enabled. It will display if you have Check-points, Super Sonic, or Kill me on or off. It will then brush away to the right hand side.
    • Extra-lives have gone. There's no HUD for it, and no way of getting extra lives. The 1-up monitor has been replaced with blank monitors (as I didn't want to interrupt too much with gameplay by removing them). Extra-lives are pointless in this game. If you have Check-point mode off, you only have one life. If you have it on, you have unlimited lives.
    • Score has gone. Because this game is about getting a fast time, I took the Score HUD away. I need more HUD room for the centi-seconds (and for the World Record Time; which is not present in this build). The points art that comes out of badniks and bumpers have been removed.
    • SCZ and Special Stages removed. As you can't go faster than they already go, these were pointless (everyone's times would be the same practically).
    • WFZ and DEZ's ending slightly edited. So the "End of Level" results screen would still make an appearance.
    • DEZ is not playable with Super Sonic Mode on. Simply because, there are no rings.
    • Speed cap has NOT been removed. So the game plays more like the original Sonic 2.
    • Multiple bug fixes, which includes way to stop people cheating.
    • Centi-seconds added, which also hit every digit.
    • Exit out of level function. When playing a level, to get out, pause the game, then press A. The game will then exit the level and back to Stage Select.
    • Options menu changed. To add the new options; Check-Point Mode, Super Sonic Mode, and Kill Me Mode. They're all set to “off” at first. The changes you make here are saved to the SRAM, so when you next start the game, your options will be set to when you left them.
    • Level Select slightly edited. It will also tell you if you're in Normal Sonic Mode or Super Sonic Mode. Please note, in Super Sonic Mode, you cannot access DEZ.
    • Your Times Menu. A menu to display all your best times; Normal Sonic Times, Super Sonic Times and World Record Times (not accessible in this build).
    • Strike System added. Multiple checks every frame to see if you're cheating or not. If it suspects you've cheated, the game will lock-up and the "Game Over" jingle will play.
    • Save-State Denial System added. At any point, you can make a save-state. But, if you make a save-state in the middle of the level, you will NOT be able to load it. If you do, the game will instantly lock-up and the "Game Over" jingle will play. You can however make save-states in level select, etc, and still load them. However, if you do, when entering the level, the "Best Time" art may appear glitched, and it is never beatable. If this occurs, just reset the game.
    • S3K Priority Manager added, to speed the game up a little, due to the Strike System slowing the game a little.
    • Other speed ups and optimisations here and there.
    • SRAM protector. At the beginning of the game (before the SEGA), it checks the SRAM to see if you've edited it in any way. If not, the game starts. But if you have, you'll be presented with a red screen and the game just sitting there. At this point, with NO warning, all your times and save data will be erased. Reset the game, and the game will start up with all times back to 9'59"99. So do not try to edit your times in the SRAM file; THIS IS YOUR ONLY WARNING!
    • Lots of RAM addresses have been moved about and jumbled. To make hacking/cheating the game harder to pull off.
    • Lots of ROM data have been moved about and jumbled. To make hacking/cheating the game harder to pull off.
    • Delete Saved Data and Times option. To get to this, on the Title screen, highlight options, then hold A+B+C and press Start. You'll come to a screen, and it will ask you to confirm if you want to delete everything. If not, select no and press start, and it will go back to the Title screen. Otherwise, select yes. A picture of Dr. Eggman will appear and the "Game Over" jingle will play to signal all your data has gone and the game will lock-up. You then must reset the game to continue on. For security, if you come to this screen, "No" is already highlighted.
    • Replay data. Whatever level you play, it will always record your input (except controller 2). To play the replay, highlight the level and act you just played, Hold A+B+C and press start. It will play your replay (if you try playing the replay on another level, you will hear the fail sound). To exit replays, just press start. This is a WIP. The replays never start perfectly in-sync and therefor, things can go wrong.
    • World Record Times. These will show all the times from everyone. The idea is when you've made a best time, you submit it online. World Record times holds all the best for each level. Please be aware that this is not accessbile in this build.





    World Record time (future plan)

    In the future, the idea of this project is to share your best times to the world by sharing your records online. It is unknown as yet if the online times will be held on the "Retro Channel" or on a separate online database.

    The idea is that hopefully, this database will extract all your times from the SRAM, and then submit it to an online database, to see where you stand. This program will also "hopefully" extract the best time from each level/act and save it to your SRAM. Not as your time, but as the "World Record Time". Then in a future build, from the game, you can see the best times in the world by going to "Your Times" menu and picking "World Record Times".


    Three reasons why "World Record Times" isn't in this build:

    • It's still unknown if it'll be hosted on the Sonic Retro channel or on a separate database.
    • If "Retro Channel" is selected, then that needs to be completed
    • I wanted to get this game ready for Sonic 2's 20th birthday so ran out of time finishing this.




    Replays

    Recording your own replays in this game is easy; it's automatic. Play a level, and finish the level, and when you return to the level select, your replay data has been recorded. Hold A, B and C and press start on the level/act you just played, and it will replay it for you. The best thing about it is, you can save these replays and play it again later on! Replay data is held between RAM address $FFFFF100 - $FFFFF5FF. Once you've done a level and back to level select, rip the data between this RAM address and save it. That way, later on, you can re-insert this data back into $FFFFF100 and watch your replay again. Best of all, you can share your replay with everyone else!

    THIS IS A WORK-IN-PROGRESS, so please be aware of:

    • The replays are never in sync. This is the main bug. If you move straight away when recording, then replays are generally 1 frame behind (best I could get it). If you start recording late (don't move as soon as the title card moves out), replays can generally start early. This is the best I could get it. It's either this, or always have replays start late. Because it's never in-sync, replays can go wrong (generally when using platforms).
    • When you play replays, it will NEVER save your time. So don't think you can send a very fast replay to someone else giving them a fast time. They can watch it, but it will not record.
    • Be aware of CNZ prize slots and CPZ tubes, etc. These are random all the time. You could record a replay of going one way in the tube, but the replay shows you going another way, making the replay more than likely fail and out-of-sync.
    • Please be aware, if you enter the "Your times menu", your replay data held in $F100 will be gone; as "Your Times menu" uses this space also.
    • Entering options will also erase replay data.
    • To exit replays, press start.
    • Replays will only be recorded if you finish the level.
    • If you commit the 10 second penalty by pressing something on controller 2, you cannot create a replay
    • Replays will not be created if Check-point mode is on (unless you did not die).
    • For replay file, click here. Whilst you're on Stage select (make sure your in normal Sonic mode), load the data into $FFFFF100 and highlight EHZ1, hold A, B and C and press start. Watch my replay! With a time of 0'21"81



    If you try to cheat

    If you try to cheat, the game will lock-up and the "Game Over" jingle will play. But if the game locks-up and you believe you haven't done anything that you consider as "cheating" then please, take a screenshot and fill this little form in:

    RAM address $FFFFFEDC ($XXXX word-length) =
    Check-point mode (on/off) =
    Level and Act number (XXZ1/XXZ2) = 
    



    Just submit your screenshot and form in this thread.

    If you're SRAM gets deleted (red screen) and you are 100% you did not tamper with the SRAM file, let me know immediately! This hasn't happened yet, but thought I'd mention, just in case.





    Emulators to use

    Kega is the best to use for this game. Regen is also good but it has the SRAM bug (with the emulator itself, not the game). I haven't tried any other emulator.




    DOWNLOAD

    The game was last updated on 25th November 2012.


    Anyway, here is the ROM (compressed to ZIP or RAR, your choice).

    For ZIP file, click here
    For RAR file, click here
    For BIN file, click here


    Fixed bugs in recent download:

    25th November 2012
    • You could still do replays if you committed the 10-second penalty with Tails. It will now never record the replay if you commit the penalty.
    • Super Sonic art glitch fixed
    • When check-point mode was on, if you entered CNZ1/2, it would turn Check-point mode off, due to the CNZ slots. This has now been fixed.



    30th November 2012
    • There was a bug. With checkpoint mode on, if you hit a checkpoint then die, the game would lock up. Fixed.
    • It is now possible to soft-reset the game, so that way, you won't think you've "broken" the ROM. A Hard-reset is still preferable.
    • The door in CPZ2 is now fixed. It will no longer open for Tails (unless you have control of him). This means you can't cheat at the beginning of CPZ2.
    • The platform-through-lava glitch in MTZ and HTZ has now been fixed.
    • You can now collect your fallen rings when in the lava in MTZ and HTZ.
    • A change to recording replays with Check-point mode. If you die in checkpoint mode after hitting a check-point, replays will not record. If you don't die with checkpoint mode, it will. You must still finish the level though.
    • Savestate denial system slightly edited.
    • A few code changes here and there



    Here is a video teaser I released a while ago and here are some screenshots, just in case you like to see before you try:

    Posted Image

    Posted Image

    ...which changes to...

    Posted Image

    Posted Image


    Now play the game and post your best times here (and screenshots) and compete with fellow members! Enjoy!




    Thanks

    Thanks to ValleyBell for testing the game and finding bugs. Also for helping me out with the SRAM protector.

    Thanks to SpirituInsanum for testing the game and finding bugs.

    To anyone who contributed to the SCHG on Sonic Retro or created any other bug-fixing guides anywhere; so I could fix the bugs in this game.

    And finally, everyone else, for playing and enjoying the game.