Brandon
He/Him
Editor, Player (190)
Joined: 11/21/2010
Posts: 913
Location: Tennessee
HappyLee wrote:
Brandon wrote:
Does anyone know in detail how to manipulate the flying Cheep-Cheeps? I want to use one of them to avoid an additional jump during 2-3 in my Warpless MP TAS.
Looks like I'm probably the only one who can offer some help now. Memory watching won't help you manipulate Cheep-cheeps, at least in my opinion, so it seems that you're on your own.
I just don't understand. You don't know what variables came into play when it came to manipulating your Cheep-cheeps? Is it input based? Timing based? Any ideas you can give me would help...I'd just like to know how you managed to do this in your own run, that's all.
All the best, Brandon Evans
Expert player (2453)
Joined: 12/23/2007
Posts: 822
Brandon wrote:
I just don't understand. You don't know what variables came into play when it came to manipulating your Cheep-cheeps? Is it input based? Timing based? Any ideas you can give me would help...I'd just like to know how you managed to do this in your own run, that's all.
If you put it that way, I have to say again that I have no idea how exactly Cheep-cheeps work. It's a very complicated problem and I hardly have any solution. It seems to me that keeping trying and trying is the only way to solve it out. In your case, just try to change both the combination of killing and the speed when manipulating Cheep-cheeps lots of times, and you may get the right fish. But I still don't think it can save any press, and I still strongly recommend you to give up the idea of doing Cheep-cheep glitch. Whether you'll take it, it's all up to you.
Recent projects: SMB warpless TAS (2018), SMB warpless walkathon (2019), SMB something never done before (2019), Extra Mario Bros. (best ending) (2020).
AnS
Emulator Coder, Experienced player (723)
Joined: 2/23/2006
Posts: 682
HappyLee, don't be so pessimistic, it's just luck manipulation! Common thing for TASes (well, not very common for SMB because of the nature of the game, but here you finally stumbled upon it). CheepCheeps are created periodically (using FrenzyEnemyTimer), as well as some BulletBills in 5-3 and later. Their properties are set using global RNG (Linear feedback shift register of 7 bytes: 0x7A7-0x7AD). The RNG changes once per frame (even when the gameplay is paused), so it's simple Frame-based RNG. It means you can get different outcome by waiting different amound of frames. However, with periodic enemies is SMB things get hard to control, because FrenzyEnemyTimer (0x78F) is initialized near the beginning of level (where the first CheepCheep appears) and the only way to manipulate the timer (and thus change the sequence of new CheepCheeps apearance) is to wait some frames at the beginning of the level. As for manipulating properties of new CheepCheeps, there are few dependencies on player's current speed and horizontal position, as you can see in the game code.
InitFlyingCheepCheep:
         lda FrenzyEnemyTimer       ;if timer here not expired yet, branch to leave
         bne ChpChpEx
         jsr SmallBBox              ;jump to set bounding box size $09 and init other values
         lda PseudoRandomBitReg+1,x
         and #%00000011             ;set pseudorandom offset here
         tay
         lda FlyCCTimerData,y       ;load timer with pseudorandom offset
         sta FrenzyEnemyTimer
         ldy #$03                   ;load Y with default value
         lda SecondaryHardMode
         beq MaxCC                  ;if secondary hard mode flag not set, do not increment Y
         iny                        ;otherwise, increment Y to allow as many as four onscreen
MaxCC:   sty $00                    ;store whatever pseudorandom bits are in Y
         cpx $00                    ;compare enemy object buffer offset with Y
         bcs ChpChpEx               ;if X => Y, branch to leave
         lda PseudoRandomBitReg,x
         and #%00000011             ;get last two bits of LSFR, first part
         sta $00                    ;and store in two places
         sta $01
         lda #$fb                   ;set vertical speed for cheep-cheep
         sta Enemy_Y_Speed,x
         lda #$00                   ;load default value
         ldy Player_X_Speed         ;check player's horizontal speed
         beq GSeed                  ;if player not moving left or right, skip this part
         lda #$04
         cpy #$19                   ;if moving to the right but not very quickly,
         bcc GSeed                  ;do not change A
         asl                        ;otherwise, multiply A by 2
GSeed:   pha                        ;save to stack
         clc
         adc $00                    ;add to last two bits of LSFR we saved earlier
         sta $00                    ;save it there
         lda PseudoRandomBitReg+1,x
         and #%00000011             ;if neither of the last two bits of second LSFR set,
         beq RSeed                  ;skip this part and save contents of $00
         lda PseudoRandomBitReg+2,x
         and #%00001111             ;otherwise overwrite with lower nybble of
         sta $00                    ;third LSFR part
RSeed:   pla                        ;get value from stack we saved earlier
         clc
         adc $01                    ;add to last two bits of LSFR we saved in other place
         tay                        ;use as pseudorandom offset here
         lda FlyCCXSpeedData,y      ;get horizontal speed using pseudorandom offset
         sta Enemy_X_Speed,x
         lda #$01                   ;set to move towards the right
         sta Enemy_MovingDir,x
         lda Player_X_Speed         ;if player moving left or right, branch ahead of this part
         bne D2XPos1
         ldy $00                    ;get first LSFR or third LSFR lower nybble
         tya                        ;and check for d1 set
         and #%00000010
         beq D2XPos1                ;if d1 not set, branch
         lda Enemy_X_Speed,x
         eor #$ff                   ;if d1 set, change horizontal speed
         clc                        ;into two's compliment, thus moving in the opposite
         adc #$01                   ;direction
         sta Enemy_X_Speed,x
         inc Enemy_MovingDir,x      ;increment to move towards the left
D2XPos1: tya                        ;get first LSFR or third LSFR lower nybble again
         and #%00000010
         beq D2XPos2                ;check for d1 set again, branch again if not set
         lda Player_X_Position      ;get player's horizontal position
         clc
         adc FlyCCXPositionData,y   ;if d1 set, add value obtained from pseudorandom offset
         sta Enemy_X_Position,x     ;and save as enemy's horizontal position
         lda Player_PageLoc         ;get player's page location
         adc #$00                   ;add carry and jump past this part
         jmp FinCCSt
D2XPos2: lda Player_X_Position      ;get player's horizontal position
         sec
         sbc FlyCCXPositionData,y   ;if d1 not set, subtract value obtained from pseudorandom
         sta Enemy_X_Position,x     ;offset and save as enemy's horizontal position
         lda Player_PageLoc         ;get player's page location
         sbc #$00                   ;subtract borrow
FinCCSt: sta Enemy_PageLoc,x        ;save as enemy's page location
         lda #$01
         sta Enemy_Flag,x           ;set enemy's buffer flag
         sta Enemy_Y_HighPos,x      ;set enemy's high vertical byte
         lda #$f8
         sta Enemy_Y_Position,x     ;put enemy below the screen, and we are done
         rts
