Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
purist

Bespoke Source Port

Recommended Posts

If you were a programming genius with plenty of time on your hands (or could pay for someone who is) what sort of source port would you design? What features would it have and how would it function?

No need to be techie in this thread this is just a wishful thinking bit of fun. It doesn't matter if the features you list are not compatible together or unworkable in general. I just think it would be fun to see what people want most in a source port and it may give source port developers ideas too.

I have an idea of my own which I'll post in detail later

Share this post


Link to post

The single biggest thing I'd put in my source port would be the ability to launch any previously saved game from the Load menu in-game. No more dragging and dropping of WADs onto the EXE. And if we're going for pie in the sky stuff then I'd also find a way to get around the demo playback incompatibility issues that arise between different builds of engines (with built in Twitch/YT upload features).

A small thing that I would love added is a clock option for the HUD and the PAUSE screen. A simple toggle would do - HUD Screen /Pause Screen/Both/Off. That would be really nice to have when I'm having a quick session during lunch or before bed. Another small thing would be to show the audio track name and writer on the Pause screen. Very often I find I'd like to find the name of a track in the game but I have to leave the game and do some kind of 'research' (even if it is just reading the readme).

EDIT: Oh, oh, I jut thought of another thing. A music folder that could just drop any songs I liked in that Doom would treat as proper level tracks including automatic looping and reading the title for proper display on the Pause screen... Not sure how I would do the track ordering though. Maybe an automatic playlist generator that would append tracks as they were added to the folder? Dunno yet... :)

Share this post


Link to post

Cool topic idea.

