评论
Bretagne, Francerezoons9 years ago

We're definitely NOT naming it SOB. (I don't know if it was a joke or not)

Anyway, the IGT is here to differentiate the two main way of keeping track of time. The problem with the In-game timer is that there are two tricks that breaks it: -Save warping (used in any% and collectible%) -Smoke Overflow Glitch (or whatever people choose to call it, we doesn't even have an official name for it)

That's what forced us to create different categories. That's also why we used the method to keep track of time to name them, because that's one of the main reason these categories were created.

Your suggestion is also good and was suggested during the meeting but the majority wanted to name the fastest/limitless category any% and that's where the names come from.

I can understand that it doesn't sound very well for some people. Frankly, i don't think there is a perfect name that will please everyone for these categories but the current system has the advantage of making clear what timer to use.

Bretagne, Francerezoons9 years ago

I won't change anything until i got at least prettz opinion on this (i will try to contact it when i will have solve my hardware issues). But here is what i think of it:

  1. If more people want to use it i agree that it should be sticky. For the moment it's not really useful especially since it's nearly at the top of the thread list.
  2. Personally it doesn't bother me but i can understand it can be a little bit annoying for some people.
  3. It's exactly the same background but without the characters making it less interesting imo.
  4. I like both, no opinion on it.
  5. The name, rules etc... where decided a little while ago on a huge conversation between several runners of the game. The name of any% changed a lot as we discovered more about the game breaking glitch but was finally decided that day. The main reason is because it matches the definition of any% http://www.speedrunslive.com/faq/glossary/ since we don't impose any limitation on trick/glitch that can be use contrary to any% IGT.
PrettzL 喜欢这个
Bretagne, Francerezoons9 years ago

Thank you, i added it in the first post. About the talkie walkie it was just speculation, nothing really important. I just wanted to share these stuff i found in the assets.

Bretagne, Francerezoons9 years ago

Actually, OTS.oep is an old (and even obsolete) version of the ogmo project file of the game used to create the levels. You can delete it and the game will still work the same. All the level code is in OTS.swf. Prettz extracted all the file in it and you can found it here: http://puu.sh/jueqg/bfa3429f82.rar

These lines are in the file Action\game\player\Player.as at line 593.

There are A LOT of code so it's not always easy to find what you're looking for.

P.S. Sorry for your secret project ^^'

Bretagne, Francerezoons9 years ago

Here is the (hopefully) last version of the editor. http://puu.sh/jzYcn/806b254e9b.zip

I finally understood why some stuff didn't work. One of the reason is that the .oep in the game was not the most up to date. Anyway, i added "music" in the levels properties and three entities:

door3: It's the door that closes when the boss spawn. It's implementation is quite weird. multibeam: It's the beam that changes each phase of the boss. It only works when grigori spawn. rover: a decorative entity that i found in the code of the game and in the assets but was never implemented in any level.

Also, talking about "never implemented" here is some stuff i found that were not added into the game.

Some flags: http://i.imgur.com/R4mvpQO.png http://i.imgur.com/jWgnM9M.png http://i.imgur.com/6yWvSTZ.png

I guess there were supposed to be used for the language selection in the option but never got implemented.

The teleport gun: http://i.imgur.com/PfFOirG.png

You can see in the .oep of the game that the teleport gun was originally a collectible. I suppose that at some point the dev thought about starting the game without the teleport gun and getting it a bit later in the game. Also i have no idea what this pink stuf is.

A cartoony talkie-walkie: http://i.imgur.com/G01OLYu.png

My guess is that the antenna our character has come from this object but i can only speculate at this point.

PrettzL 喜欢这个
Bretagne, Francerezoons9 years ago

I looked at it in the code and i think i figured it out. The function coding the damage we take by collisions is this one:

        for each (_loc_9 in _loc_4)
        {
            
            if (_loc_9.collideAABB(this.player))
            {
                _loc_9.decrementHealth();
                this.damagePlayer();
            }
        }

Basically, when your hitbox touch a starship hitbox, the game consider you're in collision. While you're colliding with a spaceship, you and this spaceship loose one health by frame. The first starships we encounter all have 3 healths each that's why we take 3 damages by colliding with them. But, if we stay only 2 frames in their hitbox we will take only 2 healths of damage and they won't get destroyed.

We can also see this by looking at a collision frame by frame: http://puu.sh/jyMXX/d0ae8d7133.gif

You can clearly see you take one damage per frame.

PrettzL 喜欢这个
Bretagne, Francerezoons9 years ago

Well, after some testing using the level editor i think i start understanding what's happening off screen.

First i replicated the glitch in these modified levels:

http://puu.sh/jxTEt/47dc39295f.jpg

http://puu.sh/jxTuA/c0426cda8f.jpg

And what happened when i moved offscreen to the right was as if only the blocks between the blue lines and the blocks between the pink lines in the following picture existed:

http://puu.sh/jxTR2/8ae2301d41.jpg

I think that the only solid blocks that are loaded are those at the same height as another block at the edge of the level where the glitch happens.

http://puu.sh/jxUcu/7f4ba1e24b.jpg

Which might explains why we can move offscreen freely right and left without bumping into anything.

Another thing i look at was expulsions. We already talk about the possibility that going into a block might push us upward. To look at that in more details i only modified this level this time:

http://puu.sh/jxUBe/0e13e68ae0.png

Then, using the machine gun to determine my height, i looked at if there was ejections when i went right to left, left to right and when i jumped. Here is what happened:

When i went left to right:

http://puu.sh/jxUWi/e91c36bc27.png

I got an ejection.

When i went right to left:

http://puu.sh/jxUXo/07df6e09e7.png

I bumped into the wall and got nothing

When i jumped:

http://puu.sh/jxUYi/f85a117417.png

I got the same result.

That's pretty weird. It looks like we only got an ejection upward if we go into a block from only one direction. But if we combine everything we've got then we can deduce that, when we trigger the glitch in any%, only this part of the left level is loaded:

http://puu.sh/jxViN/cd8e8ff31a.png

And the path to the final boss trigger is this one:

http://puu.sh/jxVyj/c3fa69ef2f.png

I'm still not sure at 100% but that's the best theory i have for now. Also, i'll soon start writing the guide for the run hoping that more person try the any% category.

Bretagne, Francerezoons9 years ago

The first behaviour happened to me once. I believe it's pixel perfect. The only place in the run i think it's really useful is here:

http://puu.sh/jxwPr/bbe6f13c3b.gif

but it would need combining the green beam glitch with this pixel perfect trick making it quite difficult. (But also quite rewarding)

The second behaviour can be seen in ghuia former any% run at 0:53

I tried to see if it could be exploited anywhere else in order to break block before having the gauss gun but i didn't succeed.

Bretagne, Francerezoons9 years ago

I just updated the tutorial explaining the different way of doing level transition.

PrettzL 喜欢这个
Bretagne, Francerezoons9 years ago

Yes, it default on the same level coordinate of the door you entered.

http://puu.sh/jwM2d/963defafa5.jpg

http://puu.sh/jwM5e/88238a0b91.jpg

Bretagne, Francerezoons9 years ago

You have to put an exit door in level 2_3 and it will put you on that exit door. So yes, you can control specifically where it will place you.

PrettzL 喜欢这个
Bretagne, Francerezoons9 years ago

Another update. The editor is basically finished. They are still 2~3 things i didn't managed to implement but they are minor stuff. You can now modify directly the game levels using ogmo:

http://puu.sh/jwrbP/a4ba93d4b2.png

The only exceptions are level 12_6 and 27_6.

I still need to explain screen transitions.

PrettzL 喜欢这个
Bretagne, Francerezoons9 years ago

Very good work. It's true that damage boosting wasn't that explored before because tradtionnal runs are one heart run. I tried them and they are actually pretty easy. The timeframe when you have to press jump after the damage is actually pretty lenient.

But i think i can add a few things that could help with this damage boosting.

First, i'm stupid. I misread your instructions and because of that i think i found a new glitch ^^' Basically, instead of jumping AFTER the hit i jumped BEFORE the hit as if the ghost acted like a wall. And... This happened:

I got the damage boost but not the damage. After some testing it apparently happens when you touch the top of the head of the ghost. It also works whatever it's movement is (if he goes from top to bottom or the opposite)

It's pretty difficult to do because it seems to only work on a few pixels and the ghost is moving constantly. I don't know if it can be used yet but it's pretty neat!

Secondly, i'm currently scanning the code of the game. I don't understand most of it but i got some little data that can help. Here is the function coding what happens when you get hit.

    public function onTakeHit(param1:int, param2:int, param3:String) : void
    {
        if (this.invulnerable <= 0)
        {
            SoundManager.playSound("takeDamage");
            this.jumping = false;
            _ySpeed = -170;
            _xSpeed = -140 ¤ param2;
            this._hp = this._hp - param1;
            this.lostControls = true;
            this.invulnerable = INVUNERABLE_TIMER;
            this.checkHp(param3);
        }
        return;
    }// end function

It tells us that we get expulsed with a vertical speed of 170 (for comparaison, for a jump in the air it's 325 and for a jump in the water it's 30) and an horizontal speed depending of the monster.

We also lost control of our character and gets invulnerable for 0.8s. Because of the following lines:

    private static const INVUNERABLE_TIMER:Number = 0.8;

        if (this.lostControls && !this.invulnerable)
        {
            this.lostControls = false;
        }

Nothing ground breaking. It's just more precise data.

PrettzL 喜欢这个
Bretagne, Francerezoons9 years ago

I just updated everything. You'll have to downloading all the images files again ( http://puu.sh/jv4Vo/3b991de576.zip )

Creating the level is now a bit more complex but importing it into the game is now really easy.

I added tile details, fences, glass, moving block with pic on it, mirror, breakable block and breakable platform.

You can also now edit the level properties.

Bretagne, Francerezoons9 years ago

From what i've seen, you can trigger any dialogue of the game you want but can't make your own. Sorry.

About the door, each level has it's own set of coordinate. It's in it's tittle. 1_1.oel means that the level has (1,1) has it's coordinate.

The door i added in the first level is coded like this: <env_door id="13" x="512" y="288" destinationX="1" destinationY="1" exit="False" /> Which send the player to the level 1_1, the one you create.

If you want to create a door to a new level you make. For example, enter 2 in destination X and 3 in destination Y.

http://puu.sh/jv1pA/21f7998ad9.png

This door will lead to the level 2_3.oel.

Bretagne, Francerezoons9 years ago

It was discovered a while ago that level files are just XML files easy to edit. Then, megadrive identified the software the levels mare made on. Next, prettz managed to get us all the assets of the game and finally, thisishowmymindworks found a software allowing us to mod the game. Using all these ressources, we can now make our own custom levels. Of course, since the game was not programmed for that it's a little bit tricky.

I'll then try explaining how to make custom levels as easily as possible. For the moment we are still limited to what we can do but i'll update everything as soon as possible.

¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤ I) Setting-up the level editor ¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

First, start by downloading Ogmo editor ( http://www.ogmoeditor.com/ ). Then download these files that will be necessary to work with the editor. https://www.dropbox.com/s/4b3lkrtmmtfo3bl/OTS%20level%20editor.zip?dl=0 (keep all these in the same folder)

After downloading everything, open ogmo then go to Project->Open Project...->OTS level editor.oep You should get this:

http://puu.sh/jv4XL/d1f841b52e.png

Before starting to create your level you have to set-up it's properties. Go to Level->Level Properties... Here, you can configurate these level properties:

Level Size: The level size. You can have bigger level but it makes level transitions more complicated so, i would highly suggest not using it. Backgound: Change the background of the level rain: Choose if there will be rain in the level. thunder: Choose if there will be thunder in the level. message: If you want a pop-up message to be triggerred after entering the area, put its label here. See the "Adding custom text" section. messageOnce: Not important. darkness: Choose if there will be darkness in the level. right/left exit: See the "Connecting multiple levels" section music: Choose the music that will be played during the level.

¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤ II) How to create your own levels ¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

After finishing the set-up, you can start to make the levels. Go back to the main tab and look at the layers on the upper left of the screen. They correspond to different layers of the level. I'll start by explaining the more important one:

Solid: With this layer you create the solid blocks of the level. Basically, everything your character can touch, walk on, etc... For example:

http://puu.sh/juzlH/ee8b8c02e6.png

(Warning! Slopes are not solid block)

Left click on a block make it solid and right click do the opposite. You also have different tool in the upper right corner to help you.

https://cdn.tutsplus.com/gamedev/authors/porter/ogmo-editor-guide-07.png

Front: This layer contain the tiles of the level. Make sure the Tileset is set to "Front01" in the Tile Palette. The tiles are all the blocks you see on the screen when you play. Solid Block are all invisible so you should probably put tiles on all your solid blocks. (unless you want to make invisible wall or stuff like this) In order to do that, choose a type of block in the tile palette in the bottom left corner then click on the square when you want to put it. For example:

http://puu.sh/jv6sc/896da49f31.png

Same as before, you have different tools in the upper right corner to help you.

https://cdn.tutsplus.com/gamedev/authors/porter/ogmo-editor-guide-08.png

Objects: This layer contain all the interactive stuff you can encounter. To put them on the level, it's the same as for the tiles, click the entities then click on the level but if you want to remove them you'll have to use the eraser tool.

For example:

http://puu.sh/jv5Dv/98628206b3.png

Warning! The comportment of some objects is different depending on what's written in the "selection" tab (bottom right corner) which appear when you select an object.

door: If it's a door you go into, uncheck "exit" then write the coordinate of the level the door makes you go to in "destinationX\Y". If it's a door you exit, check "exit". The coordinate of a level are in it's name. All level have a x_y.oel name with (x,y) their coordinate. door2: Enter an id for the door. It will open when you'll talk with the alienGuard npc with the same id. door3: It's the door that closes when the boss spawn. I have no idea how it works so avoid using it. brute: If you want it to face right, let side=1. If you want it to face left, put side=-1. block fragile: If you check "extra fragile" you'll get it's extra fragile equivalent. all npc except grigori: Put the label of the message they'll say. See the "Adding custom text" section. alienGuard: Enter the id of the door they will open when talked to. sp_messageArea: Put the label of the message that will trigger when entering the area. See the "Adding custom text" section.