Unfortunately, the speed and horizontal position affect CheepCheep properties much less than predetermined RNG affects them, so manipulating CheepCheeps is more about waiting at the beginning of level, and (to lesser extent) about slowing down during the level run. Oh, and shooting CheepCheeps or keeping them alive can change the sequence sometimes, because there can be only 3 CheepCheeps on screen (or 4 in Hard mode), so when FrenzyEnemyTimer is about to create new CheepCheep, you can prevent it from doing so by having 3 CheepCheeps still on screen. This way you postpone CheepCheep creation to next time when FrenzyEnemyTimer gets ready, and at that time RNG will have different values, so properties of new CheepCheep will be different from what it would be with current RNG.
YoungJ1997lol
He/Him
Player (53)
Joined: 7/4/2011
Posts: 550
Location: U.S.A.
AnS wrote:
HappyLee, don't be so pessimistic, it's just luck manipulation!
yeah, HappyLee, pessimism is not the answer
So yea, how's it going? Currently TASing: Nothing
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11270
Location: RU
I've seen a video soewhere showing impressive SMB lag glitches, the name was in Japanese and it was on youtube. Can anyone post a link?
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Expert player (2453)
Joined: 12/23/2007
Posts: 822
feos wrote:
I've seen a video soewhere showing impressive SMB lag glitches, the name was in Japanese and it was on youtube. Can anyone post a link?
Sorry, could you describe more detailedly about what kind of lag is that? I'm interested in all kinds of glitches in SMB.
Recent projects: SMB warpless TAS (2018), SMB warpless walkathon (2019), SMB something never done before (2019), Extra Mario Bros. (best ending) (2020).
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11270
Location: RU
It has something to do with many objects on the screen. I think it took place in the dungeon level. Probably Mario waits for more enemies to gather on the screen and does some action that glitches the game due to lag, bumping a coin block or something. There were 2 videos of that IIRC.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11270
Location: RU
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
YoungJ1997lol
He/Him
Player (53)
Joined: 7/4/2011
Posts: 550
Location: U.S.A.
feos wrote:
I found it! http://www.youtube.com/watch?v=KZjNy8lV2RA Thread #12200: FCEUX SMB lag
holy crap....it's like mario took a dump
So yea, how's it going? Currently TASing: Nothing
Joined: 9/21/2011
Posts: 49
Location: San Antonio, TX
feos wrote:
I found it! http://www.youtube.com/watch?v=KZjNy8lV2RA Thread #12200: FCEUX SMB lag
Neat! This particular video appears to be from the FDS version.
--Graywords
Joined: 7/11/2010
Posts: 98
There's a few glitches I've always wondered why they happen... Could someone give an explanation for them? (I'm okay if it gets a bit technical) They are: 1. The spider (silk) thread glitch. I know it has something to do with the lifts (the lines are lift lines), but I'm still wondering why they get made, and why the bullet bills freeze in midair/don't get killed. Also, if we knew what causes it, we could see if we could do it somewhere else... 2. The glitch that turns some bad guys at the left of the screen into koopas. 3. The sliding on one foot glitch. If you don't know what causes them, don't worry about it. But I would like to learn what causes them...
Expert player (2453)
Joined: 12/23/2007
Posts: 822
Sorry for my English, I can only offer some short answers, not too technical. 1. It's because the bullet bill has got the property of one of the lifts. 2. I've only seen enemies turning into Koopa shells (dead), and spinies turned into Koopas. It's probably a property error I guess. 3. I don't really know what causes that, but the situation can be kept if Mario keeps jumping and jumping. I think mostly it's a simple graphic error.
Recent projects: SMB warpless TAS (2018), SMB warpless walkathon (2019), SMB something never done before (2019), Extra Mario Bros. (best ending) (2020).
YoungJ1997lol
He/Him
Player (53)
Joined: 7/4/2011
Posts: 550
Location: U.S.A.
HappyLee wrote:
3. I don't really know what causes that, but the situation can be kept if Mario keeps jumping and jumping. I think mostly it's a simple graphic error.
When he said sliding on one foot, didn't he mean that fire Mario hold down A until he jumps and then he jousts glides on one foot?
So yea, how's it going? Currently TASing: Nothing
Joined: 7/11/2010
Posts: 98
I was talking about the one where if you are fire mario and hold A and B at the start of a level/transition, you'll slide on one foot for a while. 1. So why does it only work in 6-3 and only sometimes? 2. So what exactly is the property error? 3. What causes it? (HappyLee, I'm not saying your answers weren't good in any way. They helped out. You don't need to answer these if you don't know the answer.)
Expert player (2453)
Joined: 12/23/2007
Posts: 822
It could happen anywhere where there are lifts and a enemy (not just bullet bills). "Sometimes" means that one of the lifts are off the screen and the enemy takes its place. It's not just "happened" to be like that. In order to answer both 2 and 3, I think memory researching is probably necessary.
Recent projects: SMB warpless TAS (2018), SMB warpless walkathon (2019), SMB something never done before (2019), Extra Mario Bros. (best ending) (2020).
Joined: 7/11/2010
Posts: 98
I didn't know it could happen anywhere! And also, I'm not a good memory searcher, so that's why I'm asking here...
YoungJ1997lol
He/Him
Player (53)
Joined: 7/4/2011
Posts: 550
Location: U.S.A.
sudgy wrote:
I was talking about the one where if you are fire mario and hold A and B at the start of a level/transition, you'll slide on one foot for a while
that's what i meant.
So yea, how's it going? Currently TASing: Nothing
Post subject: Glitchfest Idea
Player (56)
Joined: 10/16/2012
Posts: 233
Location: Milwaukee, WI
How about I make a movie showing every glitch/oddity we all know in this game? (Oh, and by the way, I know nothing of the "passing through blocks" glitches, and I never have done it in TAS because I never knew the technical details! Do you think you could show me a graph or table with combinations of values for my reference, or at least explain the relations between the values involved in a way I can understand? It's the only way!)
If I could have a tool-assisted real life, I'd... Being a novice, I'd probably load the wrong state, have the IRS AI bankrupt me, and eventually make me want to kill myself and redo 11 years of hard work.
Post subject: Re: Glitchfest Idea
YoungJ1997lol
He/Him
Player (53)
Joined: 7/4/2011
Posts: 550
Location: U.S.A.
JWinslow23 wrote:
How about I make a movie showing every glitch/oddity we all know in this game? (Oh, and by the way, I know nothing of the "passing through blocks" glitches, and I never have done it in TAS because I never knew the technical details! Do you think you could show me a graph or table with combinations of values for my reference, or at least explain the relations between the values involved in a way I can understand? It's the only way!)
Could be interesting. About the passing through blocks thing, look at the SMB resource page. It'll give you good examples. And do you know the flagpole glitch?
So yea, how's it going? Currently TASing: Nothing
Post subject: Re: Glitchfest Idea
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
JWinslow23 wrote:
How about I make a movie showing every glitch/oddity we all know in this game? (Oh, and by the way, I know nothing of the "passing through blocks" glitches, and I never have done it in TAS because I never knew the technical details! Do you think you could show me a graph or table with combinations of values for my reference, or at least explain the relations between the values involved in a way I can understand? It's the only way!)
You haven't even made a single accepted TAS and you're thinking of another playaround? :/
Active player (456)
Joined: 11/12/2010
Posts: 183
Location: Sweden
Nothing wrong with trying out several games to see which one feels worthwile to TAS.
"An artist who can’t take constructive critique on their work is only hurting themselves and their potential. Conversely, and artist that can’t communicate a critique in a constructive way isn’t helping anybody."
Player (124)
Joined: 3/23/2012
Posts: 296
Location: In X position=50 y position=20
This guy will never pull off any smb glitches
Jungon wrote:
if I was to have a Tool-Assisted real life ... I'd.. I could abuse death, just to see if it saves time ..
Player (56)
Joined: 10/16/2012
Posts: 233
Location: Milwaukee, WI
Ok, YoungJ1997lol, to answer your question, let's just review what you wrote:
Could be interesting. About the passing through blocks thing, look at the SMB resource page. It'll give you good examples. And do you know the flagpole glitch?
First of all, I know about the page and the examples, but I don't think I will be able to do the wall-passing-through tricks when there is no ceiling involved. That's what I meant when
I just recently wrote:
I know nothing of the "passing through blocks" glitches, and I never have done it in TAS because I never knew the technical details!
For some reason, I need to have what I said I may need in my last post. Second of all, I know the flagpole glitch (the one consisting of glitching through the flagpole, then jumping, somehow making the flag not come down, therefore saving time)! Just not how to do it. *facepalm* And Tseralit, I totally agree. Edit: Marx, what are you saying? The only glitch that I know of that I do NOT know how to do is the "going through blocks without ceilings" glitches and applications for speed. I even know a "springboard of death" glitch, a "spider thread" glitch, and much more! So don't say that I'll never pull off any SMB glitches!
If I could have a tool-assisted real life, I'd... Being a novice, I'd probably load the wrong state, have the IRS AI bankrupt me, and eventually make me want to kill myself and redo 11 years of hard work.
Player (124)
Joined: 3/23/2012
Posts: 296
Location: In X position=50 y position=20
SMB glitch are hard to pull off. Ask happylee If you wanna know
Jungon wrote:
if I was to have a Tool-Assisted real life ... I'd.. I could abuse death, just to see if it saves time ..
Player (56)
Joined: 10/16/2012
Posts: 233
Location: Milwaukee, WI
Marx wrote:
SMB glitch are hard to pull off. Ask happylee If you wanna know
And where would I do that, exactly?
If I could have a tool-assisted real life, I'd... Being a novice, I'd probably load the wrong state, have the IRS AI bankrupt me, and eventually make me want to kill myself and redo 11 years of hard work.