Compare commits
4 commits
e2cbdcaf92
...
df2cd4079f
Author | SHA1 | Date | |
---|---|---|---|
|
df2cd4079f | ||
|
2ae741d705 | ||
|
9b2cd70f4d | ||
|
e5b42749e5 |
4 changed files with 86 additions and 10 deletions
5
Makefile
5
Makefile
|
@ -7,7 +7,7 @@ RAREST_WORD = murky
|
||||||
|
|
||||||
all: dosdl.com
|
all: dosdl.com
|
||||||
|
|
||||||
dosdl.com: dosdl.asm dictionary.inc targets.inc
|
dosdl.com: dosdl.asm dictionary.inc targets.inc license.inc
|
||||||
$(NASM) -fbin -o $@ $<
|
$(NASM) -fbin -o $@ $<
|
||||||
|
|
||||||
dictionary.inc: dictionary.json targets.json compress-dict.py
|
dictionary.inc: dictionary.json targets.json compress-dict.py
|
||||||
|
@ -16,6 +16,9 @@ dictionary.inc: dictionary.json targets.json compress-dict.py
|
||||||
targets.inc: targets.json compress-targets.py
|
targets.inc: targets.json compress-targets.py
|
||||||
$(PYTHON) compress-targets.py $< $(RAREST_WORD) $@
|
$(PYTHON) compress-targets.py $< $(RAREST_WORD) $@
|
||||||
|
|
||||||
|
license.inc: LICENSE embed-textfile.py
|
||||||
|
$(PYTHON) embed-textfile.py $< license_str $@
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *.inc *.com
|
rm -f *.inc *.com
|
||||||
|
|
||||||
|
|
|
@ -13,11 +13,6 @@ Gameplay
|
||||||
Gameplay is as in hello wordl's default daily mode. `x` under a letter marks it
|
Gameplay is as in hello wordl's default daily mode. `x` under a letter marks it
|
||||||
as incorrect and `^` marks it as being in the wrong place.
|
as incorrect and `^` marks it as being in the wrong place.
|
||||||
|
|
||||||
Missing features
|
|
||||||
----------------
|
|
||||||
|
|
||||||
- Ability to set the seed manually
|
|
||||||
|
|
||||||
Word lists
|
Word lists
|
||||||
----------
|
----------
|
||||||
The words lists are taken from
|
The words lists are taken from
|
||||||
|
|
68
dosdl.asm
68
dosdl.asm
|
@ -25,13 +25,15 @@ parse_arguments:
|
||||||
|
|
||||||
.leading_spaces_skipped:
|
.leading_spaces_skipped:
|
||||||
|
|
||||||
; See whether we have /h or /u
|
; See whether we have /h, /u, /l, or /?
|
||||||
cmp cx, 2
|
cmp cx, 2
|
||||||
jb .not_mode_option
|
jb .not_mode_option
|
||||||
cmp byte [si], '/'
|
cmp byte [si], '/'
|
||||||
jne .not_mode_option
|
jne .not_mode_option
|
||||||
|
|
||||||
cmp byte [si + 1], 'h'
|
cmp byte [si + 1], 'h'
|
||||||
|
je .hard_mode
|
||||||
|
cmp byte [si + 1], 'H'
|
||||||
jne .not_hard_mode
|
jne .not_hard_mode
|
||||||
|
|
||||||
.hard_mode:
|
.hard_mode:
|
||||||
|
@ -42,6 +44,8 @@ parse_arguments:
|
||||||
|
|
||||||
.not_hard_mode:
|
.not_hard_mode:
|
||||||
cmp byte [si + 1], 'u'
|
cmp byte [si + 1], 'u'
|
||||||
|
je .ultra_hard_mode
|
||||||
|
cmp byte [si + 1], 'U'
|
||||||
jne .not_ultra_hard_mode
|
jne .not_ultra_hard_mode
|
||||||
|
|
||||||
.ultra_hard_mode:
|
.ultra_hard_mode:
|
||||||
|
@ -62,11 +66,57 @@ parse_arguments:
|
||||||
.option_done:
|
.option_done:
|
||||||
|
|
||||||
.not_ultra_hard_mode:
|
.not_ultra_hard_mode:
|
||||||
|
cmp byte [si + 1], 'l'
|
||||||
|
je print_license
|
||||||
|
cmp byte [si + 1], 'L'
|
||||||
|
je print_license
|
||||||
|
|
||||||
|
cmp byte [si + 2], '?'
|
||||||
|
je print_help
|
||||||
|
|
||||||
.not_mode_option:
|
.not_mode_option:
|
||||||
|
|
||||||
test cx, cx
|
test cx, cx
|
||||||
jz seed_rng_date
|
jz seed_rng_date
|
||||||
|
|
||||||
|
seed_rng_argument:
|
||||||
|
xor ax, ax
|
||||||
|
xor dx, dx
|
||||||
|
mov bp, mull32
|
||||||
|
call store32
|
||||||
|
|
||||||
|
.loop:
|
||||||
|
xor dx, dx
|
||||||
|
mov ax, 10
|
||||||
|
mov bp, mulr32
|
||||||
|
call store32
|
||||||
|
call mul32
|
||||||
|
mov bp, addl32
|
||||||
|
call store32
|
||||||
|
|
||||||
|
lodsb
|
||||||
|
cmp al, '0'
|
||||||
|
jb print_help
|
||||||
|
cmp al, '9'
|
||||||
|
ja print_help
|
||||||
|
|
||||||
|
sub al, '0'
|
||||||
|
|
||||||
|
xor ah, ah
|
||||||
|
xor dx, dx
|
||||||
|
mov bp, addr32
|
||||||
|
call store32
|
||||||
|
|
||||||
|
call add32
|
||||||
|
mov bp, mull32
|
||||||
|
call store32
|
||||||
|
|
||||||
|
loop .loop
|
||||||
|
|
||||||
|
mov bp, rng_seed
|
||||||
|
call store32
|
||||||
|
jmp select_target
|
||||||
|
|
||||||
print_help:
|
print_help:
|
||||||
mov ah, 9
|
mov ah, 9
|
||||||
mov dx, help_str
|
mov dx, help_str
|
||||||
|
@ -74,6 +124,13 @@ print_help:
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
print_license:
|
||||||
|
mov ah, 9
|
||||||
|
mov dx, license_str
|
||||||
|
int 0x21
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
seed_rng_date:
|
seed_rng_date:
|
||||||
; Get date
|
; Get date
|
||||||
mov ah, 0x2a
|
mov ah, 0x2a
|
||||||
|
@ -1039,9 +1096,11 @@ guesses_str db ' guesses.$'
|
||||||
guess_str db ' guess.$'
|
guess_str db ' guess.$'
|
||||||
|
|
||||||
help_str:
|
help_str:
|
||||||
db 'Usage: dosdl [/h | /u]', 13, 10
|
db 'Usage: dosdl [/h | /u | /l | /?] [seed]', 13, 10
|
||||||
db '/h Enable hard mode.', 13, 10
|
db '/h Enable hard mode.', 13, 10
|
||||||
db '/u Enable ultra hard mode.', 13, 10
|
db '/u Enable ultra hard mode.', 13, 10
|
||||||
|
db '/l Display license info.', 13, 10
|
||||||
|
db '/? Display this help.', 13, 10
|
||||||
db 13, 10
|
db 13, 10
|
||||||
db 'Hello DOSdl is a word guessing game. You have six tries to guess the correct', 13, 10
|
db 'Hello DOSdl is a word guessing game. You have six tries to guess the correct', 13, 10
|
||||||
db 'English word. After a guess the game displays feedback under each letter:', 13, 10
|
db 'English word. After a guess the game displays feedback under each letter:', 13, 10
|
||||||
|
@ -1056,8 +1115,9 @@ help_str:
|
||||||
db 13, 10
|
db 13, 10
|
||||||
db 'In hard mode all letters marked as being in the correct place must stay fixed', 13, 10
|
db 'In hard mode all letters marked as being in the correct place must stay fixed', 13, 10
|
||||||
db 'and those marked as being in the wrong place must be reused. In ultra hard mode', 13, 10
|
db 'and those marked as being in the wrong place must be reused. In ultra hard mode', 13, 10
|
||||||
db 'letters marked as being in the wrong place must also be moved and letters not', 13, 10
|
db 'letters marked as being in the wrong place must also be moved and letters that', 13, 10
|
||||||
db 'in the word must not be played again.$'
|
db 'have been ruled out must not be played again.$'
|
||||||
|
|
||||||
%include "dictionary.inc"
|
%include "dictionary.inc"
|
||||||
%include "targets.inc"
|
%include "targets.inc"
|
||||||
|
%include "license.inc"
|
||||||
|
|
18
embed-textfile.py
Normal file
18
embed-textfile.py
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
import sys
|
||||||
|
srcpath = sys.argv[1]
|
||||||
|
name = sys.argv[2]
|
||||||
|
targetpath = sys.argv[3]
|
||||||
|
|
||||||
|
with open(srcpath, 'r') as f:
|
||||||
|
lines = [line.rstrip() for line in f]
|
||||||
|
|
||||||
|
with open(targetpath, 'w') as f:
|
||||||
|
f.write(f'{name}:\n')
|
||||||
|
for line in lines:
|
||||||
|
encoded = line.encode('cp437')
|
||||||
|
if len(encoded) > 0:
|
||||||
|
f.write(f'\tdb {", ".join(str(char) for char in encoded)}, 13, 10\n')
|
||||||
|
else:
|
||||||
|
f.write('\tdb 13, 10\n')
|
||||||
|
f.write("\tdb '$'\n")
|
Loading…
Reference in a new issue