Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - ctz

Pages: 1 [2]
26
MegaGlest / Re: Rock Solid Stable - Release Time
« on: 16 November 2013, 19:33:13 »
So I just tested 3.8.0-beta1 and 3.8.0 joining by setting
Code: [Select]
const string glestVersionString = "v3.8.0";in source/glest_game/facilities/game_util.cpp for current svn (r4824).

beta1 can try to join 3.8.0; upon joining, beta1 gets an error "Invalid message type: 76", becomes very slow, and gets disconnected.
If 3.8.0 tries to join beta1, the beta1 host gets "Invalid message type: 76", becomes very slow, and then crashes; 3.8.0 gets disconnected and goes back to the main lobby.
(I tested on gnu/linux, don't know if crash also happens on windows.)

So 3.8.0 and 3.8.0-beta1 can never be in the same game together, although they can try to join each other and it is very inconvenient for (only) the beta1 side.  Is that good enough to keep the 3.8.0 number?  If possible, maybe a note can be put into the masterserver message telling beta1 users to upgrade.

27
MegaGlest / Re: Network game stats gathering
« on: 2 November 2013, 20:59:18 »
The columns could use better ordering.

I think the game statistics (kills, deaths ... score) should be contiguous, and the player name and platform should be next to the player type.

28
The loading screen hints seem like a good place.

29
Someone needs to document these hidden key bindings somewhere.

30
I think it just looks wrong when it's not attacking.  And its attack is already pretty dramatic when it shoots out a huge blue ball of magic.

31
See this screenshot: http://i.imgur.com/b5MoFCg.png

The evil dragon in the center is in mid-attack and has the red team color on its body; however, the other two that are waiting for EP (so they are using the stop animation) are transparent in that area (although the color remains on the wings).  This also affects the animation for moving.

32
In the custom game menu I had the default setting but with the second player opened to network, publish disabled.

Then using ctrl-l, I switched to German; no error.  All slots become closed (this should be another bug).  Then switched back to English and encountered this:
http://pastebin.com/raw.php?i=wb4r2jh2
screenshot: http://i.imgur.com/iaIUDxU.png

I was unable to reproduce after restarting the game.

33
Bug reports / Misspellings in Megapack
« on: 20 October 2013, 01:36:01 »
Norsemen faction:
thrull -> thrall.  Thrull is not a word.
med_bar -> mead_bar, and med -> mead.
flyingvalkyrie -> flying_valkyrie.
thortotem -> thor_totem.
*_berzerk (3 units) -> *_berserk.

Indian faction:
firegolem should be fire_golem.
bigtent -> big_tent.
mainteepee -> main_teepee, or perhaps just teepee, since the other tents are called *tent, and "main teepee" sounds boring.

34
Changing maps as the controller when connected to a headless server is extremely difficult.

To demonstrate: join a headless server that is not yours (I tested on Summoner).  You will likely have a different map set from the server and non-negligible latency.

Then try to switch maps to something alphabetically far away from the current map.  There is no map filter on headless, so you must scroll through the whole list of maps.

Frequently, the map will change by itself to something you have already scrolled past (related to latency, or when you have a map that server does not), thus undoing a lot of clicks if you have been clicking quickly.

Eventually you will probably encounter a map that the server has but you don't.  The selected map is now "***missing***".  Suppose that you do not want to download any new maps, so you decline the download.  The map selection now reverts to the alphabetically first map in your set, undoing a lot of your clicks.  If you were unable to get the map you wanted to select, you probably will not be able to get it now.

If you mv ~/.megaglest/maps ~/.megaglest/maps2 (thus removing all non-default maps) it will get somewhat easier to scroll, but users should not have to do that.

Possible solutions (or feature requests?):
*Make the headless server not need to know anything about the map, so then only the controller's and clients' map sets need to matter.
*Headless server should send the controller a map list upon join, and only those maps that are on both server and controller are scrolled through.
*Make a better selection interface, like a drop-down menu, so that selecting a map does not require temporarily selecting each one of the maps between the current one and the target one.

35
Correction to titi's report above:
I attacked my spearthrower with the priest, and had a spearman in the splash radius.  Then I moved the priest to stop the attack, and a few seconds later titi got disconnected by CRC error.

36
A CRC error occurred on r4576 with tomreyn as the host, I (lyra) the client, same machines as last time (above post).
This error happened with the same settings as last time and a similar situation, with tomreyn walking a mummy to the opposing teams' area to provoke them and leading them around to fight each other.

tomreyn's server logs: http://tomreyn.megaglest.org/debugCRCWorld_tomreyn_20130927_2.tar.xz
my client log: http://www.sendspace.com/file/os3yni and terminal output: http://pastebin.com/raw.php?i=LvY27g2A

37
In both games I was lagging a lot, so tomr had to pause frequently.

At the end of the first game, I received a pop-up message about an unhandled error being detected, and a crash dump being generated.  I clicked "OK" on that window, and then another one popped up, with another crash dump.  I continued clicking "OK" until about 25 crash dumps were generated, when I used task manager to kill the process.  The terminal output is here:
Code: [Select]
megaglest.exe v3.8.0-dev
Compiled using: VC++: 1600 on: Sep 24 2013 00:40:18 platform: Windows endianness
: little
SVN: [Rev: 4567] - using STREFLOP [SSE] - [no-denormals]
Resume In Progress Game: 1799
Resume In Progress Game: 1799
Resume In Progress Game: 1799
Resume In Progress Game: 1799
Resume In Progress Game: 1799
Resume In Progress Game: 1799
Resume In Progress Game: 1799

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: 2dba7e8f-e75e-4286-8db5-7c184836492f.dmp
Succeeded: 1
[] *ERROR* In [network_interface.cpp::Glest::Game::NetworkInterface::DisplayErro
rMessage Line: 171] sErr [Server has Disconnected.]
[] *ERROR* Access violation. Illegal write by 0 at 00|Unknown module|Unknown fun
ction
8885735|Unknown module|Unknown function
8944605|Unknown module|Unknown function
5603734|Unknown module|Unknown function
5248810|Unknown module|Unknown function
6237109|Unknown module|U []
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: f2361900-dbbd-424d-ad01-765e58b044bc.dmp
Succeeded: 1
[] *ERROR* Access violation. Illegal read by 8872594 at 7397181288872594|Unknown
 module|Unknown function
8885012|Unknown module|Unknown function
5239103|Unknown module|Unknown function
5273963|Unknown module|Unknown function
6232970|Unknown module|Unknown function
62335 []
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: ff0d5608-d6c2-4be0-9a2e-fb72b1a34f5a.dmp
Succeeded: 1
[] *ERROR* Access violation. Illegal read by 8872594 at 7397181288872594|Unknown
 module|Unknown function
8885012|Unknown module|Unknown function
5239103|Unknown module|Unknown function
5273963|Unknown module|Unknown function
6232970|Unknown module|Unknown function
62335 []
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: ea77415e-0db7-424e-818e-86b482719cda.dmp
Succeeded: 1
[] *ERROR* Access violation. Illegal read by 8872594 at 7397181288872594|Unknown
 module|Unknown function
8885012|Unknown module|Unknown function
5239103|Unknown module|Unknown function
5273963|Unknown module|Unknown function
6232970|Unknown module|Unknown function
62335 []
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: ef35949e-198a-4c69-aeae-3e850594aec5.dmp
Succeeded: 1
[] *ERROR* Access violation. Illegal read by 8872594 at 7397181288872594|Unknown
 module|Unknown function
8885012|Unknown module|Unknown function
5239103|Unknown module|Unknown function
5273963|Unknown module|Unknown function
6232970|Unknown module|Unknown function
62335 []
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: 2d817e72-3ee3-4d14-8ad5-860643767a4f.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: 026c3989-8634-479c-acf5-ed06f5327d4e.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: 6fb57812-b0c5-4822-bcb7-aa255d0a8c98.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: 6805d7ee-4968-4652-a9d5-a039a06da5d8.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: 9832fd3c-0a9d-484e-b9bb-a8366f762725.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: b7eb32c4-07fc-4177-8766-3d472f996922.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: 28819e25-d492-46c4-bafc-4ee7e1ea2922.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: 61bd133b-d527-40c3-a6e1-164ad7ff87a2.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: 17311d4d-8b5c-4f81-a467-4757e066daf5.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: cc00e5da-1947-4538-b83e-b4a58fab4f1a.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: 8c688a2c-68fb-419c-aab1-ae4cf62509ac.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: b12c51e9-2d2e-48e4-98fc-26e49744baf1.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: 339b5920-a8b5-4d8b-9501-b709101fb382.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: 1acd4cd3-9025-4c7d-a388-0a487f851b75.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: dafe24db-75f7-44af-acac-5cdca7734869.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: 46f75623-3ca2-4201-a84a-59652b15601d.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: 92019e8d-d5f7-4821-8b06-7ce89388517e.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: 2140e618-88cb-4b12-b7c5-461b39a6c2b9.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: 0da5581e-c9e5-4678-8427-f3799075a799.dmp
Succeeded: 1
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: 8d8d80a0-6383-494c-b85c-98aea0659825.dmp
Succeeded: 1

In the second game, I saw titi get disconnected.  Shortly (many seconds) afterward, I got disconnected and was able to view the results screen.  But when trying to exit, a crash dump was generated and the game froze.  The terminal output is here:
Code: [Select]
megaglest.exe v3.8.0-dev
Compiled using: VC++: 1600 on: Sep 24 2013 00:40:18 platform: Windows endianness
: little
SVN: [Rev: 4567] - using STREFLOP [SSE] - [no-denormals]
Resume In Progress Game: 1799
Resume In Progress Game: 1799
Resume In Progress Game: 1799
Resume In Progress Game: 1799
Resume In Progress Game: 1799
[] *ERROR* In [network_interface.cpp::Glest::Game::NetworkInterface::DisplayErro
rMessage Line: 171] sErr [Timeout waiting for message.]
[] *ERROR* In [network_interface.cpp::Glest::Game::NetworkInterface::DisplayErro
rMessage Line: 171] sErr [Player lyra, disconnected from the game.]
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client
Check save world CRC to log. isNetworkGame = 1 fileSuffix = _client
Save to log debugCRCWorldLogFile = C:\Users\TheAdmin\AppData\Roaming\megaglest\d
ebugCRCWorld.log_client
[] *ERROR* In [window.cpp::Shared::Platform::Window::handleEvent Line: 352] (c)
Couldn't process event: [UNKNOWN ERROR] codeLocation = f

======= In MinidumpCallback...

***ERROR details captured:
Crash minidump folder: C:\Users\TheAdmin\AppData\Roaming\megaglest\
file: e58c81a8-fc3a-4056-9ef2-ede934f933a8.dmp
Succeeded: 1

38
Closed feature requests / Re: Include version string in IRC real name
« on: 19 September 2013, 03:46:35 »
I implemented this.  No need to patch a 3rd party library.

Here is the result of a whois:
Code: [Select]
/whois MG_lyra_297
MG_lyra_297 [~MG_lyra_2@(host)]
realname : MegaGlestv3.8.0-dev|r4548M|Linux-X64|GNUC: 40703 [
channels : #megaglest-lobby
[...]

The realname includes the version, SVN revision, platform, and compiler.  As you can see, the compiler string is incomplete because didn't fit in 50 characters.  Some space could be saved by removing "MegaGlest" I suppose.

Here is a diff of the changes I made:
(click to show/hide)

39
Closed feature requests / Include version string in IRC real name
« on: 16 September 2013, 06:52:35 »
It is not possible to easily determine the MegaGlest version of a player with the name MG_name_### in the #megaglest-lobby channel.  As a result, one may possibly ask to play a game, only to find that the versions are incompatible.

Currently, this is the result of a /whois on a MegaGlest client:
Code: [Select]
/whois MG_lyra_68
MG_lyra_68 [~MG_lyra_6@(host)]
realname : megaglest
channels : #megaglest-lobby
[...]

The current "real name" of all MegaGlest clients is "megaglest".  Adding the version string to the IRC "real name" (e.g. so that it is "megaglest 3.8.0-beta1" in the case of the current beta version) may make it easier to determine a player's MG version--just do a /whois.

It's not possible to do a /whois from within MegaGlest, but this might still be useful to people who sit around in the channel with their IRC clients.

Implementation of this should require adding the version string to the last argument of irc_connect in source/shared_lib/sources/platform/posix/ircclient.cpp lines 790 and 1001.

40
Pressing the shortcut key for attacking (default is 'A') selects/deselects the primary attack for the selected units.  There is no keyboard shortcut I know of that allows for selecting the secondary attack, which is selected by clicking its icon or automatically activated by attacking (right-clicking) a unit that can be attacked by secondary but not by primary.

I propose cycling through the attack skills, so e.g. if Tech's Battle Machine is the selected unit, pressing 'A' would select, in order, Attack->Attack Arrow->no action.

If multiple units of the same type are selected, cycling should work as if only one unit is selected.  If units of different types are selected, only the primary attack should be selected.

41
If it's not a bug and attack rate is supposed to be based on anim-speed, then the attack speed listed in the game should at least show the anim-speed value.

I would think that anim-speed should only control the speed of animation however, to make it possible to have, say, multiple attacks per animation cycle (possibly useful for a rapid attack if you still want a relatively slow animation, e.g. flapping wings).

Why would it be useful to attack twice per skill cycle, vs. just having two skill cycles in the same time?

42
speed affects the rate of EP usage; I tried it with an archmage.  With speed 30, the archmage spent EP slower than its rate of fire; with speed 0, the archmage spent no EP after the initial 300.  It also affects how long the unit continues to attack after its target is dead.  If the rate of fire was determined by speed instead of anim-speed, I think this would mean that the unit would fire at most once at a dead target before quitting.  I am guessing that each unit has a check for "is my target dead" only once every attack cycle (as determined by attack speed), and continuing to attack after the target is dead is unintended behavior.  Also, you might notice that other units like catapults will also attack dead targets for a short time; I think this has to do with attack-start-time offsetting the time of the attack cycle.  I suppose it is acceptable to attack at most once after the target is dead, justified by something like the catapult-operator thinking, "my catapult was in the middle of firing; I can't stop it once it starts because I'll get hurt."

I don't think it was intended that attack speed be controlled by anim-speed, considering the listed attack speed in the game is the speed value, and EP usage rate is controlled by speed.

43
In the xml for units, there are lines like this:

From tech's battle_machine.xml:
Code: [Select]
                <skill>
                        <type value="attack"/>
                        <name value="attack_arrow_skill"/>             
                        <ep-cost value="0"/>
                        <speed value="52"/>
                        <anim-speed value="65"/>
[...]

In the game, the "attack speed" displayed when one hovers the cursor over the attack icon is the speed value.  One would expect that this is the rate of fire--normally it is, and the units are centishots per second (also, I recommend changing the game text to "attack rate" or something like that, since "attack speed" could also be interpreted as how fast the shots move).  For most combat units, speed and anim-speed for attacking are the same, but for some, like the Battle Machine's attack arrow, they differ.

The actual rate of fire is not controlled by speed as one would expect, but by anim-speed.  To confirm this, change anim-speed to something very different without changing speed.  Or change speed without changing anim-speed.  Notice that changing speed doesn't do anything but change the displayed attack speed, but changing anim-speed has an effect on the rate of fire.

I suppose fixing this will likely affect game balance.  The Indian Thunderbird, for example, has for its ground attack
Code: [Select]
                        <speed value="40"/>
                        <anim-speed value="70"/>
Fixing this would result in a rate of fire reduction by a factor of 1.75.  Of course, I expect that attack speed 40 was the intended speed in the beginning, especially when the stats are compared with Magic's Dragon.



Edit (tomreyn): No [bug] tag, please, this forum is already called "bug reports". Thanks.

44
I'm running version 3.7.1 from the Gentoo distribution, 64-bit.

Assuming the default keyboard layout, enable free camera mode by pressing f.
Press w/a/s/d to rotate the camera.  Instead of the rotation stopping once the key is no longer pressed, it continues rotating forever (if left/right; if up/down, until the camera hits top/bottom) in the same direction until free camera is disabled by pressing space.  If f is pressed again, the camera will rotate by itself in the same direction again.

There is a possibly related bug with the setmarker command, enabled by the x key.  Once x is pressed, all clicks, not just the first one following the keypress, produce a temporary marker on the map, which rapidly gets annoying.

45
I think this happens because you're not actually clicking on the enemy units but rather on the ground below them.  For example, I have found that it can be difficult to click on snakes, because their models don't take up a lot of space.  I believe (from my experience, I haven't read the source) that the current method of selection is that a unit is selected if the cursor or selection box intersects part of its model.

I think a related bug is that you can select multiple (of your own) units in one click if your camera is positioned correctly and color picking is disabled, because you click "through" the unit closer to the camera.  If color picking is on you'll only select one of the overlapping units, though it is not always the top one.

46
I'm a fairly new player, and I have spent some time playing by myself (attacking my own units) to get the hang of game mechanics and stuff.  One thing I noticed was that if a unit fires a splash attack, then moves before the attack hits the target, the target will suffer less damage than usual.

Today I also noticed that archmages, when doing "hold position", always seem to do the damage of a direct hit to their targets, while units that were closer to the splash center than the target received less damage than the target.

Since I know some programming and this bug was starting to bother me, I decided to look at the source code.

The problem appears to be an incorrect splash center.  If the attacking unit moves, the splash center, for the purpose of calculating damage, becomes the attacking unit's position.  If the attacking unit targets another thing in its range, the splash center is the position of that other thing.  The area of effect, however, is still centered on the attack impact position.  If the attacker does not move, the splash center is the position of the targeted unit.

As a test, I put an archmage at range 4 from its target (another archmage), and fired an ice nova at the target.  By reducing the game speed and pausing frequently, I was able to tell the attacking archmage to move as soon as it fired its attack.  When the attack hit, the attacking archmage had <100 health left (out of 450), and the target had >300.

What I believe is the offending code, in source/glest_game/world/unit_updater.cpp, starting at line 1900:
Code: [Select]
void UnitUpdater::hit(Unit *attacker, const AttackSkillType* ast, const Vec2i &targetPos, Field targetField){
   //hit attack positions
   if(ast->getSplash()){
      PosCircularIterator pci(map, targetPos, ast->getSplashRadius());
      while(pci.next()) {
         Unit *attacked= map->getCell(pci.getPos())->getUnit(targetField);
         if(attacked != NULL) {
            if(ast->getSplashDamageAll()
               || attacker->isAlly(attacked) == false
               || ( targetPos.x==pci.getPos().x && targetPos.y==pci.getPos().y )) {
               attacker->setLastAttackedUnitId(attacked->getId());
               scriptManager->onUnitAttacking(attacker);

               damage(attacker, ast, attacked, pci.getPos().dist(attacker->getTargetPos())); // BUG IS HERE
              }
         }
      }
   }
   else{
      Unit *attacked= map->getCell(targetPos)->getUnit(targetField);
      if(attacked!=NULL){
         damage(attacker, ast, attacked, 0.f);
      }
   }
}

Unit::getTargetPos() returns the target position.  In source/glest_game/world/world.cpp, Unit::setTargetPos is called in World::setUnitPosition:
Code: [Select]
void World::setUnitPosition(int unitId, Vec2i pos) {
   Unit* unit= findUnitById(unitId);
   if(unit == NULL) {
      throw megaglest_runtime_error("Can not find unit to set position unitId = " + intToStr(unitId));
   }
   unit->setTargetPos(pos);
   //unit->setPos(pos,true);
   this->moveUnitCells(unit);
}

I didn't look for where this function is called, but I am guessing it is called whenever a unit moves into a new cell.  Basically, we can't use the attacker's getTargetPos() to determine the splash center.

But the area of effect center is still the projectile impact position, because it uses the function's targetPos argument:
Code: [Select]
PosCircularIterator pci(map, targetPos, ast->getSplashRadius());

Non-splash projectiles also use targetPos to determine impact position.

So replacing attacker->getTargetPos() with targetPos should fix the bug.

Also, http://megaglest.org/linux-packages.html doesn't list Gentoo.  Running emerge megaglest as root will install MegaGlest on Gentoo.

Pages: 1 [2]