draconisPW / PWMAngband

A free, multi-player roguelike dungeon exploration game based on Angband
35 stars 12 forks source link

Rework Rings of Power #615

Closed draconisPW closed 7 months ago

draconisPW commented 8 months ago

Currently, Rings of Power are overpowered randart rings with usually a crapload of stats and resistances, but with aggravation. Since aggravation is pretty much a death sentence when recalling/changing level, people tend just to collect them and put them in their house for display instead of being tempted to use them.

In the original story, Rings of Power were made by Sauron as temptation for men, elves and dwarves to ultimately control them. They were powerful, but in fact not THAT powerful. Except the One Ring. The elven rings were not tainted by Sauron and as such appear in Angband as powerful static arts without any penalty, while the One Ring is uberpowerful but permanently cursed with aggravation. I'd like to make regular Rings of Power dropped by Nazguls more close to the story. Here's my proposed changes:

igroglaz commented 8 months ago

it's interesting idea. though I'm not completely agree with statement that "people tend just to collect them and put them in their house for display instead of being tempted to use them". At endgame you might consider to use them VS certain bosses on clean levels. You clear the level from everything except boss, then wear ring to fight with him.

anyway.

and I got another approach to it.. kinda roguelikish, with Nethackish spirit

1) make rings non-IDeble by any means except by wearing them 2) this way players will have to wear rings to ID them 3) make nazgul rings to be powerful (like they are now), but sticky for.. lets say ~+-1000 turns.. so you can not take them off for this time 4) make cursed turns count only inside of the dungeon (I did it with CD in Tangaria - cooldowns for skills restores only inside of the dungeon) 5) add your cool idea with adding a random curse up to 5 times during this time

this way it will be closer to LotR lore as people do not know which rings they find until it's too late :D in general *bands have too much ID cheeze than makes exploration not so roguelikish. So with this time detail we can make game more diverse

igroglaz commented 8 months ago

in general atm curses simply avoided by players. which feels pretty dull. we should give players taste of curses. so they will feel more different aspects of gameplay where they have to survive for certain time under the curse.

and people still will be motivated to ID rings like this - as it's always can be The One Ring... btw if we will add this system - we can make chance to get The One Ring 2x higher. I didn't find one ring in my life ever :D so with this taste of unknown we can give additional motivation...

igroglaz commented 8 months ago

Currently, Rings of Power are overpowered randart rings with usually a crapload of stats and resistances, but with aggravation. Since aggravation is pretty much a death sentence when recalling/changing level, people tend just to collect them and put them in their house for display instead of being tempted to use them.

considering estimation of the power of such rings it might be useful to analyze past dumps https://stat.tangaria.com/ it's not too many (I hope with 2nd chance we will have more high lvl chars soon), but still might be useful

draconisPW commented 7 months ago

Implemented in d991b3a in a much simpler version:

igroglaz commented 6 months ago

@draconisPW how did you test nazgul rings? I failed to generate them via admin menu. And when I kill Nazgul with admin char - nothing drops (I suppose cause admin by default defeated all monsters). Is there way to get the rings fast?

draconisPW commented 6 months ago

Admin by default has killed all uniques so you have to edit monster.txt and give the drop to any regular monster. I did that with small kobold so any char could get one for testing.

igroglaz commented 6 months ago

it might be good to move worn increment to 1/second, as now it takes plenty of CPU (did it in T, seems to work) ` / Inform the client every second / if (!(turn.turn % cfg_fps)) { Send_turn(p, ht_div(&p->game_turn, cfg_fps), ht_div(&p->player_turn, 1), ht_div(&p->active_turn, 1));

        // moved up to save CPU and avoid big numbers
        /* Increment worn turn counter if inside a dungeon */
        if (p->wpos.depth > 0)
        {
            struct object *right = slot_object(p, slot_by_name(p, "right hand"));
            struct object *left = slot_object(p, slot_by_name(p, "left hand"));

            process_worn(p, right);
            process_worn(p, left);
        }
    }
}`

to do so we also simplify save to `wr_u16b(obj->worn_turn);`

in T I've redesigned RoP with custom curse and will write an article about it on T website
draconisPW commented 6 months ago

Sure, 1.6.1 isn't out yet so I can rewrite the savefiles with an integer (max worn_turn is 2 hours so 7200 seconds). This has the advantage of not calling the costly slot_by_name() function every turn.

draconisPW commented 6 months ago

Change implemented here: b65b788