Differences From Bolo Gameplay

From WinBolo

Jump to: navigation, search

The initial creation of this page was taken from the Wayback Machine of Oscar's gripes. More differences should be added here as they are encountered. Currently, they are organized by Oscar's (presumed) priority.

(Oscar: I stand by my words! And I'd be glad to clarify or in other ways help out if anyone had the courage to take on this heroic project. My point all the way has been that Bolo (0.99.7 for the Mac) was (is) an extremely well balanced and thought-out game. The intertwined dimensions of play (skill, tactics, strategy, knowledge, anticipation) together with the exactness and preciseness of the Bolo physics make Bolo far more complex and rewarding than Winbolo, at least for me - and correct me if I'm wrong - the majority of old-school, Mac Boloers. I think the reasons for the meager player migration from Mac Bolo to Winbolo will be evident to PC players only if they are given the chance to experience true Bolo on their own platform. In short, Winbolo has been a great leap, but there are greater leaps ahead. Feel free to contact me at oscar@lindstein.se.)

Also be sure to see Sheeps' WinBolo Wishlist. His list has not been integrated into this or Project Ideas yet


Priority 1

Tank jerking (Fixed!)

When a tank is hit in macbolo, velocity is altered for the tank, in the direction of the shell that hit it. In winbolo, there seems to be no actual increase in velocity in any direction, although the tank is violently flung a few pixels in the direction of the shell that hit it. And I mean violently as in instantly. In bolo, every shell that hits give the tank a gentle push. In winbolo, the original motion of the tank is simply decreased and the tank is instantly moved. This is insane. It makes my eyes hurt. A must-change.

See: tank.c - tankIstankHit()

Tank deceleration (Fixed!)

This has got to be fixed. The brakes on the winbolo tank really screw up my play. It's hard for me to give exact figures here but for comparison, when driving a mac tank with full speed on grass, towards a base, releasing the "forward" key when the turret is adjacent to a base will make the tank slow down to stop while on the base and the turret sticking out just a few pixels from the base. Doing the exact same maneuver in winbolo results in the tank driving almost completely off the base, just a few pixels of the rear of the tank is covering the base square.

See: tank.c - tankAccel()

Tank width

This was one of the first things I noticed. The tank seems to run over walls a bit on the sides. It seems like the consistency mask under the tank is narrower than in macbolo. It's either that or the mask under the walls. This really affects the feel of the game. The difference is about 2 pixels for the sides and 4 (!) pixels for the rear. A macbolo tank cannot climb up or cover a part of a wall, no matter what side of the tank that is against it, with more than 1 pixel. To try this I drove left of a wall the closest i could, and then rotated the tank so the rear was against it. In macbolo, the rear corners of the tank were "hard" and pushed the tank away from the wall. In winbolo, part of the rear floats into the wall. And that is not right :)

See: tank.c - tankIstankHit()

Pillbox firing range (Fixed!)

Needless to say, this is a crucial factor in pillwars. In macbolo, a pill firing horizontally will not under any circumstances hit a wall that is placed at square 9 from the pillbox. In winbolo, this is the case though. It seems that the pillbox firing range is about 1/2 a square too far.

See: pillbox.h - #define PILLBOX_PILLBOX_FIRE_DISTANCE (called from pillbox.c - pillsUpdate()

Preservation of velocity/Friction of walls

This one puzzled me for a while, but then I figured out what it was. Say you drive your tank against a wall. Example is Everard island, SW coast, where there are walls that you can drive against while on boat. The scenario is this. You come from SW, heading NE with full speed. When your tank hits the wall, it starts to slide due E. This is the same in both mac and win bolo. Now you release the "Forward" key and steer left, so the turret is pointing NW. In mac bolo this causes the tank to stop moving completely. In winbolo, the tank, still inheriting some kind of movement energy, will start to move west, continue for a bit, then stop, although no "forward" key is pressed. It would seem that driving adjacent to a wall in macbolo slows down the tank velocity much more than in winbolo. To really see the difference here, drive up to the wall facing NE and stop. Then press "forward". This should, as it does in macbolo, make your tank move east with the speed of approximately 1 pixel per second. In winbolo, the speed is 50 % of full throttle or more. To conclude, there must be two separate factors causing this difference. 1) Winbolo tanks have "wheels" that continue to drive after "forward" has been released. Macbolo tanks just have their velocity which decreases in proportion to the friction encountered. 2) Walls in winbolo are like ice, they have no friction.

tank.c - tankMoveOnLand() tankMoveOnBoat()

Hitting pills

This is a definite must-change. I believe there is an asymmetry in where the pill can be hit. In macbolo, if any borderline pixel is in the middle of the gunsight, the pill will be hit. In winbolo, there are differences whether you hit the west or east side of a pill. Generally, pills are harder to hit in winbolo.

See: shells.c - shellsCalcCollision(), pillboxs.c - pillsIsPillHit()

Pill destruction

This one is hard for me to describe. But it becomes apparent when you do the double xav counterclockwise on CT3. You fire 5 shots at the farthest pill, run behind your two blocks and let the farthest pill shoot through the other two. In Macbolo, having done this so many times, the timing has become second nature. Doing this maneuver in winbolo though, when I drive off, the pill closer to the farthest pill isn't dead yet! It always has 2 worths of armor left. I can't say what is the reason for this but it could be that the pill firing rate is slower when the pill is 'ultra pissed', or it could be that the pill being fired at receives less damage than it should. It's not that I'm moving out of pill alert range faster, because the winbolo range exceeds the macbolo range.

Pill firing delay

The pills in winbolo fire too soon when entering their 'alert area'. The difference is about 1/5th of a second. This is killing many of my LGM's. Please save lives by increasing this delay :)

See: pillbox.h - #define PILLBOX_ATTACK_NORMAL

Cursor movement

In Bolo, it is possible to scroll without the LGM cursor being moved around. This is almost true in winbolo as well, but not quite. I find myself misplacing pills all the time because the cursor is too sensitive to movement. The little cursor should follow the big cursor when the screen is scrolled. This is one major reason why pillfighting in winbolo loses all its splendor.

See: cursor.c - cursorSetPos() - Its actually commented out cause it used to work that way but people complained...


In Bolo, every shell you see go into the enemy tank counts as a hit. Even if the game is lagged, the armor damage is summed up and distributed to the enemy tank as soon as possible. In Bolo, this sometimes leads to that you die very suddenly although you never actually saw what got you. This may be annoying at times, but it's still so much better than the opposite, that some shells you fire into the enemy tank never count as hits. And this is how winbolo works. In winbolo, you hear and see your shells plunge into the enemy tank, and you form your tactics after this. To your surprise, the enemy may not die, and this because the hits are not synced. Every hit that is registered locally should also be distributed globally.

See: Networking

Base regeneration (Fixed!)

Winbolo bases regenerate faster than Bolo bases. The difference seems to be bigger the more players that are playing. This leads to inbalances in the game. As a result, base raping is almost useless in Winbolo, which dries out the number of possible strategems.

See: bases.c: basesUpdateStock()

Base "de-X:ing" (Fixed!)

In macbolo, having shot a base to death (x) state, allows it to be run over. This is true allso in winbolo. Difference is, the bases in winbolo become "hard" much faster than in macbolo. This is confusing as I am used to be able to run over an enemy base for a certain number of seconds after it last has been run over by the enemy. This period is relative to the numbers of player in the game. In a 2 player game a newly raped base stays "x" for 1 minute 25 seconds. In a four player game the time is 40 seconds. In a 6 player game the time is 30 seconds.

See: bases.c: basesUpdateStock()' / bases.h #define BASE_DEAD'

Solid Pills

Pills in winbolo don't seem physically solid around the edges. You can drive a tank "into" the pill, up to about 1/3 of the way through the pill, from some directions. The practical effect is that you can drive over dead pills and not pick them up, and you can shoot them without hitting them. In mac bolo, pills are entirely solid, and it changes the feel of the game very noticeably. Beyond being different, the current situation just doesn't make sense. (kax)

See: tank.c - tankMoveOnLand() tankMoveOnBoat() which both lead to tankCheckPillCapture()

Trapped LGMs (Fixed!)

In winbolo, it's very easy to trap builders because when they land on a block or pill, they're immobilized and you have to kill them again to get them back. That wasn't the case in v.997. Rather, if an lgm landed on a solid object (pill or wall), the lgm could run around "on" the object but couldn't run off of it, and you could grab it simply by driving up to the object. The only way to "pin" an lgm was to build something on top of it while it was running. Although this might seem to be a minor point, it's really not -- for example, if you're sitting on a base and send out your lgm and lose it, then you lose that base before it lands, the lgm is lost yet again by virtue of the fact that it's pinned on the now-hostile base. The current situation also makes repeated builder-pins pretty easy, if not trivially so. I played a game with ud yesterday where he pinned my lgm 3x in a row in a 1x1 -- it was a good move on his part and skillfully executed, but that wouldn't have been possible in mac bolo. (kax)

