Username:
B
I
U
S
"
url
img
#
code
sup
sub
font
size
color
smiley
embarassed
thumbsup
happy
Huh?
Angry
Roll Eyes
Undecided
Lips Sealed
Kiss
Cry
Grin
Wink
Tongue
Shocked
Cheesy
Smiley
Sad
<- 123
--
--
List results:
Search options:
Use \ before commas in usernames
Wiggle wiggle
Torrent needs seeds, at least long enough so one of us can get it and seed ourselves.
I didn't have a tracker attached to the torrent when I made it, so you'll have to add the sda tracker manually: http://bt.speeddemosarchive.com:6969/announce

After the run is timed the statids will be added so unfortunately the video files published will be different.

Also here are the comments I made up for the run:

For the second game to run in 6 years for SDA, I picked the game about moving slowly through space.  I was attracted to this idea because it seemed impossible.  I actually quit the run for a year because I decided that it was.  You don't play through Homeworld like this.  Sitting around collecting every rock you can is normal.  Carefully stealing every ship is normal.  Building anything besides scouts is normal.

My initial goals included having the run be under two hours, and using only autosaves.  I didn't achieve these goals.  But, I was able to avoid compromising otherwise.  I don't stop to collect resources, or to wait for something to finish salvaging.  Mostly I kill only mission objectives, and accept few to no losses.

One aspect of Homeworld makes running it different: it's open source.  For this reason, I can observe the level triggers and know exactly what must be done (most of the time).  Some of these end up having funny names:  movement is initiated by a FuckOffTimer; Kharak on fire happens during OhMyGodTheyKilledKenny.  The Bridge of Sighs was originally just a mining facility, according to naming conventions.  A deleted mission between the fourth and fifth levels is retained in the code.  Mission 6 ends after eight hundred and forty seconds, and not because of any asteroid locations.

The simple glitch that made this time possible is called the battleball.  In Homeworld, strikecraft can guard a friendly ship by surrounding in it while in a sphere formation.  Incidentally, they'll also pivot to face any threats while being aggressive.  And, they can move independantly of their direction to follow their leader.  Usually this is reserved for heavier corvettes guarding slow moving workers.  But if your center is a scout, and the guards are all scouts, and the whole group uses their special boost, then you have a ball shaped death machine capable of firing constantly in any direction while moving faster than things can hit it.

This techinique was effectively banned or at least panned in multiplayer.  It does have some flaws for speedrunning, though.  The target the ball fires at is not picked by the player, sometimes not what needs to die at all, and may not always just be the closest thing to the ball.  In fact, the ball's firepower might be split up between two targets.  In addition, the ball is vulnerable to getting hit even a little, which causes the ball radius to expand and lose the ability to auto-acquire targets.  In this case I must select every scout but the center one and tell them to move away and then immediately guard again, lest they fall behind.  And if the center scout dies, that's just a restart right there unless I'm just distracting them.  Too many scouts usually die in the time it takes me to reorganize the ball.

Besides scouts I build salvage and repair corvettes where it's useful, and just one extra resource collector; and also several destroyers up to my max.  I salvage only a few ships and retire a couple of them immediately.  No ion frigates, no carriers, no interceptors.  I grab 5 multibeam frigates on the two missions that they're available, and the spared missile destroyer at great effort.  I had hoped to give everything a kamikazical purpose by the end, but there ended up being no room for such sentimentalities.  I wonder if any of my original scouts made it to the end...

m1
This one can't really go bad, the scouts should just get done before the salvage corvette gets in place.  You can kill the first set of drones before you get the objective, and it'll never complete it.  Also on board is getting my research ship, who becomes the resource collector's buddy.

m2
If you didn't notice before, there's a pattern in HW of one long mission followed by 3 short ones.  This is the first long one, although it really should be shorter for how much content there is.  The carrier makes sure you don't try and attack it prematurely by having god-tier stats.  If I let it get too close, it'll murder all of my scouts.  Somehow it gets weaker by the time two missions pass.  The end goal is to kill a certain number of fighters or a smaller certain number of corvettes.  I take more losses from corvettes but it's faster to kill them.  They pop out one after another and line up to get chewed up.

