Posts for Bisqwit


Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
When I made this brief Duke3D video on DOSBox, I found Gravis to produce the best MIDI sound available*. FMOPL (AdLib/SB) would have worked too. Using MIDI (MPU-401) would have required me to hook up TiMiDity++ into the MPU emulator and somehow I just was not able to make that work, no matter how hard I tried. It would have been the best choice though, given the non-reproducability requirement (I could choose my own patch sets). I suspect the same trends hold true for JPC-RR too. Only it does not even have an OPL3 emulator yet, or does it? *) Not that I have anything against OPL3 sound.
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Something I recommend for entertainment: Make every prompt and action display clearly for at least 1 frame. People who watch movies frame by frame, trying to follow what's going on, will thank you for doing that. I mean, if you're expending time doing some gimmicks, you might as well make it worth watching. Otherwise, you're better off writing fanfiction than making a TAS.
Post subject: Re: Christmas tree + star
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Scepheo wrote:
Bisqwit wrote:
Also, the Bible actually does forbid decorating a christmas tree. (Deut. 16:21, Jer. 10:2-5, Isa. 66:17)
Now I'm probably jumping to conclusions, but going to hell because you decorated a tree? Honestly, to me this just proves the bible is silly.
You are. What part of that says anything about going to hell? Honestly, this just proves to me that you're too eager in trying to prove that the bible is silly.
Post subject: Re: Christmas tree + star
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
funnyhair wrote:
Isn't decorating a tree with a five pointed star, technically a form of pagan worship?
Yes. Furthermore, when you consider the origin of said practise... Though it is now interpreted to signify the star of Bethlehem -- a convenient explanation --, the star on top of the christmas tree is actually an ancient Babylonian symbol, "solar wheel" / "sunburst" / "sundisc", which was also present in Egypt (the disc between the horns of the Apis calf), and which is also the origin of the disc of light around the heads of saints in icons. It is a remnant of the worship of the Sun, present in almost all pagan cultures. It just had different names. Ba'al, Nimrod, Ra, etc. Speaking of Babylonia, the phallic evergreen tree itself is a symbol of the masculinity and fruitfulness of the Sun-god. The same phallic symbol, obelisk, literally meaning "Baal's organ of reproduction", occurs in many unexpected places today, including in Mecca and in the most recognized landmark of Vatican. Also, the Bible actually does forbid decorating a christmas tree. (Deut. 16:21, Jer. 10:2-5, Isa. 66:17)
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Dada wrote:
I knew it wasn't on the same date, but not exactly how long before Christmas. Didn't figure it was 3 weeks.
Hanukkah, like other Jewish festivals, are based on a different calendar system (lunar calendar) than what most countries use today (solar calendar). This is why some years, it is around the same time as christmas/yule/saturnalia/pancha ganavati, while some years, it is many weeks before that.
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
For the record, the hanukkah was three weeks ago!
Post subject: Re: Hanukkah!
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Swedishmartin wrote:
Bisqwit wrote:
In the good tradition I switched my avatar to Chanukah mode again. :) The Chanukah begins tomorrow night and lasts for eight days and eight nights. It commemorates something that may well happen again. I could tell you what Christmas is about, but it would be a beginning of a discussion to no end. Let's just say, it is not the birthday of Jesus.
Okay, sorry for looking like an idiot, but are you Christian or Jewish? I've always thought you were Christian but apparently you're not? I don't know.
Depending on definition, both or neither. I try to resign myself from all Christian traditions and teachings whose true roots are not in the Bible. While I am leaning more towards Jewish traditions, I try to hold the same standard there as well, ignoring all the ancestry pride, the search for hidden secrets of the universe, the rabbinical edgecase debates and the going of five extra miles to avoid crossing a commandment. It is a work-in-progress, and in the mean time I am going to offend a whole lot of people.
Post subject: Re: nice split
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
feos wrote:
http://pastebin.com/raw.php?i=zmgMnGeT
It speaks Cyrillius. In other news, Internet connections occassionally have temporary lapses. Ever heard of routers rebooting, etc.? The probability of such disconnections manifesting increases the more servers are networked, and the further they are apart topologically. It isn't like Freenode is built of the failure some folks are painting it be.
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
mmarks wrote:
YouTube HD
Thanks mmarks, but I noticed you that in this encode and in Asterix encode, you terminated the ending as soon as there was no new video content to be seen anymore. Previously, TASVideos encoding guidelines used to say that in addition to capturing all relevant video content of the ending, you should include at least one complete loop of the ending music before terminating the game. What happened to this guideline in your encodes?
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Just finished watching the commentary. Thanks for providing it! It was very insightful about the speedrun and the game in general. Your prosody and your language was very pleasant to listen to and you explained things well. Mostly well; there were only one or two things that I felt were a bit neglected, but compared to the amount of glitches and things you did explain it was rather minor. You're an awfully persistent person (positive trait) and it made it all the more pleasant to see, that you don't derive the energy to it from/through vulgar aggression, that is so commonly seen in people, esp. despite the unfortunate choice of name that might suggest an other type of nature. EDIT: Tried some of those glitches on Portal. Works. Cool. Difficult. Random. Not so cool. Not your fault. Again, thanks for the commentary videos!
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Too bad for those of us who have mistakenly submitted some clip that has a litigative copyright owner. Such as this here:
Youtube wrote:
Account Status: Copyright Your account is not in good standing. You receive copyright strikes when we are notified by a third party that a video of yours infringes their copyright. Accumulation of three strikes may result in the termination of your account.Please visit our Copyright Tips page to learn about copyright. If there are any videos on your account for which you are not certain you have the necessary rights, please delete them now. If you believe a claim was made in error, you can also access references on fair use from the Copyright Tips page, and find the instructions for submitting a counternotification in our Help Center. The strikes you have received are listed below. For your reference, a copy of each warning message has also been sent to the email associated with your account. JungleWaItsumoHaleNochiGuu-banana.avi [random anime clip collection] - (Bisqwit) Video ID: JqnHcNsD_5M Removed due to a copyright claim by シンエイ動画株式会社 on July 05, 2010 JungleWaItsumoHaleNochiGuu-hee.avi [random anime clip collection] - (Bisqwit) Video ID: JcXvHNNAsQg Removed due to a copyright claim by シンエイ動画株式会社 on July 05, 2010 JungleWaItsumoHaleNochiGuu-rpghihi.avi [random anime clip collection] - (Bisqwit) Video ID: Lz54j8OD4KM Removed due to a copyright claim by シンエイ動画株式会社 on July 05, 2010 JungleWaItsumoHaleNochiGuu-mursu.avi [random anime clip collection] - (Bisqwit) Video ID: X8FwVIe7nns Removed due to a copyright claim by シンエイ動画株式会社 on July 05, 2010
Each of these clips was around 10 to 20 seconds long. Of course, it was my own mistake doing so, but in today's society, everything contains copyright. TASVideos publishes videos that contain music, graphics and design created by companies. It is really difficult to actually publish anything that does not contain something that has been created by someone else. Of course, my case here is more obvious, but still, now that they did their claim, my account there is permanently stained. (Youtube's copyright "strikes" never expire, even if you remove the videos promptly.) I have several other videos that could also be similarly challenged, for example some subtitlings I have done for Finnish comedy. And of course, those video game videos which contain creative content from such notorities as Nobuo Uematsu. Whenever did the society turn creativity into a weapon? In the past ages, people were honored to get more publicity and fame for their creations… Nowadays, it's just profit, profit, profit. Mammon is the global religion. Rant. EDIT: Congratulations! Your account is now enabled for uploads longer than 15 minutes. Click the Upload button below to select a video. Well, I like this, but my point still stands :)
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Cockysammich wrote:
Can I get a seed on this??
If by "this" you mean my TAS, I am seeding it. I have currently been seeding it continuously for last 31 days.
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Flygon wrote:
Ordered from least likely to offend someone to most likely to offend someone.
I don't understand that ordering. If anything, I would imagine that it is the very opposite order from what you stated. Meh. Fetishes reflect significant portions of one's psychology and imagination, and I'd rather keep both safe from peer judgment.
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
North Bus wrote:
I am in awe that [...] the game doesn't lock up
Actually it does lock up as one of the options for when the glitch is attempted -- but it would not make a very good TAS if it just locked up or rebooted, so such event is not seen in the TAS. P.S. Whoever came up with this text that was added into the publication text was rather clever. It is a good question: "Of course, upon watching this movie, one does have to question something... is it Mega Man saving the world? Or Dr. Wily trying to save it from absolute destruction?"
Post subject: Re: C++ programming challenge
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Bisqwit wrote:
This programming challenge arised to me in the implementation of animmerger. I solved it. But I think it is an interesting challenge! I would like to see other solutions/attempts.
It seems that nobody was interested about this challenge. Well, I'll just go ahead and post my solution.
Language: C++

/********************************/ #define DefineFeatures(callback) \ callback(Feat00 , 0x0001) \ callback(Feat01 , 0x0002) \ callback(Feat02 , 0x0004) \ callback(Feat03 , 0x0008) \ callback(Feat04 , 0x0010) \ callback(Feat05 , 0x0020) \ callback(Feat06 , 0x0040) \ callback(Feat07 , 0x0080) \ callback(Feat08 , 0x0100) \ callback(Feat09 , 0x0200) \ callback(Feat10 , 0x0400) \ callback(Feat11 , 0x0800) \ callback(Feat12 , 0x1000) /* Make an enum out of the feature list */ #define MakeEnum(name, value) name=value, enum Feature { DefineFeatures(MakeEnum) }; #undef MakeEnum /* Count the features */ #define SumFeats(name, value) |value static const unsigned AllFeats = 0 DefineFeatures(SumFeats); #undef SumFeats /********************************/ class Base { public: virtual ~Base() {} }; /* Base is 0 bytes and implements nothing */ class Class00 { char bulk[16]; public: static const unsigned NumParts = 1, HasFeats = Feat00; }; /* Class00 is 16 bytes and implements Feat00 */ class Class01 { char bulk[36]; public: static const unsigned NumParts = 1, HasFeats = AllFeats &~Feat10; }; /* Class01 is 36 bytes and implements all features EXCEPT Feat10 */ class Class02 { char bulk[4]; public: static const unsigned NumParts = 1, HasFeats = Feat02; }; /* Class02 is 4 bytes and implements Feat02 */ class Class03 { char bulk[4]; public: static const unsigned NumParts = 1, HasFeats = Feat03; }; /* Class03 is 4 bytes and implements Feat03 */ class Class04 { char bulk[8]; public: static const unsigned NumParts = 1, HasFeats = Feat04; }; /* Class04 is 8 bytes and implements Feat04 */ class Class05 { char bulk[28]; public: static const unsigned NumParts = 1, HasFeats = Feat00|Feat04|Feat05|Feat06|Feat07; }; /* Class05 is 28 bytes and implements Feat00, Feat04, Feat05, Feat06 and Feat07 */ class Class06 { char bulk[44]; public: static const unsigned NumParts = 1, HasFeats = Feat00|Feat04|Feat05|Feat06|Feat07|Feat10; }; /* Class06 is 44 bytes and implements Feat00, Feat04, Feat05, Feat06 and Feat07 AND Feat10 */ /* This is the function that needs an implementation: */ Base* InstantiateSmallestClassWithFeatures(unsigned featureset); /************************** SOLUTION *************************/ namespace { #define DefineClasses(callback) \ callback(Class00) \ callback(Class01) \ callback(Class02) \ callback(Class03) \ callback(Class04) \ callback(Class05) \ callback(Class06) /* Enumerate the Classes */ #define MakeEnum(name) Class##name, enum Class { DefineClasses(MakeEnum) }; #undef MakeEnum /* Count them */ #define CountClasses(name) +1 enum { NClasses = 0 DefineClasses(CountClasses) }; #undef CountClasses /* Translate Class into a type and information regarding type */ template<unsigned id> struct MetaInfoForClassId { }; template<typename T> struct MetaInfoForClassType { typedef T result; static const unsigned HasFeats = T::HasFeats; static const unsigned Cost = sizeof(T); static const unsigned NumParts = T::NumParts; }; template<> struct MetaInfoForClassType<void> /* Fall-back: Non-preferred type information */ { typedef void result; static const unsigned HasFeats = 0u; static const unsigned Cost = 0xffffu; static const unsigned NumParts = 0xffffu; }; #define MakeClass(name) \ template<> struct MetaInfoForClassId<Class##name> \ : public MetaInfoForClassType<name> { }; DefineClasses(MakeClass) #undef MakeClass /* Utility */ /* Get the index of first 1-bit in the positive integer */ template<unsigned Value, unsigned Basevalue=0, bool found = !Value || (Value&1)> struct GetLowestBit : public GetLowestBit<Value/2, Basevalue+1> { }; template<unsigned Value, unsigned Basevalue> struct GetLowestBit<Value, Basevalue, true> { enum { result = Basevalue }; }; /* Choose type 1 or type 2 depending on boolean condition */ template<typename T1, typename T2, bool select1st> struct ChooseType { typedef T2 result; }; template<typename T1, typename T2> struct ChooseType<T1,T2,true> { typedef T1 result; }; /* Combine classes into a new class */ template<typename T1,typename T2> struct And: public T1, public T2 { static const unsigned HasFeats = T1::HasFeats | T2::HasFeats; static const unsigned Cost = T1::Cost + T2::Cost; static const unsigned NumParts = T1::NumParts + T2::NumParts; }; /* Creates a combination class of classes matching the requested bitmask. */ /* The combination is created through chain-inheritance. */ template<unsigned bitmask=1, unsigned lowest =GetLowestBit<bitmask>::result, unsigned remainingbits=bitmask & ~(1u << lowest), typename lowestInfo =MetaInfoForClassId<lowest> > struct ClassCombination /* two classes if remainingbits!=0 */ : public MetaInfoForClassType<And< typename ClassCombination<remainingbits>::result, typename lowestInfo::result > > { }; template<unsigned bitmask,unsigned lowest, typename lowestInfo> struct ClassCombination<bitmask,lowest,0,lowestInfo> /* one class if remainingbits==0 */ : public lowestInfo { }; /* Starting from given bitmask (bm), finds the first * bitmask whose corresponding ClassCombination produces * a class that implements at least the given Feats. */ template<unsigned ReqFeats,unsigned bm=1> struct NextClassCombination_WithFeats { static const unsigned bitmask = (ReqFeats & ~ClassCombination<bm>::HasFeats) ? // Escalate NextClassCombination_WithFeats<ReqFeats, bm+1>::bitmask : // Found bm; // bitmask that had matching Feats. }; template<unsigned ReqFeats> struct NextClassCombination_WithFeats<ReqFeats, (1u<<NClasses)> { // Default case, ensures termination static const unsigned bitmask = 1u<<NClasses; }; /* Picks the smallest ClassCombination that fulfills the requested Feats. */ template<unsigned ReqFeats, typename DType = ClassCombination< (1u<<NClasses)-1 >, unsigned bitmask = NextClassCombination_WithFeats<ReqFeats>::bitmask > struct BestClassCombination_ForFeats { typedef ClassCombination<bitmask> CType; static const bool ChooseC = ((CType::Cost < DType::Cost || (CType::Cost == DType::Cost && CType::NumParts < DType::NumParts) )); // Escalate. typedef typename BestClassCombination_ForFeats< ReqFeats, typename ChooseType<CType, DType, ChooseC>::result, NextClassCombination_WithFeats<ReqFeats, bitmask+1>::bitmask >::result result; }; template<unsigned ReqFeats,typename T> struct BestClassCombination_ForFeats<ReqFeats,T, (1u<<NClasses)> { typedef T result; }; /* BaseAnd makes any chosen implementation to * have Base as one of the ancestor classes */ template<typename T> class BaseAnd: public Base, public T { }; /* Actual framework for constructing stuff */ struct FactoryType { Base* (*Constructor)(); unsigned cost; }; template<typename T> struct FactoryImpl { static Base* Construct() { return new BaseAnd<T>(); } static const FactoryType data; }; template<typename T> const FactoryType FactoryImpl<T>::data = { FactoryImpl<T>::Construct, MetaInfoForClassType<T>::Cost }; template<unsigned bitmask=1u> struct FactoryFinder { static inline const FactoryType* FindForFeats (unsigned req_feats, unsigned result_cost = 0xffffffu, const FactoryType* result = 0 ) { typedef typename BestClassCombination_ForFeats <ClassCombination<bitmask>::HasFeats>::result imprfinder; /* Using BestClassCombination_ForFeats here avoids * having to _instantiate_ all the different types. * Only those types that end up being returned here, are * instantiated. If it weren't for this, this duplicate * functionality would be redundant. */ if( ! (req_feats & ~imprfinder::HasFeats)) { if(imprfinder::Cost < result_cost) { result = &FactoryImpl <typename imprfinder::result>::data; result_cost = imprfinder::Cost; } } return FactoryFinder<bitmask+1>:: FindForFeats(req_feats, result_cost, result); } }; template<> struct FactoryFinder< (1u<<NClasses) > { static inline const FactoryType* FindForFeats (unsigned,unsigned, const FactoryType* result) { return result; } }; } const FactoryType* FindFeatures(unsigned featureset) { return FactoryFinder<>::FindForFeats(featureset); } Base* InstantiateSmallestClassWithFeatures(unsigned featureset) { const FactoryType* fac = FindFeatures(featureset); return fac->Constructor(); } /******* TESTING ******/ #include <typeinfo> #include <iostream> int main() { for(unsigned featureset=1; featureset<= AllFeats; ++featureset) { Base* tmp = InstantiateSmallestClassWithFeatures(featureset); std::cout << featureset << ": size=" << FindFeatures(featureset)->cost << ", impl=" << typeid(*tmp).name() << "\n"; delete tmp; } }
In retrospect, I think SFINAE could be used to do away with the explicitly coded feature bitmaps in the class declarations...
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
In the good tradition I switched my avatar to Chanukah mode again. :) The Chanukah begins tomorrow night and lasts for eight days and eight nights. It commemorates something that may well happen again. I could tell you what Christmas is about, but it would be a beginning of a discussion to no end. Let's just say, it is not the birthday of Jesus. ___________ [img_right]http://bisqwit.iki.fi/kala/snap/tas_qmark.png[/img_right] Inlining the signature here, to preserve it in relevant context even after I change the one in my profile.
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
The topic of a glitchless run seems to surface each time new more significant glitches are discovered. But nobody is starting to do make one. Is it because of the intimidating subpixel optimization expectations?
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
AnS wrote:
BTW, shouldn't it be
  lda $16
  ldy #$06
  and #$04
  beq +
  ldy #$05
  sty $C005
  bne ++
