Chaosforge Forum

DoomRL => Modding => Topic started by: Malek Deneith on February 27, 2010, 10:20

Title: Modding wishlist
Post by: Malek Deneith on February 27, 2010, 10:20
Kornel asked me recently to start writing up a wishlist for things in modding, so here it is. This will be updated when new thoughts come to me, feel free to add your own wishes, but remember - no guarantees are beeing made that anything on the list appears, unless Kornel says so himself ;)

Color map:
In release
In beta
Impossible to add or denied feature

1. Make exotics available.
2. Make uniques available except the ones that *really* need to stay "behind the curtain" (a category occupied mostly by Dragonslayer I think :P).
3. An option to make "unmodable" content to either drop randomly as normal or not (i.e. if Dragonslayer gets hidden modders should have an option do they want it to drop as it does in regular game or not).
4. An similar option to block out "core" monsters and items from spawning
5. A teleport flag for monsters - makes them phase near the player when he gets in sigh
6. A flag or event that makes monster perform one final attack on death, provided that he is able to (player in sight/weapon range, enough ammo in magazine, etc.)
7. Ability to give the monster up to 3-4 weapons and have them switch between them (possibly flags for weapons to define on what range what weapon gets used?)
8. "Vampiric" flag for weapons and monsters
9. A flag that allows the weapon to gain ammo when it sits in alternate slot and monsters get killed by other equipped weapon (Denied)
10. A clearFlag hook for items. Come to think of it setFlag and clearFlag for cells might be of use
11. Way of clearing monsters or items on the map "on demand".
12. Hook that would allow weapon to do stuff on fire. Needs to be able to mess with wielder's stats using this, and ideally it would proc *after* creatures OnAction
13. Ability to tinker with how much "hp" armor has (Denied; EDIT: isn't this doable with maxdurability?)
14. Ability to set hp and armor durability to display actual hp rather than % (denied)
15. Reverse knockback flag - i.e. ability to have weapons that suck the target towards origin of attack/explosion rather than away from it (Denied)
Spoiler: Aggregated Items (click to show/hide)
Title: Re: Modding wishlist.
Post by: yaflhdztioxo on February 27, 2010, 11:09
5 can be done with linedefs and dropBeing(), but it's hackish
6 can be probably be done with the OnDie hook, but I don't think you can spawn a missile from there.
7 can be done with some abuse of OnCreate.

Of course just because something is possible doesn't mean that the interface shouldn't change to make it easy.

I would like:
16. a getCell feature (in whatever roundabout method is necessary; I just want complete access to the level)
17. a getBeings feature (so you can loop through and mess with every being in a level)
18. All hardcoded IDs not being hardcoded
19. A way to fill a custom level with a randomly generated one (that way I can have a half-random, half-custom level)
20. Ability to influence level generation (Aargh!  Caves!  Also, change item/being weights and the like mid-game)
21. AI tweaks
22. More control over music (in-level music changes)
23. A door flag for cells
24. Chainable custom levels (with and without ability to skip normal levels as a result)
25. A hierarchy of hooks (For instance, you can hook an individual weapon's OnKill hook, all OnKill hooks for a level, or all OnKill hooks for the entire game!  Some already do this)
26. A way to bounce grenade shots so that SkulltagRL is viable (Denied)
27. More hooks!  Hooks are where the power is >)

I'm all for more power.  Though the one I *really* want is getCell.

Just setting up a unified number list for stuff that we ask for - Malek
Title: Re: Modding wishlist
Post by: yaflhdztioxo on March 04, 2010, 08:13
28. A hook for creating our own levers
Title: Re: Modding wishlist
Post by: Malek Deneith on April 24, 2010, 08:08

29. Ability to have weapon reload without any ammunition involved (and by "reload" I mean when pressing 'r' rather than automatic regeneration of amunition)
30. A flag that makes enemies destroy walls that are destructible (Denied)
31. Short charge/jump attack bulldemons in BerserkRL have
32. If possible long charge attack - further range, goes for set distance or until hits wall, damages and knocks to the side beings that are in path (thus allowing for the charge to go "through" the target), has a "cooldown" afterwards (representing monster losing momentum and turning to attack again, also prevents the player from being spammed by that) (Denied)
33. Self-destruct attack for monsters? (Perhaps possible already by giving monsters melee range exploding attack, would need to check) Can't be done. I can haz Being.explosion plz? ^^" Edit: Ideally this should allow for both "zomg I make myself go boom" and "agh, dying I'll go boom" :P
34. A flag that makes monsters inactive until they see player (i.e. they do nothing, except perhaps idle sounds :P). Perhaps also "player sighted" soundbind if this flag does get created?

35. Ability to make item "unique" in the sense that player can't carry more than one of these at the same time.
36. Ability to spawn mosnters and items exactly on chosen coordinates. Apparently dropBeing and dropItem handle these, yaaaay. Though add mentions there are unsafe for some reason, so it might be worth looking into anyway.
Title: Re: Modding wishlist
Post by: yaflhdztioxo on April 25, 2010, 11:03
37.  Split CF_BLOCKMOVE into a BLOCKMOVE and BLOCKMISSILE flag (and possibly even a BLOCKPLAYER).  That way we can make windows that can be shot through but not walked through and gateways that can be walked through but not shot through.
38.  Do not make the UNIQUE flag automatically mean UNDESTROYABLE.  We already have a flag for that.
39.  NODESTROY flag, when applied to powerups, currently prevents them from being destroyed when consumed.  That can already be replicated with hooks.  What I want is a powerup immune to splash damage, not infinite uses.
40.  Any other flags that serve two purposes should be split up.
46.  Powerups should have customizable ascii....
47.  Should doors and barrels really be cells?  Possibly this will be taken care of when furniture like flair is added... (Will not be done)
41.  Ability to fine tune player inventory--hook equip, remove, remove individual items, etc.
42.  Adding ammo to inventory directly should stack properly.

I need Simon to search through his logs for 'wish'.   I know a lot of things are coming and that design changes might render a lot of these moot but requests 27-32 I really want :)

43. can specify win type
44.  add Player.lose()
45.  Some way to mess with the UI similar to berserk, inv, and env suits but without going through affects.  UI.setColorEffect(foreground, background, invert)?
Title: Re: Modding wishlist
Post by: bricks on April 29, 2010, 14:42
Not very Doomish, but so very necessary for a solid Bioshock mod...

46.  Flags for setting creatures as nonhostile, so they can be designated to attack under certain conditions.
47.  Some way to designate sides in a fight, including a setting for solo fighters.
48.  Flags for setting creatures as "defensive" - attack opponents if their charge (ward? master?) is attacked.  (Could probably be faked if 46 was implemented.)
Title: Re: Modding wishlist
Post by: you on April 29, 2010, 14:54
49. Being.clearSlot(CONST_SLOT) function to free only one slot
50. Being.unEqSlot(CONST_SLOT) function to move equiped item to inventory
51. Item.drop() function to make holder drop item
52. Unlock Level.put in mid-game
53. Ability to control being movement (something like Being.move(COORD_X, COORD_Y))
Title: Re: Modding wishlist
Post by: yaflhdztioxo on May 02, 2010, 09:22
54: 'spread' flag works on rapidfire weapons in the way you'd expect it to (not until async comes out though, otherwise it'd be slow)
Title: Re: Modding wishlist
Post by: fwoop on May 06, 2010, 19:22
These things are all currently possible in the engine, but in an extremely round-about, messy, complicated way. It would be very nice if there was in-built support for them.

55. Custom Flags. If a defined cell/being/item/etc type is given a flag that is not present in base doomrl, the engine automatically creates a ("flag_name" = true) association for that type. Mainly want it for cells. (Denied for DoomRL1)

56. Cell Flag Querying. Being able to ask if a cell on a particular square has a particular flag. ie: cellHasFlag(x, y, cell_flag). Should work with custom flags from mod item 55. (Denied for DoomRL1)

57. Map Table. Holds maps with given names, as is the current case for cell/item/being/etc definitions. Placing the initial map could look like Level.put(2,2,MAP_THISLEVEL).

58. Map Painting. Being able to "paint"/apply maps during play (not just at creation), that are defined with mod item 57. Ie: paint_map(x, y, map_name), paint_map_centered(x, y, map_name).
Title: Re: Modding wishlist
Post by: yaflhdztioxo on May 07, 2010, 16:04
59.  Access to more engine variables.  The current level's NPC count is the only one I can think of offhand that I'd like.
Title: Re: Modding wishlist
Post by: you on July 09, 2010, 09:05
60. Ability to toggle trait picking on level up (ability to disable first trait, ability to give traits every 2nd/3rd/4th level up)
61. Reload trait table every levelup.
Title: Re: Modding wishlist
Post by: you on November 16, 2010, 14:42
62. Level.clearLight() to reset level exploration state
63. Player.powerMap(show_items) to explore only the map
64. Ability to choose ASCII character for items
Title: Re: Modding wishlist
Post by: yaflhdztioxo on November 19, 2010, 18:57
65. Customization of sound volume, attenuation, pitch, and tempo on Being.PlaySound().
Title: Re: Modding wishlist
Post by: you on January 21, 2011, 03:51
66. Ability to hook and prevent Player's death, making respawn possible.
Title: Re: Modding wishlist
Post by: yaflhdztioxo on February 07, 2011, 18:40
67. The bool in Item.OnUse(), which currently determines if a consumable should be, well, consumed, should also determine if a lever's charge is consumed.
68. Currently the odd set of exceptions like blasters and hellgates use special color constants like MULTIYELLOW to display their graphical goodness.  I'd like that to be expanded to a color array instead. (denied)
69. Affects can be quite handy, but not when we are limited to 5.  As is anyone wanting to abuse those must create their own affects-like system in Lua. (denied)
70. Affects should be Effects :) (denied, he he he)
71. Well what about MF_IMMIDATE?  Honestly it took me a while to figure out what that was supposed to be...
72. ItemSets blow away regular item OnEquip messages.  This can be hacked around, or something similar to Being's weapon OnCreate could be added in to make modders saner. (denied)
73. Tweak HUD.  Maybe I want my status bar at the top, or I want to replace the health counter with a vague text description.  Currently we can edit about 11 characters lovingly reserved for the level name, but that still leaves a few rows to adjust. (denied)
74. For full modding: Lua main menu
Title: Re: Modding wishlist
Post by: Simon-v on March 10, 2011, 05:04
75. Stackable consumables - health items, grenades and such. (Denied for DoomRL1)
76. While we're at it, also stackable melee weapons, such as knives. (Denied for DoomRL1)
77. OnHitBeing working on melee weapons.
78. OnHitBeing working on explosions.
79. Melee weapons that use ammo in one way or another, either for normal swing or for powering the AltFire.
80. On(Normal)Fire hook for weapons, because, why not?
81. Customizable "the X is hit" message, "the X dies" message and health status strings ("unhurt" to "almost dead"). I totally need this for something...
Title: Re: Modding wishlist
Post by: yaflhdztioxo on March 19, 2011, 06:41
82. We have CF_BLOCKLOS and CF_BLOCKMOVE.  Setting just BLOCKMOVE (to create a window) has... interesting effects on the AI.  Can we tweak the aiming code to take into account non-fragile BLOCKMOVE tiles when firing?

83. BlockLOS and BlockMove are nice, but it'd be very nice if we could block certain creatures, or not block shots, or even have one way cells.  I think an OnTryEnter and OnTryShoot hook could handle the myriad of desirable combinations.  Fog tiles, barriers, open windows, closed windows...
Title: Re: Modding wishlist
Post by: Simon-v on July 08, 2011, 10:38
84. More error-checking for common modding mistakes and better, more helpful error messages and backtraces. I've lost count of the number of times i couldn't find why the hell was the bloody thing crashing in core.lua, when in fact it was something wrong with the map array and its associated translation. Anything that helps us find the cause of the crash without performing a tedious line-by-line audit is a blessing, and will be much rejoicing within the modding community.
Title: Re: Modding wishlist
Post by: tehtmi on July 08, 2011, 16:55
85. A simple API to view and modify current cell HP.

86. The OnFire hook should work for melee weapons (it works when pressing 'f' but not when autoattacking) in the style of the corresponding challenge hook.

87. A mod should be able to declare global hooks that are triggered throughout the entire mod in the style of challenge hooks.  I think all of the challenge hooks would be useful as well as some of the level hooks like OnTick.

88. This would be partly addressed by having a global OnTick, but it would also be very helpful to have a built-in system of adding new temporary hooks on the fly. E.g. dropping a bomb could create an OnTick hook that counts down until explosion. The return value could determine whether to keep the hook or remove it.

89. I don't see why challenges are disabled in sandbox.

90. A way to remove beings from the map and items from the map/inventory/equipment without them being deallocated. (denied - would be a source of unendless errors the way the current system is implemented... however, feel free to request things that would need this feature)

91. An API to handle moving items between the floor, the inventory, and the various equipment slots of a being.

92. The Generator functions should separate out the layout generator into a separate function (like is already done for tiled dungeons) so that modders can more easily use the layouts without necessarily using the same item/monster/etc generation.

93. The "floor" cell seems to have special status at least as the cell that is created when another cell is destroyed. There should be some way to change this... perhaps the current style's floor cell should be used instead.  (Currently it is impossible change style, although the lua code can be tricked, but I would expect this to be possible with the advent of full modding.)

94. In sandbox, medals and badges can be awarded, but they don't appear in the mortem.  I can see no reason to prevent this.  (Especially if the default medals are not checked.)

95. The player's OnAction hook currently cannot be used, because the player was created when there was no OnAction hook.  Could an empty OnAction hook be given to the player so that modders can override it?

96. Removal of the Dragonslayer from the items table causes some problems... the normal item drop code loops through the items table, but it will stop when it gets to the Dragonslayer's empty slot.  Either the item drop code could be made more robust, or the Dragonslayer could be prevented from loading in the first place.
Title: Re: Modding wishlist
Post by: yaflhdztioxo on July 10, 2011, 11:47
97.  When ammo is added to the inventory it is not merged with other stacks.  Either auto-merge ammo on add or have a specific function for adding ammo that will take the ID, count, and return any remainder.
Title: Re: Modding wishlist
Post by: Game Hunter on September 04, 2011, 13:58
Some things to address stuff:

98. A better way to bind sounds to beings: currently it has to be done by appending to the prototype and that is all kinds of messy.

99. A resistance table, rather than a bunch of different resistance properties. Something like res = { bullet = 25, fire = 25, ... }.

100. A console command to load modules (for debugging purposes). Having to load modules by starting DoomRL, then Custom Game, then selecting the mod is a little tedious when you have lots of little bugs to fix.

101. An OnAttacked hook that belongs to the being object. Right now there's one for the AI object, but certainly there could be reasons to use OnAttacked that aren't related to the AI.

102. Allow OnAltFire to work with pre-scripted alternate fires. (If the same is true of OnAltReload and scripted alternate reloads, then the same for that.)

103. Allow OnFired to work with melee weapons.

104. Currently, default sounds cannot be overridden (maybe because they're bound via sound.lua), making it impossible to replace sounds for modding purposes. We need SOME way to do this.

105. A way to disable/limit classes, traits, and name selection before the mod starts. (I understand if editing these is for TC modules but allowing any possibility can screw around with level balance.)

106. A BF_NOTARGET flag that prevents monsters from being able to target the player (and prevents the player from automatically targeting a being).

107. Separate IF_SPREAD's functionality into missile/weapon properties, as described here:
The problem with Mancubus lies with the way that the weapon-spreading function works. Currently, IF_SPREAD bases the angle of spreading by the distance from the player (that is, where the attack is aimed), and can only fire three shots at once. Ideally, this flag would be replaced with the ability to define your own projectile-based spread, in which the number of spreaded shots and the maximum spreading angle are modifiable (and will work with a number of shots, like a spread-chaingun). An even number of shots would cause the "extra" projectile to undergo a reflective transformation on each fire, and an odd number would work as-is.

If we could get this kind of result, then the Mancubus could shoot only two projectiles, specifically at a particular angle, and could be forced to fire three times consecutively, with the off-projectile shooting left-right-left or right-left-right. This would imitate the original's quite nicely, and have the benefit of not causing insta-kills in a hallway. It's a start, anyway.

108. A way to "throw" an item without using ALT_THROW on a melee weapon, as well as a way to trigger when the item is dropped on the ground in this manner. (I've managed to emulate this but it's pretty hacky so a shortcut would be nice.)

109. Some kind of engine ticking hook that triggers whenever the item is in your inventory (OnInvTick). It'd be nice to allow stuff to regenerate while it's not equipped. (Maybe a way to combine OnEquipTick and OnInvTick, while we're at it.)

110. DamageType objects. It'd keep track of how well DR armor absorbs it; gibbing; knockback; whether it destroys non-fragile cells, fragile cells, or neither; maybe even OnHit and OnHitBeing hooks (OnHit triggering at the cell wherever a missile fired from weapon associated with the damage type stops).

111. If nothing else from that last suggestion, an OnHit trigger for weapons (or missiles, depending on how it needs to be set up).

We could use an expansion on being AI functions:

112. being:pickup should have a second return for the item that was picked up (can make it easier to, say, wear it or use it after pickup)

113. being:swap to swap weapons between weapon and prepared slots

114. being:attack should work with a melee weapon (if one is equipped in the weapon slot)

115. being:unload to unload a weapon in the being's equipment or inventory (take eq slot, inv slot, coord (unload from ground), or item: last one searches equipment, then inventory, then map for item)

116. being:direct_seek and being:path_next should have a second return, the coordinate that the being moved in (or tried to move in but failed)

117. being:path_find should have a second return, a table of coordinates that make up the path that was found

118. A bunch of being properties don't seem to work with anything but the player (such as pistolbonus): please change code to allow them to affect all beings!

119. Same as 118 but for BF_ flags (such as BF_DUALGUN)
Title: Re: Modding wishlist
Post by: you on January 23, 2012, 11:54
120. A hook for missile impact with the wall
121. Ability to cast LOS between player/being and coord to check presence of Obstacles, Items and Beings
Title: Re: Modding wishlist
Post by: tehtmi on April 17, 2012, 21:46
121. Ability to cast LOS between player/being and coord to check presence of Obstacles, Items and Beings

There are some LOS functions currently:
(Note that DoomRL uses two different LOS algorithms: the player's more generous field of view, and monster's more restricted point-to-point.
Code: [Select]
-- Check if the being is in the player's LOS

-- Check if a cell is in the player's LOS

-- Check if there is LOS between two cells using the monster algorithm
Level.eye_contact(coordinate1, coordinate2)

-- Check if there is LOS to a being/item/coord using the monster algorithm

Monster AIs use being:in_sight.  It checks the ensures the sight radius is used as well.

If you want to find nearby items and beings to a certain position, there are also pascal-implemented iterators that should make this faster, although they don't check LOS:

Code: [Select]
Level.items_in_range(coordinate, range)
Level.beings_in_range(coordinate, range)
Title: Re: Modding wishlist
Post by: you on April 18, 2012, 01:31
122. Access to keybindings from module. (i want to add some keys in my module but config cannot interact with module and vice versa)
Title: Re: Modding wishlist
Post by: Morat48 on May 22, 2012, 09:20
123. A flamethrower prototype

I know flamethrowers weren't present in Doom, but it's the only major weapon archetype that I can think of that isn't represented in DoomRL. Since not all the weapons in DoomRL are from Doom (like the tristar blaster), a flamethrower could be an interesting rare or unique item. Even if not, I expect it would be useful for modders to have that prototype available.
Title: Re: Modding wishlist
Post by: Game Hunter on May 22, 2012, 09:52
I know flamethrowers weren't present in Doom, but it's the only major weapon archetype that I can think of that isn't represented in DoomRL.
*cough*grenade launcher*cough*

That aside, the important part of this wishlist is to come up with new or modified components that must exist/change in order to accomodate what is desired. Specifically: how should this flamethrower work? Given the maximum efficacy of available parts, all that's really necessary is a weapon with the chainfire alternate and MF_EXACT/MF_RAY flags (in non-modding terms: rapid-fire weapon, attack lands exactly where aimed, and attack damages non-solid objects between it at the target), possibly with some splash damage. In this way, we already have all the pieces necessary to create a flamethrower, assuming that MF_RAY, MF_EXACT, and explosions (if splash damage is wanted) interact properly with each other. This is, however, not the only possibility of creating a flamethrower if we want to consider things not currently possible by the given API.

You should try to describe your concept of a flamethrower as precisely as possible, so that we know what kinds of things have to be included in order to make it work.
Title: Re: Modding wishlist
Post by: Morat48 on May 22, 2012, 11:33
My concept of a flamethrower would be a weapon that causes damage to everything in an area. So in my view, a flamethrower prototype should have a spread and range, similar to a shotgun. These properties would define the area of effect. When the flamethrower is fired, everything within the area of effect is damaged (unless the attack is blocked by a wall or other impassable object).

So it would be pretty similar to a shotgun with MF_RAY, except:
1) The missiles travel the full weapon range, and stop completely at that range
2) The missile is displayed simultaneously at all points within the area of effect

An optional damage-over-time effect (ie setting things on fire) might also be useful.
Title: Re: Modding wishlist
Post by: Sanctus on May 22, 2012, 13:43
Combat shotgun + Firestorm pack + Power pack assembly?

i mean it would be nice to have such assembly in the game, not only in mod...
Title: Re: Modding wishlist
Post by: yaflhdztioxo on July 31, 2012, 17:35
124. Item health / resistance / whatever (basically a way to control how much damage that nice looking exotic on the floor can take before evaporating in a fireball of death).  Currently you can mark an item as IF_NODESTROY so your options are limited to one of two extremes.