(Although some of the following comes from various nitpicks I have with current source ports, please don't see this as veiled criticism. Obviously I'm aware of the constraints involved, and am grateful for the work you all put into Doom. This is just what I'd personally love to have.)

First off, I'd go with a clean, nice looking UI. No Doom font. It might be iconic, but to me it just looks bad. Settings set in intuitive categories and corresponding subcategories, fancy tabs for keymapping and the like. Tooltips on each option, telling you what the option does in layman's terms.

I'd want to have strict compatibility levels (when it comes to gameplay; graphics should be entirely customisable), but some of them going all the way to advanced features seen in the most modern ports. There would be no ongoing development of new features, so the standards would stay standards.

Now the latter might prompt people to ask why, why would you go for something that sounds like a negative, so here's my angle: I feel stability in the feature set is important if you're trying to make mods centered about gameplay. When balance is finely tuned seemingly slight changes in behavior can twist everything. Also, if you're learning new features all the time, you don't have the time to really dig in and explore all the possibilities in what's already there.

There would be score in the normal game, basically point rewards you'd get for killing enemies, finding secrets and picking up items, as in Serious Sam. Also leaderboards, for both points and time. Those would come with a super special anticheat system that would somehow work perfectly even though this is a local game. ;) Of course, you could still cheat, the leaderboards would just be disabled the second you bring up the console or type a cheat code. Demos would be automatically recorded and uploaded (unless you opt out), and you could download any demo by clicking on the name of the player in the leaderboards, and watch it without restarting the game.

There'd also be an ingame content browser tied to idgames, again downloading and putting stuff in the proper folder without forcing a game restart, so you could play right away. An option to rate the mod and write a comment could pop up at the end of the levels or play session. You'd be able to write "private" comments too so you can give yourself a reminder what a particular mod is about, and the port would keep a history of your playthroughs.

Twitch.tv integration. Because why not? More mainstream exposition of Doom couldn't hurt.

The port would also keep track of your stats. Accuracy, monsters killed, favorite weapon, distance traveled, times you exploded yourself with a barrel, every unnecessary and therefore essential number you could think of.

Co-op allowing for both p2p and dedicated servers. And, uh, magical computer pixie dust to make the game as smooth in online play as most modern games feel with similar pings. I find movement and collisions in particular never feel right in online Doom compared to offline, even with 30ms. Which is weird because I'm not the most demanding person when it comes to ping, i.e. I play most games at 50-80ms without batting an eye, and L4D still feels playable at 200ms.

Hmm... So that's it, mostly convenience, fluff and personal stuff. Current source ports do a pretty good job at tackling the important things, so there's not a whole lot to ask for, even when being unrealistic.

Share this post


Link to post

Based on prboom+ but with

- TAS detection so that people absolutely couldn't cheat in the demos forum.
- Online integration: you can see a list of people currenty playing the port (they can hide themselves if they want), you can connect to any game to observe it and to chat with the player and other observers. (like in Elma Online)
- Customizable complevels: you can create your own complevel recommended for using with your wad.
- WAD manager with all wads that ever existed, info on them, links to demos. You can organise lists like "completed", "currently playing", "plan to play", etc. (like on MyAnimeList)
- Limitless dehacked-like system where you can create as much new objects as you want without sacrificing anything.

Maybe will think of more stuff later.

Share this post


Link to post

These are things that I'd like to see:

*GL renderer that supports all (major) software rendering quirks/exploits. So, flat bleeding when a plane is in view without a lower/upper texture on the sector border, and transparent patch/sprites bleeding into planes without cutoff***. (GZDoom thankfully supports the former, but not the latter)
*Mouselook mode that actually works correctly. Most (all?) current source ports scale the view projection on the Y axis by 1.2, but this is incorrect. What should happen is the view projection should be undistorted, while the world coordinates that are fed to the renderer are scaled by 1.2 on the Z axis. Both look identical (and correct) when looking straight forward, but when view pitch is in use, only the latter method provides a proper view.
*Lighting effects as faithful as possible to software diminishing light. (some ports actually have this)

I usually avoid using GL renderers in ports for the above reasons.

*JDoom style monster movement interpolation. It looks so nice, I wonder why other ports don't do it this way.
*Non-Boolean brightmaps on flats/patches/sprites in a traditional light diminishing lighting method in either software or hardware
*JDoom style corner AO, again built for light diminishing.
*Actors that can give off light like your guns can without globally brightening the world no matter your position. The idea is that it'd still globally raise the light level client-side, but with different intensity based on radius from source. So, if a zombieman shoots and you're close by, you see the effect, but if you're 10 meters away, you don't.
*Alternately, have Doom 3 style stencil shadows to only brigthen areas visible from a given light source, and not diminish the effect regardless of your position. If a zombieman fires but he's around the corner from you, the placement of the lighting is traced so that it doesn't light areas where the light wouldn't actually go in real life.

***Yes, I know this requires multiple render passes and would degrade performance on weaker hardware. It would be nice as an optional feature for those with capable GPUs, however.

Share this post


Link to post
Phml said:

First off, I'd go with a clean, nice looking UI. No Doom font. It might be iconic, but to me it just looks bad. Settings set in intuitive categories and corresponding subcategories, fancy tabs for keymapping and the like.

Totally agree with this -- the game itself can stay all Doomy and pixely, but I'd like a user interface that is pleasant to look at and use.

Share this post


Link to post
Memfis said:

- Customizable complevels: you can create your own complevel recommended for using with your wad.

Pretty much what MBF did with its OPTIONS lump. Except it was forced, unless you hack into the wad. People tend to shit on that feature for some reason, even though you can do the same with MAPINFO nowadays.

Share this post


Link to post

Average, phml and Memfis covered a lot of what I had in mind when I started this thread.

Like Memfis I was thinking of a PRBoom+ like source port for compatibility with maybe extra comp flags to allow new gameplay features.

It would have a built in launcher that not only allows you to load up LMPs and PWADs on the fly but also downloads direct from /idgames and DSDA.

Demos would record by default and your personal fasted speed and max runs would be noted as such. It would also update WR runs automatically from DSDA and list head seperately. Demos can be exported to YouTube from inside the port and Twitch streams can be set upon starting a new game.

It would also be important to me that this port would have split screen because I still keep Legacy on my HD exclusively for this purpose.

Phml's stats are also a fun idea but this never occurred to me. Another silly thing would be to add new HUD faces like in that 40oz thread. There could be some bound to macros like the chat strings to signify things in demo playback , sometimes wildly shaking the mouse can not convey everything

Share this post


Link to post
Phml said:

Demos would be automatically recorded and uploaded (unless you opt out), and you could download any demo by clicking on the name of the player in the leaderboards, and watch it without restarting the game.

Be careful not to record vanilla compatible demos; that can't be done cleanly, because of bad rotation resolution.

Share this post


Link to post

I'd like to see a source port you can modify and rewrite from the inside. Something completely interactive.

For example suppose you press a button during gameplay, the game pauses and a mouse cursor appears. You can click on any monster or item, edit the underlying properties of the object in real time. Think of it like an interactive Dehacked editor: you can bring up the state tables or object properties and change them.

Ideally all the game logic would be converted to a high level scripting language (like Python or Lua or something like that), then you should be able to bring up the source code to the action functions, rewrite them or add new ones and try them out - all within the game.

Share this post


Link to post

Not a whole lot to ask for that source ports don't do already. In fact I recently set up my computer to run a random demo lump from my demos folder right after I boot it up. I also have batch files set up for recording demos that automatically loads them into the list of demos to play randomly. I'm pretty excited about it :)

