Hi, nicely written, and 100% ack. when having played some HL2 and then going back to HL1 for testing bots ... it's just aching the eyes ;)
-- Johannes Lampel http://johannes.lampel.net http://joebot.bots-united.org On Wed, 26 Oct 2005 15:22:29 +0200, Jeremy Swigart <[EMAIL PROTECTED]> wrote:
-- [ Picked text/plain from multipart/alternative ] I read recently that after Lost Coast is released there will be an SDK update on the way. I'd like to ask that the missing functionality necessary for server plugin based bots please be added as well. There is a good sized community of bot coders that have strong desire to make bots for HL2, as we could do with HL1. The server plugins are the only real way that is possible, but there is some critical stuff missing from the currently available bot functionality in order to make a fully functional bot. A while back I got as far as I could creating a HL2DM bot, and it was playable, but due to missing functionality it was very primitive in many ways. Here is my list of things that are missing from the server plugins that are pretty much necessary for a fully functional bot. HL2 has pretty much crippled what was once a large and thriving community of bot authors for HL1, and our attempts to ask for the missing functionality have been largely ignored. So I ask and detail again requests on behalf of myself and the rest of the Bots United community at http://forums.bots-united.com/index.php? Stuff missing for full bot functionality * 1) *Check if a bot has a certain weapon or item. A bool IBotController.HasWeapon(const char *) would be nice, as well as a HasItem(const char *) that mods can implement for custom non-weapon equipment(kevlar vests, helmets...) * 2) *Access to an entities velocity? This is critical for some weapons to calculate proper leading. I'd rather not hack around this by getting the position each frame and calculating this myself, though I will if I have to I suppose. * 3) *Access to any entities position/orientation/velocity. Seems right now we're limited to players, but any decent bot is probably going to want to have perceptions of projectiles/grenades/dynamic map props for avoidance and such. * 4) *Access to any entity in general. I suppose we can blindly loop through the edict list, but an interface to CGlobalEntityList would be so much better. Perhaps not direct access, but an interface that wraps read only accessors to entity flags, entity properties mentioned in #3, and other useful info. * 5) *IPlayerInfo.ChangeClass would be nice. Empty by default, but at least provides an interface for future mods to implement. More mods than not will likely be class based. * 6) *Can we have access to trace_t.GetEdict() ? It's wrapped in #if defined( ENGINE_DLL ). Is it safe to define these in a plugin? * 7) *Minor nitpick, is there a reason IBotController and IPlayerInfo returns angles/vectors by value as opposed to const & ? *8 )* We need access to ammo values without switching to the weapon. Perhaps IBotController.GetWeaponAmmo(const char *weaponname, int &_curClip1, int &_curClip2, int &_maxclip1, int &_maxclip2). The reason there are 2 is to support weapons that use different ammo types for their alt-fire. Other stuff like max ammo, max clip size, ammo per shot I suppose are normally constants so I don't suppose we need access to them if we know the mod. Also what would be useful is IBotController.GetAmmo(const char *ammoname, int &_current, int &_max), to get the total amount of ammo the bot has, not counting what's in the weapon clips(or counting I guess it doesnt matter). *9)* How to choose the model for a bot? How about spraypaint? Things wrong with the current bot functionality 1) IPlayerInfo.SetActiveWeapon is pretty useless. It creates a new weapon every time its called, whether the bot has it or not. Crashes the game with too many entities before long. My bot has to be limited to 1 weapon for this reason. IMO this function should not create a weapon, it should return bool if the bot has the weapon and was able to equip it. False if not. This would give some of the functionality of #1 above. Preferably a HasItem would be added instead though that queries for the presence of weapons or items. Mods can extend it to allow querying of custom stuff. 2) CBotCmd.weaponselect is useless. It doesnt represent a constant value, but instead appears to represent an the index of an entity in the master entity table or edict list, which we don't have access to querying, or finding out which a particular bot has. 3) No access to velocities 4) No access to anything other than players, and missing a bunch from that access. Things I would love to see 1) virtual const Vector IPlayerInfo::GetVelocity(); 2) virtual const char *IPlayerInfo::SetModelName(); 3) virtual const int IPlayerInfo::GetArmor(); 4) virtual const int IPlayerInfo::GetMaxArmor(); 5) virtual bool IPlayerInfo::ChangeTeam( int iTeamNum ); // just changed the return value for success/failure. 6) virtual bool IPlayerInfo::ChangeClass(int _classId); // or classname 7) virtual bool IBotController::HasItem(const char *_name); 8) Merge IPlayerInfo and IBotController interfaces. They return the same struct anyways. (GetBotController() & GetPlayerInfo()) typedef CUtlVector<int> AmmoList; // indexed by an ammo enum/id, holds ammo counts 9) virtual bool IBotController::GetAmmo(AmmoList &_ammo); // In this case, the AmmoList can be indexed by fire modes. Most mods probably have 2 max, but for extendibility purposes, dont limit it. 10) virtual bool IBotController::GetAmmoForWeapon(const char *_weaponname, AmmoList &_ammo); 11) An EntityInfo interface, similar to PlayerInfo, accessible from any entity by either its index or edict. Wraps access to mostly CBaseEntity stuff. Should contain the following. const Vector GetLocalOrigin(); const Vector GetAbsOrigin(); const QAngle GetLocalAngles(); const QAngle GetAbsAngles(); const Vector GetLocalVelocity(); // object space const Vector GetAbsVelocity(); // world space const Vector GetMins(); const Vector GetMaxs(); const char *GetClassName(); // think this might exist already in the edict? int GetHealth(); // for objects with health int or edict_t GetParent(); // for objects that can be carried. Flags, weapons, etc... int GetEFlags(); int GetWaterLevel(); 12) Change IPlayerInfo.SetActiveWeapon to bool IPlayerInfo.SetActiveWeapon(const char *_name, bool create); The bool return value for success/failure, and the create parameter to control whether its created if the player doesn't have it. 13) Make CBotCmd.weaponselect useful in some way. Maybe another accessor that fills in a CUtlVector<int> with the bots weapons, and these ints can be used in weaponselect. Though I imagine that this parameter can be ignored in favor of #12. There's probably more but these are the main things now. All these additions shouldn't take long to add. The key here is that not only do us bot authors need them to do bots, but it would be great if the functions could actually be implemented in the Valve mods such as HL2DM, DOD:S and CS:S(yes there are still many people wanting to do CS:S bots despite an official one). Most of the functionality would be the same, it would probably just be the ChangeClass/ChangeTeam/Ammo function implementations that will differ per mod, with most simply being a wrapper function for other functions that already exist. To whom it may concern at Valve, can someone please add the missing functionality for complete bot support? At the very least can we get some sort of response this time? It has been frustrating to be completely ignored when previously asking for help with these bot matters. If it is not in valves time or budget to add these changes, would valve consider integrating them into official mods if someone else did it? Thanks DrEvil www.omni-bot.com <http://www.omni-bot.com> -- _______________________________________________ To unsubscribe, edit your list preferences, or view the list archives, please visit: http://list.valvesoftware.com/mailman/listinfo/hlcoders
_______________________________________________ To unsubscribe, edit your list preferences, or view the list archives, please visit: http://list.valvesoftware.com/mailman/listinfo/hlcoders

