This shows you the differences between two versions of the page.
dcss:brainstorm:god:concept:random_god:status [2013-06-09 13:11] qoala [TODO list] Updates based on rng-god.h |
dcss:brainstorm:god:concept:random_god:status [2013-06-10 09:38] (current) qoala [TODO list] made steps towards multiple randgods; fixed save compat |
||
---|---|---|---|
Line 21: | Line 21: | ||
* <del>!!! In enum.h, reset ''GOD_NAMELESS = 101'' (after all valid gods for the foreseeable future, broken by removal of ''GOD_RANDOM = 100'')</del> | * <del>!!! In enum.h, reset ''GOD_NAMELESS = 101'' (after all valid gods for the foreseeable future, broken by removal of ''GOD_RANDOM = 100'')</del> | ||
* In ''zotdef.cc'', make ''zotdef_create_altar'' less hackishly handle rand gods. | * In ''zotdef.cc'', make ''zotdef_create_altar'' less hackishly handle rand gods. | ||
- | * Make an enum for ''GOD_MIN_RANDGOD'', ''GOD_MAX_RANDGOD'', and ''NUM_RANDGODS'' (the difference between the min and max + 1) | + | * <del>Make an enum for ''GOD_MIN_RANDGOD'', ''GOD_MAX_RANDGOD'', and ''NUM_RANDGODS'' (the difference between the min and max + 1)</del> |
- | * Group randgod data into a ''struct randgod'', then store a variable number (''NUM_RANDGODS'') of them in ''struct player'' | + | * <del>Group randgod data into a ''struct randgod'', then store a variable number (''NUM_RANDGODS'') of them in ''struct player''</del> |
- | * Add piety decay rate to ''struct randgod''. | + | |
* Move god generation out of ''ng-init.cc'' | * Move god generation out of ''ng-init.cc'' | ||
* Move god name generation to its own function for easy replacement | * Move god name generation to its own function for easy replacement | ||
* In ''ng-init.cc'', stop including ''colour.h'' and ''rng-god-func.h'' after moving code | * In ''ng-init.cc'', stop including ''colour.h'' and ''rng-god-func.h'' after moving code | ||
- | * In ''player.h'', try to not include all of ''rng-func-data.h'', see other entries about splitting that header | + | * <del>In ''player.h'', try to not include all of ''rng-func-data.h'', see other entries about splitting that header</del> |
* Expose the ability to set randgod entries in ''god_abilities'' from ''abl-show.cc''? (Instead of initiallizing them via ''extern'') | * Expose the ability to set randgod entries in ''god_abilities'' from ''abl-show.cc''? (Instead of initiallizing them via ''extern'') | ||
* Expose the ability to set randgod entries in ''god_gain|lose_power_messages'' from ''religion.cc''? (Instead of initiallizing them via ''extern'') | * Expose the ability to set randgod entries in ''god_gain|lose_power_messages'' from ''religion.cc''? (Instead of initiallizing them via ''extern'') | ||
- | * !!! Move randgod store/load out of ''tag_*_char'' int ''tag_*_you_dungeon''. //Don't// break ''TAG_CHR_FORMAT''! | + | * <del>!!! Move randgod store/load out of ''tag_*_char'' int ''tag_*_you_dungeon''. //Don't// break ''TAG_CHR_FORMAT''!</del> |
- | * Add a minor version for the new data, so that we also maintain save compatibility at the less sever levels. | + | * <del>Add a minor version for the new data, so that we also maintain save compatibility at the less sever levels.</del> |
* <del>!!! //Don't// shift ''DNGN'' enums. Remove ''DNGN_ALTAR_UNUSED'' so that the fountain enums aren't shifted; that's what it was there for.</del> | * <del>!!! //Don't// shift ''DNGN'' enums. Remove ''DNGN_ALTAR_UNUSED'' so that the fountain enums aren't shifted; that's what it was there for.</del> | ||
* Learn which "map_marker" can change name/colour/tile/description of a feature (It's how portal entries work), so that we can fit all the randgods into one enum. | * Learn which "map_marker" can change name/colour/tile/description of a feature (It's how portal entries work), so that we can fit all the randgods into one enum. | ||
* Figure out if the above solution already sufficiently breaks all the code assuming that altar enums 1-to-1 map with god enums (in order), that it doesn't matter where we put the enums for god altars. | * Figure out if the above solution already sufficiently breaks all the code assuming that altar enums 1-to-1 map with god enums (in order), that it doesn't matter where we put the enums for god altars. | ||
* <del>Add a note that more DNGN_ALTAR_UNUSED enums should be generated on the next major version bump.</del> If we somehow retain the assumption that altars and gods map 1-to-1, this should also leave empty enums corresponding to the remaining randgod slots. | * <del>Add a note that more DNGN_ALTAR_UNUSED enums should be generated on the next major version bump.</del> If we somehow retain the assumption that altars and gods map 1-to-1, this should also leave empty enums corresponding to the remaining randgod slots. | ||
+ | * Update ''feature.cc'' and ''directn.cc'' to use the right god for a randgod altar | ||
* <del>Move definitions of rng_god_power and other stuff outside of ''rng-god-func.h'' and into ''rng-god.h''. Change includes.</del> | * <del>Move definitions of rng_god_power and other stuff outside of ''rng-god-func.h'' and into ''rng-god.h''. Change includes.</del> | ||
- | * Move ''rng_god_power'' data out of ''struct player''/''struct randgod''. Store just the enums? | ||
- | * Clear randgod stuff in player during player::init | ||
- | * Stop initializing randgod stuff on startup. | ||
- | * Remove include of ''abl-show.h'' from ''startup.cc'' if we move out of there. | ||
- | * If so, make sure things get initialized (and/or cleared) in ''you::init()'' or somewhere else called by ''main.cc:_reset_game()'' so that ''restart_after_game'' works properly. | ||
- | * Eventually random gods will be generated or loaded when a map (or wiz command or zotdef ability) request a new one. | ||
Lower priority stuff (some of the above might belong here) | Lower priority stuff (some of the above might belong here) | ||
* In rng-god.h, Convert labels to an enum of bit flags | * In rng-god.h, Convert labels to an enum of bit flags | ||
+ | * Add piety decay rate to ''struct randgod''. | ||
* Change the costs (in var name and order) to match those in ability_def | * Change the costs (in var name and order) to match those in ability_def | ||
* Make piety cost a ''generic_cost'', like in abiliy_def | * Make piety cost a ''generic_cost'', like in abiliy_def | ||
Line 53: | Line 48: | ||
* Stop exposing the raw ''rng_god_power'' array to every file including ''rng-god.h'' | * Stop exposing the raw ''rng_god_power'' array to every file including ''rng-god.h'' | ||
* Give ''rng_god_power'' the space to store other function types beyond invocation (and allow the perl script to store NULL references if a function isn't present). | * Give ''rng_god_power'' the space to store other function types beyond invocation (and allow the perl script to store NULL references if a function isn't present). | ||
+ | * ''abl-show.cc'': ''rng_god_ability_defs'' should be initialized at an appropriate time rather than overwritten every time ''get_ability_def'' is called. | ||
+ | * See about using a variant of ''random_choose_weighted'' in ''_generate_rng_god_powers()'' | ||
+ | * Move ''rng_god_power'' data out of ''stuct player''/''struct randgod''. Store just the enums? | ||
+ | * Ah, the current system stores in the save a string ''id'' matching the ''id'' of the power, and stores in the god struct a pointer into the power list. Still might want enums, but the current is acceptable for now. | ||
+ | * Find a better way to loop over the list of ''rng_god_powers'' than checking ''(id.length() == 0)'', as currently done in ''_generate_rng_god_powers()'' | ||
+ | * Clear randgod stuff in player during player::init | ||
+ | * Fix initialisation of random god abilities on restart_after_game. Abilities below the last (non-trademark?) don't appear on the 'a' list. Those same abilities seem to also be retained between generation attempts. | ||
+ | * Stop initializing randgod stuff on startup. | ||
+ | * Remove include of ''abl-show.h'' from ''startup.cc'' if we move out of there. | ||
+ | * If so, make sure things get initialized (and/or cleared) in ''you::init()'' or somewhere else called by ''main.cc:_reset_game()'' so that ''restart_after_game'' works properly. | ||
+ | * Eventually random gods will be generated or loaded when a map (or wiz command or zotdef ability) request a new one. | ||
+ | * Fix ability gain/loss message for DETECT_SLEEPERS "You //can will// ..." |