DIM adtree%(nb_tree&),xd&(nb_tree&),yd&(nb_tree&),ld&(nb_tree&),hd&(nb_tree&)
DIM hand_win&(nb_tree&),wx&(nb_tree&),wy&(nb_tree&),wl&(nb_tree&),wh&(nb_tree&)
'
DIM win!(nb_tree&),aff!(nb_tree&)
FOR i&=0 TO nb_tree&
win!(i&)=FALSE
aff!(i&)=FALSE
NEXT i&
'
DIM cp_win&(nb_tree&)
FOR i&=0 TO nb_window&
cp_win&(i&)=&X1011
NEXT i&
IF naes!=TRUE
cp_win&(0)=BSET(cp_win&(0),14)
ENDIF
'
screen_width&=ADD(screenx&,screenl&)
screen_height&=ADD(screeny&,screenh&)
'
DIM keyboard_type$(3)
keyboard_type&=0
keyboard_type$(0)="ATARI"
keyboard_type$(1)="PC"
keyboard_type$(2)="MAC"
'
RETURN
> PROCEDURE declare_var_maze
'
myself_position_n&=0
myself_position_x&=10
myself_position_y&=10
myself_direction&=1
myself_new_direction&=1
'
' 1=north, 2=south, 3=east, 4=west
'
maze_simulate_move&=11
'
maze_design_adr%=0
maze_design_len%=0
'
maze_nb_level&=0
maze_width&=0
maze_height&=0
'
DIM maze_design_level_adr%(32) ! for quick computing (set/get maze design)
'
DIM litem_array_level_adr%(32) ! for quick computing (set/get tile containor)
litem_array_len%=0
litem_array_adr%=0
'
' relation item+position -> image id
' idx witem fitem
' 0 F1F F0
' 1 F1L L0
' 2 F1R R0
' 3 F2F F1
' 4 F2L L1
' 5 F2R R1
' 6 L2F F2
' 7 R2F L2
' 8 L3F R2
' 9 F3L F3
' 10 F3R L3
' 11 L3F R3
' 12 R3F
'
witem_family_max&=6
witem_id_max&=64
DIM witem_to_sprite&(PRED(witem_family_max&),witem_id_max&,12,2)
fitem_family_max&=6
fitem_id_max&=32
DIM fitem_to_sprite&(PRED(fitem_family_max&),fitem_id_max&,12,2)
'
DIM litem_save%(MAX(fitem_id_max&,witem_id_max&))
'
DIM wall_inscription$(4),wall_inscription_len&(4)
wall_inscription$(0)=SPACE$(9)
wall_inscription_len&(0)=0
wall_inscription$(1)=SPACE$(9)
wall_inscription_len&(1)=0
wall_inscription$(2)=SPACE$(9)
wall_inscription_len&(2)=0
wall_inscription$(3)=SPACE$(9)
wall_inscription_len&(3)=0
'
offset_inscription_ptr&=4
'
offset_item_type&=0
offset_item_family&=1
offset_item_id&=2
offset_item_active&=3
'
offset_door_behavior&=4
offset_door_opened_by&=5
offset_door_orientation&=6
offset_door_job_type&=7
offset_door_open_state&=8
'
offset_teleporter_behavior&=4
offset_teleporter_scope&=5
offset_teleporter_rotation&=6
'
offset_switch_action_type&=4
offset_switch_behavior&=5
offset_switch_state&=8
'
offset_pad_action_type&=4
offset_pad_scope&=5
offset_pad_behavior&=6
'
offset_target_n&=10
offset_target_x&=12
offset_target_y&=14
'
RETURN
> PROCEDURE declare_var_coords
'
coords_nb_slots&=300
DIM coords_x&(coords_nb_slots&),coords_y&(coords_nb_slots&),coords_w&(coords_nb_slots&),coords_h&(coords_nb_slots&)
'
coords_w&(0)=224
coords_h&(0)=136
'
sensible_zone_space!=FALSE ! true if not blocked by a wall
'
sensible_zone_hand!=FALSE ! true if switch or active object on wall
sensible_zone_hand_id&=-1 ! coords id of this object
'
sensible_zone_f1l_ptr%=0 ! left distant floor
sensible_zone_f1r_ptr%=0 ! right distant floor
sensible_zone_f0l_ptr%=0 ! left near floor
sensible_zone_f0r_ptr%=0 ! right near floor
sensible_zone_hand_ptr%=0 ! on front wall or door
'
DIM ipwi_select&(13) ! height for wall inscriptions (number of lines)
ipwi_select&(0)=175
ipwi_select&(1)=178
ipwi_select&(2)=178
ipwi_select&(3)=176
ipwi_select&(4)=179
ipwi_select&(5)=179
ipwi_select&(6)=176
ipwi_select&(7)=176
ipwi_select&(8)=177
ipwi_select&(9)=180
ipwi_select&(10)=180
ipwi_select&(11)=177
ipwi_select&(12)=177
'
RETURN
> PROCEDURE declare_var_image
'
dungeon_view_len%=0
'
' number of slots for images pool
img_nb_slots&=1500
'
' MFDB and coord of the images
DIM img_mfdb%(img_nb_slots&)
DIM img_x&(img_nb_slots&),img_y&(img_nb_slots&)
DIM img_dx&(img_nb_slots&),img_dy&(img_nb_slots&)
DIM img_w&(img_nb_slots&),img_h&(img_nb_slots&)
'
' pointer to loaded DGX file (group of DGI DGEM Images) or DGI file if not existing
dgx_adr%=0
old_dgx_filename$=""
'
' rescale view (magnify *1 *2 *3)
scale_view!=FALSE
scale_view&=1
'
' pixel<->palette index in 16 and 256 color mode
DIM pixorg_col|(256)
'
' bit organization for true color mode
DIM bitorg_r|(16),bitorg_g|(16),bitorg_b|(16)
' number of red, green, blue for a pixel
nb_bit_r|=0
nb_bit_g|=0
nb_bit_b|=0
'
' 32bit value for palette mode to TC mode transformation
DIM color#(255)
'
' transcodage table for pixel value<->color of the palette
DIM trans_pal|(255)
trans_pal|(0)=0
trans_pal|(1)=2
trans_pal|(2)=3
trans_pal|(3)=6
trans_pal|(4)=4
trans_pal|(5)=7
trans_pal|(6)=5
trans_pal|(7)=8
trans_pal|(8)=9
trans_pal|(9)=10
trans_pal|(10)=11
trans_pal|(11)=14
trans_pal|(12)=12
trans_pal|(13)=15
trans_pal|(14)=13
trans_pal|(15)=1
FOR i&=16 TO 255
trans_pal|(i&)=i&
NEXT i&
'
RETURN
> PROCEDURE declare_var_sound
'
' number of slots for sounds pool
snd_nb_slots&=30
'
' RAW sounds adresses
DIM snd_start%(snd_nb_slots&)
DIM snd_end%(snd_nb_slots&)
'
' location of sound
snd_x&=0
snd_y&=0
'
RETURN
> PROCEDURE declare_var_tables
'
DIM rotation_result&(5,4) ! direction (N1,S2,E3,W4), rotation (0->3 * 90°)
'
rotation_result&(1,0)=1
rotation_result&(1,1)=4
rotation_result&(1,2)=2
rotation_result&(1,3)=3
'
rotation_result&(2,0)=2
rotation_result&(2,1)=3
rotation_result&(2,2)=1
rotation_result&(2,3)=4
'
rotation_result&(3,0)=3
rotation_result&(3,1)=1
rotation_result&(3,2)=4
rotation_result&(3,3)=2
'
rotation_result&(4,0)=4
rotation_result&(4,1)=2
rotation_result&(4,2)=3
rotation_result&(4,3)=1
'
DIM door_coords_src1&(9,2,4) ! fitem_position - 3, behavior (vert/hori) & state (opened?)
DIM door_coords_src2&(9,2,4)
DIM door_coords_des1&(9,2,4)
DIM door_coords_des2&(9,2,4)
'
door_coords_src1&(0,1,0)=105
door_coords_des1&(0,1,0)=15
door_coords_src1&(0,1,1)=133
door_coords_src2&(0,1,1)=134
door_coords_des1&(0,1,1)=51
door_coords_des2&(0,1,1)=52
door_coords_src1&(0,1,2)=135
door_coords_src2&(0,1,2)=136
door_coords_des1&(0,1,2)=53
door_coords_des2&(0,1,2)=54
door_coords_src1&(0,1,3)=137
door_coords_src2&(0,1,3)=138
door_coords_des1&(0,1,3)=55
door_coords_des2&(0,1,3)=56
'
door_coords_src1&(0,0,0)=105
door_coords_des1&(0,0,0)=15
door_coords_src1&(0,0,1)=106
door_coords_des1&(0,0,1)=16
door_coords_src1&(0,0,2)=107
door_coords_des1&(0,0,2)=17
door_coords_src1&(0,0,3)=108
door_coords_des1&(0,0,3)=18
'
door_coords_src1&(1,1,0)=109
door_coords_des1&(1,1,0)=19
door_coords_src1&(1,1,1)=140
door_coords_des1&(1,1,1)=58
door_coords_src1&(1,1,2)=142
door_coords_des1&(1,1,2)=60
door_coords_src1&(1,1,3)=144
door_coords_des1&(1,1,3)=62
'
door_coords_src1&(1,0,0)=109
door_coords_des1&(1,0,0)=19
door_coords_src1&(1,0,1)=110
door_coords_des1&(1,0,1)=20
door_coords_src1&(1,0,2)=111
door_coords_des1&(1,0,2)=21
door_coords_src1&(1,0,3)=112
door_coords_des1&(1,0,3)=22
'
door_coords_src1&(2,1,0)=113
door_coords_des1&(2,1,0)=23
door_coords_src1&(2,1,1)=145
door_coords_des1&(2,1,1)=63
door_coords_src1&(2,1,2)=147
door_coords_des1&(2,1,2)=65
door_coords_src1&(2,1,3)=149
door_coords_des1&(2,1,3)=67
'
door_coords_src1&(2,0,0)=113
door_coords_des1&(2,0,0)=23
door_coords_src1&(2,0,1)=114
door_coords_des1&(2,0,1)=24
door_coords_src1&(2,0,2)=115
door_coords_des1&(2,0,2)=25
door_coords_src1&(2,0,3)=116
door_coords_des1&(2,0,3)=26
'
door_coords_src1&(3,1,0)=117
door_coords_des1&(3,1,0)=27
door_coords_src1&(3,1,1)=151
door_coords_src2&(3,1,1)=152
door_coords_des1&(3,1,1)=69
door_coords_des2&(3,1,1)=70
door_coords_src1&(3,1,2)=153
door_coords_src2&(3,1,2)=154
door_coords_des1&(3,1,2)=71
door_coords_des2&(3,1,2)=72
door_coords_src1&(3,1,3)=155
door_coords_src2&(3,1,3)=156
door_coords_des1&(3,1,3)=73
door_coords_des2&(3,1,3)=74
'
door_coords_src1&(3,0,0)=117
door_coords_des1&(3,0,0)=27
door_coords_src1&(3,0,1)=118
door_coords_des1&(3,0,1)=28
door_coords_src1&(3,0,2)=119
door_coords_des1&(3,0,2)=29
door_coords_src1&(3,0,3)=120
door_coords_des1&(3,0,3)=30
'
door_coords_src1&(4,1,0)=121
door_coords_des1&(4,1,0)=31
door_coords_src1&(4,1,1)=157
door_coords_src2&(4,1,1)=158
door_coords_des1&(4,1,1)=75
door_coords_des2&(4,1,1)=76
door_coords_src1&(4,1,2)=159
door_coords_src2&(4,1,2)=160
door_coords_des1&(4,1,2)=77
door_coords_des2&(4,1,2)=78
door_coords_src1&(4,1,3)=161
door_coords_src2&(4,1,3)=162
door_coords_des1&(4,1,3)=79
door_coords_des2&(4,1,3)=80
'
door_coords_src1&(4,0,0)=121
door_coords_des1&(4,0,0)=31
door_coords_src1&(4,0,1)=122
door_coords_des1&(4,0,1)=32
door_coords_src1&(4,0,2)=123
door_coords_des1&(4,0,2)=33
door_coords_src1&(4,0,3)=124
door_coords_des1&(4,0,3)=34
'
door_coords_src1&(5,1,0)=125
door_coords_des1&(5,1,0)=35
door_coords_src1&(5,1,1)=163
door_coords_src2&(5,1,1)=164
door_coords_des1&(5,1,1)=81
door_coords_des2&(5,1,1)=82
door_coords_src1&(5,1,2)=165
door_coords_src2&(5,1,2)=166
door_coords_des1&(5,1,2)=83
door_coords_des2&(5,1,2)=84
door_coords_src1&(5,1,3)=167
door_coords_src2&(5,1,3)=168
door_coords_des1&(5,1,3)=85
door_coords_des2&(5,1,3)=86
'
door_coords_src1&(5,0,0)=125
door_coords_des1&(5,0,0)=35
door_coords_src1&(5,0,1)=126
door_coords_des1&(5,0,1)=36
door_coords_src1&(5,0,2)=127
door_coords_des1&(5,0,2)=37
door_coords_src1&(5,0,3)=128
door_coords_des1&(5,0,3)=38
'
door_coords_src1&(6,1,0)=129
door_coords_des1&(6,1,0)=39
door_coords_src1&(6,1,1)=169
door_coords_src2&(6,1,1)=170
door_coords_des1&(6,1,1)=87
door_coords_des2&(6,1,1)=88
door_coords_src1&(6,1,2)=171
door_coords_src2&(6,1,2)=172
door_coords_des1&(6,1,2)=89
door_coords_des2&(6,1,2)=90
door_coords_src1&(6,1,3)=173
door_coords_src2&(6,1,3)=174
door_coords_des1&(6,1,3)=91
door_coords_des2&(6,1,3)=92
'
door_coords_src1&(6,0,0)=129
door_coords_des1&(6,0,0)=39
door_coords_src1&(6,0,1)=130
door_coords_des1&(6,0,1)=40
door_coords_src1&(6,0,2)=131
door_coords_des1&(6,0,2)=41
door_coords_src1&(6,0,3)=132
door_coords_des1&(6,0,3)=42
'
door_coords_src1&(7,1,0)=129
door_coords_des1&(7,1,0)=43
door_coords_src1&(7,1,1)=169
door_coords_src2&(7,1,1)=170
door_coords_des1&(7,1,1)=93
door_coords_des2&(7,1,1)=94
door_coords_src1&(7,1,2)=171
door_coords_src2&(7,1,2)=172
door_coords_des1&(7,1,2)=95
door_coords_des2&(7,1,2)=96
door_coords_src1&(7,1,3)=173
door_coords_src2&(7,1,3)=174
door_coords_des1&(7,1,3)=97
door_coords_des2&(7,1,3)=98
'
door_coords_src1&(7,0,0)=129
door_coords_des1&(7,0,0)=43
door_coords_src1&(7,0,1)=130
door_coords_des1&(7,0,1)=44
door_coords_src1&(7,0,2)=131
door_coords_des1&(7,0,2)=45
door_coords_src1&(7,0,3)=132
door_coords_des1&(7,0,3)=46
'
door_coords_src1&(8,1,0)=129
door_coords_des1&(8,1,0)=47
door_coords_src1&(8,1,1)=169
door_coords_src2&(8,1,1)=170
door_coords_des1&(8,1,1)=99
door_coords_des2&(8,1,1)=100
door_coords_src1&(8,1,2)=171
door_coords_src2&(8,1,2)=172
door_coords_des1&(8,1,2)=101
door_coords_des2&(8,1,2)=102
door_coords_src1&(8,1,3)=171
door_coords_src2&(8,1,3)=172
door_coords_des1&(8,1,3)=103
door_coords_des2&(8,1,3)=104
'
door_coords_src1&(8,0,0)=129
door_coords_des1&(8,0,0)=47
door_coords_src1&(8,0,1)=130
door_coords_des1&(8,0,1)=48
door_coords_src1&(8,0,2)=131
door_coords_des1&(8,0,2)=49
door_coords_src1&(8,0,3)=132
door_coords_des1&(8,0,3)=50
'
RETURN
> PROCEDURE declare_var_text
'
cpt_scroll_text&=1
'
scroll_text$=SPACE$(50)
scroll_text$=scroll_text$+"RENAISSANCE PROUDLY PRESENTS A GAME CODED BY RAJAH LONE, "
scroll_text$=scroll_text$+"WITH THE HELP OF DAROOU AND MATEO, AND DEDICACED TO LEMONBUBBLE. "
scroll_text$=scroll_text$+SPACE$(5)
scroll_text$=scroll_text$+"SPECIAL LEGAL APPLIES TO THIS PROGRAM, PLEASE READ THE DOCUMENTATION."
scroll_text$=scroll_text$+SPACE$(5)
scroll_text$=scroll_text$+"GREETINGS TO ERS, MARCER/ELITE, HELIJAH, STRIDER, FAB & CICILE, HELLO AND FROST OF SECTOR1, FANFAN, BOUB AND MOMO OF POPSYTEAM, DBUG/NEXT, ANDERTAL, COSMOSH..."
IF litem_beside_id|=0 AND @get_byte(fitem_beside_ptr%,offset_door_open_state&)=0
move_is_blocked!=TRUE
ELSE IF litem_beside_id|=10 ! can pass through broken door
ELSE IF litem_beside_id|>2 AND @get_byte(fitem_beside_ptr%,offset_door_open_state&)<3
move_is_blocked!=TRUE
ENDIF
ELSE IF litem_beside_family|=4
'
IF BTST(@get_byte(fitem_beside_ptr%,offset_item_active&),0) ! active ?
IF BTST(@get_byte(fitem_beside_ptr%,offset_teleporter_scope&),2) ! scope for party ?
IF @get_int(fitem_beside_ptr%,offset_target_n&)>-2 AND @get_int(fitem_beside_ptr%,offset_target_x&)>0 AND @get_int(fitem_beside_ptr%,offset_target_y&)>0 ! existing location
IF litem_beside_id|=0 AND @get_byte(fitem_beside_ptr%,offset_door_open_state&)=0
move_is_blocked!=TRUE
ELSE IF litem_beside_id|=10 ! can pass through broken door
ELSE IF litem_beside_id|>2 AND @get_byte(fitem_beside_ptr%,offset_door_open_state&)<3
move_is_blocked!=TRUE
ENDIF
ELSE IF litem_beside_family|=4
'
IF BTST(@get_byte(fitem_beside_ptr%,offset_item_active&),0) ! active ?
IF BTST(@get_byte(fitem_beside_ptr%,offset_teleporter_scope&),2) ! scope for party ?
IF @get_int(fitem_beside_ptr%,offset_target_n&)>-2 AND @get_int(fitem_beside_ptr%,offset_target_x&)>0 AND @get_int(fitem_beside_ptr%,offset_target_y&)>0 ! existing location
IF litem_beside_id|=0 AND @get_byte(fitem_beside_ptr%,offset_door_open_state&)=0
move_is_blocked!=TRUE
ELSE IF litem_beside_id|=10 ! can pass through broken door
ELSE IF litem_beside_id|>2 AND @get_byte(fitem_beside_ptr%,offset_door_open_state&)<3
move_is_blocked!=TRUE
ENDIF
ELSE IF litem_beside_family|=4
'
IF BTST(@get_byte(fitem_beside_ptr%,offset_item_active&),0) ! active ?
IF BTST(@get_byte(fitem_beside_ptr%,offset_teleporter_scope&),2) ! scope for party ?
IF @get_int(fitem_beside_ptr%,offset_target_n&)>-2 AND @get_int(fitem_beside_ptr%,offset_target_x&)>0 AND @get_int(fitem_beside_ptr%,offset_target_y&)>0 ! existing location
IF litem_beside_id|=0 AND @get_byte(fitem_beside_ptr%,offset_door_open_state&)=0
move_is_blocked!=TRUE
ELSE IF litem_beside_id|=10 ! can pass through broken door
ELSE IF litem_beside_id|>2 AND @get_byte(fitem_beside_ptr%,offset_door_open_state&)<3
move_is_blocked!=TRUE
ENDIF
ELSE IF litem_beside_family|=4
'
IF BTST(@get_byte(fitem_beside_ptr%,offset_item_active&),0) ! active ?
IF BTST(@get_byte(fitem_beside_ptr%,offset_teleporter_scope&),2) ! scope for party ?
IF @get_int(fitem_beside_ptr%,offset_target_n&)>-2 AND @get_int(fitem_beside_ptr%,offset_target_x&)>0 AND @get_int(fitem_beside_ptr%,offset_target_y&)>0 ! existing location