Language…
15 users online: anonimzwx, Astrakitu, Batata Douce,  BeeKaay, DasFueller, Foxy_9000_, Fozymandias, Housemeister, Ice Man, MorrieTheMagpie, OrangeRock57, ppp9q, schema_tuna, sinseiga, Tsquare07 - Guests: 249 - Bots: 319
Users: 64,795 (2,376 active)
Latest user: mathew

FuSoYa's SMB3 Screen Scrolling Pipes

SMW Patches → FuSoYa's SMB3 Screen Scrolling Pipes

Submission Details

Screenshots

Comments (32)

AmCleos22 Link
Well, I'd like to put the patch like in SMB3 and it's remakes.
Xboy1282 Link
How do you install it it says you need pipes.bin but I don't even have pipes.bin in the folder so I went to the new readme to see if anything changed but it didn't say anything about pipes.bin. Sorry if this is a dumb question
Albert1234 Link
How is this inserted?
Ice Man Link
After inserting blocks with GPS, change the main.asm found in the same folder to:
Code
macro offset(id, addr)          ; > Hijack LM map16 code to run custom blocks. 
    org <addr>
        PHB : PHX
        REP #$30
        LDA.w <id>*3+1
        autoclean JSL block_execute
        ;PLX : PLB
        ;JMP $F602        ;FuSoYa's Pipe Fix (aka no overwriting hijack)
endmacro

This prevents the last 5 bytes of the hijack to be changed which are normally used by the pipes.
Wolfguy423 Link
i have no idea how to use this. i need a super dumbed down walk-through!
Hero of time Link
Hello. First, sorry for the bad english, i'm using google translator to write ..
but well, my problem is that after the mario comes out of the pipe, the mario is invisible, the interaction with the items no longer exists, that is: the game FULLY FREEZES,
the only thing that doesn't freeze is the camera, since you can still control the mario.
I appreciate any help.#smw{^_^}
Ramenoodles Link
Originally posted by Damaga109
Hello! if anyone is available, do you know how to fix a glitch where Mario stands still after he enters the pipe? everything else freezes too. The only thing that doesn't freeze is the game.#smw{:peace:}

First of all, I recommend GHB's screen scrolling pipes even though they are a pain to insert, but your problem is that you didn't put corresponding air/water tile after the pipe exit. If you look in the map 16 editor, at the exit of whatever pipe you chose to put in, there is a water and an air tile. Place the corresponding tile at the exit of the pipe, and it should work.
Damaga109 Link
Hello! if anyone is available, do you know how to fix a glitch where Mario stands still after he enters the pipe? everything else freezes too. The only thing that doesn't freeze is the game.#smw{:peace:}
RubberHoseRitzy Link
Originally posted by TheSkillMythos
Whenever Mario enters the pipes, he turns invisible to give the effect of him going through the pipe. For some reason, whenever I use the vertical pipes, he doesn't become visible until he dies...


Same happens to me.
HammerBrother Author Link
Originally posted by Shiny Ninetales
A little clarification for people using this and GPS: pipes won't work if you insert more blocks with GPS after patching. You need to re-patch to make them work again (or insert all your blocks before patching). More details here.


Explanation: This pipe patch modifies GPS's code in the ROM. If you (re-)insert GPS after the pipe patch, it will revert the changes done by the pipe patch.

Proof:


 Ayami Link
A little clarification for people using this and GPS: pipes won't work if you insert more blocks with GPS after patching. You need to re-patch to make them work again (or insert all your blocks before patching). More details here.
TheSkillMythos Link
Whenever Mario enters the pipes, he turns invisible to give the effect of him going through the pipe. For some reason, whenever I use the vertical pipes, he doesn't become visible until he dies...
HammerBrother Author Link
Originally posted by izaguirrefermin28
Originally posted by GreenHammerBro
Uh, you don't insert this as blocks, but rather as a patch.


Can you help me like tutorial so I wont get confused #smw{:peace:}


Insert any other block into your game using GPS (other than page 4), this will modify the code that LM inserts to deal with custom blocks. Then try inserting the FuSoYa pipes (this runs like a patch, so patch pipes.asm), be careful that if you wanted the pipes to be at other than page 4, you have to edit the “mirrored” pipes to act like the equivalent blocks (they're set to behave at $4XX from the .map16 file).
El Cuh Fermin Link
Originally posted by GreenHammerBro
Uh, you don't insert this as blocks, but rather as a patch.


Can you help me like tutorial so I wont get confused #smw{:peace:}
HammerBrother Author Link
Uh, you don't insert this as blocks, but rather as a patch.
El Cuh Fermin Link
It does not work because it says:

Code
ERROR: block 400 (file: defs.asm) lacks a db $42 or db $37 header.

HammerBrother Author Link
Would be nice if the map16 files can be edited with a text editor instead of hex (or someone could make a tool that import/export and convert the .map16 data), especially with notepad++ with its column editing mode. Something similar to GPS's list file:

Code
;BlockNumberToChangeBehavior:BehavorToSetTo
400:130
401:400
402:40F

And we can just replace the leftmost digit with any number to adjust the page.
 Blind Devil Link
(ninji'd)

Well yeah I retested it, and the problem was on Map16 acts-like settings. Whenever we remap pipes, we need to update their acts-like settings accordingly as well.
 Ayami Link
Oh right, I got it.
It's still a tricky thing though, especially since the defines implies just changing the value would make it work.
HammerBrother Author Link
@Shiny Ninetales
All the “mirrored” pipes have their map16 behavior set to $4XX from the .map16 file, including turn corners other than the top-left of the 2x2 group of blocks. Thus, when set to a different page, the map16 file still uses the behavior of page 4.
 Ayami Link
In my end, this works fine but JUST IN PAGE 4, if I move them elsewhere (of couse, editing the !Map16Page define before patching, and then remapping the pipes in the sample level) some pipes doesn't work at all, particularly the ones that doesn't change Mario's position, which makes him to death:

Not sure if a bug or I'm doing something wrong.
 Blind Devil Link
Tested with Asar v1.71, SNES9x v1.58, in both normal and SA-1 ROMs.

I've taken the liberty to change the free RAM area which by default was using part of the stack, and this caused a few oddities such as $9D being always set in instances it shouldn't, like during the title screen movie. I've also removed a faulty 'endif' command within the 'hijackoffset' macro, which was throwing errors in Asar and making insertion fail. Aside from that, everything works properly despite pipe blocks themselves being tricky to use sometimes. Accepted.
Klug Link
Now you can finally fix broken pipes in old hacks with this one.
HammerBrother Author Link
Originally posted by yygdrasil
he background breaks with this!
how to fix it


It may sound like it is using SMB3.asm that the old blocktool by jhonwilson, that uses RAM that is the background. Remember, this is a very old tool equivalent to the augean stables but with minor fixes.
 Erik Author Link
Originally posted by yygdrasil
he background breaks with this!
how to fix it

try changing the free ram
yygdrasil Link
he background breaks with this!
how to fix it
HammerBrother Author Link
Just to note, make sure you install GPS before you install this patch, or your game will crash before the title screen loads. Another thing to note is make sure you change the freeram to another address, they are, by default using these RAM address, which are part of the level map16 table:

Code
if !sa1
        !Status1        = $41FFE6
        !Image          = $41FFE8       ;#$0042 makes him disappear and #$0043 is a peace sign
        !Travel         = $41FFEA       ;#$01 means vertical and #$00 means horizontal
        !Vertical       = $41FFEC       ;#$01 goes up and #$00 goes down
        !Horizontal     = $41FFEE       ;#$01 goes right and #$00 goes left
        !PowerupHold    = $41FFF0       ;A holder of Mario's current powerup
        !Status         = $41FFF2       ;#$0042 if Mario is in a pipe and #$0000 if he isn't
        !MarioXPos      = $41FFF4       ;Mario's X position in a pipe
        !MarioYPos      = $41FFF6       ;Mario's Y position in a pipe

else
        !Status1        = $7FFFE6
        !Image          = $7FFFE8       ;#$0042 makes him disappear and #$0043 is a peace sign
        !Travel         = $7FFFEA       ;#$01 means vertical and #$00 means horizontal
        !Vertical       = $7FFFEC       ;#$01 goes up and #$00 goes down
        !Horizontal     = $7FFFEE       ;#$01 goes right and #$00 goes left
        !PowerupHold    = $7FFFF0       ;A holder of Mario's current powerup
        !Status         = $7FFFF2       ;#$0042 if Mario is in a pipe and #$0000 if he isn't
        !MarioXPos      = $7FFFF4       ;Mario's X position in a pipe
        !MarioYPos      = $7FFFF6       ;Mario's Y position in a pipe
endif

As a side note, each of them are 2 bytes large except !PowerupHold (1 byte).
HammerBrother Author Link
Just note that currently, no bugs have been fixed since the last time fusoya and me fixed on the older. So this is merely a port to the newer tools.


If you are making a hack and you don't want the player to cheat the level, be aware of these glitches:
  • You can glitch the vertical small pipe's top by attempting to enter it while falling down-rightwards and slipping off the top right corner. It's important to note that enterable small pipe top caps don't have a corner offset, so it's actually the above offset, just on the far right edge as possible that would still trigger that offset. So put a wall or extend the exit tile 1-block to the right to prevent this exploit.
  • Hitting the bottom of any horizontal pipe caps (normal and small) will teleport you to the last exited pipe cap. Make sure you make it impossible for the player to do that
  • Horizontal pipe caps can be entered when the player is in the air (most of the time depending on his vertical speed).
  • When small horizontal pipe caps are placed on solid ground, they can play the pipe sound more than once per passing through them.
  • You can “nudge partial-enter” leftward-facing horizontal pipe caps, then get ejected to where the player is entering by standing in front of them and tap rightwards (1 or 2 frames though). Not a major glitch, but is weird. I assume what happens is that when you hold right, the block behaves $025, but does not immediately forces you in a pipe state until the player is further embedded into the block (partial enter and forcing pipe state are separate and not in one execution frame). It's better to just not only render the block $025, it should also set the pipe state together within 1 frame so the player guarantees that even a small nudge is a 100% enter.
  • If your pipe travel ends with going left, then up or down, then exit, you come out of the pipe, pushed slightly leftwards and off-center. Anytime the player goes leftwards then vertical, the vertical travel part is always off-centered.
  • Mario interacts with any blocks placed below the horizontal pipes, for example, the muncher can kill the player inside the pipe.
  • To enter small vertical pipe caps, the range of X positions that is allowed is too narrow and off-centered: To enter the top or bottom of the pipe, the player's X position relative to the cap (MarioRelativeXPos = MarioXPos - PipeCapXPos) must be inclusively -1 to +6. Relative X position 0 means being exactly centered. Therefore, the entire range to enter the pipe is “skewed” towards the right by about a half-block.
  • After exiting the top of a vertical small pipe, the player is 1 pixel to the left from being perfectly centered; the player slightly gets clipped from the top cap which caused this.
yygdrasil Link
great!
Darolac Link
It's great to finally have some easier-to-insert screen scrolling pipes compatible with the newest tools.
 Erik Author Link
the mad lad.
Not a remoderation since it had been removed. Integrated Deflaktor's fix for the translucent block, SA-1 compatibility, and GPS support without needing to modify GPS itself.