mirror of
https://github.com/dschmenk/PLASMA.git
synced 2024-11-01 07:07:48 +00:00
Extend Console I/O so Rogue I/O disappears
This commit is contained in:
parent
39385d79a4
commit
d59a54d8fd
@ -4,6 +4,7 @@ import conio
|
||||
const FLASH = $7F
|
||||
struc t_conio
|
||||
word keypressed
|
||||
word getkey
|
||||
word home
|
||||
word gotoxy
|
||||
word viewport
|
||||
@ -12,5 +13,7 @@ import conio
|
||||
word grmode
|
||||
word grcolor
|
||||
word grplot
|
||||
word tone
|
||||
word rnd
|
||||
end
|
||||
end
|
||||
|
@ -1,4 +1,5 @@
|
||||
import sndseq
|
||||
word musicSequence // musicSequence(yield, backgroundProc)#0
|
||||
predef spkrTone(pitch, duration)#0, spkrPWM(sample, speed, len)#0
|
||||
predef musicPlay(track, rept)#0, musicStop#0, musicGetKey(yield,backgroundProc)#1
|
||||
predef musicPlay(track, rept)#0, musicStop#0, musicGetKey(yield, backgroundProc)#1
|
||||
end
|
||||
|
@ -5,6 +5,12 @@ include "inc/cmdsys.plh"
|
||||
const FULLMODE = 0
|
||||
const MIXMODE = 1
|
||||
//
|
||||
// Apple II ZP locations.
|
||||
//
|
||||
const a2rndnum = $4E // ZP location of RND
|
||||
const a2rndl = $4E
|
||||
const a2rndh = $4F
|
||||
//
|
||||
// Apple II hardware constants.
|
||||
//
|
||||
const speaker = $C030
|
||||
@ -23,10 +29,15 @@ const hgr2 = $4000
|
||||
const page1 = 0
|
||||
const page2 = 1
|
||||
//
|
||||
// External interface
|
||||
// Apple III hardware constants.
|
||||
//
|
||||
const ENV_REG = $FFDF
|
||||
//
|
||||
// External interface.
|
||||
//
|
||||
struc t_conio
|
||||
word keypressed
|
||||
word getkey
|
||||
word home
|
||||
word gotoxy
|
||||
word viewport
|
||||
@ -35,12 +46,14 @@ struc t_conio
|
||||
word grmode
|
||||
word grcolor
|
||||
word grplot
|
||||
word tone
|
||||
word rnd
|
||||
end
|
||||
//
|
||||
// Predefined functions.
|
||||
//
|
||||
predef a2keypressed,a2home,a2gotoxy(x,y),a2viewport(left, top, width, height),a2texttype(type)
|
||||
predef a2textmode(cols),a2grmode(mix),a2grcolor(color),a2grplot(x,y)
|
||||
predef a2textmode(cols),a2grmode(mix),a2grcolor(color),a2grplot(x,y),a2tone(duration, delay),a2rnd
|
||||
//
|
||||
// Exported function table.
|
||||
//
|
||||
@ -49,6 +62,7 @@ word conio[]
|
||||
// Function pointers.
|
||||
//
|
||||
word = @a2keypressed
|
||||
word = @getc
|
||||
word = @a2home
|
||||
word = @a2gotoxy
|
||||
word = @a2viewport
|
||||
@ -57,6 +71,8 @@ word = @a2textmode
|
||||
word = @a2grmode
|
||||
word = @a2grcolor
|
||||
word = @a2grplot
|
||||
word = @a2tone
|
||||
word = @a2rnd
|
||||
//
|
||||
// Screen row address arrays.
|
||||
//
|
||||
@ -79,6 +95,10 @@ byte textbwmode[] = 2, 16, 0
|
||||
byte textclrmode[] = 2, 16, 1
|
||||
byte grcharset[] = 1, 0, $7F, $7F, $7F, $7F, $00, $00, $00, $00
|
||||
//
|
||||
// Random number for Apple 1 and III.
|
||||
//
|
||||
word randnum = 12345
|
||||
//
|
||||
// Native routines.
|
||||
//
|
||||
asm equates
|
||||
@ -176,6 +196,15 @@ end
|
||||
def a1grmode(mix)
|
||||
return 0 // not supported
|
||||
end
|
||||
def a1tone(duration, delay)
|
||||
byte i
|
||||
|
||||
while duration
|
||||
for i = delay downto 0; next
|
||||
duration--
|
||||
loop
|
||||
return 0
|
||||
end
|
||||
//
|
||||
// Apple II routines.
|
||||
//
|
||||
@ -223,6 +252,20 @@ def a2grmode(mix)
|
||||
a2home
|
||||
return a2grscrn(@txt1scrn) // point to lo-res screen
|
||||
end
|
||||
def a2tone(duration, delay)
|
||||
byte i
|
||||
|
||||
while duration
|
||||
^speaker // toggle speaker
|
||||
for i = delay downto 0; next
|
||||
duration--
|
||||
loop
|
||||
return 0
|
||||
end
|
||||
def a2rnd
|
||||
*a2rndnum = (*a2rndnum << 1) + *a2rndnum + 123
|
||||
return *a2rndnum & $7FFF
|
||||
end
|
||||
//
|
||||
// Apple III routines.
|
||||
//
|
||||
@ -314,27 +357,56 @@ def a3grmode(mix)
|
||||
next
|
||||
return a2grscrn(@txt2scrn) // point to color screen
|
||||
end
|
||||
def a3tone(duration, pitch)
|
||||
byte env
|
||||
|
||||
env = ^ENV_REG
|
||||
^ENV_REG = env | $C0
|
||||
a2tone(duration, pitch)
|
||||
^ENV_REG = env
|
||||
return 0
|
||||
end
|
||||
//
|
||||
// Apple 1 and III combined routines.
|
||||
//
|
||||
def a13getkey
|
||||
while not conio:keypressed()
|
||||
randnum = randnum + 123
|
||||
loop
|
||||
return getc()
|
||||
end
|
||||
def a13rnd
|
||||
randnum = (randnum << 1) + randnum + 123
|
||||
return randnum & $7FFF
|
||||
end
|
||||
|
||||
//
|
||||
// Machine specific initialization.
|
||||
//
|
||||
when MACHID & MACHID_MODEL
|
||||
is MACHID_I
|
||||
conio:keypressed = @a1keypressed
|
||||
conio:getkey = @a13getkey
|
||||
conio:home = @a1home
|
||||
conio:gotoxy = @a1gotoxy
|
||||
conio:viewport = @a1viewport
|
||||
conio:texttype = @a1texttype
|
||||
conio:textmode = @a1textmode
|
||||
conio:grmode = @a1grmode
|
||||
conio:tone = @a1tone
|
||||
conio:rnd = @a13rnd
|
||||
break
|
||||
is MACHID_III
|
||||
conio:keypressed = @a3keypressed
|
||||
conio:getkey = @a13getkey
|
||||
conio:home = @a3home
|
||||
conio:gotoxy = @a3gotoxy
|
||||
conio:viewport = @a3viewport
|
||||
conio:texttype = @a3texttype
|
||||
conio:textmode = @a3textmode
|
||||
conio:grmode = @a3grmode
|
||||
conio:tone = @a3tone
|
||||
conio:rnd = @a13rnd
|
||||
break
|
||||
//otherwise // MACHID_II
|
||||
wend
|
||||
|
@ -38,7 +38,6 @@ DGR = DGR\#FE1000
|
||||
TONE = TONE\#FE1000
|
||||
PORTIO = PORTIO\#FE1000
|
||||
ROGUE = ROGUE\#FE1000
|
||||
ROGUEIO = ROGUEIO\#FE1000
|
||||
ROGUEMAP= ROGUEMAP\#FE1000
|
||||
ROGUECOMBAT= ROGUECOMBAT\#FE1000
|
||||
HELLO = HELLO\#FE1000
|
||||
@ -73,7 +72,7 @@ TXTTYPE = .TXT
|
||||
#SYSTYPE = \#FF2000
|
||||
#TXTTYPE = \#040000
|
||||
|
||||
all: $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM802) $(PLVM03) $(CMD) $(PLASMAPLASM) $(CODEOPT) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(ROD) $(SIEVE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(ROGUEIO) $(TONE) $(DGR) $(DGRTEST) $(FILEIO) $(CONIO) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ)
|
||||
all: $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM802) $(PLVM03) $(CMD) $(PLASMAPLASM) $(CODEOPT) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(ROD) $(SIEVE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(TONE) $(DGR) $(DGRTEST) $(FILEIO) $(CONIO) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ)
|
||||
|
||||
clean:
|
||||
-rm *FE1000 *FF2000 $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM03)
|
||||
@ -285,10 +284,6 @@ $(ROGUE): samplesrc/rogue.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AMOW < samplesrc/rogue.pla > samplesrc/rogue.a
|
||||
acme --setpc 4094 -o $(ROGUE) samplesrc/rogue.a
|
||||
|
||||
$(ROGUEIO): samplesrc/rogue.io.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AMOW < samplesrc/rogue.io.pla > samplesrc/rogue.io.a
|
||||
acme --setpc 4094 -o $(ROGUEIO) samplesrc/rogue.io.a
|
||||
|
||||
$(ROGUECOMBAT): samplesrc/rogue.combat.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AMOW < samplesrc/rogue.combat.pla > samplesrc/rogue.combat.a
|
||||
acme --setpc 4094 -o $(ROGUECOMBAT) samplesrc/rogue.combat.a
|
||||
|
@ -38,7 +38,6 @@ cp ROD#FE1000 prodos/demos/ROD.REL
|
||||
mkdir prodos/demos/rogue
|
||||
cp ROGUE#FE1000 prodos/demos/rogue/ROGUE.REL
|
||||
cp ROGUECOMBAT#FE1000 prodos/demos/rogue/ROGUECOMBAT.REL
|
||||
cp ROGUEIO#FE1000 prodos/demos/rogue/ROGUEIO.REL
|
||||
cp ROGUEMAP#FE1000 prodos/demos/rogue/ROGUEMAP.REL
|
||||
cp samplesrc/LEVEL0#040000 prodos/demos/rogue/LEVEL0.TXT
|
||||
cp samplesrc/LEVEL1#040000 prodos/demos/rogue/LEVEL1.TXT
|
||||
@ -77,6 +76,9 @@ cp samplesrc/playseq.pla prodos/bld/PLAYSEQ.PLA.TXT
|
||||
cp samplesrc/rpncalc.pla prodos/bld/RPNCALC.PLA.TXT
|
||||
cp samplesrc/httpd.pla prodos/bld/HTTPD.PLA.TXT
|
||||
cp samplesrc/fatcat.pla prodos/bld/FATCAT.PLA.TXT
|
||||
cp samplesrc/rogue.pla prodos/bld/ROGUE.PLA.TXT
|
||||
cp samplesrc/rogue.map.pla prodos/bld/ROGUE.MAP.PLA.TXT
|
||||
cp samplesrc/rogue.combat.pla prodos/bld/ROGUE.COMBAT.PLA.TXT
|
||||
|
||||
mkdir prodos/bld/inc
|
||||
cp inc/args.plh prodos/bld/inc/ARGS.PLH.TXT
|
||||
|
@ -1,9 +1,6 @@
|
||||
include "inc/cmdsys.plh"
|
||||
include "inc/conio.plh"
|
||||
|
||||
import rogueio
|
||||
word rnd, getkb, tone
|
||||
end
|
||||
import roguemap
|
||||
predef moveplayer
|
||||
end
|
||||
@ -129,10 +126,10 @@ export word entities = 0
|
||||
//
|
||||
|
||||
def win#0
|
||||
tone(30, 15)
|
||||
tone(5, 15)
|
||||
tone(5, 15)
|
||||
tone(30, 5)
|
||||
conio:tone(30, 15)
|
||||
conio:tone(5, 15)
|
||||
conio:tone(5, 15)
|
||||
conio:tone(30, 5)
|
||||
end
|
||||
|
||||
export def fight(player, enemy)
|
||||
@ -161,18 +158,18 @@ export def fight(player, enemy)
|
||||
puts(ascii_entity[enemy->kind] + e_atck * 11)
|
||||
next
|
||||
conio:gotoxy(12, 8); puts("F)ight or R)un?")
|
||||
if toupper(getkb()) == 'R'
|
||||
if toupper(conio:getkey()) == 'R'
|
||||
return 1
|
||||
else
|
||||
//
|
||||
// Turn player in random direction
|
||||
//
|
||||
player->angle = rnd() & 7
|
||||
player->angle = conio:rnd() & 7
|
||||
//
|
||||
// Calculate attack (with a little random variation)
|
||||
//
|
||||
p_atck = player->skill + player->energy / 10 - enemy->power / 25 + (rnd() & 7)
|
||||
e_atck = enemy->power - player->skill / 5 - player->energy / 20 + (rnd() & 7)
|
||||
p_atck = player->skill + player->energy / 10 - enemy->power / 25 + (conio:rnd() & 7)
|
||||
e_atck = enemy->power - player->skill / 5 - player->energy / 20 + (conio:rnd() & 7)
|
||||
if enemy->life > p_atck
|
||||
enemy->life = enemy->life - p_atck
|
||||
else
|
||||
|
@ -1,111 +0,0 @@
|
||||
include "inc/cmdsys.plh"
|
||||
include "inc/conio.plh"
|
||||
|
||||
byte[] initstr
|
||||
byte = " ( )\n"
|
||||
byte = " )\\ ) ( /( (\n"
|
||||
byte = "(()/( )\\()) )\\ ) ( (\n"
|
||||
byte = " /(_))((_)\\ (()/( )\\ )\\\n"
|
||||
byte = "(_)) ((_) /(_))_ _ ((_)((_)\n"
|
||||
byte = "| _ \\ / _ \\(_)) __|| | | || __|\n"
|
||||
byte = "| / | (_) | | (_ || |_| || _|\n"
|
||||
byte = "|_|_\\ \\___/ \\___| \\___/ |___|\n"
|
||||
byte = "\n"
|
||||
byte = " By Resman\n"
|
||||
byte = " Artwork by Seth Sternberger\n"
|
||||
byte = ""
|
||||
word titlestr = @initstr
|
||||
|
||||
//
|
||||
// Machine specific routines
|
||||
//
|
||||
|
||||
export word rnd, getkb, tone
|
||||
|
||||
const ENV_REG = $FFDF
|
||||
|
||||
const SPEAKER = $C030
|
||||
|
||||
const a2rndnum = $4E // ZP location of RND
|
||||
const a2rndl = $4E
|
||||
const a2rndh = $4F
|
||||
|
||||
word a3rndnum = 12345
|
||||
|
||||
def a3rnd
|
||||
a3rndnum = (a3rndnum << 1) + a3rndnum + 123
|
||||
return *a3rndnum & $7FFF
|
||||
end
|
||||
|
||||
def a2rnd
|
||||
*a2rndnum = (*a2rndnum << 1) + *a2rndnum + 123
|
||||
return *a2rndnum & $7FFF
|
||||
end
|
||||
|
||||
def a2getkb
|
||||
return getc()
|
||||
end
|
||||
|
||||
def a2tone(duration, delay)
|
||||
byte i
|
||||
|
||||
while duration
|
||||
^SPEAKER
|
||||
for i = 0 to delay
|
||||
next
|
||||
duration--
|
||||
loop
|
||||
return 0
|
||||
end
|
||||
|
||||
def a3tone(duration, pitch)
|
||||
byte env
|
||||
|
||||
env = ^ENV_REG
|
||||
^ENV_REG = env | $C0
|
||||
a2tone(duration, pitch)
|
||||
^ENV_REG = env
|
||||
return 0
|
||||
end
|
||||
|
||||
//
|
||||
// Apple /// console routines
|
||||
//
|
||||
|
||||
def a3getkb
|
||||
while not conio:keypressed()
|
||||
a3rndnum = a3rndnum + 123
|
||||
loop
|
||||
return getc()
|
||||
end
|
||||
|
||||
//
|
||||
// Set machine specific routines
|
||||
//
|
||||
|
||||
when MACHID & $C8
|
||||
is $08 // Apple 1
|
||||
puts("APPLE 1 NOT SUPPORTED.")
|
||||
return -1
|
||||
is $C0 // Apple ///
|
||||
rnd = @a3rnd
|
||||
getkb = @a3getkb
|
||||
tone = @a3tone
|
||||
break
|
||||
otherwise // Apple ][
|
||||
rnd = @a2rnd
|
||||
getkb = @a2getkb
|
||||
tone = @a2tone
|
||||
wend
|
||||
|
||||
//
|
||||
// Print title page
|
||||
//
|
||||
|
||||
conio:home()
|
||||
while ^titlestr
|
||||
puts(titlestr)
|
||||
titlestr = titlestr + ^titlestr + 1
|
||||
loop
|
||||
|
||||
done
|
@ -5,13 +5,24 @@ include "inc/cmdsys.plh"
|
||||
include "inc/conio.plh"
|
||||
include "inc/fileio.plh"
|
||||
|
||||
import rogueio
|
||||
const O_READ = 1
|
||||
const O_WRITE = 2
|
||||
const O_READ_WRITE = 3
|
||||
//
|
||||
// Title page
|
||||
//
|
||||
|
||||
word rnd, getkb, tone
|
||||
end
|
||||
byte[] initstr
|
||||
byte = " ( )\n"
|
||||
byte = " )\\ ) ( /( (\n"
|
||||
byte = "(()/( )\\()) )\\ ) ( (\n"
|
||||
byte = " /(_))((_)\\ (()/( )\\ )\\\n"
|
||||
byte = "(_)) ((_) /(_))_ _ ((_)((_)\n"
|
||||
byte = "| _ \\ / _ \\(_)) __|| | | || __|\n"
|
||||
byte = "| / | (_) | | (_ || |_| || _|\n"
|
||||
byte = "|_|_\\ \\___/ \\___| \\___/ |___|\n"
|
||||
byte = "\n"
|
||||
byte = " By Resman\n"
|
||||
byte = " Artwork by Seth Sternberger\n"
|
||||
byte = ""
|
||||
word titlestr = @initstr
|
||||
|
||||
//
|
||||
// Octant beam parameters
|
||||
@ -760,4 +771,14 @@ export def drawvisentity(xofst, yofst, tile)#0
|
||||
fin
|
||||
end
|
||||
|
||||
//
|
||||
// Print title page
|
||||
//
|
||||
|
||||
conio:home()
|
||||
while ^titlestr
|
||||
puts(titlestr)
|
||||
titlestr = titlestr + ^titlestr + 1
|
||||
loop
|
||||
|
||||
done
|
||||
|
@ -41,10 +41,6 @@ import roguecombat
|
||||
word entity, entities
|
||||
end
|
||||
|
||||
import rogueio
|
||||
word rnd, getkb, tone
|
||||
end
|
||||
|
||||
const maxlight = 10
|
||||
const maxview = 19
|
||||
|
||||
@ -54,6 +50,7 @@ byte vplayer = '^', '\\', '>', '/', 'v', '\\', '<', '/'
|
||||
byte totaldarkness = 0
|
||||
byte level = 0
|
||||
word free_entities
|
||||
|
||||
//
|
||||
// Power-ups
|
||||
//
|
||||
@ -157,42 +154,42 @@ end
|
||||
//
|
||||
|
||||
def ouch#0
|
||||
tone(128,5)
|
||||
conio:tone(128,5)
|
||||
end
|
||||
|
||||
def gotit#0
|
||||
tone(10,8)
|
||||
tone(80,2)
|
||||
conio:tone(10,8)
|
||||
conio:tone(80,2)
|
||||
end
|
||||
|
||||
def fall#0
|
||||
byte i
|
||||
|
||||
for i = 0 to 10
|
||||
tone(50, i)
|
||||
conio:tone(50, i)
|
||||
next
|
||||
end
|
||||
|
||||
def drown#0
|
||||
word i
|
||||
|
||||
tone(10,20)
|
||||
tone(10,1)
|
||||
conio:tone(10,20)
|
||||
conio:tone(10,1)
|
||||
for i = 0 to 1000
|
||||
next
|
||||
tone(10,25)
|
||||
tone(10,2)
|
||||
conio:tone(10,25)
|
||||
conio:tone(10,2)
|
||||
for i = 0 to 1000
|
||||
next
|
||||
tone(10,30)
|
||||
tone(10,3)
|
||||
conio:tone(10,30)
|
||||
conio:tone(10,3)
|
||||
end
|
||||
|
||||
def groan#0
|
||||
byte i
|
||||
|
||||
for i = 0 to 5
|
||||
tone(5, 40 + i)
|
||||
conio:tone(5, 40 + i)
|
||||
next
|
||||
end
|
||||
|
||||
@ -463,10 +460,10 @@ def play
|
||||
return FALSE
|
||||
fin
|
||||
conio:gotoxy(xcentr, ycentr)
|
||||
when toupper(getkb())
|
||||
when toupper(conio:getkey())
|
||||
is 'I'
|
||||
if totaldarkness
|
||||
player.angle = rnd() & 7
|
||||
player.angle = conio:rnd() & 7
|
||||
else
|
||||
player.angle = 0
|
||||
fin
|
||||
@ -474,7 +471,7 @@ def play
|
||||
break
|
||||
is 'J'
|
||||
if totaldarkness
|
||||
player.angle = rnd() & 7
|
||||
player.angle = conio:rnd() & 7
|
||||
else
|
||||
player.angle = 6
|
||||
fin
|
||||
@ -482,7 +479,7 @@ def play
|
||||
break
|
||||
is 'K'
|
||||
if totaldarkness
|
||||
player.angle = rnd() & 7
|
||||
player.angle = conio:rnd() & 7
|
||||
else
|
||||
player.angle = 2
|
||||
fin
|
||||
@ -490,7 +487,7 @@ def play
|
||||
break
|
||||
is 'M'
|
||||
if totaldarkness
|
||||
player.angle = rnd() & 7
|
||||
player.angle = conio:rnd() & 7
|
||||
else
|
||||
player.angle = 4
|
||||
fin
|
||||
@ -601,7 +598,7 @@ def play
|
||||
clearstatus
|
||||
conio:gotoxy(0, statusline)
|
||||
puts(@quitstr)
|
||||
if toupper(getkb()) == 'Y'
|
||||
if toupper(conio:getkey()) == 'Y'
|
||||
player.health = 0
|
||||
return FALSE
|
||||
fin
|
||||
|
Loading…
Reference in New Issue
Block a user