I kinda wish prboom and odamex were the same thing. I keep flipflopping back and forth between the two because they each have their perks. Odamex is a little more user friendly in terms of network play and the console menu. Being able to instantly load wads directly from the console is a super big plus. Its open source too. Prboom feels a lot more stable though, and a perfect platform for demo recording. I'd really love to record multiplayer demos but I don't think odamex supports the standard vanilla demo format in multiplayer.

I don't really have anything else in mind excepting a few features.

1. Some way it would document your achievements. (not Xbox live achievements) like a list of total monsters killed and how much of each species, most played maps, preferred weapons, best times on certain maps, last wads played, etc. Much like the aforementioned leader board system, complete with an IRC chat window or something so you can instantly arrange competitions and multiplayer games with no sweat. You shouldn't need to be logged in or online to add to your stats, perhaps a simple "update info" button should suffice, and your achievements are tallied up and added to your profile without having to make yourself accessible to other doomers.

2. I like the weapon movement bob from the alpha versions of doom. I also like in risen 3d how the HUD weapon bobs even while shooting and reloading, etc. Unlike vanilla which freezes when moving and shooting at the same time.

3. Being able to read a wads text file from in the game, like in the console menu or something. Too many wads that start on maps other than map01, or e1m1.

everything else in the source port department is pretty solid to me.

Share this post


Link to post

Cool ideas regarding demos and other "share your gameplay" interaction.

How about a time attack mode where you can see a ghost player from a selected demo in your own game. Completely incorporeal due to different sync, of course, but since we're in fantasy land, there should also be a small customizable radius around him that'd show what's happening to him (monsters colliding with him, projectiles hitting him). It would help others learning strats from the best, analyze situations and perhaps even catch cheaters.

Share this post


Link to post

What I do with my own source port is boring as shit, basically I'd take Pr-Boom+ and add some minor MAPINFO support, so allow you to change your sky on a per-level basis, make episodes, allow secret levels exits to work from any map... honestly that's probably it. I'm sort of assuming here that this could be done in a way such that anything that's not defined, or there's no MAPINFO lump at all, would result in the default behaviour in a way that wouldn't break demo compatibility, which in practice might not actually be that hard?