See: lgm.c - lgmReturn()

Priority 2

Tank acceleration (Fixed!)

Again, hard to be precise but the winbolo tank seems to accelerate a bit faster than the mac bolo tank. Enough to intervene with close combat tactics. It also makes it harder to line up when firing against pills. The difference could be resulting from either a steeper curve or a higher initial velocity, or torque.

See: tank.c - tankAccel()

Tank respawning (Fixed!)

In Bolo, the time it takes for a tank to respawn is longer. You may think it's more fun to play than to wait for respawn, but it seriously affects the balance in the game and therefore the respawn delay must be equalized.

See: tank.c - deathWait variable assignment (hmm not a #define)

Gunsight/shooting accuracy

The shells do not explode in the middle of the gunsight. It is imperative that they do since the gunsight is a major factor when lining up for pilltakes.

Is this a gunsight or a shell problem or a drawing problem?

Pillbox alert range

This one was easy to define in detail. Standing on a road facing an neutral pillbox, with the turret parallell with the markings on the road, in macbolo the tank is able to go so far that the road marking is covered by the turret, except for one pixel. At this distance, the pill does not fire. 1 pixel closer to the pill and the tank will be fired upon. In winbolo though, the pill will fire too soon. The difference is 1 pixel.

See pillbox.h - #define PILLBOX_RANGE

Key setup

In Mac Bolo, you can assign several keys to the same task. I personally use this for scrolling. To scroll diagonally on the mac, I set the 'T' key both to scroll UP and LEFT. This cannot be done in winbolo and this is seriously affecting my gameplay.

See: input.c - inputGetKeys() and dialogKeySetup.c for assignment

Priority 3

Gunsight range

The winbolo tank gunsight when fully extended reaches about 2 pixels too far. This is hard to tell exactly due to the differences in the graphics.

Is this a gunsight or a shell problem or a drawing problem?

Message window

The winbolo message window and I are not friends. I'm used to hitting command-M and typing something fast, then using the mouse I click somewhere on the game screen to hide the message window behind it. In winbolo, clicking in the game screen will result in the LGM running off to build something regardless if the Message window is closed or not. Maybe it's just me having problems with this, but it really annoys me. I have to click on the top left "X" to close the window and THAT TAKES TIME. Heh, sorry. Anyway, I understand that some people with big screens and perfect eyesight like to have the message window adjacent and not on top of the game screen. But for me, using 640x480 pixels resolution, this is not an option. What I want is to make any click on the game screen when the message window is 'on top' neutral, so the only thing that would happen is make the game screen 'on top' instead. Another thing that's different is the "Sending message to 3 players" string. The figure in macbolo does not count the own tank, so in a 4 player game it would say "Sending message to 3 players", not 4 as in winbolo.

See: dialogMessages.c

Priority 4

Driving off boats onto land

In macbolo, when driving the boat onto the shore there is a certain force, an amount of velocity change, from the time when the turret surfaces the solid ground until the tank has left the boat. In winbolo, driving from sea to land is like driving from tarmac to grass. There is no resistance, only a time delay. It's hard to say how big this "resistance" in velocity is. But if the tank is on boat, in sea, standing still and adjacent to shore, pointing towards land, pressing "forward" will not result in any movement until after 1 second. If the tank isn't driven more than half a square onto land, releasing the "forward" key will result in this "resistance force" to slide the tank back into the boat. As soon as more than half the tank is on the shore, this "resistance force" will seize to affect the velocity of the tank. Furthermore, this also applies to tanks driving off land onto boats. In winbolo, as soon as more than half the tank is on the boat, the boat seems to put itself under the tank, and the tank+boat stand still. In macbolo, the exact same thing happens, but then there is also the "resistance force" which in an accelerating way pushes the tank+boat into the water so that the rear of the tank+boat is adjacent to the shoreline.

See: tank.c - tankMoveOnBoat()

News Wire Messages

For the feel of the game, I believe I'd want these messages to remain intact as well. It's "Oscar captured a refuelling base", not "Oscar captured a Neutral Base" It's "Oscar captured a neutral pillbox", not "Oscar captured a Neutral Pillbox" It's "Oscar stole pillbox from vert", not anything else including the word "just". The only message including "just" is "Oscar just lost his builder". I mean "vert just lost his builder". :-) And there are no capital letters in the words refuelling base, pillbox, builder, neutral. (Sticks: is there any way to include custom newswire messages? If the server sends a packet letting everyone know that playerA captured a base why not let the client and it's custom message handle the display in newswire?)

Priority 5

Player icons

The enemy players icons in the top right corner are supposed to be red squares, not red balls. Obviously this does not affect the game but it still adds to the feel of the game, which I think is a major factor.

See: draw.c - drawStatusTank()

LGM Arrow

Seems to be close enough to the truth. The only thing that puzzled me while testing was that the 'compass' that shows in what direction the LGM is, 'shuts down' earlier in winbolo because it does that when the LGM hits the center of the tank. In mac bolo, the arrow disappears when the LGM hits the rim of the tank. (Actually, in macbolo he's running 'under' the tank. Not that it makes any sense but personally I'm kind of used to that :) )