+ sty $C006
++
The mapper does not really care about the lower bits of the address line used to program the mapper. It is merely a convention that it is often used in that manner, a convention that needn't be religiously followed. (Also, as for your code, did you make sure it fits in the allotted space?)
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
mmarks wrote:
I have encode in HD to this movie of WIP http://www.youtube.com/watch?v=ivvsxmlHSmE
But why did you stretch it horizontally? The aspect ratio is supposed to be 4/3 (1.333), not the 3/2 (1.5) that you made it.
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Now TASVideos is complete. Congratulations! THE END CREDITS Contributors in order of appearance: Morimoto Bisqwit Arc ... Special thanks to: Nintendo Capcom Konami Rasmus Lerdorf Tim Berners-Lee MySQL AB ... THANK YOU FOR PLAYING!
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Flygon wrote:
I still honestly don't see the point of compressing it. FCEUX files are 100% .txt based and generally have a large filesize (In relative terms).
The Rambo TAS is 1 minute and 39 seconds long. Its uncompressed movie file is 528597 bytes in size, of which about 200000 bytes are initialization. By extrapolation, a 30 minute movie would be 6 megabytes in size, assuming a similar input density.* In comparison, a FCEUX movie of 30 minutes is 2.5 megabytes in size. This calculation supports your point. *) This assumption may also fail. For a 30 minutes long movie that, by average, on each frame, presses and releases 10 buttons -- truly a button mashing fest indeed --, the movie file would be 540 megabytes in size. Actual movies are probably always smaller.
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Plain, very pessimal XML. With such traits as being indented (with spaces, causing an overhead of about 10 bytes per line) and double time tags (a total of eight occurrences of the word "time" for each hit of a button), with each input event increasing the uncompressed file size by some 250 bytes, or 500 bytes if you count press+release. (Contrast the text-format FM2 in which each frame takes 23 bytes, or the binary format SMV in which each frame takes 2 bytes (for a single-player movie).) But that is beyond the point of this this thread. The point is that OpenMSX's movie replay files should be assigned a proper file extension that is separate from the transmission aspect (i.e. the fact that they are gzip compressed).
Post subject: Movie file extension [flame]
Editor, Experienced Forum User, Published Author, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
<flame mode on> You named MSX rerecording movie files as .gz ???? What kind of idiotic decision is that? Did you know that .gz happens to be a standard file extension that stands for "gzip compressed"? Examples: -- something.tar.gz is a gzip compressed Tar Archive file -- dump.sql.gz is a gzip compressed SQL dump file -- patch-cromfs-writeaccess.gz is a gzip-compressed patch file (text format) -- mkcromfs.exe.gz is a gzip-compressed EXE file -- rockman2.fm2.gz is a gzip-compressed FCEUX movie file Now you are trying to imply that gz actually stands for MSX movie files? Did you not also realize that on TASVideos site, that movie files are actually identified by their filename extension, and that by committing the extension .gz exclusively to one movie file format, you are in effect depriving any other emulator the right to use .gz to signify that the movie file is compressed? It turns out that the MSX movie file "gz"s are, in fact, gzip compressed. I HASTILY SUGGEST that before any damage is done (that is, before MSX TASing becomes any more popular than it is now), an actual file name extension is assigned to MSX movie files (I suggest mxv), and IF the movie file is compressed, possibly an additional .gz is tacked to it; for example: terminator.mxv.gz. And on the TASVideos site code, if a .gz extension is encountered, an extra processing layer is simply added which gzip-decompresses the file before parsing it; without committing the extension .gz to any particular emulator. (Adding the .gz extension could also be optional. Such optional compression could also be added to FM2 parser etc.)