In all honestly I should probably look at making my dreams a reality some day, but today is not that day (and tomorrow's not looking good either).

Share this post


Link to post
Melon said:

What I do with my own source port is boring as shit, basically I'd take Pr-Boom+ and add some minor MAPINFO support, so allow you to change your sky on a per-level basis, make episodes, allow secret levels exits to work from any map... honestly that's probably it. I'm sort of assuming here that this could be done in a way such that anything that's not defined, or there's no MAPINFO lump at all, would result in the default behaviour in a way that wouldn't break demo compatibility, which in practice might not actually be that hard?



To be honest, I simply don't understand why PrBoom still doesn't have such an essential feature, requiring anyone who wants to have more control about how the game advances from map to map to use one of the more advanced engines.

Share this post


Link to post

I guess mostly because entryway is only interested in adding features that he (or Eternal :-) needs. It was never his goal to make the most mapper-friendly port in the world.

Share this post


Link to post
dew said:

How about a time attack mode where you can see a ghost player from a selected demo in your own game. Completely incorporeal due to different sync, of course, but since we're in fantasy land, there should also be a small customizable radius around him that'd show what's happening to him (monsters colliding with him, projectiles hitting him). It would help others learning strats from the best, analyze situations and perhaps even catch cheaters.


For demos I was thinking along the lines of how Mario Kart showed best times for each track and having that but for maps. Thinking along those lines I also thought playing with a ghost player but then I though it wouldn't work because of de-syncing. The radius idea would make it fun still though.

Share this post


Link to post
purist said:

Thinking along those lines I also thought playing with a ghost player but then I though it wouldn't work because of de-syncing.

Sure, the ghost player would inevitably desync at doors and moving platforms in our boring world. In the dream world of ours, the game runs a parallel thread with the demo and flawlessly meshes it on-screen as an entire bubble of ghost reality that doesn't affect anything in the player's thread. Elements shown in the bubble, their opacity and the bubble's radius are, of course, fully customizable. :)

Share this post


Link to post

I'd have to think about the rest but one feature that immediately comes to mind is an invulnerability mode that doesn't completely rape your eyes.

Share this post


Link to post
Graf Zahl said:

To be honest, I simply don't understand why PrBoom still doesn't have such an essential feature, requiring anyone who wants to have more control about how the game advances from map to map to use one of the more advanced engines.

I remember entryway being concerned about backward compatibility or something like that. Maybe I got it wrong, because otherwise I don't understand how MAPINFO-like functionality is more dangerous than other features exclusive to certain compatibility levels.

Share this post


Link to post
Da Werecat said:

I remember entryway being concerned about backward compatibility or something like that. Maybe I got it wrong, because otherwise I don't understand how MAPINFO-like functionality is more dangerous than other features exclusive to certain compatibility levels.



It isn't. If you restrict MAPINFO to defining what sky and music to use and what maps to go, there's precisely three spots (ok, four if you count secret levels extra) in the entire engine that need addressing - and none of them is in code that's even remotrely critical for demo sync.

And that's all a port like PrBoom should be concerned with. It's also the three most useful features by a huge margin. Maybe, just *maybe* allow special death actions, too, but that should be all.

Share this post


Link to post
Graf Zahl said:

It isn't. If you restrict MAPINFO to defining what sky and music to use and what maps to go, there's precisely three spots (ok, four if you count secret levels extra) in the entire engine that need addressing - and none of them is in code that's even remotrely critical for demo sync.

Um, changing what maps to go to quite obviously breaks demo sync, on any demo that spans multiple maps. Episode runs in particular are guaranteed to break if MAPINFO is allowed to change the map order.

Share this post


Link to post
Foxpup said:

Um, changing what maps to go to quite obviously breaks demo sync, on any demo that spans multiple maps. Episode runs in particular are guaranteed to break if MAPINFO is allowed to change the map order.

Only relevant if someone decides to play a demo on an older version of the port (assuming the wad has MAPINFO and the demo was recorded with the right compatibility options). Actually, in that case there should be an error message, so it's not even a problem, if you ask me.

Share this post


Link to post
Foxpup said:

Um, changing what maps to go to quite obviously breaks demo sync, on any demo that spans multiple maps. Episode runs in particular are guaranteed to break if MAPINFO is allowed to change the map order.


I don't think you understand what this is for.
Of course it's something for user-made mods so any demo recorded in a mod with altered map transitions will play back with the same altered map transitions.

Implemented properly this could only cause problems in contrived cases where the user loads an altered MAPINFO with an existing mod and then expects demos to still work, but that's ludicrous thinking.

Share this post


Link to post

Probably because of our failure as a community to embrace any sort of half-measures with these text lumps. They came out defined via ad hoc parsers (no grammar or state machine, and building one after the fact proves unnecessarily complicated), the port(s) that support them in some cases throw an I_Error in response to unrecognized keywords or parsing problems, and in their expansive definitions they imply support for all kinds of advanced features that any other port may never have, period.

I am mainly but not exclusively referring to ZDoom's various lumps.

I in particular am having a crisis currently over texture animations. The ANIMATED support I inherited from BOOM does not allow me to animate textures that are stored in a PKE/ZIP's /textures namespace, on account of not being able to assume they're in any given order. But ZDoom's ANIMDEFS is like swatting a fly with a nuke in terms of implementation cost. I'd currently be ignoring 90% of the possible syntax unless I want to go on a three month excursion.

Share this post


Link to post

You know, I'm all in favor of replacing all this messed up shit with something saner that's supported by multiple ports. It's really not something one port can decide all of its own.

Sadly the big problems were mostly inherited from Hexen and its insufficient sc_man parser (the original MAPINFO syntax and the need to continue to support it still makes me cringe as does the SNDINFO/ANIMDEFS/SNDSEQ syntax. It really can't get any worse...)

Share this post


Link to post

Okay, let's dream about PrBoom++.

- Severely simplified MAPINFO analogue: BMAPINFO. Compatibility optioned, of course.
- Ambient sound things. Shouldn't be a problem, because music changer things are already supported.
- Optional colored lighting lumps for OpenGL and/or high color modes. Nothing excessive, one hue per sector would suffice.

Share this post


Link to post

How about a port that converts PWADs magically into PSX style levels? That would be a bit of fun for some novelty at least while the diehard PSX fans like Major Rawne would probably use it by default.

Share this post


Link to post
Da Werecat said:

Okay, let's dream about PrBoom++.

- Severely simplified MAPINFO analogue: BMAPINFO. Compatibility optioned, of course.
- Ambient sound things. Shouldn't be a problem, because music changer things are already supported.
- Optional colored lighting lumps for OpenGL and/or high color modes. Nothing excessive, one hue per sector would suffice.


I've got a little wishlist text file called boom++ :)

Mainly wishing for some extra generalised linedef groups and some extra specific linedef types.

Generalized linedef types:
================================================================
-> Lighting
	-> Trigger (S/W/G)
	-> Target
		-> Highest adj light val
		-> Lowest adj light val
		-> 0
		-> 255
	-> Effect
		-> No effect
		-> Random on/off
		-> Blink 0.5s
		-> Blink 1s
		-> Pulse
	-> Monsters (Y/N)

-> Exit
	-> Trigger (S/W/G)
	-> Target
		-> Same map
		-> Next map
		-> Secret map (based on IWAD)
		-> Tag value as map slot
			Doom2=MAP<TAG VALUE>
			Doom=E<TAG VALUE 1ST DIGIT>M<TAG VALUE 2ND DIGIT>
		-> Next map from PWAD
			Load next valid sequencial map lump from PWAD, skipping IWAD map lumps (if no more PWAD lumps are present play MAP30 end sequence)
	-> Pistol start (Y/N)
	-> Monsters (Y/N)

-> Property Transfer
	-> Trigger (S/W/G/Static)
		Static=Occurs at level init like existing type 242
	-> Target
		-> Sector on front side of linedef
		-> Sector on back side of linedef
	-> Property
		-> Transfer floor height
		-> Transfer ceiling height
		-> Transfer floor texture (basically a change tex option)
		-> Transfer ceiling texture (basically a change tex option)
		-> Transfer sector type
	-> Monsters (Y/N)

Extended linedef types:
================================================================
-> W1 Lock sector tag until dead (player or non-player can activate)
 - Any "can be killed" or "pickup" thing that passes this linedef is
   added into a "lock" table with the tag of the linedef. Any other
   linedef actions in the map with the same tag will not activate
   until all items in the lock table with the same tag are killed.
   Allows for "boss" specials on any map, or specials to occur only    
   after a wave of monsters has been cleared. Could also be used to
   activate linedef after collecting an item or group of items
-> WR Lock sector tag until dead (player or non-player can activate)
 - Any "can be killed" or "pickup"  thing that passes this linedef is
   added into a "lock" table with the tag of the linedef. Any other
   linedef actions in the map with the same tag will not activate
   until all items in the lock table with the same tag are killed.
   Allows for "boss" specials on any map, or specials to occur only
   after a wave of monsters has been cleared. Could also be used to
   activate linedef after collecting an item or group of items
-> (static) Warp floor (speed set by x & y offsets) 
 - Apply somefunky portal/fluid warp affect to floor of all sectors
   with same tag. Can be used for water effect or teleporters.
-> (static) Warp ceiling (speed set by x & y offsets) 
 - Apply some funky portal/fluid warp affect to ceiling of all
   sectors with same tag. Can be used for water effect or
   teleporters.
-> (static) Warp linedef (speed set by x & y offsets) 
 - Apply some funky portal/fluid warp affect to linedefs with same
   tag. Can be used for water effect or teleporters.
-> (static) Transfer sky all tags 
 - Transfer upper texture to all instances of f_sky1 in map
   regardless of tag
-> (static) Transfer sky (reversed) all tags 
 - Transfer upper texture to all instances of f_sky1 in map
   regardless of tag
-> W1 Pickup items (players only can activate) 
 - provides the activator with the items placed in tagged sector(s)
   as if picked up (walked over). If playing with item respawn they
   will respawn into original starting position not where player
   activated linedef. Tag 0 does nothing
-> W1 Resurrect (player or non-player can activate) 
 - perform resurrection on all monsters in tagged sector.
-> WR Resurrect (player or non-player can activate) 
 - perform resurrection on all monsters in tagged sector.
-> WR Kill all monsters (non-player only can activate) 
 - kill all monsters in tagged sector or 0 for all monsters in map
   (damage = thing starting health x random value between 1 and 2 to
   vary standard death and gibbed deaths

Sector Flags
================================================================
-> No damage to player (invincible, showing godmode eyes in hud)
-> Kill anything that touches sector floor (damage = thing starting
  health x random value between 1 and 2 to vary standard death and
  gibbed deaths)
-> grouped sector (use to make multiple sectors behave the same - ie:
  multi-sector lift/door or crusher. If one sector of the group is
  blocked from moving, all grouped sectors are also blocked).
  Grouping is done using the tag value.
EDIT: I have added linebreaks to your post for readability -Quasar

Share this post


Link to post

My own source port would throw out all the hacks, catches and "fixes" needed to support the various awful Doom rendering hacks and other editing tricks that have bloated and held back every source port ever.

This would, of course, mean that my source port would be of little use for playing many Doom levels. I don't care. This is my port for me. :P Having a good, solid, streamlined editing engine is what I want. I could use other people's ports for playing Doom.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×