See: lgm.c - lgmReturn()

Moving onto a boat

In macbolo, when a pillbox fires at the tank and the tank thus is moved away from the pillbox, if it then is moved onto a boat, it will connect with the boat. In winbolo, the tank will not understand it is on the boat until it is moved by pressing movement keys on the keyboard. This can be tried on Everard Island, south shore, far west part of the map, where the distance from the pill to the shore is ideal.

See: tank.c - tankMoveOnLand()

Tank firing rate

The winbolo tank fires at a marginally higher rate than the mac bolo tank. The difference is about 1/2 shot per full clip. This means that if i press 'fire' simultaneously on the mac and the pc, the winbolo will run out of ammo when the mac tank has 1/2 a shot left.

See: tank.h - #define TANK_RELOAD_TIME

Other differences

Comments added 2003-12:

[21:17] <Nova> Here's another little minor point that I've noticed.
[21:17] <Nova> It isn't too big, but you can't shoot craters from the sea.

Comments added 2003-07:

[02:34]<kax> one thing I'd add that's clear is that winbolo's "hot pill" fire rate is faster
[02:34] <kax> if you take a pill with two of yours, both of yours will die and you'll take maybe 2 shots
[02:34] <kax> you might add that to your list
[02:35] <Oscar> yes
[02:35] <Oscar> good point
[02:41] <kax> O, if you're going to add it that way, you should mention that in macbolo, if you take one pill with two, the second of your two will have ~3 shots left when the enemy pill dies
[02:41] <kax> right now it's kinda vague as to what the situation should be

[02:36] <kax> O, another minor point...
[02:37] <kax> in macbolo, if you drop mines behind you and someone hits them, you won't take damage
[02:37] <kax> in winbolo you'll frag yourself on your own mines
[02:37] <kax> not sure quite why though
[02:37] <bitch> ya
[02:37] <bitch> sorta defeats the point

[02:42] <kax> in winbolo, if you split, it says "quitting"
[02:42] <kax> there's no "left game"
[02:43] <fi-> no matter how you quit it is always the same message in winbolo
[02:43] <kax> that's convenient for me, but others don't appreciate it
[02:43] <bitch> i'm going to make dinner
[02:43] <fi-> so you odn't know if someone netsplit or got mad and left
Netsplits and graceful quits were changed in a previous version

[02:49] <kax> and none of this even addresses splash or the impossibility of driving one tank past another
[02:49] <kax> *sigh*
[02:49] <fi-> and the killing of lgms
[02:49] <kax> the easier solution is just to buy macs for everyone

[02:50] <fi-> i was wondering something
[02:51] <fi-> in macbolo if pillboxes are beyond the firing range of a base...do they still get pissed at u if you then get within their range after shooting that base?
[02:51] <Oscar> no
[02:51] <fi-> another bug
[02:51] <Oscar> guess so

[02:52] <fi-> in winbolo, pbs beyond the range of the base you are shooting or you, will get mad at you if you then wander into their range after shooting that base
[02:52] <kax> it should be said, though, that winbolo is better than it was in the first game with me vs. jolo
[02:52] <fi-> within a screen distance i believe
[02:52] <kax> heh

Comments added 2004-01:

[15:17] <FireIce> [03:13] <underdog> a tank blowing up
[15:17] <FireIce> [03:13] <underdog> will damage pills but not heat them
[15:17] <FireIce> [03:13] <underdog> unlike mac bolo
[15:17] <FireIce> [03:13] <underdog> where they get heated

Starting locations - See starts.c

Personal tools