Commit graph

217 commits

Author SHA1 Message Date
spew 0e9973c80f games/galaxy: Change button 2 to reposition the galaxy, remove "move" from the button 3 menu 2017-03-01 15:59:26 -06:00
spew 0ab5d34be4 games/galaxy: tweak pausing behavior 2017-02-27 19:56:46 -06:00
cinap_lenrek 9ce9299d17 games/doom: ... but keep fd=2 open :) 2017-02-27 00:01:39 +01:00
cinap_lenrek 6064e1b6fb games/doom: avoid /dev/cursor fd leak into music process 2017-02-27 00:00:58 +01:00
cinap_lenrek 8834003afa games/doom: music support (thanks qu7uux) 2017-02-26 22:14:10 +01:00
cinap_lenrek 577de86669 midi: ignore bends, allow piping from stdin and to stdout, write in chunks from within sample loop (thanks qu7uux) 2017-02-26 19:30:48 +01:00
cinap_lenrek 297bf25f61 add games/mus midi converter (by qu7uux) 2017-02-26 19:23:52 +01:00
spew 63870e3ef4 games/galaxy: fix crash on write to closed display 2017-02-19 10:02:56 -06:00
spew 5aabf85d7c games/galaxy: add n-body simulator 2017-02-18 09:08:51 -06:00
spew 412b7501e4 games/mix: remove unused variable 2017-02-18 09:07:46 -06:00
cinap_lenrek b61799df43 playlistfs: fix playc chan type (thanks mischief) 2017-02-15 08:53:31 +01:00
cinap_lenrek f2d2f9374b jukefs: fix realloc sizes (thanks mischief) 2017-02-15 08:50:03 +01:00
aiju d9a964788b games/gb: fix bug that prevented timer data from being accessed (thanks qwx) 2017-02-12 12:28:02 +01:00
aiju fe1e95d6d8 games/gb: timer array should be unsigned (thanks qwx) 2017-02-12 00:38:17 +01:00
aiju 6176b55759 games/gb: fix typo in the routine to load timer data (thanks qwx) 2017-02-11 23:52:35 +01:00
spew 3b24eb4c1f games/mix: implement Knuth's specification for comments 2017-02-03 18:55:02 -06:00
spew acd4a952bd games/mix: fix STZ bug, print CMPA instruction 2017-01-23 13:41:21 -06:00
spew 339fda9164 games/mix: remove tests directory 2017-01-17 20:52:49 -06:00
spew 4b68ddfb5a games/mix: document -g option, rename tests to examples as it is in the man page 2017-01-17 20:51:08 -06:00
spew a0cc369c15 games/mix: Add Knuth MIX emulator/assembler 2017-01-10 11:42:11 -06:00
cinap_lenrek a0d4c5e208 make error handling in 9p service loops consistent
when we get eof, stop the loop immidiately and do not
rely on the read to eventually return an error.

when convM2S() fails to decode the message, error out
and stop the loop. there is no point in continuing.
2016-07-24 02:21:32 +02:00
cinap_lenrek cabbe0a84c doom: use Kprint for pause function (from qu7uux)
the pause function is different from just accessing the menu: it pauses both
single and multiplayer games, stops music and sound, and is recorded in demos
(does not cause a desync, unlike menu access).
this uses Kprint rather than Kbreak because Kbreak is e.g. Kctl+pause on some
keyboards.
2016-06-30 17:18:30 +02:00
cinap_lenrek ca8ca008f4 doom: fix blazing door sounds (from qu7uux)
blazing doors are a "fast" door type with its own sound effects, introduced in
doom2. doom2 map 2 has one right at the beginning.

this fixes two bugs:
- when a closing blazing door is completely shut, the closing sound effect is
  erroneously played again (the first time being when it began closing). this
  gives the impression of two doors closing.
- when reopening a closing blazing door (standing underneath a blazing door
  while it's closing), the sound effect for regular doors opening is played,
  instead of the one for blazing doors, because of a missing case in the switch
  statement.
2016-06-30 17:13:47 +02:00
stanley lieber cb1a49daac /sys/src/games/mkfile: add timmy 2016-06-26 16:47:19 -04:00
aiju 4821c261c4 added games/timmy 2016-06-23 21:12:06 +02:00
cinap_lenrek 45e2b4dfe9 games/mahjongg: off by one in bmatch(), fix hint() redraw (thanks Kenji) 2016-05-07 15:19:41 +02:00
spew 479ccd0aa1 add "snake" tracing effect to mole 2016-05-03 09:29:39 -05:00
cinap_lenrek ce84082205 change /dev/kbd to return multiple messages per read 2016-04-03 22:54:22 +02:00
BurnZeZ 730578d40c games/life: add -d delay parameter, -b color reversal parameter, and update manpage 2016-03-19 20:03:10 -04:00
cinap_lenrek 02dce7a2e4 games/doom: handle allocimage() failure 2016-02-28 11:44:53 +01:00
cinap_lenrek 340d83d49d games/doom: fix white window issue on exit
make kbdproc() and mouseproc() share fd table with the main proc
and not explicitely close the file descriptors. so /dev/mouse gets
closed *after* /dev/draw/new to avoid the white window refresh issue.
2016-01-30 19:11:33 +01:00
cinap_lenrek 285d96be4d doom: fix bogus pointer arithmetic, do sfx initialization in two passes for linked sounds 2015-10-08 00:37:54 +02:00
cinap_lenrek dd4c85cf3a games/doom: fix array offsets for respawn angle (thanks qu7uux)
mthing->angle is a signed short, and if ANG45 * mthing->angle/45 < 0, the
result of the right shift is sign extended.
afaik, an being 16bit in the dos version of doom, you'd endup with a
negative array offset, which would just access values from adjacent arrays
(finetangent[] for finecosine[], and finecosine[] for finesine[]), and it
would result in a misplaced teleport fog in some circumstances (fog is not
in front of the player on respawn, hence "silent teleport"). so, this fix is
bug incompatible, but this only affects live multiplay.
to test:
% hget http://doomedsda.us/dm/ahfx7_2.zip | unzip -sv
extracting AHFX7_2.TXT
extracting AHFX7_2.LMP
% mv AHFX7_2.LMP ahfx7_2.lmp
% games/doom -playdemo ahfx7_2
[...]
doom 10553: suicide: sys: trap: fault read addr=0x400429e10 pc=0x205b45
2015-08-16 22:12:11 +02:00
cinap_lenrek f369fa9d46 games/doom: fix gamma correction and key translation (thanks qu7uux)
KEY_F11 and KEY_F12 are not KEY_F1+11 and KEY_F1+12 as it is assumed in
runetokey(), which prevents these keystrokes from being used. rather than
change runetokey(), it seems better to just change the key definitions in
doomdef.h (the new values don't correspond to any other keys anyway).

F11 is the gamma correction key. to make gamma correction actually work,
i_video.c:I_SetPalette must also take into account usegamma (this was just
never ported). cf i_video.c:UploadNewPalette in source code release.

F12 is the spycam key. the spycam switches the renderview to a different player
during a coop game, or when watching a multiplayer demo. this feature only
changes the renderview; sounds, palette effects, status bar, etc. are still
from the first player's perspective.
2015-08-16 22:09:46 +02:00
cinap_lenrek f47f6af382 games/doom: fix idclev cheat in doom2 and final doom (thanks qu7uux)
a typo in st_stuff.c:ST_Responder prevents idclev (change level) cheat to work
in doom2 and final doom (gamemode == commercial): episode is set to 0, when
that's invalid, and ST_Responder just returns.
to test, while ingame type idclev, followed by:
. doom1: episode (1-3 or 1-4) then map number (1-9)
. doom2/final doom: map number (1-32)
incidentally, if the last digit typed is 1, the player's weapon will switch to
the fist, because of a different bug (basically kbdproc registering two events
when pressing a key, for 'c' and 'k' case).
2015-08-16 22:08:11 +02:00
cinap_lenrek 0d76dafaa0 games/doom: fix unterminated comment causing sound bugs (from qu7uux)
this bug was introduced in the plan9 port, and since i_sound.c compiles with
no warning, it was never noticed. in effect, the statement between the
unterminated comment and the next is ignored. channelids[] is used in addsfx()
to avoid re-adding certain sounds if they are already playing. one of those is
sfx_sawful, and because of this bug, it is added again each tic during which
the player fires the chainsaw, rather than reset every tic.
compare firing the chainsaw continuously with and without the patch (without
hitting an enemy).
2015-08-16 22:07:12 +02:00
cinap_lenrek b86a12149a games/doom: fix config file never being loaded or saved (thanks qu7uux)
basedefault[], the default path to the config file, is never set and remains
blank, unless -config %s is used (cd d_main.c). when games/doom attempts to
open the file, it silently fails and no config file is ever read or written.
this patch sets basedefault to a file in whatever directory a valid wad is
found in I_IdentifyWAD().
2015-07-30 20:30:47 +02:00
cinap_lenrek 25396d3ffd games/doom: display correct message on medkit pickup when health low (thanks qu7uux)
due to a typo in p_inter.c:P_TouchSpecialThing(), a message that is supposed
to show up when the player picks up a medikit while low on health (< 25), is
never displayed. the check for low health is done after the health is already
increased, so the condition is never true.
a cosmetic bug in all old doom executables that also seems interesting to fix.
to test: compare message displayed when picking up a medikit with and without
the patch
2015-07-30 20:02:23 +02:00
cinap_lenrek 5161442171 games/doom: fix ouchface not being shown when it should be (thanks qu7uux)
due to a typo in st_stuff.c:ST_updateFaceWidget(), doomguy mistakenly never
looks shocked when taking more than 20 damage, but rather when he gains more
than 20 health while being hit.
this is a cosmetic bug in all old versions of doom's executables, but it seems
appropriate to fix.
simple test: fire a rocket at a nearby wall, taking enough damage.
2015-07-30 20:00:43 +02:00
cinap_lenrek b579acef97 games/doom: add bug compatibility switches (thanks qu7uux)
these emulate bugs present in select versions of the released doom executables.
they are required to correctly play demos recorded with these but affect the
gameplay, so should be otherwise disabled.

-nobounce: lost souls don't bounce off floors and ceilings like intended due
to a misplaced check; this is fixed from ultimate doom on, but doom and doom2
are still affected.

-noztele: in final doom 1.9, things' altitude was erroneously not set to the
floor's height after teleporting. this was fixed in later versions of the
executables.

examples of desyncing demos:
(plutonia.wad, without -noztele) http://doomedsda.us/lmps/946/2/30pl2646.zip
(doom2.wad, without -nobounce) http://doomedsda.us/lmps/945/3/30nm2939.zip
2015-07-30 19:55:13 +02:00
cinap_lenrek f899b2fe3c games/doom: fix switch textures swapping in ultimate doom (thansk qu7uux)
gamemode is set according to the name of the main wad (cf. d_main.c), i.e.:
- doom1.wad: (shareware doom1, ep1 only) gamemode == shareware
- doom.wad: (registered doom1, ep1-3) gamemode == registered
- doomu.wad: (ultimate doom, ep1-4) gamemode == retail
- doom2.wad, plutonia.wad, tnt.wad: gamemode == commercial
most doom.wad's distributed online are, in fact, ultimate doom.
if your ultimate doom wad is correctly named doomu.wad, some switches in
episodes 2-4 won't swap their texture when toggled, because
p_switch.c:P_InitSwitchList() is only checking for registered doom1.

easy way to test: demo2 in either registered or ultimate doom: the player flips
a switch right at the beginning of the demo; if the main wad is called
doomu.wad, the switch won't change its texture.
% games/doom -playdemo demo2
if you rename the wad to doom.wad or alter d_main.c:IdentifyVersion, the switch
will swap its texture like it should.
2015-07-30 19:51:11 +02:00
cinap_lenrek fdb1698791 games/doom: implement filelength() (thanks quux)
this function is used when playing demos from external lumps. the game just
exits without this patch.
to test this, download a demo lump from somewhere, and play it with -playdemo %s
where %s is the file's name, without the .lmp extension:

(note that this one is a doom 2 demo, so it requires doom2.wad)
% hget http://doomedsda.us/lmps/945/3/30nm2939.zip | unzip -sv
extracting 30nm2939.LMP
extracting 30nm2939.txt
% mv 30nm2939.LMP 30nm2939.lmp	# checking for a lump filename is case sensitive
% games/doom -playdemo 30nm2939

the game exits when the demo ends. also, note that this demo will desync on
map06 (the crusher), because of an unrelated bug (that's another patch :>)

note: filelength() returns vlong, but file lengths for doom lumps are ints.
however, this might be used elsewhere (networking), so i'd leave it this way.
2015-07-29 14:51:00 +02:00
cinap_lenrek cc3abe39aa games/doom: remove Makefile 2015-06-12 17:50:43 +02:00
cinap_lenrek e4c3f92c16 games/doom: fix desyncing demo (thanks qwx)
the code used P_Random()-P_Random() in some places which has
undefined evaluation order resulting in the wrong pseudo random
numbers being returned causing demo playback to desync.

this change adds P_Random2() function which returns the right
delta-random number and uses it in place of P_Random()-P_Random()
expression.
2015-06-12 17:28:09 +02:00
cinap_lenrek 57ad566dfc games/doom: fix mips 2015-04-17 22:19:23 +02:00
cinap_lenrek 3d4fcc6c8a sokoban: fix non constant inializer 2015-04-16 14:29:13 +02:00
aiju e8221d07d8 games/gb: improve sound emulation by modelling analog behaviour 2015-04-12 14:55:25 +02:00
aiju 2a1d369281 games/gb: limit audio range to prevent clipping 2015-04-11 16:07:15 +02:00
aiju d9af840ca2 games/gb: improved audio code 2015-04-02 15:30:12 +02:00
aiju 8e588754bc games/gba: fix -3 crash and prevent >100% speed 2015-04-02 22:09:34 +02:00