[Scummvm-git-logs] scummvm master -> af529f568baa1f9e47a957e84fd17561c15613e0

bluegr noreply at scummvm.org
Sun Nov 14 11:41:05 UTC 2021


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
af529f568b AUDIO: Use nullptr


Commit: af529f568baa1f9e47a957e84fd17561c15613e0
    https://github.com/scummvm/scummvm/commit/af529f568baa1f9e47a957e84fd17561c15613e0
Author: Orgad Shaneh (orgads at gmail.com)
Date: 2021-11-14T13:41:02+02:00

Commit Message:
AUDIO: Use nullptr

Using clang-tidy modernize-use-nullptr

Changed paths:
    audio/adlib.cpp
    audio/adlib_ms.cpp
    audio/audiostream.cpp
    audio/decoders/3do.cpp
    audio/decoders/ac3.cpp
    audio/decoders/adpcm.cpp
    audio/decoders/aiff.cpp
    audio/decoders/asf.cpp
    audio/decoders/flac.cpp
    audio/decoders/mac_snd.cpp
    audio/decoders/mp3.cpp
    audio/decoders/quicktime.cpp
    audio/decoders/raw.cpp
    audio/decoders/voc.cpp
    audio/decoders/vorbis.cpp
    audio/decoders/wave.cpp
    audio/decoders/wma.cpp
    audio/fmopl.cpp
    audio/mididrv.cpp
    audio/mididrv_ms.cpp
    audio/midiparser.cpp
    audio/midiparser_qt.cpp
    audio/midiparser_smf.cpp
    audio/midiparser_xmidi.cpp
    audio/midiplayer.cpp
    audio/miles_adlib.cpp
    audio/miles_midi.cpp
    audio/mixer.cpp
    audio/mods/infogrames.cpp
    audio/mods/module.cpp
    audio/mods/module_mod_xm_s3m.cpp
    audio/mods/paula.cpp
    audio/mods/protracker.cpp
    audio/mods/rjp1.cpp
    audio/mods/soundfx.cpp
    audio/mods/tfmx.cpp
    audio/mpu401.cpp
    audio/mt32gm.cpp
    audio/rate.cpp
    audio/softsynth/fluidsynth.cpp
    audio/softsynth/fmtowns_pc98/pc98_audio.cpp
    audio/softsynth/fmtowns_pc98/pcm_common.cpp
    audio/softsynth/fmtowns_pc98/sega_audio.cpp
    audio/softsynth/fmtowns_pc98/towns_audio.cpp
    audio/softsynth/fmtowns_pc98/towns_euphony.cpp
    audio/softsynth/fmtowns_pc98/towns_pc98_driver.cpp
    audio/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp
    audio/softsynth/fmtowns_pc98/towns_pc98_plugins.cpp
    audio/softsynth/mt32.cpp
    audio/softsynth/mt32/Analog.cpp
    audio/softsynth/mt32/BReverbModel.cpp
    audio/softsynth/mt32/File.cpp
    audio/softsynth/mt32/FileStream.cpp
    audio/softsynth/mt32/LA32FloatWaveGenerator.cpp
    audio/softsynth/mt32/LA32WaveGenerator.cpp
    audio/softsynth/mt32/MidiStreamParser.cpp
    audio/softsynth/mt32/Part.cpp
    audio/softsynth/mt32/Partial.cpp
    audio/softsynth/mt32/PartialManager.cpp
    audio/softsynth/mt32/Poly.cpp
    audio/softsynth/mt32/ROMInfo.cpp
    audio/softsynth/mt32/SampleRateConverter.cpp
    audio/softsynth/mt32/Synth.cpp
    audio/softsynth/mt32/TVA.cpp
    audio/softsynth/mt32/TVP.cpp
    audio/softsynth/mt32/c_interface/c_interface.cpp
    audio/softsynth/mt32/srchelper/srctools/src/IIR2xResampler.cpp
    audio/softsynth/mt32/srchelper/srctools/src/ResamplerModel.cpp
    audio/softsynth/opl/dbopl.cpp
    audio/softsynth/opl/dosbox.cpp
    audio/softsynth/opl/mame.cpp
    audio/soundfont/rifffile.cpp
    audio/soundfont/sf2file.cpp
    audio/soundfont/vgminstrset.cpp
    audio/soundfont/vgmsamp.cpp


diff --git a/audio/adlib.cpp b/audio/adlib.cpp
index 74d841bc96..ae9575d971 100644
--- a/audio/adlib.cpp
+++ b/audio/adlib.cpp
@@ -108,7 +108,7 @@ protected:
 
 public:
 	AdLibPart() {
-		_voice = 0;
+		_voice = nullptr;
 		_pitchBend = 0;
 		_pitchBendFactor = 2;
 		//_transposeEff = 0;
@@ -120,7 +120,7 @@ public:
 		_priEff = 0;
 		_pan = 64;
 
-		_owner = 0;
+		_owner = nullptr;
 		_allocated = false;
 		_channel = 0;
 
@@ -1303,8 +1303,8 @@ void AdLibPercussionChannel::noteOff(byte note) {
 }
 
 void AdLibPercussionChannel::noteOn(byte note, byte velocity) {
-	const AdLibInstrument *inst = NULL;
-	const AdLibInstrument *sec  = NULL;
+	const AdLibInstrument *inst = nullptr;
+	const AdLibInstrument *sec  = nullptr;
 
 	// The custom instruments have priority over the default mapping
 	// We do not support custom instruments in OPL3 mode though.
@@ -1387,9 +1387,9 @@ MidiDriver_ADLIB::MidiDriver_ADLIB() {
 	_opl3Mode = false;
 #endif
 
-	_regCache = 0;
+	_regCache = nullptr;
 #ifdef ENABLE_OPL3
-	_regCacheSecondary = 0;
+	_regCacheSecondary = nullptr;
 #endif
 
 	_timerCounter = 0;
@@ -1404,9 +1404,9 @@ MidiDriver_ADLIB::MidiDriver_ADLIB() {
 	_percussion.init(this, 9);
 	_timerIncrease = 0xD69;
 	_timerThreshold = 0x411B;
-	_opl = 0;
-	_adlibTimerProc = 0;
-	_adlibTimerParam = 0;
+	_opl = nullptr;
+	_adlibTimerProc = nullptr;
+	_adlibTimerParam = nullptr;
 	_isOpen = false;
 }
 
@@ -1477,7 +1477,7 @@ void MidiDriver_ADLIB::close() {
 
 	// Turn off the OPL emulation
 	delete _opl;
-	_opl = 0;
+	_opl = nullptr;
 
 	free(_regCache);
 #ifdef ENABLE_OPL3
@@ -1592,7 +1592,7 @@ MidiChannel *MidiDriver_ADLIB::allocateChannel() {
 			return part;
 		}
 	}
-	return NULL;
+	return nullptr;
 }
 
 // All the code brought over from IMuseAdLib
@@ -1678,7 +1678,7 @@ void MidiDriver_ADLIB::mcOff(AdLibVoice *voice) {
 		tmp->_next = voice->_next;
 	else
 		voice->_part->_voice = voice->_next;
-	voice->_part = NULL;
+	voice->_part = nullptr;
 }
 
 void MidiDriver_ADLIB::mcIncStuff(AdLibVoice *voice, Struct10 *s10, Struct11 *s11) {
@@ -1959,7 +1959,7 @@ void MidiDriver_ADLIB::partKeyOn(AdLibPart *part, const AdLibInstrument *instr,
 }
 
 AdLibVoice *MidiDriver_ADLIB::allocateVoice(byte pri) {
-	AdLibVoice *ac, *best = NULL;
+	AdLibVoice *ac, *best = nullptr;
 	int i;
 
 	for (i = 0; i < 9; i++) {
@@ -1978,7 +1978,7 @@ AdLibVoice *MidiDriver_ADLIB::allocateVoice(byte pri) {
 
 	/* SCUMM V3 games don't have note priorities, first comes wins. */
 	if (_scummSmallHeader)
-		return NULL;
+		return nullptr;
 
 	if (best)
 		mcOff(best);
@@ -1989,7 +1989,7 @@ void MidiDriver_ADLIB::linkMc(AdLibPart *part, AdLibVoice *voice) {
 	voice->_part = part;
 	voice->_next = (AdLibVoice *)part->_voice;
 	part->_voice = voice;
-	voice->_prev = NULL;
+	voice->_prev = nullptr;
 
 	if (voice->_next)
 		voice->_next->_prev = voice;
diff --git a/audio/adlib_ms.cpp b/audio/adlib_ms.cpp
index 2a05971a92..6caa62b540 100644
--- a/audio/adlib_ms.cpp
+++ b/audio/adlib_ms.cpp
@@ -362,7 +362,7 @@ void MidiDriver_ADLIB_Multisource::ActiveNote::init() {
 	noteCounterValue = 0;
 
 	instrumentId = 0;
-	instrumentDef = 0;
+	instrumentDef = nullptr;
 
 	channelAllocated = false;
 }
@@ -373,7 +373,7 @@ bool MidiDriver_ADLIB_Multisource::detectOplType(OPL::Config::OplType oplType) {
 
 MidiDriver_ADLIB_Multisource::MidiDriver_ADLIB_Multisource(OPL::Config::OplType oplType) :
 		_oplType(oplType),
-		_opl(0),
+		_opl(nullptr),
 		_isOpen(false),
 		_accuracyMode(ACCURACY_MODE_SB16_WIN95),
 		_allocationMode(ALLOCATION_MODE_DYNAMIC),
@@ -455,7 +455,7 @@ void MidiDriver_ADLIB_Multisource::close() {
 	if (_opl) {
 		_opl->stop();
 		delete _opl;
-		_opl = 0;
+		_opl = nullptr;
 	}
 }
 
@@ -501,12 +501,12 @@ uint32 MidiDriver_ADLIB_Multisource::getBaseTempo() {
 
 MidiChannel *MidiDriver_ADLIB_Multisource::allocateChannel() {
 	// This driver does not use MidiChannel objects.
-	return 0;
+	return nullptr;
 }
 
 MidiChannel *MidiDriver_ADLIB_Multisource::getPercussionChannel() {
 	// This driver does not use MidiChannel objects.
-	return 0;
+	return nullptr;
 }
 
 void MidiDriver_ADLIB_Multisource::send(int8 source, uint32 b) {
@@ -1083,7 +1083,7 @@ void MidiDriver_ADLIB_Multisource::recalculateVolumes(uint8 channel, uint8 sourc
 }
 
 MidiDriver_ADLIB_Multisource::InstrumentInfo MidiDriver_ADLIB_Multisource::determineInstrument(uint8 channel, uint8 source, uint8 note) {
-	InstrumentInfo instrument = { 0, 0, 0 };
+	InstrumentInfo instrument = { 0, nullptr, 0 };
 
 	if (channel == MIDI_RHYTHM_CHANNEL) {
 		// On the rhythm channel, the note played indicates which instrument
diff --git a/audio/audiostream.cpp b/audio/audiostream.cpp
index 9119a91912..03fc69d359 100644
--- a/audio/audiostream.cpp
+++ b/audio/audiostream.cpp
@@ -67,7 +67,7 @@ static const StreamFileFormat STREAM_FILEFORMATS[] = {
 };
 
 SeekableAudioStream *SeekableAudioStream::openStreamFile(const Common::String &basename) {
-	SeekableAudioStream *stream = NULL;
+	SeekableAudioStream *stream = nullptr;
 	Common::File *fileHandle = new Common::File();
 
 	for (int i = 0; i < ARRAYSIZE(STREAM_FILEFORMATS); ++i) {
@@ -76,14 +76,14 @@ SeekableAudioStream *SeekableAudioStream::openStreamFile(const Common::String &b
 		if (fileHandle->isOpen()) {
 			// Create the stream object
 			stream = STREAM_FILEFORMATS[i].openStreamFile(fileHandle, DisposeAfterUse::YES);
-			fileHandle = 0;
+			fileHandle = nullptr;
 			break;
 		}
 	}
 
 	delete fileHandle;
 
-	if (stream == NULL)
+	if (stream == nullptr)
 		debug(1, "SeekableAudioStream::openStreamFile: Could not open compressed AudioFile %s", basename.c_str());
 
 	return stream;
@@ -161,7 +161,7 @@ AudioStream *makeLoopingAudioStream(SeekableAudioStream *stream, Timestamp start
 		if (start >= end) {
 			warning("makeLoopingAudioStream: start (%d) >= end (%d)", start.msecs(), end.msecs());
 			delete stream;
-			return 0;
+			return nullptr;
 		}
 
 		return makeLoopingAudioStream(new SubSeekableAudioStream(stream, start, end), loops);
diff --git a/audio/decoders/3do.cpp b/audio/decoders/3do.cpp
index 60cc515fdd..8475c0a459 100644
--- a/audio/decoders/3do.cpp
+++ b/audio/decoders/3do.cpp
@@ -36,7 +36,7 @@ namespace Audio {
 RewindableAudioStream *make3DO_ADP4AudioStream(Common::SeekableReadStream *stream, uint16 sampleRate, bool stereo, uint32 *audioLengthMSecsPtr, DisposeAfterUse::Flag disposeAfterUse, audio_3DO_ADP4_PersistentSpace *persistentSpace) {
 	if (stereo) {
 		warning("make3DO_ADP4Stream(): stereo currently not supported");
-		return 0;
+		return nullptr;
 	}
 
 	if (audioLengthMSecsPtr) {
@@ -104,7 +104,7 @@ int16 Audio3DO_ADP4_Stream::decodeSample(byte compressedNibble) {
 // Writes the requested amount (or less) of samples into buffer and returns the amount of samples, that got written
 int Audio3DO_ADP4_Stream::readBuffer(int16 *buffer, const int numSamples) {
 	int8  byteCache[AUDIO_3DO_CACHE_SIZE];
-	int8 *byteCachePtr = NULL;
+	int8 *byteCachePtr = nullptr;
 	int   byteCacheSize = 0;
 	int   requestedBytesLeft = 0;
 	int   decodedSamplesCount = 0;
@@ -220,7 +220,7 @@ bool Audio3DO_SDX2_Stream::rewind() {
 // Writes the requested amount (or less) of samples into buffer and returns the amount of samples, that got written
 int Audio3DO_SDX2_Stream::readBuffer(int16 *buffer, const int numSamples) {
 	int8  byteCache[AUDIO_3DO_CACHE_SIZE];
-	int8 *byteCachePtr = NULL;
+	int8 *byteCachePtr = nullptr;
 	int   byteCacheSize = 0;
 	int   requestedBytesLeft = numSamples; // 1 byte per 16-bit sample
 	int   decodedSamplesCount = 0;
@@ -323,7 +323,7 @@ RewindableAudioStream *make3DO_SDX2AudioStream(Common::SeekableReadStream *strea
 	if (stereo) {
 		if (stream->size() & 1) {
 			warning("make3DO_SDX2Stream(): stereo data is uneven size");
-			return 0;
+			return nullptr;
 		}
 	}
 
diff --git a/audio/decoders/ac3.cpp b/audio/decoders/ac3.cpp
index eb25fb2645..64f2001541 100644
--- a/audio/decoders/ac3.cpp
+++ b/audio/decoders/ac3.cpp
@@ -66,7 +66,7 @@ private:
 	double _audioGain;
 };
 
-AC3Stream::AC3Stream(double decibel) : _a52State(0), _frameSize(0), _inBufPtr(0), _flags(0), _sampleRate(0) {
+AC3Stream::AC3Stream(double decibel) : _a52State(nullptr), _frameSize(0), _inBufPtr(nullptr), _flags(0), _sampleRate(0) {
 	_audioGain = pow(2, decibel / 6);
 }
 
@@ -117,7 +117,7 @@ void AC3Stream::deinit() {
 
 	_audStream.reset();
 	a52_free(_a52State);
-	_a52State = 0;
+	_a52State = nullptr;
 }
 
 void AC3Stream::queuePacket(Common::SeekableReadStream *data) {
@@ -195,7 +195,7 @@ void AC3Stream::queuePacket(Common::SeekableReadStream *data) {
 PacketizedAudioStream *makeAC3Stream(Common::SeekableReadStream &firstPacket, double decibel) {
 	Common::ScopedPtr<AC3Stream> stream(new AC3Stream(decibel));
 	if (!stream->init(firstPacket))
-		return 0;
+		return nullptr;
 
 	return stream.release();
 }
diff --git a/audio/decoders/adpcm.cpp b/audio/decoders/adpcm.cpp
index 1f0ac3b6cf..f9e4a51ef1 100644
--- a/audio/decoders/adpcm.cpp
+++ b/audio/decoders/adpcm.cpp
@@ -607,7 +607,7 @@ PacketizedAudioStream *makePacketizedADPCMStream(ADPCMType type, int rate, int c
 	case kADPCMOki:
 	case kADPCMXA:
 	case kADPCMDVI:
-		return 0;
+		return nullptr;
 	default:
 		break;
 	}
diff --git a/audio/decoders/aiff.cpp b/audio/decoders/aiff.cpp
index b475d7a6af..637e91f624 100644
--- a/audio/decoders/aiff.cpp
+++ b/audio/decoders/aiff.cpp
@@ -79,7 +79,7 @@ RewindableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, Dispos
 		if (disposeAfterUse == DisposeAfterUse::YES)
 			delete stream;
 
-		return 0;
+		return nullptr;
 	}
 
 	stream->readUint32BE(); // file size
@@ -92,7 +92,7 @@ RewindableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, Dispos
 		if (disposeAfterUse == DisposeAfterUse::YES)
 			delete stream;
 
-		return 0;
+		return nullptr;
 	}
 
 	// From here on, we only care about the COMM and SSND chunks, which are
@@ -104,7 +104,7 @@ RewindableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, Dispos
 	uint16 channels = 0, bitsPerSample = 0;
 	uint32 rate = 0;
 	uint32 codec = kCodecPCM; // AIFF default
-	Common::SeekableReadStream *dataStream = 0;
+	Common::SeekableReadStream *dataStream = nullptr;
 
 	while (!(foundCOMM && foundSSND) && !stream->err() && !stream->eos()) {
 		uint32 tag = stream->readUint32BE();
@@ -153,7 +153,7 @@ RewindableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, Dispos
 				delete stream;
 
 			delete dataStream;
-			return 0;
+			return nullptr;
 		default:
 			debug(1, "Skipping AIFF '%s' chunk", tag2str(tag));
 			break;
@@ -173,7 +173,7 @@ RewindableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, Dispos
 			delete stream;
 
 		delete dataStream;
-		return 0;
+		return nullptr;
 	}
 
 	if (!foundSSND) {
@@ -182,7 +182,7 @@ RewindableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, Dispos
 		if (disposeAfterUse == DisposeAfterUse::YES)
 			delete stream;
 
-		return 0;
+		return nullptr;
 	}
 
 	// We only implement a subset of the AIFF standard.
@@ -190,7 +190,7 @@ RewindableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, Dispos
 	if (channels < 1 || channels > 2) {
 		warning("makeAIFFStream: Only 1 or 2 channels are supported, not %d", channels);
 		delete dataStream;
-		return 0;
+		return nullptr;
 	}
 
 	// Seek to the start of dataStream, required for at least FileStream
@@ -231,7 +231,7 @@ RewindableAudioStream *makeAIFFStream(Common::SeekableReadStream *stream, Dispos
 	}
 
 	delete dataStream;
-	return 0;
+	return nullptr;
 }
 
 } // End of namespace Audio
diff --git a/audio/decoders/asf.cpp b/audio/decoders/asf.cpp
index d4d8067daa..cf3dd872b8 100644
--- a/audio/decoders/asf.cpp
+++ b/audio/decoders/asf.cpp
@@ -148,11 +148,11 @@ ASFStream::Packet::~Packet() {
 }
 
 ASFStream::ASFStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse) : _stream(stream), _disposeAfterUse(disposeAfterUse) {
-	_extraData = 0;
-	_lastPacket = 0;
+	_extraData = nullptr;
+	_lastPacket = nullptr;
 	_curPacket = 0;
-	_codec = 0;
-	_curAudioStream = 0;
+	_codec = nullptr;
+	_curAudioStream = nullptr;
 	_curSequenceNumber = 1; // They always start at one
 
 	ASFGUID guid = ASFGUID(*_stream);
@@ -274,10 +274,10 @@ bool ASFStream::rewind() {
 
 	// Reset our packet counter
 	_curPacket = 0;
-	delete _lastPacket; _lastPacket = 0;
+	delete _lastPacket; _lastPacket = nullptr;
 
 	// Delete a stream if we have one
-	delete _curAudioStream; _curAudioStream = 0;
+	delete _curAudioStream; _curAudioStream = nullptr;
 
 	// Reset this too
 	_curSequenceNumber = 1;
@@ -381,7 +381,7 @@ Codec *ASFStream::createCodec() {
 		error("ASFStream::createAudioStream(): Unknown compression 0x%04x", _compression);
 	}
 
-	return 0;
+	return nullptr;
 }
 
 AudioStream *ASFStream::createAudioStream() {
@@ -413,7 +413,7 @@ AudioStream *ASFStream::createAudioStream() {
 	if (_codec)
 		return _codec->decodeFrame(*stream);
 
-	return 0;
+	return nullptr;
 }
 
 int ASFStream::readBuffer(int16 *buffer, const int numSamples) {
@@ -425,7 +425,7 @@ int ASFStream::readBuffer(int16 *buffer, const int numSamples) {
 
 			if (_curAudioStream->endOfData()) {
 				delete _curAudioStream;
-				_curAudioStream = 0;
+				_curAudioStream = nullptr;
 			}
 		}
 
@@ -452,7 +452,7 @@ SeekableAudioStream *makeASFStream(
 
 	if (s && s->endOfData()) {
 		delete s;
-		return 0;
+		return nullptr;
 	}
 
 	return s;
diff --git a/audio/decoders/flac.cpp b/audio/decoders/flac.cpp
index 6acf18ef96..d96fb18916 100644
--- a/audio/decoders/flac.cpp
+++ b/audio/decoders/flac.cpp
@@ -188,13 +188,13 @@ FLACStream::FLACStream(Common::SeekableReadStream *inStream, bool dispose)
 		_inStream(inStream),
 		_disposeAfterUse(dispose),
 		_length(0, 1000), _lastSample(0),
-		_outBuffer(NULL), _requestedSamples(0), _lastSampleWritten(false),
+		_outBuffer(nullptr), _requestedSamples(0), _lastSampleWritten(false),
 		_methodConvertBuffers(&FLACStream::convertBuffersGeneric)
 {
 	assert(_inStream);
 	memset(&_streaminfo, 0, sizeof(_streaminfo));
 
-	_sampleCache.bufReadPos = NULL;
+	_sampleCache.bufReadPos = nullptr;
 	_sampleCache.bufFill = 0;
 
 	_methodConvertBuffers = &FLACStream::convertBuffersGeneric;
@@ -238,7 +238,7 @@ FLACStream::FLACStream(Common::SeekableReadStream *inStream, bool dispose)
 }
 
 FLACStream::~FLACStream() {
-	if (_decoder != NULL) {
+	if (_decoder != nullptr) {
 #ifdef LEGACY_FLAC
 		(void) ::FLAC__seekable_stream_decoder_finish(_decoder);
 		::FLAC__seekable_stream_decoder_delete(_decoder);
@@ -252,7 +252,7 @@ FLACStream::~FLACStream() {
 }
 
 inline FLAC__StreamDecoderState FLACStream::getStreamDecoderState() const {
-	assert(_decoder != NULL);
+	assert(_decoder != nullptr);
 #ifdef LEGACY_FLAC
 	return ::FLAC__seekable_stream_decoder_get_stream_decoder_state(_decoder);
 #else
@@ -261,7 +261,7 @@ inline FLAC__StreamDecoderState FLACStream::getStreamDecoderState() const {
 }
 
 inline bool FLACStream::processSingleBlock() {
-	assert(_decoder != NULL);
+	assert(_decoder != nullptr);
 #ifdef LEGACY_FLAC
 	return 0 != ::FLAC__seekable_stream_decoder_process_single(_decoder);
 #else
@@ -270,7 +270,7 @@ inline bool FLACStream::processSingleBlock() {
 }
 
 inline bool FLACStream::processUntilEndOfMetadata() {
-	assert(_decoder != NULL);
+	assert(_decoder != nullptr);
 #ifdef LEGACY_FLAC
 	return 0 != ::FLAC__seekable_stream_decoder_process_until_end_of_metadata(_decoder);
 #else
@@ -279,7 +279,7 @@ inline bool FLACStream::processUntilEndOfMetadata() {
 }
 
 bool FLACStream::seekAbsolute(FLAC__uint64 sample) {
-	assert(_decoder != NULL);
+	assert(_decoder != nullptr);
 #ifdef LEGACY_FLAC
 	const bool result = (0 != ::FLAC__seekable_stream_decoder_seek_absolute(_decoder, sample));
 #else
@@ -293,7 +293,7 @@ bool FLACStream::seekAbsolute(FLAC__uint64 sample) {
 
 bool FLACStream::seek(const Timestamp &where) {
 	_sampleCache.bufFill = 0;
-	_sampleCache.bufReadPos = NULL;
+	_sampleCache.bufReadPos = nullptr;
 	// FLAC uses the sample pair number, thus we always use "false" for the isStereo parameter
 	// of the convertTimeToStreamPos helper.
 	return seekAbsolute((FLAC__uint64)convertTimeToStreamPos(where, getRate(), false).totalNumberOfFrames());
@@ -308,8 +308,8 @@ int FLACStream::readBuffer(int16 *buffer, const int numSamples) {
 	}
 
 	assert(numSamples % numChannels == 0); // must be multiple of channels!
-	assert(buffer != NULL);
-	assert(_outBuffer == NULL);
+	assert(buffer != nullptr);
+	assert(_outBuffer == nullptr);
 	assert(_requestedSamples == 0);
 
 	_outBuffer = buffer;
@@ -362,7 +362,7 @@ int FLACStream::readBuffer(int16 *buffer, const int numSamples) {
 	const int samples = (int)(_outBuffer - buffer);
 	assert(samples % numChannels == 0);
 
-	_outBuffer = NULL; // basically unnecessary, only for the purpose of the asserts
+	_outBuffer = nullptr; // basically unnecessary, only for the purpose of the asserts
 	_requestedSamples = 0; // basically unnecessary, only for the purpose of the asserts
 
 	return decoderOk ? samples : -1;
@@ -599,7 +599,7 @@ inline ::FLAC__StreamDecoderWriteStatus FLACStream::callbackWrite(const ::FLAC__
 	// write the incoming samples directly into the buffer provided to us by the mixer
 	if (_requestedSamples > 0) {
 		assert(_requestedSamples % numChannels == 0);
-		assert(_outBuffer != NULL);
+		assert(_outBuffer != nullptr);
 
 		// Copy & convert the available samples (limited both by how many we have available, and
 		// by how many are actually needed).
@@ -659,7 +659,7 @@ inline bool FLACStream::callbackEOF() {
 
 
 inline void FLACStream::callbackMetadata(const ::FLAC__StreamMetadata *metadata) {
-	assert(_decoder != NULL);
+	assert(_decoder != nullptr);
 	assert(metadata->type == FLAC__METADATA_TYPE_STREAMINFO); // others arent really interesting
 
 	_streaminfo = metadata->data.stream_info;
@@ -673,49 +673,49 @@ inline void FLACStream::callbackError(::FLAC__StreamDecoderErrorStatus status) {
 /* Static Callback Wrappers */
 ::FLAC__SeekableStreamDecoderReadStatus FLACStream::callWrapRead(const ::FLAC__SeekableStreamDecoder *decoder, FLAC__byte buffer[], FLAC_size_t *bytes, void *clientData) {
 	FLACStream *instance = (FLACStream *)clientData;
-	assert(0 != instance);
+	assert(nullptr != instance);
 	return instance->callbackRead(buffer, bytes);
 }
 
 ::FLAC__SeekableStreamDecoderSeekStatus FLACStream::callWrapSeek(const ::FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 absoluteByteOffset, void *clientData) {
 	FLACStream *instance = (FLACStream *)clientData;
-	assert(0 != instance);
+	assert(nullptr != instance);
 	return instance->callbackSeek(absoluteByteOffset);
 }
 
 ::FLAC__SeekableStreamDecoderTellStatus FLACStream::callWrapTell(const ::FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *absoluteByteOffset, void *clientData) {
 	FLACStream *instance = (FLACStream *)clientData;
-	assert(0 != instance);
+	assert(nullptr != instance);
 	return instance->callbackTell(absoluteByteOffset);
 }
 
 ::FLAC__SeekableStreamDecoderLengthStatus FLACStream::callWrapLength(const ::FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *streamLength, void *clientData) {
 	FLACStream *instance = (FLACStream *)clientData;
-	assert(0 != instance);
+	assert(nullptr != instance);
 	return instance->callbackLength(streamLength);
 }
 
 FLAC__bool FLACStream::callWrapEOF(const ::FLAC__SeekableStreamDecoder *decoder, void *clientData) {
 	FLACStream *instance = (FLACStream *)clientData;
-	assert(0 != instance);
+	assert(nullptr != instance);
 	return instance->callbackEOF();
 }
 
 ::FLAC__StreamDecoderWriteStatus FLACStream::callWrapWrite(const ::FLAC__SeekableStreamDecoder *decoder, const ::FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *clientData) {
 	FLACStream *instance = (FLACStream *)clientData;
-	assert(0 != instance);
+	assert(nullptr != instance);
 	return instance->callbackWrite(frame, buffer);
 }
 
 void FLACStream::callWrapMetadata(const ::FLAC__SeekableStreamDecoder *decoder, const ::FLAC__StreamMetadata *metadata, void *clientData) {
 	FLACStream *instance = (FLACStream *)clientData;
-	assert(0 != instance);
+	assert(nullptr != instance);
 	instance->callbackMetadata(metadata);
 }
 
 void FLACStream::callWrapError(const ::FLAC__SeekableStreamDecoder *decoder, ::FLAC__StreamDecoderErrorStatus status, void *clientData) {
 	FLACStream *instance = (FLACStream *)clientData;
-	assert(0 != instance);
+	assert(nullptr != instance);
 	instance->callbackError(status);
 }
 
@@ -730,7 +730,7 @@ SeekableAudioStream *makeFLACStream(
 	SeekableAudioStream *s = new FLACStream(stream, disposeAfterUse);
 	if (s && s->endOfData()) {
 		delete s;
-		return 0;
+		return nullptr;
 	} else {
 		return s;
 	}
diff --git a/audio/decoders/mac_snd.cpp b/audio/decoders/mac_snd.cpp
index 1024ae77b9..9f90449199 100644
--- a/audio/decoders/mac_snd.cpp
+++ b/audio/decoders/mac_snd.cpp
@@ -45,13 +45,13 @@ SeekableAudioStream *makeMacSndStream(Common::SeekableReadStream *stream,
 		// "normal" snd resources
 		if (stream->readUint16BE() != 1) {
 			warning("makeMacSndStream(): Unsupported data type count");
-			return 0;
+			return nullptr;
 		}
 
 		if (stream->readUint16BE() != 5) {
 			// 5 == sampled
 			warning("makeMacSndStream(): Unsupported data type");
-			return 0;
+			return nullptr;
 		}
 
 		stream->readUint32BE(); // initialization option
@@ -60,13 +60,13 @@ SeekableAudioStream *makeMacSndStream(Common::SeekableReadStream *stream,
 		stream->readUint16BE(); // reference count (unused)
 	} else {
 		warning("makeMacSndStream(): Unknown format type %d", sndType);
-		return 0;
+		return nullptr;
 	}
 
 	// We really should never get this as long as we have sampled data only
 	if (stream->readUint16BE() != 1) {
 		warning("makeMacSndStream(): Unsupported command count");
-		return 0;
+		return nullptr;
 	}
 
 	uint16 command = stream->readUint16BE();
@@ -75,7 +75,7 @@ SeekableAudioStream *makeMacSndStream(Common::SeekableReadStream *stream,
 	// 0x8051 - bufferCmd (with dataOffsetFlag set): play a sample sound
 	if (command != 0x8050 && command != 0x8051) {
 		warning("makeMacSndStream(): Unsupported command %04x", command);
-		return 0;
+		return nullptr;
 	}
 
 	stream->readUint16BE(); // 0
@@ -94,7 +94,7 @@ SeekableAudioStream *makeMacSndStream(Common::SeekableReadStream *stream,
 	if (encoding != 0) {
 		// 0 == PCM
 		warning("makeMacSndStream(): Unsupported compression %d", encoding);
-		return 0;
+		return nullptr;
 	}
 
 	stream->skip(soundDataOffset);
diff --git a/audio/decoders/mp3.cpp b/audio/decoders/mp3.cpp
index 3fd134df41..af8e551595 100644
--- a/audio/decoders/mp3.cpp
+++ b/audio/decoders/mp3.cpp
@@ -544,7 +544,7 @@ SeekableAudioStream *makeMP3Stream(
 #endif
 	if (s && s->endOfData()) {
 		delete s;
-		return 0;
+		return nullptr;
 	} else {
 		return s;
 	}
diff --git a/audio/decoders/quicktime.cpp b/audio/decoders/quicktime.cpp
index a3473ff74c..a7217217db 100644
--- a/audio/decoders/quicktime.cpp
+++ b/audio/decoders/quicktime.cpp
@@ -168,7 +168,7 @@ Common::QuickTimeParser::SampleDesc *QuickTimeAudioDecoder::readSampleDesc(Track
 		} else {
 			warning("Unsupported QuickTime STSD audio version %d", stsdVersion);
 			delete entry;
-			return 0;
+			return nullptr;
 		}
 
 		// Version 0 files don't have some variables set, so we'll do that here
@@ -183,7 +183,7 @@ Common::QuickTimeParser::SampleDesc *QuickTimeAudioDecoder::readSampleDesc(Track
 		return entry;
 	}
 
-	return 0;
+	return nullptr;
 }
 
 QuickTimeAudioDecoder::QuickTimeAudioTrack::QuickTimeAudioTrack(QuickTimeAudioDecoder *decoder, Common::QuickTimeParser::Track *parentTrack) {
@@ -582,7 +582,7 @@ QuickTimeAudioDecoder::AudioSampleDesc::AudioSampleDesc(Common::QuickTimeParser:
 	_samplesPerFrame = 0;
 	_bytesPerFrame = 0;
 	_bitsPerSample = 0;
-	_codec = 0;
+	_codec = nullptr;
 }
 
 QuickTimeAudioDecoder::AudioSampleDesc::~AudioSampleDesc() {
@@ -623,7 +623,7 @@ bool QuickTimeAudioDecoder::AudioSampleDesc::isAudioCodecSupported() const {
 
 AudioStream *QuickTimeAudioDecoder::AudioSampleDesc::createAudioStream(Common::SeekableReadStream *stream) const {
 	if (!stream)
-		return 0;
+		return nullptr;
 
 	if (_codec) {
 		// If we've loaded a codec, make sure we use first
@@ -650,11 +650,11 @@ AudioStream *QuickTimeAudioDecoder::AudioSampleDesc::createAudioStream(Common::S
 	}
 
 	error("Unsupported audio codec");
-	return NULL;
+	return nullptr;
 }
 
 void QuickTimeAudioDecoder::AudioSampleDesc::initCodec() {
-	delete _codec; _codec = 0;
+	delete _codec; _codec = nullptr;
 
 	switch (_codecTag) {
 	case MKTAG('Q', 'D', 'M', '2'):
@@ -716,7 +716,7 @@ SeekableAudioStream *makeQuickTimeStream(const Common::String &filename) {
 
 	if (!audioStream->openFromFile(filename)) {
 		delete audioStream;
-		return 0;
+		return nullptr;
 	}
 
 	return audioStream;
@@ -727,7 +727,7 @@ SeekableAudioStream *makeQuickTimeStream(Common::SeekableReadStream *stream, Dis
 
 	if (!audioStream->openFromStream(stream, disposeAfterUse)) {
 		delete audioStream;
-		return 0;
+		return nullptr;
 	}
 
 	return audioStream;
diff --git a/audio/decoders/raw.cpp b/audio/decoders/raw.cpp
index d512ef93dd..be14a4827c 100644
--- a/audio/decoders/raw.cpp
+++ b/audio/decoders/raw.cpp
@@ -41,7 +41,7 @@ template<int bytesPerSample, bool isUnsigned, bool isLE>
 class RawStream : public SeekableAudioStream {
 public:
 	RawStream(int rate, bool stereo, DisposeAfterUse::Flag disposeStream, Common::SeekableReadStream *stream)
-		: _rate(rate), _isStereo(stereo), _playtime(0, rate), _stream(stream, disposeStream), _endOfData(false), _buffer(0) {
+		: _rate(rate), _isStereo(stereo), _playtime(0, rate), _stream(stream, disposeStream), _endOfData(false), _buffer(nullptr) {
 		// Setup our buffer for readBuffer
 		_buffer = new byte[kSampleBufferLength * bytesPerSample];
 		assert(_buffer);
diff --git a/audio/decoders/voc.cpp b/audio/decoders/voc.cpp
index c7ba7a2624..9250765c54 100644
--- a/audio/decoders/voc.cpp
+++ b/audio/decoders/voc.cpp
@@ -554,14 +554,14 @@ SeekableAudioStream *makeVOCStream(Common::SeekableReadStream *stream, byte flag
 	if (!checkVOCHeader(*stream)) {
 		if (disposeAfterUse == DisposeAfterUse::YES)
 			delete stream;
-		return 0;
+		return nullptr;
 	}
 
 	SeekableAudioStream *audioStream = new VocStream(stream, (flags & Audio::FLAG_UNSIGNED) != 0, disposeAfterUse);
 
 	if (audioStream->endOfData()) {
 		delete audioStream;
-		return 0;
+		return nullptr;
 	} else {
 		return audioStream;
 	}
diff --git a/audio/decoders/vorbis.cpp b/audio/decoders/vorbis.cpp
index c82d2840ca..4ef35b0160 100644
--- a/audio/decoders/vorbis.cpp
+++ b/audio/decoders/vorbis.cpp
@@ -125,7 +125,7 @@ VorbisStream::VorbisStream(Common::SeekableReadStream *inStream, DisposeAfterUse
 	_length(0, 1000),
 	_bufferEnd(ARRAYEND(_buffer)) {
 
-	int res = ov_open_callbacks(inStream, &_ovFile, NULL, 0, g_stream_wrap);
+	int res = ov_open_callbacks(inStream, &_ovFile, nullptr, 0, g_stream_wrap);
 	if (res < 0) {
 		warning("Could not create Vorbis stream (%d)", res);
 		_pos = _bufferEnd;
@@ -206,7 +206,7 @@ bool VorbisStream::refill() {
 						0,
 						2,	// 16 bit
 						1,	// signed
-						NULL);
+						nullptr);
 #endif
 #endif
 		if (result == OV_HOLE) {
@@ -246,7 +246,7 @@ SeekableAudioStream *makeVorbisStream(
 	SeekableAudioStream *s = new VorbisStream(stream, disposeAfterUse);
 	if (s && s->endOfData()) {
 		delete s;
-		return 0;
+		return nullptr;
 	} else {
 		return s;
 	}
diff --git a/audio/decoders/wave.cpp b/audio/decoders/wave.cpp
index f5201c26db..18c7ce766b 100644
--- a/audio/decoders/wave.cpp
+++ b/audio/decoders/wave.cpp
@@ -91,10 +91,10 @@ bool loadWAVFromStream(Common::SeekableReadStream &stream, int &size, int &rate,
 	// 8 bit data is unsigned, 16 bit data signed
 
 
-	if (wavType != 0)
+	if (wavType != nullptr)
 		*wavType = type;
 
-	if (blockAlign_ != 0)
+	if (blockAlign_ != nullptr)
 		*blockAlign_ = blockAlign;
 #if 0
 	debug("WAVE information:");
@@ -194,7 +194,7 @@ SeekableAudioStream *makeWAVStream(Common::SeekableReadStream *stream, DisposeAf
 	if (!loadWAVFromStream(*stream, size, rate, flags, &type, &blockAlign)) {
 		if (disposeAfterUse == DisposeAfterUse::YES)
 			delete stream;
-		return 0;
+		return nullptr;
 	}
 	int channels = (flags & Audio::FLAG_STEREO) ? 2 : 1;
 	int bytesPerSample = (flags & Audio::FLAG_24BITS) ? 3 : ((flags & Audio::FLAG_16BITS) ? 2 : 1);
@@ -228,7 +228,7 @@ SeekableAudioStream *makeWAVStream(Common::SeekableReadStream *stream, DisposeAf
 
 	// If the format is unsupported, we already returned earlier, but just in case
 	delete dataStream;
-	return 0;
+	return nullptr;
 }
 
 } // End of namespace Audio
diff --git a/audio/decoders/wma.cpp b/audio/decoders/wma.cpp
index c769827ca9..098b43f896 100644
--- a/audio/decoders/wma.cpp
+++ b/audio/decoders/wma.cpp
@@ -71,14 +71,14 @@ WMACodec::WMACodec(int version, uint32 sampleRate, uint8 channels,
 	_resetBlockLengths(true), _curFrame(0), _frameLen(0), _frameLenBits(0),
 	_blockSizeCount(0), _framePos(0), _curBlock(0), _blockLen(0), _blockLenBits(0),
 	_nextBlockLenBits(0), _prevBlockLenBits(0), _byteOffsetBits(0),
-	_hgainHuffman(0), _expHuffman(0), _lastSuperframeLen(0), _lastBitoffset(0) {
+	_hgainHuffman(nullptr), _expHuffman(nullptr), _lastSuperframeLen(0), _lastBitoffset(0) {
 
 	for (int i = 0; i < 2; i++) {
-		_coefHuffman[i] = 0;
+		_coefHuffman[i] = nullptr;
 
-		_coefHuffmanRunTable  [i] = 0;
-		_coefHuffmanLevelTable[i] = 0;
-		_coefHuffmanIntTable  [i] = 0;
+		_coefHuffmanRunTable  [i] = nullptr;
+		_coefHuffmanLevelTable[i] = nullptr;
+		_coefHuffmanIntTable  [i] = nullptr;
 	}
 
 	if ((_version != 1) && (_version != 2))
@@ -339,7 +339,7 @@ void WMACodec::evalMDCTScales(float highFreq) {
 
 		} else {
 			// Hardcoded tables
-			const uint8 *table = 0;
+			const uint8 *table = nullptr;
 
 			int t = _frameLenBits - kBlockBitsMin - k;
 			if (t < 3) {
@@ -544,7 +544,7 @@ void WMACodec::initLSPToCurve() {
 AudioStream *WMACodec::decodeFrame(Common::SeekableReadStream &data) {
 	Common::SeekableReadStream *stream = decodeSuperFrame(data);
 	if (!stream)
-		return 0;
+		return nullptr;
 
 	return makeRawStream(stream, _sampleRate, _audioFlags, DisposeAfterUse::YES);
 }
@@ -553,7 +553,7 @@ Common::SeekableReadStream *WMACodec::decodeSuperFrame(Common::SeekableReadStrea
 	uint32 size = data.size();
 	if (size < _blockAlign) {
 		warning("WMACodec::decodeSuperFrame(): size < _blockAlign");
-		return 0;
+		return nullptr;
 	}
 
 	if (_blockAlign)
@@ -562,7 +562,7 @@ Common::SeekableReadStream *WMACodec::decodeSuperFrame(Common::SeekableReadStrea
 	Common::BitStream8MSB bits(data);
 
 	int    outputDataSize = 0;
-	int16 *outputData     = 0;
+	int16 *outputData     = nullptr;
 
 	_curFrame = 0;
 
@@ -580,7 +580,7 @@ Common::SeekableReadStream *WMACodec::decodeSuperFrame(Common::SeekableReadStrea
 			_lastSuperframeLen = 0;
 			_lastBitoffset     = 0;
 
-			return 0;
+			return nullptr;
 		}
 
 		// Number of frames in this superframe + overhang from the last superframe
@@ -636,7 +636,7 @@ Common::SeekableReadStream *WMACodec::decodeSuperFrame(Common::SeekableReadStrea
 		// Decode the frames
 		for (int i = 0; i < newFrameCount; i++, _curFrame++)
 			if (!decodeFrame(bits, outputData))
-				return 0;
+				return nullptr;
 
 		// Check if we've got new overhang data
 		int remainingBits = bits.size() - bits.pos();
@@ -669,14 +669,14 @@ Common::SeekableReadStream *WMACodec::decodeSuperFrame(Common::SeekableReadStrea
 		// Decode the frame
 		if (!decodeFrame(bits, outputData)) {
 			delete[] outputData;
-			return 0;
+			return nullptr;
 		}
 	}
 
 	// And return our PCM output data as a stream, if available
 
 	if (!outputData)
-		return 0;
+		return nullptr;
 
 	return new Common::MemoryReadStream((byte *) outputData, outputDataSize * 2, DisposeAfterUse::YES);
 }
diff --git a/audio/fmopl.cpp b/audio/fmopl.cpp
index 56cdcd5526..117fd70ebb 100644
--- a/audio/fmopl.cpp
+++ b/audio/fmopl.cpp
@@ -83,7 +83,7 @@ const Config::EmulatorDescription Config::_drivers[] = {
 	{ "opl2lpt", _s("OPL2LPT"), kOPL2LPT, kFlagOpl2},
 	{ "opl3lpt", _s("OPL3LPT"), kOPL3LPT, kFlagOpl2 | kFlagOpl3 },
 #endif
-	{ 0, 0, 0, 0 }
+	{ nullptr, nullptr, 0, 0 }
 };
 
 Config::DriverId Config::parse(const Common::String &name) {
@@ -101,7 +101,7 @@ const Config::EmulatorDescription *Config::findDriver(DriverId id) {
 			return &_drivers[i];
 	}
 
-	return 0;
+	return nullptr;
 }
 
 Config::DriverId Config::detect(OplType type) {
@@ -181,7 +181,7 @@ OPL *Config::create(DriverId driver, OplType type) {
 		// be found, thus stop here.
 		if (driver == -1) {
 			warning("No OPL emulator available for type %d", type);
-			return 0;
+			return nullptr;
 		}
 	}
 
@@ -191,7 +191,7 @@ OPL *Config::create(DriverId driver, OplType type) {
 			return new MAME::OPL();
 		else
 			warning("MAME OPL emulator only supports OPL2 emulation");
-		return 0;
+		return nullptr;
 
 #ifndef DISABLE_DOSBOX_OPL
 	case kDOSBox:
@@ -229,7 +229,7 @@ OPL *Config::create(DriverId driver, OplType type) {
 		warning("Unsupported OPL emulator %d", driver);
 		// TODO: Maybe we should add some dummy emulator too, which just outputs
 		// silence as sound?
-		return 0;
+		return nullptr;
 	}
 }
 
diff --git a/audio/mididrv.cpp b/audio/mididrv.cpp
index fd1da5483f..a691ad3299 100644
--- a/audio/mididrv.cpp
+++ b/audio/mididrv.cpp
@@ -73,7 +73,7 @@ static const struct {
 	{ MT_SEGACD,	GUIO_MIDISEGACD },
 	{ MT_GM,		GUIO_MIDIGM },
 	{ MT_MT32,		GUIO_MIDIMT32 },
-	{ 0,			0 },
+	{ 0,			nullptr },
 };
 
 Common::String MidiDriver::musicType2GUIO(uint32 musicType) {
@@ -385,7 +385,7 @@ MidiDriver::DeviceHandle MidiDriver::detectDevice(int flags) {
 }
 
 MidiDriver *MidiDriver::createMidi(MidiDriver::DeviceHandle handle) {
-	MidiDriver *driver = 0;
+	MidiDriver *driver = nullptr;
 	const PluginList p = MusicMan.getPlugins();
 	for (PluginList::const_iterator m = p.begin(); m != p.end(); m++) {
 		const MusicPluginObject &musicPlugin = (*m)->get<MusicPluginObject>();
diff --git a/audio/mididrv_ms.cpp b/audio/mididrv_ms.cpp
index 27fdbf09ba..dc1d5e7b68 100644
--- a/audio/mididrv_ms.cpp
+++ b/audio/mididrv_ms.cpp
@@ -44,8 +44,8 @@ MidiDriver_Multisource::MidiDriver_Multisource() :
 		_userMute(false),
 		_timerRate(0),
 		_fadeDelay(0),
-		_timer_param(0),
-		_timer_proc(0) {
+		_timer_param(nullptr),
+		_timer_proc(nullptr) {
 	for (int i = 0; i < MAXIMUM_SOURCES; ++i) {
 		// Default source type: 0 = music, 1+ = SFX
 		_sources[i].type = (i == 0 ? SOURCE_TYPE_MUSIC : SOURCE_TYPE_SFX);
diff --git a/audio/midiparser.cpp b/audio/midiparser.cpp
index c60045a91c..cb06d86773 100644
--- a/audio/midiparser.cpp
+++ b/audio/midiparser.cpp
@@ -33,7 +33,7 @@
 
 MidiParser::MidiParser() :
 _hangingNotesCount(0),
-_driver(0),
+_driver(nullptr),
 _timerRate(0x4A0000),
 _ppqn(96),
 _tempo(500000),
@@ -53,7 +53,7 @@ _doParse(true),
 _pause(false) {
 	memset(_activeNotes, 0, sizeof(_activeNotes));
 	memset(_tracks, 0, sizeof(_tracks));
-	_nextEvent.start = NULL;
+	_nextEvent.start = nullptr;
 	_nextEvent.delta = 0;
 	_nextEvent.event = 0;
 	_nextEvent.length = 0;
@@ -136,7 +136,7 @@ void MidiParser::activeNote(byte channel, byte note, bool active) {
 }
 
 void MidiParser::hangingNote(byte channel, byte note, uint32 timeLeft, bool recycle) {
-	NoteTimer *best = 0;
+	NoteTimer *best = nullptr;
 	NoteTimer *ptr = _hangingNotes;
 	int i;
 
@@ -222,7 +222,7 @@ void MidiParser::onTimer() {
 		// Process the next info.
 		if (info.event < 0x80) {
 			warning("Bad command or running status %02X", info.event);
-			_position._playPos = 0;
+			_position._playPos = nullptr;
 			return;
 		}
 
diff --git a/audio/midiparser_qt.cpp b/audio/midiparser_qt.cpp
index 7b4fb6cad9..f8802f95f8 100644
--- a/audio/midiparser_qt.cpp
+++ b/audio/midiparser_qt.cpp
@@ -430,7 +430,7 @@ Common::QuickTimeParser::SampleDesc *MidiParser_QT::readSampleDesc(Track *track,
 		return entry;
 	}
 
-	return 0;
+	return nullptr;
 }
 
 MidiParser_QT::MIDISampleDesc::MIDISampleDesc(Common::QuickTimeParser::Track *parentTrack, uint32 codecTag) :
diff --git a/audio/midiparser_smf.cpp b/audio/midiparser_smf.cpp
index 1a683754d5..c077f65c11 100644
--- a/audio/midiparser_smf.cpp
+++ b/audio/midiparser_smf.cpp
@@ -49,7 +49,7 @@ protected:
 	void sendMetaEventToDriver(byte type, byte *data, uint16 length) override;
 
 public:
-	MidiParser_SMF(int8 source = -1) : _buffer(0), _malformedPitchBends(false), _source(source) { }
+	MidiParser_SMF(int8 source = -1) : _buffer(nullptr), _malformedPitchBends(false), _source(source) { }
 	~MidiParser_SMF();
 
 	bool loadMusic(byte *data, uint32 size) override;
@@ -247,7 +247,7 @@ bool MidiParser_SMF::loadMusic(byte *data, uint32 size) {
 	// If this is a Type 1 MIDI, we need to now compress
 	// our tracks down into a single Type 0 track.
 	free(_buffer);
-	_buffer = 0;
+	_buffer = nullptr;
 
 	if (midiType == 1) {
 		// FIXME: Doubled the buffer size to prevent crashes with the
@@ -345,7 +345,7 @@ void MidiParser_SMF::compressToType0() {
 			// META
 			event = *(pos++);
 			if (event == 0x2F && activeTracks > 1) {
-				trackPos[bestTrack] = 0;
+				trackPos[bestTrack] = nullptr;
 				write = false;
 			} else {
 				pos2 = pos;
@@ -356,7 +356,7 @@ void MidiParser_SMF::compressToType0() {
 				--activeTracks;
 		} else {
 			warning("Bad MIDI command %02X", (int)event);
-			trackPos[bestTrack] = 0;
+			trackPos[bestTrack] = nullptr;
 		}
 
 		// Update all tracks' deltas
diff --git a/audio/midiparser_xmidi.cpp b/audio/midiparser_xmidi.cpp
index 6c1d069ed6..d97e0dd200 100644
--- a/audio/midiparser_xmidi.cpp
+++ b/audio/midiparser_xmidi.cpp
@@ -95,7 +95,7 @@ public:
 	MidiParser_XMIDI(XMidiCallbackProc proc, void *data, int8 source = -1) :
 			_callbackProc(proc),
 			_callbackData(data),
-			_newTimbreListDriver(0),
+			_newTimbreListDriver(nullptr),
 			_source(source),
 			_loopCount(-1) {
 		memset(_loop, 0, sizeof(_loop));
@@ -130,14 +130,14 @@ bool MidiParser_XMIDI::hasJumpIndex(uint8 index) {
 	if (_activeTrack >= _numTracks)
 		return false;
 
-	return index < MAXIMUM_TRACK_BRANCHES && _trackBranches[_activeTrack][index] != 0;
+	return index < MAXIMUM_TRACK_BRANCHES && _trackBranches[_activeTrack][index] != nullptr;
 }
 
 bool MidiParser_XMIDI::jumpToIndex(uint8 index, bool stopNotes) {
 	if (_activeTrack >= _numTracks || _pause)
 		return false;
 
-	if (index >= MAXIMUM_TRACK_BRANCHES || _trackBranches[_activeTrack][index] == 0) {
+	if (index >= MAXIMUM_TRACK_BRANCHES || _trackBranches[_activeTrack][index] == nullptr) {
 		warning("MidiParser-XMIDI: jumpToIndex called with invalid sequence branch index %x", index);
 		return false;
 	}
diff --git a/audio/midiplayer.cpp b/audio/midiplayer.cpp
index 75a3b45fb8..0750d44dc1 100644
--- a/audio/midiplayer.cpp
+++ b/audio/midiplayer.cpp
@@ -28,9 +28,9 @@
 namespace Audio {
 
 MidiPlayer::MidiPlayer() :
-	_driver(0),
-	_parser(0),
-	_midiData(0),
+	_driver(nullptr),
+	_parser(nullptr),
+	_midiData(nullptr),
 	_isLooping(false),
 	_isPlaying(false),
 	_masterVolume(0),
@@ -51,10 +51,10 @@ MidiPlayer::~MidiPlayer() {
 
 	// Unhook & unload the driver
 	if (_driver) {
-		_driver->setTimerCallback(0, 0);
+		_driver->setTimerCallback(nullptr, nullptr);
 		_driver->close();
 		delete _driver;
-		_driver = 0;
+		_driver = nullptr;
 	}
 }
 
@@ -170,14 +170,14 @@ void MidiPlayer::stop() {
 		// but unloadMusic also does. To suppress double notes-off,
 		// we reset the midi driver of _parser before deleting it.
 		// This smells very fishy, in any case.
-		_parser->setMidiDriver(0);
+		_parser->setMidiDriver(nullptr);
 
 		delete _parser;
-		_parser = NULL;
+		_parser = nullptr;
 	}
 
 	free(_midiData);
-	_midiData = 0;
+	_midiData = nullptr;
 }
 
 void MidiPlayer::pause() {
diff --git a/audio/miles_adlib.cpp b/audio/miles_adlib.cpp
index cda306f87d..2409350a12 100644
--- a/audio/miles_adlib.cpp
+++ b/audio/miles_adlib.cpp
@@ -140,8 +140,8 @@ public:
 	void send(uint32 b) override;
 	void send(int8 source, uint32 b) override;
 	void metaEvent(int8 source, byte type, byte *data, uint16 length) override;
-	MidiChannel *allocateChannel() override { return NULL; }
-	MidiChannel *getPercussionChannel() override { return NULL; }
+	MidiChannel *allocateChannel() override { return nullptr; }
+	MidiChannel *getPercussionChannel() override { return nullptr; }
 
 	bool isOpen() const override { return _isOpen; }
 	uint32 getBaseTempo() override { return 1000000 / OPL::OPL::kDefaultCallbackFrequency; }
@@ -182,7 +182,7 @@ private:
 		byte   currentActiveVoicesCount;
 
 		MidiChannelEntry() : currentPatchBank(0),
-							currentInstrumentPtr(NULL),
+							currentInstrumentPtr(nullptr),
 							currentPitchBender(MIDI_PITCH_BEND_DEFAULT),
 							currentPitchRange(0),
 							currentVoiceProtection(0),
@@ -214,7 +214,7 @@ private:
 
 		VirtualFmVoiceEntry(): inUse(false),
 								actualMidiChannel(0),
-								currentInstrumentPtr(NULL),
+								currentInstrumentPtr(nullptr),
 								isPhysical(false), physicalFmVoice(0),
 								currentPriority(0),
 								currentOriginalMidiNote(0),
@@ -288,7 +288,7 @@ private:
 };
 
 MidiDriver_Miles_AdLib::MidiDriver_Miles_AdLib(InstrumentEntry *instrumentTablePtr, uint16 instrumentTableCount)
-	: _masterVolume(15), _opl(0), _isOpen(false) {
+	: _masterVolume(15), _opl(nullptr), _isOpen(false) {
 
 	_instrumentTablePtr = instrumentTablePtr;
 	_instrumentTableCount = instrumentTableCount;
@@ -551,7 +551,7 @@ int16 MidiDriver_Miles_AdLib::searchFreePhysicalFmVoiceChannel() {
 }
 
 void MidiDriver_Miles_AdLib::noteOn(byte midiChannel, byte note, byte velocity) {
-	const InstrumentEntry *instrumentPtr = NULL;
+	const InstrumentEntry *instrumentPtr = nullptr;
 
 	if (velocity == 0) {
 		noteOff(midiChannel, note);
@@ -1141,7 +1141,7 @@ void MidiDriver_Miles_AdLib::controlChange(byte midiChannel, byte controllerNumb
 }
 
 void MidiDriver_Miles_AdLib::programChange(byte midiChannel, byte patchId) {
-	const InstrumentEntry *instrumentPtr = NULL;
+	const InstrumentEntry *instrumentPtr = nullptr;
 	byte patchBank = _midiChannels[midiChannel].currentPatchBank;
 
 	//warning("patch channel %d, patch %x, bank %x", midiChannel, patchId, patchBank);
@@ -1167,7 +1167,7 @@ const InstrumentEntry *MidiDriver_Miles_AdLib::searchInstrument(byte bankId, byt
 		instrumentPtr++;
 	}
 
-	return NULL;
+	return nullptr;
 }
 
 void MidiDriver_Miles_AdLib::pitchBendChange(byte midiChannel, byte parameter1, byte parameter2) {
diff --git a/audio/miles_midi.cpp b/audio/miles_midi.cpp
index 1878e7e988..1c8340cd13 100644
--- a/audio/miles_midi.cpp
+++ b/audio/miles_midi.cpp
@@ -559,7 +559,7 @@ const MilesMT32InstrumentEntry *MidiDriver_Miles_Midi::searchCustomInstrument(by
 			return instrumentPtr;
 		instrumentPtr++;
 	}
-	return NULL;
+	return nullptr;
 }
 
 void MidiDriver_Miles_Midi::setupPatch(byte patchBank, byte patchId, bool useSysExQueue) {
@@ -649,7 +649,7 @@ int16 MidiDriver_Miles_Midi::installCustomTimbre(byte patchBank, byte patchId) {
 	int16 customTimbreId = -1;
 	int16 leastUsedTimbreId = -1;
 	uint32 leastUsedTimbreNoteCounter = _noteCounter;
-	const MilesMT32InstrumentEntry *instrumentPtr = NULL;
+	const MilesMT32InstrumentEntry *instrumentPtr = nullptr;
 
 	// Check, if requested instrument is actually available
 	instrumentPtr = searchCustomInstrument(patchBank, patchId);
@@ -787,21 +787,21 @@ MidiDriver_Miles_Midi *MidiDriver_Miles_MT32_create(const Common::String &instru
 MidiDriver_Miles_Midi *MidiDriver_Miles_MIDI_create(MusicType midiType, const Common::String &instrumentDataFilename) {
 	assert(midiType == MT_MT32 || midiType == MT_GM || midiType == MT_GS);
 
-	MilesMT32InstrumentEntry *instrumentTablePtr = NULL;
+	MilesMT32InstrumentEntry *instrumentTablePtr = nullptr;
 	uint16                    instrumentTableCount = 0;
 
 	if (midiType == MT_MT32 && !instrumentDataFilename.empty()) {
 		// Load MT32 instrument data from file SAMPLE.MT
 		Common::File *fileStream = new Common::File();
 		uint32        fileSize = 0;
-		byte         *fileDataPtr = NULL;
+		byte         *fileDataPtr = nullptr;
 		uint32        fileDataOffset = 0;
 		uint32        fileDataLeft = 0;
 
 		byte curBankId;
 		byte curPatchId;
 
-		MilesMT32InstrumentEntry *instrumentPtr = NULL;
+		MilesMT32InstrumentEntry *instrumentPtr = nullptr;
 		uint32                    instrumentOffset;
 		uint16                    instrumentDataSize;
 
@@ -916,7 +916,7 @@ void MidiDriver_Miles_Midi::applySourceVolume(uint8 source) {
 			continue;
 
 		MidiChannelEntry &channel = _midiChannels[i];
-		MilesMidiChannelControlData *channelData = 0;
+		MilesMidiChannelControlData *channelData = nullptr;
 		bool channelLockedByOtherSource = false;
 		// Apply the new source volume to this channel if this source is active
 		// on this channel, or if it was active on the channel before it was
diff --git a/audio/mixer.cpp b/audio/mixer.cpp
index 93aabfc370..e3d0a309df 100644
--- a/audio/mixer.cpp
+++ b/audio/mixer.cpp
@@ -183,7 +183,7 @@ MixerImpl::MixerImpl(uint sampleRate)
 	assert(sampleRate > 0);
 
 	for (int i = 0; i != NUM_CHANNELS; i++)
-		_channels[i] = 0;
+		_channels[i] = nullptr;
 }
 
 MixerImpl::~MixerImpl() {
@@ -204,7 +204,7 @@ uint MixerImpl::getOutputRate() const {
 void MixerImpl::insertChannel(SoundHandle *handle, Channel *chan) {
 	int index = -1;
 	for (int i = 0; i != NUM_CHANNELS; i++) {
-		if (_channels[i] == 0) {
+		if (_channels[i] == nullptr) {
 			index = i;
 			break;
 		}
@@ -236,7 +236,7 @@ void MixerImpl::playStream(
 			bool reverseStereo) {
 	Common::StackLock lock(_mutex);
 
-	if (stream == 0) {
+	if (stream == nullptr) {
 		warning("stream is 0");
 		return;
 	}
@@ -247,7 +247,7 @@ void MixerImpl::playStream(
 	// Prevent duplicate sounds
 	if (id != -1) {
 		for (int i = 0; i != NUM_CHANNELS; i++)
-			if (_channels[i] != 0 && _channels[i]->getId() == id) {
+			if (_channels[i] != nullptr && _channels[i]->getId() == id) {
 				// Delete the stream if were asked to auto-dispose it.
 				// Note: This could cause trouble if the client code does not
 				// yet expect the stream to be gone. The primary example to
@@ -293,7 +293,7 @@ int MixerImpl::mixCallback(byte *samples, uint len) {
 		if (_channels[i]) {
 			if (_channels[i]->isFinished()) {
 				delete _channels[i];
-				_channels[i] = 0;
+				_channels[i] = nullptr;
 			} else if (!_channels[i]->isPaused()) {
 				tmp = _channels[i]->mix(buf, len);
 
@@ -308,9 +308,9 @@ int MixerImpl::mixCallback(byte *samples, uint len) {
 void MixerImpl::stopAll() {
 	Common::StackLock lock(_mutex);
 	for (int i = 0; i != NUM_CHANNELS; i++) {
-		if (_channels[i] != 0 && !_channels[i]->isPermanent()) {
+		if (_channels[i] != nullptr && !_channels[i]->isPermanent()) {
 			delete _channels[i];
-			_channels[i] = 0;
+			_channels[i] = nullptr;
 		}
 	}
 }
@@ -318,9 +318,9 @@ void MixerImpl::stopAll() {
 void MixerImpl::stopID(int id) {
 	Common::StackLock lock(_mutex);
 	for (int i = 0; i != NUM_CHANNELS; i++) {
-		if (_channels[i] != 0 && _channels[i]->getId() == id) {
+		if (_channels[i] != nullptr && _channels[i]->getId() == id) {
 			delete _channels[i];
-			_channels[i] = 0;
+			_channels[i] = nullptr;
 		}
 	}
 }
@@ -334,7 +334,7 @@ void MixerImpl::stopHandle(SoundHandle handle) {
 		return;
 
 	delete _channels[index];
-	_channels[index] = 0;
+	_channels[index] = nullptr;
 }
 
 void MixerImpl::muteSoundType(SoundType type, bool mute) {
@@ -415,7 +415,7 @@ void MixerImpl::loopChannel(SoundHandle handle) {
 void MixerImpl::pauseAll(bool paused) {
 	Common::StackLock lock(_mutex);
 	for (int i = 0; i != NUM_CHANNELS; i++) {
-		if (_channels[i] != 0) {
+		if (_channels[i] != nullptr) {
 			_channels[i]->pause(paused);
 		}
 	}
@@ -424,7 +424,7 @@ void MixerImpl::pauseAll(bool paused) {
 void MixerImpl::pauseID(int id, bool paused) {
 	Common::StackLock lock(_mutex);
 	for (int i = 0; i != NUM_CHANNELS; i++) {
-		if (_channels[i] != 0 && _channels[i]->getId() == id) {
+		if (_channels[i] != nullptr && _channels[i]->getId() == id) {
 			_channels[i]->pause(paused);
 			return;
 		}
@@ -515,7 +515,7 @@ Channel::Channel(Mixer *mixer, Mixer::SoundType type, AudioStream *stream,
 				 DisposeAfterUse::Flag autofreeStream, bool reverseStereo, int id, bool permanent)
 	: _type(type), _mixer(mixer), _id(id), _permanent(permanent), _volume(Mixer::kMaxChannelVolume),
 	  _balance(0), _pauseLevel(0), _samplesConsumed(0), _samplesDecoded(0), _mixerTimeStamp(0),
-	  _pauseStartTime(0), _pauseTime(0), _converter(0), _volL(0), _volR(0),
+	  _pauseStartTime(0), _pauseTime(0), _converter(nullptr), _volL(0), _volR(0),
 	  _stream(stream, autofreeStream) {
 	assert(mixer);
 	assert(stream);
diff --git a/audio/mods/infogrames.cpp b/audio/mods/infogrames.cpp
index 2c62c37713..441f601a4d 100644
--- a/audio/mods/infogrames.cpp
+++ b/audio/mods/infogrames.cpp
@@ -40,13 +40,13 @@ void Infogrames::Instruments::init() {
 	int i;
 
 	for (i = 0; i < 32; i++) {
-		_samples[i].data = 0;
-		_samples[i].dataRepeat = 0;
+		_samples[i].data = nullptr;
+		_samples[i].dataRepeat = nullptr;
 		_samples[i].length = 0;
 		_samples[i].lengthRepeat = 0;
 	}
 	_count = 0;
-	_sampleData = 0;
+	_sampleData = nullptr;
 }
 
 bool Infogrames::Instruments::load(const char *ins) {
@@ -132,7 +132,7 @@ const uint16 Infogrames::periods[] =
 Infogrames::Infogrames(Instruments &ins, bool stereo, int rate,
 		int interruptFreq) : Paula(stereo, rate, interruptFreq) {
 	_instruments = &ins;
-	_data = 0;
+	_data = nullptr;
 	_repCount = -1;
 
 	reset();
@@ -151,11 +151,11 @@ void Infogrames::init() {
 	_speedCounter = _speed;
 
 	for (i = 0; i < 4; i++) {
-		_chn[i].cmds = 0;
-		_chn[i].cmdBlocks = 0;
+		_chn[i].cmds = nullptr;
+		_chn[i].cmdBlocks = nullptr;
 		_chn[i].volSlide.finetuneNeg = 0;
 		_chn[i].volSlide.finetunePos = 0;
-		_chn[i].volSlide.data = 0;
+		_chn[i].volSlide.data = nullptr;
 		_chn[i].volSlide.amount = 0;
 		_chn[i].volSlide.dataOffset = 0;
 		_chn[i].volSlide.flags = 0;
@@ -163,7 +163,7 @@ void Infogrames::init() {
 		_chn[i].volSlide.curDelay2 = 0;
 		_chn[i].periodSlide.finetuneNeg = 0;
 		_chn[i].periodSlide.finetunePos = 0;
-		_chn[i].periodSlide.data = 0;
+		_chn[i].periodSlide.data = nullptr;
 		_chn[i].periodSlide.amount = 0;
 		_chn[i].periodSlide.dataOffset = 0;
 		_chn[i].periodSlide.flags = 0;
@@ -176,7 +176,7 @@ void Infogrames::init() {
 		_chn[i].periodMod = 0;
 	}
 
-	_end = (_data == 0);
+	_end = (_data == nullptr);
 }
 
 void Infogrames::reset() {
@@ -185,15 +185,15 @@ void Infogrames::reset() {
 	stopPlay();
 	init();
 
-	_volSlideBlocks = 0;
-	_periodSlideBlocks = 0;
-	_subSong = 0;
-	_cmdBlocks = 0;
+	_volSlideBlocks = nullptr;
+	_periodSlideBlocks = nullptr;
+	_subSong = nullptr;
+	_cmdBlocks = nullptr;
 	_speedCounter = 0;
 	_speed = 0;
 
 	for (i = 0; i < 4; i++)
-		_chn[i].cmdBlockIndices = 0;
+		_chn[i].cmdBlockIndices = nullptr;
 }
 
 bool Infogrames::load(const char *dum) {
@@ -252,7 +252,7 @@ void Infogrames::unload() {
 	stopPlay();
 
 	delete[] _data;
-	_data = 0;
+	_data = nullptr;
 
 	clearVoices();
 	reset();
diff --git a/audio/mods/module.cpp b/audio/mods/module.cpp
index 83fbc7cc72..ce59c4f8ca 100644
--- a/audio/mods/module.cpp
+++ b/audio/mods/module.cpp
@@ -196,7 +196,7 @@ bool Module::load(Common::SeekableReadStream &st, int offs) {
 		}
 
 		if (!sample[i].len) {
-			sample[i].data = 0;
+			sample[i].data = nullptr;
 		} else {
 			sample[i].data = new int8[sample[i].len];
 			st.read((byte *)sample[i].data, sample[i].len);
@@ -207,9 +207,9 @@ bool Module::load(Common::SeekableReadStream &st, int offs) {
 }
 
 Module::Module() {
-	pattern = 0;
+	pattern = nullptr;
 	for (int i = 0; i < NUM_SAMPLES; ++i) {
-		sample[i].data = 0;
+		sample[i].data = nullptr;
 	}
 }
 
diff --git a/audio/mods/module_mod_xm_s3m.cpp b/audio/mods/module_mod_xm_s3m.cpp
index 08971d9393..bc5485ba50 100644
--- a/audio/mods/module_mod_xm_s3m.cpp
+++ b/audio/mods/module_mod_xm_s3m.cpp
@@ -379,7 +379,7 @@ bool ModuleModXmS3m::loadMod(Common::SeekableReadStream &st) {
 	for (int i = 1; i <= numInstruments; ++i) {
 		Sample &sample = instruments[i].samples[0];
 		if (!sample.length) {
-			sample.data = 0;
+			sample.data = nullptr;
 		} else {
 			sample.data = new int16[sample.length + 1];
 			readSampleSint8(st, sample.length, sample.data);
diff --git a/audio/mods/paula.cpp b/audio/mods/paula.cpp
index 4985bd90ba..6718d6712e 100644
--- a/audio/mods/paula.cpp
+++ b/audio/mods/paula.cpp
@@ -73,8 +73,8 @@ Paula::~Paula() {
 void Paula::clearVoice(byte voice) {
 	assert(voice < NUM_VOICES);
 
-	_voice[voice].data = 0;
-	_voice[voice].dataRepeat = 0;
+	_voice[voice].data = nullptr;
+	_voice[voice].dataRepeat = nullptr;
 	_voice[voice].length = 0;
 	_voice[voice].lengthRepeat = 0;
 	_voice[voice].period = 0;
diff --git a/audio/mods/protracker.cpp b/audio/mods/protracker.cpp
index 9e59ac95d0..0ac34c589f 100644
--- a/audio/mods/protracker.cpp
+++ b/audio/mods/protracker.cpp
@@ -457,7 +457,7 @@ void ProtrackerStream::interrupt() {
 			sample_t &sample = _module.sample[_track[track].sample - 1];
 			setChannelData(track,
 			               sample.data,
-			               sample.replen > 2 ? sample.data + sample.repeat : 0,
+			               sample.replen > 2 ? sample.data + sample.repeat : nullptr,
 			               sample.len,
 			               sample.replen);
 			setChannelOffset(track, _track[track].offset);
diff --git a/audio/mods/rjp1.cpp b/audio/mods/rjp1.cpp
index f4b6dd5713..c8a75d59f2 100644
--- a/audio/mods/rjp1.cpp
+++ b/audio/mods/rjp1.cpp
@@ -308,7 +308,7 @@ bool Rjp1::executeSongSequenceOp(Rjp1Channel *channel, uint8 code, const uint8 *
 			} else {
 				code = offs[0];
 				if (code == 0) {
-					p = 0;
+					p = nullptr;
 					channel->active = false;
 					_vars.activeChannelsMask &= ~(1 << _vars.currentChannel);
 					loop = false;
@@ -581,7 +581,7 @@ AudioStream *makeRjp1Stream(Common::SeekableReadStream *songData, Common::Seekab
 		return stream;
 	}
 	delete stream;
-	return 0;
+	return nullptr;
 }
 
 } // End of namespace Audio
diff --git a/audio/mods/soundfx.cpp b/audio/mods/soundfx.cpp
index 5469a18b5a..b1758e768f 100644
--- a/audio/mods/soundfx.cpp
+++ b/audio/mods/soundfx.cpp
@@ -86,7 +86,7 @@ SoundFx::SoundFx(int rate, bool stereo, bool repeat, int periodScaleDivisor)
 	_curOrder = 0;
 	_curPos = 0;
 	memset(_ordersTable, 0, sizeof(_ordersTable));
-	_patternData = 0;
+	_patternData = nullptr;
 	memset(_effects, 0, sizeof(_effects));
 	_repeat = repeat;
 }
@@ -151,7 +151,7 @@ bool SoundFx::load(Common::SeekableReadStream *data, LoadSoundFxInstrumentCallba
 		} else {
 			if (ins->name[0]) {
 				ins->name[22] = '\0';
-				ins->data = (int8 *)(*loadCb)(ins->name, 0);
+				ins->data = (int8 *)(*loadCb)(ins->name, nullptr);
 				if (!ins->data) {
 					return false;
 				}
@@ -276,7 +276,7 @@ AudioStream *makeSoundFxStream(Common::SeekableReadStream *data, LoadSoundFxInst
 		return stream;
 	}
 	delete stream;
-	return 0;
+	return nullptr;
 }
 
 } // End of namespace Audio
diff --git a/audio/mods/tfmx.cpp b/audio/mods/tfmx.cpp
index a2a474ae65..e7534132a1 100644
--- a/audio/mods/tfmx.cpp
+++ b/audio/mods/tfmx.cpp
@@ -860,8 +860,8 @@ void Tfmx::freeResourceDataImpl() {
 		}
 		delete[] _resourceSample.sampleData;
 	}
-	_resource = 0;
-	_resourceSample.sampleData = 0;
+	_resource = nullptr;
+	_resourceSample.sampleData = nullptr;
 	_resourceSample.sampleLen = 0;
 	_deleteResource = false;
 }
@@ -882,13 +882,13 @@ const int8 *Tfmx::loadSampleFile(uint32 &sampleLen, Common::SeekableReadStream &
 	const int32 sampleSize = sampleStream.size();
 	if (sampleSize < 4) {
 		warning("Tfmx: Cant load Samplefile");
-		return 0;
+		return nullptr;
 	}
 
 	int8 *sampleAlloc = new int8[sampleSize];
 	if (!sampleAlloc) {
 		warning("Tfmx: Could not allocate Memory: %dKB", sampleSize / 1024);
-		return 0;
+		return nullptr;
 	}
 
 	if (sampleStream.read(sampleAlloc, sampleSize) == (uint32)sampleSize) {
@@ -897,7 +897,7 @@ const int8 *Tfmx::loadSampleFile(uint32 &sampleLen, Common::SeekableReadStream &
 	} else {
 		delete[] sampleAlloc;
 		warning("Tfmx: Encountered IO-Error");
-		return 0;
+		return nullptr;
 	}
 	return sampleAlloc;
 }
@@ -914,13 +914,13 @@ const Tfmx::MdatResource *Tfmx::loadMdatFile(Common::SeekableReadStream &musicDa
 
 	if (!hasHeader) {
 		warning("Tfmx: File is not a Tfmx Module");
-		return 0;
+		return nullptr;
 	}
 
 	MdatResource *resource = new MdatResource;
 
-	resource->mdatAlloc = 0;
-	resource->mdatData = 0;
+	resource->mdatAlloc = nullptr;
+	resource->mdatData = nullptr;
 	resource->mdatLen = 0;
 
 	// 0x000A: int16 flags
@@ -961,7 +961,7 @@ const Tfmx::MdatResource *Tfmx::loadMdatFile(Common::SeekableReadStream &musicDa
 	if (musicData.err()) {
 		warning("Tfmx: Encountered IO-Error");
 		delete resource;
-		return 0;
+		return nullptr;
 	}
 
 	// TODO: if a File is packed it could have for Ex only 2 Patterns/Macros
@@ -994,7 +994,7 @@ const Tfmx::MdatResource *Tfmx::loadMdatFile(Common::SeekableReadStream &musicDa
 	if (!mdatAlloc) {
 		warning("Tfmx: Could not allocate Memory: %dKB", allocSize / 1024);
 		delete resource;
-		return 0;
+		return nullptr;
 	}
 	musicData.seek(mdatOffset);
 	if (musicData.read(mdatAlloc, allocSize) == allocSize) {
@@ -1005,7 +1005,7 @@ const Tfmx::MdatResource *Tfmx::loadMdatFile(Common::SeekableReadStream &musicDa
 		delete[] mdatAlloc;
 		warning("Tfmx: Encountered IO-Error");
 		delete resource;
-		return 0;
+		return nullptr;
 	}
 
 	return resource;
diff --git a/audio/mpu401.cpp b/audio/mpu401.cpp
index 9ac1341334..407ffa2deb 100644
--- a/audio/mpu401.cpp
+++ b/audio/mpu401.cpp
@@ -92,7 +92,7 @@ const char *MidiDriver::getErrorName(int error_code) {
 
 MidiDriver_MPU401::MidiDriver_MPU401() :
 	MidiDriver(),
-	_timer_proc(0),
+	_timer_proc(nullptr),
 	_channel_mask(0xFFFF) // Permit all 16 channels by default
 {
 
@@ -108,7 +108,7 @@ MidiDriver_MPU401::~MidiDriver_MPU401() {
 void MidiDriver_MPU401::close() {
 	if (_timer_proc) {
 		g_system->getTimerManager()->removeTimerProc(_timer_proc);
-		_timer_proc = 0;
+		_timer_proc = nullptr;
 	}
 	if (isOpen()) {
 		for (int i = 0; i < 16; ++i)
@@ -140,7 +140,7 @@ MidiChannel *MidiDriver_MPU401::allocateChannel() {
 			return chan;
 		}
 	}
-	return NULL;
+	return nullptr;
 }
 
 void MidiDriver_MPU401::setTimerCallback(void *timer_param, Common::TimerManager::TimerProc timer_proc) {
diff --git a/audio/mt32gm.cpp b/audio/mt32gm.cpp
index ae8827b995..4f03197009 100644
--- a/audio/mt32gm.cpp
+++ b/audio/mt32gm.cpp
@@ -87,7 +87,7 @@ void MidiDriver_MT32GM::timerCallback(void *data) {
 }
 
 MidiDriver_MT32GM::MidiDriver_MT32GM(MusicType midiType) :
-		_driver(0),
+		_driver(nullptr),
 		_nativeMT32(false),
 		_enableGS(false),
 		_midiDataReversePanning(false),
@@ -131,11 +131,11 @@ MidiDriver_MT32GM::MidiDriver_MT32GM(MusicType midiType) :
 
 MidiDriver_MT32GM::~MidiDriver_MT32GM() {
 	if (_driver) {
-		_driver->setTimerCallback(0, 0);
+		_driver->setTimerCallback(nullptr, nullptr);
 		_driver->close();
 		delete _driver;
 	}
-	_driver = 0;
+	_driver = nullptr;
 
 	if (_controlData) {
 		for (int i = 0; i < MIDI_CHANNEL_COUNT; ++i) {
@@ -305,7 +305,7 @@ void MidiDriver_MT32GM::initGM(bool initForMT32, bool enableGS) {
 
 			// Note: All Roland GS devices support CM-64/32L maps
 
-			if (getPercussionChannel() != 0) {
+			if (getPercussionChannel() != nullptr) {
 				// Set Percussion Channel to SC-55 Map (CC#32, 01H), then
 				// Switch Drum Map to CM-64/32L (MT-32 Compatible Drums)
 				// Bank select MSB: bank 0
@@ -318,7 +318,7 @@ void MidiDriver_MT32GM::initGM(bool initForMT32, bool enableGS) {
 
 			// Set Channels 1-16 to SC-55 Map, then CM-64/32L Variation
 			for (i = 0; i < 16; ++i) {
-				if (getPercussionChannel() != 0 && i == getPercussionChannel()->getNumber())
+				if (getPercussionChannel() != nullptr && i == getPercussionChannel()->getNumber())
 					continue;
 				// Bank select MSB: bank 127 (CM-64/32L)
 				send((127 << 16) | (MIDI_CONTROLLER_BANK_SELECT_MSB << 8) | (MIDI_COMMAND_CONTROL_CHANGE | i));
@@ -878,13 +878,13 @@ void MidiDriver_MT32GM::clearSysExQueue() {
 MidiChannel *MidiDriver_MT32GM::allocateChannel() {
 	if (_driver)
 		return _driver->allocateChannel();
-	return 0;
+	return nullptr;
 }
 
 MidiChannel *MidiDriver_MT32GM::getPercussionChannel() {
 	if (_driver)
 		return _driver->getPercussionChannel();
-	return 0;
+	return nullptr;
 }
 
 bool MidiDriver_MT32GM::isOutputChannelUsed(int8 outputChannel) {
diff --git a/audio/rate.cpp b/audio/rate.cpp
index 6264465e19..5a322b33b6 100644
--- a/audio/rate.cpp
+++ b/audio/rate.cpp
@@ -285,7 +285,7 @@ class CopyRateConverter : public RateConverter {
 	st_sample_t *_buffer;
 	st_size_t _bufferSize;
 public:
-	CopyRateConverter() : _buffer(0), _bufferSize(0) {}
+	CopyRateConverter() : _buffer(nullptr), _bufferSize(0) {}
 	~CopyRateConverter() {
 		free(_buffer);
 	}
diff --git a/audio/softsynth/fluidsynth.cpp b/audio/softsynth/fluidsynth.cpp
index 1945a8e6cb..394cdd22ed 100644
--- a/audio/softsynth/fluidsynth.cpp
+++ b/audio/softsynth/fluidsynth.cpp
@@ -218,11 +218,11 @@ int MidiDriver_FluidSynth::open() {
 	if (_isOpen)
 		return MERR_ALREADY_OPEN;
 
-	fluid_set_log_function(FLUID_PANIC, logHandler, NULL);
-	fluid_set_log_function(FLUID_ERR, logHandler, NULL);
-	fluid_set_log_function(FLUID_WARN, logHandler, NULL);
-	fluid_set_log_function(FLUID_INFO, logHandler, NULL);
-	fluid_set_log_function(FLUID_DBG, logHandler, NULL);
+	fluid_set_log_function(FLUID_PANIC, logHandler, nullptr);
+	fluid_set_log_function(FLUID_ERR, logHandler, nullptr);
+	fluid_set_log_function(FLUID_WARN, logHandler, nullptr);
+	fluid_set_log_function(FLUID_INFO, logHandler, nullptr);
+	fluid_set_log_function(FLUID_DBG, logHandler, nullptr);
 
 #if FS_API_VERSION >= 0x0200
 	// When provided with in-memory SoundFont data, only use the configured
@@ -439,7 +439,7 @@ MidiChannel *MidiDriver_FluidSynth::allocateChannel() {
 		if (i != 9 && _midiChannels[i].allocate())
 			return &_midiChannels[i];
 	}
-	return NULL;
+	return nullptr;
 }
 
 MidiChannel *MidiDriver_FluidSynth::getPercussionChannel() {
diff --git a/audio/softsynth/fmtowns_pc98/pc98_audio.cpp b/audio/softsynth/fmtowns_pc98/pc98_audio.cpp
index 85e072eaaf..4899ba3eb8 100644
--- a/audio/softsynth/fmtowns_pc98/pc98_audio.cpp
+++ b/audio/softsynth/fmtowns_pc98/pc98_audio.cpp
@@ -92,9 +92,9 @@ PC98AudioCoreInternal::~PC98AudioCoreInternal() {
 
 PC98AudioCoreInternal *PC98AudioCoreInternal::addNewRef(Audio::Mixer *mixer, PC98AudioCore *owner, PC98AudioPluginDriver *driver, PC98AudioPluginDriver::EmuType type) {
 	_refCount++;
-	if (_refCount == 1 && _refInstance == 0)
+	if (_refCount == 1 && _refInstance == nullptr)
 		_refInstance = new PC98AudioCoreInternal(mixer, owner, driver, type);
-	else if (_refCount < 2 || _refInstance == 0)
+	else if (_refCount < 2 || _refInstance == nullptr)
 		error("PC98AudioCoreInternal::addNewRef(): Internal reference management failure");
 	else if (!_refInstance->assignPluginDriver(owner, driver))
 		error("PC98AudioCoreInternal::addNewRef(): Plugin driver conflict");
@@ -113,7 +113,7 @@ void PC98AudioCoreInternal::releaseRef(PC98AudioCore *owner) {
 			_refInstance->removePluginDriver(owner);
 	} else {
 		delete _refInstance;
-		_refInstance = 0;
+		_refInstance = nullptr;
 	}
 }
 
@@ -216,7 +216,7 @@ bool PC98AudioCoreInternal::assignPluginDriver(PC98AudioCore *owner, PC98AudioPl
 void PC98AudioCoreInternal::removePluginDriver(PC98AudioCore *owner) {
 	Common::StackLock lock(_mutex);
 	if (_drvOwner == owner)
-		_drv = 0;
+		_drv = nullptr;
 }
 
 void PC98AudioCoreInternal::timerCallbackA() {
@@ -229,7 +229,7 @@ void PC98AudioCoreInternal::timerCallbackB() {
 		_drv->timerCallbackB();
 }
 
-PC98AudioCoreInternal *PC98AudioCoreInternal::_refInstance = 0;
+PC98AudioCoreInternal *PC98AudioCoreInternal::_refInstance = nullptr;
 
 int PC98AudioCoreInternal::_refCount = 0;
 
@@ -239,7 +239,7 @@ PC98AudioCore::PC98AudioCore(Audio::Mixer *mixer, PC98AudioPluginDriver *driver,
 
 PC98AudioCore::~PC98AudioCore() {
 	PC98AudioCoreInternal::releaseRef(this);
-	_internal = 0;
+	_internal = nullptr;
 }
 
 bool PC98AudioCore::init() {
diff --git a/audio/softsynth/fmtowns_pc98/pcm_common.cpp b/audio/softsynth/fmtowns_pc98/pcm_common.cpp
index bd197944ef..1c47b239ca 100644
--- a/audio/softsynth/fmtowns_pc98/pcm_common.cpp
+++ b/audio/softsynth/fmtowns_pc98/pcm_common.cpp
@@ -23,7 +23,7 @@
 #include "audio/softsynth/fmtowns_pc98/pcm_common.h"
 #include "audio/mixer.h"
 
-PCMChannel_Base::PCMChannel_Base() : _vol(0), _data(0), _dataEnd(0), _loopLen(0), _pos(0), _loopStart(0), _step(0), _panLeft(7), _panRight(7), _activeOutput(false)  {
+PCMChannel_Base::PCMChannel_Base() : _vol(0), _data(nullptr), _dataEnd(0), _loopLen(0), _pos(0), _loopStart(0), _step(0), _panLeft(7), _panRight(7), _activeOutput(false)  {
 }
 
 PCMChannel_Base::~PCMChannel_Base() {
@@ -32,7 +32,7 @@ PCMChannel_Base::~PCMChannel_Base() {
 
 void PCMChannel_Base::clear() {
 	_vol = 0;
-	_data = 0;
+	_data = nullptr;
 	_dataEnd = 0;
 	_loopLen = 0;
 	_pos = 0;
diff --git a/audio/softsynth/fmtowns_pc98/sega_audio.cpp b/audio/softsynth/fmtowns_pc98/sega_audio.cpp
index 0965e27982..20588de42b 100644
--- a/audio/softsynth/fmtowns_pc98/sega_audio.cpp
+++ b/audio/softsynth/fmtowns_pc98/sega_audio.cpp
@@ -134,11 +134,11 @@ private:
 	static int _refCount;
 };
 
-SegaAudioInterfaceInternal *SegaAudioInterfaceInternal::_refInstance = 0;
+SegaAudioInterfaceInternal *SegaAudioInterfaceInternal::_refInstance = nullptr;
 int SegaAudioInterfaceInternal::_refCount = 0;
 
 SegaAudioInterfaceInternal::SegaAudioInterfaceInternal(Audio::Mixer *mixer, SegaAudioInterface *owner, SegaAudioPluginDriver *driver) :TownsPC98_FmSynth(mixer, TownsPC98_FmSynth::kTypeTowns),
-	_drv(driver), _drvOwner(owner),	_musicVolume(Audio::Mixer::kMaxMixerVolume), _sfxVolume(Audio::Mixer::kMaxMixerVolume), _pcmBanks(0), _pcmDev(0), _psgDev(0), _pcmChan(0), _ready(false) {
+	_drv(driver), _drvOwner(owner),	_musicVolume(Audio::Mixer::kMaxMixerVolume), _sfxVolume(Audio::Mixer::kMaxMixerVolume), _pcmBanks(nullptr), _pcmDev(nullptr), _psgDev(nullptr), _pcmChan(nullptr), _ready(false) {
 }
 
 SegaAudioInterfaceInternal::~SegaAudioInterfaceInternal() {
@@ -158,9 +158,9 @@ SegaAudioInterfaceInternal::~SegaAudioInterfaceInternal() {
 
 SegaAudioInterfaceInternal *SegaAudioInterfaceInternal::addNewRef(Audio::Mixer *mixer, SegaAudioInterface *owner, SegaAudioPluginDriver *driver) {
 	_refCount++;
-	if (_refCount == 1 && _refInstance == 0)
+	if (_refCount == 1 && _refInstance == nullptr)
 		_refInstance = new SegaAudioInterfaceInternal(mixer, owner, driver);
-	else if (_refCount < 2 || _refInstance == 0)
+	else if (_refCount < 2 || _refInstance == nullptr)
 		error("SegaAudioInterfaceInternal::addNewRef(): Internal reference management failure");
 	else if (!_refInstance->assignPluginDriver(owner, driver))
 		error("SegaAudioInterfaceInternal::addNewRef(): Plugin driver conflict");
@@ -179,7 +179,7 @@ void SegaAudioInterfaceInternal::releaseRef(SegaAudioInterface *owner) {
 			_refInstance->removePluginDriver(owner);
 	} else {
 		delete _refInstance;
-		_refInstance = 0;
+		_refInstance = nullptr;
 	}
 }
 
@@ -300,7 +300,7 @@ bool SegaAudioInterfaceInternal::assignPluginDriver(SegaAudioInterface *owner, S
 void SegaAudioInterfaceInternal::removePluginDriver(SegaAudioInterface *owner) {
 	Common::StackLock lock(_mutex);
 	if (_drvOwner == owner)
-		_drv = 0;
+		_drv = nullptr;
 }
 
 void SegaAudioInterfaceInternal::nextTickEx(int32 *buffer, uint32 bufferSize) {
@@ -432,7 +432,7 @@ SegaAudioInterface::SegaAudioInterface(Audio::Mixer *mixer, SegaAudioPluginDrive
 
 SegaAudioInterface::~SegaAudioInterface() {
 	SegaAudioInterfaceInternal::releaseRef(this);
-	_internal = 0;
+	_internal = nullptr;
 }
 
 bool SegaAudioInterface::init() {
diff --git a/audio/softsynth/fmtowns_pc98/towns_audio.cpp b/audio/softsynth/fmtowns_pc98/towns_audio.cpp
index d197adef94..4b2b3711d4 100644
--- a/audio/softsynth/fmtowns_pc98/towns_audio.cpp
+++ b/audio/softsynth/fmtowns_pc98/towns_audio.cpp
@@ -255,8 +255,8 @@ private:
 };
 
 TownsAudioInterfaceInternal::TownsAudioInterfaceInternal(Audio::Mixer *mixer, TownsAudioInterface *owner, TownsAudioInterfacePluginDriver *driver, bool externalMutex) :
-	TownsPC98_FmSynth(mixer, kTypeTowns), _fmInstruments(0), _pcmInstruments(0), _pcmChan(0), _waveTables(0), _waveTablesTotalDataSize(0),
-	_drv(driver), _drvOwner(owner), _externalMutex(externalMutex), _outputVolumeFlags(0), _pcmDev(0),
+	TownsPC98_FmSynth(mixer, kTypeTowns), _fmInstruments(nullptr), _pcmInstruments(nullptr), _pcmChan(nullptr), _waveTables(nullptr), _waveTablesTotalDataSize(0),
+	_drv(driver), _drvOwner(owner), _externalMutex(externalMutex), _outputVolumeFlags(0), _pcmDev(nullptr),
 	_fmChanPlaying(0), _musicVolume(Audio::Mixer::kMaxMixerVolume), _sfxVolume(Audio::Mixer::kMaxMixerVolume),
 	_numReservedChannels(0), _numWaveTables(0), _updateOutputVol(false), _ready(false) {
 #define INTCB(x) &TownsAudioInterfaceInternal::intf_##x
@@ -397,9 +397,9 @@ TownsAudioInterfaceInternal::~TownsAudioInterfaceInternal() {
 
 TownsAudioInterfaceInternal *TownsAudioInterfaceInternal::addNewRef(Audio::Mixer *mixer, TownsAudioInterface *owner, TownsAudioInterfacePluginDriver *driver, bool externalMutex) {
 	_refCount++;
-	if (_refCount == 1 && _refInstance == 0)
+	if (_refCount == 1 && _refInstance == nullptr)
 		_refInstance = new TownsAudioInterfaceInternal(mixer, owner, driver, externalMutex);
-	else if (_refCount < 2 || _refInstance == 0)
+	else if (_refCount < 2 || _refInstance == nullptr)
 		error("TownsAudioInterfaceInternal::addNewRef(): Internal reference management failure");
 	else if (!_refInstance->assignPluginDriver(owner, driver))
 		error("TownsAudioInterfaceInternal::addNewRef(): Plugin driver conflict");
@@ -418,7 +418,7 @@ void TownsAudioInterfaceInternal::releaseRef(TownsAudioInterface *owner) {
 			_refInstance->removePluginDriver(owner);
 	} else {
 		delete _refInstance;
-		_refInstance = 0;
+		_refInstance = nullptr;
 	}
 }
 
@@ -522,7 +522,7 @@ bool TownsAudioInterfaceInternal::assignPluginDriver(TownsAudioInterface *owner,
 void TownsAudioInterfaceInternal::removePluginDriver(TownsAudioInterface *owner) {
 	Common::StackLock lock(_mutex);
 	if (_drvOwner == owner)
-		_drv = 0;
+		_drv = nullptr;
 }
 
 void TownsAudioInterfaceInternal::nextTickEx(int32 *buffer, uint32 bufferSize) {
@@ -1520,7 +1520,7 @@ void TownsAudioInterfaceInternal::updateOutputVolumeInternal() {
 	_updateOutputVol = false;
 }
 
-TownsAudioInterfaceInternal *TownsAudioInterfaceInternal::_refInstance = 0;
+TownsAudioInterfaceInternal *TownsAudioInterfaceInternal::_refInstance = nullptr;
 
 int TownsAudioInterfaceInternal::_refCount = 0;
 
@@ -1543,7 +1543,7 @@ const uint8 TownsAudioInterfaceInternal::_fmDefaultInstrument[] = {
 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 
-TownsAudio_PCMChannel::TownsAudio_PCMChannel() : PCMChannel_Base(), _extData(0) {
+TownsAudio_PCMChannel::TownsAudio_PCMChannel() : PCMChannel_Base(), _extData(nullptr) {
 	clear();
 }
 
@@ -1554,7 +1554,7 @@ TownsAudio_PCMChannel::~TownsAudio_PCMChannel() {
 void TownsAudio_PCMChannel::clear() {
 	PCMChannel_Base::clear();
 
-	_curInstrument = 0;
+	_curInstrument = nullptr;
 	_note = _level = _velo = 0;
 
 	_stepNote = 0x4000;
@@ -1568,7 +1568,7 @@ void TownsAudio_PCMChannel::clear() {
 	_activeKey = _activeEffect = _keyPressed = _reserved = false;
 
 	delete[] _extData;
-	_extData = 0;
+	_extData = nullptr;
 }
 
 void TownsAudio_PCMChannel::loadDataFromWaveTable(TownsAudio_WaveTable *w) {
@@ -1821,7 +1821,7 @@ const uint16 TownsAudio_PCMChannel::_pcmPhase2[] =  {
 };
 
 TownsAudio_WaveTable::TownsAudio_WaveTable() {
-	data = 0;
+	data = nullptr;
 	clear();
 }
 
@@ -1864,7 +1864,7 @@ void TownsAudio_WaveTable::clear() {
 	rateOffs = 0;
 	baseNote = 0;
 	delete[] data;
-	data = 0;
+	data = nullptr;
 }
 
 TownsAudioInterface::TownsAudioInterface(Audio::Mixer *mixer, TownsAudioInterfacePluginDriver *driver, bool externalMutex) {
@@ -1873,7 +1873,7 @@ TownsAudioInterface::TownsAudioInterface(Audio::Mixer *mixer, TownsAudioInterfac
 
 TownsAudioInterface::~TownsAudioInterface() {
 	TownsAudioInterfaceInternal::releaseRef(this);
-	_intf = 0;
+	_intf = nullptr;
 }
 
 bool TownsAudioInterface::init() {
diff --git a/audio/softsynth/fmtowns_pc98/towns_euphony.cpp b/audio/softsynth/fmtowns_pc98/towns_euphony.cpp
index 732491a043..89778ba730 100644
--- a/audio/softsynth/fmtowns_pc98/towns_euphony.cpp
+++ b/audio/softsynth/fmtowns_pc98/towns_euphony.cpp
@@ -35,8 +35,8 @@
 #define EUP_EVENTS_NEW			new
 #endif
 
-EuphonyPlayer::EuphonyPlayer(Audio::Mixer *mixer) : _partConfig_enable(0), _partConfig_type(0), _partConfig_ordr(0), _partConfig_volume(0),
-	_partConfig_transpose(0), _musicPos(0), _musicStart(0), _playing(false), _pendingEventsChain(0), _tempoModifier(0), _bar(0),
+EuphonyPlayer::EuphonyPlayer(Audio::Mixer *mixer) : _partConfig_enable(nullptr), _partConfig_type(nullptr), _partConfig_ordr(nullptr), _partConfig_volume(nullptr),
+	_partConfig_transpose(nullptr), _musicPos(nullptr), _musicStart(nullptr), _playing(false), _pendingEventsChain(nullptr), _tempoModifier(0), _bar(0),
 	_beat(0), _defaultBarLength(0), _barLength(0), _playerUpdatesLeft(0), _updatesPerPulseRemainder(0),	_updatesPerPulse(0),
 	_deltaTicks(0), _defaultTempo(0), _trackTempo(0), _tempoControlMode(0), _timerSetting(0), _tempoMode1PulseCounter(0),
 	_parseToBar(0), _tempoMode1UpdateF8(0), _loop(false), _endOfTrack(false), _paused(false), _musicTrackSize(0) {
@@ -57,7 +57,7 @@ EuphonyPlayer::EuphonyPlayer(Audio::Mixer *mixer) : _partConfig_enable(0), _part
 
 	_drivers[0] = _eupDriver = new EuphonyDriver(mixer, this);
 	_drivers[1] = new Type0Driver(this);
-	_drivers[2] = 0;
+	_drivers[2] = nullptr;
 	resetTempo();
 }
 
@@ -89,7 +89,7 @@ bool EuphonyPlayer::init() {
 			if (!_drivers[i]->init()) {
 				warning("EuphonyPlayer:: Driver initialization failed: %d", i);
 				delete _drivers[i];
-				_drivers[i] = 0;
+				_drivers[i] = nullptr;
 			}
 		}
 	}
@@ -384,7 +384,7 @@ void EuphonyPlayer::proceedToNextEvent() {
 }
 
 void EuphonyPlayer::updateHangingNotes() {
-	PendingEvent *l = 0;
+	PendingEvent *l = nullptr;
 	PendingEvent *e = _pendingEventsChain;
 
 	while (e) {
@@ -658,7 +658,7 @@ void EuphonyPlayer::sendTempo(int tempo) {
 	}
 }
 
-EuphonyDriver::EuphonyDriver(Audio::Mixer *mixer, EuphonyPlayer *pl) : EuphonyBaseDriver(), _channels(0), _partToChanMapping(0), _sustainChannels(0) {
+EuphonyDriver::EuphonyDriver(Audio::Mixer *mixer, EuphonyPlayer *pl) : EuphonyBaseDriver(), _channels(nullptr), _partToChanMapping(nullptr), _sustainChannels(nullptr) {
 	_intf = new TownsAudioInterface(mixer, pl);
 }
 
diff --git a/audio/softsynth/fmtowns_pc98/towns_pc98_driver.cpp b/audio/softsynth/fmtowns_pc98/towns_pc98_driver.cpp
index 75e90885e5..d7d3c9ab29 100644
--- a/audio/softsynth/fmtowns_pc98/towns_pc98_driver.cpp
+++ b/audio/softsynth/fmtowns_pc98/towns_pc98_driver.cpp
@@ -193,7 +193,7 @@ private:
 TownsPC98_MusicChannel::TownsPC98_MusicChannel(TownsPC98_AudioDriver *driver, uint8 regOffs, uint8 flgs, uint8 num, uint8 key, uint8 prt, uint8 id) : _driver(driver),
 _regOffset(regOffs), _flags(flgs), _chanNum(num), _keyNum(key),	_part(prt), _idFlag(id), _ticksLeft(0), _algorithm(0), _instr(0), _totalLevel(0),
 _frqBlockMSB(0), _duration(0), _block(0), _vbrInitDelayHi(0), _vbrInitDelayLo(0), _vbrDuration(0), _vbrCurDelay(0), _vbrDurLeft(0), _pitchBend(0),
-_sustain(false), _fading(false), _dataPtr(0), _vbrModInitVal(0), _vbrModCurVal(0), _frequency(0) {
+_sustain(false), _fading(false), _dataPtr(nullptr), _vbrModInitVal(0), _vbrModCurVal(0), _frequency(0) {
 	CONTROL(f0_setPatch);
 	CONTROL(f1_presetOutputLevel);
 	CONTROL(f2_duration);
@@ -617,7 +617,7 @@ TownsPC98_MusicChannelSSG::~TownsPC98_MusicChannelSSG() {
 	for (Common::Array<const ControlEvent*>::iterator i = _controlEvents.begin(); i != _controlEvents.end(); ++i)
 		delete *i;
 	delete[] _envPatchData;
-	_envPatchData = 0;
+	_envPatchData = nullptr;
 }
 
 void TownsPC98_MusicChannelSSG::reset() {
@@ -898,7 +898,7 @@ bool TownsPC98_MusicChannelSSG::control_ff_endOfTrack(uint8 para) {
 	return false;
 }
 
-uint8 *TownsPC98_MusicChannelSSG::_envPatchData = 0;
+uint8 *TownsPC98_MusicChannelSSG::_envPatchData = nullptr;
 
 const uint8 TownsPC98_MusicChannelSSG::_envData[256] = {
 	0x00, 0x00, 0xFF, 0xFF, 0x00, 0x81, 0x00, 0x00,
@@ -1065,11 +1065,11 @@ bool TownsPC98_MusicChannelPCM::control_ff_endOfTrack(uint8 para) {
 #endif // DISABLE_PC98_RHYTHM_CHANNEL
 
 TownsPC98_AudioDriver::TownsPC98_AudioDriver(Audio::Mixer *mixer, EmuType type) :
-	_channels(0), _ssgChannels(0), _sfxChannels(0),
+	_channels(nullptr), _ssgChannels(nullptr), _sfxChannels(nullptr),
 #ifndef DISABLE_PC98_RHYTHM_CHANNEL
-	_rhythmChannel(0),
+	_rhythmChannel(nullptr),
 #endif
-	_sfxData(0), _sfxOffs(0), _patchData(0), _sfxBuffer(0), _musicBuffer(0), _trackPtr(0),
+	_sfxData(nullptr), _sfxOffs(0), _patchData(nullptr), _sfxBuffer(nullptr), _musicBuffer(nullptr), _trackPtr(nullptr),
 	_levelPresets(type == kTypeTowns ? _levelPresetFMTOWNS : _levelPresetPC98),
 	_updateChannelsFlag(type == kType26 ? 0x07 : 0x3F), _finishedChannelsFlag(0),
 	_updateSSGFlag(type == kTypeTowns ? 0x00 : 0x07), _finishedSSGFlag(0),
@@ -1239,7 +1239,7 @@ void TownsPC98_AudioDriver::reset() {
 	_fading = 0;
 	_looping = 0;
 	_musicTickCounter = 0;
-	_sfxData = 0;
+	_sfxData = nullptr;
 
 	_pc98a->reset();
 	setMusicTempo(84);
@@ -1401,7 +1401,7 @@ void TownsPC98_AudioDriver::startSoundEffect() {
 	}
 
 	_pc98a->setSoundEffectChanMask(volFlags);
-	_sfxData = 0;
+	_sfxData = nullptr;
 }
 
 void TownsPC98_AudioDriver::setMusicTempo(uint8 tempo) {
diff --git a/audio/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp b/audio/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp
index 0109e0d868..8029fd3d92 100644
--- a/audio/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp
+++ b/audio/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp
@@ -460,7 +460,7 @@ public:
 		delete[] _reg;
 	}
 
-	void init(const uint8 *instrData = 0);
+	void init(const uint8 *instrData = nullptr);
 	void reset();
 	void writeReg(uint8 address, uint8 value);
 	uint8 readReg(uint8 address) const;
@@ -521,8 +521,8 @@ private:
 };
 #endif // DISABLE_PC98_RHYTHM_CHANNEL
 
-TownsPC98_FmSynthSquareWaveSource::TownsPC98_FmSynthSquareWaveSource(const uint32 tickLength, const uint32 envduration) : _tlTable(0),
-	_envDuration(envduration), _tleTable(0), _updateRequest(-1), _tickLength(tickLength), _ready(0), _reg(0), _rand(1), _outN(1),
+TownsPC98_FmSynthSquareWaveSource::TownsPC98_FmSynthSquareWaveSource(const uint32 tickLength, const uint32 envduration) : _tlTable(nullptr),
+	_envDuration(envduration), _tleTable(nullptr), _updateRequest(-1), _tickLength(tickLength), _ready(0), _reg(nullptr), _rand(1), _outN(1),
 	_nTick(0), _evpUpdateCnt(0), _evpTimer(0x1f), _pReslt(0x1f), _attack(0), _cont(false), _evpUpdate(true),
 	_timer(0), _noiseGenerator(0), _chanEnable(0), _envH(0), _envL(0), _flags(0), _evpSwap(0), _volumeT(0x60),
 	_volMaskA(0), _volMaskB(0), _volumeA(Audio::Mixer::kMaxMixerVolume), _volumeB(Audio::Mixer::kMaxMixerVolume) {
@@ -748,7 +748,7 @@ TownsPC98_FmSynthPercussionSource::TownsPC98_FmSynthPercussionSource(const uint3
 	memset(_rhChan, 0, sizeof(RhtChannel) * 6);
 	_reg = new uint8 *[40];
 
-	_reg[0] = _reg[1] = _reg[2] = _reg[3] = _reg[4] = _reg[5] = _reg[6] = _reg[7] = _reg[8] = _reg[9] = _reg[10] = _reg[11] = _reg[12] = _reg[13] = _reg[14] = _reg[15] = 0;
+	_reg[0] = _reg[1] = _reg[2] = _reg[3] = _reg[4] = _reg[5] = _reg[6] = _reg[7] = _reg[8] = _reg[9] = _reg[10] = _reg[11] = _reg[12] = _reg[13] = _reg[14] = _reg[15] = nullptr;
 	_reg[16] = &_rhChan[0].startPosL;
 	_reg[17] = &_rhChan[1].startPosL;
 	_reg[18] = &_rhChan[2].startPosL;
@@ -949,15 +949,15 @@ void TownsPC98_FmSynthPercussionSource::advanceInput(RhtChannel *ins) {
 
 TownsPC98_FmSynth::TownsPC98_FmSynth(Audio::Mixer *mixer, EmuType type) :
 	_mixer(mixer), _mutex(mixer->mutex()),
-	_chanInternal(0), _ssg(0),
+	_chanInternal(nullptr), _ssg(nullptr),
 #ifndef DISABLE_PC98_RHYTHM_CHANNEL
-	_prc(0),
+	_prc(nullptr),
 #endif
 	_numChan(type == kType26 ? 3 : 6), _numSSG(type == kTypeTowns ? 0 : 3),
 	_hasPercussion(type == kType86 ? true : false),
-	_oprRates(0), _oprRateshift(0), _oprAttackDecay(0), _oprFrq(0), _oprSinTbl(0), _oprLevelOut(0), _oprDetune(0),
+	_oprRates(nullptr), _oprRateshift(nullptr), _oprAttackDecay(nullptr), _oprFrq(nullptr), _oprSinTbl(nullptr), _oprLevelOut(nullptr), _oprDetune(nullptr),
 	_internalRate((type == kTypeTowns ? 7670454 : (type == kType86 ? 7987000 : 3993600))),
-	_renderBuffer(0), _renderBufferSize(0), _numPending(0), _offsPending(0),
+	_renderBuffer(nullptr), _renderBufferSize(0), _numPending(0), _offsPending(0),
 #ifdef ENABLE_SNDTOWNS98_WAITCYCLES
 	_waitCycleRemainder(0),
 	_samplesPerWaitCycle(type == kType26 ? 72 : 144),
@@ -1001,7 +1001,7 @@ TownsPC98_FmSynth::~TownsPC98_FmSynth() {
 
 	delete[] _renderBuffer;
 
-	_timers[0].cb = _timers[1].cb = 0;
+	_timers[0].cb = _timers[1].cb = nullptr;
 	delete _timerProcA;
 	delete _timerProcB;
 	delete _timerProcIdle;
@@ -1382,9 +1382,9 @@ void TownsPC98_FmSynth::writeRegInternal(uint8 part, uint8 regAddress, uint8 val
 	uint8 h = regAddress & 0xf0;
 	uint8 l = (regAddress & 0x0f);
 
-	ChanInternal *c = 0;
-	TownsPC98_FmSynthOperator **co = 0;
-	TownsPC98_FmSynthOperator *o = 0;
+	ChanInternal *c = nullptr;
+	TownsPC98_FmSynthOperator **co = nullptr;
+	TownsPC98_FmSynthOperator *o = nullptr;
 
 	bool checkAddress = false;
 	c = &_chanInternal[(l & 3) + 3 * part];
@@ -1603,58 +1603,58 @@ void TownsPC98_FmSynth::nextTick(int32 *buffer, uint32 bufferSize) {
 			switch (_chanInternal[i].algorithm) {
 			case 0:
 				o[0]->generateOutput(0, feed, phbuf1);
-				o[2]->generateOutput(*del, 0, phbuf2);
+				o[2]->generateOutput(*del, nullptr, phbuf2);
 				*del = 0;
-				o[1]->generateOutput(phbuf1, 0, *del);
-				o[3]->generateOutput(phbuf2, 0, output);
+				o[1]->generateOutput(phbuf1, nullptr, *del);
+				o[3]->generateOutput(phbuf2, nullptr, output);
 				break;
 			case 1:
 				o[0]->generateOutput(0, feed, phbuf1);
-				o[2]->generateOutput(*del, 0, phbuf2);
-				o[1]->generateOutput(0, 0, phbuf1);
-				o[3]->generateOutput(phbuf2, 0, output);
+				o[2]->generateOutput(*del, nullptr, phbuf2);
+				o[1]->generateOutput(0, nullptr, phbuf1);
+				o[3]->generateOutput(phbuf2, nullptr, output);
 				*del = phbuf1;
 				break;
 			case 2:
 				o[0]->generateOutput(0, feed, phbuf2);
-				o[2]->generateOutput(*del, 0, phbuf2);
-				o[1]->generateOutput(0, 0, phbuf1);
-				o[3]->generateOutput(phbuf2, 0, output);
+				o[2]->generateOutput(*del, nullptr, phbuf2);
+				o[1]->generateOutput(0, nullptr, phbuf1);
+				o[3]->generateOutput(phbuf2, nullptr, output);
 				*del = phbuf1;
 				break;
 			case 3:
 				o[0]->generateOutput(0, feed, phbuf2);
-				o[2]->generateOutput(0, 0, *del);
-				o[1]->generateOutput(phbuf2, 0, phbuf1);
-				o[3]->generateOutput(*del, 0, output);
+				o[2]->generateOutput(0, nullptr, *del);
+				o[1]->generateOutput(phbuf2, nullptr, phbuf1);
+				o[3]->generateOutput(*del, nullptr, output);
 				*del = phbuf1;
 				break;
 			case 4:
 				o[0]->generateOutput(0, feed, phbuf1);
-				o[2]->generateOutput(0, 0, phbuf2);
-				o[1]->generateOutput(phbuf1, 0, output);
-				o[3]->generateOutput(phbuf2, 0, output);
+				o[2]->generateOutput(0, nullptr, phbuf2);
+				o[1]->generateOutput(phbuf1, nullptr, output);
+				o[3]->generateOutput(phbuf2, nullptr, output);
 				*del = 0;
 				break;
 			case 5:
 				o[0]->generateOutput(0, feed, phbuf1);
-				o[2]->generateOutput(*del, 0, output);
-				o[1]->generateOutput(phbuf1, 0, output);
-				o[3]->generateOutput(phbuf1, 0, output);
+				o[2]->generateOutput(*del, nullptr, output);
+				o[1]->generateOutput(phbuf1, nullptr, output);
+				o[3]->generateOutput(phbuf1, nullptr, output);
 				*del = phbuf1;
 				break;
 			case 6:
 				o[0]->generateOutput(0, feed, phbuf1);
-				o[2]->generateOutput(0, 0, output);
-				o[1]->generateOutput(phbuf1, 0, output);
-				o[3]->generateOutput(0, 0, output);
+				o[2]->generateOutput(0, nullptr, output);
+				o[1]->generateOutput(phbuf1, nullptr, output);
+				o[3]->generateOutput(0, nullptr, output);
 				*del = 0;
 				break;
 			case 7:
 				o[0]->generateOutput(0, feed, output);
-				o[2]->generateOutput(0, 0, output);
-				o[1]->generateOutput(0, 0, output);
-				o[3]->generateOutput(0, 0, output);
+				o[2]->generateOutput(0, nullptr, output);
+				o[1]->generateOutput(0, nullptr, output);
+				o[3]->generateOutput(0, nullptr, output);
 				*del = 0;
 				break;
 			default:
diff --git a/audio/softsynth/fmtowns_pc98/towns_pc98_plugins.cpp b/audio/softsynth/fmtowns_pc98/towns_pc98_plugins.cpp
index 5a1d606653..e6eb1e3b9f 100644
--- a/audio/softsynth/fmtowns_pc98/towns_pc98_plugins.cpp
+++ b/audio/softsynth/fmtowns_pc98/towns_pc98_plugins.cpp
@@ -47,7 +47,7 @@ MusicDevices TownsEmuMusicPlugin::getDevices() const {
 }
 
 Common::Error TownsEmuMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const {
-	*mididriver = 0;
+	*mididriver = nullptr;
 	return Common::kUnknownError;
 }
 
@@ -72,7 +72,7 @@ MusicDevices PC98EmuMusicPlugin::getDevices() const {
 }
 
 Common::Error PC98EmuMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const {
-	*mididriver = 0;
+	*mididriver = nullptr;
 	return Common::kUnknownError;
 }
 
@@ -97,7 +97,7 @@ MusicDevices SegaCDSoundPlugin::getDevices() const {
 }
 
 Common::Error SegaCDSoundPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const {
-	*mididriver = 0;
+	*mididriver = nullptr;
 	return Common::kUnknownError;
 }
 
diff --git a/audio/softsynth/mt32.cpp b/audio/softsynth/mt32.cpp
index e2803b168a..26581fae5c 100644
--- a/audio/softsynth/mt32.cpp
+++ b/audio/softsynth/mt32.cpp
@@ -265,7 +265,7 @@ void MidiDriver_MT32::close() {
 	_isOpen = false;
 
 	// Detach the player callback handler
-	setTimerCallback(NULL, NULL);
+	setTimerCallback(nullptr, nullptr);
 	// Detach the mixer callback handler
 	_mixer->stopHandle(_mixerSoundHandle);
 
@@ -307,7 +307,7 @@ MidiChannel *MidiDriver_MT32::allocateChannel() {
 			return chan;
 		}
 	}
-	return NULL;
+	return nullptr;
 }
 
 MidiChannel *MidiDriver_MT32::getPercussionChannel() {
diff --git a/audio/softsynth/mt32/Analog.cpp b/audio/softsynth/mt32/Analog.cpp
index adc0087f90..bc08dd50d3 100644
--- a/audio/softsynth/mt32/Analog.cpp
+++ b/audio/softsynth/mt32/Analog.cpp
@@ -239,7 +239,7 @@ public:
 
 	template <class Sample>
 	void produceOutput(Sample *outStream, const Sample *nonReverbLeft, const Sample *nonReverbRight, const Sample *reverbDryLeft, const Sample *reverbDryRight, const Sample *reverbWetLeft, const Sample *reverbWetRight, Bit32u outLength) {
-		if (outStream == NULL) {
+		if (outStream == nullptr) {
 			leftChannelLPF.addPositionIncrement(outLength);
 			rightChannelLPF.addPositionIncrement(outLength);
 			return;
@@ -276,7 +276,7 @@ Analog *Analog::createAnalog(const AnalogOutputMode mode, const bool oldMT32Anal
 	default:
 		break;
 	}
-	return NULL;
+	return nullptr;
 }
 
 template<>
diff --git a/audio/softsynth/mt32/BReverbModel.cpp b/audio/softsynth/mt32/BReverbModel.cpp
index a02aebcacf..e6d686fc4c 100644
--- a/audio/softsynth/mt32/BReverbModel.cpp
+++ b/audio/softsynth/mt32/BReverbModel.cpp
@@ -116,7 +116,7 @@ static const BReverbSettings &getCM32L_LAPCSettings(const ReverbMode mode) {
 	static const BReverbSettings REVERB_MODE_0_SETTINGS = {MODE_0_NUMBER_OF_ALLPASSES, MODE_0_ALLPASSES, MODE_0_NUMBER_OF_COMBS, MODE_0_COMBS, MODE_0_OUTL, MODE_0_OUTR, MODE_0_COMB_FACTOR, MODE_0_COMB_FEEDBACK, MODE_0_DRY_AMP, MODE_0_WET_AMP, MODE_0_LPF_AMP};
 	static const BReverbSettings REVERB_MODE_1_SETTINGS = {MODE_1_NUMBER_OF_ALLPASSES, MODE_1_ALLPASSES, MODE_1_NUMBER_OF_COMBS, MODE_1_COMBS, MODE_1_OUTL, MODE_1_OUTR, MODE_1_COMB_FACTOR, MODE_1_COMB_FEEDBACK, MODE_1_DRY_AMP, MODE_1_WET_AMP, MODE_1_LPF_AMP};
 	static const BReverbSettings REVERB_MODE_2_SETTINGS = {MODE_2_NUMBER_OF_ALLPASSES, MODE_2_ALLPASSES, MODE_2_NUMBER_OF_COMBS, MODE_2_COMBS, MODE_2_OUTL, MODE_2_OUTR, MODE_2_COMB_FACTOR, MODE_2_COMB_FEEDBACK, MODE_2_DRY_AMP, MODE_2_WET_AMP, MODE_2_LPF_AMP};
-	static const BReverbSettings REVERB_MODE_3_SETTINGS = {MODE_3_NUMBER_OF_ALLPASSES, NULL, MODE_3_NUMBER_OF_COMBS, MODE_3_DELAY, MODE_3_OUTL, MODE_3_OUTR, MODE_3_COMB_FACTOR, MODE_3_COMB_FEEDBACK, MODE_3_DRY_AMP, MODE_3_WET_AMP, 0};
+	static const BReverbSettings REVERB_MODE_3_SETTINGS = {MODE_3_NUMBER_OF_ALLPASSES, nullptr, MODE_3_NUMBER_OF_COMBS, MODE_3_DELAY, MODE_3_OUTL, MODE_3_OUTR, MODE_3_COMB_FACTOR, MODE_3_COMB_FEEDBACK, MODE_3_DRY_AMP, MODE_3_WET_AMP, 0};
 
 	static const BReverbSettings * const REVERB_SETTINGS[] = {&REVERB_MODE_0_SETTINGS, &REVERB_MODE_1_SETTINGS, &REVERB_MODE_2_SETTINGS, &REVERB_MODE_3_SETTINGS};
 
@@ -185,7 +185,7 @@ static const BReverbSettings &getMT32Settings(const ReverbMode mode) {
 	static const BReverbSettings REVERB_MODE_0_SETTINGS = {MODE_0_NUMBER_OF_ALLPASSES, MODE_0_ALLPASSES, MODE_0_NUMBER_OF_COMBS, MODE_0_COMBS, MODE_0_OUTL, MODE_0_OUTR, MODE_0_COMB_FACTOR, MODE_0_COMB_FEEDBACK, MODE_0_DRY_AMP, MODE_0_WET_AMP, MODE_0_LPF_AMP};
 	static const BReverbSettings REVERB_MODE_1_SETTINGS = {MODE_1_NUMBER_OF_ALLPASSES, MODE_1_ALLPASSES, MODE_1_NUMBER_OF_COMBS, MODE_1_COMBS, MODE_1_OUTL, MODE_1_OUTR, MODE_1_COMB_FACTOR, MODE_1_COMB_FEEDBACK, MODE_1_DRY_AMP, MODE_1_WET_AMP, MODE_1_LPF_AMP};
 	static const BReverbSettings REVERB_MODE_2_SETTINGS = {MODE_2_NUMBER_OF_ALLPASSES, MODE_2_ALLPASSES, MODE_2_NUMBER_OF_COMBS, MODE_2_COMBS, MODE_2_OUTL, MODE_2_OUTR, MODE_2_COMB_FACTOR, MODE_2_COMB_FEEDBACK, MODE_2_DRY_AMP, MODE_2_WET_AMP, MODE_2_LPF_AMP};
-	static const BReverbSettings REVERB_MODE_3_SETTINGS = {MODE_3_NUMBER_OF_ALLPASSES, NULL, MODE_3_NUMBER_OF_COMBS, MODE_3_DELAY, MODE_3_OUTL, MODE_3_OUTR, MODE_3_COMB_FACTOR, MODE_3_COMB_FEEDBACK, MODE_3_DRY_AMP, MODE_3_WET_AMP, 0};
+	static const BReverbSettings REVERB_MODE_3_SETTINGS = {MODE_3_NUMBER_OF_ALLPASSES, nullptr, MODE_3_NUMBER_OF_COMBS, MODE_3_DELAY, MODE_3_OUTL, MODE_3_OUTR, MODE_3_COMB_FACTOR, MODE_3_COMB_FEEDBACK, MODE_3_DRY_AMP, MODE_3_WET_AMP, 0};
 
 	static const BReverbSettings * const REVERB_SETTINGS[] = {&REVERB_MODE_0_SETTINGS, &REVERB_MODE_1_SETTINGS, &REVERB_MODE_2_SETTINGS, &REVERB_MODE_3_SETTINGS};
 
@@ -289,7 +289,7 @@ public:
 
 	virtual ~RingBuffer() {
 		delete[] buffer;
-		buffer = NULL;
+		buffer = nullptr;
 	}
 
 	Sample next() {
@@ -300,7 +300,7 @@ public:
 	}
 
 	bool isEmpty() const {
-		if (buffer == NULL) return true;
+		if (buffer == nullptr) return true;
 
 		Sample *buf = buffer;
 		for (Bit32u i = 0; i < size; i++) {
@@ -446,7 +446,7 @@ public:
 	Bit8u wetLevel;
 
 	BReverbModelImpl(const ReverbMode mode, const bool mt32CompatibleModel) :
-		allpasses(NULL), combs(NULL),
+		allpasses(nullptr), combs(nullptr),
 		currentSettings(mt32CompatibleModel ? getMT32Settings(mode) : getCM32L_LAPCSettings(mode)),
 		tapDelayMode(mode == REVERB_MODE_TAP_DELAY)
 	{}
@@ -456,7 +456,7 @@ public:
 	}
 
 	bool isOpen() const {
-		return combs != NULL;
+		return combs != nullptr;
 	}
 
 	void open() {
@@ -480,35 +480,35 @@ public:
 	}
 
 	void close() {
-		if (allpasses != NULL) {
+		if (allpasses != nullptr) {
 			for (Bit32u i = 0; i < currentSettings.numberOfAllpasses; i++) {
-				if (allpasses[i] != NULL) {
+				if (allpasses[i] != nullptr) {
 					delete allpasses[i];
-					allpasses[i] = NULL;
+					allpasses[i] = nullptr;
 				}
 			}
 			delete[] allpasses;
-			allpasses = NULL;
+			allpasses = nullptr;
 		}
-		if (combs != NULL) {
+		if (combs != nullptr) {
 			for (Bit32u i = 0; i < currentSettings.numberOfCombs; i++) {
-				if (combs[i] != NULL) {
+				if (combs[i] != nullptr) {
 					delete combs[i];
-					combs[i] = NULL;
+					combs[i] = nullptr;
 				}
 			}
 			delete[] combs;
-			combs = NULL;
+			combs = nullptr;
 		}
 	}
 
 	void mute() {
-		if (allpasses != NULL) {
+		if (allpasses != nullptr) {
 			for (Bit32u i = 0; i < currentSettings.numberOfAllpasses; i++) {
 				allpasses[i]->mute();
 			}
 		}
-		if (combs != NULL) {
+		if (combs != nullptr) {
 			for (Bit32u i = 0; i < currentSettings.numberOfCombs; i++) {
 				combs[i]->mute();
 			}
@@ -580,10 +580,10 @@ public:
 			if (tapDelayMode) {
 				TapDelayCombFilter<Sample> *comb = static_cast<TapDelayCombFilter<Sample> *>(*combs);
 				comb->process(dry);
-				if (outLeft != NULL) {
+				if (outLeft != nullptr) {
 					*(outLeft++) = weirdMul(comb->getLeftOutput(), wetLevel, 0xFF);
 				}
-				if (outRight != NULL) {
+				if (outRight != nullptr) {
 					*(outRight++) = weirdMul(comb->getRightOutput(), wetLevel, 0xFF);
 				}
 			} else {
@@ -605,13 +605,13 @@ public:
 				combs[2]->process(link);
 				combs[3]->process(link);
 
-				if (outLeft != NULL) {
+				if (outLeft != nullptr) {
 					Sample outL2 = combs[2]->getOutputAt(currentSettings.outLPositions[1]);
 					Sample outL3 = combs[3]->getOutputAt(currentSettings.outLPositions[2]);
 					Sample outSample = mixCombs(outL1, outL2, outL3);
 					*(outLeft++) = weirdMul(outSample, wetLevel, 0xFF);
 				}
-				if (outRight != NULL) {
+				if (outRight != nullptr) {
 					Sample outR1 = combs[1]->getOutputAt(currentSettings.outRPositions[0]);
 					Sample outR2 = combs[2]->getOutputAt(currentSettings.outRPositions[1]);
 					Sample outR3 = combs[3]->getOutputAt(currentSettings.outRPositions[2]);
@@ -636,7 +636,7 @@ BReverbModel *BReverbModel::createBReverbModel(const ReverbMode mode, const bool
 	default:
 		break;
 	}
-	return NULL;
+	return nullptr;
 }
 
 template <>
diff --git a/audio/softsynth/mt32/File.cpp b/audio/softsynth/mt32/File.cpp
index f316db4f75..0cc282921d 100644
--- a/audio/softsynth/mt32/File.cpp
+++ b/audio/softsynth/mt32/File.cpp
@@ -27,14 +27,14 @@ namespace MT32Emu {
 AbstractFile::AbstractFile() : sha1DigestCalculated(false) {
 	sha1Digest[0] = 0;
 
-	reserved = NULL;
+	reserved = nullptr;
 }
 
 AbstractFile::AbstractFile(const SHA1Digest &useSHA1Digest) : sha1DigestCalculated(true) {
 	memcpy(sha1Digest, useSHA1Digest, sizeof(SHA1Digest) - 1);
 	sha1Digest[sizeof(SHA1Digest) - 1] = 0; // Ensure terminator char.
 
-	reserved = NULL;
+	reserved = nullptr;
 }
 
 const File::SHA1Digest &AbstractFile::getSHA1() {
@@ -49,7 +49,7 @@ const File::SHA1Digest &AbstractFile::getSHA1() {
 	}
 
 	const Bit8u *data = getData();
-	if (data == NULL) {
+	if (data == nullptr) {
 		return sha1Digest;
 	}
 
diff --git a/audio/softsynth/mt32/FileStream.cpp b/audio/softsynth/mt32/FileStream.cpp
index 65e3c8a623..30f9d27cca 100644
--- a/audio/softsynth/mt32/FileStream.cpp
+++ b/audio/softsynth/mt32/FileStream.cpp
@@ -42,7 +42,7 @@ static inline void configureSystemLocale() {
 
 using std::ios_base;
 
-FileStream::FileStream() : ifsp(*new std::ifstream), data(NULL), size(0)
+FileStream::FileStream() : ifsp(*new std::ifstream), data(nullptr), size(0)
 {}
 
 FileStream::~FileStream() {
@@ -64,24 +64,24 @@ size_t FileStream::getSize() {
 }
 
 const Bit8u *FileStream::getData() {
-	if (data != NULL) {
+	if (data != nullptr) {
 		return data;
 	}
 	if (!ifsp.is_open()) {
-		return NULL;
+		return nullptr;
 	}
 	if (getSize() == 0) {
-		return NULL;
+		return nullptr;
 	}
 	Bit8u *fileData = new Bit8u[size];
-	if (fileData == NULL) {
-		return NULL;
+	if (fileData == nullptr) {
+		return nullptr;
 	}
 	ifsp.seekg(0);
 	ifsp.read(reinterpret_cast<char *>(fileData), std::streamsize(size));
 	if (size_t(ifsp.tellg()) != size) {
 		delete[] fileData;
-		return NULL;
+		return nullptr;
 	}
 	data = fileData;
 	close();
diff --git a/audio/softsynth/mt32/LA32FloatWaveGenerator.cpp b/audio/softsynth/mt32/LA32FloatWaveGenerator.cpp
index 16db1a922f..f02eca5fc6 100644
--- a/audio/softsynth/mt32/LA32FloatWaveGenerator.cpp
+++ b/audio/softsynth/mt32/LA32FloatWaveGenerator.cpp
@@ -49,7 +49,7 @@ void LA32FloatWaveGenerator::initSynth(const bool useSawtoothWaveform, const Bit
 	wavePos = 0.0f;
 	lastFreq = 0.0f;
 
-	pcmWaveAddress = NULL;
+	pcmWaveAddress = nullptr;
 	active = true;
 }
 
@@ -278,7 +278,7 @@ bool LA32FloatWaveGenerator::isActive() const {
 }
 
 bool LA32FloatWaveGenerator::isPCMWave() const {
-	return pcmWaveAddress != NULL;
+	return pcmWaveAddress != nullptr;
 }
 
 void LA32FloatPartialPair::init(const bool useRingModulated, const bool useMixed) {
diff --git a/audio/softsynth/mt32/LA32WaveGenerator.cpp b/audio/softsynth/mt32/LA32WaveGenerator.cpp
index 4c4eeab5a4..62f66f2a96 100644
--- a/audio/softsynth/mt32/LA32WaveGenerator.cpp
+++ b/audio/softsynth/mt32/LA32WaveGenerator.cpp
@@ -269,7 +269,7 @@ void LA32WaveGenerator::initSynth(const bool useSawtoothWaveform, const Bit8u us
 	resonanceAmpSubtraction = (32 - resonance) << 10;
 	resAmpDecayFactor = Tables::getInstance().resAmpDecayFactor[resonance >> 2] << 2;
 
-	pcmWaveAddress = NULL;
+	pcmWaveAddress = nullptr;
 	active = true;
 }
 
@@ -330,7 +330,7 @@ bool LA32WaveGenerator::isActive() const {
 }
 
 bool LA32WaveGenerator::isPCMWave() const {
-	return pcmWaveAddress != NULL;
+	return pcmWaveAddress != nullptr;
 }
 
 Bit32u LA32WaveGenerator::getPCMInterpolationFactor() const {
diff --git a/audio/softsynth/mt32/MidiStreamParser.cpp b/audio/softsynth/mt32/MidiStreamParser.cpp
index 2e6140b7d2..462474d914 100644
--- a/audio/softsynth/mt32/MidiStreamParser.cpp
+++ b/audio/softsynth/mt32/MidiStreamParser.cpp
@@ -80,7 +80,7 @@ MidiStreamParserImpl::MidiStreamParserImpl(MidiReceiver &useReceiver, MidiReport
 	streamBufferSize = 0;
 	runningStatus = 0;
 
-	reserved = NULL;
+	reserved = nullptr;
 }
 
 MidiStreamParserImpl::~MidiStreamParserImpl() {
diff --git a/audio/softsynth/mt32/Part.cpp b/audio/softsynth/mt32/Part.cpp
index ae55967c36..e0acb23329 100644
--- a/audio/softsynth/mt32/Part.cpp
+++ b/audio/softsynth/mt32/Part.cpp
@@ -52,7 +52,7 @@ Part::Part(Synth *useSynth, unsigned int usePartNum) {
 	patchTemp = &synth->mt32ram.patchTemp[partNum];
 	if (usePartNum == 8) {
 		// Nasty hack for rhythm
-		timbreTemp = NULL;
+		timbreTemp = nullptr;
 	} else {
 		sprintf(name, "Part %d", partNum + 1);
 		timbreTemp = &synth->mt32ram.timbreTemp[partNum];
@@ -235,7 +235,7 @@ void Part::backupCacheToPartials(PatchCache cache[4]) {
 	// if so then duplicate the cached data from the part to the partial so that
 	// we can change the part's cache without affecting the partial.
 	// We delay this until now to avoid a copy operation with every note played
-	for (Poly *poly = activePolys.getFirst(); poly != NULL; poly = poly->getNext()) {
+	for (Poly *poly = activePolys.getFirst(); poly != nullptr; poly = poly->getNext()) {
 		poly->backupCacheToPartials(cache);
 	}
 }
@@ -427,11 +427,11 @@ void Part::noteOn(unsigned int midiKey, unsigned int velocity) {
 	synth->printDebug(" PatchTemp: outputLevel %u, panpot %u", patchTemp->outputLevel, patchTemp->panpot);
 #endif
 #endif
-	playPoly(patchCache, NULL, midiKey, key, velocity);
+	playPoly(patchCache, nullptr, midiKey, key, velocity);
 }
 
 bool Part::abortFirstPoly(unsigned int key) {
-	for (Poly *poly = activePolys.getFirst(); poly != NULL; poly = poly->getNext()) {
+	for (Poly *poly = activePolys.getFirst(); poly != nullptr; poly = poly->getNext()) {
 		if (poly->getKey() == key) {
 			return poly->startAbort();
 		}
@@ -440,7 +440,7 @@ bool Part::abortFirstPoly(unsigned int key) {
 }
 
 bool Part::abortFirstPoly(PolyState polyState) {
-	for (Poly *poly = activePolys.getFirst(); poly != NULL; poly = poly->getNext()) {
+	for (Poly *poly = activePolys.getFirst(); poly != nullptr; poly = poly->getNext()) {
 		if (poly->getState() == polyState) {
 			return poly->startAbort();
 		}
@@ -486,7 +486,7 @@ void Part::playPoly(const PatchCache cache[4], const MemParams::RhythmTemp *rhyt
 	if (synth->isAbortingPoly()) return;
 
 	Poly *poly = synth->partialManager->assignPolyToPart(this);
-	if (poly == NULL) {
+	if (poly == nullptr) {
 		synth->printDebug("%s (%s): No free poly to play key %d (velocity %d)", name, currentInstr, midiKey, velocity);
 		return;
 	}
@@ -503,13 +503,13 @@ void Part::playPoly(const PatchCache cache[4], const MemParams::RhythmTemp *rhyt
 			partials[x] = synth->partialManager->allocPartial(partNum);
 			activePartialCount++;
 		} else {
-			partials[x] = NULL;
+			partials[x] = nullptr;
 		}
 	}
 	poly->reset(key, velocity, cache[0].sustain, partials);
 
 	for (int x = 0; x < 4; x++) {
-		if (partials[x] != NULL) {
+		if (partials[x] != nullptr) {
 #if MT32EMU_MONITOR_PARTIALS > 2
 			synth->printDebug("%s (%s): Allocated partial %d", name, currentInstr, partials[x]->debugGetPartialNum());
 #endif
@@ -525,7 +525,7 @@ void Part::playPoly(const PatchCache cache[4], const MemParams::RhythmTemp *rhyt
 void Part::allNotesOff() {
 	// The MIDI specification states - and Mok confirms - that all notes off (0x7B)
 	// should treat the hold pedal as usual.
-	for (Poly *poly = activePolys.getFirst(); poly != NULL; poly = poly->getNext()) {
+	for (Poly *poly = activePolys.getFirst(); poly != nullptr; poly = poly->getNext()) {
 		// FIXME: This has special handling of key 0 in NoteOff that Mok has not yet confirmed applies to AllNotesOff.
 		// if (poly->canSustain() || poly->getKey() == 0) {
 		// FIXME: The real devices are found to be ignoring non-sustaining polys while processing AllNotesOff. Need to be confirmed.
@@ -539,13 +539,13 @@ void Part::allSoundOff() {
 	// MIDI "All sound off" (0x78) should release notes immediately regardless of the hold pedal.
 	// This controller is not actually implemented by the synths, though (according to the docs and Mok) -
 	// we're only using this method internally.
-	for (Poly *poly = activePolys.getFirst(); poly != NULL; poly = poly->getNext()) {
+	for (Poly *poly = activePolys.getFirst(); poly != nullptr; poly = poly->getNext()) {
 		poly->startDecay();
 	}
 }
 
 void Part::stopPedalHold() {
-	for (Poly *poly = activePolys.getFirst(); poly != NULL; poly = poly->getNext()) {
+	for (Poly *poly = activePolys.getFirst(); poly != nullptr; poly = poly->getNext()) {
 		poly->stopPedalHold();
 	}
 }
@@ -563,7 +563,7 @@ void Part::stopNote(unsigned int key) {
 	synth->printDebug("%s (%s): stopping key %d", name, currentInstr, key);
 #endif
 
-	for (Poly *poly = activePolys.getFirst(); poly != NULL; poly = poly->getNext()) {
+	for (Poly *poly = activePolys.getFirst(); poly != nullptr; poly = poly->getNext()) {
 		// Generally, non-sustaining instruments ignore note off. They die away eventually anyway.
 		// Key 0 (only used by special cases on rhythm part) reacts to note off even if non-sustaining or pedal held.
 		if (poly->getKey() == key && (poly->canSustain() || key == 0)) {
@@ -588,7 +588,7 @@ const Poly *Part::getFirstActivePoly() const {
 
 unsigned int Part::getActiveNonReleasingPartialCount() const {
 	unsigned int activeNonReleasingPartialCount = 0;
-	for (Poly *poly = activePolys.getFirst(); poly != NULL; poly = poly->getNext()) {
+	for (Poly *poly = activePolys.getFirst(); poly != nullptr; poly = poly->getNext()) {
 		if (poly->getState() != POLY_Releasing) {
 			activeNonReleasingPartialCount += poly->getActivePartialCount();
 		}
@@ -609,7 +609,7 @@ void Part::partialDeactivated(Poly *poly) {
 	}
 }
 
-PolyList::PolyList() : firstPoly(NULL), lastPoly(NULL) {}
+PolyList::PolyList() : firstPoly(nullptr), lastPoly(nullptr) {}
 
 bool PolyList::isEmpty() const {
 #ifdef MT32EMU_POLY_LIST_DEBUG
@@ -617,7 +617,7 @@ bool PolyList::isEmpty() const {
 		printf("PolyList: desynchronised firstPoly & lastPoly pointers\n");
 	}
 #endif
-	return firstPoly == NULL && lastPoly == NULL;
+	return firstPoly == nullptr && lastPoly == nullptr;
 }
 
 Poly *PolyList::getFirst() const {
@@ -636,7 +636,7 @@ void PolyList::prepend(Poly *poly) {
 #endif
 	poly->setNext(firstPoly);
 	firstPoly = poly;
-	if (lastPoly == NULL) {
+	if (lastPoly == nullptr) {
 		lastPoly = poly;
 	}
 }
@@ -647,8 +647,8 @@ void PolyList::append(Poly *poly) {
 		printf("PolyList: Non-NULL next field in a Poly being appended is ignored\n");
 	}
 #endif
-	poly->setNext(NULL);
-	if (lastPoly != NULL) {
+	poly->setNext(nullptr);
+	if (lastPoly != nullptr) {
 #ifdef MT32EMU_POLY_LIST_DEBUG
 		if (lastPoly->getNext() != NULL) {
 			printf("PolyList: Non-NULL next field in the lastPoly\n");
@@ -657,7 +657,7 @@ void PolyList::append(Poly *poly) {
 		lastPoly->setNext(poly);
 	}
 	lastPoly = poly;
-	if (firstPoly == NULL) {
+	if (firstPoly == nullptr) {
 		firstPoly = poly;
 	}
 }
@@ -665,15 +665,15 @@ void PolyList::append(Poly *poly) {
 Poly *PolyList::takeFirst() {
 	Poly *oldFirst = firstPoly;
 	firstPoly = oldFirst->getNext();
-	if (firstPoly == NULL) {
+	if (firstPoly == nullptr) {
 #ifdef MT32EMU_POLY_LIST_DEBUG
 		if (lastPoly != oldFirst) {
 			printf("PolyList: firstPoly != lastPoly in a list with a single Poly\n");
 		}
 #endif
-		lastPoly = NULL;
+		lastPoly = nullptr;
 	}
-	oldFirst->setNext(NULL);
+	oldFirst->setNext(nullptr);
 	return oldFirst;
 }
 
@@ -682,7 +682,7 @@ void PolyList::remove(Poly * const polyToRemove) {
 		takeFirst();
 		return;
 	}
-	for (Poly *poly = firstPoly; poly != NULL; poly = poly->getNext()) {
+	for (Poly *poly = firstPoly; poly != nullptr; poly = poly->getNext()) {
 		if (poly->getNext() == polyToRemove) {
 			if (polyToRemove == lastPoly) {
 #ifdef MT32EMU_POLY_LIST_DEBUG
@@ -693,7 +693,7 @@ void PolyList::remove(Poly * const polyToRemove) {
 				lastPoly = poly;
 			}
 			poly->setNext(polyToRemove->getNext());
-			polyToRemove->setNext(NULL);
+			polyToRemove->setNext(nullptr);
 			break;
 		}
 	}
diff --git a/audio/softsynth/mt32/Partial.cpp b/audio/softsynth/mt32/Partial.cpp
index eb624207a0..364fea4aed 100644
--- a/audio/softsynth/mt32/Partial.cpp
+++ b/audio/softsynth/mt32/Partial.cpp
@@ -60,8 +60,8 @@ Partial::Partial(Synth *useSynth, int usePartialIndex) :
 	tvp = new TVP(this);
 	tvf = new TVF(this, &cutoffModifierRamp);
 	ownerPart = -1;
-	poly = NULL;
-	pair = NULL;
+	poly = nullptr;
+	pair = nullptr;
 	switch (synth->getSelectedRendererType()) {
 	case RendererType_BIT16S:
 		la32Pair = new LA32IntPartialPair;
@@ -70,7 +70,7 @@ Partial::Partial(Synth *useSynth, int usePartialIndex) :
 		la32Pair = new LA32FloatPartialPair;
 		break;
 	default:
-		la32Pair = NULL;
+		la32Pair = nullptr;
 	}
 }
 
@@ -114,7 +114,7 @@ void Partial::deactivate() {
 	}
 	ownerPart = -1;
 	synth->partialManager->partialDeactivated(partialIndex);
-	if (poly != NULL) {
+	if (poly != nullptr) {
 		poly->partialDeactivated(this);
 	}
 #if MT32EMU_MONITOR_PARTIALS > 2
@@ -127,17 +127,17 @@ void Partial::deactivate() {
 		la32Pair->deactivate(LA32PartialPair::MASTER);
 		if (hasRingModulatingSlave()) {
 			pair->deactivate();
-			pair = NULL;
+			pair = nullptr;
 		}
 	}
-	if (pair != NULL) {
-		pair->pair = NULL;
+	if (pair != nullptr) {
+		pair->pair = nullptr;
 	}
 }
 
 void Partial::startPartial(const Part *part, Poly *usePoly, const PatchCache *usePatchCache, const MemParams::RhythmTemp *rhythmTemp, Partial *pairPartial) {
-	if (usePoly == NULL || usePatchCache == NULL) {
-		synth->printDebug("[Partial %d] *** Error: Starting partial for owner %d, usePoly=%s, usePatchCache=%s", partialIndex, ownerPart, usePoly == NULL ? "*** NULL ***" : "OK", usePatchCache == NULL ? "*** NULL ***" : "OK");
+	if (usePoly == nullptr || usePatchCache == nullptr) {
+		synth->printDebug("[Partial %d] *** Error: Starting partial for owner %d, usePoly=%s, usePatchCache=%s", partialIndex, ownerPart, usePoly == nullptr ? "*** NULL ***" : "OK", usePatchCache == nullptr ? "*** NULL ***" : "OK");
 		return;
 	}
 	patchCache = usePatchCache;
@@ -145,7 +145,7 @@ void Partial::startPartial(const Part *part, Poly *usePoly, const PatchCache *us
 	mixType = patchCache->structureMix;
 	structurePosition = patchCache->structurePosition;
 
-	Bit8u panSetting = rhythmTemp != NULL ? rhythmTemp->panpot : part->getPatchTemp()->panpot;
+	Bit8u panSetting = rhythmTemp != nullptr ? rhythmTemp->panpot : part->getPatchTemp()->panpot;
 	if (mixType == 3) {
 		if (structurePosition == 0) {
 			panSetting = PAN_NUMERATOR_MASTER[panSetting] << 1;
@@ -154,7 +154,7 @@ void Partial::startPartial(const Part *part, Poly *usePoly, const PatchCache *us
 		}
 		// Do a normal mix independent of any pair partial.
 		mixType = 0;
-		pairPartial = NULL;
+		pairPartial = nullptr;
 	} else if (!synth->isNicePanningEnabled()) {
 		// Mok wanted an option for smoother panning, and we love Mok.
 		// CONFIRMED by Mok: exactly bytes like this (right shifted) are sent to the LA32.
@@ -197,7 +197,7 @@ void Partial::startPartial(const Part *part, Poly *usePoly, const PatchCache *us
 		}
 		pcmWave = &synth->pcmWaves[pcmNum];
 	} else {
-		pcmWave = NULL;
+		pcmWave = nullptr;
 	}
 
 	// CONFIRMED: pulseWidthVal calculation is based on information from Mok
@@ -264,26 +264,26 @@ Bit32u Partial::getCutoffValue() {
 }
 
 bool Partial::hasRingModulatingSlave() const {
-	return pair != NULL && structurePosition == 0 && (mixType == 1 || mixType == 2);
+	return pair != nullptr && structurePosition == 0 && (mixType == 1 || mixType == 2);
 }
 
 bool Partial::isRingModulatingSlave() const {
-	return pair != NULL && structurePosition == 1 && (mixType == 1 || mixType == 2);
+	return pair != nullptr && structurePosition == 1 && (mixType == 1 || mixType == 2);
 }
 
 bool Partial::isRingModulatingNoMix() const {
-	return pair != NULL && ((structurePosition == 1 && mixType == 1) || mixType == 2);
+	return pair != nullptr && ((structurePosition == 1 && mixType == 1) || mixType == 2);
 }
 
 bool Partial::isPCM() const {
-	return pcmWave != NULL;
+	return pcmWave != nullptr;
 }
 
 const ControlROMPCMStruct *Partial::getControlROMPCMStruct() const {
-	if (pcmWave != NULL) {
+	if (pcmWave != nullptr) {
 		return pcmWave->controlROMPCMStruct;
 	}
-	return NULL;
+	return nullptr;
 }
 
 Synth *Partial::getSynth() const {
@@ -305,7 +305,7 @@ bool Partial::canProduceOutput() {
 	if (!isActive() || alreadyOutputed || isRingModulatingSlave()) {
 		return false;
 	}
-	if (poly == NULL) {
+	if (poly == nullptr) {
 		synth->printDebug("[Partial %d] *** ERROR: poly is NULL at Partial::produceOutput()!", partialIndex);
 		return false;
 	}
diff --git a/audio/softsynth/mt32/PartialManager.cpp b/audio/softsynth/mt32/PartialManager.cpp
index 3af5b84cf7..8ff3ca0cf3 100644
--- a/audio/softsynth/mt32/PartialManager.cpp
+++ b/audio/softsynth/mt32/PartialManager.cpp
@@ -46,7 +46,7 @@ PartialManager::PartialManager(Synth *useSynth, Part **useParts) {
 PartialManager::~PartialManager(void) {
 	for (unsigned int i = 0; i < synth->getPartialCount(); i++) {
 		delete partialTable[i];
-		if (freePolys[i] != NULL) delete freePolys[i];
+		if (freePolys[i] != nullptr) delete freePolys[i];
 	}
 	delete[] partialTable;
 	delete[] inactivePartials;
@@ -97,7 +97,7 @@ Partial *PartialManager::allocPartial(int partNum) {
 		const Partial *partial = partialTable[i];
 		synth->printDebug("[Partial %d]: activation=%d, owner part=%d\n", i, partial->isActive(), partial->getOwnerPart());
 	}
-	return NULL;
+	return nullptr;
 }
 
 unsigned int PartialManager::getFreePartialCount() {
@@ -257,7 +257,7 @@ bool PartialManager::freePartials(unsigned int needed, int partNum) {
 
 const Partial *PartialManager::getPartial(unsigned int partialNum) const {
 	if (partialNum > synth->getPartialCount() - 1) {
-		return NULL;
+		return nullptr;
 	}
 	return partialTable[partialNum];
 }
@@ -265,12 +265,12 @@ const Partial *PartialManager::getPartial(unsigned int partialNum) const {
 Poly *PartialManager::assignPolyToPart(Part *part) {
 	if (firstFreePolyIndex < synth->getPartialCount()) {
 		Poly *poly = freePolys[firstFreePolyIndex];
-		freePolys[firstFreePolyIndex] = NULL;
+		freePolys[firstFreePolyIndex] = nullptr;
 		firstFreePolyIndex++;
 		poly->setPart(part);
 		return poly;
 	}
-	return NULL;
+	return nullptr;
 }
 
 void PartialManager::polyFreed(Poly *poly) {
@@ -279,7 +279,7 @@ void PartialManager::polyFreed(Poly *poly) {
 		for (Bit32u partNum = 0; partNum < 9; partNum++) {
 			const Poly *activePoly = synth->getPart(partNum)->getFirstActivePoly();
 			Bit32u polyCount = 0;
-			while (activePoly != NULL) {
+			while (activePoly != nullptr) {
 				activePoly = activePoly->getNext();
 				polyCount++;
 			}
@@ -289,7 +289,7 @@ void PartialManager::polyFreed(Poly *poly) {
 		firstFreePolyIndex--;
 		freePolys[firstFreePolyIndex] = poly;
 	}
-	poly->setPart(NULL);
+	poly->setPart(nullptr);
 }
 
 void PartialManager::partialDeactivated(int partialIndex) {
diff --git a/audio/softsynth/mt32/Poly.cpp b/audio/softsynth/mt32/Poly.cpp
index cc9aeda7bd..7d4876cd1c 100644
--- a/audio/softsynth/mt32/Poly.cpp
+++ b/audio/softsynth/mt32/Poly.cpp
@@ -27,16 +27,16 @@
 namespace MT32Emu {
 
 Poly::Poly() {
-	part = NULL;
+	part = nullptr;
 	key = 255;
 	velocity = 255;
 	sustain = false;
 	activePartialCount = 0;
 	for (int i = 0; i < 4; i++) {
-		partials[i] = NULL;
+		partials[i] = nullptr;
 	}
 	state = POLY_Inactive;
-	next = NULL;
+	next = nullptr;
 }
 
 void Poly::setPart(Part *usePart) {
@@ -48,7 +48,7 @@ void Poly::reset(unsigned int newKey, unsigned int newVelocity, bool newSustain,
 		// This should never happen
 		part->getSynth()->printDebug("Resetting active poly. Active partial count: %i\n", activePartialCount);
 		for (int i = 0; i < 4; i++) {
-			if (partials[i] != NULL && partials[i]->isActive()) {
+			if (partials[i] != nullptr && partials[i]->isActive()) {
 				partials[i]->deactivate();
 				activePartialCount--;
 			}
@@ -63,7 +63,7 @@ void Poly::reset(unsigned int newKey, unsigned int newVelocity, bool newSustain,
 	activePartialCount = 0;
 	for (int i = 0; i < 4; i++) {
 		partials[i] = newPartials[i];
-		if (newPartials[i] != NULL) {
+		if (newPartials[i] != nullptr) {
 			activePartialCount++;
 			state = POLY_Playing;
 		}
@@ -102,7 +102,7 @@ bool Poly::startDecay() {
 
 	for (int t = 0; t < 4; t++) {
 		Partial *partial = partials[t];
-		if (partial != NULL) {
+		if (partial != nullptr) {
 			partial->startDecayAll();
 		}
 	}
@@ -115,7 +115,7 @@ bool Poly::startAbort() {
 	}
 	for (int t = 0; t < 4; t++) {
 		Partial *partial = partials[t];
-		if (partial != NULL) {
+		if (partial != nullptr) {
 			partial->startAbort();
 			part->getSynth()->abortingPoly = this;
 		}
@@ -126,7 +126,7 @@ bool Poly::startAbort() {
 void Poly::backupCacheToPartials(PatchCache cache[4]) {
 	for (int partialNum = 0; partialNum < 4; partialNum++) {
 		Partial *partial = partials[partialNum];
-		if (partial != NULL) {
+		if (partial != nullptr) {
 			partial->backupCache(cache[partialNum]);
 		}
 	}
@@ -166,14 +166,14 @@ bool Poly::isActive() const {
 void Poly::partialDeactivated(Partial *partial) {
 	for (int i = 0; i < 4; i++) {
 		if (partials[i] == partial) {
-			partials[i] = NULL;
+			partials[i] = nullptr;
 			activePartialCount--;
 		}
 	}
 	if (activePartialCount == 0) {
 		state = POLY_Inactive;
 		if (part->getSynth()->abortingPoly == this) {
-			part->getSynth()->abortingPoly = NULL;
+			part->getSynth()->abortingPoly = nullptr;
 		}
 	}
 	part->partialDeactivated(this);
diff --git a/audio/softsynth/mt32/ROMInfo.cpp b/audio/softsynth/mt32/ROMInfo.cpp
index ab22883cbe..9a09dc9a1f 100644
--- a/audio/softsynth/mt32/ROMInfo.cpp
+++ b/audio/softsynth/mt32/ROMInfo.cpp
@@ -50,33 +50,33 @@ struct ROMInfoLists {
 #define _CALC_ARRAY_LENGTH(x) Bit32u(sizeof (x) / sizeof *(x) - 1)
 
 static const ROMInfoLists &getROMInfoLists() {
-	static ROMInfo CTRL_MT32_V1_04_A = {32768, "9cd4858014c4e8a9dff96053f784bfaac1092a2e", ROMInfo::Control, "ctrl_mt32_1_04_a", "MT-32 Control v1.04", ROMInfo::Mux0, NULL};
+	static ROMInfo CTRL_MT32_V1_04_A = {32768, "9cd4858014c4e8a9dff96053f784bfaac1092a2e", ROMInfo::Control, "ctrl_mt32_1_04_a", "MT-32 Control v1.04", ROMInfo::Mux0, nullptr};
 	static ROMInfo CTRL_MT32_V1_04_B = {32768, "fe8db469b5bfeb37edb269fd47e3ce6d91014652", ROMInfo::Control, "ctrl_mt32_1_04_b", "MT-32 Control v1.04", ROMInfo::Mux1, &CTRL_MT32_V1_04_A};
-	static ROMInfo CTRL_MT32_V1_04 = {65536, "5a5cb5a77d7d55ee69657c2f870416daed52dea7", ROMInfo::Control, "ctrl_mt32_1_04", "MT-32 Control v1.04", ROMInfo::Full, NULL};
-	static ROMInfo CTRL_MT32_V1_05_A = {32768, "57a09d80d2f7ca5b9734edbe9645e6e700f83701", ROMInfo::Control, "ctrl_mt32_1_05_a", "MT-32 Control v1.05", ROMInfo::Mux0, NULL};
+	static ROMInfo CTRL_MT32_V1_04 = {65536, "5a5cb5a77d7d55ee69657c2f870416daed52dea7", ROMInfo::Control, "ctrl_mt32_1_04", "MT-32 Control v1.04", ROMInfo::Full, nullptr};
+	static ROMInfo CTRL_MT32_V1_05_A = {32768, "57a09d80d2f7ca5b9734edbe9645e6e700f83701", ROMInfo::Control, "ctrl_mt32_1_05_a", "MT-32 Control v1.05", ROMInfo::Mux0, nullptr};
 	static ROMInfo CTRL_MT32_V1_05_B = {32768, "52e3c6666db9ef962591a8ee99be0cde17f3a6b6", ROMInfo::Control, "ctrl_mt32_1_05_b", "MT-32 Control v1.05", ROMInfo::Mux1, &CTRL_MT32_V1_05_A};
-	static ROMInfo CTRL_MT32_V1_05 = {65536, "e17a3a6d265bf1fa150312061134293d2b58288c", ROMInfo::Control, "ctrl_mt32_1_05", "MT-32 Control v1.05", ROMInfo::Full, NULL};
-	static ROMInfo CTRL_MT32_V1_06_A = {32768, "cc83bf23cee533097fb4c7e2c116e43b50ebacc8", ROMInfo::Control, "ctrl_mt32_1_06_a", "MT-32 Control v1.06", ROMInfo::Mux0, NULL};
+	static ROMInfo CTRL_MT32_V1_05 = {65536, "e17a3a6d265bf1fa150312061134293d2b58288c", ROMInfo::Control, "ctrl_mt32_1_05", "MT-32 Control v1.05", ROMInfo::Full, nullptr};
+	static ROMInfo CTRL_MT32_V1_06_A = {32768, "cc83bf23cee533097fb4c7e2c116e43b50ebacc8", ROMInfo::Control, "ctrl_mt32_1_06_a", "MT-32 Control v1.06", ROMInfo::Mux0, nullptr};
 	static ROMInfo CTRL_MT32_V1_06_B = {32768, "bf4f15666bc46679579498386704893b630c1171", ROMInfo::Control, "ctrl_mt32_1_06_b", "MT-32 Control v1.06", ROMInfo::Mux1, &CTRL_MT32_V1_06_A};
-	static ROMInfo CTRL_MT32_V1_06 = {65536, "a553481f4e2794c10cfe597fef154eef0d8257de", ROMInfo::Control, "ctrl_mt32_1_06", "MT-32 Control v1.06", ROMInfo::Full, NULL};
-	static ROMInfo CTRL_MT32_V1_07_A = {32768, "13f06b38f0d9e0fc050b6503ab777bb938603260", ROMInfo::Control, "ctrl_mt32_1_07_a", "MT-32 Control v1.07", ROMInfo::Mux0, NULL};
+	static ROMInfo CTRL_MT32_V1_06 = {65536, "a553481f4e2794c10cfe597fef154eef0d8257de", ROMInfo::Control, "ctrl_mt32_1_06", "MT-32 Control v1.06", ROMInfo::Full, nullptr};
+	static ROMInfo CTRL_MT32_V1_07_A = {32768, "13f06b38f0d9e0fc050b6503ab777bb938603260", ROMInfo::Control, "ctrl_mt32_1_07_a", "MT-32 Control v1.07", ROMInfo::Mux0, nullptr};
 	static ROMInfo CTRL_MT32_V1_07_B = {32768, "c55e165487d71fa88bd8c5e9c083bc456c1a89aa", ROMInfo::Control, "ctrl_mt32_1_07_b", "MT-32 Control v1.07", ROMInfo::Mux1, &CTRL_MT32_V1_07_A};
-	static ROMInfo CTRL_MT32_V1_07 = {65536, "b083518fffb7f66b03c23b7eb4f868e62dc5a987", ROMInfo::Control, "ctrl_mt32_1_07", "MT-32 Control v1.07", ROMInfo::Full, NULL};
-	static ROMInfo CTRL_MT32_BLUER_A = {32768, "11a6ae5d8b6ee328b371af7f1e40b82125aa6b4d", ROMInfo::Control, "ctrl_mt32_bluer_a", "MT-32 Control BlueRidge", ROMInfo::Mux0, NULL};
+	static ROMInfo CTRL_MT32_V1_07 = {65536, "b083518fffb7f66b03c23b7eb4f868e62dc5a987", ROMInfo::Control, "ctrl_mt32_1_07", "MT-32 Control v1.07", ROMInfo::Full, nullptr};
+	static ROMInfo CTRL_MT32_BLUER_A = {32768, "11a6ae5d8b6ee328b371af7f1e40b82125aa6b4d", ROMInfo::Control, "ctrl_mt32_bluer_a", "MT-32 Control BlueRidge", ROMInfo::Mux0, nullptr};
 	static ROMInfo CTRL_MT32_BLUER_B = {32768, "e0934320d7cbb5edfaa29e0d01ae835ef620085b", ROMInfo::Control, "ctrl_mt32_bluer_b", "MT-32 Control BlueRidge", ROMInfo::Mux1, &CTRL_MT32_BLUER_A};
-	static ROMInfo CTRL_MT32_BLUER = {65536, "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92", ROMInfo::Control, "ctrl_mt32_bluer", "MT-32 Control BlueRidge", ROMInfo::Full, NULL};
+	static ROMInfo CTRL_MT32_BLUER = {65536, "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92", ROMInfo::Control, "ctrl_mt32_bluer", "MT-32 Control BlueRidge", ROMInfo::Full, nullptr};
 
-	static const ROMInfo CTRL_MT32_V2_04 = {131072, "2c16432b6c73dd2a3947cba950a0f4c19d6180eb", ROMInfo::Control, "ctrl_mt32_2_04", "MT-32 Control v2.04", ROMInfo::Full, NULL};
-	static const ROMInfo CTRL_CM32L_V1_00 = {65536, "73683d585cd6948cc19547942ca0e14a0319456d", ROMInfo::Control, "ctrl_cm32l_1_00", "CM-32L/LAPC-I Control v1.00", ROMInfo::Full, NULL};
-	static const ROMInfo CTRL_CM32L_V1_02 = {65536, "a439fbb390da38cada95a7cbb1d6ca199cd66ef8", ROMInfo::Control, "ctrl_cm32l_1_02", "CM-32L/LAPC-I Control v1.02", ROMInfo::Full, NULL};
+	static const ROMInfo CTRL_MT32_V2_04 = {131072, "2c16432b6c73dd2a3947cba950a0f4c19d6180eb", ROMInfo::Control, "ctrl_mt32_2_04", "MT-32 Control v2.04", ROMInfo::Full, nullptr};
+	static const ROMInfo CTRL_CM32L_V1_00 = {65536, "73683d585cd6948cc19547942ca0e14a0319456d", ROMInfo::Control, "ctrl_cm32l_1_00", "CM-32L/LAPC-I Control v1.00", ROMInfo::Full, nullptr};
+	static const ROMInfo CTRL_CM32L_V1_02 = {65536, "a439fbb390da38cada95a7cbb1d6ca199cd66ef8", ROMInfo::Control, "ctrl_cm32l_1_02", "CM-32L/LAPC-I Control v1.02", ROMInfo::Full, nullptr};
 
-	static ROMInfo PCM_MT32_L = {262144, "3a1e19b0cd4036623fd1d1d11f5f25995585962b", ROMInfo::PCM, "pcm_mt32_l", "MT-32 PCM ROM", ROMInfo::FirstHalf, NULL};
+	static ROMInfo PCM_MT32_L = {262144, "3a1e19b0cd4036623fd1d1d11f5f25995585962b", ROMInfo::PCM, "pcm_mt32_l", "MT-32 PCM ROM", ROMInfo::FirstHalf, nullptr};
 	static ROMInfo PCM_MT32_H = {262144, "2cadb99d21a6a4a6f5b61b6218d16e9b43f61d01", ROMInfo::PCM, "pcm_mt32_h", "MT-32 PCM ROM", ROMInfo::SecondHalf, &PCM_MT32_L};
-	static ROMInfo PCM_MT32 = {524288, "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252", ROMInfo::PCM, "pcm_mt32", "MT-32 PCM ROM", ROMInfo::Full, NULL};
+	static ROMInfo PCM_MT32 = {524288, "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252", ROMInfo::PCM, "pcm_mt32", "MT-32 PCM ROM", ROMInfo::Full, nullptr};
 	// Alias of PCM_MT32 ROM, only useful for pairing with PCM_CM32L_H.
-	static ROMInfo PCM_CM32L_L = {524288, "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252", ROMInfo::PCM, "pcm_cm32l_l", "CM-32L/CM-64/LAPC-I PCM ROM", ROMInfo::FirstHalf, NULL};
+	static ROMInfo PCM_CM32L_L = {524288, "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252", ROMInfo::PCM, "pcm_cm32l_l", "CM-32L/CM-64/LAPC-I PCM ROM", ROMInfo::FirstHalf, nullptr};
 	static ROMInfo PCM_CM32L_H = {524288, "3ad889fde5db5b6437cbc2eb6e305312fec3df93", ROMInfo::PCM, "pcm_cm32l_h", "CM-32L/CM-64/LAPC-I PCM ROM", ROMInfo::SecondHalf, &PCM_CM32L_L};
-	static ROMInfo PCM_CM32L = {1048576, "289cc298ad532b702461bfc738009d9ebe8025ea", ROMInfo::PCM, "pcm_cm32l", "CM-32L/CM-64/LAPC-I PCM ROM", ROMInfo::Full, NULL};
+	static ROMInfo PCM_CM32L = {1048576, "289cc298ad532b702461bfc738009d9ebe8025ea", ROMInfo::PCM, "pcm_cm32l", "CM-32L/CM-64/LAPC-I PCM ROM", ROMInfo::Full, nullptr};
 
 	static const ROMInfo * const FULL_ROM_INFOS[] = {
 		&CTRL_MT32_V1_04,
@@ -89,7 +89,7 @@ static const ROMInfoLists &getROMInfoLists() {
 		&CTRL_CM32L_V1_02,
 		&PCM_MT32,
 		&PCM_CM32L,
-		NULL
+		nullptr
 	};
 	static const ROMInfo * const PARTIAL_ROM_INFOS[] = {
 		&CTRL_MT32_V1_04_A, &CTRL_MT32_V1_04_B,
@@ -99,11 +99,11 @@ static const ROMInfoLists &getROMInfoLists() {
 		&CTRL_MT32_BLUER_A, &CTRL_MT32_BLUER_B,
 		&PCM_MT32_L, &PCM_MT32_H,
 		&PCM_CM32L_L, &PCM_CM32L_H,
-		NULL
+		nullptr
 	};
 	static const ROMInfo *ALL_ROM_INFOS[_CALC_ARRAY_LENGTH(FULL_ROM_INFOS) + _CALC_ARRAY_LENGTH(PARTIAL_ROM_INFOS) + 1];
 
-	if (CTRL_MT32_V1_04_A.pairROMInfo == NULL) {
+	if (CTRL_MT32_V1_04_A.pairROMInfo == nullptr) {
 		CTRL_MT32_V1_04_A.pairROMInfo = &CTRL_MT32_V1_04_B;
 		CTRL_MT32_V1_05_A.pairROMInfo = &CTRL_MT32_V1_05_B;
 		CTRL_MT32_V1_06_A.pairROMInfo = &CTRL_MT32_V1_06_B;
@@ -116,14 +116,14 @@ static const ROMInfoLists &getROMInfoLists() {
 		memcpy(&ALL_ROM_INFOS[_CALC_ARRAY_LENGTH(FULL_ROM_INFOS)], PARTIAL_ROM_INFOS, sizeof PARTIAL_ROM_INFOS); // Includes NULL terminator.
 	}
 
-	static const ROMInfo * const MT32_V1_04_ROMS[] = {&CTRL_MT32_V1_04, &PCM_MT32, &CTRL_MT32_V1_04_A, &CTRL_MT32_V1_04_B, &PCM_MT32_L, &PCM_MT32_H, NULL};
-	static const ROMInfo * const MT32_V1_05_ROMS[] = {&CTRL_MT32_V1_05, &PCM_MT32, &CTRL_MT32_V1_05_A, &CTRL_MT32_V1_05_B, &PCM_MT32_L, &PCM_MT32_H, NULL};
-	static const ROMInfo * const MT32_V1_06_ROMS[] = {&CTRL_MT32_V1_06, &PCM_MT32, &CTRL_MT32_V1_06_A, &CTRL_MT32_V1_06_B, &PCM_MT32_L, &PCM_MT32_H, NULL};
-	static const ROMInfo * const MT32_V1_07_ROMS[] = {&CTRL_MT32_V1_07, &PCM_MT32, &CTRL_MT32_V1_07_A, &CTRL_MT32_V1_07_B, &PCM_MT32_L, &PCM_MT32_H, NULL};
-	static const ROMInfo * const MT32_BLUER_ROMS[] = {&CTRL_MT32_BLUER, &PCM_MT32, &CTRL_MT32_BLUER_A, &CTRL_MT32_BLUER_B, &PCM_MT32_L, &PCM_MT32_H, NULL};
-	static const ROMInfo * const MT32_V2_04_ROMS[] = {&CTRL_MT32_V2_04, &PCM_MT32, &PCM_MT32_L, &PCM_MT32_H, NULL};
-	static const ROMInfo * const CM32L_V1_00_ROMS[] = {&CTRL_CM32L_V1_00, &PCM_CM32L, &PCM_CM32L_L, &PCM_CM32L_H, NULL};
-	static const ROMInfo * const CM32L_V1_02_ROMS[] = {&CTRL_CM32L_V1_02, &PCM_CM32L, &PCM_CM32L_L, &PCM_CM32L_H, NULL};
+	static const ROMInfo * const MT32_V1_04_ROMS[] = {&CTRL_MT32_V1_04, &PCM_MT32, &CTRL_MT32_V1_04_A, &CTRL_MT32_V1_04_B, &PCM_MT32_L, &PCM_MT32_H, nullptr};
+	static const ROMInfo * const MT32_V1_05_ROMS[] = {&CTRL_MT32_V1_05, &PCM_MT32, &CTRL_MT32_V1_05_A, &CTRL_MT32_V1_05_B, &PCM_MT32_L, &PCM_MT32_H, nullptr};
+	static const ROMInfo * const MT32_V1_06_ROMS[] = {&CTRL_MT32_V1_06, &PCM_MT32, &CTRL_MT32_V1_06_A, &CTRL_MT32_V1_06_B, &PCM_MT32_L, &PCM_MT32_H, nullptr};
+	static const ROMInfo * const MT32_V1_07_ROMS[] = {&CTRL_MT32_V1_07, &PCM_MT32, &CTRL_MT32_V1_07_A, &CTRL_MT32_V1_07_B, &PCM_MT32_L, &PCM_MT32_H, nullptr};
+	static const ROMInfo * const MT32_BLUER_ROMS[] = {&CTRL_MT32_BLUER, &PCM_MT32, &CTRL_MT32_BLUER_A, &CTRL_MT32_BLUER_B, &PCM_MT32_L, &PCM_MT32_H, nullptr};
+	static const ROMInfo * const MT32_V2_04_ROMS[] = {&CTRL_MT32_V2_04, &PCM_MT32, &PCM_MT32_L, &PCM_MT32_H, nullptr};
+	static const ROMInfo * const CM32L_V1_00_ROMS[] = {&CTRL_CM32L_V1_00, &PCM_CM32L, &PCM_CM32L_L, &PCM_CM32L_H, nullptr};
+	static const ROMInfo * const CM32L_V1_02_ROMS[] = {&CTRL_CM32L_V1_02, &PCM_CM32L, &PCM_CM32L_L, &PCM_CM32L_H, nullptr};
 
 	static const ROMInfoLists romInfoLists = {
 		{MT32_V1_04_ROMS, _CALC_ARRAY_LENGTH(MT32_V1_04_ROMS)},
@@ -155,13 +155,13 @@ const ROMInfo *ROMInfo::getROMInfo(File *file) {
 
 const ROMInfo *ROMInfo::getROMInfo(File *file, const ROMInfo * const *romInfos) {
 	size_t fileSize = file->getSize();
-	for (Bit32u i = 0; romInfos[i] != NULL; i++) {
+	for (Bit32u i = 0; romInfos[i] != nullptr; i++) {
 		const ROMInfo *romInfo = romInfos[i];
 		if (fileSize == romInfo->fileSize && !strcmp(file->getSHA1(), romInfo->sha1Digest)) {
 			return romInfo;
 		}
 	}
-	return NULL;
+	return nullptr;
 }
 
 void ROMInfo::freeROMInfo(const ROMInfo *romInfo) {
@@ -178,7 +178,7 @@ const ROMInfo **ROMInfo::getROMInfoList(Bit32u types, Bit32u pairTypes) {
 			*currentROMInList++ = romInfo;
 		}
 	}
-	*currentROMInList = NULL;
+	*currentROMInList = nullptr;
 	return romInfoList;
 }
 
@@ -187,17 +187,17 @@ void ROMInfo::freeROMInfoList(const ROMInfo **romInfoList) {
 }
 
 const ROMInfo * const *ROMInfo::getAllROMInfos(Bit32u *itemCount) {
-	if (itemCount != NULL) *itemCount = getROMInfoLists().allROMInfos.itemCount;
+	if (itemCount != nullptr) *itemCount = getROMInfoLists().allROMInfos.itemCount;
 	return getROMInfoLists().allROMInfos.romInfos;
 }
 
 const ROMInfo * const *ROMInfo::getFullROMInfos(Bit32u *itemCount) {
-	if (itemCount != NULL) *itemCount = getROMInfoLists().fullROMInfos.itemCount;
+	if (itemCount != nullptr) *itemCount = getROMInfoLists().fullROMInfos.itemCount;
 	return getROMInfoLists().fullROMInfos.romInfos;
 }
 
 const ROMInfo * const *ROMInfo::getPartialROMInfos(Bit32u *itemCount) {
-	if (itemCount != NULL) *itemCount = getROMInfoLists().partialROMInfos.itemCount;
+	if (itemCount != nullptr) *itemCount = getROMInfoLists().partialROMInfos.itemCount;
 	return getROMInfoLists().partialROMInfos.romInfos;
 }
 
@@ -213,9 +213,9 @@ const ROMImage *ROMImage::appendImages(const ROMImage *romImageLow, const ROMIma
 	memcpy(data, romDataLow, partSize);
 	memcpy(data + partSize, romDataHigh, partSize);
 	const ROMImage *romImageFull = makeFullROMImage(data, 2 * partSize);
-	if (romImageFull->getROMInfo() == NULL) {
+	if (romImageFull->getROMInfo() == nullptr) {
 		freeROMImage(romImageFull);
-		return NULL;
+		return nullptr;
 	}
 	return romImageFull;
 }
@@ -231,9 +231,9 @@ const ROMImage *ROMImage::interleaveImages(const ROMImage *romImageEven, const R
 		*(writePtr++) = romDataOdd[romDataIx];
 	}
 	const ROMImage *romImageFull = makeFullROMImage(data, 2 * partSize);
-	if (romImageFull->getROMInfo() == NULL) {
+	if (romImageFull->getROMInfo() == nullptr) {
 		freeROMImage(romImageFull);
-		return NULL;
+		return nullptr;
 	}
 	return romImageFull;
 }
@@ -263,7 +263,7 @@ const ROMImage *ROMImage::makeROMImage(File *file1, File *file2) {
 	const ROMInfo * const *partialROMInfos = getROMInfoLists().partialROMInfos.romInfos;
 	const ROMImage *image1 = makeROMImage(file1, partialROMInfos);
 	const ROMImage *image2 = makeROMImage(file2, partialROMInfos);
-	const ROMImage *fullImage = image1->getROMInfo() == NULL || image2->getROMInfo() == NULL ? NULL : mergeROMImages(image1, image2);
+	const ROMImage *fullImage = image1->getROMInfo() == nullptr || image2->getROMInfo() == nullptr ? nullptr : mergeROMImages(image1, image2);
 	freeROMImage(image1);
 	freeROMImage(image2);
 	return fullImage;
@@ -275,7 +275,7 @@ void ROMImage::freeROMImage(const ROMImage *romImage) {
 
 const ROMImage *ROMImage::mergeROMImages(const ROMImage *romImage1, const ROMImage *romImage2) {
 	if (romImage1->romInfo->pairROMInfo != romImage2->romInfo) {
-		return NULL;
+		return nullptr;
 	}
 	switch (romImage1->romInfo->pairType) {
 	case ROMInfo::FirstHalf:
@@ -289,7 +289,7 @@ const ROMImage *ROMImage::mergeROMImages(const ROMImage *romImage1, const ROMIma
 	default:
 		break;
 	}
-	return NULL;
+	return nullptr;
 }
 
 File *ROMImage::getFile() const {
@@ -315,10 +315,10 @@ const MachineConfiguration * const *MachineConfiguration::getAllMachineConfigura
 	static const MachineConfiguration CM32L_1_00 = MachineConfiguration("cm32l_1_00", romInfoLists.cm32l_1_00.romInfos, romInfoLists.cm32l_1_00.itemCount);
 	static const MachineConfiguration CM32L_1_02 = MachineConfiguration("cm32l_1_02", romInfoLists.cm32l_1_02.romInfos, romInfoLists.cm32l_1_02.itemCount);
 	static const MachineConfiguration * const MACHINE_CONFIGURATIONS[] = {
-		&MT32_1_04, &MT32_1_05, &MT32_1_06, &MT32_1_07, &MT32_BLUER, &MT32_2_04, &CM32L_1_00, &CM32L_1_02, NULL
+		&MT32_1_04, &MT32_1_05, &MT32_1_06, &MT32_1_07, &MT32_BLUER, &MT32_2_04, &CM32L_1_00, &CM32L_1_02, nullptr
 	};
 
-	if (itemCount != NULL) *itemCount = _CALC_ARRAY_LENGTH(MACHINE_CONFIGURATIONS);
+	if (itemCount != nullptr) *itemCount = _CALC_ARRAY_LENGTH(MACHINE_CONFIGURATIONS);
 	return MACHINE_CONFIGURATIONS;
 }
 
@@ -331,7 +331,7 @@ const char *MachineConfiguration::getMachineID() const {
 }
 
 const ROMInfo * const *MachineConfiguration::getCompatibleROMInfos(Bit32u *itemCount) const {
-	if (itemCount != NULL) *itemCount = romInfosCount;
+	if (itemCount != nullptr) *itemCount = romInfosCount;
 	return romInfos;
 }
 
diff --git a/audio/softsynth/mt32/SampleRateConverter.cpp b/audio/softsynth/mt32/SampleRateConverter.cpp
index 16fa2a4e5c..aec13263a3 100644
--- a/audio/softsynth/mt32/SampleRateConverter.cpp
+++ b/audio/softsynth/mt32/SampleRateConverter.cpp
@@ -39,7 +39,7 @@ static inline void *createDelegate(Synth &synth, double targetSampleRate, Sample
 	return new InternalResampler(synth, targetSampleRate, quality);
 #else
 	(void)synth, (void)targetSampleRate, (void)quality;
-	return NULL;
+	return nullptr;
 #endif
 }
 
diff --git a/audio/softsynth/mt32/Synth.cpp b/audio/softsynth/mt32/Synth.cpp
index 28a38cd7ea..18da46c08e 100644
--- a/audio/softsynth/mt32/Synth.cpp
+++ b/audio/softsynth/mt32/Synth.cpp
@@ -90,7 +90,7 @@ static inline PartialState getPartialState(PartialManager *partialManager, unsig
 
 template <class I, class O>
 static inline void convertSampleFormat(const I *inBuffer, O *outBuffer, const Bit32u len) {
-	if (inBuffer == NULL || outBuffer == NULL) return;
+	if (inBuffer == nullptr || outBuffer == nullptr) return;
 
 	const I *inBufferEnd = inBuffer + len;
 	while (inBuffer < inBufferEnd) {
@@ -241,10 +241,10 @@ Synth::Synth(ReportHandler *useReportHandler) :
 	opened = false;
 	reverbOverridden = false;
 	partialCount = DEFAULT_MAX_PARTIALS;
-	controlROMMap = NULL;
-	controlROMFeatures = NULL;
+	controlROMMap = nullptr;
+	controlROMFeatures = nullptr;
 
-	if (useReportHandler == NULL) {
+	if (useReportHandler == nullptr) {
 		reportHandler = new ReportHandler;
 		isDefaultReportHandler = true;
 	} else {
@@ -254,11 +254,11 @@ Synth::Synth(ReportHandler *useReportHandler) :
 
 	extensions.preallocatedReverbMemory = false;
 	for (int i = REVERB_MODE_ROOM; i <= REVERB_MODE_TAP_DELAY; i++) {
-		reverbModels[i] = NULL;
+		reverbModels[i] = nullptr;
 	}
-	reverbModel = NULL;
-	analog = NULL;
-	renderer = NULL;
+	reverbModel = nullptr;
+	analog = nullptr;
+	renderer = nullptr;
 	setDACInputMode(DACInputMode_NICE);
 	setMIDIDelayMode(MIDIDelayMode_DELAY_SHORT_MESSAGES_ONLY);
 	setOutputGain(1.0f);
@@ -269,21 +269,21 @@ Synth::Synth(ReportHandler *useReportHandler) :
 	setNicePartialMixingEnabled(false);
 	selectRendererType(RendererType_BIT16S);
 
-	patchTempMemoryRegion = NULL;
-	rhythmTempMemoryRegion = NULL;
-	timbreTempMemoryRegion = NULL;
-	patchesMemoryRegion = NULL;
-	timbresMemoryRegion = NULL;
-	systemMemoryRegion = NULL;
-	displayMemoryRegion = NULL;
-	resetMemoryRegion = NULL;
-	paddedTimbreMaxTable = NULL;
-
-	partialManager = NULL;
-	pcmWaves = NULL;
-	pcmROMData = NULL;
-	soundGroupNames = NULL;
-	midiQueue = NULL;
+	patchTempMemoryRegion = nullptr;
+	rhythmTempMemoryRegion = nullptr;
+	timbreTempMemoryRegion = nullptr;
+	patchesMemoryRegion = nullptr;
+	timbresMemoryRegion = nullptr;
+	systemMemoryRegion = nullptr;
+	displayMemoryRegion = nullptr;
+	resetMemoryRegion = nullptr;
+	paddedTimbreMaxTable = nullptr;
+
+	partialManager = nullptr;
+	pcmWaves = nullptr;
+	pcmROMData = nullptr;
+	soundGroupNames = nullptr;
+	midiQueue = nullptr;
 	extensions.midiEventQueueSize = DEFAULT_MIDI_EVENT_QUEUE_SIZE;
 	extensions.midiEventQueueSysexStorageBufferSize = 0;
 	lastReceivedMIDIEventTimestamp = 0;
@@ -326,7 +326,7 @@ void Synth::newTimbreSet(Bit8u partNum, Bit8u timbreGroup, Bit8u timbreNumber, c
 		soundGroupName = soundGroupNames[controlROMMap->soundGroupsCount - 1];
 		break;
 	default:
-		soundGroupName = NULL;
+		soundGroupName = nullptr;
 		break;
 	}
 	reportHandler->onProgramChanged(partNum, soundGroupName, patchName);
@@ -365,12 +365,12 @@ void Synth::setReverbEnabled(bool newReverbEnabled) {
 		if (!extensions.preallocatedReverbMemory) {
 			reverbModel->close();
 		}
-		reverbModel = NULL;
+		reverbModel = nullptr;
 	}
 }
 
 bool Synth::isReverbEnabled() const {
-	return reverbModel != NULL;
+	return reverbModel != nullptr;
 }
 
 void Synth::setReverbOverridden(bool newReverbOverridden) {
@@ -433,7 +433,7 @@ MIDIDelayMode Synth::getMIDIDelayMode() const {
 void Synth::setOutputGain(float newOutputGain) {
 	if (newOutputGain < 0.0f) newOutputGain = -newOutputGain;
 	outputGain = newOutputGain;
-	if (analog != NULL) analog->setSynthOutputGain(newOutputGain);
+	if (analog != nullptr) analog->setSynthOutputGain(newOutputGain);
 }
 
 float Synth::getOutputGain() const {
@@ -443,7 +443,7 @@ float Synth::getOutputGain() const {
 void Synth::setReverbOutputGain(float newReverbOutputGain) {
 	if (newReverbOutputGain < 0.0f) newReverbOutputGain = -newReverbOutputGain;
 	reverbOutputGain = newReverbOutputGain;
-	if (analog != NULL) analog->setReverbOutputGain(newReverbOutputGain, isMT32ReverbCompatibilityMode());
+	if (analog != nullptr) analog->setReverbOutputGain(newReverbOutputGain, isMT32ReverbCompatibilityMode());
 }
 
 float Synth::getReverbOutputGain() const {
@@ -485,7 +485,7 @@ bool Synth::isNicePartialMixingEnabled() const {
 bool Synth::loadControlROM(const ROMImage &controlROMImage) {
 	File *file = controlROMImage.getFile();
 	const ROMInfo *controlROMInfo = controlROMImage.getROMInfo();
-	if ((controlROMInfo == NULL)
+	if ((controlROMInfo == nullptr)
 			|| (controlROMInfo->type != ROMInfo::Control)
 			|| (controlROMInfo->pairType != ROMInfo::Full)) {
 #if MT32EMU_MONITOR_INIT
@@ -501,8 +501,8 @@ bool Synth::loadControlROM(const ROMImage &controlROMImage) {
 	memcpy(controlROMData, fileData, CONTROL_ROM_SIZE);
 
 	// Control ROM successfully loaded, now check whether it's a known type
-	controlROMMap = NULL;
-	controlROMFeatures = NULL;
+	controlROMMap = nullptr;
+	controlROMFeatures = nullptr;
 	for (unsigned int i = 0; i < sizeof(ControlROMMaps) / sizeof(ControlROMMaps[0]); i++) {
 		if (strcmp(controlROMInfo->shortName, ControlROMMaps[i].shortName) == 0) {
 			controlROMMap = &ControlROMMaps[i];
@@ -519,7 +519,7 @@ bool Synth::loadControlROM(const ROMImage &controlROMImage) {
 bool Synth::loadPCMROM(const ROMImage &pcmROMImage) {
 	File *file = pcmROMImage.getFile();
 	const ROMInfo *pcmROMInfo = pcmROMImage.getROMInfo();
-	if ((pcmROMInfo == NULL)
+	if ((pcmROMInfo == nullptr)
 			|| (pcmROMInfo->type != ROMInfo::PCM)
 			|| (pcmROMInfo->pairType != ROMInfo::Full)) {
 		return false;
@@ -650,7 +650,7 @@ bool Synth::open(const ROMImage &controlROMImage, const ROMImage &pcmROMImage, B
 		return false;
 	}
 	partialCount = usePartialCount;
-	abortingPoly = NULL;
+	abortingPoly = nullptr;
 	extensions.abortingPartIx = 0;
 
 	// This is to help detect bugs
@@ -851,40 +851,40 @@ void Synth::dispose() {
 	opened = false;
 
 	delete midiQueue;
-	midiQueue = NULL;
+	midiQueue = nullptr;
 
 	delete renderer;
-	renderer = NULL;
+	renderer = nullptr;
 
 	delete analog;
-	analog = NULL;
+	analog = nullptr;
 
 	delete partialManager;
-	partialManager = NULL;
+	partialManager = nullptr;
 
 	for (int i = 0; i < 9; i++) {
 		delete parts[i];
-		parts[i] = NULL;
+		parts[i] = nullptr;
 	}
 
 	delete[] soundGroupNames;
-	soundGroupNames = NULL;
+	soundGroupNames = nullptr;
 
 	delete[] pcmWaves;
-	pcmWaves = NULL;
+	pcmWaves = nullptr;
 
 	delete[] pcmROMData;
-	pcmROMData = NULL;
+	pcmROMData = nullptr;
 
 	deleteMemoryRegions();
 
 	for (int i = REVERB_MODE_ROOM; i <= REVERB_MODE_TAP_DELAY; i++) {
 		delete reverbModels[i];
-		reverbModels[i] = NULL;
+		reverbModels[i] = nullptr;
 	}
-	reverbModel = NULL;
-	controlROMFeatures = NULL;
-	controlROMMap = NULL;
+	reverbModel = nullptr;
+	controlROMFeatures = nullptr;
+	controlROMMap = nullptr;
 }
 
 void Synth::close() {
@@ -898,11 +898,11 @@ bool Synth::isOpen() const {
 }
 
 void Synth::flushMIDIQueue() {
-	if (midiQueue == NULL) return;
+	if (midiQueue == nullptr) return;
 	for (;;) {
 		const volatile MidiEventQueue::MidiEvent *midiEvent = midiQueue->peekMidiEvent();
-		if (midiEvent == NULL) break;
-		if (midiEvent->sysexData == NULL) {
+		if (midiEvent == nullptr) break;
+		if (midiEvent->sysexData == nullptr) {
 			playMsgNow(midiEvent->shortMessageData);
 		} else {
 			playSysexNow(midiEvent->sysexData, midiEvent->sysexLength);
@@ -926,7 +926,7 @@ Bit32u Synth::setMIDIEventQueueSize(Bit32u useSize) {
 		binarySize = MAX_QUEUE_SIZE;
 	}
 	extensions.midiEventQueueSize = binarySize;
-	if (midiQueue != NULL) {
+	if (midiQueue != nullptr) {
 		flushMIDIQueue();
 		delete midiQueue;
 		midiQueue = new MidiEventQueue(binarySize, extensions.midiEventQueueSysexStorageBufferSize);
@@ -938,7 +938,7 @@ void Synth::configureMIDIEventQueueSysexStorage(Bit32u storageBufferSize) {
 	if (extensions.midiEventQueueSysexStorageBufferSize == storageBufferSize) return;
 
 	extensions.midiEventQueueSysexStorageBufferSize = storageBufferSize;
-	if (midiQueue != NULL) {
+	if (midiQueue != nullptr) {
 		flushMIDIQueue();
 		delete midiQueue;
 		midiQueue = new MidiEventQueue(extensions.midiEventQueueSize, storageBufferSize);
@@ -986,7 +986,7 @@ bool Synth::playMsg(Bit32u msg, Bit32u timestamp) {
 		reportHandler->onMIDISystemRealtime(Bit8u(msg & 0xFF));
 		return true;
 	}
-	if (midiQueue == NULL) return false;
+	if (midiQueue == nullptr) return false;
 	if (midiDelayMode != MIDIDelayMode_IMMEDIATE) {
 		timestamp = addMIDIInterfaceDelay(getShortMessageLength(msg), timestamp);
 	}
@@ -1002,7 +1002,7 @@ bool Synth::playSysex(const Bit8u *sysex, Bit32u len) {
 }
 
 bool Synth::playSysex(const Bit8u *sysex, Bit32u len, Bit32u timestamp) {
-	if (midiQueue == NULL) return false;
+	if (midiQueue == nullptr) return false;
 	if (midiDelayMode == MIDIDelayMode_DELAY_ALL) {
 		timestamp = addMIDIInterfaceDelay(len, timestamp);
 	}
@@ -1343,7 +1343,7 @@ void Synth::writeSysexGlobal(Bit32u addr, const Bit8u *sysex, Bit32u len) {
 		// Find the appropriate memory region
 		const MemoryRegion *region = findMemoryRegion(addr);
 
-		if (region == NULL) {
+		if (region == nullptr) {
 			printDebug("Sysex write to unrecognised address %06x, len %d", MT32EMU_SYSEXMEMADDR(addr), len);
 			break;
 		}
@@ -1362,7 +1362,7 @@ void Synth::writeSysexGlobal(Bit32u addr, const Bit8u *sysex, Bit32u len) {
 void Synth::readMemory(Bit32u addr, Bit32u len, Bit8u *data) {
 	if (!opened) return;
 	const MemoryRegion *region = findMemoryRegion(addr);
-	if (region != NULL) {
+	if (region != nullptr) {
 		readMemoryRegion(region, addr, len, data);
 	}
 }
@@ -1391,24 +1391,24 @@ void Synth::initMemoryRegions() {
 
 void Synth::deleteMemoryRegions() {
 	delete patchTempMemoryRegion;
-	patchTempMemoryRegion = NULL;
+	patchTempMemoryRegion = nullptr;
 	delete rhythmTempMemoryRegion;
-	rhythmTempMemoryRegion = NULL;
+	rhythmTempMemoryRegion = nullptr;
 	delete timbreTempMemoryRegion;
-	timbreTempMemoryRegion = NULL;
+	timbreTempMemoryRegion = nullptr;
 	delete patchesMemoryRegion;
-	patchesMemoryRegion = NULL;
+	patchesMemoryRegion = nullptr;
 	delete timbresMemoryRegion;
-	timbresMemoryRegion = NULL;
+	timbresMemoryRegion = nullptr;
 	delete systemMemoryRegion;
-	systemMemoryRegion = NULL;
+	systemMemoryRegion = nullptr;
 	delete displayMemoryRegion;
-	displayMemoryRegion = NULL;
+	displayMemoryRegion = nullptr;
 	delete resetMemoryRegion;
-	resetMemoryRegion = NULL;
+	resetMemoryRegion = nullptr;
 
 	delete[] paddedTimbreMaxTable;
-	paddedTimbreMaxTable = NULL;
+	paddedTimbreMaxTable = nullptr;
 }
 
 MemoryRegion *Synth::findMemoryRegion(Bit32u addr) {
@@ -1421,14 +1421,14 @@ MemoryRegion *Synth::findMemoryRegion(Bit32u addr) {
 		systemMemoryRegion,
 		displayMemoryRegion,
 		resetMemoryRegion,
-		NULL
+		nullptr
 	};
-	for (int pos = 0; regions[pos] != NULL; pos++) {
+	for (int pos = 0; regions[pos] != nullptr; pos++) {
 		if (regions[pos]->contains(addr)) {
 			return regions[pos];
 		}
 	}
-	return NULL;
+	return nullptr;
 }
 
 void Synth::readMemoryRegion(const MemoryRegion *region, Bit32u addr, Bit32u len, Bit8u *data) {
@@ -1469,7 +1469,7 @@ void Synth::writeMemoryRegion(const MemoryRegion *region, Bit32u addr, Bit32u le
 #if MT32EMU_MONITOR_SYSEX > 0
 			printDebug("WRITE-PARTPATCH (%d-%d@%d..%d): %d; timbre=%d (%s), outlevel=%d", first, last, off, off + len, i, absTimbreNum, timbreName, mt32ram.patchTemp[i].outputLevel);
 #endif
-			if (parts[i] != NULL) {
+			if (parts[i] != nullptr) {
 				if (i != 8) {
 					// Note: Confirmed on CM-64 that we definitely *should* update the timbre here,
 					// but only in the case that the sysex actually writes to those values
@@ -1500,7 +1500,7 @@ void Synth::writeMemoryRegion(const MemoryRegion *region, Bit32u addr, Bit32u le
 			printDebug("WRITE-RHYTHM (%d-%d@%d..%d): %d; level=%02x, panpot=%02x, reverb=%02x, timbre=%d (%s)", first, last, off, off + len, i, mt32ram.rhythmTemp[i].outputLevel, mt32ram.rhythmTemp[i].panpot, mt32ram.rhythmTemp[i].reverbSwitch, mt32ram.rhythmTemp[i].timbre, timbreName);
 #endif
 		}
-		if (parts[8] != NULL) {
+		if (parts[8] != nullptr) {
 			parts[8]->refresh();
 		}
 		break;
@@ -1513,7 +1513,7 @@ void Synth::writeMemoryRegion(const MemoryRegion *region, Bit32u addr, Bit32u le
 #if MT32EMU_MONITOR_SYSEX > 0
 			printDebug("WRITE-PARTTIMBRE (%d-%d@%d..%d): timbre=%d (%s)", first, last, off, off + len, i, instrumentName);
 #endif
-			if (parts[i] != NULL) {
+			if (parts[i] != nullptr) {
 				parts[i]->refresh();
 			}
 		}
@@ -1622,7 +1622,7 @@ void Synth::writeMemoryRegion(const MemoryRegion *region, Bit32u addr, Bit32u le
 			// FIXME:KG: Not sure if the stuff below should be done (for rhythm and/or parts)...
 			// Does the real MT-32 automatically do this?
 			for (unsigned int part = 0; part < 9; part++) {
-				if (parts[part] != NULL) {
+				if (parts[part] != nullptr) {
 					parts[part]->refreshTimbre(i);
 				}
 			}
@@ -1709,7 +1709,7 @@ void Synth::refreshSystemReverbParameters() {
 	if (mt32ram.system.reverbTime == 0 && mt32ram.system.reverbLevel == 0) {
 		// Setting both time and level to 0 effectively disables wet reverb output on real devices.
 		// Take a shortcut in this case to reduce CPU load.
-		reverbModel = NULL;
+		reverbModel = nullptr;
 	} else {
 		reverbModel = reverbModels[mt32ram.system.reverbMode];
 	}
@@ -1719,7 +1719,7 @@ void Synth::refreshSystemReverbParameters() {
 				reverbModel->mute();
 			}
 		} else {
-			if (oldReverbModel != NULL) {
+			if (oldReverbModel != nullptr) {
 				oldReverbModel->close();
 			}
 			if (isReverbEnabled()) {
@@ -1746,7 +1746,7 @@ void Synth::refreshSystemChanAssign(Bit8u firstPart, Bit8u lastPart) {
 	// CONFIRMED: In the case of assigning a MIDI channel to multiple parts,
 	//            the messages received on that MIDI channel are handled by all the parts.
 	for (Bit32u i = 0; i <= 8; i++) {
-		if (parts[i] != NULL && i >= firstPart && i <= lastPart) {
+		if (parts[i] != nullptr && i >= firstPart && i <= lastPart) {
 			// CONFIRMED: Decay is started for all polys, and all controllers are reset, for every part whose assignment was touched by the sysex write.
 			parts[i]->allSoundOff();
 			parts[i]->resetAllControllers();
@@ -1868,19 +1868,19 @@ public:
 		// When the free space isn't contiguous, the data is allocated either right after the end position
 		// or at the buffer beginning, wherever it fits.
 		if (myStartPosition > myEndPosition) {
-			if (myStartPosition - myEndPosition <= sysexLength) return NULL;
+			if (myStartPosition - myEndPosition <= sysexLength) return nullptr;
 		} else if (storageBufferSize - myEndPosition < sysexLength) {
 			// There's not enough free space at the end to place the data block.
 			if (myStartPosition == myEndPosition) {
 				// The buffer is empty -> reset positions to the buffer beginning.
-				if (storageBufferSize <= sysexLength) return NULL;
+				if (storageBufferSize <= sysexLength) return nullptr;
 				if (myStartPosition != 0) {
 					myStartPosition = 0;
 					// It's OK to write startPosition here non-atomically. We don't expect any
 					// concurrent reads, as there must be no SysEx messages in the queue.
 					startPosition = myStartPosition;
 				}
-			} else if (myStartPosition <= sysexLength) return NULL;
+			} else if (myStartPosition <= sysexLength) return nullptr;
 			myEndPosition = 0;
 		}
 		endPosition = myEndPosition + sysexLength;
@@ -1888,7 +1888,7 @@ public:
 	}
 
 	void reclaimUnused(const Bit8u *sysexData, Bit32u sysexLength) {
-		if (sysexData == NULL) return;
+		if (sysexData == nullptr) return;
 		Bit32u allocatedPosition = startPosition;
 		if (storageBuffer + allocatedPosition == sysexData) {
 			startPosition = allocatedPosition + sysexLength;
@@ -1921,7 +1921,7 @@ MidiEventQueue::MidiEventQueue(Bit32u useRingBufferSize, Bit32u storageBufferSiz
 	ringBuffer(new MidiEvent[useRingBufferSize]), ringBufferMask(useRingBufferSize - 1)
 {
 	for (Bit32u i = 0; i <= ringBufferMask; i++) {
-		ringBuffer[i].sysexData = NULL;
+		ringBuffer[i].sysexData = nullptr;
 	}
 	reset();
 }
@@ -1946,7 +1946,7 @@ bool MidiEventQueue::pushShortMessage(Bit32u shortMessageData, Bit32u timestamp)
 	if (startPosition == newEndPosition) return false;
 	volatile MidiEvent &newEvent = ringBuffer[endPosition];
 	sysexDataStorage.dispose(newEvent.sysexData, newEvent.sysexLength);
-	newEvent.sysexData = NULL;
+	newEvent.sysexData = nullptr;
 	newEvent.shortMessageData = shortMessageData;
 	newEvent.timestamp = timestamp;
 	endPosition = newEndPosition;
@@ -1960,7 +1960,7 @@ bool MidiEventQueue::pushSysex(const Bit8u *sysexData, Bit32u sysexLength, Bit32
 	volatile MidiEvent &newEvent = ringBuffer[endPosition];
 	sysexDataStorage.dispose(newEvent.sysexData, newEvent.sysexLength);
 	Bit8u *dstSysexData = sysexDataStorage.allocate(sysexLength);
-	if (dstSysexData == NULL) return false;
+	if (dstSysexData == nullptr) return false;
 	memcpy(dstSysexData, sysexData, sysexLength);
 	newEvent.sysexData = dstSysexData;
 	newEvent.sysexLength = sysexLength;
@@ -1970,7 +1970,7 @@ bool MidiEventQueue::pushSysex(const Bit8u *sysexData, Bit32u sysexLength, Bit32
 }
 
 const volatile MidiEventQueue::MidiEvent *MidiEventQueue::peekMidiEvent() {
-	return isEmpty() ? NULL : &ringBuffer[startPosition];
+	return isEmpty() ? nullptr : &ringBuffer[startPosition];
 }
 
 void MidiEventQueue::dropMidiEvent() {
@@ -1993,14 +1993,14 @@ RendererType Synth::getSelectedRendererType() const {
 }
 
 Bit32u Synth::getStereoOutputSampleRate() const {
-	return (analog == NULL) ? SAMPLE_RATE : analog->getOutputSampleRate();
+	return (analog == nullptr) ? SAMPLE_RATE : analog->getOutputSampleRate();
 }
 
 template <class Sample>
 void RendererImpl<Sample>::doRender(Sample *stereoStream, Bit32u len) {
 	if (!isActivated()) {
 		incRenderedSampleCount(getAnalog().getDACStreamsLength(len));
-		if (!getAnalog().process(NULL, NULL, NULL, NULL, NULL, NULL, stereoStream, len)) {
+		if (!getAnalog().process(nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, stereoStream, len)) {
 			printDebug("RendererImpl: Invalid call to Analog::process()!\n");
 		}
 		Synth::muteSampleBuffer(stereoStream, len << 1);
@@ -2073,7 +2073,7 @@ void Synth::render(float *stream, Bit32u len) {
 
 template <class Sample>
 static inline void advanceStream(Sample *&stream, Bit32u len) {
-	if (stream != NULL) {
+	if (stream != nullptr) {
 		stream += len;
 	}
 }
@@ -2117,14 +2117,14 @@ void RendererImpl<Sample>::doRenderStreams(const DACOutputStreams<Sample> &strea
 		Bit32u thisLen = 1;
 		if (!isAbortingPoly()) {
 			const volatile MidiEventQueue::MidiEvent *nextEvent = getMidiQueue().peekMidiEvent();
-			Bit32s samplesToNextEvent = (nextEvent != NULL) ? Bit32s(nextEvent->timestamp - getRenderedSampleCount()) : MAX_SAMPLES_PER_RUN;
+			Bit32s samplesToNextEvent = (nextEvent != nullptr) ? Bit32s(nextEvent->timestamp - getRenderedSampleCount()) : MAX_SAMPLES_PER_RUN;
 			if (samplesToNextEvent > 0) {
 				thisLen = len > MAX_SAMPLES_PER_RUN ? MAX_SAMPLES_PER_RUN : len;
 				if (thisLen > Bit32u(samplesToNextEvent)) {
 					thisLen = samplesToNextEvent;
 				}
 			} else {
-				if (nextEvent->sysexData == NULL) {
+				if (nextEvent->sysexData == nullptr) {
 					synth.playMsgNow(nextEvent->shortMessageData);
 					// If a poly is aborting we don't drop the event from the queue.
 					// Instead, we'll return to it again when the abortion is done.
@@ -2311,10 +2311,10 @@ template <class Sample>
 void RendererImpl<Sample>::produceStreams(const DACOutputStreams<Sample> &streams, Bit32u len) {
 	if (isActivated()) {
 		// Even if LA32 output isn't desired, we proceed anyway with temp buffers
-		Sample *nonReverbLeft = streams.nonReverbLeft == NULL ? tmpNonReverbLeft : streams.nonReverbLeft;
-		Sample *nonReverbRight = streams.nonReverbRight == NULL ? tmpNonReverbRight : streams.nonReverbRight;
-		Sample *reverbDryLeft = streams.reverbDryLeft == NULL ? tmpReverbDryLeft : streams.reverbDryLeft;
-		Sample *reverbDryRight = streams.reverbDryRight == NULL ? tmpReverbDryRight : streams.reverbDryRight;
+		Sample *nonReverbLeft = streams.nonReverbLeft == nullptr ? tmpNonReverbLeft : streams.nonReverbLeft;
+		Sample *nonReverbRight = streams.nonReverbRight == nullptr ? tmpNonReverbRight : streams.nonReverbRight;
+		Sample *reverbDryLeft = streams.reverbDryLeft == nullptr ? tmpReverbDryLeft : streams.reverbDryLeft;
+		Sample *reverbDryRight = streams.reverbDryRight == nullptr ? tmpReverbDryRight : streams.reverbDryRight;
 
 		Synth::muteSampleBuffer(nonReverbLeft, len);
 		Synth::muteSampleBuffer(nonReverbRight, len);
@@ -2336,24 +2336,24 @@ void RendererImpl<Sample>::produceStreams(const DACOutputStreams<Sample> &stream
 			if (!getReverbModel().process(reverbDryLeft, reverbDryRight, streams.reverbWetLeft, streams.reverbWetRight, len)) {
 				printDebug("RendererImpl: Invalid call to BReverbModel::process()!\n");
 			}
-			if (streams.reverbWetLeft != NULL) convertSamplesToOutput(streams.reverbWetLeft, len);
-			if (streams.reverbWetRight != NULL) convertSamplesToOutput(streams.reverbWetRight, len);
+			if (streams.reverbWetLeft != nullptr) convertSamplesToOutput(streams.reverbWetLeft, len);
+			if (streams.reverbWetRight != nullptr) convertSamplesToOutput(streams.reverbWetRight, len);
 		} else {
 			Synth::muteSampleBuffer(streams.reverbWetLeft, len);
 			Synth::muteSampleBuffer(streams.reverbWetRight, len);
 		}
 
 		// Don't bother with conversion if the output is going to be unused
-		if (streams.nonReverbLeft != NULL) {
+		if (streams.nonReverbLeft != nullptr) {
 			produceLA32Output(nonReverbLeft, len);
 			convertSamplesToOutput(nonReverbLeft, len);
 		}
-		if (streams.nonReverbRight != NULL) {
+		if (streams.nonReverbRight != nullptr) {
 			produceLA32Output(nonReverbRight, len);
 			convertSamplesToOutput(nonReverbRight, len);
 		}
-		if (streams.reverbDryLeft != NULL) convertSamplesToOutput(reverbDryLeft, len);
-		if (streams.reverbDryRight != NULL) convertSamplesToOutput(reverbDryRight, len);
+		if (streams.reverbDryLeft != nullptr) convertSamplesToOutput(reverbDryLeft, len);
+		if (streams.reverbDryRight != nullptr) convertSamplesToOutput(reverbDryRight, len);
 	} else {
 		muteStreams(streams, len);
 	}
@@ -2456,7 +2456,7 @@ Bit32u Synth::getPlayingNotes(Bit8u partNumber, Bit8u *keys, Bit8u *velocities)
 	if (opened && (partNumber < 9)) {
 		const Part *part = parts[partNumber];
 		const Poly *poly = part->getFirstActivePoly();
-		while (poly != NULL) {
+		while (poly != nullptr) {
 			keys[playingNotes] = Bit8u(poly->getKey());
 			velocities[playingNotes] = Bit8u(poly->getVelocity());
 			playingNotes++;
@@ -2467,12 +2467,12 @@ Bit32u Synth::getPlayingNotes(Bit8u partNumber, Bit8u *keys, Bit8u *velocities)
 }
 
 const char *Synth::getPatchName(Bit8u partNumber) const {
-	return (!opened || partNumber > 8) ? NULL : parts[partNumber]->getCurrentInstr();
+	return (!opened || partNumber > 8) ? nullptr : parts[partNumber]->getCurrentInstr();
 }
 
 const Part *Synth::getPart(Bit8u partNum) const {
 	if (partNum > 8) {
-		return NULL;
+		return nullptr;
 	}
 	return parts[partNum];
 }
@@ -2494,7 +2494,7 @@ void MemoryRegion::read(unsigned int entry, unsigned int off, Bit8u *dst, unsign
 		len = entrySize * entries - off;
 	}
 	Bit8u *src = getRealMemory();
-	if (src == NULL) {
+	if (src == nullptr) {
 #if MT32EMU_MONITOR_SYSEX > 0
 		synth->printDebug("read[%d]: unreadable region: entry=%d, off=%d, len=%d", type, entry, off, len);
 #endif
@@ -2520,7 +2520,7 @@ void MemoryRegion::write(unsigned int entry, unsigned int off, const Bit8u *src,
 		len = entrySize * entries - off;
 	}
 	Bit8u *dest = getRealMemory();
-	if (dest == NULL) {
+	if (dest == nullptr) {
 #if MT32EMU_MONITOR_SYSEX > 0
 		synth->printDebug("write[%d]: unwritable region: entry=%d, off=%d, len=%d", type, entry, off, len);
 #endif
diff --git a/audio/softsynth/mt32/TVA.cpp b/audio/softsynth/mt32/TVA.cpp
index b3d4db1222..87e11799c3 100644
--- a/audio/softsynth/mt32/TVA.cpp
+++ b/audio/softsynth/mt32/TVA.cpp
@@ -115,7 +115,7 @@ static int calcBasicAmp(const Tables *tables, const Partial *partial, const MemP
 		if (amp < 0) {
 			return 0;
 		}
-		if (rhythmTemp != NULL) {
+		if (rhythmTemp != nullptr) {
 			amp -= tables->levelToAmpSubtraction[rhythmTemp->outputLevel];
 			if (amp < 0) {
 				return 0;
diff --git a/audio/softsynth/mt32/TVP.cpp b/audio/softsynth/mt32/TVP.cpp
index 42dbd7fab7..98d7bbad64 100644
--- a/audio/softsynth/mt32/TVP.cpp
+++ b/audio/softsynth/mt32/TVP.cpp
@@ -90,7 +90,7 @@ static Bit32u calcBasePitch(const Partial *partial, const TimbreParam::PartialPa
 	basePitch += fineToPitch(patchTemp->patch.fineTune);
 
 	const ControlROMPCMStruct *controlROMPCMStruct = partial->getControlROMPCMStruct();
-	if (controlROMPCMStruct != NULL) {
+	if (controlROMPCMStruct != nullptr) {
 		basePitch += (Bit32s(controlROMPCMStruct->pitchMSB) << 8) | Bit32s(controlROMPCMStruct->pitchLSB);
 	} else {
 		if ((partialParam->wg.waveform & 1) == 0) {
diff --git a/audio/softsynth/mt32/c_interface/c_interface.cpp b/audio/softsynth/mt32/c_interface/c_interface.cpp
index e756b7b3fb..e29733bfae 100644
--- a/audio/softsynth/mt32/c_interface/c_interface.cpp
+++ b/audio/softsynth/mt32/c_interface/c_interface.cpp
@@ -158,7 +158,7 @@ protected:
 
 private:
 	void printDebug(const char *fmt, va_list list) {
-		if (delegate.v0->printDebug == NULL) {
+		if (delegate.v0->printDebug == nullptr) {
 			ReportHandler::printDebug(fmt, list);
 		} else {
 			delegate.v0->printDebug(instanceData, fmt, list);
@@ -166,7 +166,7 @@ private:
 	}
 
 	void onErrorControlROM() {
-		if (delegate.v0->onErrorControlROM == NULL) {
+		if (delegate.v0->onErrorControlROM == nullptr) {
 			ReportHandler::onErrorControlROM();
 		} else {
 			delegate.v0->onErrorControlROM(instanceData);
@@ -174,7 +174,7 @@ private:
 	}
 
 	void onErrorPCMROM() {
-		if (delegate.v0->onErrorPCMROM == NULL) {
+		if (delegate.v0->onErrorPCMROM == nullptr) {
 			ReportHandler::onErrorPCMROM();
 		} else {
 			delegate.v0->onErrorPCMROM(instanceData);
@@ -182,7 +182,7 @@ private:
 	}
 
 	void showLCDMessage(const char *message) {
-		if (delegate.v0->showLCDMessage == NULL) {
+		if (delegate.v0->showLCDMessage == nullptr) {
 			ReportHandler::showLCDMessage(message);
 		} else {
 			delegate.v0->showLCDMessage(instanceData, message);
@@ -190,7 +190,7 @@ private:
 	}
 
 	void onMIDIMessagePlayed() {
-		if (delegate.v0->onMIDIMessagePlayed == NULL) {
+		if (delegate.v0->onMIDIMessagePlayed == nullptr) {
 			ReportHandler::onMIDIMessagePlayed();
 		} else {
 			delegate.v0->onMIDIMessagePlayed(instanceData);
@@ -198,14 +198,14 @@ private:
 	}
 
 	bool onMIDIQueueOverflow() {
-		if (delegate.v0->onMIDIQueueOverflow == NULL) {
+		if (delegate.v0->onMIDIQueueOverflow == nullptr) {
 			return ReportHandler::onMIDIQueueOverflow();
 		}
 		return delegate.v0->onMIDIQueueOverflow(instanceData) != MT32EMU_BOOL_FALSE;
 	}
 
 	void onMIDISystemRealtime(Bit8u systemRealtime) {
-		if (delegate.v0->onMIDISystemRealtime == NULL) {
+		if (delegate.v0->onMIDISystemRealtime == nullptr) {
 			ReportHandler::onMIDISystemRealtime(systemRealtime);
 		} else {
 			delegate.v0->onMIDISystemRealtime(instanceData, systemRealtime);
@@ -213,7 +213,7 @@ private:
 	}
 
 	void onDeviceReset() {
-		if (delegate.v0->onDeviceReset == NULL) {
+		if (delegate.v0->onDeviceReset == nullptr) {
 			ReportHandler::onDeviceReset();
 		} else {
 			delegate.v0->onDeviceReset(instanceData);
@@ -221,7 +221,7 @@ private:
 	}
 
 	void onDeviceReconfig() {
-		if (delegate.v0->onDeviceReconfig == NULL) {
+		if (delegate.v0->onDeviceReconfig == nullptr) {
 			ReportHandler::onDeviceReconfig();
 		} else {
 			delegate.v0->onDeviceReconfig(instanceData);
@@ -229,7 +229,7 @@ private:
 	}
 
 	void onNewReverbMode(Bit8u mode) {
-		if (delegate.v0->onNewReverbMode == NULL) {
+		if (delegate.v0->onNewReverbMode == nullptr) {
 			ReportHandler::onNewReverbMode(mode);
 		} else {
 			delegate.v0->onNewReverbMode(instanceData, mode);
@@ -237,7 +237,7 @@ private:
 	}
 
 	void onNewReverbTime(Bit8u time) {
-		if (delegate.v0->onNewReverbTime == NULL) {
+		if (delegate.v0->onNewReverbTime == nullptr) {
 			ReportHandler::onNewReverbTime(time);
 		} else {
 			delegate.v0->onNewReverbTime(instanceData, time);
@@ -245,7 +245,7 @@ private:
 	}
 
 	void onNewReverbLevel(Bit8u level) {
-		if (delegate.v0->onNewReverbLevel == NULL) {
+		if (delegate.v0->onNewReverbLevel == nullptr) {
 			ReportHandler::onNewReverbLevel(level);
 		} else {
 			delegate.v0->onNewReverbLevel(instanceData, level);
@@ -253,7 +253,7 @@ private:
 	}
 
 	void onPolyStateChanged(Bit8u partNum) {
-		if (delegate.v0->onPolyStateChanged == NULL) {
+		if (delegate.v0->onPolyStateChanged == nullptr) {
 			ReportHandler::onPolyStateChanged(partNum);
 		} else {
 			delegate.v0->onPolyStateChanged(instanceData, partNum);
@@ -261,7 +261,7 @@ private:
 	}
 
 	void onProgramChanged(Bit8u partNum, const char *soundGroupName, const char *patchName) {
-		if (delegate.v0->onProgramChanged == NULL) {
+		if (delegate.v0->onProgramChanged == nullptr) {
 			ReportHandler::onProgramChanged(partNum, soundGroupName, patchName);
 		} else {
 			delegate.v0->onProgramChanged(instanceData, partNum, soundGroupName, patchName);
@@ -280,7 +280,7 @@ protected:
 
 private:
 	void handleShortMessage(const Bit32u message) {
-		if (delegate.v0->handleShortMessage == NULL) {
+		if (delegate.v0->handleShortMessage == nullptr) {
 			DefaultMidiStreamParser::handleShortMessage(message);
 		} else {
 			delegate.v0->handleShortMessage(instanceData, message);
@@ -288,7 +288,7 @@ private:
 	}
 
 	void handleSysex(const Bit8u *stream, const Bit32u length) {
-		if (delegate.v0->handleSysex == NULL) {
+		if (delegate.v0->handleSysex == nullptr) {
 			DefaultMidiStreamParser::handleSysex(stream, length);
 		} else {
 			delegate.v0->handleSysex(instanceData, stream, length);
@@ -296,7 +296,7 @@ private:
 	}
 
 	void handleSystemRealtimeMessage(const Bit8u realtime) {
-		if (delegate.v0->handleSystemRealtimeMessage == NULL) {
+		if (delegate.v0->handleSystemRealtimeMessage == nullptr) {
 			DefaultMidiStreamParser::handleSystemRealtimeMessage(realtime);
 		} else {
 			delegate.v0->handleSystemRealtimeMessage(instanceData, realtime);
@@ -305,23 +305,23 @@ private:
 };
 
 static void fillROMInfo(mt32emu_rom_info *rom_info, const ROMInfo *controlROMInfo, const ROMInfo *pcmROMInfo) {
-	if (controlROMInfo != NULL) {
+	if (controlROMInfo != nullptr) {
 		rom_info->control_rom_id = controlROMInfo->shortName;
 		rom_info->control_rom_description = controlROMInfo->description;
 		rom_info->control_rom_sha1_digest = controlROMInfo->sha1Digest;
 	} else {
-		rom_info->control_rom_id = NULL;
-		rom_info->control_rom_description = NULL;
-		rom_info->control_rom_sha1_digest = NULL;
+		rom_info->control_rom_id = nullptr;
+		rom_info->control_rom_description = nullptr;
+		rom_info->control_rom_sha1_digest = nullptr;
 	}
-	if (pcmROMInfo != NULL) {
+	if (pcmROMInfo != nullptr) {
 		rom_info->pcm_rom_id = pcmROMInfo->shortName;
 		rom_info->pcm_rom_description = pcmROMInfo->description;
 		rom_info->pcm_rom_sha1_digest = pcmROMInfo->sha1Digest;
 	} else {
-		rom_info->pcm_rom_id = NULL;
-		rom_info->pcm_rom_description = NULL;
-		rom_info->pcm_rom_sha1_digest = NULL;
+		rom_info->pcm_rom_id = nullptr;
+		rom_info->pcm_rom_description = nullptr;
+		rom_info->pcm_rom_sha1_digest = nullptr;
 	}
 }
 
@@ -331,28 +331,28 @@ static const MachineConfiguration *findMachineConfiguration(const char *machine_
 	for (Bit32u i = 0; i < configurationCount; i++) {
 		if (!strcmp(configurations[i]->getMachineID(), machine_id)) return configurations[i];
 	}
-	return NULL;
+	return nullptr;
 }
 
 static mt32emu_return_code identifyROM(mt32emu_rom_info *rom_info, File *romFile, const char *machineID) {
 	const ROMInfo *romInfo;
-	if (machineID == NULL) {
+	if (machineID == nullptr) {
 		romInfo = ROMInfo::getROMInfo(romFile);
 	} else {
 		const MachineConfiguration *configuration = findMachineConfiguration(machineID);
-		if (configuration == NULL) {
-			fillROMInfo(rom_info, NULL, NULL);
+		if (configuration == nullptr) {
+			fillROMInfo(rom_info, nullptr, nullptr);
 			return MT32EMU_RC_MACHINE_NOT_IDENTIFIED;
 		}
 		romInfo = ROMInfo::getROMInfo(romFile, configuration->getCompatibleROMInfos());
 	}
-	if (romInfo == NULL) {
-		fillROMInfo(rom_info, NULL, NULL);
+	if (romInfo == nullptr) {
+		fillROMInfo(rom_info, nullptr, nullptr);
 		return MT32EMU_RC_ROM_NOT_IDENTIFIED;
 	}
-	if (romInfo->type == ROMInfo::Control) fillROMInfo(rom_info, romInfo, NULL);
-	else if (romInfo->type == ROMInfo::PCM) fillROMInfo(rom_info, NULL, romInfo);
-	else fillROMInfo(rom_info, NULL, NULL);
+	if (romInfo->type == ROMInfo::Control) fillROMInfo(rom_info, romInfo, nullptr);
+	else if (romInfo->type == ROMInfo::PCM) fillROMInfo(rom_info, nullptr, romInfo);
+	else fillROMInfo(rom_info, nullptr, nullptr);
 	return MT32EMU_RC_OK;
 }
 
@@ -366,10 +366,10 @@ static bool isROMInfoCompatible(const MachineConfiguration *machineConfiguration
 }
 
 static mt32emu_return_code replaceOrMergeROMImage(const ROMImage *&contextROMImage, const ROMImage *newROMImage, const MachineConfiguration *machineConfiguration, mt32emu_return_code addedFullROM, mt32emu_return_code addedPartialROM) {
-	if (contextROMImage != NULL) {
-		if (machineConfiguration != NULL) {
+	if (contextROMImage != nullptr) {
+		if (machineConfiguration != nullptr) {
 			const ROMImage *mergedROMImage = ROMImage::mergeROMImages(contextROMImage, newROMImage);
-			if (mergedROMImage != NULL) {
+			if (mergedROMImage != nullptr) {
 				if (newROMImage->isFileUserProvided()) delete newROMImage->getFile();
 				ROMImage::freeROMImage(newROMImage);
 				if (contextROMImage->isFileUserProvided()) delete contextROMImage->getFile();
@@ -391,16 +391,16 @@ static mt32emu_return_code replaceOrMergeROMImage(const ROMImage *&contextROMIma
 	return newROMImage->getROMInfo()->pairType == ROMInfo::Full ? addedFullROM: addedPartialROM;
 }
 
-static mt32emu_return_code addROMFiles(mt32emu_data *data, File *file1, File *file2 = NULL, const MachineConfiguration *machineConfiguration = NULL) {
+static mt32emu_return_code addROMFiles(mt32emu_data *data, File *file1, File *file2 = nullptr, const MachineConfiguration *machineConfiguration = nullptr) {
 	const ROMImage *romImage;
-	if (machineConfiguration != NULL) {
+	if (machineConfiguration != nullptr) {
 		romImage = ROMImage::makeROMImage(file1, machineConfiguration->getCompatibleROMInfos());
 	} else {
-		romImage = file2 == NULL ? ROMImage::makeROMImage(file1, ROMInfo::getFullROMInfos()) : ROMImage::makeROMImage(file1, file2);
+		romImage = file2 == nullptr ? ROMImage::makeROMImage(file1, ROMInfo::getFullROMInfos()) : ROMImage::makeROMImage(file1, file2);
 	}
-	if (romImage == NULL) return MT32EMU_RC_ROMS_NOT_PAIRABLE;
+	if (romImage == nullptr) return MT32EMU_RC_ROMS_NOT_PAIRABLE;
 	const ROMInfo *info = romImage->getROMInfo();
-	if (info == NULL) {
+	if (info == nullptr) {
 		ROMImage::freeROMImage(romImage);
 		return MT32EMU_RC_ROM_NOT_IDENTIFIED;
 	}
@@ -426,7 +426,7 @@ static mt32emu_return_code createFileStream(const char *filename, FileStream *&f
 		return MT32EMU_RC_OK;
 	}
 	delete fileStream;
-	fileStream = NULL;
+	fileStream = nullptr;
 	return rc;
 }
 
@@ -469,9 +469,9 @@ mt32emu_analog_output_mode mt32emu_get_best_analog_output_mode(const double targ
 size_t mt32emu_get_machine_ids(const char **machine_ids, size_t machine_ids_size) {
 	Bit32u configurationCount;
 	const MachineConfiguration * const *configurations = MachineConfiguration::getAllMachineConfigurations(&configurationCount);
-	if (machine_ids != NULL) {
+	if (machine_ids != nullptr) {
 		for (Bit32u i = 0; i < machine_ids_size; i++) {
-			machine_ids[i] = i < configurationCount ? configurations[i]->getMachineID() : NULL;
+			machine_ids[i] = i < configurationCount ? configurations[i]->getMachineID() : nullptr;
 		}
 	}
 	return configurationCount;
@@ -480,20 +480,20 @@ size_t mt32emu_get_machine_ids(const char **machine_ids, size_t machine_ids_size
 size_t mt32emu_get_rom_ids(const char **rom_ids, size_t rom_ids_size, const char *machine_id) {
 	const ROMInfo * const *romInfos;
 	Bit32u romCount;
-	if (machine_id != NULL) {
+	if (machine_id != nullptr) {
 		const MachineConfiguration *configuration = findMachineConfiguration(machine_id);
-		if (configuration != NULL) {
+		if (configuration != nullptr) {
 			romInfos = configuration->getCompatibleROMInfos(&romCount);
 		} else {
-			romInfos = NULL;
+			romInfos = nullptr;
 			romCount = 0U;
 		}
 	} else {
 		romInfos = ROMInfo::getAllROMInfos(&romCount);
 	}
-	if (rom_ids != NULL) {
+	if (rom_ids != nullptr) {
 		for (size_t i = 0; i < rom_ids_size; i++) {
-			rom_ids[i] = i < romCount ? romInfos[i]->shortName : NULL;
+			rom_ids[i] = i < romCount ? romInfos[i]->shortName : nullptr;
 		}
 	}
 	return romCount;
@@ -507,7 +507,7 @@ mt32emu_return_code mt32emu_identify_rom_data(mt32emu_rom_info *rom_info, const
 mt32emu_return_code mt32emu_identify_rom_file(mt32emu_rom_info *rom_info, const char *filename, const char *machine_id) {
 	FileStream *fs;
 	mt32emu_return_code rc = createFileStream(filename, fs);
-	if (fs == NULL) return rc;
+	if (fs == nullptr) return rc;
 	rc = identifyROM(rom_info, fs, machine_id);
 	delete fs;
 	return rc;
@@ -515,65 +515,65 @@ mt32emu_return_code mt32emu_identify_rom_file(mt32emu_rom_info *rom_info, const
 
 mt32emu_context mt32emu_create_context(mt32emu_report_handler_i report_handler, void *instance_data) {
 	mt32emu_data *data = new mt32emu_data;
-	data->reportHandler = (report_handler.v0 != NULL) ? new DelegatingReportHandlerAdapter(report_handler, instance_data) : new ReportHandler;
+	data->reportHandler = (report_handler.v0 != nullptr) ? new DelegatingReportHandlerAdapter(report_handler, instance_data) : new ReportHandler;
 	data->synth = new Synth(data->reportHandler);
 	data->midiParser = new DefaultMidiStreamParser(*data->synth);
-	data->controlROMImage = NULL;
-	data->pcmROMImage = NULL;
+	data->controlROMImage = nullptr;
+	data->pcmROMImage = nullptr;
 	data->partialCount = DEFAULT_MAX_PARTIALS;
 	data->analogOutputMode = AnalogOutputMode_COARSE;
 
 	data->srcState = new SamplerateConversionState;
 	data->srcState->outputSampleRate = 0.0;
 	data->srcState->srcQuality = SamplerateConversionQuality_GOOD;
-	data->srcState->src = NULL;
+	data->srcState->src = nullptr;
 
 	return data;
 }
 
 void mt32emu_free_context(mt32emu_context data) {
-	if (data == NULL) return;
+	if (data == nullptr) return;
 
 	delete data->srcState->src;
-	data->srcState->src = NULL;
+	data->srcState->src = nullptr;
 	delete data->srcState;
-	data->srcState = NULL;
+	data->srcState = nullptr;
 
-	if (data->controlROMImage != NULL) {
+	if (data->controlROMImage != nullptr) {
 		if (data->controlROMImage->isFileUserProvided()) delete data->controlROMImage->getFile();
 		ROMImage::freeROMImage(data->controlROMImage);
-		data->controlROMImage = NULL;
+		data->controlROMImage = nullptr;
 	}
-	if (data->pcmROMImage != NULL) {
+	if (data->pcmROMImage != nullptr) {
 		if (data->pcmROMImage->isFileUserProvided()) delete data->pcmROMImage->getFile();
 		ROMImage::freeROMImage(data->pcmROMImage);
-		data->pcmROMImage = NULL;
+		data->pcmROMImage = nullptr;
 	}
 	delete data->midiParser;
-	data->midiParser = NULL;
+	data->midiParser = nullptr;
 	delete data->synth;
-	data->synth = NULL;
+	data->synth = nullptr;
 	delete data->reportHandler;
-	data->reportHandler = NULL;
+	data->reportHandler = nullptr;
 	delete data;
 }
 
 mt32emu_return_code mt32emu_add_rom_data(mt32emu_context context, const mt32emu_bit8u *data, size_t data_size, const mt32emu_sha1_digest *sha1_digest) {
-	if (sha1_digest == NULL) return addROMFiles(context, new ArrayFile(data, data_size));
+	if (sha1_digest == nullptr) return addROMFiles(context, new ArrayFile(data, data_size));
 	return addROMFiles(context, new ArrayFile(data, data_size, *sha1_digest));
 }
 
 mt32emu_return_code mt32emu_add_rom_file(mt32emu_context context, const char *filename) {
 	FileStream *fs;
 	mt32emu_return_code rc = createFileStream(filename, fs);
-	if (fs != NULL) rc = addROMFiles(context, fs);
+	if (fs != nullptr) rc = addROMFiles(context, fs);
 	if (rc <= MT32EMU_RC_OK) delete fs;
 	return rc;
 }
 
 mt32emu_return_code mt32emu_merge_and_add_rom_data(mt32emu_context context, const mt32emu_bit8u *part1_data, size_t part1_data_size, const mt32emu_sha1_digest *part1_sha1_digest, const mt32emu_bit8u *part2_data, size_t part2_data_size, const mt32emu_sha1_digest *part2_sha1_digest) {
-	ArrayFile *file1 = part1_sha1_digest == NULL ? new ArrayFile(part1_data, part1_data_size) : new ArrayFile(part1_data, part1_data_size, *part1_sha1_digest);
-	ArrayFile *file2 = part2_sha1_digest == NULL ? new ArrayFile(part2_data, part2_data_size) : new ArrayFile(part2_data, part2_data_size, *part2_sha1_digest);
+	ArrayFile *file1 = part1_sha1_digest == nullptr ? new ArrayFile(part1_data, part1_data_size) : new ArrayFile(part1_data, part1_data_size, *part1_sha1_digest);
+	ArrayFile *file2 = part2_sha1_digest == nullptr ? new ArrayFile(part2_data, part2_data_size) : new ArrayFile(part2_data, part2_data_size, *part2_sha1_digest);
 	mt32emu_return_code rc = addROMFiles(context, file1, file2);
 	delete file1;
 	delete file2;
@@ -583,10 +583,10 @@ mt32emu_return_code mt32emu_merge_and_add_rom_data(mt32emu_context context, cons
 mt32emu_return_code mt32emu_merge_and_add_rom_files(mt32emu_context context, const char *part1_filename, const char *part2_filename) {
 	FileStream *fs1;
 	mt32emu_return_code rc = createFileStream(part1_filename, fs1);
-	if (fs1 != NULL) {
+	if (fs1 != nullptr) {
 		FileStream *fs2;
 		rc = createFileStream(part2_filename, fs2);
-		if (fs2 != NULL) {
+		if (fs2 != nullptr) {
 			rc = addROMFiles(context, fs1, fs2);
 			delete fs2;
 		}
@@ -597,19 +597,19 @@ mt32emu_return_code mt32emu_merge_and_add_rom_files(mt32emu_context context, con
 
 mt32emu_return_code mt32emu_add_machine_rom_file(mt32emu_context context, const char *machine_id, const char *filename) {
 	const MachineConfiguration *machineConfiguration = findMachineConfiguration(machine_id);
-	if (machineConfiguration == NULL) return MT32EMU_RC_MACHINE_NOT_IDENTIFIED;
+	if (machineConfiguration == nullptr) return MT32EMU_RC_MACHINE_NOT_IDENTIFIED;
 
 	FileStream *fs;
 	mt32emu_return_code rc = createFileStream(filename, fs);
-	if (fs == NULL) return rc;
-	rc = addROMFiles(context, fs, NULL, machineConfiguration);
+	if (fs == nullptr) return rc;
+	rc = addROMFiles(context, fs, nullptr, machineConfiguration);
 	if (rc <= MT32EMU_RC_OK) delete fs;
 	return rc;
 }
 
 void mt32emu_get_rom_info(mt32emu_const_context context, mt32emu_rom_info *rom_info) {
-	const ROMInfo *controlROMInfo = context->controlROMImage == NULL ? NULL : context->controlROMImage->getROMInfo();
-	const ROMInfo *pcmROMInfo = context->pcmROMImage == NULL ? NULL : context->pcmROMImage->getROMInfo();
+	const ROMInfo *controlROMInfo = context->controlROMImage == nullptr ? nullptr : context->controlROMImage->getROMInfo();
+	const ROMInfo *pcmROMInfo = context->pcmROMImage == nullptr ? nullptr : context->pcmROMImage->getROMInfo();
 	fillROMInfo(rom_info, controlROMInfo, pcmROMInfo);
 }
 
@@ -638,7 +638,7 @@ mt32emu_renderer_type mt32emu_get_selected_renderer_type(mt32emu_context context
 }
 
 mt32emu_return_code mt32emu_open_synth(mt32emu_const_context context) {
-	if ((context->controlROMImage == NULL) || (context->pcmROMImage == NULL)) {
+	if ((context->controlROMImage == nullptr) || (context->pcmROMImage == nullptr)) {
 		return MT32EMU_RC_MISSING_ROMS;
 	}
 	if (!context->synth->open(*context->controlROMImage, *context->pcmROMImage, context->partialCount, context->analogOutputMode)) {
@@ -653,7 +653,7 @@ mt32emu_return_code mt32emu_open_synth(mt32emu_const_context context) {
 void mt32emu_close_synth(mt32emu_const_context context) {
 	context->synth->close();
 	delete context->srcState->src;
-	context->srcState->src = NULL;
+	context->srcState->src = nullptr;
 }
 
 mt32emu_boolean mt32emu_is_open(mt32emu_const_context context) {
@@ -661,21 +661,21 @@ mt32emu_boolean mt32emu_is_open(mt32emu_const_context context) {
 }
 
 mt32emu_bit32u mt32emu_get_actual_stereo_output_samplerate(mt32emu_const_context context) {
-	if (context->srcState->src == NULL) {
+	if (context->srcState->src == nullptr) {
 		return context->synth->getStereoOutputSampleRate();
 	}
 	return mt32emu_bit32u(0.5 + context->srcState->src->convertSynthToOutputTimestamp(SAMPLE_RATE));
 }
 
 mt32emu_bit32u mt32emu_convert_output_to_synth_timestamp(mt32emu_const_context context, mt32emu_bit32u output_timestamp) {
-	if (context->srcState->src == NULL) {
+	if (context->srcState->src == nullptr) {
 		return output_timestamp;
 	}
 	return mt32emu_bit32u(0.5 + context->srcState->src->convertOutputToSynthTimestamp(output_timestamp));
 }
 
 mt32emu_bit32u mt32emu_convert_synth_to_output_timestamp(mt32emu_const_context context, mt32emu_bit32u synth_timestamp) {
-	if (context->srcState->src == NULL) {
+	if (context->srcState->src == nullptr) {
 		return synth_timestamp;
 	}
 	return mt32emu_bit32u(0.5 + context->srcState->src->convertSynthToOutputTimestamp(synth_timestamp));
@@ -695,7 +695,7 @@ void mt32emu_configure_midi_event_queue_sysex_storage(mt32emu_const_context cont
 
 void mt32emu_set_midi_receiver(mt32emu_context context, mt32emu_midi_receiver_i midi_receiver, void *instance_data) {
 	delete context->midiParser;
-	context->midiParser = (midi_receiver.v0 != NULL) ? new DelegatingMidiStreamParser(context, midi_receiver, instance_data) : new DefaultMidiStreamParser(*context->synth);
+	context->midiParser = (midi_receiver.v0 != nullptr) ? new DelegatingMidiStreamParser(context, midi_receiver, instance_data) : new DefaultMidiStreamParser(*context->synth);
 }
 
 mt32emu_bit32u mt32emu_get_internal_rendered_sample_count(mt32emu_const_context context) {
@@ -855,7 +855,7 @@ MT32EMU_EXPORT mt32emu_boolean mt32emu_is_nice_partial_mixing_enabled(mt32emu_co
 }
 
 void mt32emu_render_bit16s(mt32emu_const_context context, mt32emu_bit16s *stream, mt32emu_bit32u len) {
-	if (context->srcState->src != NULL) {
+	if (context->srcState->src != nullptr) {
 		context->srcState->src->getOutputSamples(stream, len);
 	} else {
 		context->synth->render(stream, len);
@@ -863,7 +863,7 @@ void mt32emu_render_bit16s(mt32emu_const_context context, mt32emu_bit16s *stream
 }
 
 void mt32emu_render_float(mt32emu_const_context context, float *stream, mt32emu_bit32u len) {
-	if (context->srcState->src != NULL) {
+	if (context->srcState->src != nullptr) {
 		context->srcState->src->getOutputSamples(stream, len);
 	} else {
 		context->synth->render(stream, len);
diff --git a/audio/softsynth/mt32/srchelper/srctools/src/IIR2xResampler.cpp b/audio/softsynth/mt32/srchelper/srctools/src/IIR2xResampler.cpp
index 51d3a9f5f8..b0bf0673f5 100644
--- a/audio/softsynth/mt32/srchelper/srctools/src/IIR2xResampler.cpp
+++ b/audio/softsynth/mt32/srchelper/srctools/src/IIR2xResampler.cpp
@@ -119,7 +119,7 @@ IIRResampler::Constants::Constants(const unsigned int useSectionsCount, const II
 }
 
 IIRResampler::IIRResampler(const Quality quality) :
-	constants(0, 0.0f, NULL, quality)
+	constants(0, 0.0f, nullptr, quality)
 {}
 
 IIRResampler::IIRResampler(const unsigned int useSectionsCount, const IIRCoefficient useFIR, const IIRSection useSections[]) :
diff --git a/audio/softsynth/mt32/srchelper/srctools/src/ResamplerModel.cpp b/audio/softsynth/mt32/srchelper/srctools/src/ResamplerModel.cpp
index fc3cbd29a0..7d9a6f2cbe 100644
--- a/audio/softsynth/mt32/srchelper/srctools/src/ResamplerModel.cpp
+++ b/audio/softsynth/mt32/srchelper/srctools/src/ResamplerModel.cpp
@@ -120,7 +120,7 @@ void ResamplerModel::freeResamplerModel(FloatSampleProvider &model, FloatSampleP
 	FloatSampleProvider *currentStage = &model;
 	while (currentStage != &source) {
 		CascadeStage *cascadeStage = dynamic_cast<CascadeStage *>(currentStage);
-		if (cascadeStage == NULL) return;
+		if (cascadeStage == nullptr) return;
 		FloatSampleProvider &prevStage = cascadeStage->source;
 		delete currentStage;
 		currentStage = &prevStage;
diff --git a/audio/softsynth/opl/dbopl.cpp b/audio/softsynth/opl/dbopl.cpp
index 275a1caa00..722a480bb0 100644
--- a/audio/softsynth/opl/dbopl.cpp
+++ b/audio/softsynth/opl/dbopl.cpp
@@ -1022,7 +1022,7 @@ Channel* Channel::BlockTemplate( Chip* chip, Bit32u samples, Bit32s* output ) {
 	default:
 		break;
 	}
-	return 0;
+	return nullptr;
 }
 
 /*
@@ -1480,7 +1480,7 @@ void InitTables( void ) {
 		TremoloTable[TREMOLO_TABLE - 1 - i] = val;
 	}
 	//Create a table with offsets of the channels from the start of the chip
-	DBOPL::Chip* chip = 0;
+	DBOPL::Chip* chip = nullptr;
 	for ( Bitu i = 0; i < 32; i++ ) {
 		Bitu index = i & 0xf;
 		if ( index >= 9 ) {
@@ -1508,7 +1508,7 @@ void InitTables( void ) {
 		if ( chNum >= 12 )
 			chNum += 16 - 12;
 		Bitu opNum = ( i % 8 ) / 3;
-		DBOPL::Channel* chan = 0;
+		DBOPL::Channel* chan = nullptr;
 		Bitu blah = reinterpret_cast<size_t>( &(chan->op[opNum]) );
 		OpOffsetTable[i] = ChanOffsetTable[ chNum ] + blah;
 	}
diff --git a/audio/softsynth/opl/dosbox.cpp b/audio/softsynth/opl/dosbox.cpp
index 441a61f380..c15e2308cb 100644
--- a/audio/softsynth/opl/dosbox.cpp
+++ b/audio/softsynth/opl/dosbox.cpp
@@ -149,7 +149,7 @@ uint8 Chip::read() {
 	return ret;
 }
 
-OPL::OPL(Config::OplType type) : _type(type), _rate(0), _emulator(0) {
+OPL::OPL(Config::OplType type) : _type(type), _rate(0), _emulator(nullptr) {
 }
 
 OPL::~OPL() {
@@ -159,7 +159,7 @@ OPL::~OPL() {
 
 void OPL::free() {
 	delete _emulator;
-	_emulator = 0;
+	_emulator = nullptr;
 }
 
 bool OPL::init() {
diff --git a/audio/softsynth/opl/mame.cpp b/audio/softsynth/opl/mame.cpp
index cce52686a4..6e465946e2 100644
--- a/audio/softsynth/opl/mame.cpp
+++ b/audio/softsynth/opl/mame.cpp
@@ -50,7 +50,7 @@ namespace MAME {
 OPL::~OPL() {
 	stop();
 	MAME::OPLDestroy(_opl);
-	_opl = 0;
+	_opl = nullptr;
 }
 
 bool OPL::init() {
@@ -61,7 +61,7 @@ bool OPL::init() {
 
 	_opl = MAME::makeAdLibOPL(g_system->getMixer()->getOutputRate());
 
-	return (_opl != 0);
+	return (_opl != nullptr);
 }
 
 void OPL::reset() {
@@ -248,7 +248,7 @@ static int RATE_0[16]=
 static int num_lock = 0;
 
 /* work table */
-static void *cur_chip = NULL;	/* current chip point */
+static void *cur_chip = nullptr;	/* current chip point */
 /* currenct chip state */
 /* static OPLSAMPLE  *bufL,*bufR; */
 static OPL_CH *S_CH;
@@ -681,22 +681,22 @@ static int OPLOpenTable(void) {
 #else
 
 	/* allocate dynamic tables */
-	if ((TL_TABLE = (int *)malloc(TL_MAX * 2 * sizeof(int))) == NULL)
+	if ((TL_TABLE = (int *)malloc(TL_MAX * 2 * sizeof(int))) == nullptr)
 		return 0;
 
-	if ((SIN_TABLE = (int **)malloc(SIN_ENT * 4 * sizeof(int *))) == NULL) {
+	if ((SIN_TABLE = (int **)malloc(SIN_ENT * 4 * sizeof(int *))) == nullptr) {
 		free(TL_TABLE);
 		return 0;
 	}
 #endif
 
-	if ((AMS_TABLE = (int *)malloc(AMS_ENT * 2 * sizeof(int))) == NULL) {
+	if ((AMS_TABLE = (int *)malloc(AMS_ENT * 2 * sizeof(int))) == nullptr) {
 		free(TL_TABLE);
 		free(SIN_TABLE);
 		return 0;
 	}
 
-	if ((VIB_TABLE = (int *)malloc(VIB_ENT * 2 * sizeof(int))) == NULL) {
+	if ((VIB_TABLE = (int *)malloc(VIB_ENT * 2 * sizeof(int))) == nullptr) {
 		free(TL_TABLE);
 		free(SIN_TABLE);
 		free(AMS_TABLE);
@@ -1010,7 +1010,7 @@ static int OPL_LockTable(void) {
 	if (num_lock>1)
 		return 0;
 	/* first time */
-	cur_chip = NULL;
+	cur_chip = nullptr;
 	/* allocate total level table (128kb space) */
 	if (!OPLOpenTable()) {
 		num_lock--;
@@ -1025,7 +1025,7 @@ static void OPL_UnLockTable(void) {
 	if (num_lock)
 		return;
 	/* last time */
-	cur_chip = NULL;
+	cur_chip = nullptr;
 	OPLCloseTable();
 }
 
@@ -1122,15 +1122,15 @@ FM_OPL *OPLCreate(int type, int clock, int rate) {
 	int max_ch = 9; /* normaly 9 channels */
 
 	if (OPL_LockTable() == -1)
-		return NULL;
+		return nullptr;
 	/* allocate OPL state space */
 	state_size  = sizeof(FM_OPL);
 	state_size += sizeof(OPL_CH) * max_ch;
 
 	/* allocate memory block */
 	ptr = (char *)calloc(state_size, 1);
-	if (ptr == NULL)
-		return NULL;
+	if (ptr == nullptr)
+		return nullptr;
 
 	/* clear */
 	memset(ptr, 0, state_size);
diff --git a/audio/soundfont/rifffile.cpp b/audio/soundfont/rifffile.cpp
index 8b7553a7f6..23c49f66d2 100644
--- a/audio/soundfont/rifffile.cpp
+++ b/audio/soundfont/rifffile.cpp
@@ -38,9 +38,9 @@ void Chunk::SetData(const void *src, uint32 datasize) {
 
 	// set the size and copy from the data source
 	datasize = GetPaddedSize(_size);
-	if (_data != NULL) {
+	if (_data != nullptr) {
 		delete[] _data;
-		_data = NULL;
+		_data = nullptr;
 	}
 	_data = new uint8[datasize];
 	memcpy(_data, src, _size);
diff --git a/audio/soundfont/sf2file.cpp b/audio/soundfont/sf2file.cpp
index 14871f34a9..ac4af00e77 100644
--- a/audio/soundfont/sf2file.cpp
+++ b/audio/soundfont/sf2file.cpp
@@ -420,25 +420,25 @@ SF2File::SF2File(SynthFile *synthfile) : RiffFile(synthfile->_name, "sfbk") {
 		sampOffset = samp.dwEnd + 46;  // plus the 46 padding samples required by sf2 spec
 
 		// Search through all regions for an associated sampInfo structure with this sample
-		SynthSampInfo *sampInfo = NULL;
+		SynthSampInfo *sampInfo = nullptr;
 		for (size_t j = 0; j < numInstrs; j++) {
 			SynthInstr *instr = synthfile->_vInstrs[j];
 
 			size_t numRgns = instr->_vRgns.size();
 			for (size_t k = 0; k < numRgns; k++) {
 				SynthRgn *rgn = instr->_vRgns[k];
-				if (rgn->_tableIndex == i && rgn->_sampinfo != NULL) {
+				if (rgn->_tableIndex == i && rgn->_sampinfo != nullptr) {
 					sampInfo = rgn->_sampinfo;
 					break;
 				}
 			}
-			if (sampInfo != NULL)
+			if (sampInfo != nullptr)
 				break;
 		}
 		//  If we didn't find a rgn association, then it should be in the SynthWave structure.
-		if (sampInfo == NULL)
+		if (sampInfo == nullptr)
 			sampInfo = wave->_sampinfo;
-		assert(sampInfo != NULL);
+		assert(sampInfo != nullptr);
 
 		samp.dwStartloop = samp.dwStart + sampInfo->_ulLoopStart;
 		samp.dwEndloop = samp.dwStartloop + sampInfo->_ulLoopLength;
diff --git a/audio/soundfont/vgminstrset.cpp b/audio/soundfont/vgminstrset.cpp
index 285da44ea9..39d8459539 100644
--- a/audio/soundfont/vgminstrset.cpp
+++ b/audio/soundfont/vgminstrset.cpp
@@ -58,7 +58,7 @@ bool VGMInstrSet::Load() {
 	if (_aInstrs.size() == 0)
 		return false;
 
-	if (_sampColl != NULL) {
+	if (_sampColl != nullptr) {
 		if (!_sampColl->Load()) {
 			error("Failed to load VGMSampColl");
 		}
diff --git a/audio/soundfont/vgmsamp.cpp b/audio/soundfont/vgmsamp.cpp
index d84a111e8e..b11eb1607e 100644
--- a/audio/soundfont/vgmsamp.cpp
+++ b/audio/soundfont/vgmsamp.cpp
@@ -66,7 +66,7 @@ double VGMSamp::GetCompressionRatio() {
 VGMSampColl::VGMSampColl(RawFile *rawfile, uint32 offset, uint32 length,
 						 Common::String theName)
 		: VGMFile(rawfile, offset, length, theName),
-		  _parInstrSet(NULL),
+		  _parInstrSet(nullptr),
 		  _bLoaded(false),
 		  _sampDataOffset(0) {
 	AddContainer<VGMSamp>(_samples);




More information about the Scummvm-git-logs mailing list