/programs/games/soko/trunk/100BOXES.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/990602.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/AENIGMA.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/ALBG-BST.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/ALBG1-1.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/ALBG1-2.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/ALBG1-3.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/AUTOGEN.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/BAGLE.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/BAGLE2.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/BOXXLE1.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/BOXXLE2.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/CANTRIP.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/CANTRIP2.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/CELLTYPE.INC |
---|
0,0 → 1,28 |
EOF equ 0xf0 ; image index: |
macro EndConf {db 0xff} |
tEmpty equ 0000b ; (0xf) - missing |
tPlace equ 0001b ; 9 |
tPlayer equ 0010b ; 0 |
tWall equ 0100b ; 1 |
tBlock equ 0110b ; 5 |
tHole equ 0111b ; 2 |
tConnect equ 1000b ; 7 |
tStConnect equ 1001b ; 8 |
tPlate equ 1010b ; 3 |
tBroken equ 1011b ; 4 |
tLaserW equ 1100b ; 0xa |
tLaserS equ 1101b ; 0xa |
tLaserN equ 1110b ; 0xa |
tLaserE equ 1111b ; 0xa |
tRedB equ 1000b ; 0xc |
tBluB equ 1001b ; 0xb |
tGrnB equ 1010b ; 0xd |
tYelB equ 1011b ; 0xe |
sSokoban equ 0xf1 |
sSokolor equ 0xf2 |
sSokonex equ 0xf3 |
/programs/games/soko/trunk/CNF |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/CNF.ASM |
---|
0,0 → 1,102 |
include "celltype.inc" |
macro Header name, game_type, x, y |
{ |
db game_type,x,y |
local ..label |
db ..label-$-1 |
db name |
..label: |
} |
macro C cell,cnt |
{ |
if cnt eq |
db (cell shl 4) |
else |
db (cell shl 4)+cnt-1 |
end if |
} |
Header 'Sokonex test', sSokonex, 6, 6 |
; # Wall; + Connector; * Player; B Block |
; ###### |
; # + # |
; # # |
; # ++ # |
; #* # |
; ###### |
C tWall,7 |
C tEmpty,2 |
C tConnect |
C tEmpty |
C tWall,2 |
C tEmpty,4 |
C tWall,2 |
C tEmpty |
C tConnect,2 |
C tEmpty |
C tWall,2 |
C tPlayer |
C tEmpty,3 |
C tWall,7 |
EndConf |
Header 'Just push!', sSokoban, 9, 8 |
; ##### |
; ### ### |
; # @@@ # |
; # # # # |
; ## #B# ## |
; # B * B # |
; # # # |
; ######### |
C tEmpty,2 |
C tWall,5 |
C tEmpty,2 |
C tWall,3 |
C tEmpty,3 |
C tWall,4 |
C tEmpty,2 |
C tPlace,3 |
C tEmpty,2 |
C tWall,2 |
C tEmpty,2 |
C tWall |
C tEmpty |
C tWall |
C tEmpty,2 |
C tWall,3 |
C tEmpty |
C tWall |
C tBlock |
C tWall |
C tEmpty |
C tWall,3 |
C tEmpty |
C tBlock |
C tEmpty |
C tPlayer |
C tEmpty |
C tBlock |
C tEmpty |
C tWall,2 |
C tEmpty,3 |
C tWall |
C tEmpty,3 |
C tWall,10 |
EndConf |
/programs/games/soko/trunk/DH1.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/DH2.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/DIM-YORK.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/ERIM.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/FPOK.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/GRIG2001.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/GRIG2002.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/HANDMADE.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/HEYTAK.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/HOWARD1.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/HOWARD2.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/HOWARD3.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/HOWARD4.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/JCD.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/JCT.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/KOKOBAN.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/KOMPACT.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/LOMA.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/MACROS.INC |
---|
0,0 → 1,189 |
; new application structure |
macro meos_app_start |
{ |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x01 |
dd __start |
dd __end |
dd __memory |
dd __stack |
if used __params & ~defined __params |
dd __params |
else |
dd 0x0 |
end if |
dd 0x0 |
} |
MEOS_APP_START fix meos_app_start |
macro code |
{ |
__start: |
} |
CODE fix code |
macro data |
{ |
__data: |
} |
DATA fix data |
macro udata |
{ |
if used __params & ~defined __params |
__params: |
db 0 |
__end: |
rb 255 |
else |
__end: |
end if |
__udata: |
} |
UDATA fix udata |
macro meos_app_end |
{ |
align 32 |
rb 2048 |
__stack: |
__memory: |
} |
MEOS_APP_END fix meos_app_end |
; language for programs |
lang fix ru ; ru en fr ge fi |
;lang equ ru |
; optimize the code for size |
macro add arg1,arg2 |
{ |
if arg1 in <eax,ebx,ecx,edx,esi,edi,ebp,esp> |
if arg2 eqtype 0 |
if arg2 = 1 |
inc arg1 |
else |
add arg1,arg2 |
end if |
else |
add arg1,arg2 |
end if |
else |
add arg1,arg2 |
end if |
} |
macro sub arg1,arg2 |
{ |
if arg2 eqtype 0 |
if arg2 = 1 |
dec arg1 |
else |
sub arg1,arg2 |
end if |
else |
sub arg1,arg2 |
end if |
} |
macro mov arg1,arg2 |
{ |
if arg1 in <eax,ebx,ecx,edx,esi,edi,ebp,esp> |
if arg2 eqtype 0 |
if arg2 = 0 |
xor arg1,arg1 |
else if arg2 = 1 |
xor arg1,arg1 |
inc arg1 |
else if arg2 = -1 |
or arg1,-1 |
else if arg2 > -128 & arg2 < 128 |
push arg2 |
pop arg1 |
else |
mov arg1,arg2 |
end if |
else |
mov arg1,arg2 |
end if |
else |
mov arg1,arg2 |
end if |
} |
macro struct name |
{ |
virtual at 0 |
name name |
sizeof.#name = $ - name |
end virtual |
} |
; structures used in MeOS |
struc process_information |
{ |
.cpu_usage dd ? ; +0 |
.window_stack_position dw ? ; +4 |
.window_stack_value dw ? ; +6 |
.not_used1 dw ? ; +8 |
.process_name rb 12 ; +10 |
.memory_start dd ? ; +22 |
.used_memory dd ? ; +26 |
.PID dd ? ; +30 |
.x_start dd ? ; +34 |
.y_start dd ? ; +38 |
.x_size dd ? ; +42 |
.y_size dd ? ; +46 |
.slot_state dw ? ; +50 |
rb (1024-52) |
} |
struct process_information |
struc system_colors |
{ |
.frame dd ? |
.grab dd ? |
.grab_button dd ? |
.grab_button_text dd ? |
.grab_text dd ? |
.work dd ? |
.work_button dd ? |
.work_button_text dd ? |
.work_text dd ? |
.work_graph dd ? |
} |
struct system_colors |
; constants |
; events |
EV_IDLE = 0 |
EV_TIMER = 0 |
EV_REDRAW = 1 |
EV_KEY = 2 |
EV_BUTTON = 3 |
EV_EXIT = 4 |
EV_BACKGROUND = 5 |
EV_MOUSE = 6 |
EV_IPC = 7 |
EV_STACK = 8 |
; event mask bits for function 40 |
EVM_REDRAW = 1b |
EVM_KEY = 10b |
EVM_BUTTON = 100b |
EVM_EXIT = 1000b |
EVM_BACKGROUND = 10000b |
EVM_MOUSE = 100000b |
EVM_IPC = 1000000b |
EVM_STACK = 10000000b |
/programs/games/soko/trunk/MAELSTRM.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/MARIOB.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/MASMICRO.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/MASSASQ.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/MICRCOSM.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/MICROBAN.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/MINICOSM.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/NABOCOSM.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/NOVOBAN.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/NUMBERS.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/ONLINE.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/ORIGINAL.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/PICOCOSM.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/RULES.TXT |
---|
0,0 → 1,180 |
SOKOBAN FOR MENUET v0.1 July 2, 2004 |
Written in pure assembler by Ivushkin Andrey aka Willow |
Main idea, art & graphics |
Sokofun for Windows 95 by Games 4 Brains |
and Sokoban 2.3 by Björn Källmark |
Level designers: |
Alberto Garcia, Aymeric du Peloux, Brian Kent, David Holland, |
David W Skinner, Erim Sever, Evgeniy Grigoriev, François Marques, |
Frantisek Pokorny, Howard Abed,J franklin Mentzer, Jaques Duthen, |
John C Davis, John Polhemus, Kobus Theron, Lee Haywood, Mario Bonenfant, |
Martin P Holland, Mic (Jan Reineke), Phil Shapiro, Richard Weston, |
Sven Egevad, Ken'ichiro Takahashi (takaken), Thinking Rabbit, |
Yoshio Murase, ZICO (Zbigniew Kornas) |
Special thanks to Hirohiko Nakamiya |
More credits: |
Masato Hiramatsu, Kazuo Fukushima, Klaus Clemens |
Game uses its own format of levelset files *.LEV |
with simple run-length compression |
!!!!NB!!!! |
It is strongly recommended that you place application files into C:\menuetos |
directory. Otherwise you should change CUR_DIR (SOKO.ASM, line 30) to the |
appropriate value! |
Interface |
When loaded, application opens skin file SKIN.RAW in the current directory. |
It is an image 16x240 pt. Then so-named "standard" levels SOKO-?.LEV are |
read in the same dir. ? means a number within 0 and 9. |
You can navigate along the level list pressing PgUp and PgDn keys. User |
selects the level desired by pressing keys 0-9. Space key moves focus to the |
text field below, so you can enter filename there. |
Additional levels are in program subfolder LEV. For example, you wish to load |
a levelset file /HD/1/MENUETOS/LEV/AENIGMA.LEV. Then you should enter |
lev/aenigma.lev |
Within the textbox user can press Backspace. There's no cursor yet :-( |
Pressing Enter in the text field is equvalent for button "Load file". |
When in game, pressing Esc restarts the level, pressing Home returns back to |
the levelset selection mode. |
Game Rules |
You have a little PUSHER. You will guide him using the cursor-keys. |
SOKOBAN (same as SOKOBLUE or SOKOWAHN) |
The pink pyramids have to be pushed onto the marked places. |
The problem is: You can only push things, but not pull them. |
A level is solved when every pyramid stands on a marked place. |
SOKOLOR |
Tiles of the same colour need to be pushed together. |
SOKONEX |
Push all CONNECTOR-TILES together! |
Game-items of SOKONEX and their properties: |
PLATE: undestructable, movable, covers holes |
HOLE: you can push LASERS and BROKEN PLATES into them |
BROKEN PLATE: destructable, movable |
CONNECTOR: undestructable, movable |
FIXED CONNECTOR: undestructable, not movable |
LASER: destructable, movable |
BEAM: eleminates LASERS and BROKEN PLATES, paralyses PUSHERS |
The objective is always the same: You must push boxes the right way. |
Sometimes tasks seem to be impossible. |
But, be sure: There is always a solution! |
To-Do list: |
1. Better interface - I saw XTREE and understood that it's really possible to |
write wonderful programs for MenuetOS easily. |
2. More skins. And lesser file size... |
3. Improve user interaction, I think. |
4. Level Editor. Having a great wish you may compose levelsets by yourself and |
compile them with FASM - see files CNF.ASM and CNF. |
5. Correct bugs, make improvements from opinions of you, respective users of |
this application ;-) |
6. Include support for XTREE dialogs. |
**************************************** |
**************************************** |
MENUET v0.1 2 ¨î«ï 2004 £. |
¯¨á ç¨á⮬ áᥬ¡«¥à¥ ¢ãèª¨ë¬ ¤à¥¥¬ (Willow) |
« ¢ ï ¨¤¥ï, à¨á㪨 ¨ £à 䨪 |
Sokofun for Windows 95 ®â Games 4 Brains |
¨ Sokoban 2.3 ®â Björn Källmark |
¨§ ©¥àë ã஢¥©: |
Alberto Garcia, Aymeric du Peloux, Brian Kent, David Holland, |
David W Skinner, Erim Sever, Evgeniy Grigoriev, François Marques, |
Frantisek Pokorny, Howard Abed,J franklin Mentzer, Jaques Duthen, |
John C Davis, John Polhemus, Kobus Theron, Lee Haywood, Mario Bonenfant, |
Martin P Holland, Mic (Jan Reineke), Phil Shapiro, Richard Weston, |
Sven Egevad, Ken'ichiro Takahashi (takaken), Thinking Rabbit, |
Yoshio Murase, ZICO (Zbigniew Kornas) |
ᮡ ï ¡« £®¤ à®áâì Hirohiko Nakamiya |
é¥ ¡« £®¤ à®áâ¨: |
Masato Hiramatsu, Kazuo Fukushima, Klaus Clemens |
¨£à¥ ¨á¯®«ì§ã¥âáï á¯¥æ¨ «ìë© ä®à¬ â ä ©«®¢ ã஢¥© *.LEV |
á âਢ¨ «ìë¬ á¦ â¨¥¬ ¨ä®à¬ 樨 |
!!!!NB!!!! |
áâ®ïâ¥«ì® à¥ª®¬¥¤ã¥âáï ¯®¬¥áâ¨âì ä ©«ë ¯à®£à ¬¬ë ¢ ª â «®£ C:\menuetos. |
¯à®â¨¢®¬ á«ãç ¥ ¬ ¯à¨¤¥âáï ¨§¬¥¨âì ª®áâ âã CUR_DIR ¢ ä ©«¥ |
SOKO.ASM áâப¥ 30 ᮮ⢥âá¢ãî騬 § 票¥¬! |
â¥à䥩á |
ਠ§ ¯ã᪥ ¯à®£à ¬¬ ®âªàë¢ ¥â ä ©« ᪨®¢ ¤«ï ¨£à®¢ëå ®¡ê¥ªâ®¢ SKIN.RAW |
¢ ᮡá⢥®¬ ª â «®£¥. â® ª à⨪ à §¬¥à®¬ 16å240 â®ç¥ª. ⥬ ¢ í⮬ |
¦¥ ª â «®£¥ ç¨â îâáï â ª §ë¢ ¥¬ë¥ "áâ ¤ àâë¥" ã஢¨ SOKO-?.LEV, £¤¥ |
? - ç¨á«® ®â 0 ¤® 9. |
® ᯨáªã ã஢¥© ¬®¦® ¯¥à¥¤¢¨£ âìáï ª« ¢¨è ¬¨ PgUp ¨ PgDn. ¥« ¥¬ë© ã஢¥ì |
¢ë¡¨à ¥âáï ¦ ⨥¬ ª« ¢¨è ®â 0 ¤® 9. |
¦ ⨥ ¯à®¡¥« ¯¥à¥®á¨â 䮪ãá ⥪á⮢®¥ ¯®«¥ ¢¢®¤ ¨¬¥¨ ä ©« ã஢ï. |
®¯®«¨â¥«ìë¥ ã஢¨ 室ïâáï ¢ ¯®¤ª â «®£¥ LEV ¯à®£à ¬¬ë. ®¯ãá⨬, ¢ë |
å®â¨â¥ § £à㧨âì ä ©« ã஢¥© /HD/1/MENUETOS/LEV/AENIGMA.LEV. ®£¤ á«¥¤ã¥â |
¢¢¥á⨠áâபã lev/aenigma.lev |
¯®«¥ ¤¥©áâ¢ã¥â ª« ¢¨è Backspace. ãàá®à ¯®ª ¥ ॠ«¨§®¢ :-( ¦ ⨥ |
Enter ¢ áâப¥ ¢¢®¤ íª¢¨¢ «¥â® ª®¯ª¥ ' £à㧨âì'. |
०¨¬¥ ¨£àë ¦ ⨥ Esc ¯à®¨§¢®¤¨â à¥áâ àâ ã஢ï, ¦ ⨥ Home ¢ë¢®¤¨â |
¨§ ¨£àë ®¡à â® ª ᯨáªã ã஢¥©. |
à ¢¨« ¨£àë |
í⮩ ¨£à¥ ã ¢ á ¥áâì , ª®â®àë¬ ¬®¦® ã¯à ¢«ïâì ª« ¢¨è ¬¨ áâ५®ª. |
(¨ ç¥ :-) ¨«¨ ) |
®§®¢ë¥ ¯¨à ¬¨¤ª¨ 㦮 ¯¥à¥¤¢¨ãâì á¯¥æ¨ «ìë¥ ª«¥âª¨. |
஡«¥¬ ¢ ⮬, çâ® ¬®¦® ⮫쪮 ⮫ª âì ¯à¥¤¬¥âë, ® ¥ â é¨âì ¨å. |
஢¥ì à¥è¥, ª®£¤ ª ¦¤ ï ¯¨à ¬¨¤ª 室¨âáï ¬ થன ª«¥âª¥. |
|
«®ª¨ ®¤¨ ª®¢®£® 梥â 㦮 ¯®¤â®«ª âì ¤à㣠ª ¤àã£ã. |
|
ᥠ¡«®ª¨-ª®¥ªâ®àë 㦮 ¯®¤â®«ª âì ¤à㣠ª ¤àã£ã. |
¡ê¥ªâë ¢ ¨£à¥ ¨ ¨å ᢮©á⢠: |
: ¥ã¨ç⮦ ¥¬ ï, ¯®¤¢¨¦ ï, § ªàë¢ ¥â |
: â㤠¬®¦® áâ «ª¨¢ âì ¨ |
: ã¨ç⮦ ¥¬ ï, ¯®¤¢¨¦ ï |
: ¥ã¨ç⮦ ¥¬ë©, ¯®¤¢¨¦ë© |
- : ¥ã¨ç⮦ ¥¬ë©, ¯®¤¢¨¦ë© |
: ã¨ç⮦ ¥¬ë©, ¯®¤¢¨¦ë© |
: ã¨ç⮦ ¥â ¨ , ¯ à «¨§ã¥â (!) |
¥«ì ¨£àë ¢á¥£¤ ®¤¨ ª®¢ : ë ¤®«¦ë ¯à ¢¨«ì® ¯¥à¥áâ ¢«ïâì ¡«®ª¨. |
®£¤ § ¤ ¨¥ ª ¦¥âáï ¥¢ë¯®«¨¬ë¬. |
® ¡ã¤ì⥠㢥à¥ë: ¢á¥£¤ ¥áâì à¥è¥¨¥! |
â® ¥é¥ ¬®¦® ᤥ« âì: |
1. ®ªà á¨¢è¥ ¨â¥à䥩á - ¯®á«¥ XTREE ï ¯®ï«, çâ® ¤«ï Menuet ¬®¦® |
®â®á¨â¥«ì® «¥£ª® ¯¨á âì ®ç¥ì ªà á¨¢ë¥ ¯à®£à ¬¬ë. |
2. ®¯®«¨â¥«ìë¥ áª¨ë - ¤«ï £ãଠ®¢. ¬¥ìè¥ à §¬¥à ä ©«®¢ ᤥ« âì: |
11 ª¡ ª ª-¨ª ª ¤®à®£¥ ¥ ¢ «ïîâáï |
3. «ãçè¨âì ã¯à ¢«¥¨¥ - ¬¥ â ª ª ¦¥âáï. |
4. ¥¤ ªâ®à ã஢¥©. ਠ®á®¡®¬ ¦¥« ¨¨ ä ©«ë ã஢¥© ¬®¦® ¯¨á âì ¢àãçãî ¨ |
ª®¬¯¨«¨à®¢ âì FASM'®¬ - á¬. ä ©«ë CNF.ASM ¨ CNF. |
5. á¯à ¢¨âì ¡ £¨, ¢¥á⨠ã«ãçè¥¨ï ¨ ãç¥áâì ¯®¦¥« ¨ï á, 㢠¦ ¥¬ëå |
¯®«ì§®¢ ⥫¥© ¤ ®© ¯à®£à ¬¬ë ;-) |
6. ª«îç¨âì ¯®¤¤¥à¦ªã ¤¨ «®£®¢ ¨§ XTREE. |
/programs/games/soko/trunk/SASQ_.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SASQ_III.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SASQ_IV.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SASQ_V.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SASQ_VI.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SIMPLE.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SKIN.RAW |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SOKEVO.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SOKHARD.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SOKO |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SOKO-4.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SOKO-5.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SOKO-6.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SOKO-7.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SOKO-8.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SOKO-9.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SOKO.ASM |
---|
0,0 → 1,1161 |
; SOKOBAN FOR MENUET v0.1 |
; Written in pure assembler by Ivushkin Andrey aka Willow |
; |
; Last changed: July 2, 2004 |
; |
; Main idea, art & graphics |
; Sokofun for Windows 95 by Games 4 Brains |
; and Sokoban 2.3 by Björn Källmark |
; |
; Level designers: |
; |
; Alberto Garcia, Aymeric du Peloux, Brian Kent, David Holland, |
; David W Skinner, Erim Sever, Evgeniy Grigoriev, François Marques, |
; Frantisek Pokorny, Howard Abed,J franklin Mentzer, Jaques Duthen, |
; John C Davis, John Polhemus, Kobus Theron, Lee Haywood, Mario Bonenfant, |
; Martin P Holland, Mic (Jan Reineke), Phil Shapiro, Richard Weston, |
; Sven Egevad, Ken'ichiro Takahashi (takaken), Thinking Rabbit, |
; Yoshio Murase, ZICO (Zbigniew Kornas) |
; |
; Special thanks to Hirohiko Nakamiya |
; |
; More credits: |
; Masato Hiramatsu, Kazuo Fukushima, Klaus Clemens |
; |
; Game uses its own format of levelset files *.LEV |
; with simple run-length compression |
; COMPILE WITH FASM |
CUR_DIR equ '/HD/1/MENUETOS/' ; change it to appropriate path |
SKIN_SIZE equ 11520 ; size of skin file (16x240) |
; field dimensions |
FLD_LEFT equ 43 |
FLD_LEFT2 equ FLD_LEFT shl 16 |
FLD_TOP equ 40 |
FLD_TOP2 equ FLD_TOP shl 16 |
IMG_SIZE equ 16 shl 16+16 |
SHIFT equ (16 shl 16) |
WND_COLOR equ 0x03aabbcc |
; level list dimensions |
LEVLIST_XY equ FLD_TOP shl 16+45 |
LEVLIST_SPACING equ 10 |
LEVWND_X equ 320 |
LEVWND_Y equ 200 |
; input line dimensions |
INP_X equ 10 shl 16+300 |
INP_Y equ 160 shl 16+16 |
INP_XY equ 15 shl 16+164 |
; load button dimensions |
LOAD_X equ 130 shl 16+65 |
LOAD_Y equ 180 shl 16+14 |
LOAD_XY equ 135 shl 16+184 |
CHOOSE_XY equ 40 shl 16+148 |
WIN_XY equ 135 shl 16+25 |
; workmode constants, more defs in CELLTYPE.INC |
WM_WINNER equ 0x10 |
WM_READSET equ 0 |
WM_LOSE equ 0x20 |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x01 |
dd START |
dd I_END |
dd 0x100000 |
dd 0x7fff0 |
dd 0x0 |
dd 0x0 |
include 'macros.inc' ; decrease code size (optional) |
include 'celltype.inc' ; object identifiers |
;include 'debug.inc' |
;lang equ ru ; russian interface; english if undefined |
START: |
mov eax,58 ; load skin image-it is in RAW 16x240 BGR |
mov ebx,file_info ; IrfanView recommended |
int 0x40 |
test ebx,ebx |
; jmp load_level |
; jz close |
load_fail: ; clear input line, also if levelset load failed |
mov [inp_pos],0 |
load_std: |
mov esi,stdlev |
mov edi,path_end |
mov ecx,stdlev_len-stdlev |
rep movsb |
mov ecx,10 |
reset_fi: |
mov dword[cnf_level],level_start |
xor eax,eax |
mov [levpage],eax |
mov word[ll_num],'00' ; reset some counters |
read_cnf: |
mov eax,58 |
mov ebx,file_info |
int 0x40 |
test ebx,ebx ; load standard levels SOKO-?.LEV instead of custom |
jz nxt_cnf |
add dword[cnf_level],ebx |
nxt_cnf: |
test ecx,ecx ; this check is for loading a custom levelset |
jz no_increase |
inc byte[file_num] ; next standard levelset |
loop read_cnf |
no_increase: |
cmp dword[cnf_level],level_start |
jne go_on |
test ecx,ecx |
jz load_fail |
jmp close ; missing standard levels & exiting |
go_on: |
mov eax,[cnf_level] |
mov byte[eax],0xf0 ; end-of-levels mark |
call read_levelset |
backto_set: |
mov byte[workmode],WM_READSET |
mov byte[winmode],0 |
jmp red |
restart_level: |
call decode_field ; uncompress level |
red: |
call draw_window |
still: |
mov eax,10 |
int 0x40 |
cmp byte[winmode],WM_WINNER |
je backto_set |
cmp byte[winmode],WM_LOSE |
je backto_set |
cmp eax,1 |
je red |
cmp eax,2 |
je key |
cmp eax,3 |
je button |
jmp still |
key: |
mov eax,2 |
int 0x40 |
cmp byte[workmode],WM_READSET |
jne key_move |
cmp ah,32 ; Space moves focus to input line |
je is_input |
cmp ah,184 |
jne no_prev |
cmp [levpage],0 ; PgUp |
jz still |
sub [levpage],10 |
cmp byte[ll_num+1],'0' |
jnz _pu |
dec byte[ll_num] |
mov byte[ll_num+1],'9'+1 |
_pu: |
dec byte[ll_num+1] |
jmp red |
no_prev: |
cmp ah,183 ; PgDn |
jne no_next |
mov eax,[levpage] |
add eax,10 |
cmp eax,[levelcount] |
jae still |
mov [levpage],eax |
cmp byte[ll_num+1],'9' |
jnz _pd |
inc byte[ll_num] |
mov byte[ll_num+1],'0'-1 |
_pd: |
inc byte[ll_num+1] |
jmp red |
no_next: |
sub ah,48 |
cmp ah,9 |
ja still |
movzx eax,ah ; user selects a level |
add eax,[levpage] |
cmp eax,[levelcount] |
jae still |
mov eax,[levelmap+eax*4] |
mov [levptr],eax ; current level pointer |
mov al,byte[eax] |
mov byte[workmode],al |
jmp restart_level |
; we're already in game |
key_move: |
cmp ah,180 ; Home |
je backto_set |
cmp ah,176 |
jb no_arrows |
sub ah,176 |
cmp ah,3 |
ja no_arrows |
movzx ecx,ah |
movzx edx,[player] |
inc ch |
call valid_move |
cmp byte[winmode],WM_WINNER |
jne no_winner |
mov ecx,0x20ac0000 |
mov edx,win_msg |
mov esi,win_msg_end-win_msg ; print victory congratulations |
print_msg: |
mov ebx,WIN_XY |
mov eax,4 |
int 0x40 |
jmp d_f |
no_winner: |
cmp byte[winmode],WM_LOSE |
jne d_f |
no_loser: |
test al,al ; no move accepted |
jnz still |
d_f: |
call draw_field ; move performed-redraw |
jmp still |
no_arrows: |
cmp ah,27 |
je restart_level |
jmp still |
button: |
mov eax,17 |
int 0x40 |
cmp ah,1 |
jne noclose |
close: |
xor eax,eax |
dec eax |
int 0x40 ; shutdown. |
noclose: |
cmp ah,2 |
jne no_input |
is_input: ; simple input line with backspace feature |
mov ebx,[entered] ; sorry - no cursor |
test ebx,ebx |
jnz wait_input |
mov [inp_pos],ebx |
inc [entered] |
wait_input: |
call draw_input |
mov eax,10 |
int 0x40 |
cmp eax,2 |
jne still |
mov edi,[inp_pos] |
mov eax,2 |
int 0x40 |
shr eax,8 |
cmp eax,27 |
je still |
cmp eax,13 |
je load_level |
cmp eax,8 |
je backsp |
mov [fn_input+edi],al |
inc [inp_pos] |
jmp wait_input |
backsp: |
test edi,edi |
jz wait_input |
dec [inp_pos] |
jmp wait_input |
no_input: |
cmp ah,3 |
jne no_load |
load_level: |
mov ecx,[inp_pos] |
test ecx,ecx |
je load_std |
mov esi,fn_input |
mov byte[esi+ecx],0 |
inc ecx |
mov edi,path_end |
rep movsb |
jmp reset_fi |
no_load: |
jmp still |
; ********************************************* |
; ** FILLS LEVEL POINTER MAP ****************** |
; ********************************************* |
read_levelset: |
mov dword[wnd_width],LEVWND_X |
mov dword[wnd_height],LEVWND_Y |
mov [levelcount],0 |
mov edi,level_start |
mov esi,levelmap |
mov al,0xff |
rls_cycle: |
cmp byte[edi],EOF |
je end_of_levelset |
mov [esi],edi |
add esi,4 |
mov ecx,1024 |
inc [levelcount] |
repne scasb |
jecxz eol ;end_of_levelset |
jmp rls_cycle |
end_of_levelset: |
mov eax,[levelcount] |
; debug_print_dec eax |
ret |
eol: |
; debug_print '*** ' |
jmp end_of_levelset |
; ********************************************* |
; ******* DEFINE & DRAW WINDOW & OTHER STUFF * |
; ********************************************* |
draw_window: |
mov eax,12 |
mov ebx,1 |
int 0x40 |
mov eax,0 |
mov ebx,150*65536 |
add ebx,[wnd_width] |
mov ecx,50*65536 |
add ecx,[wnd_height] |
mov edx,WND_COLOR |
mov esi,0x805080d0 |
mov edi,0x005080d0 |
int 0x40 |
mov eax,4 |
mov ebx,8*65536+8 |
mov ecx,0x10ddeeff |
mov edx,zagolovok |
mov esi,zag_konets-zagolovok |
int 0x40 |
cmp byte[workmode],WM_READSET |
je list_levels |
mov edi,[levptr] ; print custom level filename |
add ebx,170*65536 |
lea edx,[edi+4] |
movzx esi,byte[edi+3] |
int 0x40 |
call draw_field |
cmp [entered],0 |
jz end_of_draw |
mov edx,fn_input ; print input line text |
mov esi,[inp_pos] |
mov ebx,FLD_LEFT2+FLD_TOP-15 |
jmp draw_level_file |
list_levels: |
call draw_input |
mov eax,8 ; draw load button |
mov ebx,LOAD_X |
mov ecx,LOAD_Y |
mov edx,3 |
mov esi,WND_COLOR |
int 0x40 |
mov eax,4 |
mov ecx,0x20107a30 |
mov ebx,LOAD_XY |
mov edx,load_char |
mov esi,loadlen-load_char |
int 0x40 |
mov ebx,LEVLIST_XY |
mov edi,0x204e00e7 |
xor esi,esi |
mov ecx,10 |
ll_cycle: |
push ecx esi ebx esi |
lea ecx,[esi+'0'] |
mov [ll_num+2],cl |
mov ecx,edi |
mov edx,ll_num |
mov esi,4 |
int 0x40 |
add ebx,25 shl 16 |
pop esi |
add esi,[levpage] |
mov edx,[levelmap+esi*4] |
add edx,4 |
movzx esi,byte[edx-1] |
int 0x40 |
pop ebx esi ecx |
inc esi |
mov edx,[levelcount] |
sub edx,[levpage] |
cmp edx,esi |
jbe choose_print |
add ebx,LEVLIST_SPACING |
loop ll_cycle |
choose_print: |
mov edx,ll_msg |
mov esi,ll_msg_end-ll_msg |
mov ebx,CHOOSE_XY |
draw_level_file: |
mov eax,4 |
int 0x40 |
end_of_draw: |
mov eax,12 |
mov ebx,2 |
int 0x40 |
ret |
; ********************************************* |
; ******* DRAW CELL IMAGES WITHIN FIELD ******* |
; ********************************************* |
draw_field: |
cmp byte[workmode],sSokonex |
jne no_chl |
call check_lasers ; Sokonex game |
no_chl: |
mov eax,13 ; clear field area |
mov edx,WND_COLOR |
mov edi,[levptr] |
movzx ebx,byte[edi+1] |
shl ebx,4 |
lea ebx, [FLD_LEFT2+ebx] |
movzx ecx,byte[edi+2] |
shl ecx,4 |
lea ecx, [FLD_TOP shl 16+ecx] |
int 0x40 |
mov edx, FLD_LEFT2+FLD_TOP |
movzx edi,byte[edi+1] |
shl edi,20 |
add edi, FLD_LEFT2 |
xor eax,eax |
mov ecx,[fld_size] |
mov esi,field |
fld_cycle: |
lodsb |
call draw_img |
add edx,SHIFT |
cmp edx,edi |
jl no_nl |
add edx,16 |
and edx,0xffff |
add edx,FLD_LEFT2 |
no_nl: |
loop fld_cycle |
cmp byte[workmode],sSokonex |
jne end_of_df |
call draw_lasers |
end_of_df: |
ret |
; ********************************************* |
; *********** DRAW CELL IMAGE ***************** |
; ********************************************* |
draw_img: ; in: eax-object index, edx-coordinates |
pusha |
cmp eax,tWall |
jbe no_adjust |
cmp [workmode],sSokolor |
jne no_di_color |
add eax,pm_col-pm_nex |
jmp no_adjust |
no_di_color: |
cmp [workmode],sSokonex |
jne no_adjust |
inc eax |
no_adjust: |
movzx ebx,byte [pic_map+eax] |
cmp ebx,0xf |
je no_img |
bl_place: |
mov ecx, IMG_SIZE |
imul ebx, 256*3 |
add ebx,strip |
mov eax,7 ; draw_image sysfunc |
int 0x40 |
no_img: |
popa |
ret |
;**************************************** |
;******* DRAW CONTENTS OF INPUT LINE **** |
;**************************************** |
draw_input: |
push edi |
cmp eax,4 |
jne highlight |
mov esi,WND_COLOR |
jmp di_draw |
highlight: |
mov esi,0xe0e0e0 |
di_draw: |
mov eax,8 |
mov ebx,INP_X |
mov ecx,INP_Y |
mov edx,2 |
int 0x40 |
mov eax,4 |
mov ecx,0x00107a30 ; èà¨äâ 1 ¨ 梥â ( 0xF0RRGGBB ) |
mov ebx,INP_XY |
mov edx,fn_input |
mov esi,[inp_pos] |
int 0x40 |
pop edi |
ret |
; ******************************************************** |
; * DECOMPRESS LEVEL & FILL SOME TABLES TO CHECK VICTORY * |
; ******************************************************** |
decode_field: |
; debug_print <13,10> |
xor eax,eax |
mov dword[checkpoint],eax |
mov dword[checkpoint+4],eax |
mov byte[checkcount],al |
mov edi,[levptr] |
mov dl,[edi] |
mov [workmode],dl |
movzx edx,byte[edi+1] |
mov esi,edx |
shl esi,4 |
add esi,FLD_LEFT*2-25 |
mov [wnd_width],esi |
neg edx |
mov [move_map+8],edx |
neg edx |
mov [move_map+4],edx |
movzx eax,byte[edi+2] |
mov esi,eax |
shl esi,4 |
add esi,FLD_TOP*2-18 |
mov [wnd_height],esi |
imul edx,eax |
mov [fld_size],edx |
lea esi,[edi+4] |
movzx ecx,byte[edi+3] |
add esi,ecx |
cmp byte[esi],0xff |
je backto_set |
xor edi,edi |
cld |
dec_cycle: |
lodsb |
movzx ecx,al |
and ecx,0xf ; ecx-count of objects |
shr al,4 ; eax-index of object |
inc ecx |
sub edx,ecx |
dc_cycle: |
mov [field+edi],al |
call chk_win_obj |
jne no_register |
push eax ecx esi |
movzx ecx,al |
shl eax,12 |
or eax,edi |
inc byte[checkcount] |
cmp [workmode],sSokolor |
jne chk_sokoban |
; debug_print ':' |
; debug_print_dec ecx |
sub ecx,tRedB |
shl ecx,1 |
cmp word[checkpoint+ecx],0 |
jnz no_new_check |
mov [checkpoint+ecx],ax |
and eax,0xfff |
; debug_print_dec eax |
jmp no_new_check |
chk_sokoban: |
cmp [workmode],sSokonex |
jne no_nex |
cmp byte[checkcount],1 |
ja no_new_check |
no_nex: |
movzx ecx,byte[checkcount] |
mov word[checkpoint-2+ecx*2],ax |
no_new_check: |
pop esi ecx eax |
no_register: |
inc edi |
loop dc_cycle |
cmp edx,0 |
jg dec_cycle |
mov ecx,[fld_size] |
xor edx,edx |
fp_cycle: |
mov al,[field+edx] |
and al,0xfe |
cmp al,tPlayer |
je pl_found |
inc edx |
loop fp_cycle |
pl_found: |
mov [player],dx |
movzx eax,byte[checkcount] |
; debug_print_dec eax |
ret |
; ********************************************* |
; * WHETHER OBJECT IS VICTORY DEPENDENT ******* |
; ********************************************* |
chk_win_obj: ; al-object in a cell |
push ecx eax |
and al,0xf |
mov cl,[workmode] |
cmp cl,sSokoban |
jne nota_sokoban |
cmp al,tBlock |
jmp cwo_exit |
nota_sokoban: |
cmp cl,sSokonex |
jne nota_sokonex |
cmp al,tConnect |
je cwo_exit |
cmp al,tStConnect |
jmp cwo_exit |
nota_sokonex: |
push eax |
and eax,tRedB |
cmp eax,tRedB |
pop eax |
cwo_exit: |
pop eax ecx |
ret |
; ********************************************* |
; ***** GET CELL AT CERTAIN DIRECTION ********* |
; ********************************************* |
get_cell_at: ; in: dx - current cell, cl - direction |
mov ebx,edx ; out: al - object at direction, bx - new position |
movzx eax,cl |
and eax,11b |
mov eax, [move_map+eax*4] |
add ebx,eax |
mov al,[field+ebx] |
ret |
; ********************************************* |
; *** WHETHER A MOVE CAN BE DONE, & DO IT ***** |
; ********************************************* |
valid_move: ; in: dx - current cell, cl - direction |
push edx esi |
call get_cell_at ; if ch>0 perform all moves |
cmp al,tWall |
jb result_ok |
je vm_exit |
cmp [workmode],sSokonex |
jne n_vm_nex |
cmp al,tStConnect |
je vm_exit |
cmp al,tHole |
je vm_exit |
n_vm_nex: |
push edx ebx |
mov edx,ebx |
movzx esi,al |
call get_cell_at |
cmp al,tPlace |
jbe push_it |
cmp [workmode],sSokonex |
jne no_plate |
cmp al,tHole |
jne no_plate |
cmp esi,tBroken |
jae vm_sink |
cmp esi,tPlate |
jne no_plate |
and byte[field+ebx],0 |
vm_sink: |
and byte[field+edx],0 |
jmp vm_hole |
no_plate: |
pop ebx edx esi edx |
ret |
push_it: |
call do_move |
vm_hole: |
pop ebx edx |
result_ok: |
call do_move |
xor al,al |
vm_exit: |
pop esi edx |
ret |
; ********************************************* |
; ******* ACTUALLY PERFORM MOVES ************** |
; ********************************************* |
do_move: ; in: dx - source cell |
test ch,ch ; bx - target cell |
jz dm_exit ; ch = 0 don't perform moves |
mov al,byte[field+edx] |
cmp byte[workmode],sSokoban |
jne no_dm_ban |
and al,0xfe |
no_dm_ban: |
xor byte[field+edx],al |
or byte[field+ebx],al |
call chk_win_obj |
jne no_check_win |
pusha |
movzx ecx,byte[checkcount] |
xor edi,edi |
dm_cycle: |
movzx esi,word[checkpoint+edi*2] |
and esi,0xfff |
and edx,0xfff |
cmp esi,edx |
jnz not_an_obj |
movzx eax,dl |
movzx eax,byte[field+ebx] |
shl eax,12 |
or eax,ebx |
mov word[checkpoint+edi*2],ax |
jmp dm_ex |
not_an_obj: |
inc edi |
loop dm_cycle |
dm_ex: |
popa |
call check_win |
jne no_check_win |
mov byte[winmode],WM_WINNER |
no_check_win: |
cmp al,tPlayer |
jne dm_exit |
mov [player],bx |
dm_exit: |
ret |
; ********************************************* |
; ******* CHECK VICTORY CONDITIONS ************ |
; ********************************************* |
check_win: |
; debug_print <13,10> |
push eax ebx ecx esi |
xor eax,eax |
movzx ecx,byte[checkcount] |
mov esi,checkpoint |
mov bl,byte[workmode] |
xor bh,bh |
mov [colcount],bh |
cld |
cw_cycle: |
lodsw |
cmp bl,sSokoban |
jne nocw_sokoban |
test ax,1 shl 12 |
jz cw_not_inplace |
inc bh |
cw_not_inplace: |
loop cw_cycle |
; movzx eax,bh |
cmp [checkcount],bh |
jmp cw_exit |
nocw_sokoban: |
cmp bl,sSokonex |
jne nocw_sokonex |
mov dx,ax |
call scan_root |
cmp al,[checkcount] |
jmp cw_exit |
nocw_sokonex: |
cmp esi,checkpoint+8 |
ja cwlor_exit |
; debug_print '*' |
test ax,ax |
jz cw_cycle |
mov dx,ax |
call scan_root |
add [colcount],al |
; debug_print '*->' |
; debug_print_dec eax |
jmp cw_cycle |
cwlor_exit: |
mov al,[colcount] |
cmp al,[checkcount] |
cw_exit: |
; debug_print <13,10> |
pop esi ecx ebx eax |
ret |
; ********************************************* |
; **** WHETHER LASERS DESTROY SOMETHING ******* |
; ********************************************* |
check_lasers: |
pusha |
xor edx,edx |
mov ecx,[fld_size] |
cl_loop: |
push ecx edx |
mov cl,[field+edx] |
sub cl,tLaserW |
jl cl_exit |
cl_begin: |
call get_cell_at |
cmp al,tLaserW |
jae cl_destroy |
cmp al,tBroken |
je cl_destroy |
cmp al,tEmpty |
je no_cl_destroy |
cmp al,tHole |
je no_cl_destroy |
cmp al,tPlayer |
jne cl_exit |
mov ecx,0x20ac0000 |
mov edx,lose_msg |
mov esi,lose_msg_end-lose_msg ; print loose message |
mov byte[winmode],WM_LOSE |
mov ebx,WIN_XY |
mov eax,4 |
int 0x40 |
jmp cl_exit |
cl_destroy: |
mov byte[field+ebx],0 |
no_cl_destroy: |
mov edx,ebx |
jmp cl_begin |
cl_exit: |
pop edx ecx |
inc edx |
loop cl_loop |
popa |
ret |
; ********************************************* |
; *** USED BY CHECK_WIN IN SOKONEX & SOKOLOR ** |
; ********************************************* |
scan_root: ; input: dx-beginning cell, ebx-what to search |
push esi |
mov edi,srch ; output: eax-number of win_obj found |
mov eax,0xfff |
movzx ecx,[checkcount] |
inc ecx |
cld |
rep stosw ; clearing area for scan |
movzx ebx,dx |
and edx,eax ; dx-cell number to compare with |
shr ebx,12 ; bl-obj id |
mov [color],bl |
mov esi,srch |
mov edi,eax ; mask to extract cell |
mov word[srch],dx |
sr_loop: |
lodsw |
push esi ; saving scan pointer |
movzx edx,ax ; edx-[dirs*4][cell*12] |
and edx,edi |
; debug_print ' >' |
mov ecx,4 |
sr_dir_loop1: |
; debug_print '.' |
push ecx ; saving dir counter |
lea ebx,[ecx+11] |
bts word[esi-2],bx |
jc sr_endloop ; this entry is already processed |
; debug_print '^' |
dec ecx ; cl-direction |
call get_cell_at ; bx-new position, al-object |
; cmp [workmode],sSokonex |
; jne no_sr_nex |
call chk_win_obj |
jne sr_endloop ; not a win_obj there |
; debug_print '@' |
cmp [workmode],sSokolor |
jne no_sr_lor |
cmp al,[color] |
jne sr_endloop |
no_sr_lor: |
push esi |
mov esi,srch ; let us search for existing entries |
sr_loop1: |
lodsw |
and eax,edi ; eax-cell w/o dirs |
cmp eax,ebx |
je sr_foundentry ; this is the entry we're seeking for |
cmp word[esi],0xfff |
jnz sr_loop1 ; next entry |
; we reached empty area |
mov [esi],bx |
add esi,2 |
sr_foundentry: |
mov eax,15 |
sub eax,ecx |
bts [esi-2],ax ; mark entry as used |
pop esi |
; inc [e_fnd] ; one more obj found |
sr_endloop: |
pop ecx |
loop sr_dir_loop1 |
; jmp tttt |
; sr_dir_loop: |
; jmp sr_dir_loop1 |
; tttt: |
pop esi |
cmp word[esi],0xfff |
jne sr_loop |
mov eax,esi |
sub eax,srch |
shr eax,1 |
pop esi |
; debug_print_dec eax |
ret |
; ********************************************* |
; *** SPECIAL ROUTINE TO DRAW LASERS ********** |
; ********************************************* |
draw_lasers: |
xor edx,edx |
mov ecx,[fld_size] |
dl_loop: |
push ecx edx |
mov cl,[field+edx] |
sub cl,tLaserW |
jl dl_eloop |
inc ch |
dl_gca: |
call get_cell_at |
cmp al,tEmpty |
je dl_draw |
cmp al,tHole |
jne dl_eloop |
dl_draw: |
call draw_beams |
mov edx,ebx |
jmp dl_gca |
dl_eloop: |
pop edx |
inc edx |
pop ecx |
loop dl_loop |
ret |
; ********************************************* |
; *** DRAWS LASER BEAMS IN CERTAIN DIRECTION ** |
; ********************************************* |
draw_beams: |
pusha |
mov esi,[levptr] |
movzx esi,byte[esi+1] |
mov eax,ebx |
xor edx,edx |
div esi |
movzx esi,cl |
dec esi |
shr esi,1 |
and esi,1 |
shl edx,20 |
mov ebx,edx |
shl eax,20 |
mov ecx,eax |
add ebx,dword[beam_xy+esi*8] |
add ecx,dword[beam_xy+esi*8+4] |
mov edx,0xe9e25c |
mov eax,13 |
int 0x40 |
popa |
ret |
ud: |
ud2 ; debugging purposes only |
; ********************************************* |
; *** COMPRESS LEVEL - NOT READY YET ********** |
; ********************************************* |
; push esi ebx ;ecx |
; xchg ebx,edi |
; mov esi,edi ; esi,edi - beginning |
;; ebx - end of unpacked field |
; first_enc: |
; lodsb ; al - first byte |
; shl ax,8 ; ah - this byte, al=0 |
; next_enc: |
; cmp esi,ebx |
; jae exit_enc |
;; movzx ecx,byte[esi] |
;; debug_print_dec ecx |
; cmp ah,byte[esi] |
; jne newchar |
; inc esi |
; inc al |
; cmp al,15 |
; jb next_enc |
; newchar: |
; shl al,4 |
; shr ax,4 |
; stosb |
; jmp first_enc |
; exit_enc: |
; shl al,4 |
; shr ax,4 |
; stosb |
; mov al,0xff |
; stosb |
; pop ebx esi ecx |
; |
; dec ecx |
; jcxz outcycle |
; jmp next_lev |
; outcycle: |
; ¤¥áì 室ïâáï ¤ ë¥ ¯à®£à ¬¬ë: |
; ¨â¥àä¥©á ¯à®£à ¬¬ë ¤¢ãï§ëçë© - § ¤ ©â¥ ï§ëª ¢ macros.inc |
load_char: |
if lang eq ru |
db ' £à㧨âì' |
else |
db 'Open file' |
end if |
loadlen: |
ll_msg: |
if lang eq ru |
db 'ë¡¥à¨â¥ ã஢¥ì' |
else |
db 'Choose a level' |
end if |
db ' (0-9, PgUp, PgDn)' |
ll_msg_end: |
fn_input: |
; db 'cnf' |
; db 'soko-4.lev' |
if lang eq ru |
db '¨«¨ ¢¢¥¤¨â¥ ¨¬ï ä ©« ' |
else |
db 'or enter a filename' |
end if |
inp_end: |
rb 256-(inp_end-fn_input) |
win_msg: |
if lang eq ru |
db 'à !!! ë ¯à®è«¨ ã஢¥ì!' |
else |
db "You've completed the level!" |
end if |
win_msg_end: |
lose_msg: |
if lang eq ru |
db 'ë ¯ à «¨§®¢ ë! ந£àëè...' |
else |
db "You're paralized! Game over..." |
end if |
lose_msg_end: |
zagolovok: ; áâப § £®«®¢ª |
if lang eq ru |
db ' ' |
else |
db 'SOKOBAN FOR' |
end if |
db ' MENUET' |
zag_konets: ; ¨ ¥ñ ª®¥æ |
pic_map: |
db 0xf,9,0,0,1,1,5,6 |
pm_nex: |
db 2,7,8,3,4,0xa,0xa,0xa,0xa |
pm_col: |
db 0xb,0xc,0xd,0xe |
beam_xy: |
dd (FLD_LEFT+7) shl 16+2, FLD_TOP2+16 |
dd FLD_LEFT2+16, (FLD_TOP+7) shl 16+2 |
ll_num db '00x.' |
move_map dd -1,+0,-0,1 ; 0 - W, 1 - S, 2 - N, 3 - E |
stdlev db 'SOKO-0.LEV',0 |
stdlev_len: |
inp_pos dd inp_end-fn_input |
entered dd 0 |
file_info: |
dd 0 |
dd 0 |
dd 0x100 |
cnf_level dd strip |
dd workarea |
file_name db CUR_DIR |
path_end db 'SKIN.' |
file_num db 'RAW',0 |
rb 256-($-file_name) |
I_END: ; ª®¥æ ¯à®£à ¬¬ë |
winmode db ? |
scanptr dd ? |
levpage dd ? |
workmode db ? |
player dw ? |
fld_size dd ? |
levptr dd ? |
wnd_height dd ? |
wnd_width dd ? |
color db ? |
colcount db ? |
levelcount dd ? |
checkcount db ? |
checkpoint: |
times 256 dw ? |
levelmap: |
times 1024 dd ? |
strip rb SKIN_SIZE |
workarea: |
srch rb 0x10000-($-workarea) |
level_start rb 0x20000 |
field: |
/programs/games/soko/trunk/SOKOLATE.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SOLOBAN.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/STILMORE.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/SVEN.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/TAKAKEN.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/TITLSCRN.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/TWISTY.LEV |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/games/soko/trunk/. |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |