ref: d0bb59a02c17dddef40f8f84364792aaf9c75771
parent: ad816c1bc28ab81ddb892ff878f65969bddd9764
parent: e1f905cd3c481d561f2faf8c80e800cffe4d2035
author: Fabian Greffrath <fabian@greffrath.com>
date: Tue Jan 20 01:58:34 EST 2015
Merge branch 'master' of https://github.com/chocolate-doom/chocolate-doom into hexndemo
--- a/PHILOSOPHY
+++ b/PHILOSOPHY
@@ -155,15 +155,8 @@
other hand, painstakingly emulating Vanilla Doom by starting with no
sound or music by default is not helpful to anyone.
-== Other philosophical aspects ==
+== Minimalism ==
-Chocolate Doom aims for maximal portability. That includes running on
-many different CPUs, different operating systems and different devices
-(ie. not just a desktop machine with a keyboard and mouse).
-
-Chocolate Doom is and will always remain Free Software. It will never
-include code that is not compatible with the GNU GPL.
-
Chocolate Doom aims to be minimalist and straightforward to configure;
in particular, the setup tool should have a sane interface. Part of
the inspiration for Chocolate Doom came from Boom's complicated maze
@@ -179,6 +172,29 @@
the setup tool. The assumption is that if you care enough about those
obscure features, editing a configuration file by hand should not be a
huge problem for you.
+
+Also inspirational was the README file from Havoc's Metacity window
+manager, where the list of features begins:
+
+ Boring window manager for the adult in you. Many window managers
+ are like Marshmallow Froot Loops; Metacity is like Cheerios.
+
+I'd like to think that Chocolate Doom's philosophy towards features is
+similar. The idea is for a source port that is boring. I find the best
+software - both proprietary and open source - is software that is
+"egoless": it does a job well without pretentions about its importance
+or delusions of grandeur. A couple of other notable examples of
+software that I feel embody this spirit of design in a beautiful way
+are Marco Pesenti Gritti's Epiphany web browser and Evince PDF viewer.
+
+== Other philosophical aspects ==
+
+Chocolate Doom aims for maximal portability. That includes running on
+many different CPUs, different operating systems and different devices
+(ie. not just a desktop machine with a keyboard and mouse).
+
+Chocolate Doom is and will always remain Free Software. It will never
+include code that is not compatible with the GNU GPL.
# vim: tw=70
--- a/codeblocks/doom.cbp
+++ b/codeblocks/doom.cbp
@@ -114,6 +114,9 @@
<Unit filename="../src/doom/deh_ammo.c">
<Option compilerVar="CC" />
</Unit>
+ <Unit filename="../src/doom/deh_bexstr.c">
+ <Option compilerVar="CC" />
+ </Unit>
<Unit filename="../src/doom/deh_cheat.c">
<Option compilerVar="CC" />
</Unit>
--- a/src/doom/g_game.c
+++ b/src/doom/g_game.c
@@ -281,7 +281,7 @@
static int G_NextWeapon(int direction)
{
weapontype_t weapon;
- int i;
+ int start_i, i;
// Find index in the table.
@@ -302,13 +302,13 @@
}
}
- // Switch weapon.
-
+ // Switch weapon. Don't loop forever.
+ start_i = i;
do
{
i += direction;
i = (i + arrlen(weapon_order_table)) % arrlen(weapon_order_table);
- } while (!WeaponSelectable(weapon_order_table[i].weapon));
+ } while (i != start_i && !WeaponSelectable(weapon_order_table[i].weapon));
return weapon_order_table[i].weapon_num;
}
@@ -445,12 +445,11 @@
// next_weapon variable is set to change weapons when
// we generate a ticcmd. Choose a new weapon.
- if (next_weapon != 0)
+ if (gamestate == GS_LEVEL && next_weapon != 0)
{
i = G_NextWeapon(next_weapon);
cmd->buttons |= BT_CHANGE;
cmd->buttons |= i << BT_WEAPONSHIFT;
- next_weapon = 0;
}
else
{
@@ -468,6 +467,8 @@
}
}
}
+
+ next_weapon = 0;
// mouse
if (mousebuttons[mousebforward])
--- a/src/heretic/g_game.c
+++ b/src/heretic/g_game.c
@@ -228,7 +228,7 @@
static int G_NextWeapon(int direction)
{
weapontype_t weapon;
- int i;
+ int start_i, i;
// Find index in the table.
@@ -249,13 +249,13 @@
}
}
- // Switch weapon.
-
+ // Switch weapon. Don't loop forever.
+ start_i = i;
do
{
i += direction;
i = (i + arrlen(weapon_order_table)) % arrlen(weapon_order_table);
- } while (!WeaponSelectable(weapon_order_table[i].weapon));
+ } while (i != start_i && !WeaponSelectable(weapon_order_table[i].weapon));
return weapon_order_table[i].weapon_num;
}
@@ -466,7 +466,8 @@
// we generate a ticcmd. Choose a new weapon.
// (Can't weapon cycle when the player is a chicken)
- if (players[consoleplayer].chickenTics == 0 && next_weapon != 0)
+ if (gamestate == GS_LEVEL
+ && players[consoleplayer].chickenTics == 0 && next_weapon != 0)
{
i = G_NextWeapon(next_weapon);
cmd->buttons |= BT_CHANGE;
--- a/src/hexen/g_game.c
+++ b/src/hexen/g_game.c
@@ -451,9 +451,11 @@
// Weapon cycling. Switch to previous or next weapon.
// (Disabled when player is a pig).
-
- if (players[consoleplayer].morphTics == 0 && next_weapon != 0)
+ if (gamestate == GS_LEVEL
+ && players[consoleplayer].morphTics == 0 && next_weapon != 0)
{
+ int start_i;
+
if (players[consoleplayer].pendingweapon == WP_NOCHANGE)
{
i = players[consoleplayer].readyweapon;
@@ -463,9 +465,11 @@
i = players[consoleplayer].pendingweapon;
}
+ // Don't loop forever.
+ start_i = i;
do {
- i = (i + next_weapon) % NUMWEAPONS;
- } while (!players[consoleplayer].weaponowned[i]);
+ i = (i + next_weapon + NUMWEAPONS) % NUMWEAPONS;
+ } while (i != start_i && !players[consoleplayer].weaponowned[i]);
cmd->buttons |= BT_CHANGE;
cmd->buttons |= i << BT_WEAPONSHIFT;
--- a/src/strife/g_game.c
+++ b/src/strife/g_game.c
@@ -289,7 +289,7 @@
static int G_NextWeapon(int direction)
{
weapontype_t weapon;
- int i;
+ int start_i, i;
// Find index in the table.
@@ -311,12 +311,12 @@
}
// Switch weapon.
-
+ start_i = i;
do
{
i += direction;
i = (i + arrlen(weapon_order_table)) % arrlen(weapon_order_table);
- } while (!WeaponSelectable(weapon_order_table[i].weapon));
+ } while (i != start_i && !WeaponSelectable(weapon_order_table[i].weapon));
return weapon_order_table[i].weapon_num;
}
@@ -511,12 +511,11 @@
// next_weapon variable is set to change weapons when
// we generate a ticcmd. Choose a new weapon.
- if (next_weapon != 0)
+ if (gamestate == GS_LEVEL && next_weapon != 0)
{
i = G_NextWeapon(next_weapon);
cmd->buttons |= BT_CHANGE;
cmd->buttons |= i << BT_WEAPONSHIFT;
- next_weapon = 0;
}
else
{
@@ -534,6 +533,8 @@
}
}
}
+
+ next_weapon = 0;
// mouse
if (mousebuttons[mousebforward])