Note that for the slopes you need to put the object AND the tile otherwise you'll get invisible slopes. Moreover, lava/water are handled a bit differently than other objects. Instead of putting a lava/water in each square you should only put one and then use the "resize" tool on them.

And finally, you also have some tools for this layer

https://cdn.tutsplus.com/gamedev/authors/porter/ogmo-editor-guide-09.png

(Ignore "Add node/Insert Node". Also, the "resize" option only works on: water, lava, reference, bg_mountais, sp_messagearea and sp_endgame.)

Finally, we finish we the less important layers:

Reference: In this layer, just choose if you want to put the "reference" entity in the level or not. It gives a little cool effect in the level. All OTS levels have it even if it's not really noticeable. FarBack: In this layer you can put one of the four bg_mountain if you want. Back: Make sure the tileset is set to Back01 in the Tile Palette. In this layer you choose the tile that will appear in the background. BackDetails: I don't understand this one yet. Ignore it. BackDrop: In this layer you can put any object starting with "bd_". They are backgrounds details. FrontDetails: Make sure the tileset is set to Details01 in the Tile Palette. In this layer you add little details to the level and the front tiles.

¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤ III) Integrating your level into the game ¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

After finishing your level, the next step is to integrate it into the game in order to play it. First, go to level->Save your level as... and save it as "x_y.oel" with (x,y) being the coordinate of your level. Be carefull not choosing an already used coordinate in the game unless you want to overwrite a specific level. The less intrusive way of putting your level into the game is by making a door at the starting area that goes into the level (in this case, don't forget to add an exit door where you want the player to start your level). In order to do so, go to Level->Open level... and open the level 5_5.oel (the starting area) in the game level directory (C:\Program Files (x86)\Steam\SteamApps\common\outtheresomewhere\level).

http://puu.sh/jwqLB/ca74bec6dd.png

Then add a door leading to your level as i explained before, save then exit. (Of course don't forget to have an exit door in your level) After finishing everything, add your level into the game level folder and if everything was done correctly you should be able to play it.

http://puu.sh/juATE/77984b281d.jpg

http://puu.sh/jv5Wq/7d3f115c5a.jpg

¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤ IV) Connecting multiple levels ¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

So, now you know how to make a level. That's great! But that's not enough. You probably want to make multiple levels connected between each other. Here are the three ways of doing it:

Using screen transitions: First, you need to know a little bit more about level coordinate. All level are saved as x_y.oel with (x,y) being their coordinate. These coordinates represent the position of the level on this giant map:

http://puu.sh/jxtoh/26798337dd.png

I put in black all coordinates used by the game. You can find the full map with all levels and their coordinates here https://www.dropbox.com/s/5dmvb0e2uh6vywq/OTS-Map_num.png?dl=0 (made by Timbouton)

When moving from a level to another using screen transiton it's the same as moving from one case on this giant map to another. So: if you're in level x_y.oel and exit to the right you'll appear in level (x+1)y.oel if you're in level x_y.oel and exit to the left you'll appear in level (x-1)y.oel if you're in level x_y.oel and exit up you'll appear in level x(y-1).oel if you're in level x_y.oel and exit down you'll appear in level x(y+1).oel

For example, here is level 19_4.oel and it's surronding.

http://puu.sh/jxubj/d072585856.png

Using Doors: As explained before, you can put door leading to a specific level. If this level contains an exit door, you'll appear there. If this level doesn't contain anything, you'll appear on the same level coordinate of the door you entered. (I highly suggest putting an exit door anyway)

Using special transition: It's used only once in the game. Here:

http://puu.sh/jxv99/d74693b441.jpg

It's when you want to bypass the game transition system. You can only do it for righ/left transition. In order to do that, go to level->Level properties... and write in right_exit the name of the level ("x_y") you want to transition to when you go the right. Same thing for left.

¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤ V) Adding custom text ¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

In this section, i'll explain how to add custom text (Room names, NPC dialogue, pop-up messages) into your custom levels. Since these data are stored deep into the ots.swf file we need to use another software in order to edit them: JPEXS Free Flash Decompiler (https://www.free-decompiler.com/flash/download/)

After installing the software, launch it then open the "ots.swf" file in the gmae folder. (Don't forget to keep a back-up, all the game code is in this file!) The only files we're interested in are these two:

http://puu.sh/pTvHx/c3ae7e73b4.png

Right click on them then choose "export selection". This will create a folder on your computer called "binaryData" with a copy of these files. You can then open them with a text editor and modify them.

Let's break down these files: 57_assets.XmlAssets_MESSAGES_XML.bin The first part of the file contains all the pop-up messages of the game. These are the messages that appears in the game after you entered a room. Their syntax are <label> <timer value="0.5"/> <once value="true"/> <text portrait="yuri"> <en>Message in English.</en> <br>Message in Portuguese?</br> <fr>Message in French.</fr> <hue>I have no idea what this is.</hue> </text> </label>

label-> This is a tag to identify the message. Make sure that all your text have an unique one. timer value -> The time it wil take to trigger the message after you entered the level. once value -> Don't touch it. text portrait -> Who is talking. Usually it's yuri for these messages. <en/br/fr/hue> -> The message in the different languages. If you only use one language just put the same text everywhere. You can change the color of the text using {color:#FFFFFF}, forcing a line break using \n and changing the text speed using {cooldown:5}. (bigger number=slower text with 1 being the default speed)

For example, the first message of the game has this syntax: [quote] {color:#F2960B}Captain's Log:{color:#FFFFFF}\nIt looks like I've landed on an inhospitable planet. I have to find a way to fix my ship and defeat {color:#FF0000}{cooldown:5}Grigori{cooldown:1}{color:#FFFFFF}, for the sake of Mother Planet!</en> [/quote] giving us http://puu.sh/pTwWa/5eac7002ed.png

The second part of the file contains all the NPC messages of the game. Their syntax is pretty similar: <label statistic="alien"> <text portrait="worm"> <en>Message in English.</en> <br>Message in Portuguese?</br> <fr>Message in French.</fr> <hue>I still have no idea what this is.</hue> </text> </label>

Don't forget to put the label and choose a matching text portrait with the NPC (worm/wormGurad/treeMan)

Finally, the file also has the texts for other triggers with very similar syntax.

After finishing all the modifications, go to JPEXS Free Flash Decompiler right click on the file 57_assets.XmlAssets_MESSAGES_XML.bin then replace it with your modified version. http://puu.sh/pTxUK/aba1d344c1.png Then, don't forget to put the label of the new messages you made into your custom levels. For a message triggered after entering a level -> Put its label into level>level properties>message For a message triggered after entering an area of a level -> Select the area (object) then enter the label into the "message" section. For a NPC talk -> Select the NPC (object) then enter the label into the "message" section.

65_assets.XmlAssets_ROOM_NAME_XML.bin This file is way easier to deal with. All the rooms names are here with the sintax <r10x6> <en>English name</en> <br>Portuguese name?</br> <fr>French name</fr> <hue>??????????</hue> </r10x6> "r10x6" means that's the message associated to the room 10_6.oel. So put the right coordinates and your text. After finishing editing the file you can put it back into ots.swf as described above and that's it!

¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤ IV) Miscellaneous ¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

Another use for OGMO is to edit game levels. If you want to do this you may notice that some levels can't be opened in OGMO and other correspond to nothing in the actual game. Here is why:

Unopening levels: 10_5.oel: The most complicated one. The line causing issue is line 13: <rect x="0" y="-1" w="26" h="1" /> It adds a line of invisible solid blocks above the level and OGMO doesn't like it. If you want to edit the level you need to remove this line with notepad, edit the level, then put the line back.

12_6.oel The line causing issue is line 245:

<!-- <sp_messageArea id="11" x="288" y="0" width="160" height="160" /> -->

You can just remove it. It affects nothing in the game.

25_5.oel The line causing issue is line 81:

<!-- <env_blockFall id="10" x="160" y="256" /> -->

You can just remove it. It affects nothing in the game.

27_6.oel The line causing issue is line 46:

<!-- <sp_messageArea id="15" x="96" y="64" width="32" height="192" message="" /> -->

You can just remove it. It affects nothing in the game.

Unknow levels: 20_5(new).oel It's an alternate version of 20_5 that was never used in the final game.

20_6.oel It's the foundation of a level that never made it into the final game that you were supposed to access from 20_5(new). The level is still here but unaccessible.

31_6.oel It's an alternate version of level 36_1.oel. Once again, it's unaccessible in the game.

¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤ Final Words ¤ ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

Thank you for everyone who helped making this! Thank you megadrive, prettz and thisishowmymindworks for identifying all the software needed to make this possible. Thank you Timbouton for making the map with coordinates. It helps a lot when messing around with the game levels. Thank you Natos for testing all this and making the first custom level you can find here: http://www.speedrun.com/ots/thread/k0o7u

If you have trouble, questions, you don't understand something or want more detail on something else, ask away!

P.S. if after modifying the game file you're unsured of what you did it you can just uninstall the game then reinstall it. Steam even keep your save files!

PrettzL 喜欢这个
Bretagne, Francerezoons9 years ago

Very good discovery. The strat is indeed pretty tricky to do consistently.

The wall jump after the first teleport is really tight, the third teleporter has to be shoot right after being teleported and you have to be careful not jumping off-screen after the third teleport.

Netherless it is a very useful trick.

For any%, since each second count seeing how short the runs are, it's worth being able to do it.

For 107% it's very useful because it makes you arrive directly into the ancien alien artifact and you can then fall to the left onto the abandonned core making you gain probably around 15~20s.

For other categories, if we ever found a huge time saving trick that need you to take some damage, here again the trick could reveal to be very useful since you can get an ancien alien artifact right in your path.

I don't know if i'll ever be able to do it consistantly but i'll give it a try!

Bretagne, Francerezoons9 years ago

Wow, i didn't know that. Thank you very much!

Indeed, because of the missing tilesets and entity files it's impossible to edit the levels directly with Ogmo (or i didn't find how). Nethertheless it's very useful to use it in order to see the block coordinates of a level. It makes easier to edit the level manually.

For example, i just made really quickly this short level under the starting area:

http://i.imgur.com/POwJpth.jpg

(and i made a hole in the starting area to go to it) I call it the "boost jump training level"!

Anyway, i'll try using it to edit the level to the left of the starting area and see if you can still go to the boss trigger when you remove/add certain block. Maybe it could help us understand what's happening off screen.

PrettzL 喜欢这个
Bretagne, Francerezoons9 years ago

Yes, sorry. I'm still editing this a little bit. Thank you for pointing it out!

And the jump is to the right, i tried other setup by jumping to the left but never managed to make them work.

Bretagne, Francerezoons9 years ago

Well, i just spend the night making some research about the glitch. Here are what i found.

  1. Ghuia was probably right, it's the smoke particles that trigger the glitch. Probably because of a buffer overflow. Moreover, the starting area is the only place where you can trigger it.

  2. Prettz was probably wrong, the path leading to the boss trigger should look more like this

http://i.imgur.com/1SAb3rP.png

I will detail how i did it. (It will be a bit long, sorry)

  1. In order to show that, i looked at the code for the individual levels. You can find them in C:\Program Files (x86)\Steam\SteamApps\common\outtheresomewhere\level

Each file in this folder represent a level. The starting level is 5_5.oel. The level to it's left is 4_5.oel and the one to it's right is 6_5.oel.

Each level looks like this:

<level width="832" height="480" background="sky1" rain="True" thunder="True" message="greetings" messageOnce="True" darkness="False" music="surface"> <reference> \\Reference Point </reference> <Solid exportMode="GridRectangles"> \\List of Solid Object </Solid> <FarBack> \\BackGround image </FarBack> <Back tileset="Back01" exportMode="XML"> \\BackGround tiles </Back> <BackDetails tileset="Front01" exportMode="XML" /> <Backdrop> \\BackGround Details </Backdrop> <Objects> \\Slopes,Checkpoints,lamps,various trigger, etc... </Objects> <Front tileset="Front01" exportMode="XML"> \\Tiles pictures </Front> <FrontDetails tileset="Details01" exportMode="XML"> \\Special textures on some tiles </FrontDetails> </level>

You can easily mess around with it and change any level you want.

http://i.imgur.com/241YUJQ.jpg

http://i.imgur.com/S0XR0bO.jpg

So, using this, i removed stuff until the glitch disappeared. And i discovered that the cause of the glitch is this object:

<play_start id="1" x="288" y="288" />

If you remove it, you will appear at the checkpoint (instead of the space ship) and the smoke won't appear and the glitch will never trigger.

If you add this object to another level containing a checkpoint you will make smoke appear (if you start the game at this level) out of nowhere and the glitch will trigger after 2min50.

If you add two copy of this object in a level, the glitch will trigger after 1min29 and the fps will drop to 36fps (-40%) If you add three copy of this object in a level, the glitch will trigger after 1min00 and the fps will drop to 14fps (-60%)

All this makes me nearly 100% convinced that it's the particules of smokes that causes the glitch. Probably with a buffer overflow as ghuia said.

Moreover, since the starting area is the only area with the "play_start" object it means that the glitch can't be reproduced elsewhere.

We can learn a little bit more about this object in the OTS.oep file in the same folder. This file is a little weird. The games runs perfectly without it and modifying it doesn't change anything. It's weird. Anyway the only mention of play_start in the file is here:

<EntityDefinition Name="play_start" Limit="-1" ResizableX="false" ResizableY="false" Rotatable="false" RotateIncrement="15">
  <Size>
    <Width>32</Width>
    <Height>32</Height>
  </Size>
  <Origin>
    <X>0</X>
    <Y>0</Y>
  </Origin>
  <ImageDefinition DrawMode="Image" ImagePath="images\entities\player\yuri.png" Tiled="false">
    <RectColor A="255" R="255" G="0" B="0" />
  </ImageDefinition>
  <ValueDefinitions />
  <NodesDefinition Enabled="false" Limit="-1" DrawMode="None" Ghost="false" />
</EntityDefinition>

But it doesn't help much. I don't see where the smoke is mentionned here.

  1. In order to understand a little bit better what happens off screen i used the step noise. Step noises looks like this:

http://i.imgur.com/Xz7sSzr.png

Basically it's tac-tac, tac-tac, tac-tac, etc... The speed of your character is 2.5 square for two steps (=for a tac-tac) when the glitch isn't activated. When the glitch is activated it's 3 square for two steps. (I think that's because when the glitch is activated your character has the same relative speed but because of the 20% fps drop the step noises are slower)

Using this i managed to determine that in order to get to the boss trigger you have to walk left 8 squares off screen, jump right, then go right which correspond to the first image.

It's possible that TaiyoGamer is right when he says that there is an upward ejection by the wall. The problem is that when you try it offscreen to the right of the starting area it doesn't work. You can see your vertical position by shooting with the gun (because the bullets goes through the screens) and wherever you are or jump on the right off screen area you stay at ground level, there are no ejection. In the end, i still don't know how this part works.

Also, if you go 14 squares) offscreen to the right you softlock the game (probably because you go through the lava).

rezoons的介绍
加入时间
9 years ago
在线
3 years ago
记录
28
已玩过的游戏
Out There Somewhere
Out There Somewhere
最近一次游戏记录 8 years ago
26
记录
Another Perspective
Another Perspective
最近一次游戏记录 8 years ago
1
记录
Westerado: Double Barreled
Westerado: Double Barreled
最近一次游戏记录 8 years ago
1
记录
关注的游戏
Out There Somewhere
Out There Somewhere
最近一次访问时间 3 years ago
3,107
次访问
负责管理的游戏
Out There Somewhere
Out There Somewhere
最近一次操作 6 years ago
141
操作