Here are a few ideas to improve this process manager: N == not planned ? == possible, but not planned and/or is it necessary? - == not started, but planned O == in progress X == done AFAIK X-display last 7 characters of process name rather than first 7 ie: '/sbin/mingetty' would appear as 'ingetty' rather than '/sbin/m' X-make text disappear when entire pid monster sprite is obstructed X-make text 'float' with the monster (adjust y-value of print) X-pid monsters don't count towards end-level 'kills' percent X-pid monsters don't spawn in/on other things N-toggle monster inter-fighting (ie. CacoDemon vs Imp on(default)/off ) N-toggle monster intra-fighting (ie. Human vs Human on(default)/off Demon vs Demon on/off(default) ) X-OR as an alternative to the above 2, have pid monsters only take damage from a player O-command line flag to allow pid monsters to be damaged normally (-nopssafety) X-better process management: N-non-blocking process manager so pauses aren't as noticable NOTE: pauses would still be there with the non-blocking process manager - tested by disabling pr_poll() call and running a sh script on a seperate terminal that called 'ps' every 5 seconds: pauses were still noticable X-if a process is killed/removed outside xdoom, remove it from xdoom X-update process names (ie. mingetty --> -bash after login ) ?-compare pid monster name to incoming name and copy the name as a result of that comparison NOTE: right now, the name update happens to every pid monster every time the ps list is updated. would adding a check to see if the name needs to change speed things up? in other words, how much faster is strncmp() than memcpy()? X-if a process monster is killed in doom, but the actual process doesn't die on the machine, resurrect the monster's body like the archvile does; if we can't raise the monster, remove the body and respawn the monster X-gracefully handle save and restore X-only re-nice a monster the first time it is damaged ?-OR with successive damages, get the process' priority, and re-nice to 2(?) more than the current level until it reaches 20 (the maximum) NOTE: must be careful about shotgun and other rapid-file or multiple damage weapons because one could re-nice monsters to +20 really fast X-customized level map for managing processes NOTE: *any* level that has 3 1024x1024 areas for monster spawning such that the bottom left coordinates of the squares are at (0,0); (2048,0); and (4096,0), respectively, will work NOTE: current custom level details and decorations may need tweaking X-if the custom level isn't (or can't) be loaded, use stock E1M1 in doom 1 (or MAP01 in doom 2) for process management X-custom level loads automatically, like xdoom.wad. the custom doom 1 map must be named psdoom1.wad and the custom doom 2 map named psdoom2.wad for the automatic loading to happen X-command line flag to disable automatic loading of custom level; manage processes on stock E1M1 or MAP01 (-nopslev) ?-custom level for shareware doom (psdooms.wad); must get permission from id software before doing this X-game acts like normal xdoom if not playing on E1M1/MAP01 or if playing any 'Plutonia Experiment' or 'TNT - Evilution' level X-command line flag to entirely disable 'ps' portion of the program (-nopsmon) X-command line flag to disable actual re-nice and kill of processes (-nopsact) X-command line flag to make 'no monsters' persistant across new games and warping (-nomonsters.) == no monsters, period :-) X-pid monster spawning not affected by '-nomonsters' or '-nomonsters.' command line flags X-command line flag to respawn items like in -altdeath games (-respawnitems) X-this flag should have no effect in demo recording or playback; it would mess up the demo timing X-command line flags for determining which user processes to spawn X-command line flag to cause every username to be added to the list of users whose processes to display (-psallusers) X-command line flag to cause specified usernames to be added to the list of users whose processes to display -- without any supplied username(s), assume current user (-psuser [username1[ username2...]]) X-command line flag to cause specified usernames to be added to the list of users whose processes not to display -- without any supplied username(s), assume current user (-psnotuser [username1[ username2...]]) X-if none of the userlist-related command line flags are given, the program defaults to showing only the current user's processes if not running the program as root -- root sees all processes by default -- current username is determined by looking at the environment variables PSDOOMUSER, LOGNAME, USER, and USERNAME in that order X-ensure that demo playing and recording do not use the 'ps' portion of the program X-the demo that plays immediately after ending a game (options->end game) on a level with pid monsters is messed up; fix it ?-use c functions like setpriority() and kill() rather than the system() call (would this speed things up significantly?) --put command line options into an in-game menu --ability to have multi-admin netgames --ability to administer processes on a machine other than the one running psdoom --more general format for custom level areas for pid monster spawning --'PSINFO' lump in wads tells engine where to spawn pid monsters and on what level(s) --current behavior is used if no PSINFO lumps are given NOTE: format of this textual lump is sorta in my head: one lump specifies all maps and coordinates -- ExMy or MAPxx lines seperate coordinate grouping lines within the lump {ExMy or MAPxx}, {R, A, or U} (one of these lines per level) * to denote which map the info is for and the method by which processes are placed in the spawnboxes of that level * 'R' tells psdoom to spawn pid monsters in a round-robin-esque manner among the given spawnboxes: pid #'s are mod'ed by the total number of spawnboxes on that level and the pid monster is spawned in the resulting numbered box ie. pid# 1432 is being spawned on a level with 5 boxes: 1432%5 = 2; pid monster will be spawned in the third (0, 1, 2) box listed in the lump * 'A' tells psdoom to use the relative area of the spawnboxes to determine the chances of spawning a pid monster in each * 'U' tells psdoom that there are user-specified percentages for determining chances of pid monster spawning for the spawnboxes {x, y, dx, dy, nn} (one or more of these lines per level) * a point of origin and the length of the sides for a box (in doom map units) on that level for processes to spawn in * the final argument is a field that is only used if the 'U' flag is given above: it gives the percent chance of a pid monster spawning in this spawnbox * if the running total of user-specified percentages becomes greater than 100%, the remaining spawnboxes will not have monsters spawn in them * if the nn is not there for a given area, the remaining part up to 100% is assigned to that spawnbox --make pid monsters less aggressive towards (afraid of?) player --pid text is not placed well when screen is not at largest or second largest size; fix it --more info about processes --monster type reflects cpu/mem usage --more text information (space limited) NOTE: perhaps could print more info as the monster gets closer and takes up more of the view --shutdown/reboot machine with psdoom*.wad level exit switch(s) NOTE: need to make a custom texture to notify user of this interface --type of weapon determines what signal to send with the kill command on monster death (eg. pistol=kill -1, shotgun=kill -2, ... plasma & BFG=kill -9 ???) NOTE: rocket launcher probably not a good choice because of collateral damage (maybe protect pid monsters?) O-modify xdlaunch (ps-xdlaunch) to run ps-xdoom O-add psdoom-specific command line flags to ps-xdlaunch --incorporate the Back Orifice port of psdoom --command line flag to use Back Orifice rather than local admining (-psbo) O-support multiple operating systems (the ones xdoom supports) --freebsd X-linux --openserver 5 --unixware 2 --unixware 7 O-solaris --aix O-use ~/.psdoom rather than ~/.xdoom for savegames, config files, etc O-add references to psdoom in startup header text, X resources, and window title bar