m3
Call me a horrible person but I found that it saves at least a few seconds to let another hundred thousand people die.  I salvage the one frigate that gets antsy when you get near.  You need to neutralize the last two ships before you take in the last cryo, or the game flow fails.  The fastest way to do this is to grab onto them but not take them home.  The best time to do this is, unfortunately, after they've killed two trays.

m4
This one is amusing in that I kill the boss first, and then his little minions.  I kept a full load in my collector on the last mission to have the Bentusi warp in faster.  Mistakes here are almost impossible unless you don't make it to the ions by the time they warp in near your mothership.  Near the end of this mission I get the battleball to a very deadly size.

m5
I almost gave up on this mission because I couldn't decide what to salavge from it, and keeping any salvagers alive was so complicated as well.  I think my final solution speaks for itself.  The defenders also gave me trouble until I decided to kill them with the direct stategy of placing my center scout suicidally next to them.  This kills em right quick.

m6
Here is the longest mission, so long only because of a single timer trigger that's 840 seconds long.  I do my best gather things and kill asteroids.  THe bentusi show up as well because they have a crush on me.  I ruined a good attempt by force firing at their mothership which not only extended their scene but made them angry enough to blow me up.  This recording was a one frame improvement over my previous best, so I decided to move on.

m7
Oh, how long was I stuck in this garden.  This introductory mission is nothing, you just get him to run away four times and you're done, no hyperspace drama needed.  Here also my destroyers get done, I could've gone back to the last level to have it get done earlier, but they aren't really helpful yet.

m8
I recorded this haphazard time on a peaceful Wednesday morning.  The goal of this mission is to simply kill the 3 motherships, but one of them will be given invulnerability after you kill the others, and fly to their homeship.  If the last two could die at the same time exactly, perhaps with ions or a kamikaze, you could shorten this significantly.  I was never able to.  Because of this, I had to conserve my scout fuel anally.  Normally you'd dance the ball with boosts, not slow movements.  This made the ball very vulnerable to auto-retargeting.  Too many segments ended from random bullets scaring my scouts into spreading out.  At the end of this segment, I had figured that they would run out of fuel very soon and so checked on how bad the situation was a home.  And then something else happened.  You don't see it, but the last mothership arrived within 5km of the old ship, which makes it vulnerable again, and apparently I was very close to killing it.

m9
You'll see at the beginning of this segment how lucky I was.  What I have to do is get a salvette out and about to the ghost ship as straight as possible without dying.  Also, the scouts have to get out and about to killing the ghost ship as quick as possible, as I need the ships it gives me without having to salvage them.  The bad news is that the GS isn't auto-targeted by a battleball.  The worse news is that there's a missile destroyer amuck and it kills scouts without trying.  Options are to distract them and salvage one by one, or other such wussy nonsense.  I choose to take significant losses while switching formations between sphere and custom while on aggressive.  Going to sphere will point the scouts in the right direction if they're far away enough, while custom allows them to move quickly.  This lets me take less missile hits and avoid most everything else.

m10
The supernova.  Another long one.  I retire one slow ship and one inefficient.  The repair corvettes I use over support frigates for their speed and slightly faster repair rate.  They don't survive.  However, the scouts do somehow.  And they get all the way there before the frigs, even with having to kill three capitol ships.  Their purpose is to distract, enough so that I don't take any losses.  The station, the ions, and the defenders all need to die.  Preferably, the defenders would die a little before the station, since that would mean that one or two ships were wasting their time getting into attack range for each one.  But this is a good outcome as it is.

m11
Simple go forth and kill.  The Bentusi don't defend themselves for whatever reason, even though they weren't doing anything special, and they could certainly kill me if they wanted.  As usual, the basic frigate is considered not a threat for the trigger's ending purposes.  A long cutscene usually fills this mission.

m12
Some gravity wells here, but I only kill the three I see next to me.  Before that I kill  a frigate associated with a timer that comes in later.  My scouts are luckily not targeted by the missile destroyer which also goes down.  The scouts get there in time to kill everything before the timer lets up and the capitol ship unhides.  This ship's death brings out Elson (named after an imaginative painter, look him up).  His friends don't like him anymore so I kill them.

m13
This one's great.  Normally a junk dog gives you guff, but I don't take anything but a handful of scoots in here.  Wonder if you can capture him?  He'd be so cool to have around.  Anyways, my fighters get picked off one by one until I get one to ram itself into the side of the office and get the linkup sacrificially.  Hey, it's his fault that he came back out.  Who put all these guns here anyways?

m14
"This is a long mission get some coffee" - gamefaqs
Happily I made this one shorter than the on rails level m6.  This is the first where I take frigate losses, although at this point I know what I need to finish the game, and won't be getting any new ships.  The strat here involves distracting a significant chunk of the ball so that two things can occur:  my big ships don't gather many friends; and so the ball will reformulate away from the objective (???).  This leaves the inhibitor guarded only by several cloaked ships that are not quite so easily distracted: you have to get close to them, fire on em a little.  I do grab some unwanted friends but they aren't substantial.  Before I even get here I need to prevent some reinforcements from coming in by killing the nearest hyperspace gate.  The trick here is to hurt it enough so that fighters come out but not frigates.  To kill all but one strikecraft is the next goal, and then finish off the gate.  If I kill everything immediately then big ships come out.  Anyways, everything ends up dying nicely.

m15
This level is pretty awful design.  Why can't I just salvage asteroids anyways?  And the 'headshot' rock is so tiny it's almost cute.  Starting here capitol ships will ram you, so it's a simple under and behind.  The multigun corvettes have to die first or they'll break up the scouts.

m16
Last one, I break it up into two for one reason: I was sick of running this game!  First half is setting the scouts out and taking care of the three groups that attack me.  They'll only attack my mothership except the fighters, which the missile destroyer takes care of.  Salvettes on the bottom ions and focus on big ships first.  Mass repairvettes.  Switch back every once in a while to my scouts to have them boost.  Just in time, they get to the mothership, which is the only thing that needs to die.  However, I also kill some fighters to make losses and distractions minimal.  After it's on fire, I wait until I lose my nerve, and go out with a bang.

Thanks to Nate, Uyama, Radix and DJGrenola; Flip, Breakdown and dex; VorpalEdge, Lag.Com, and everyone who pushed me along.  And also to you for watching!  I love you.
Wiggle wiggle
One more piece left on the Normal Quality, then I can split it up and throw it on Youtube or Mediafire or some such for people to see.
If you get anything of anri's on to Youtube let me know, I was never able to have it upload right.  If there can be a spot on YT for the run, I'd prefer it be on either my account or the general SDA one if it's still around, and that it says SDA somewhere.

Also, the only watchable quality is XQ imo.
Edit history:
Fragmaster01: 2010-12-08 08:09:29 pm
Wiggle wiggle
well, Mediafire doesn't wanna accept my uploads(it uploads part 1 and 3, but not part 2), so we'll just wait until I have time to split it for youtube.

Also, Medium quality is still watchable, just you can't read anything in the menus. If you've played Homeworld before, you kinda already know what it says, even if you can't read it.
Funnily enough, Youtube is making just about any regular uploader able to upload very long videos (way over 15 minutes).

I'll see if an upload works for me now.  ETA 1000 minutes eep
Procrastination Nation!
Is this uploaded on youtube?  Would love to watch.
Here's an upload that suffers from a common problem those put on Youtube but encoded from anri.  Audio is in normal time, video is about twice as long.  Not very enjoyable to watch IMO.

Yesterday I caught myself searching yet again for clues on how the scaling works.  Here I found an interesting tidbit:

Code:
//Note: single player order has been changed.  The Previous mission 3
//      where the player meets the traders and fights the Turanic raiders
//      has been moved to mission 4.  Previous mission 4 (capture the
//      enemy ship, see the destruction of your homeworld) now happens
//      in mission 3 with a new background (you fly back to your homeworld).
//      This explains the weird ordering of the NISs
//Note2:In addition, the previous mission 15 (mining base) has been moved
//      to Mission 14, with the Headshot asteroid level (old mission 14)
//      is now Mission 15.  The only change this effects is the nislet names


Also here the player's army strength is shown to be calculated by RU cost:

Code:
real32 GetStrengthOfShip(Ship *ship)
{
    // for now, just return RU cost of ship:
    if (ship->shiptype == Mothership)
    {
        return 0.0f;
    }
    return (real32)ship->staticinfo->buildCost;
}


and this is added up by one of two functions, one which occurs during hyperspace and the other 'in universe' (any other time).

Code:
void GetFleetStrengthInUniverseOfPlayer(Player *player)
{
    Node *objnode = universe.ShipList.head;
    Ship *ship;

    spFleetStr = 0.0f;
    while (objnode != NULL)
    {
        ship = (Ship *)listGetStructOfNode(objnode);
        dbgAssert(ship->objtype == OBJ_ShipType);

        if (ship->playerowner == player)
        {
           spFleetStr += GetStrengthOfShip(ship);

            // also check ships inside it:

            if ((ship->shipsInsideMe != NULL) && (ship->shiptype != DDDFrigate))
            {
                // check ships inside too
                Node *insidenode = ship->shipsInsideMe->insideList.head;
                InsideShip *insideship2;

                while (insidenode != NULL)
                {
                    insideship2 = (InsideShip *)listGetStructOfNode(insidenode);
                    dbgAssert(insideship2->ship->objtype == OBJ_ShipType);

                    spFleetStr += GetStrengthOfShip(insideship2->ship);

                    insidenode = insidenode->next;
                }
            }
        }

        objnode = objnode->next;
    }

    spFleetStr += GetStrengthOfRUs(player->resourceUnits);
}


Non-scripted level instructions are generated, apparently into a .nis file, but I haven't found how this works exactly.
The player's fleet strength is eventually used in the scaling function which uses info from the .nis file.

Code:
void SetFleetModifier(sdword level,GetStrengthOfFleet getStrengthOfFleetFunc)
{
    real32 comparestrength,comparestrength2;

    comparestrength = BaseFleetStrengthForLevel[level];
    comparestrength2 = AdvancedFleetStrengthForLevel[level];

    if ((comparestrength == 0.0f) || (comparestrength2 <= comparestrength))
    {
        spFleetModifier = 0.0f;
        return;
    }

    getStrengthOfFleetFunc(&universe.players[0]);

    // set spFleetModifier to 0 to 1 based on spFleetStr commpared to comparestrength and comparestrength2

    if (spFleetStr <= comparestrength)
    {
        spFleetModifier = 0.0f;
        return;
    }
    else if (spFleetStr >= comparestrength2)
    {
        spFleetModifier = 1.0f;
        return;
    }
    else
    {
        spFleetModifier = (spFleetStr - comparestrength) / (comparestrength2 - comparestrength);
        if (spFleetModifier > 1.0f)
        {
            spFleetModifier = 1.0f;
        }
        else if (spFleetModifier < 0.0f)
        {
            spFleetModifier = 0.0f;
        }
    }
}


Above were all in singleplayer.c , but in levelload.c is an interesting conditional:

Code:
if (!singlePlayerGame)
    {
        numShipsUpper = 0;
    }
    else
    {
        if ((numShipsUpper) && (spFleetModifier))
        {
            // set numShips to be between numShips and numShipsUpper, based on spFleetModifier (0 to 1)
            real32 diff = (real32) (numShipsUpper - numShips);

            if (numShipsUpper < numShips)
                dbgFatalf(DBG_Loc,"Error numShipsUpper %d too low on line %s",numShipsUpper,field);
            else if (numShipsUpper > numShips)
            {
                diff *= spFleetModifier;

                numShips += (udword)(diff + 0.5f);
            }
        }
    }


Which, I think adds up to: a base army strength that begins to increase if your RU cost total is greater than theirs.  There's still a lot to understand here.  The 0.5f term is mysterious to me.
Edit history:
ZenicReverie: 2011-02-22 05:35:45 pm
Waiting hurts my soul...
Quote:
The 0.5f term is mysterious to me.
Mysterious how? In this case it seems to round the value to the closest integer value before casting the value to an unsigned long.

Let me know if you want someone to talk about this stuff. I'm usually on irc 8 - 10 pm pst if you want to chat.

I have the game, I should really get to playing it one of these days...
sda loyalist
Yeah, the (Int)(x + 0.5) thing is a common programming tool to round to nearest whole number. Interesting finds, though.