Making the game harder, take two
Collapse
X
-
You can't change that perception. Dead characters have no real cost to them. The only way you could make wins/game more important than wins/time is to charge actual real money for each new character. You can't unlearn what has been learned, you can only hope to make it obsolete knowledge.One Ring to rule them all. One Ring to bind them.
One Ring to bring them all and in the darkness interrupt the movie.Comment
-
General Comment
Remember the "Is Angband dying" threads from a few years back?
Don't see those any more.
Also, a quote from a variant maintainer about their variant:
It is an attempt to answer the hypothetical question: What would Angband look like if it was more aggressive about taking more ideas from the variants?
Feel free to quote me selectively and out of context - turnabout is fair playOne for the Dark Lord on his dark throne
In the Land of Mordor where the Shadows lie.Comment
-
1. You work on a version with extremely limited circulation (i.e. yourself and one or two trusted testers), iterating for ages to rebalance so that nothing is too far out of whack when you release.
2. You work on a version with public nightly builds, getting yourself a potentially infinite tester base, but every single change gets picked apart and overanalysed instead of being treated the way it ought to be: as a single step in a long evolutionary process between releases.
If I can respectfully suggest a third option, it is that at some point the Angband dev team agree to all stop making changes and creating new ideas, and for 1-2 months to work on nothing but the "boring stuff", such as: refining game balance, de-bugging, and handling administrative details like help files. That's kind of how Diego and I work in NPP. As much as I hate stopping the creative progress, I found it very necessary.NPPAngband current home page: http://nppangband.bitshepherd.net/
Source code repository:
https://github.com/nppangband/NPPAngband_QT
Downloads:
https://app.box.com/s/1x7k65ghsmc31usmj329pb8415n1ux57Comment
-
Remember the "Is Angband dying" threads from a few years back?
Don't see those any more.
Also, a quote from a variant maintainer about their variant: "It is an attempt to answer the hypothetical question: What would Angband look like if it was more aggressive about taking more ideas from the variants? "
Seems like that question is no longer hypothetical; or maybe the pet peeves are different now.
Feel free to quote me selectively and out of context - turnabout is fair play
And it did work. NPP was quite popular at its peak. Unfortunately, full-fledged Vanilla development kind of undercuts my mission statement. Also, just as Vanilla development was picking up, I took a 3 year sabattical. So even though NPP development and the NPP forums remained active, it kind of fell off the map here at .oook.
But I think NPP still has it's place, even if it will probably never again be as widely played as it once was. It still has features like quests and the full fledged 4gai that will probably never make it into Vanilla, and I intend on retaining the "old-school" difficulty mentality. Many players still want a vanilla-like game with those options.NPPAngband current home page: http://nppangband.bitshepherd.net/
Source code repository:
https://github.com/nppangband/NPPAngband_QT
Downloads:
https://app.box.com/s/1x7k65ghsmc31usmj329pb8415n1ux57Comment
-
Right, and there are two ways to deal with this:
1. You work on a version with extremely limited circulation (i.e. yourself and one or two trusted testers), iterating for ages to rebalance so that nothing is too far out of whack when you release.
2. You work on a version with public nightly builds, getting yourself a potentially infinite tester base, but every single change gets picked apart and overanalysed instead of being treated the way it ought to be: as a single step in a long evolutionary process between releases.
3. You talk on the forum about what you're intending to do, and get feedback and overanalysis. Taking that on board, you work on a version by yourself, with much iteration to make sure nothing is too far out of whack, then you release it and get more feedback and overanalysis of what you just did. You use that to make further tweaks and adjustments in the next version.
P.S. The comment about being tempted to add achievements was a joke. Never mind.Comment
-
I set it to refresh the shops each time you go up a level (well, almost - there was the question of what to do if you get level drained - so I actually set it to refresh each time your max_exp crosses the level threshold rather than when you actually go up a level, but most of the time this will happen at the same time).
The thing that surprised me was how the predictability of it changed things. When you go up a level, you then have the urge to go back to town and see if the shops have anything new. And similarly, if you've already gone up one level since entering the dungeon and you're approaching a second level increase during the same dive, you start getting twitchy about going back to town before you hit that second level increase so that you don't miss out on any useful goodies that might have been added to the shop in your absence and you might lose if you let it refresh a second time without surfacing...
It's amazing how such a small thing can have such a large overall effect on your enjoyment level!Comment
-
3. You talk on the forum about what you're intending to do, and get feedback and overanalysis. Taking that on board, you work on a version by yourself, with much iteration to make sure nothing is too far out of whack, then you release it and get more feedback and overanalysis of what you just did. You use that to make further tweaks and adjustments in the next version.
But anyways, that's happening right now, as far as I can see. Shoot the breeze, get feedback, code something, test, give to others to test and pick apart, etc. Without the superlatives though I guess.Comment
-
I do think it accomplishes many of the other goals without destroying shops/shopping.Comment
-
But I think NPP still has it's place, even if it will probably never again be as widely played as it once was. It still has features like quests and the full fledged 4gai that will probably never make it into Vanilla, and I intend on retaining the "old-school" difficulty mentality. Many players still want a vanilla-like game with those options.One for the Dark Lord on his dark throne
In the Land of Mordor where the Shadows lie.Comment
-
Assuming things haven't changed too drastically since 3.1.2v23 (which is the version I modified), all you need to do is:
1) Find the process_world function in dungeon.c.
2) Comment out or delete the red lines shown below from the function (the function is quite long so I haven't shown the whole thing):
Code:/*** Handle the "town" (stores and sunshine) ***/ /* While in town */ if (!p_ptr->depth) { /* Hack -- Daybreak/Nighfall in town */ if (!(turn % ((10L * TOWN_DAWN) / 2))) { bool dawn; /* Check for dawn */ dawn = (!(turn % (10L * TOWN_DAWN))); /* Day breaks */ if (dawn) msg_print("The sun has risen."); /* Night falls */ else msg_print("The sun has fallen."); /* Illuminate */ town_illuminate(dawn); } } [color=red]/* While in the dungeon */ else { /*** Update the Stores ***/ /* Update the stores once a day (while in dungeon) */ if (!(turn % (10L * STORE_TURNS))) { int n; /* Message */ if (OPT(cheat_xtra)) msg_print("Updating Shops..."); /* Maintain each shop (except home) */ for (n = 0; n < MAX_STORES; n++) { /* Skip the home */ if (n == STORE_HOME) continue; /* Maintain */ store_maint(n); } /* Sometimes, shuffle the shop-keepers */ if (one_in_(STORE_SHUFFLE)) { /* Message */ if (OPT(cheat_xtra)) msg_print("Shuffling a Shopkeeper..."); /* Pick a random shop (except home) */ while (1) { n = randint0(MAX_STORES); if (n != STORE_HOME) break; } /* Shuffle it */ store_shuffle(n); } /* Message */ if (OPT(cheat_xtra)) msg_print("Done."); } }[/color] /*** Process the monsters ***/
3) Find the check_experience function in xtra2.c (it's the first function in the file).
4) Add the following function just before it:
Code:[color=yellow]/* * Restock all shops */ void restock_shops(void) { int n; /* Message */ if (OPT(cheat_xtra)) msg_print("Updating Shops..."); /* Maintain each shop (except home) */ for (n = 0; n < MAX_STORES; n++) { /* Skip the home */ if (n == STORE_HOME) continue; /* Maintain */ store_maint(n); } /* Sometimes, shuffle the shop-keepers */ if (one_in_(STORE_SHUFFLE)) { /* Message */ if (OPT(cheat_xtra)) msg_print("Shuffling a Shopkeeper..."); /* Pick a random shop (except home) */ while (1) { n = randint0(MAX_STORES); if (n != STORE_HOME) break; } /* Shuffle it */ store_shuffle(n); } /* Message */ if (OPT(cheat_xtra)) msg_print("Done."); }[/color]
Code:/* * Advance experience levels and print experience */ void check_experience(void) { [color=yellow]s16b old_max_lev;[/color] /* Hack -- lower limit */ if (p_ptr->exp < 0) p_ptr->exp = 0; /* Hack -- lower limit */ if (p_ptr->max_exp < 0) p_ptr->max_exp = 0; /* Hack -- upper limit */ if (p_ptr->exp > PY_MAX_EXP) p_ptr->exp = PY_MAX_EXP; /* Hack -- upper limit */ if (p_ptr->max_exp > PY_MAX_EXP) p_ptr->max_exp = PY_MAX_EXP; /* Hack -- maintain "max" experience */ if (p_ptr->exp > p_ptr->max_exp) p_ptr->max_exp = p_ptr->exp; [color=yellow]/* Store max_lev for later */ old_max_lev = p_ptr->max_lev;[/color] /* Redraw experience */ p_ptr->redraw |= (PR_EXP); /* Handle stuff */ handle_stuff(); /* Lose levels while possible */ while ((p_ptr->lev > 1) && (p_ptr->exp < (player_exp[p_ptr->lev-2] * p_ptr->expfact / 100L))) { /* Lose a level */ p_ptr->lev--; /* Update some stuff */ p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS); /* Redraw some stuff */ p_ptr->redraw |= (PR_LEV | PR_TITLE | PR_EXP); /* Handle stuff */ handle_stuff(); } /* Gain levels while possible */ while ((p_ptr->lev < PY_MAX_LEVEL) && (p_ptr->exp >= (player_exp[p_ptr->lev-1] * p_ptr->expfact / 100L))) { char buf[80]; /* Gain a level */ p_ptr->lev++; /* Save the highest level */ if (p_ptr->lev > p_ptr->max_lev) { p_ptr->max_lev = p_ptr->lev; /* Log level updates (TODO: perhaps only every other level or every 5) */ strnfmt(buf, sizeof(buf), "Reached level %d", p_ptr->lev); history_add(buf, HISTORY_GAIN_LEVEL, 0); } /* Message */ message_format(MSG_LEVEL, p_ptr->lev, "Welcome to level %d.", p_ptr->lev); /* Add to social class */ p_ptr->sc += randint1(2); if (p_ptr->sc > 150) p_ptr->sc = 150; /* Update some stuff */ p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS); /* Redraw some stuff */ p_ptr->redraw |= (PR_LEV | PR_TITLE | PR_EXP); /* Handle stuff */ handle_stuff(); } /* Gain max levels while possible */ while ((p_ptr->max_lev < PY_MAX_LEVEL) && (p_ptr->max_exp >= (player_exp[p_ptr->max_lev-1] * p_ptr->expfact / 100L))) { /* Gain max level */ p_ptr->max_lev++; /* Update some stuff */ p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS); /* Redraw some stuff */ p_ptr->redraw |= (PR_LEV | PR_TITLE | PR_EXP); /* Handle stuff */ handle_stuff(); } [color=yellow]/* Check for shop restocks at level change */ if(p_ptr->max_lev > old_max_lev) { /* Restock twice to give them a good shuffle */ restock_shops(); restock_shops(); }[/color] }
Comment
-
Since I made the changes for my own testing purposes, I didn't bother disabling the buying out of stores because it was easier to simply not do it while testing. Disabling that would just involve commenting out or deleting the relevant code in the buying routine in store.c, anyway.Comment
-
One thing that's been bugging me a lot with the focus on stores is that when I started playing Angband I tried both Angband and Nethack. Eventually I chose Angband mainly because the presence of the town made the early game a lot more beginner friendly.
I'd be very leery about any changes that made the town less accessible in the early game. I'm not calling out any specific proposals, just something to keep in mind.Comment
Comment