There's two separate issues here:
1. There's no guarantee that a boss rush TAS would be published as an official movie on tasvideos.org. The Judge Guidelines says such as "Keep the number of different branches per game minimal. A run for a proposed new branch for a game should offer compelling differences relative to previously published runs of that game.". If a boss rush TAS is submitted, there is a very real chance of rejection because we already have 4 published AoS branches (any%, all souls, any% glitched, julius any%). This rule was much more strict in the past than it is today, but there are still no guarantees.
Have you manipulated the RAM in your boss rush? You have 99 positron rifles. Published TASes on this site should, in theory, be possible on the console, and so should not rely on memory poking. If you want to publish a boss rush TAS, you will need a verification movie which collects all the stuff you need first. Sadly. (This would almost certainly be at least an hour of verification movie for 2 minutes of boss rush movie. >_< )
2. You're always welcome to post boss rush TASes in this thread. It might even be nice to have a list of boss rush TASes on the game resources page (plug, plug). Here's a boss rush from Yrr earlier in this thread (and about 14 months ago). The boss rush you PMed to me is faster by over a second.
I would certainly watch and enjoy any boss rush posted to this thread; and here, I'm not fussy about RAM manipulation. If your only goal in making a TAS is to get it officially published, it's not the best reason to do it. If you want to entertain people, we are here and we will watch it, and if it gets published, then that's an added bonus :)
You are right.
When submitting a run, I must beat all existing records. The goal is 1:07:86, mine is far worse. Then I have to entertain people, I must do something different than others.
When I decide to submit a run(now I have no thought about it), I will make a save from the existing all-soul run, a .vbm file is required.
Thank you guys, I'll keep trying.
A boss rush may have a solid chance of being published (after all it is different from any other branch), and even if it won't it can certainly receive a honorary mention in one of the published movies' (say, any%) description. I think it's no big problem.
I should note, however, that a glitched BR will have a higher chance due to being less feasible on the console and having less player-imposed restrictions.
Toodles!
I've given it some thought, and Blocking Mail should save some time, mainly on the Final Guard, gonna check that later.
The hippogryph trick is very curious indeed, it saves 6 frames on Chaos and 4 frames on Headhunter and Big Golem each.
Chaos ends up with -1 life after the last hit, unless another 50 damage is somehow added I'm afraid he won't be improved.
And the Red Minotaur needs to be applied the way it is, otherwise the upper left eye will only be hit once.
I'm currently adding Corner Boosting and Platform Boosting to the resource page. Feel free to clean it up.
Also:
Pie
347 frames ahead of klmz. Just need to redo the very last part quickly, then I'm ready to move on.
Sounds exciting! Kudos to zhangsongcui!
Thanks very much for this. I added an explanatory note to your first corner boost example. I don't understand your black panther example -- AFAICS, each frame, Soma's position just increases by his Y-speed. AIUI, when corner boosting occurs his Y-position will increase by more than his Y speed because the corner is ejecting him (and indeed, this is what I see in the first example). Or am I missing something? (Also, his Y speed ends up at 8:2A but he only descends 8 pix/frame; why not the full 8:2A?)
Ace as always. Are you going to kill Final Guard with Muramasa or Ronginus' Spear?
Pie \o/
Will you use the same route or did you conjure some new room transitions?
What about this route?
- get 3 Tasty Pies from the Killer Fish
- warp as usual until Final Guard, use the Tasty Pie instead
- walk through the Stolas, exit screen to the left. Get back, kill Stolas for 0hp glitch
- reset, immediately exit left without killing the Stolas again
It's around the same walking distance, but 1 kill less. Would the room transition change due to the new route? Maybe the levelup makes up for the wasted time? Ok, 290hp (Tasty Pie) - 160 (Shadow Knight) - 130 (Stolas) = dead, maybe there's a neat trick to save 1 measly hp?
Another idea: could you trigger the first warp by soul instead of levelup? Axe armor throws a pie, gets pwned, releases soul, pie returns and hits you. This might save a bit on the early exp'ing perhaps? Maybe it allows you to suspend after the second fish instead of advancing to the third if the above idea doesn't work out?
None of the cornerboosts were succesful... but I'm very certain they do work, just need a different place to demonstrate. Gonna fix this tomorrow.
Ronginus' Spear, most likely.
The first idea doesn't sound too plausible. Pretty sure you cannot jump over the Stolas without double jump. The second idea on the other hand sounds very plausible. I'm gonna check it out tomorrow. My only concern is Axe timing on the Axe Armor, since I won't be taking quite as much damage from him.
No. But for some reason, klmz took 130 damage from the Stola's first hit, but only 129 from the second. I did play around a bit and got 129 damage a few times, but the first hit I took was always 130. Same with Shadow Knight, the first hit I took was always 160, but subsequent hits sometimes hit for 159.
If you can get a 129/159-hit somehow, the route is possible. Any idea why the damage values differ at all?
Perhaps your hitpoints are expressed as a floating point number? I can't imagine why they would be, but then you could take partial HP damage, which (if damage is displayed as int(original HP - current HP)) would cause variable damage display.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
right, Lubicant *facepalm* in that case, Stolas will only hit for 129 and you can survive the route change. Which leaves us with these possibilities:
1) three fish (two meats) / axe level up / two stolas (original route)
2) three fish (three meats) / axe level up / one stola
3) two fish (two meats) / axe soul / two stolas
Going to the stola from left or right is equally far. The original route will traverse the room fully (right to left) and kill the stolas, the modified route would traverse the room fully (right to left) and run through the stolas.
Then again, +4 str (?) from the levelup would probably offset the time for the stolas kill, anyway. And if axe soul glitch works out, killing the stolas instead of a third fish is only slightly slower, but more beneficial.
So while investigating RAM addresses for the article I thought I'd write a lua script to show enemy HP and MP values: Gravy
It displays info in the top-right of the screen, but you can uncomment a line to display it underneath the monsters instead. It's an early effort -- lots of things are stored in the same RAM positions as enemies including projectiles (evil butcher knives), limbs (manticore tails, man-eater segments) and breakable walls; these are erroneously identified as enemies.
Is this useful to anyone? Is there data you'd rather see displayed? For example, I've found the addresses for cooldowns, perhaps that would be useful?
Props to gocha, whose RNG script I butchered in order to get started.
EDIT: Here's a script to show monster cooldown values. There are 5 different cooldown types which are coded as follows: K = kick, W = weapon (inc. Julius's whip), S = slide (also julius's uppercut attack), B = bullet soul (inc. julius's subweapons), G = guardian soul (also julius's whip swinging when you hold B down). It can be seen from this script that some bullet and guardian souls have monstrously high cooldowns -- julius's axe and black panther are both in the ~60 frame range.
(Internals stuff: the cooldown types are encoded in memory as K == 2, W == 3, S == 4, B == 5, G == 6. It strikes me that there ought to be a cooldown type for 1, but nothing I've found so far produces such a value. I've tried various weapons, bullet souls, and guardian souls; does anyone have any ideas? Am I forgetting some way of damaging a monster?)
This ended up slower due to lower damage on Lubicant.
This sounds very useful, although I've never used lua scripts. Might have to learn that some day.
Finally got my hands on the Lubicant soul. Well, not finally - I managed to finish Lubicant once before, but then I noticed a pretty big mistake; I didn't change to Muramasa during the pause screen after aquiring it, effectively wasting about 60 frames.
Anyways, I needed to make the Beam Skeleton fire his laz0r, which makes him stop pushing the RNG.
I'm going to try to alter the Lubicant's pattern slightly without changing the loot tables (good luck with that), and have room to land on the small platform next to the Lubicant. This would no doubt save some time.
Pie
522 frames ahead of klmz (+ a little for changing to the Lubicant soul during the pause after aquiring the Lubicant soul, instead of doing it after getting Ronginus' Spear).
Also, the rounded corners in this area don't allow for the 1rng/2frames trick. Uncool.
If you liked that, you'll love my next trick: monster drop search! Find when monsters will leave drops! Takes the drudge out of drop manipulation! Become rich with ease! Impress ladies with your collection of antique weaponry!
This script puts a display in the top-right which lists all enemy types on screen (except bats). The display looks like this:
r Basilisk
c5,23, r4, Final Guard
tl;dr version: Final Guard has a common drop which will drop in 5 or 23 RNG cycles' time, and a rare drop which will drop in 4 RNG cycles' time. Basilisk has a rare drop which won't drop within the search window (40 cycles). Even with this script, it will take some trial and error to actually get the drop; but it's a lot more guided trial and error than it would have been otherwise.
Detailed version: Each monster type has a common drop and a rare drop. Either drop may be null (ie no drop). These drops have a value indicating how rare these drops are: the higher this number is, the less likely a drop is to happen. Moreover, when a monster dies, only one of these drops will be checked for: 3/4 of the time the common drop will be checked (even if it's null), the other 1/4 of the time, the rare drop will be checked (again, even if it's null). As a result, in order to get a drop, you need the common/rare choice RNG call to succeed, then you need the immediately following RNG call to satisfy the rarity function. A common drop with the same rarity value as a rare drop is therefore 3 times more likely to drop.
Incidentally, an increase in rarity of 1 is exactly equivalent to a reduction in LCK of 64. No drop may happen more than 1/4 of the time, no matter how high your luck. For scale, the common items in AoS runs are: Baselard - rare:30, Combat Knife - rare:15, Rotten Meat - common:10 (while spoiled milk from evil butcher is rare:30), Muramasa - rare:40, Final Sword - rare:50. The same item may have different chances from different monsters: baselard is rare:30 from zombie but common:20 from evil butcher.
To translate a rarity into a total probability, calculate 1/(16+4*rarity-floor(LCK/16)) for rare items, and 3/(16+4*rarity-floor(LCK/16)) for common items, clamped at a maximum probability 1/16 (rare) and 3/16 (common). So with LCK<16, a zombie's baselard (rare:30) is 1/(16+4*30) = 1/136. A luck of 100 would change this to 1/(16+4*30-6) = 1/130. A luck of 1000 would change it to 1/(16+4*30-62) = 1/74.
Final sword (rare:50) at luck 0, 100 and 1000 has a probability of 1/216, 1/210, and 1/154 respectively. IOW, boosting luck is not worth it, and is less worth it for rarer items. And given that luck operates at a granularity of 16, the enchant souls ghost dancer and gremlin and the various luck-boosting items offer such wimpy LCK boosts that they often don't change the resultant probabilities at all.
The Rare Ring has two effects: first, it makes rare drop checks happen 3/8 of the time instead of 1/4, and it doubles the probability of all item drops. So the net effect is common drops happen 5/3 more often, while rare drops happen 3 times more often. (The resulting probability formulae are left as an exercise to the reader.)
Known problems with the lua script: It's not very efficient (it would be faster to cache results, but I don't have the time or motivation to do that) and it thinks that destructable walls are really bone pillars.
I want to look at the soul drop code next, but I can't promise anything. It depends on seemingly random memory locations, and is several times more complicated than the item drop code.
(Thanks to Hoe, whose post here got me started on this.)
EDIT (22/11/2010) more detail on probabilities.
I've been working on an improved run of this category for a long time, and I am sure that mine was faster than Kriole's. However I have no access to it right now since I left it on a HDD in another computer.
With regards to cracking the PRNG (Pseudo-Random Number Generator): I wrote a tool in plain c++ which actually tells you when you can get certain soul/item drops, but I left it along with the wip mentioned above. Anyway, I might be able to get to them in a week or so, hence you can decide whether to continue this frame war! ;)
EDIT: Oh no, I hate Lua, at least for now :(
<klmz> it reminds me of that people used to keep quoting adelikat's IRC statements in the old good days
<adelikat> no doubt
<adelikat> klmz, they still do
With regards to cracking the PRNG (Pseudo-Random Number Generator): I wrote a tool in plain c++ which actually tells you when you can get certain soul/item drops, but I left it along with the wip mentioned above.
I'd be very interested in such a tool to lua-ify it. It'd also be great to get the soul and item drop algorithms onto the resources page.
I got an old WIP of my new run from ljffdb2. It only reached where the first death glitch was used. I am wondering if I should continue from it or wait until I can get back my latest WIP.
EDIT: I'll post it here anyway: http://dehacked.2y.net/microstorage.php/info/1016830204/cvaos-klmz-new.vbm
EDIT 2: What is most worth mentioning in this WIP is the trick to produce a land-cancelled backdash on an edge corner.
EDIT 3: Unfortunately, I won't be getting my latest WIP (and the tool, duh) anytime soon, so I guess I'll instead continue with this old WIP and redo half of the gameplay. XD
<klmz> it reminds me of that people used to keep quoting adelikat's IRC statements in the old good days
<adelikat> no doubt
<adelikat> klmz, they still do
Further to my item drop script, I have made a new lua script: soul drops. Displays upcoming random numbers which will yield souls.
There are a few caveats:
1. it doesn't display bats, because I don't yet know how to distinguish between null enemies and bats.
2. it assumes you don't already have the soul. As written below, if you have a given soul, its drop rate is lower.
3. it assumes that location 020000a1 >= 16 (that is, it assumes the target value is always 7). IME it is always exactly 16. Please put a watch and let me know if this assumption is ever wrong. I have no idea what 020000a1 codes for.
------------------------------------------------
Soul drop mechanism
Soul drops aren't as complex as I thought they were.
Each soul has a rarity. The probability of getting a soul drop is T/(32 + 8*rarity - floor(LCK/16)), where T is the target value. Possible values are:
You already have the soul: T=3
You don't have the soul and 020000a1 < 16: T=6
You don't have the soul and 020000a1 >= 16: T=7
If you are wearing the soul eater ring, then the target is increased by 8, more than doubling the soul drop probability. Once again the LCK stat is almost useless, and if a LCK boosting item doesn't boost your LCK beyond a 16-multiple boundary, it won't change the probabilities at all. One point of rarity is worth 128 points of LCK.
Some notable rarities: Bone Pillar:180 Catoblepas:50 Lightning doll:56 Valkyrie:50 Nightmare:20 Lubicant:80 Gargoyle:180 Ectoplasm:150. Rarities are at index 0x12 in the monster data tables.
Excellent stuff, rhebus! Kind of unfortunate you came up with this already after every major category has been largely covered with technically superior submissions, but, in case something big comes up in the future that will warrant another iteration of improvements, this will definitely be useful.
Warp wrote:
Edit: I think I understand now: It's my avatar, isn't it? It makes me look angry.
Excellent stuff, rhebus! Kind of unfortunate you came up with this already after every major category has been largely covered with technically superior submissions, but, in case something big comes up in the future that will warrant another iteration of improvements, this will definitely be useful.
Yeah, but it was those improvements that motivated me to do it. :/ This script is like experience - you get it right after when you needed it most.
In any case, it makes non-TAS play more fun by reducing the grind for That One Soul.
If my memory serves, there is a flag indicating whether you are playing in NewGame+ mode, and if you do, your have bonus chance on getting souls. That flag must be the 0x020000a1 value.
So far, the only uncracked thing about random drops is heart.
<klmz> it reminds me of that people used to keep quoting adelikat's IRC statements in the old good days
<adelikat> no doubt
<adelikat> klmz, they still do
If my memory serves, there is a flag indicating whether you are playing in NewGame+ mode, and if you do, your have bonus chance on getting souls. That flag must be the 0x020000a1 value.
Aha. I think it's hard mode rather than newgame+ -- if you freeze the value to 0x10 in a normal game, you get all the hard mode goodies (Kaiser Knuckle and so on). I may fix this at some point -- or someone can clone my gist and do it for me :D
So far, the only uncracked thing about random drops is heart.
And coins. But while noone cares too much about coins, hearts may in theory be useful in a TAS.
So far, the only uncracked thing about random drops is heart.
Heart drop lua script.
You need to hit the monster when the random number equals at least 7, because hearts are the last thing to be checked for. Random numbers must be spent for soul, item, and gold first.
Overall death algorithm
When a monster dies, the game does the following, in order:
Checks for soul drop
Chooses whether to check for rare or common item
Checks for the given item
Checks whether to drop gold (if so, checks how much)
Checks whether to drop a heart (if so, checks whether small or large)
It stops at the first successful drop. So if an item is dropped, neither gold nor heart will be checked for. Soul drops and item drops have been explained in previous posts in this thread.
The target location must be accessible in order to drop anything other than a soul. Monsters which don't drop items will never drop gold or hearts.
Heart drop mechanic
There is a base 1/80 probability of a heart, checked by the expression ((RNG>>4)%0x400) <= 7.
A surprise to me is that if you are wearing the heart pendant the chance is upped to 1/10 (substitute 0x3f for 7 in the above expression). It seems obvious now, but I hadn't considered this before.
Once the game decides you're getting a heart, there's a 1/4 chance of getting a large heart. if (RNG & 0xc0 == 0) you get a large heart.
Gold drop mechanic
It's very similar to the heart drop mechanic. Base probability 1/80, upped to 1/10 with the gold ring. Not sure what the probabilities of different values of gold coins are, and I don't think anyone cares. :)