Editor, Experienced Forum User, Published Author, Player
(158)
Joined: 1/10/2012
Posts: 673
Location: Brazil
It comes from linear algebra (linear independence) and the way we usually model the axis in analytic geometry (90°, but could be a different value). Even so, I would ask you to display a 4th vector that is not a combination of the 3D base.
EDIT: it's an open question why the real world is like this. I only argue that this is a real fact, not some arbitary mathematical construct.
https://en.wikipedia.org/wiki/List_of_unsolved_problems_in_physics
Editor, Experienced Forum User, Published Author, Player
(158)
Joined: 1/10/2012
Posts: 673
Location: Brazil
ventuz wrote:
I really believe COVID-19 is airborne virus.. wanna know why? New York is very windy city.
NYC is the perfect place for a pandemic to take over.
With more than 10,000 people/km²,average cold temperatures and people from all over the world arriving all the time, pandemics will spread 'like the plague'. But yes, I would take anything from WHO and China with a huge grain of salt, as they have proved to be dishonest at times.
Editor, Experienced Forum User, Published Author, Player
(158)
Joined: 1/10/2012
Posts: 673
Location: Brazil
" the GBA version does not have a ceiling, so we can get as high as we can in this area."
Then Mario should get as high as possible in order to minimize input length, right?
Editor, Experienced Forum User, Published Author, Player
(158)
Joined: 1/10/2012
Posts: 673
Location: Brazil
1) Go to lsnes config folder. In Linux, it's at ~/.config/lsnes/ . On Windows, I guess it's at C:\Users\<Username>\AppData\Roaming\lsnes\ .
2) Search for file recent-projects.txt. There you can see the projects that appear in the menu and their location. eg {"display":"Super Mario World - Casual Gameplay","filename":"/home/rod/.config/lsnes/1516241292_dce9.prj","id":"1516241292_dce9"}
3) Open the file prj file (a plain text) to see some details, like the branches and where the lss movie files are saved. Search for prj.bak files too, just in case. eg:
Super Mario World - Casual Gameplay
rom=
last-save=/home/rod/emu/SNES/Super Mario World/Casual/smw-casual-15--34.lss
directory=/home/rod/emu/SNES/Super Mario World/Casual
prefix=smw-casual
luascript=/home/rod/git/smw-tas/smw-tas.lua
gametype=snes_ntsc
coreversion=bsnes v085 (Compatibility core)
projectid=bd03bf75509708d32ea62dfe6ae6c174d66ff828
time=1000000000:0
romsha=0838e531fe22c077528febe14cb3ff7c492f1f5fa8de354192bdff7137c27f5b
romhint=Super Mario World (U) [!]
romrom=/home/rod/emu/SNES/Super Mario World/Super Mario World (USA).sfc
branch1parent=11
branch1name=Yoshi Island 2
branch2parent=11
Editor, Experienced Forum User, Published Author, Player
(158)
Joined: 1/10/2012
Posts: 673
Location: Brazil
Chutacoacko Playz wrote:
Do you have to do the stun glitch and zombie yoshi trick for it to work?
No. The color is borrowed from the original color of the sprite that was Yoshified.
A few caveats:
- if Yoshi becomes red, he will spit fireballs for all "koopas" that end up in 160E.
- likewise, blue colors make him have wings, yellow makes the ground pound.
- there's a color (0?) that makes Yoshi vanish in the overworld.
Editor, Experienced Forum User, Published Author, Player
(158)
Joined: 1/10/2012
Posts: 673
Location: Brazil
Chutacoacko Playz wrote:
Such a funny glitch!
I'm pretty sure you can get other items like Princess Toadstool or a Yoshi in item box. :)
Yoshi: you can get with powerup incrementation. It could be possible without PI if you get a Red Koopa in carriable status, in order to perform the tweaker corruption. Sadly, Yoshi spits the fireballs after the stun glitch setup. I tried an alternative setup, but failed.
By the way, there's a whole bunch of things that I didn't mention but I'll when I can. Like "duplicating" a rotating block downward or getting new sprites by stepping on them or hitting'em with the cape. The lsnes movie is also on the way...
Editor, Experienced Forum User, Published Author, Player
(158)
Joined: 1/10/2012
Posts: 673
Location: Brazil
Link to videoMemory addresses:$9E (12 bytes): Sprite number, or Acts Like setting for custom sprites.
$B6 (12 bytes): Sprite X speed table.
$C2 (12 bytes): miscellaneous sprite table.
For Yoshi:
Current state.
0 = normal, 1 = riding, 2 = running
For line-guided sprites:
"Current status.
0 = at end of tile, 1 = on rope, 2 = falling"
$160E (12 bytes): miscellaneous sprite table.
For Yoshi:
"Sprite slot on Yoshi's tongue or in his mouth.
Set to #$FF when null."
For line-guided sprites:
Tile number of the line the sprite is currently touching, minus #$76.
$1656 (12 bytes): Sprite properties, first Tweaker/MWR byte.
$1662 (12 bytes): Sprite properties, second Tweaker/MWR byte.
$166E (12 bytes): Sprite properties, third Tweaker/MWR byte.
$167A (12 bytes): Sprite properties, fourth Tweaker/MWR byte.
Format: dpmksPiS
d=Don't use default interaction with player
p=Gives power-up when eaten by Yoshi
m=Process interaction with player every frame
k=Can't be kicked like a shell
s=Don't change into a shell when stunned
P=Process while off screen
i=Invincible to star/cape/fire/bouncing bricks
S=Don't disable clipping when killed with star
$1686 (12 bytes): Sprite properties, fifth Tweaker/MWR byte.
Format: dnctswye
d=Don't interact with objects
n=Spawns a new sprite
c=Don't turn into a coin when goal passed
t=Don't change direction if touched
s=Don't interact with other sprites
w=Weird ground behavior
y=Stay in Yoshi's mouth
e=Inedible
$1697 (1 byte): Consecutive enemies stomped.
$16A9 (4 bytes): Bounce sprite Y position, high byte.
$190F (12 bytes): Sprite properties, sixth Tweaker/MWR byte.
$192C (1 byte): Empty. Cleared on reset, titlescreen load and overworld load.
Yoshification is a known glitch for some time. If Yoshi dies in the pit and another sprite take its slot immediately, the new sprite acts like Yoshi for at most 2 frames. Yoshi has a proper routine that is called separately from (and before) the main sprite loop. In the case of the Brown/checkered line-guided platform sprite, this puts $160E + slot might get #$1C or #$1D, depending on the location. In our case, it's #$1D. The Yoshi routine will run as if the vanished Yoshi had slot #$1D in his mouth. This sprite also will set #$C2 = 1 in some locations (as in the video), which makes the game think that Mario is riding Yoshi. You press X or Y in the precise frame that it occurs, you spit the sprite that is on Yoshi mouth. But not the one that you licked before, but slot #$1D. It's what Nathan's post described, nothing new yet.
HOWEVER, if Yoshi spits something, there's a catch: if the sprite on his mouth has $1686 with Spawns a new sprite bit set, then a new sprite number will be spat, and all the tweakers will be reset. In this concrete case, $1686 + $1D = $16A3. That is the 3rd bounce sprite Y position. By hitting two distinct blocks (or the same block with the head and a sprite simultaneously) you can hopefully set this address to a value whose 6th bit is set, such that $16A3 & #$40 is not zero. It depends on the Y position of the block.
So, a new sprite spawns with slot #$1D, but the game has only space for 12 sprites. Overslot corruption occurs. The new sprite number is $9E + $1D = $BB = speed of actual sprite 5. Thus we have to manipulate sprite 5 during this glitch. His X speed acts like the sprite that will "spawn". With this speed, we can load new tweakers, always with overslot:
Tweaker 1 of this imaginary sprite will set tweaker 3 of sprite 5.
Tweaker 2 of this imaginary sprite will set tweaker 4 of sprite 5.
Tweaker 3 of this imaginary sprite will set tweaker 5 of sprite 5.
Tweaker 4 of this imaginary sprite will set Consecutive enemies stomped..
Tweaker 5 of this imaginary sprite will set $16A9 (again).
Tweaker 6 of this imaginary sprite will set empty memory $192C.
It also sets the position of sprites 5 and 7. If you are not holding sprite 5, it can go offscreen and vanish (in the video it barely happens!).
The rest of the history: by setting the p=Gives power-up when eaten by Yoshi and n=Spawns a new sprite (among other) properties, I can go to the pipe and use Yoshi to spawn new sprites or get new powerups. The former might crash the game in a bunch of cases and the latter depends on being able to lick the sprite and not swallow it immediately. I also have to grab two sprites upon entering the pipe to avoid losing the tweaker transformation.
EDIT
lsnes movie (also serves as anchored state) http://tasvideos.org/userfiles/info/60599501071338908
Editor, Experienced Forum User, Published Author, Player
(158)
Joined: 1/10/2012
Posts: 673
Location: Brazil
If the elevator movement is "rigid" within the building, e.g. it doesn't slowdown/shake if you jump inside it, then you'll effectively be unable to tell if the elevator is still or moving in the first place. It's Einstein's equivalence principle!
Editor, Experienced Forum User, Published Author, Player
(158)
Joined: 1/10/2012
Posts: 673
Location: Brazil
MUGG wrote:
I need a script that reads lines in text file A.txt, and checks if they are present in text file B.txt. If not, the lines are deleted from A.txt.
I figured someone good can come up with a solution in 1 min so I don't have to spend 30 mins working on it. :P
Thanks in advance.
Too late, but:
EDIT: I'm afraid the previous solution had quadratic time. This one is linear:
Language: lua
local function do_shit_with_file(name, shit)
local handle, err = io.open(name)
if (handle) then
local foo = shit(handle)
handle:close()
return foo
else
error(err)
end
end
local function get_lines(handle)
local ram = {}
for line in handle:lines() do
ram[line] = true
end
return ram
end
local function erase_if_not_in(other_file)
return function(handle)
local buffer = {}
for line in handle:lines() do
if (other_file[line]) then
table.insert(buffer, line)
end
end
return buffer
end
end
local function overwrite_file(name, content)
local handle = assert(io.open(name, 'w+'))
handle:write(content)
handle:close()
end
local B = do_shit_with_file('B.txt', get_lines)
local A = do_shit_with_file('A.txt', erase_if_not_in(B))
overwrite_file('A.txt', table.concat(A, '\n'))
Editor, Experienced Forum User, Published Author, Player
(158)
Joined: 1/10/2012
Posts: 673
Location: Brazil
It seems your previous emulator had a function to create a new savestate object prior to use.
In BizHawk, you simply save and/or load states from filepaths or numbers.
savestate.load
void savestate.load(string path)
Loads a savestate with the given path
savestate.loadslot
void savestate.loadslot(int slotnum)
Loads the savestate at the given slot number (must be an integer between 0 and 9)
savestate.save
void savestate.save(string path)
Saves a state at the given path
savestate.saveslot
void savestate.saveslot(int slotnum)
Saves a state at the given save slot (must be an integer between 0 and 9)
Editor, Experienced Forum User, Published Author, Player
(158)
Joined: 1/10/2012
Posts: 673
Location: Brazil
The previous run was console verifiable only when a certain SRAM address ($0101) had a specific value (0xFF). This fact was not known back then and the emulator should crash at this point with other values (like zero). There's a patched version of lsnes, written by p4plus2, that fixes this problem and crashes when Yoshi eats the chuck.
This run with the shorter payload might have the same issue, I don't know. This patched lsnes also outputs the open bus execution in a hacky (but readable) way.
08/16/2017:
p4plus2 - Today at 5:16 PM
its not the SMW glitch problem -- I did figure that out though
Amaraticando - Today at 5:17 PM
TASBot problem?
p4plus2 - Today at 5:17 PM
That was SRAM initialization problems. if SRAM is FF like in emulator no problem, but on console it is less predictable
What code should not be in $9E in order for the game to NOT crash?
It's not code, it's the sprite number, as I told you. Most numbers from 0 to 0xFF won't crash, except for most generators and commands.
Invalid sprite numbers that won'tnecessarily crash IIRC: