Add horizontal scroll shmup sample game
This commit is contained in:
parent
d1104e1eb3
commit
c5fc186336
|
@ -0,0 +1,131 @@
|
||||||
|
#include "sidfx.h"
|
||||||
|
|
||||||
|
enum SIDFXState
|
||||||
|
{
|
||||||
|
SIDFX_IDLE,
|
||||||
|
SIDFX_RESET_0,
|
||||||
|
SIDFX_RESET_1,
|
||||||
|
SIDFX_READY,
|
||||||
|
SIDFX_PLAY,
|
||||||
|
SIDFX_WAIT
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct SIDFXChannel
|
||||||
|
{
|
||||||
|
SIDFX * com;
|
||||||
|
byte delay, cnt;
|
||||||
|
SIDFXState state;
|
||||||
|
unsigned freq;
|
||||||
|
|
||||||
|
} channels[3];
|
||||||
|
|
||||||
|
void sidfx_init(void)
|
||||||
|
{
|
||||||
|
for(char i=0; i<3; i++)
|
||||||
|
{
|
||||||
|
channels[i].com = nullptr;
|
||||||
|
channels[i].state = SIDFX_IDLE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sidfx_play(byte chn, SIDFX * fx, byte cnt)
|
||||||
|
{
|
||||||
|
if (channels[chn].state == SIDFX_IDLE)
|
||||||
|
channels[chn].state = SIDFX_READY;
|
||||||
|
else
|
||||||
|
channels[chn].state = SIDFX_RESET_0;
|
||||||
|
|
||||||
|
channels[chn].com = fx;
|
||||||
|
channels[chn].cnt = cnt - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sidfx_stop(byte chn)
|
||||||
|
{
|
||||||
|
channels[chn].com = nullptr;
|
||||||
|
if (channels[chn].state != SIDFX_IDLE)
|
||||||
|
channels[chn].state = SIDFX_RESET_0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sidfx_loop(void)
|
||||||
|
{
|
||||||
|
for(byte ch=0; ch<3; ch++)
|
||||||
|
{
|
||||||
|
switch (channels[ch].state)
|
||||||
|
{
|
||||||
|
case SIDFX_IDLE:
|
||||||
|
break;
|
||||||
|
case SIDFX_RESET_0:
|
||||||
|
sid.voices[ch].ctrl = 0;
|
||||||
|
sid.voices[ch].attdec = 0;
|
||||||
|
sid.voices[ch].susrel = 0;
|
||||||
|
channels[ch].state = SIDFX_RESET_1;
|
||||||
|
break;
|
||||||
|
case SIDFX_RESET_1:
|
||||||
|
sid.voices[ch].ctrl = SID_CTRL_TEST;
|
||||||
|
channels[ch].state = SIDFX_READY;
|
||||||
|
break;
|
||||||
|
case SIDFX_READY:
|
||||||
|
if (channels[ch].com)
|
||||||
|
{
|
||||||
|
channels[ch].freq = channels[ch].com->freq;
|
||||||
|
sid.voices[ch].freq = channels[ch].com->freq;
|
||||||
|
sid.voices[ch].pwm = channels[ch].com->pwm;
|
||||||
|
sid.voices[ch].attdec = channels[ch].com->attdec;
|
||||||
|
sid.voices[ch].susrel = channels[ch].com->susrel;
|
||||||
|
sid.voices[ch].ctrl = channels[ch].com->ctrl;
|
||||||
|
channels[ch].delay = channels[ch].com->time1;
|
||||||
|
channels[ch].state = SIDFX_PLAY;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
channels[ch].state = SIDFX_IDLE;
|
||||||
|
break;
|
||||||
|
case SIDFX_PLAY:
|
||||||
|
if (channels[ch].com->dfreq)
|
||||||
|
{
|
||||||
|
channels[ch].freq += channels[ch].com->dfreq;
|
||||||
|
sid.voices[ch].freq = channels[ch].freq;
|
||||||
|
}
|
||||||
|
if (channels[ch].delay)
|
||||||
|
channels[ch].delay--;
|
||||||
|
else if (channels[ch].com->time0)
|
||||||
|
{
|
||||||
|
sid.voices[ch].ctrl = channels[ch].com->ctrl & ~SID_CTRL_GATE;
|
||||||
|
channels[ch].delay = channels[ch].com->time0;
|
||||||
|
channels[ch].state = SIDFX_WAIT;
|
||||||
|
}
|
||||||
|
else if (channels[ch].cnt)
|
||||||
|
{
|
||||||
|
channels[ch].cnt--;
|
||||||
|
channels[ch].com++;
|
||||||
|
channels[ch].state = SIDFX_READY;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
channels[ch].com = nullptr;
|
||||||
|
channels[ch].state = SIDFX_RESET_0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SIDFX_WAIT:
|
||||||
|
if (channels[ch].com->dfreq)
|
||||||
|
{
|
||||||
|
channels[ch].freq += channels[ch].com->dfreq;
|
||||||
|
sid.voices[ch].freq = channels[ch].freq;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (channels[ch].delay)
|
||||||
|
channels[ch].delay--;
|
||||||
|
else if (channels[ch].cnt)
|
||||||
|
{
|
||||||
|
channels[ch].cnt--;
|
||||||
|
channels[ch].com++;
|
||||||
|
channels[ch].state = SIDFX_RESET_0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
channels[ch].com = nullptr;
|
||||||
|
channels[ch].state = SIDFX_RESET_0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
#ifndef SIDFX_H
|
||||||
|
#define SIDFX_H
|
||||||
|
|
||||||
|
#include <c64/sid.h>
|
||||||
|
|
||||||
|
struct SIDFX
|
||||||
|
{
|
||||||
|
unsigned freq, pwm;
|
||||||
|
byte ctrl, attdec, susrel;
|
||||||
|
sbyte dfreq, dpwm;
|
||||||
|
byte time1, time0;
|
||||||
|
};
|
||||||
|
|
||||||
|
void sidfx_init(void);
|
||||||
|
|
||||||
|
void sidfx_play(byte chn, SIDFX * fx, byte cnt);
|
||||||
|
|
||||||
|
void sidfx_stop(byte chn);
|
||||||
|
|
||||||
|
void sidfx_loop(void);
|
||||||
|
|
||||||
|
#pragma compile("sidfx.c")
|
||||||
|
|
||||||
|
#endif
|
|
@ -728,6 +728,23 @@ bool NativeCodeInstruction::ChangesZeroPage(int address) const
|
||||||
{
|
{
|
||||||
if (mMode == ASMIM_ZERO_PAGE && mAddress == address)
|
if (mMode == ASMIM_ZERO_PAGE && mAddress == address)
|
||||||
return mType == ASMIT_INC || mType == ASMIT_DEC || mType == ASMIT_ASL || mType == ASMIT_LSR || mType == ASMIT_ROL || mType == ASMIT_ROR || mType == ASMIT_STA || mType == ASMIT_STX || mType == ASMIT_STY;
|
return mType == ASMIT_INC || mType == ASMIT_DEC || mType == ASMIT_ASL || mType == ASMIT_LSR || mType == ASMIT_ROL || mType == ASMIT_ROR || mType == ASMIT_STA || mType == ASMIT_STX || mType == ASMIT_STY;
|
||||||
|
else if (mType == ASMIT_JSR)
|
||||||
|
{
|
||||||
|
if (address >= BC_REG_ACCU && address < BC_REG_ACCU + 4)
|
||||||
|
return true;
|
||||||
|
if (address >= BC_REG_WORK && address < BC_REG_WORK + 8)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (!(mFlags & NCIF_RUNTIME) || (mFlags & NCIF_FEXEC))
|
||||||
|
{
|
||||||
|
if (address >= BC_REG_FPARAMS && address < BC_REG_FPARAMS_END)
|
||||||
|
return true;
|
||||||
|
if (address >= BC_REG_TMP && address < BC_REG_TMP_SAVED)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -924,6 +941,41 @@ bool NativeCodeInstruction::IsSame(const NativeCodeInstruction& ins) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool NativeCodeInstruction::MayBeSameAddress(const NativeCodeInstruction& ins) const
|
||||||
|
{
|
||||||
|
if (ins.mMode == ASMIM_ZERO_PAGE)
|
||||||
|
{
|
||||||
|
if (mMode == ASMIM_ZERO_PAGE)
|
||||||
|
return mAddress == ins.mAddress;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (ins.mMode == ASMIM_ZERO_PAGE_X || ins.mMode == ASMIM_ZERO_PAGE_Y)
|
||||||
|
{
|
||||||
|
return mMode == ASMIM_ZERO_PAGE || mMode == ASMIM_INDIRECT_X || mMode == ASMIM_INDIRECT_Y || mMode == ASMIM_ZERO_PAGE_X || mMode == ASMIM_ZERO_PAGE_Y;
|
||||||
|
}
|
||||||
|
else if (ins.mMode == ASMIM_ABSOLUTE)
|
||||||
|
{
|
||||||
|
if (mMode == ASMIM_ABSOLUTE)
|
||||||
|
return mLinkerObject == ins.mLinkerObject && mAddress == ins.mAddress;
|
||||||
|
else if (mMode == ASMIM_ABSOLUTE_X || mMode == ASMIM_ABSOLUTE_Y)
|
||||||
|
return mLinkerObject == ins.mLinkerObject;
|
||||||
|
else
|
||||||
|
return mMode == ASMIM_INDIRECT_Y || mMode == ASMIM_INDIRECT_X;
|
||||||
|
}
|
||||||
|
else if (ins.mMode == ASMIM_ABSOLUTE_X || ins.mMode == ASMIM_ABSOLUTE_Y)
|
||||||
|
{
|
||||||
|
if (mMode == ASMIM_ABSOLUTE || mMode == ASMIM_ABSOLUTE_X || mMode == ASMIM_ABSOLUTE_Y)
|
||||||
|
return mLinkerObject == ins.mLinkerObject;
|
||||||
|
else
|
||||||
|
return mMode == ASMIM_INDIRECT_Y || mMode == ASMIM_INDIRECT_X;
|
||||||
|
}
|
||||||
|
else if (ins.mMode == ASMIM_INDIRECT_Y || ins.mMode == ASMIM_INDIRECT_X)
|
||||||
|
return mMode == ASMIM_ABSOLUTE || mMode == ASMIM_ABSOLUTE_X || mMode == ASMIM_ABSOLUTE_Y || mMode == ASMIM_INDIRECT_Y || mMode == ASMIM_INDIRECT_X;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool NativeCodeInstruction::MayBeChangedOnAddress(const NativeCodeInstruction& ins) const
|
bool NativeCodeInstruction::MayBeChangedOnAddress(const NativeCodeInstruction& ins) const
|
||||||
{
|
{
|
||||||
if (!ins.ChangesAddress())
|
if (!ins.ChangesAddress())
|
||||||
|
@ -9937,6 +9989,27 @@ bool NativeCodeBasicBlock::JoinTailCodeSequences(NativeCodeProcedure* proc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if 1
|
||||||
|
if (mIns.Size() >= 1 && mIns.Last().mType == ASMIT_STA && mIns.Last().mMode == ASMIM_ZERO_PAGE && mTrueJump && mFalseJump)
|
||||||
|
{
|
||||||
|
const NativeCodeInstruction& ins(mIns.Last());
|
||||||
|
|
||||||
|
if (mTrueJump->mEntryRequiredRegs[ins.mAddress] && !mFalseJump->mEntryRequiredRegs[ins.mAddress] && mTrueJump->mEntryBlocks.Size() == 1)
|
||||||
|
{
|
||||||
|
mTrueJump->mIns.Insert(0, ins);
|
||||||
|
mIns.Remove(mIns.Size() - 1);
|
||||||
|
mTrueJump->mEntryRequiredRegs += CPU_REG_A;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
else if (mFalseJump->mEntryRequiredRegs[ins.mAddress] && !mTrueJump->mEntryRequiredRegs[ins.mAddress] && mFalseJump->mEntryBlocks.Size() == 1)
|
||||||
|
{
|
||||||
|
mFalseJump->mIns.Insert(0, ins);
|
||||||
|
mIns.Remove(mIns.Size() - 1);
|
||||||
|
mFalseJump->mEntryRequiredRegs += CPU_REG_A;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#if 1
|
#if 1
|
||||||
if (mTrueJump && mFalseJump && !mTrueJump->mFalseJump && !mFalseJump->mFalseJump && mTrueJump->mTrueJump == mFalseJump->mTrueJump)
|
if (mTrueJump && mFalseJump && !mTrueJump->mFalseJump && !mFalseJump->mFalseJump && mTrueJump->mTrueJump == mFalseJump->mTrueJump)
|
||||||
{
|
{
|
||||||
|
@ -10113,10 +10186,10 @@ bool NativeCodeBasicBlock::CheckSingleUseGlobalLoad(int reg, int at, const Nativ
|
||||||
{
|
{
|
||||||
if (!mPatched)
|
if (!mPatched)
|
||||||
{
|
{
|
||||||
mPatched = true;
|
|
||||||
|
|
||||||
if (at == 0)
|
if (at == 0)
|
||||||
{
|
{
|
||||||
|
mPatched = true;
|
||||||
|
|
||||||
if (!mEntryRequiredRegs[reg])
|
if (!mEntryRequiredRegs[reg])
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -11501,9 +11574,11 @@ bool NativeCodeBasicBlock::MoveAbsoluteLoadStoreUp(int at)
|
||||||
}
|
}
|
||||||
if (mIns[j].ChangesZeroPage(mIns[at].mAddress))
|
if (mIns[j].ChangesZeroPage(mIns[at].mAddress))
|
||||||
return false;
|
return false;
|
||||||
if (mIns[j].ChangesGlobalMemory())
|
if (mIns[j].MayBeSameAddress(mIns[at + 1]))
|
||||||
return false;
|
return false;
|
||||||
if (mIns[j].SameEffectiveAddress(mIns[at + 1]))
|
if (mIns[at + 1].mMode == ASMIM_ABSOLUTE_X && mIns[j].ChangesXReg())
|
||||||
|
return false;
|
||||||
|
if (mIns[at + 1].mMode == ASMIM_ABSOLUTE_Y && mIns[j].ChangesYReg())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
j--;
|
j--;
|
||||||
|
@ -14260,7 +14335,7 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
// move load (),y store zp down to potential user
|
// move load (),y store zp down to potential user
|
||||||
for (int i = 2; i + 2 < mIns.Size(); i++)
|
for (int i = 2; i + 1 < mIns.Size(); i++)
|
||||||
{
|
{
|
||||||
if (mIns[i].mType == ASMIT_LDA && mIns[i].mMode == ASMIM_INDIRECT_Y && mIns[i + 1].mType == ASMIT_STA && mIns[i + 1].mMode == ASMIM_ZERO_PAGE && !(mIns[i + 1].mLive & (LIVE_CPU_REG_A | LIVE_CPU_REG_Z)))
|
if (mIns[i].mType == ASMIT_LDA && mIns[i].mMode == ASMIM_INDIRECT_Y && mIns[i + 1].mType == ASMIT_STA && mIns[i + 1].mMode == ASMIM_ZERO_PAGE && !(mIns[i + 1].mLive & (LIVE_CPU_REG_A | LIVE_CPU_REG_Z)))
|
||||||
{
|
{
|
||||||
|
@ -14277,7 +14352,9 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(NativeCodeProcedure* proc, int pass
|
||||||
|
|
||||||
for (int i = 2; i + 1 < mIns.Size(); i++)
|
for (int i = 2; i + 1 < mIns.Size(); i++)
|
||||||
{
|
{
|
||||||
if (mIns[i].mType == ASMIT_LDA && mIns[i].mMode == ASMIM_ZERO_PAGE && mIns[i + 1].mType == ASMIT_STA && mIns[i + 1].mMode == ASMIM_ABSOLUTE && !(mIns[i + 1].mLive & (LIVE_CPU_REG_A | LIVE_CPU_REG_Z)))
|
if (mIns[i].mType == ASMIT_LDA && mIns[i].mMode == ASMIM_ZERO_PAGE && mIns[i + 1].mType == ASMIT_STA &&
|
||||||
|
(mIns[i + 1].mMode == ASMIM_ABSOLUTE || mIns[i + 1].mMode == ASMIM_ABSOLUTE_X || mIns[i + 1].mMode == ASMIM_ABSOLUTE_Y) &&
|
||||||
|
!(mIns[i + 1].mLive & (LIVE_CPU_REG_A | LIVE_CPU_REG_Z)))
|
||||||
{
|
{
|
||||||
if (MoveAbsoluteLoadStoreUp(i))
|
if (MoveAbsoluteLoadStoreUp(i))
|
||||||
changed = true;
|
changed = true;
|
||||||
|
|
|
@ -106,6 +106,7 @@ public:
|
||||||
bool ChangesGlobalMemory(void) const;
|
bool ChangesGlobalMemory(void) const;
|
||||||
bool SameEffectiveAddress(const NativeCodeInstruction& ins) const;
|
bool SameEffectiveAddress(const NativeCodeInstruction& ins) const;
|
||||||
bool MayBeChangedOnAddress(const NativeCodeInstruction& ins) const;
|
bool MayBeChangedOnAddress(const NativeCodeInstruction& ins) const;
|
||||||
|
bool MayBeSameAddress(const NativeCodeInstruction& ins) const;
|
||||||
bool IsSame(const NativeCodeInstruction& ins) const;
|
bool IsSame(const NativeCodeInstruction& ins) const;
|
||||||
bool IsCommutative(void) const;
|
bool IsCommutative(void) const;
|
||||||
bool IsShift(void) const;
|
bool IsShift(void) const;
|
||||||
|
|
|
@ -73,7 +73,7 @@ int main2(int argc, const char** argv)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
strcpy(strProductName, "oscar64");
|
strcpy(strProductName, "oscar64");
|
||||||
strcpy(strProductVersion, "1.4.98");
|
strcpy(strProductVersion, "1.4.99");
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
uint32_t length = sizeof(basePath);
|
uint32_t length = sizeof(basePath);
|
||||||
|
|
|
@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,4,98,0
|
FILEVERSION 1,4,99,0
|
||||||
PRODUCTVERSION 1,4,98,0
|
PRODUCTVERSION 1,4,99,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -43,12 +43,12 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "oscar64"
|
VALUE "CompanyName", "oscar64"
|
||||||
VALUE "FileDescription", "oscar64 compiler"
|
VALUE "FileDescription", "oscar64 compiler"
|
||||||
VALUE "FileVersion", "1.4.98.0"
|
VALUE "FileVersion", "1.4.99.0"
|
||||||
VALUE "InternalName", "oscar64.exe"
|
VALUE "InternalName", "oscar64.exe"
|
||||||
VALUE "LegalCopyright", "Copyright (C) 2021"
|
VALUE "LegalCopyright", "Copyright (C) 2021"
|
||||||
VALUE "OriginalFilename", "oscar64.exe"
|
VALUE "OriginalFilename", "oscar64.exe"
|
||||||
VALUE "ProductName", "oscar64"
|
VALUE "ProductName", "oscar64"
|
||||||
VALUE "ProductVersion", "1.4.98.0"
|
VALUE "ProductVersion", "1.4.99.0"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
|
@ -34,12 +34,6 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_03D7013B0D39A89CEA9D267005ADCE39"
|
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
|
||||||
}
|
|
||||||
"Entry"
|
|
||||||
{
|
|
||||||
"MsmKey" = "8:_04ABABC55200450383686DD782DD1548"
|
"MsmKey" = "8:_04ABABC55200450383686DD782DD1548"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -64,6 +58,12 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
|
"MsmKey" = "8:_0CC2E11595B34DF0A003DF534A5AADF5"
|
||||||
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
}
|
||||||
|
"Entry"
|
||||||
|
{
|
||||||
"MsmKey" = "8:_0D8B657E4A954DBFAF14055CDFFB384C"
|
"MsmKey" = "8:_0D8B657E4A954DBFAF14055CDFFB384C"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -154,12 +154,6 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_326B44043E3720E0A341FB5627DA8873"
|
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
|
||||||
}
|
|
||||||
"Entry"
|
|
||||||
{
|
|
||||||
"MsmKey" = "8:_3277DE1463544F67B7E7390175F8A9CF"
|
"MsmKey" = "8:_3277DE1463544F67B7E7390175F8A9CF"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -172,12 +166,6 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_36B4A1247BFCE001E1BAE7560E9CFEEA"
|
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
|
||||||
}
|
|
||||||
"Entry"
|
|
||||||
{
|
|
||||||
"MsmKey" = "8:_379EE3C17FEC4C5EA79D07668CD05FC4"
|
"MsmKey" = "8:_379EE3C17FEC4C5EA79D07668CD05FC4"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -250,12 +238,6 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_458189403F0009BC49371204B74F3BD3"
|
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
|
||||||
}
|
|
||||||
"Entry"
|
|
||||||
{
|
|
||||||
"MsmKey" = "8:_47A877D439EE429BAB64C52FEF69EDA4"
|
"MsmKey" = "8:_47A877D439EE429BAB64C52FEF69EDA4"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -274,6 +256,12 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
|
"MsmKey" = "8:_4CAC4169D7CC4A2099042927E32B2184"
|
||||||
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
}
|
||||||
|
"Entry"
|
||||||
|
{
|
||||||
"MsmKey" = "8:_539501D7FC4941B8AEE943A2D5C74703"
|
"MsmKey" = "8:_539501D7FC4941B8AEE943A2D5C74703"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -322,6 +310,12 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
|
"MsmKey" = "8:_652D33F4F54F4974AA6C4CD23A323FD1"
|
||||||
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
}
|
||||||
|
"Entry"
|
||||||
|
{
|
||||||
"MsmKey" = "8:_67C8F824E02B4211B315AB32AB7ABBB1"
|
"MsmKey" = "8:_67C8F824E02B4211B315AB32AB7ABBB1"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -358,8 +352,8 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_749A2BA18335F50EB53CCE7029861FBC"
|
"MsmKey" = "8:_7393641DDDD742BCA845F192181E1294"
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
|
@ -418,8 +412,8 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_8667075410229C38BF63AC1CC776055E"
|
"MsmKey" = "8:_814F6BFC9788449DB259F99386D39AFD"
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
|
@ -586,6 +580,12 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
|
"MsmKey" = "8:_B59AF91A39B749DF9E6B95CD35C5C6AC"
|
||||||
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
}
|
||||||
|
"Entry"
|
||||||
|
{
|
||||||
"MsmKey" = "8:_B85448D515F0487FB6845119AE346F1D"
|
"MsmKey" = "8:_B85448D515F0487FB6845119AE346F1D"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -694,6 +694,12 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
|
"MsmKey" = "8:_D2CCF52F2336415EAD896A2C5410D5E8"
|
||||||
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
}
|
||||||
|
"Entry"
|
||||||
|
{
|
||||||
"MsmKey" = "8:_D34AB6F4EE6C4E18A8C6D44CC8E23CB7"
|
"MsmKey" = "8:_D34AB6F4EE6C4E18A8C6D44CC8E23CB7"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -718,12 +724,6 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_DD5A4DD822437085CD584319732F2D4D"
|
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
|
||||||
}
|
|
||||||
"Entry"
|
|
||||||
{
|
|
||||||
"MsmKey" = "8:_DEADBEA270134B77800770802B21859C"
|
"MsmKey" = "8:_DEADBEA270134B77800770802B21859C"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -784,12 +784,6 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_EA3C0BCB01F2639DFA2E37EC8436E5F6"
|
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
|
||||||
}
|
|
||||||
"Entry"
|
|
||||||
{
|
|
||||||
"MsmKey" = "8:_ED872D39D58443D590B7C80604BC0FF4"
|
"MsmKey" = "8:_ED872D39D58443D590B7C80604BC0FF4"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -820,12 +814,6 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_F20F5618C7576D758C01D89C87469AF8"
|
|
||||||
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
|
||||||
}
|
|
||||||
"Entry"
|
|
||||||
{
|
|
||||||
"MsmKey" = "8:_F35970F9D8FA46B09F36D7E9DE5532CA"
|
"MsmKey" = "8:_F35970F9D8FA46B09F36D7E9DE5532CA"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -1001,26 +989,6 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_03D7013B0D39A89CEA9D267005ADCE39"
|
|
||||||
{
|
|
||||||
"SourcePath" = "8:VCRUNTIME140.dll"
|
|
||||||
"TargetName" = "8:VCRUNTIME140.dll"
|
|
||||||
"Tag" = "8:"
|
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
|
||||||
"Condition" = "8:"
|
|
||||||
"Transitive" = "11:FALSE"
|
|
||||||
"Vital" = "11:TRUE"
|
|
||||||
"ReadOnly" = "11:FALSE"
|
|
||||||
"Hidden" = "11:FALSE"
|
|
||||||
"System" = "11:FALSE"
|
|
||||||
"Permanent" = "11:FALSE"
|
|
||||||
"SharedLegacy" = "11:FALSE"
|
|
||||||
"PackageAs" = "3:1"
|
|
||||||
"Register" = "3:1"
|
|
||||||
"Exclude" = "11:FALSE"
|
|
||||||
"IsDependency" = "11:TRUE"
|
|
||||||
"IsolateTo" = "8:"
|
|
||||||
}
|
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_04ABABC55200450383686DD782DD1548"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_04ABABC55200450383686DD782DD1548"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\games\\lander.c"
|
"SourcePath" = "8:..\\samples\\games\\lander.c"
|
||||||
|
@ -1101,6 +1069,26 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0CC2E11595B34DF0A003DF534A5AADF5"
|
||||||
|
{
|
||||||
|
"SourcePath" = "8:..\\include\\audio\\sidfx.h"
|
||||||
|
"TargetName" = "8:sidfx.h"
|
||||||
|
"Tag" = "8:"
|
||||||
|
"Folder" = "8:_A4C8078BC7A74CCABB1050E80BC79950"
|
||||||
|
"Condition" = "8:"
|
||||||
|
"Transitive" = "11:FALSE"
|
||||||
|
"Vital" = "11:TRUE"
|
||||||
|
"ReadOnly" = "11:FALSE"
|
||||||
|
"Hidden" = "11:FALSE"
|
||||||
|
"System" = "11:FALSE"
|
||||||
|
"Permanent" = "11:FALSE"
|
||||||
|
"SharedLegacy" = "11:FALSE"
|
||||||
|
"PackageAs" = "3:1"
|
||||||
|
"Register" = "3:1"
|
||||||
|
"Exclude" = "11:FALSE"
|
||||||
|
"IsDependency" = "11:FALSE"
|
||||||
|
"IsolateTo" = "8:"
|
||||||
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0D8B657E4A954DBFAF14055CDFFB384C"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0D8B657E4A954DBFAF14055CDFFB384C"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\include\\crt.c"
|
"SourcePath" = "8:..\\include\\crt.c"
|
||||||
|
@ -1401,26 +1389,6 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_326B44043E3720E0A341FB5627DA8873"
|
|
||||||
{
|
|
||||||
"SourcePath" = "8:api-ms-win-crt-stdio-l1-1-0.dll"
|
|
||||||
"TargetName" = "8:api-ms-win-crt-stdio-l1-1-0.dll"
|
|
||||||
"Tag" = "8:"
|
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
|
||||||
"Condition" = "8:"
|
|
||||||
"Transitive" = "11:FALSE"
|
|
||||||
"Vital" = "11:TRUE"
|
|
||||||
"ReadOnly" = "11:FALSE"
|
|
||||||
"Hidden" = "11:FALSE"
|
|
||||||
"System" = "11:FALSE"
|
|
||||||
"Permanent" = "11:FALSE"
|
|
||||||
"SharedLegacy" = "11:FALSE"
|
|
||||||
"PackageAs" = "3:1"
|
|
||||||
"Register" = "3:1"
|
|
||||||
"Exclude" = "11:FALSE"
|
|
||||||
"IsDependency" = "11:TRUE"
|
|
||||||
"IsolateTo" = "8:"
|
|
||||||
}
|
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3277DE1463544F67B7E7390175F8A9CF"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3277DE1463544F67B7E7390175F8A9CF"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\rasterirq\\autocrawler.c"
|
"SourcePath" = "8:..\\samples\\rasterirq\\autocrawler.c"
|
||||||
|
@ -1461,26 +1429,6 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_36B4A1247BFCE001E1BAE7560E9CFEEA"
|
|
||||||
{
|
|
||||||
"SourcePath" = "8:api-ms-win-crt-math-l1-1-0.dll"
|
|
||||||
"TargetName" = "8:api-ms-win-crt-math-l1-1-0.dll"
|
|
||||||
"Tag" = "8:"
|
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
|
||||||
"Condition" = "8:"
|
|
||||||
"Transitive" = "11:FALSE"
|
|
||||||
"Vital" = "11:TRUE"
|
|
||||||
"ReadOnly" = "11:FALSE"
|
|
||||||
"Hidden" = "11:FALSE"
|
|
||||||
"System" = "11:FALSE"
|
|
||||||
"Permanent" = "11:FALSE"
|
|
||||||
"SharedLegacy" = "11:FALSE"
|
|
||||||
"PackageAs" = "3:1"
|
|
||||||
"Register" = "3:1"
|
|
||||||
"Exclude" = "11:FALSE"
|
|
||||||
"IsDependency" = "11:TRUE"
|
|
||||||
"IsolateTo" = "8:"
|
|
||||||
}
|
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_379EE3C17FEC4C5EA79D07668CD05FC4"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_379EE3C17FEC4C5EA79D07668CD05FC4"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\memmap\\easyflash.c"
|
"SourcePath" = "8:..\\samples\\memmap\\easyflash.c"
|
||||||
|
@ -1721,26 +1669,6 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_458189403F0009BC49371204B74F3BD3"
|
|
||||||
{
|
|
||||||
"SourcePath" = "8:api-ms-win-crt-string-l1-1-0.dll"
|
|
||||||
"TargetName" = "8:api-ms-win-crt-string-l1-1-0.dll"
|
|
||||||
"Tag" = "8:"
|
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
|
||||||
"Condition" = "8:"
|
|
||||||
"Transitive" = "11:FALSE"
|
|
||||||
"Vital" = "11:TRUE"
|
|
||||||
"ReadOnly" = "11:FALSE"
|
|
||||||
"Hidden" = "11:FALSE"
|
|
||||||
"System" = "11:FALSE"
|
|
||||||
"Permanent" = "11:FALSE"
|
|
||||||
"SharedLegacy" = "11:FALSE"
|
|
||||||
"PackageAs" = "3:1"
|
|
||||||
"Register" = "3:1"
|
|
||||||
"Exclude" = "11:FALSE"
|
|
||||||
"IsDependency" = "11:TRUE"
|
|
||||||
"IsolateTo" = "8:"
|
|
||||||
}
|
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_47A877D439EE429BAB64C52FEF69EDA4"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_47A877D439EE429BAB64C52FEF69EDA4"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\memmap\\largemem.c"
|
"SourcePath" = "8:..\\samples\\memmap\\largemem.c"
|
||||||
|
@ -1801,6 +1729,26 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4CAC4169D7CC4A2099042927E32B2184"
|
||||||
|
{
|
||||||
|
"SourcePath" = "8:..\\samples\\resources\\hscrollshmupsprites.bin"
|
||||||
|
"TargetName" = "8:hscrollshmupsprites.bin"
|
||||||
|
"Tag" = "8:"
|
||||||
|
"Folder" = "8:_758C6547998745659548D0656D380FEA"
|
||||||
|
"Condition" = "8:"
|
||||||
|
"Transitive" = "11:FALSE"
|
||||||
|
"Vital" = "11:TRUE"
|
||||||
|
"ReadOnly" = "11:FALSE"
|
||||||
|
"Hidden" = "11:FALSE"
|
||||||
|
"System" = "11:FALSE"
|
||||||
|
"Permanent" = "11:FALSE"
|
||||||
|
"SharedLegacy" = "11:FALSE"
|
||||||
|
"PackageAs" = "3:1"
|
||||||
|
"Register" = "3:1"
|
||||||
|
"Exclude" = "11:FALSE"
|
||||||
|
"IsDependency" = "11:FALSE"
|
||||||
|
"IsolateTo" = "8:"
|
||||||
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_539501D7FC4941B8AEE943A2D5C74703"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_539501D7FC4941B8AEE943A2D5C74703"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\games\\snake.c"
|
"SourcePath" = "8:..\\samples\\games\\snake.c"
|
||||||
|
@ -1961,6 +1909,26 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_652D33F4F54F4974AA6C4CD23A323FD1"
|
||||||
|
{
|
||||||
|
"SourcePath" = "8:..\\samples\\resources\\hscrollshmuptiles.bin"
|
||||||
|
"TargetName" = "8:hscrollshmuptiles.bin"
|
||||||
|
"Tag" = "8:"
|
||||||
|
"Folder" = "8:_758C6547998745659548D0656D380FEA"
|
||||||
|
"Condition" = "8:"
|
||||||
|
"Transitive" = "11:FALSE"
|
||||||
|
"Vital" = "11:TRUE"
|
||||||
|
"ReadOnly" = "11:FALSE"
|
||||||
|
"Hidden" = "11:FALSE"
|
||||||
|
"System" = "11:FALSE"
|
||||||
|
"Permanent" = "11:FALSE"
|
||||||
|
"SharedLegacy" = "11:FALSE"
|
||||||
|
"PackageAs" = "3:1"
|
||||||
|
"Register" = "3:1"
|
||||||
|
"Exclude" = "11:FALSE"
|
||||||
|
"IsDependency" = "11:FALSE"
|
||||||
|
"IsolateTo" = "8:"
|
||||||
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_67C8F824E02B4211B315AB32AB7ABBB1"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_67C8F824E02B4211B315AB32AB7ABBB1"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\games\\breakout.c"
|
"SourcePath" = "8:..\\samples\\games\\breakout.c"
|
||||||
|
@ -2081,12 +2049,12 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_749A2BA18335F50EB53CCE7029861FBC"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7393641DDDD742BCA845F192181E1294"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:api-ms-win-crt-runtime-l1-1-0.dll"
|
"SourcePath" = "8:..\\samples\\games\\hscrollshmup.c"
|
||||||
"TargetName" = "8:api-ms-win-crt-runtime-l1-1-0.dll"
|
"TargetName" = "8:hscrollshmup.c"
|
||||||
"Tag" = "8:"
|
"Tag" = "8:"
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
"Folder" = "8:_BC04C0DDE264410096618981E4E890DA"
|
||||||
"Condition" = "8:"
|
"Condition" = "8:"
|
||||||
"Transitive" = "11:FALSE"
|
"Transitive" = "11:FALSE"
|
||||||
"Vital" = "11:TRUE"
|
"Vital" = "11:TRUE"
|
||||||
|
@ -2098,7 +2066,7 @@
|
||||||
"PackageAs" = "3:1"
|
"PackageAs" = "3:1"
|
||||||
"Register" = "3:1"
|
"Register" = "3:1"
|
||||||
"Exclude" = "11:FALSE"
|
"Exclude" = "11:FALSE"
|
||||||
"IsDependency" = "11:TRUE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_749F54DFBD4D404DA9C2E2D5BA7CDDBF"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_749F54DFBD4D404DA9C2E2D5BA7CDDBF"
|
||||||
|
@ -2281,12 +2249,12 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8667075410229C38BF63AC1CC776055E"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_814F6BFC9788449DB259F99386D39AFD"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:api-ms-win-crt-filesystem-l1-1-0.dll"
|
"SourcePath" = "8:..\\include\\audio\\sidfx.c"
|
||||||
"TargetName" = "8:api-ms-win-crt-filesystem-l1-1-0.dll"
|
"TargetName" = "8:sidfx.c"
|
||||||
"Tag" = "8:"
|
"Tag" = "8:"
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
"Folder" = "8:_A4C8078BC7A74CCABB1050E80BC79950"
|
||||||
"Condition" = "8:"
|
"Condition" = "8:"
|
||||||
"Transitive" = "11:FALSE"
|
"Transitive" = "11:FALSE"
|
||||||
"Vital" = "11:TRUE"
|
"Vital" = "11:TRUE"
|
||||||
|
@ -2298,7 +2266,7 @@
|
||||||
"PackageAs" = "3:1"
|
"PackageAs" = "3:1"
|
||||||
"Register" = "3:1"
|
"Register" = "3:1"
|
||||||
"Exclude" = "11:FALSE"
|
"Exclude" = "11:FALSE"
|
||||||
"IsDependency" = "11:TRUE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8827B6B07A1C4B32B08DF784E090381D"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8827B6B07A1C4B32B08DF784E090381D"
|
||||||
|
@ -2841,6 +2809,26 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B59AF91A39B749DF9E6B95CD35C5C6AC"
|
||||||
|
{
|
||||||
|
"SourcePath" = "8:..\\samples\\resources\\hscrollshmupmap.bin"
|
||||||
|
"TargetName" = "8:hscrollshmupmap.bin"
|
||||||
|
"Tag" = "8:"
|
||||||
|
"Folder" = "8:_758C6547998745659548D0656D380FEA"
|
||||||
|
"Condition" = "8:"
|
||||||
|
"Transitive" = "11:FALSE"
|
||||||
|
"Vital" = "11:TRUE"
|
||||||
|
"ReadOnly" = "11:FALSE"
|
||||||
|
"Hidden" = "11:FALSE"
|
||||||
|
"System" = "11:FALSE"
|
||||||
|
"Permanent" = "11:FALSE"
|
||||||
|
"SharedLegacy" = "11:FALSE"
|
||||||
|
"PackageAs" = "3:1"
|
||||||
|
"Register" = "3:1"
|
||||||
|
"Exclude" = "11:FALSE"
|
||||||
|
"IsDependency" = "11:FALSE"
|
||||||
|
"IsolateTo" = "8:"
|
||||||
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B85448D515F0487FB6845119AE346F1D"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B85448D515F0487FB6845119AE346F1D"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\resources\\landersprites.bin"
|
"SourcePath" = "8:..\\samples\\resources\\landersprites.bin"
|
||||||
|
@ -3201,6 +3189,26 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D2CCF52F2336415EAD896A2C5410D5E8"
|
||||||
|
{
|
||||||
|
"SourcePath" = "8:..\\samples\\resources\\hscrollshmupchars.bin"
|
||||||
|
"TargetName" = "8:hscrollshmupchars.bin"
|
||||||
|
"Tag" = "8:"
|
||||||
|
"Folder" = "8:_758C6547998745659548D0656D380FEA"
|
||||||
|
"Condition" = "8:"
|
||||||
|
"Transitive" = "11:FALSE"
|
||||||
|
"Vital" = "11:TRUE"
|
||||||
|
"ReadOnly" = "11:FALSE"
|
||||||
|
"Hidden" = "11:FALSE"
|
||||||
|
"System" = "11:FALSE"
|
||||||
|
"Permanent" = "11:FALSE"
|
||||||
|
"SharedLegacy" = "11:FALSE"
|
||||||
|
"PackageAs" = "3:1"
|
||||||
|
"Register" = "3:1"
|
||||||
|
"Exclude" = "11:FALSE"
|
||||||
|
"IsDependency" = "11:FALSE"
|
||||||
|
"IsolateTo" = "8:"
|
||||||
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D34AB6F4EE6C4E18A8C6D44CC8E23CB7"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D34AB6F4EE6C4E18A8C6D44CC8E23CB7"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\games\\maze3d.c"
|
"SourcePath" = "8:..\\samples\\games\\maze3d.c"
|
||||||
|
@ -3281,26 +3289,6 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DD5A4DD822437085CD584319732F2D4D"
|
|
||||||
{
|
|
||||||
"SourcePath" = "8:api-ms-win-crt-heap-l1-1-0.dll"
|
|
||||||
"TargetName" = "8:api-ms-win-crt-heap-l1-1-0.dll"
|
|
||||||
"Tag" = "8:"
|
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
|
||||||
"Condition" = "8:"
|
|
||||||
"Transitive" = "11:FALSE"
|
|
||||||
"Vital" = "11:TRUE"
|
|
||||||
"ReadOnly" = "11:FALSE"
|
|
||||||
"Hidden" = "11:FALSE"
|
|
||||||
"System" = "11:FALSE"
|
|
||||||
"Permanent" = "11:FALSE"
|
|
||||||
"SharedLegacy" = "11:FALSE"
|
|
||||||
"PackageAs" = "3:1"
|
|
||||||
"Register" = "3:1"
|
|
||||||
"Exclude" = "11:FALSE"
|
|
||||||
"IsDependency" = "11:TRUE"
|
|
||||||
"IsolateTo" = "8:"
|
|
||||||
}
|
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DEADBEA270134B77800770802B21859C"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DEADBEA270134B77800770802B21859C"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\games\\connectfour.c"
|
"SourcePath" = "8:..\\samples\\games\\connectfour.c"
|
||||||
|
@ -3501,26 +3489,6 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EA3C0BCB01F2639DFA2E37EC8436E5F6"
|
|
||||||
{
|
|
||||||
"SourcePath" = "8:VERSION.dll"
|
|
||||||
"TargetName" = "8:VERSION.dll"
|
|
||||||
"Tag" = "8:"
|
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
|
||||||
"Condition" = "8:"
|
|
||||||
"Transitive" = "11:FALSE"
|
|
||||||
"Vital" = "11:TRUE"
|
|
||||||
"ReadOnly" = "11:FALSE"
|
|
||||||
"Hidden" = "11:FALSE"
|
|
||||||
"System" = "11:FALSE"
|
|
||||||
"Permanent" = "11:FALSE"
|
|
||||||
"SharedLegacy" = "11:FALSE"
|
|
||||||
"PackageAs" = "3:1"
|
|
||||||
"Register" = "3:1"
|
|
||||||
"Exclude" = "11:FALSE"
|
|
||||||
"IsDependency" = "11:TRUE"
|
|
||||||
"IsolateTo" = "8:"
|
|
||||||
}
|
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_ED872D39D58443D590B7C80604BC0FF4"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_ED872D39D58443D590B7C80604BC0FF4"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\samples\\kernalio\\fileread.c"
|
"SourcePath" = "8:..\\samples\\kernalio\\fileread.c"
|
||||||
|
@ -3621,26 +3589,6 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F20F5618C7576D758C01D89C87469AF8"
|
|
||||||
{
|
|
||||||
"SourcePath" = "8:api-ms-win-crt-locale-l1-1-0.dll"
|
|
||||||
"TargetName" = "8:api-ms-win-crt-locale-l1-1-0.dll"
|
|
||||||
"Tag" = "8:"
|
|
||||||
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
|
||||||
"Condition" = "8:"
|
|
||||||
"Transitive" = "11:FALSE"
|
|
||||||
"Vital" = "11:TRUE"
|
|
||||||
"ReadOnly" = "11:FALSE"
|
|
||||||
"Hidden" = "11:FALSE"
|
|
||||||
"System" = "11:FALSE"
|
|
||||||
"Permanent" = "11:FALSE"
|
|
||||||
"SharedLegacy" = "11:FALSE"
|
|
||||||
"PackageAs" = "3:1"
|
|
||||||
"Register" = "3:1"
|
|
||||||
"Exclude" = "11:FALSE"
|
|
||||||
"IsDependency" = "11:TRUE"
|
|
||||||
"IsolateTo" = "8:"
|
|
||||||
}
|
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F35970F9D8FA46B09F36D7E9DE5532CA"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F35970F9D8FA46B09F36D7E9DE5532CA"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\include\\c64\\charwin.h"
|
"SourcePath" = "8:..\\include\\c64\\charwin.h"
|
||||||
|
@ -3955,6 +3903,17 @@
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
"{9EF0B969-E518-4E46-987F-47570745A589}:_A4C8078BC7A74CCABB1050E80BC79950"
|
||||||
|
{
|
||||||
|
"Name" = "8:audio"
|
||||||
|
"AlwaysCreate" = "11:FALSE"
|
||||||
|
"Condition" = "8:"
|
||||||
|
"Transitive" = "11:FALSE"
|
||||||
|
"Property" = "8:_D9D33FD9864B40ECADCC2496B1BA18F8"
|
||||||
|
"Folders"
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
"{9EF0B969-E518-4E46-987F-47570745A589}:_E0C7A8689A4144D0842BCEDA85A07B5D"
|
"{9EF0B969-E518-4E46-987F-47570745A589}:_E0C7A8689A4144D0842BCEDA85A07B5D"
|
||||||
{
|
{
|
||||||
"Name" = "8:gfx"
|
"Name" = "8:gfx"
|
||||||
|
@ -3986,15 +3945,15 @@
|
||||||
{
|
{
|
||||||
"Name" = "8:Microsoft Visual Studio"
|
"Name" = "8:Microsoft Visual Studio"
|
||||||
"ProductName" = "8:oscar64"
|
"ProductName" = "8:oscar64"
|
||||||
"ProductCode" = "8:{45230711-622D-4FA7-BB9C-5357A3B7B1D0}"
|
"ProductCode" = "8:{39622A78-2972-4EF3-9E08-A2E1ECE24245}"
|
||||||
"PackageCode" = "8:{5E1C7EF9-3CBE-4341-9696-4E6823EB2A83}"
|
"PackageCode" = "8:{0520CCC0-4961-4AC1-AABA-1471E1EC2D80}"
|
||||||
"UpgradeCode" = "8:{9AB61EFF-ACAC-4079-9950-8D96615CD4EF}"
|
"UpgradeCode" = "8:{9AB61EFF-ACAC-4079-9950-8D96615CD4EF}"
|
||||||
"AspNetVersion" = "8:2.0.50727.0"
|
"AspNetVersion" = "8:2.0.50727.0"
|
||||||
"RestartWWWService" = "11:FALSE"
|
"RestartWWWService" = "11:FALSE"
|
||||||
"RemovePreviousVersions" = "11:TRUE"
|
"RemovePreviousVersions" = "11:TRUE"
|
||||||
"DetectNewerInstalledVersion" = "11:TRUE"
|
"DetectNewerInstalledVersion" = "11:TRUE"
|
||||||
"InstallAllUsers" = "11:FALSE"
|
"InstallAllUsers" = "11:FALSE"
|
||||||
"ProductVersion" = "8:1.4.98"
|
"ProductVersion" = "8:1.4.99"
|
||||||
"Manufacturer" = "8:oscar64"
|
"Manufacturer" = "8:oscar64"
|
||||||
"ARPHELPTELEPHONE" = "8:"
|
"ARPHELPTELEPHONE" = "8:"
|
||||||
"ARPHELPLINK" = "8:"
|
"ARPHELPLINK" = "8:"
|
||||||
|
|
|
@ -5,4 +5,5 @@
|
||||||
../../bin/oscar64 missile.c -O3 -n
|
../../bin/oscar64 missile.c -O3 -n
|
||||||
../../bin/oscar64 breakout.c -n
|
../../bin/oscar64 breakout.c -n
|
||||||
../../bin/oscar64 connectfour.c -n
|
../../bin/oscar64 connectfour.c -n
|
||||||
|
../../bin/oscar64 hscrollshmup.c -O2 -n
|
||||||
|
|
||||||
|
|
|
@ -4,29 +4,35 @@
|
||||||
#include <c64/joystick.h>
|
#include <c64/joystick.h>
|
||||||
#include <c64/cia.h>
|
#include <c64/cia.h>
|
||||||
#include <c64/rasterirq.h>
|
#include <c64/rasterirq.h>
|
||||||
|
#include <audio/sidfx.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
byte * const Screen = (byte *)0xc800;
|
byte * const Screen = (byte *)0xc800;
|
||||||
byte * const Font = (byte *)0xe000;
|
byte * const Font = (byte *)0xe000;
|
||||||
|
byte * const TextFont = (byte *)0xe800;
|
||||||
byte * const Color = (byte *)0xd800;
|
byte * const Color = (byte *)0xd800;
|
||||||
byte * const Sprites = (byte *)0xd000;
|
byte * const Sprites = (byte *)0xd000;
|
||||||
|
|
||||||
// Character set
|
// Character set
|
||||||
char charset[2048] = {
|
char charset[2048] = {
|
||||||
#embed "../../../assets/uridium1 - Chars.bin"
|
#embed "../resources/hscrollshmupchars.bin"
|
||||||
|
};
|
||||||
|
|
||||||
|
char tcharset[2048] = {
|
||||||
|
#embed "../resources/breakoutchars.bin"
|
||||||
};
|
};
|
||||||
|
|
||||||
char tileset[] = {
|
char tileset[] = {
|
||||||
#embed "../../../assets/uridium1 - Tiles.bin"
|
#embed "../resources/hscrollshmuptiles.bin"
|
||||||
};
|
};
|
||||||
|
|
||||||
char tilemap[128 * 5] = {
|
char tilemap[128 * 5] = {
|
||||||
#embed "../../../assets/uridium1 - Map (128x5).bin"
|
#embed "../resources/hscrollshmupmap.bin"
|
||||||
};
|
};
|
||||||
|
|
||||||
char spriteset[4096] = {
|
char spriteset[4096] = {
|
||||||
#embed 4096 0 "../../../assets/uridium1 - Sprites.bin"
|
#embed 4096 0 "../resources/hscrollshmupsprites.bin"
|
||||||
};
|
};
|
||||||
|
|
||||||
char xtileset[16][64];
|
char xtileset[16][64];
|
||||||
|
@ -39,7 +45,175 @@ char xcollision[256];
|
||||||
|
|
||||||
RIRQCode bottom, top;
|
RIRQCode bottom, top;
|
||||||
|
|
||||||
|
struct Enemy
|
||||||
|
{
|
||||||
|
int px;
|
||||||
|
byte py;
|
||||||
|
sbyte dx;
|
||||||
|
byte state, pad0, pad1, pad2;
|
||||||
|
} enemies[5];
|
||||||
|
|
||||||
|
struct Player
|
||||||
|
{
|
||||||
|
int spx;
|
||||||
|
sbyte vpx;
|
||||||
|
sbyte ax;
|
||||||
|
char aphase;
|
||||||
|
char spy;
|
||||||
|
char fdelay;
|
||||||
|
} player;
|
||||||
|
|
||||||
|
enum GameState
|
||||||
|
{
|
||||||
|
GS_START,
|
||||||
|
|
||||||
|
GS_READY, // Getting ready
|
||||||
|
|
||||||
|
GS_PLAYING,
|
||||||
|
GS_EXPLODING,
|
||||||
|
|
||||||
|
GS_GAME_OVER
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct Game
|
||||||
|
{
|
||||||
|
GameState state;
|
||||||
|
char count;
|
||||||
|
char edelay;
|
||||||
|
char ecount;
|
||||||
|
char escore;
|
||||||
|
char lives;
|
||||||
|
} game;
|
||||||
|
|
||||||
|
SIDFX SIDFXFire[1] = {{
|
||||||
|
8000, 1000,
|
||||||
|
SID_CTRL_GATE | SID_CTRL_SAW,
|
||||||
|
SID_ATK_16 | SID_DKY_114,
|
||||||
|
0x40 | SID_DKY_750,
|
||||||
|
-80, 0,
|
||||||
|
4, 30
|
||||||
|
}};
|
||||||
|
|
||||||
|
SIDFX SIDFXExplosion[1] = {{
|
||||||
|
1000, 1000,
|
||||||
|
SID_CTRL_GATE | SID_CTRL_NOISE,
|
||||||
|
SID_ATK_2 | SID_DKY_6,
|
||||||
|
0xf0 | SID_DKY_1500,
|
||||||
|
-20, 0,
|
||||||
|
8, 40
|
||||||
|
}};
|
||||||
|
|
||||||
|
SIDFX SIDFXBigExplosion[3] = {
|
||||||
|
{
|
||||||
|
1000, 1000,
|
||||||
|
SID_CTRL_GATE | SID_CTRL_SAW,
|
||||||
|
SID_ATK_2 | SID_DKY_6,
|
||||||
|
0xf0 | SID_DKY_168,
|
||||||
|
-20, 0,
|
||||||
|
4, 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
1000, 1000,
|
||||||
|
SID_CTRL_GATE | SID_CTRL_NOISE,
|
||||||
|
SID_ATK_2 | SID_DKY_6,
|
||||||
|
0xf0 | SID_DKY_168,
|
||||||
|
-20, 0,
|
||||||
|
10, 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
1000, 1000,
|
||||||
|
SID_CTRL_GATE | SID_CTRL_NOISE,
|
||||||
|
SID_ATK_2 | SID_DKY_6,
|
||||||
|
0xf0 | SID_DKY_1500,
|
||||||
|
-10, 0,
|
||||||
|
8, 80
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 0123456789012345678901234567890123456789
|
||||||
|
const char StatusText[] = s" Score: 000000 High: 000000 Lives: 0 ";
|
||||||
|
|
||||||
|
// initialize status line
|
||||||
|
void status_init(void)
|
||||||
|
{
|
||||||
|
for(char i=0; i<40; i++)
|
||||||
|
Screen[i] = StatusText[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
void status_update(void)
|
||||||
|
{
|
||||||
|
Screen[38] = game.lives + '0';
|
||||||
|
|
||||||
|
// Increment the score from a given digit on
|
||||||
|
if (game.escore)
|
||||||
|
{
|
||||||
|
char at, val = 1;
|
||||||
|
if (game.escore >= 100)
|
||||||
|
{
|
||||||
|
game.escore -= 100;
|
||||||
|
at = 11;
|
||||||
|
}
|
||||||
|
else if (game.escore >= 10)
|
||||||
|
{
|
||||||
|
game.escore -= 10;
|
||||||
|
at = 12;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
val = game.escore;
|
||||||
|
game.escore = 0;
|
||||||
|
at = 13;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Loop while there is still score to account for
|
||||||
|
while (val)
|
||||||
|
{
|
||||||
|
// Increment one character
|
||||||
|
char ch = Screen[at] + val;
|
||||||
|
val = 0;
|
||||||
|
|
||||||
|
// Check overflow
|
||||||
|
if (ch > '9')
|
||||||
|
{
|
||||||
|
ch -= 10;
|
||||||
|
val = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Screen[at] = ch;
|
||||||
|
|
||||||
|
// Next higher character
|
||||||
|
at --;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset score and update high score
|
||||||
|
void score_reset(void)
|
||||||
|
{
|
||||||
|
// Find first digit, where score and highscore differ
|
||||||
|
char i = 0;
|
||||||
|
while (i < 6 && Screen[i + 8] == Screen[i + 22])
|
||||||
|
i++;
|
||||||
|
|
||||||
|
// Check if new score is higher
|
||||||
|
if (i < 6 && Screen[i + 8] > Screen[i + 22])
|
||||||
|
{
|
||||||
|
// If so, copy to highscore
|
||||||
|
while (i < 6)
|
||||||
|
{
|
||||||
|
Screen[i + 22] = Screen[i + 8];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear score
|
||||||
|
for(char i=0; i<6; i++)
|
||||||
|
Screen[i + 8] = '0';
|
||||||
|
}
|
||||||
|
|
||||||
|
// unpack tiles into a fast accessible format
|
||||||
void tiles_unpack(void)
|
void tiles_unpack(void)
|
||||||
{
|
{
|
||||||
for(char t=0; t<64; t++)
|
for(char t=0; t<64; t++)
|
||||||
|
@ -255,9 +429,9 @@ inline void shot_draw(char * dp, char i, char xp, char yp)
|
||||||
fdp[yp] = 0x00;
|
fdp[yp] = 0x00;
|
||||||
}
|
}
|
||||||
|
|
||||||
void shot_add(int dx, int sy)
|
void shot_add(int sx, char sy, sbyte dx)
|
||||||
{
|
{
|
||||||
char py = sy - 6;
|
char py = sy - 14;
|
||||||
char gy = py >> 5;
|
char gy = py >> 5;
|
||||||
char ey = (py >> 3) & 3;
|
char ey = (py >> 3) & 3;
|
||||||
char ry = py & 7;
|
char ry = py & 7;
|
||||||
|
@ -273,17 +447,17 @@ void shot_add(int dx, int sy)
|
||||||
|
|
||||||
s->ty = gy;
|
s->ty = gy;
|
||||||
s->ry = ry;
|
s->ry = ry;
|
||||||
|
s->dx = dx;
|
||||||
|
|
||||||
if (dx < 0)
|
if (dx < 0)
|
||||||
{
|
{
|
||||||
s->dx = -1;
|
char x = (sx) >> 3;
|
||||||
char x = (148 - 4 * dx) >> 3;
|
|
||||||
s->n = x - 1;
|
s->n = x - 1;
|
||||||
s->x = 40 * ey + x;
|
s->x = 40 * ey + x;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
s->dx = 1;
|
char x = (sx + 24) >> 3;
|
||||||
char x = (156 - 4 * dx) >> 3;
|
|
||||||
s->x = 40 * ey + x;
|
s->x = 40 * ey + x;
|
||||||
s->n = 39 - x;
|
s->n = 39 - x;
|
||||||
}
|
}
|
||||||
|
@ -291,10 +465,16 @@ void shot_add(int dx, int sy)
|
||||||
|
|
||||||
void tiles_draw(unsigned x)
|
void tiles_draw(unsigned x)
|
||||||
{
|
{
|
||||||
|
// vic.color_border++;
|
||||||
|
vic_waitTop();
|
||||||
|
while (vic.raster < 106)
|
||||||
|
;
|
||||||
|
// vic.color_border--;
|
||||||
|
|
||||||
char xs = 7 - (x & 7);
|
char xs = 7 - (x & 7);
|
||||||
|
|
||||||
rirq_data(&top, 0, VIC_CTRL2_MCM | xs);
|
rirq_data(&top, 1, VIC_CTRL2_MCM | xs);
|
||||||
rirq_data(&top, 1, ~(1 << xs));
|
rirq_data(&top, 2, ~(1 << xs));
|
||||||
|
|
||||||
x >>= 3;
|
x >>= 3;
|
||||||
|
|
||||||
|
@ -306,8 +486,8 @@ void tiles_draw(unsigned x)
|
||||||
|
|
||||||
for(int iy=0; iy<5; iy++)
|
for(int iy=0; iy<5; iy++)
|
||||||
{
|
{
|
||||||
char * dp = Screen + 80 + 160 * iy;
|
char * dp = Screen + 120 + 160 * iy;
|
||||||
char * cp = Color + 80 + 160 * iy;
|
char * cp = Color + 120 + 160 * iy;
|
||||||
char * tp = xtilemap + xl + 144 * iy;
|
char * tp = xtilemap + xl + 144 * iy;
|
||||||
|
|
||||||
switch (xr)
|
switch (xr)
|
||||||
|
@ -387,21 +567,95 @@ void tiles_draw(unsigned x)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Enemy
|
void player_init(void)
|
||||||
{
|
{
|
||||||
int px;
|
player.vpx = 0;
|
||||||
byte py;
|
player.ax = 1;
|
||||||
sbyte dx;
|
player.spy = 100;
|
||||||
byte state, pad0, pad1, pad2;
|
player.fdelay = 0;
|
||||||
} enemies[5];
|
|
||||||
|
|
||||||
int spx = 40;
|
spr_set(0, true, 160, 100, 64, VCOL_BLUE, true, false, false);
|
||||||
sbyte vpx = 16;
|
spr_set(7, true, 160, 100, 64 + 16, VCOL_MED_GREY, true, false, false);
|
||||||
sbyte ax = 0;
|
vic.spr_priority = 0x80;
|
||||||
char spy = 100;
|
}
|
||||||
char fdelay = 0;
|
|
||||||
char edelay = 5;
|
void player_control(void)
|
||||||
char ecount = 0;
|
{
|
||||||
|
joy_poll(0);
|
||||||
|
|
||||||
|
if (joyx[0] != 0)
|
||||||
|
player.ax = joyx[0];
|
||||||
|
|
||||||
|
player.spy += 2 * joyy[0];
|
||||||
|
if (player.spy < 14)
|
||||||
|
player.spy = 14;
|
||||||
|
else if (player.spy > 14 + 159)
|
||||||
|
player.spy = 14 + 159;
|
||||||
|
|
||||||
|
if (player.ax > 0)
|
||||||
|
{
|
||||||
|
if (player.vpx < 32)
|
||||||
|
player.vpx++;
|
||||||
|
|
||||||
|
if (player.aphase > 0 && player.aphase < 16)
|
||||||
|
player.aphase--;
|
||||||
|
else if (player.aphase >= 16 && player.aphase < 32)
|
||||||
|
player.aphase++;
|
||||||
|
}
|
||||||
|
else if (player.ax < 0)
|
||||||
|
{
|
||||||
|
if (player.vpx > - 32)
|
||||||
|
player.vpx--;
|
||||||
|
|
||||||
|
if (player.aphase >= 0 && player.aphase < 16)
|
||||||
|
player.aphase++;
|
||||||
|
else if (player.aphase > 16 && player.aphase < 32)
|
||||||
|
player.aphase--;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
player.aphase &= 31;
|
||||||
|
|
||||||
|
spr_image(0, 64 + (player.aphase >> 1));
|
||||||
|
spr_image(7, 80 + (player.aphase >> 1));
|
||||||
|
|
||||||
|
int px = 148 - 4 * player.vpx;
|
||||||
|
|
||||||
|
if (player.fdelay)
|
||||||
|
player.fdelay--;
|
||||||
|
else if (joyb[0])
|
||||||
|
{
|
||||||
|
if (player.aphase < 4 || player.aphase >= 29)
|
||||||
|
{
|
||||||
|
shot_add(px, player.spy, 1);
|
||||||
|
sidfx_play(0, SIDFXFire, 1);
|
||||||
|
}
|
||||||
|
else if (player.aphase >= 13 && player.aphase < 20)
|
||||||
|
{
|
||||||
|
shot_add(px, player.spy, -1);
|
||||||
|
sidfx_play(0, SIDFXFire, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
player.fdelay = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
spr_move(0, 24 + px, 50 + player.spy);
|
||||||
|
spr_move(7, 32 + px, 58 + player.spy);
|
||||||
|
}
|
||||||
|
|
||||||
|
void player_move()
|
||||||
|
{
|
||||||
|
player.spx += player.vpx >> 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
void game_init(void)
|
||||||
|
{
|
||||||
|
game.edelay = 80;
|
||||||
|
game.ecount = 0;
|
||||||
|
game.escore = 0;
|
||||||
|
game.lives = 4;
|
||||||
|
player.spx = 40;
|
||||||
|
}
|
||||||
|
|
||||||
void enemies_move(void)
|
void enemies_move(void)
|
||||||
{
|
{
|
||||||
|
@ -411,11 +665,11 @@ void enemies_move(void)
|
||||||
{
|
{
|
||||||
enemies[i].px += enemies[i].dx;
|
enemies[i].px += enemies[i].dx;
|
||||||
|
|
||||||
int rx = enemies[i].px - spx;
|
int rx = enemies[i].px - player.spx;
|
||||||
if (rx < -192 || rx >= 480)
|
if (rx < -192 || rx >= 480)
|
||||||
{
|
{
|
||||||
enemies[i].state = 0;
|
enemies[i].state = 0;
|
||||||
ecount--;
|
game.ecount--;
|
||||||
spr_show(2 + i, false);
|
spr_show(2 + i, false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -428,12 +682,13 @@ void enemies_move(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
spr_color(2 + i, VCOL_YELLOW);
|
||||||
spr_image(2 + i, 127 - (enemies[i].state >> 2));
|
spr_image(2 + i, 127 - (enemies[i].state >> 2));
|
||||||
enemies[i].state--;
|
enemies[i].state--;
|
||||||
if (enemies[i].state == 0)
|
if (enemies[i].state == 0)
|
||||||
{
|
{
|
||||||
spr_show(2 + i, false);
|
spr_show(2 + i, false);
|
||||||
ecount--;
|
game.ecount--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -445,31 +700,63 @@ void enemies_spawn(void)
|
||||||
{
|
{
|
||||||
char u = rand();
|
char u = rand();
|
||||||
|
|
||||||
char e = ecount;
|
char e = game.ecount;
|
||||||
|
|
||||||
__assume(e < 5);
|
__assume(e < 5);
|
||||||
|
|
||||||
sbyte v = 1 + (u & 3);
|
sbyte v = 1 + (u & 3);
|
||||||
enemies[ecount].py = 21 + 32 * e;
|
enemies[e].py = 29 + 32 * e;
|
||||||
enemies[ecount].dx = vpx < 0 ? v : -v;
|
enemies[e].dx = player.vpx < 0 ? v : -v;
|
||||||
enemies[ecount].px = (vpx < 0 ? spx - 56 : spx + 320) + ((u >> 1) & 31);
|
enemies[e].px = (player.vpx < 0 ? player.spx - 56 : player.spx + 320) + ((u >> 1) & 31);
|
||||||
enemies[ecount].state = 0x80;
|
enemies[e].state = 0x80;
|
||||||
|
|
||||||
int rx = enemies[ecount].px - spx;
|
int rx = enemies[e].px - player.spx;
|
||||||
|
|
||||||
spr_set(2 + ecount, true, rx + 24, enemies[ecount].py + 50, vpx < 0 ? 97 : 96, VCOL_YELLOW, true, false, false);
|
spr_set(2 + e, true, rx + 24, enemies[e].py + 50, player.vpx < 0 ? 97 : 96, VCOL_LT_BLUE, true, false, false);
|
||||||
ecount++;
|
game.ecount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void shots_check(void)
|
void enemies_reset(void)
|
||||||
|
{
|
||||||
|
for(char i=0; i<5; i++)
|
||||||
|
{
|
||||||
|
spr_show(2 + i, false);
|
||||||
|
enemies[i].state = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
game.edelay = 80;
|
||||||
|
game.ecount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool player_check(void)
|
||||||
|
{
|
||||||
|
char e = (player.spy - 14) >> 5;
|
||||||
|
if (e < 5 && (enemies[e].state & 0x80))
|
||||||
|
{
|
||||||
|
int rx = enemies[e].px - player.spx;
|
||||||
|
|
||||||
|
rx -= 148 - 4 * player.vpx;
|
||||||
|
|
||||||
|
if (rx >= - 12 && rx <= 12)
|
||||||
|
{
|
||||||
|
enemies[e].state = 64;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool shots_check(void)
|
||||||
{
|
{
|
||||||
Shot * ps = shots;
|
Shot * ps = shots;
|
||||||
|
bool hit = false;
|
||||||
|
|
||||||
for(char i=0; i<5; i++)
|
for(char i=0; i<5; i++)
|
||||||
{
|
{
|
||||||
if (enemies[i].state & 0x80)
|
if (enemies[i].state & 0x80)
|
||||||
{
|
{
|
||||||
sbyte rx = (enemies[i].px - spx) >> 3;
|
sbyte rx = (enemies[i].px - player.spx) >> 3;
|
||||||
if (rx >= 0 && rx < 40)
|
if (rx >= 0 && rx < 40)
|
||||||
{
|
{
|
||||||
Shot * ss = ps->next;
|
Shot * ss = ps->next;
|
||||||
|
@ -487,6 +774,8 @@ void shots_check(void)
|
||||||
ss->next = freeShot;
|
ss->next = freeShot;
|
||||||
freeShot = ss;
|
freeShot = ss;
|
||||||
enemies[i].state = 64;
|
enemies[i].state = 64;
|
||||||
|
game.escore++;
|
||||||
|
hit = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -496,8 +785,114 @@ void shots_check(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return hit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void game_state(GameState state)
|
||||||
|
{
|
||||||
|
// Set new state
|
||||||
|
game.state = state;
|
||||||
|
|
||||||
|
switch (state)
|
||||||
|
{
|
||||||
|
case GS_START:
|
||||||
|
game_init();
|
||||||
|
game_state(GS_READY);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GS_READY:
|
||||||
|
game.count = 120;
|
||||||
|
spr_show(0, false);
|
||||||
|
spr_show(7, false);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case GS_PLAYING:
|
||||||
|
player_init();
|
||||||
|
break;
|
||||||
|
case GS_EXPLODING:
|
||||||
|
sidfx_play(0, SIDFXBigExplosion, 3);
|
||||||
|
spr_color(0, 7);
|
||||||
|
spr_color(7, 8);
|
||||||
|
game.count = 64;
|
||||||
|
break;
|
||||||
|
case GS_GAME_OVER:
|
||||||
|
score_reset();
|
||||||
|
game.count = 120;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void game_loop()
|
||||||
|
{
|
||||||
|
tiles_draw(player.spx & 4095);
|
||||||
|
|
||||||
|
switch (game.state)
|
||||||
|
{
|
||||||
|
case GS_START:
|
||||||
|
break;
|
||||||
|
case GS_READY:
|
||||||
|
player.spx -= game.count >> 2;
|
||||||
|
|
||||||
|
if (!--game.count)
|
||||||
|
game_state(GS_PLAYING);
|
||||||
|
break;
|
||||||
|
case GS_PLAYING:
|
||||||
|
player_control();
|
||||||
|
player_move();
|
||||||
|
|
||||||
|
if (game.edelay)
|
||||||
|
{
|
||||||
|
game.edelay--;
|
||||||
|
if (game.edelay < 10 && !(game.edelay & 1))
|
||||||
|
enemies_spawn();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
enemies_move();
|
||||||
|
if (!game.ecount)
|
||||||
|
game.edelay = 64 + (rand() & 63);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shots_check())
|
||||||
|
sidfx_play(1, SIDFXExplosion, 1);
|
||||||
|
|
||||||
|
if (player_check())
|
||||||
|
game_state(GS_EXPLODING);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GS_EXPLODING:
|
||||||
|
spr_image(0, 127 - (game.count >> 2));
|
||||||
|
spr_image(7, 127 - (game.count >> 2));
|
||||||
|
|
||||||
|
player_move();
|
||||||
|
enemies_move();
|
||||||
|
|
||||||
|
if (!--game.count)
|
||||||
|
{
|
||||||
|
enemies_reset();
|
||||||
|
game.lives--;
|
||||||
|
|
||||||
|
if (game.lives)
|
||||||
|
game_state(GS_READY);
|
||||||
|
else
|
||||||
|
game_state(GS_GAME_OVER);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GS_GAME_OVER:
|
||||||
|
if (!--game.count)
|
||||||
|
game_state(GS_START);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// vic.color_border--;
|
||||||
|
sidfx_loop();
|
||||||
|
// vic.color_border++;
|
||||||
|
|
||||||
|
status_update();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
cia_init();
|
cia_init();
|
||||||
|
@ -507,6 +902,7 @@ int main(void)
|
||||||
// Install character set
|
// Install character set
|
||||||
mmap_set(MMAP_RAM);
|
mmap_set(MMAP_RAM);
|
||||||
memcpy(Font, charset, 2048);
|
memcpy(Font, charset, 2048);
|
||||||
|
memcpy(TextFont, tcharset, 2048);
|
||||||
|
|
||||||
char * dp = Font + 248 * 8;
|
char * dp = Font + 248 * 8;
|
||||||
memset(dp, 0xff, 8);
|
memset(dp, 0xff, 8);
|
||||||
|
@ -514,6 +910,7 @@ int main(void)
|
||||||
memcpy(Sprites, spriteset, 4096);
|
memcpy(Sprites, spriteset, 4096);
|
||||||
mmap_set(MMAP_NO_ROM);
|
mmap_set(MMAP_NO_ROM);
|
||||||
|
|
||||||
|
// bring tiles into better addressed format
|
||||||
tiles_unpack();
|
tiles_unpack();
|
||||||
|
|
||||||
// Switch screen
|
// Switch screen
|
||||||
|
@ -525,14 +922,18 @@ int main(void)
|
||||||
rirq_init(true);
|
rirq_init(true);
|
||||||
|
|
||||||
// Set scroll offset and star at top of screen
|
// Set scroll offset and star at top of screen
|
||||||
rirq_build(&top, 2);
|
rirq_build(&top, 4);
|
||||||
rirq_write(&top, 0, &vic.ctrl2, VIC_CTRL2_MCM);
|
rirq_write(&top, 0, &vic.memptr, (((unsigned)Screen >> 6) & 0xf0) | (((unsigned)Font >> 10) & 0x0e));
|
||||||
rirq_write(&top, 1, Font + 248 * 8 + 2, 0xff);
|
rirq_write(&top, 1, &vic.ctrl2, VIC_CTRL2_MCM);
|
||||||
|
rirq_write(&top, 2, Font + 248 * 8 + 2, 0xff);
|
||||||
|
rirq_write(&top, 3, &vic.color_back, VCOL_WHITE);
|
||||||
rirq_set(0, 58, &top);
|
rirq_set(0, 58, &top);
|
||||||
|
|
||||||
// Switch to text mode for status line and poll joystick at bottom
|
// Switch to text mode for status line and poll joystick at bottom
|
||||||
rirq_build(&bottom, 1);
|
rirq_build(&bottom, 3);
|
||||||
rirq_write(&bottom, 0, &vic.ctrl2, VIC_CTRL2_MCM | VIC_CTRL2_CSEL);
|
rirq_write(&bottom, 0, &vic.memptr, (((unsigned)Screen >> 6) & 0xf0) | (((unsigned)TextFont >> 10) & 0x0e));
|
||||||
|
rirq_write(&bottom, 1, &vic.ctrl2, 0);
|
||||||
|
rirq_write(&bottom, 2, &vic.color_back, VCOL_YELLOW);
|
||||||
rirq_set(1, 250, &bottom);
|
rirq_set(1, 250, &bottom);
|
||||||
|
|
||||||
// sort the raster IRQs
|
// sort the raster IRQs
|
||||||
|
@ -550,105 +951,31 @@ int main(void)
|
||||||
vic.spr_mcolor0 = VCOL_DARK_GREY;
|
vic.spr_mcolor0 = VCOL_DARK_GREY;
|
||||||
vic.spr_mcolor1 = VCOL_WHITE;
|
vic.spr_mcolor1 = VCOL_WHITE;
|
||||||
|
|
||||||
|
// clear screen
|
||||||
memset(Screen, 0, 1000);
|
memset(Screen, 0, 1000);
|
||||||
memset(Color, 8, 1000);
|
memset(Color, 0, 80);
|
||||||
|
memset(Color + 80, 8, 920);
|
||||||
|
|
||||||
|
sidfx_init();
|
||||||
|
|
||||||
|
sid.fmodevol = 15;
|
||||||
|
|
||||||
|
status_init();
|
||||||
|
|
||||||
|
// initialize background parallax stars
|
||||||
for(int i=0; i<24; i++)
|
for(int i=0; i<24; i++)
|
||||||
stars[i] = rand() % 40 + 40 * (i & 3);
|
stars[i] = rand() % 40 + 40 * (i & 3);
|
||||||
|
|
||||||
shot_init();
|
shot_init();
|
||||||
|
|
||||||
spr_set(0, true, 160, 100, 64, VCOL_BLUE, true, false, false);
|
game_init();
|
||||||
spr_set(7, true, 160, 100, 64 + 16, VCOL_MED_GREY, true, false, false);
|
player_init();
|
||||||
vic.spr_priority = 0x80;
|
|
||||||
|
|
||||||
vpx = 2;
|
// main game loop
|
||||||
|
game_state(GS_READY);
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
joy_poll(0);
|
game_loop();
|
||||||
|
|
||||||
if (ax == 0)
|
|
||||||
ax = joyx[0];
|
|
||||||
|
|
||||||
spy += 2 * joyy[0];
|
|
||||||
if (spy < 6)
|
|
||||||
spy = 6;
|
|
||||||
else if (spy > 6 + 159)
|
|
||||||
spy = 6 + 159;
|
|
||||||
|
|
||||||
if (ax > 0)
|
|
||||||
{
|
|
||||||
if (vpx < 32)
|
|
||||||
vpx++;
|
|
||||||
else
|
|
||||||
ax = 0;
|
|
||||||
|
|
||||||
if (vpx >= 32)
|
|
||||||
{
|
|
||||||
spr_image(0, 64);
|
|
||||||
spr_image(7, 64 + 16);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
spr_image(0, 76 + (vpx >> 3));
|
|
||||||
spr_image(7, 76 + (vpx >> 3) + 16);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (ax < 0)
|
|
||||||
{
|
|
||||||
if (vpx > - 32)
|
|
||||||
vpx--;
|
|
||||||
else
|
|
||||||
ax = 0;
|
|
||||||
|
|
||||||
if (vpx <= -32)
|
|
||||||
{
|
|
||||||
spr_image(0, 72);
|
|
||||||
spr_image(7, 72 + 16);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
spr_image(0, 68 - (vpx >> 3));
|
|
||||||
spr_image(7, 68 - (vpx >> 3) + 16);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fdelay)
|
|
||||||
fdelay--;
|
|
||||||
else if (joyb[0] && vpx != 0)
|
|
||||||
{
|
|
||||||
shot_add(vpx, spy);
|
|
||||||
fdelay = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
spr_move(0, 172 - 4 * vpx, 50 + spy);
|
|
||||||
spr_move(7, 180 - 4 * vpx, 58 + spy);
|
|
||||||
|
|
||||||
vic.color_border = VCOL_BLACK;
|
|
||||||
vic_waitTop();
|
|
||||||
while (vic.raster < 82)
|
|
||||||
;
|
|
||||||
|
|
||||||
vic.color_border = VCOL_BLUE;
|
|
||||||
tiles_draw(spx & 4095);
|
|
||||||
vic.color_border = VCOL_WHITE;
|
|
||||||
|
|
||||||
if (edelay)
|
|
||||||
{
|
|
||||||
edelay--;
|
|
||||||
if (edelay < 10 && !(edelay & 1))
|
|
||||||
enemies_spawn();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
enemies_move();
|
|
||||||
if (!ecount)
|
|
||||||
edelay = 64 + (rand() & 63);
|
|
||||||
}
|
|
||||||
|
|
||||||
shots_check();
|
|
||||||
|
|
||||||
spx += vpx >> 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -4,3 +4,4 @@ call ..\..\bin\oscar64 -n maze3d.c
|
||||||
call ..\..\bin\oscar64 -n -O3 missile.c
|
call ..\..\bin\oscar64 -n -O3 missile.c
|
||||||
call ..\..\bin\oscar64 -n breakout.c
|
call ..\..\bin\oscar64 -n breakout.c
|
||||||
call ..\..\bin\oscar64 -n connectfour.c
|
call ..\..\bin\oscar64 -n connectfour.c
|
||||||
|
call ..\..\bin\oscar64 -n -O2 hscrollshmup.c
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -38,7 +38,7 @@ int main(void)
|
||||||
{
|
{
|
||||||
// calculate sine table
|
// calculate sine table
|
||||||
for(int i=0; i<128; i++)
|
for(int i=0; i<128; i++)
|
||||||
sintab[i] = (int)(80 * sin(i * PI / 64));
|
sintab[i] = (int)(70 * sin(i * PI / 64));
|
||||||
|
|
||||||
// enable raster interrupt via kernal path
|
// enable raster interrupt via kernal path
|
||||||
rirq_init(true);
|
rirq_init(true);
|
||||||
|
@ -68,7 +68,7 @@ int main(void)
|
||||||
char k = j >> 4;
|
char k = j >> 4;
|
||||||
for(char i=0; i<16; i++)
|
for(char i=0; i<16; i++)
|
||||||
{
|
{
|
||||||
vspr_move(i, 200 + sintab[(j + 8 * i) & 127] + sintab[k & 127], 140 + sintab[(j + 8 * i + 32) & 127] + sintab[(k + 32) & 127]);
|
vspr_move(i, 200 + sintab[(j + 8 * i) & 127] + sintab[k & 127], 150 + sintab[(j + 8 * i + 32) & 127] + sintab[(k + 32) & 127]);
|
||||||
}
|
}
|
||||||
j++;
|
j++;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue