kolibrios/programs/games/Dungeons/Resources/Levels/1.inc
Anton_K 72b65d63d7 Small fixes in Dungeons
git-svn-id: svn://kolibrios.org@5330 a494cfbc-eb01-0410-851d-a64ba20cac60
2014-12-31 16:09:49 +00:00

466 lines
20 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

levels.level1 akode.LevelHeader <level1.Width, level1.Height>, <8, 1>, AKODE_DIRECTION.SOUTH, 0FF00FFh, 000000h, BLOCK_BASE_SIZE * 5, 6, 1, level1.init, 0, level1.action
level1:
.Width = 24
.Height = 25
W equ level1.Wall
w equ level1.OtherWall
_ equ level1.PassableArea
. equ level1.OtherPassableArea
0 equ level1.NotPassableArea
% equ level1.WallWithCrazyWoodDoor
I equ level1.IronDoor
L equ level1.WallWithLever1
q equ level1.WallWithLever2
v equ level1.WallWithLever3
e equ level1.WallWithLever4
c equ level1.ColumnArea
o equ level1.OgreArea
P equ level1.PortalArea
.Grid:
dd W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W
dd W,_,_,W,W,_,_,W,_,W,_,W,_,_,_,_,W,W,W,W,W,W,W,W
dd W,_,_,W,W,_,_,W,_,W,_,W,_,_,_,_,_,_,_,_,_,_,_,W
dd W,_,_,_,_,_,_,W,_,W,_,W,_,_,_,_,_,_,_,_,_,_,_,W
dd W,W,W,_,_,W,W,W,_,W,L,W,_,_,_,W,W,W,_,_,_,W,W,W
dd W,_,_,_,_,_,_,W,_,_,_,W,_,_,_,W,0,W,_,_,_,W,0,W
dd W,_,W,_,W,_,_,W,_,W,W,W,W,W,_,W,c,_,_,_,_,_,c,W
dd W,_,W,_,W,_,_,W,_,W,W,W,W,W,_,W,_,_,_,c,_,_,_,W
dd W,W,W,_,W,W,W,W,%,W,W,W,W,W,_,W,_,_,W,0,W,_,_,W
dd W,_,W,_,W,_,_,_,_,_,_,_,W,W,_,W,_,_,W,W,W,_,_,W
dd W,_,W,W,W,_,_,_,_,_,_,_,I,_,_,W,_,_,_,_,_,_,_,W
dd W,_,_,_,W,_,_,_,_,_,_,_,W,W,W,W,W,W,W,W,W,%,W,W
dd W,_,_,_,W,W,W,W,q,v,e,W,W,_,_,_,_,_,_,_,_,_,_,W
dd W,_,_,_,_,_,_,_,_,_,_,_,W,_,W,W,W,W,W,W,W,W,W,W
dd W,_,_,_,W,_,_,_,_,_,_,_,W,o,W,_,_,_,_,_,_,_,_,W
dd W,_,_,_,W,W,W,W,W,W,W,W,W,0,W,w,w,w,_,_,_,_,_,W
dd W,_,_,_,W,_,_,_,_,_,_,w,_,_,w,w,w,w,w,w,w,w,w,w
dd W,_,_,_,_,_,_,_,_,_,_,w,_,_,w,.,.,.,.,.,.,.,.,w
dd W,_,_,_,_,_,_,_,_,_,_,w,_,_,w,.,.,w,w,.,w,w,.,w
dd W,_,_,_,_,_,_,_,_,_,_,w,_,_,_,.,.,w,.,.,.,w,.,w
dd W,_,_,_,_,_,_,_,_,_,_,w,_,_,_,.,.,.,.,P,.,.,.,w
dd W,_,_,_,_,_,_,_,_,_,_,w,_,_,_,.,.,w,.,.,.,w,.,w
dd W,_,_,_,_,_,_,_,_,_,_,w,_,_,w,.,.,w,w,.,w,w,.,w
dd W,_,_,_,_,_,_,_,_,_,_,w,_,_,w,.,.,.,.,.,.,.,.,w
dd W,W,W,W,W,W,W,W,W,W,W,w,w,w,w,w,w,w,w,w,w,w,w,w
restore W, w, _, ., 0, %, I, L, q, v, e, c, o, P
.Chest akode.Object textures.Chest, <13, 2>, 1, 0
.Column1 akode.Object textures.Column1, <16, 5>, 1, 0
.Column2 akode.Object textures.Column2, <19, 8>, 1, 0
.Column3 akode.Object textures.Column3, <22, 5>, 1, 0
.Ogre akode.Object textures.Ogre, <13, 15>, 1, 0
.Portal akode.Object textures.Portal, <19, 20>, 1, 1
.Column4TextureDescPtr dd textures.Column4
.Wall akode.GridCell <textures.GreenStone1, 0>, \
<textures.GreenStone1, 0>, \
<textures.GreenStone1, 0>, \
<textures.GreenStone1, 0>, \
<0, 0>, \
<0, 0>, \
0, 0
.OtherWall akode.GridCell <textures.GreenStone2, 0>, \
<textures.GreenStone2, 0>, \
<textures.GreenStone2, 0>, \
<textures.GreenStone2, 0>, \
<0, 0>, \
<0, 0>, \
0, 0
.WallWithCrazyWoodDoor akode.GridCell <textures.GreenStone1, textures.CrazyWoodDoor>, \
<textures.GreenStone1, textures.CrazyWoodDoor>, \
<textures.GreenStone1, textures.CrazyWoodDoor>, \
<textures.GreenStone1, textures.CrazyWoodDoor>, \
<0, 0>, \
<0, 0>, \
0, 0
.IronDoor akode.GridCell <textures.IronDoor, 0>, \
<textures.IronDoor, 0>, \
<textures.IronDoor, 0>, \
<textures.IronDoor, 0>, \
<0, 0>, \
<0, 0>, \
0, 0
.WallWithLever1 akode.GridCell <textures.GreenStone1, 0>, \
<textures.GreenStone1, textures.RedLeverDown>, \
<textures.GreenStone1, 0>, \
<textures.GreenStone1, textures.RedLeverUp>, \
<0, 0>, \
<0, 0>, \
0, 0
.WallWithLever2 akode.GridCell <textures.GreenStone1, 0>, \
<textures.GreenStone1, textures.RedLeverUp>, \
<textures.GreenStone1, 0>, \
<textures.GreenStone1, textures.RedLeverDown>, \
<0, 0>, \
<0, 0>, \
0, 0
.WallWithLever3 akode.GridCell <textures.GreenStone1, 0>, \
<textures.GreenStone1, textures.RedLeverUp>, \
<textures.GreenStone1, 0>, \
<textures.GreenStone1, textures.RedLeverDown>, \
<0, 0>, \
<0, 0>, \
0, 0
.WallWithLever4 akode.GridCell <textures.GreenStone1, 0>, \
<textures.GreenStone1, textures.RedLeverUp>, \
<textures.GreenStone1, 0>, \
<textures.GreenStone1, textures.RedLeverDown>, \
<0, 0>, \
<0, 0>, \
0, 0
.PassableArea akode.GridCell <0, 0>, \
<0, 0>, \
<0, 0>, \
<0, 0>, \
<textures.YellowStone1, 0>, \
<textures.YellowStone1, 0>, \
1, 0
.OtherPassableArea akode.GridCell <0, 0>, \
<0, 0>, \
<0, 0>, \
<0, 0>, \
<textures.RedStone1, 0>, \
<textures.RedStone1, 0>, \
1, 0
.NotPassableArea akode.GridCell <0, 0>, \
<0, 0>, \
<0, 0>, \
<0, 0>, \
<textures.YellowStone1, 0>, \
<textures.YellowStone1, 0>, \
0, 0
.ColumnArea akode.GridCell <0, 0>, \
<0, 0>, \
<0, 0>, \
<0, 0>, \
<textures.YellowStone1, 0>, \
<textures.YellowStone1, 0>, \
1, level1.columns
.OgreArea akode.GridCell <0, 0>, \
<0, 0>, \
<0, 0>, \
<0, 0>, \
<textures.YellowStone1, 0>, \
<textures.YellowStone1, 0>, \
1, level1.ogre
.PortalArea akode.GridCell <0, 0>, \
<0, 0>, \
<0, 0>, \
<0, 0>, \
<textures.PortalFloor, 0>, \
<textures.RedStone1, 0>, \
1, level1.portal
.CoinImagePtr dd 0
.Sun1ImagePtr dd 0
.Sun2ImagePtr dd 0
.Sun3ImagePtr dd 0
proc level1.init
stdcall load_object_image, .coin_file_path
mov [level1.CoinImagePtr], eax
stdcall load_object_image, .sun1_file_path
mov [level1.Sun1ImagePtr], eax
stdcall load_object_image, .sun2_file_path
mov [level1.Sun2ImagePtr], eax
stdcall load_object_image, .sun3_file_path
mov [level1.Sun3ImagePtr], eax
mov eax, .message
ret
.coin_file_path db 'Resources/Textures/Objects/Coin.png', 0
.sun1_file_path db 'Resources/Textures/Objects/Sun1.png', 0
.sun2_file_path db 'Resources/Textures/Objects/Sun2.png', 0
.sun3_file_path db 'Resources/Textures/Objects/Sun3.png', 0
.message langstr0 ru, < \
'<27><> - <20>᪠⥫<E1AAA0> ᮪஢<E1AEAA><E0AEA2>. <20><20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A8A2><EFBFBD> <20><><EFBFBD> <20> ', 10, \
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><E1AAA0><EFBFBD><><E1A5AB>, <20><><EFBFBD><EFBFBD> <20><EFBFBD>⨩ ', 10, \
'<27><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>⠫ ᢮<> <20><><EFBFBD><EFBFBD><EFBFBD>. <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ', 10, \
'<27><>諨... <20><><EFBFBD><EFBFBD><EFBFBD>. <20><EFBFBD><E1A8AB> - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! <20><> <20><><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>', 10, \
'<27> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><E5ABAE><EFBFBD><E3ABA0>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><>', 10, \
'<27><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E1ACA5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>... ' >
endp
proc level1.action uses ebx ecx edx, action, cell_x, cell_y
mov eax, [action]
mov ebx, [cell_x]
mov ecx, [cell_y]
mov edx, ecx
imul edx, level1.Width
add edx, ebx
lea edx, [level1.Grid + edx * 4]
cmp ax, ACTION.DO_SOMETHING
jne .check_next_action
cmp edx, level1.Grid + (7 * level1.Width + 8) * 4
jne @f
cmp dword [level1.Grid + (8 * level1.Width + 8) * 4], level1.WallWithCrazyWoodDoor
jne .exit_no_message
mov eax, .message_door1_closed
jmp .exit
.message_door1_closed langstr0 ru, < \
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><>窨, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><><E1AAA2><EFBFBD><EFBFBD><EFBFBD>. ', 10, \
'<27><><EFBFBD><EFBFBD><EFBFBD>⭮, <20><><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E5A0AD><EFBFBD>... ' >
@@: cmp edx, level1.Grid + (10 * level1.Width + 21) * 4
jne @f
cmp dword [level1.Grid + (11 * level1.Width + 21) * 4], level1.WallWithCrazyWoodDoor
jne .exit_no_message
mov eax, .message_door3_closed
jmp .exit
.message_door3_closed langstr0 ru, < \
'<27><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD> ⠪ ', 10, \
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EBABA0>. ' >
@@: cmp edx, level1.Grid + (5 * level1.Width + 10) * 4
jne @f
cmp dword [level1.Grid + (8 * level1.Width + 8) * 4], level1.WallWithCrazyWoodDoor
jne .exit_no_message
mov [level1.WallWithLever1.WallTexture4.DescPtr2], textures.RedLeverDown
mov dword [level1.Grid + (8 * level1.Width + 8) * 4], level1.PassableArea
mov eax, .message_door1_opens
jmp .exit
.message_door1_opens langstr0 ru, < \
'<27><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>񤪨 <20> <20><><EFBFBD><E0A5A6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񭮪. ' >
@@: cmp edx, level1.Grid + (11 * level1.Width + 8) * 4
jne @f
mov eax, [level1.WallWithLever2.WallTexture2.DescPtr2]
mov ebx, [level1.WallWithLever2.WallTexture4.DescPtr2]
mov [level1.WallWithLever2.WallTexture2.DescPtr2], ebx
mov [level1.WallWithLever2.WallTexture4.DescPtr2], eax
jmp .3levers
@@: cmp edx, level1.Grid + (11 * level1.Width + 9) * 4
jne @f
mov eax, [level1.WallWithLever3.WallTexture2.DescPtr2]
mov ebx, [level1.WallWithLever3.WallTexture4.DescPtr2]
mov [level1.WallWithLever3.WallTexture2.DescPtr2], ebx
mov [level1.WallWithLever3.WallTexture4.DescPtr2], eax
jmp .3levers
@@: cmp edx, level1.Grid + (11 * level1.Width + 10) * 4
jne @f
mov eax, [level1.WallWithLever4.WallTexture2.DescPtr2]
mov ebx, [level1.WallWithLever4.WallTexture4.DescPtr2]
mov [level1.WallWithLever4.WallTexture2.DescPtr2], ebx
mov [level1.WallWithLever4.WallTexture4.DescPtr2], eax
jmp .3levers
@@: cmp edx, level1.Grid + (10 * level1.Width + 11) * 4
jne @f
cmp dword [level1.Grid + (10 * level1.Width + 12) * 4], level1.IronDoor
jne .exit_no_message
mov eax, .message_door2_closed
jmp .exit
@@: jmp .exit_no_message
.check_next_action:
cmp ax, AKODE_ACTION.CELL_ENTER
jne .exit_no_message
cmp edx, level1.Grid + (2 * level1.Width + 13) * 4
jne @f
cmp [level1.Chest.Visible], 1
jne .exit_no_message
stdcall add_object_to_inventory, 4, [level1.CoinImagePtr]
stdcall add_object_to_inventory, 1, [level1.Sun1ImagePtr]
stdcall add_object_to_inventory, 2, [level1.Sun2ImagePtr]
stdcall add_object_to_inventory, 3, [level1.Sun3ImagePtr]
mov [level1.Chest.Visible], 0
mov eax, .message_chest
jmp .exit
.message_chest langstr0 ru, < \
'<27><> <20><><20><EFBFBD><E3ADA4> <20> <20><><EFBFBD><EFBFBD><EFBFBD>: 1 <20><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD> <20> ', 10, \
'3-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><E0A0A6><EFBFBD><EFBFBD><EFBFBD><><E1AEAB><EFBFBD> <20><><E0A0A7><EFBFBD><><E4A0A7>. ' >
@@: cmp edx, level1.Grid + (14 * level1.Width + 13) * 4
jne @f
cmp [level1.Ogre.Visible], 1
jne .exit_no_message
mov eax, .message_ogre
jmp .exit
.message_ogre langstr0 ru, < \
'- <20>⮩! <20><20><><EFBFBD> <20><>? <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><> <20><><EFBFBD>. ' >
@@:
.exit_no_message:
xor eax, eax
.exit:
ret
.3levers:
mov eax, [level1.WallWithLever2.WallTexture2.DescPtr2]
mov ebx, [level1.WallWithLever3.WallTexture2.DescPtr2]
mov ecx, [level1.WallWithLever4.WallTexture2.DescPtr2]
cmp eax, textures.RedLeverDown
jne @f
cmp ebx, textures.RedLeverUp
jne @f
cmp ecx, textures.RedLeverDown
jne @f
mov dword [level1.Grid + (10 * level1.Width + 12) * 4], level1.PassableArea
mov eax, .message_door2_opens
jmp .exit
@@:
mov eax, .message_3levers
jmp .exit
.message_3levers langstr0 ru, < \
'<27><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A0A2><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ' >
.message_door2_closed langstr0 ru, < \
'<27><><EFBFBD><EFBFBD> <20><> <20> <20><><EFBFBD><EFBFBD><EFBFBD> ᨫ, <20><><><E1A4A2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> ', 10, \
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><E7A8AB><EFBFBD>. ' >
.message_door2_opens langstr0 ru, < \
'<27><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E2A0AB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A5A6>. ' >
endp
proc level1.columns uses ebx ecx, action, cell_x, cell_y
mov eax, [action]
cmp ax, ACTION.DO_SOMETHING
jne @f
mov eax, .message_description
jmp .exit
.message_description langstr0 ru, < \
'<27><><20><><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E1AEAA> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ', 10, \
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ', 10, \
'<27><><EFBFBD><E2AEAB>... ' >
@@: cmp ax, ACTION.USE_OBJECT
jne .exit_no_message
shr eax, 16
mov ebx, eax
mov eax, [cell_x]
cmp eax, 16
jne @f
cmp ebx, 1
jne .exit_no_message
stdcall remove_object_from_inventory, 1
mov eax, [level1.Column4TextureDescPtr]
mov [level1.Column1.TextureDescPtr], eax
mov [level1.Column1.DisableShading], 1
mov eax, .message_activated
jmp .exit
@@: cmp eax, 19
jne @f
cmp ebx, 2
jne .exit_no_message
stdcall remove_object_from_inventory, 2
mov eax, [level1.Column4TextureDescPtr]
mov [level1.Column2.TextureDescPtr], eax
mov [level1.Column2.DisableShading], 1
mov eax, .message_activated
jmp .exit
@@: cmp eax, 22
jne @f
cmp ebx, 3
jne .exit_no_message
stdcall remove_object_from_inventory, 3
mov eax, [level1.Column4TextureDescPtr]
mov [level1.Column3.TextureDescPtr], eax
mov [level1.Column3.DisableShading], 1
mov eax, .message_activated
jmp .exit
@@:
.exit_no_message:
xor eax, eax
ret
.exit:
mov ecx, [level1.Column1.DisableShading]
and ecx, [level1.Column2.DisableShading]
and ecx, [level1.Column3.DisableShading]
jecxz @f
mov dword [level1.Grid + (11 * level1.Width + 21) * 4], level1.PassableArea
@@:
ret
.message_activated langstr0 ru, < \
'<27><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><><E1A2A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ', 10, \
'<27><><EFBFBD><E0A0AD><EFBFBD> ᢥ⮬. ' >
endp
proc level1.ogre action, cell_x, cell_y
mov eax, [action]
cmp ax, ACTION.DO_SOMETHING
jne @f
stdcall player_death
xor eax, eax
jmp .exit
@@: cmp ax, ACTION.USE_OBJECT
jne .exit_default
shr eax, 16
cmp eax, 4
jne .exit_default
mov dword [level1.Grid + (15 * level1.Width + 13) * 4], level1.PassableArea
mov [level1.Ogre.Visible], 0
stdcall remove_object_from_inventory, 4
mov eax, .message_ogre
jmp .exit
.exit_default:
xor eax, eax
dec eax
.exit:
ret
.message_ogre langstr0 ru, < \
'- <20><>! <20><><EFBFBD><EFBFBD>⪠! <20> <20><> <20><><EFBFBD><E0ADA8>!!! ' >
endp
proc level1.portal action, cell_x, cell_y
mov eax, [action]
cmp ax, AKODE_ACTION.CELL_ENTER
jne @f
stdcall game_over
@@:
xor eax, eax
ret
endp