(C) SIV BLADER / EXCESS TEAM
Music: 'CROON' / 13.10.98 (:-<>)/ KENOTRON
"POORGUY" from the inside
PLOTTAB EQU # 7C00; Creep address labels
; To draw a point
PLT EQU # 7C; byte plates
ORG # 6000
CALL MKTABPL; krieytim plate
; To output points
CALL MAKE_CLS; rasvorachivaem
, "Faster" for
; Quick CLS
; * Begin of IM2_HANDLER PREPARATION *
LD HL, # 7A00
LD DE, # 7A01
LD BC, # 100
LD A, # 7B
LD (HL), A
LDIR
DEC A
LD I, A
IM 2
LD HL, # C9FB
LD (# 7B7B), HL
; * End of IM2_HANDLER PREPARATION **
; * Begin of Tree Multu-Shifting **
; This part of the code does just that:
; From one array of dots that are the end; mi segments which,
in turn, are ; Lines and cleverly depict a tree, we do
; Three arrays that predstvlyayut a tree; vya a coordinate
change X. That is, when we you, in turn, are leading the 4
wood, have the effect of motion; zhuschegosya tree on the
background.
LD DE, TREE3_COOR
PUSH DE
XOR A
LD B, 4
MAKE_TREES_L1
PUSH BC
LD HL, M0_COOR
LD BC, 59
LDIR
DEC DE
LD (DE), A
INC DE
POP BC
DJNZ MAKE_TREES_L1
OUT (# FE), A
POP HL; # 7000
LD E, 0
LD B, 4
MAKE_TREES_L2
PUSH BC
MAKE_TREES_C3
LD A, (HL)
AND A; 0
JR Z, MAKE_TREES_C1
CP # FF
JR Z, MAKE_TREES_C31
LD A, (HL)
SUB E
LD (HL), A
INC HL
MAKE_TREES_C31
INC HL
JR MAKE_TREES_C3
MAKE_TREES_C1
LD A, E
ADD A, 40
LD E, A
INC HL
POP BC
DJNZ MAKE_TREES_L2
; * End of Tree Multu-Shifting **
, Net 1 screen
LD A, # 17
CALL ONOF
CALL CLS
CALL CLS_ATTR
With pure 0 Screen
LD A, # 15 + # 8
CALL ONOF
CALL CLS
CALL CLS_ATTR
CALL CHUNK_VISUAL; STE is
; Itself intra
EXIT
And in general - out under the laws of the first part of
; Marlezonskogo Ballet organizers fantopa ... :)
DI
LD A, # 10
LD BC, # 7FFD
OUT (C), A
LD A, # 3F
LD I, A
IM 1
LD HL, # 2758
EXX
EI
RET
, A pointer to the current scene
CURENT_SCENE DW SCENE_ARRAY1
; Data file on the stage and
; Eksplanation look inside the file ...
INCLUDE "SCENEDAT"
CHUNK_VISUAL
LD HL, (CURENT_SCENE)
LD A, (HL); if the contents of the address
, Pointed to
AND A; on the current scene = 0, then
, STE is not a description of the scene,
, And the marker end => exit
RET Z; from the procedure.
LD B, A; otherwise - is the number of
; Repeats scenes
INC HL; proceed to the next
; Element describing the scene,
; To count collections of segments
; In the scene
C_V_L1
PUSH BC
PUSH HL
LD B, (HL); took the number of sets
; Segments - flow times
; Will spin cycle
INC HL; proceed to the next
; Element describing the scene,
; To a pointer to the first
, A set of line segments in the scene
C_V_L2
PUSH BC
LD E, (HL); in DE - ukuzatel on
INC HL; set of segments in
LD D, (HL); scene
INC HL; Go to index
; To the next set
; Segments in the scene
PUSH HL; save it for
; Further exploits:)
PUSH DE; LD IX, DE for yuzaniya
POP IX; IX in the parameters below
, The following procedure
CALL DRAW_SCENE; procedure indicated
; Exponent on a set of
; Sharply in IX stroit
, This set of segments
POP HL; cycle drawing
POP BC; all sets in from
DJNZ C_V_L2; segments in the scene
; Once painted all the sets of segments in
; Stage, doing literally the following:
C_V_CH1
LD A, # 17; check for ne
XOR% 00001010; switchover ak
LD (C_V_CH1 +1), A; tive and visible
; My video page.
CALL ONOF; own business
HALT; were drawn scene
CALL CLS; visible and stripping
; It another videob
; Region under the next frame
;***** Begin of procedure **********************
; Output in the lower right corner of the sprite
; Simulating curved corner bymagi.
;******************************************
; Wywod ugolka :-)
LD HL, CORNER_SPR
LD DE, # D4A0 + # 20-3
LD B, 20
WYWOD_UGOLKA_L1
PUSH BC
PUSH DE
LD BC, 3
LDIR
POP DE
CALL INCD
POP BC
DJNZ WYWOD_UGOLKA_L1
;***** End of procedure ***********************
; Output in the lower right corner of the sprite
; Simulating curved corner bymagi.
;******************************************
POP HL; repeat the current scene
POP BC; to complete exhaustion
DJNZ C_V_L1; Register B
LD A, (HL)
ADD A, A; x2, swap the decree
LD C, A; Tel current scene
LD B, 0; to the next stage.
ADD HL, BC
INC HL
LD (CURENT_SCENE), HL
JP CHUNK_VISUAL; MAIN LOOP
DRAW_SCENE
; In IX-coors data x1, y1, x2, y2 etc ...
; # 00 - exit
; # FF - skip point
, Despite its name, this procedure by drawing; em not the whole
scene, but only one set of line segments. ;
; At the entrance - IX: a pointer to a set of coordinates.
;
And the coordinates are stored in this format:
; X1, y1, x2, y2, ... xN, yN, # FF, ... xM, yM, # 00
, Where # 00 - mark the end of the set of coordinates
; # FF - skip-marker, Essence of which will be
; Explain.
; So how do we draw the line segments on the following
; Algortmu: t1-t2, t2-t3, t3-t4 ..., may arise; needs draw
after cut t (n-1), t (n) is not ; Interval t (n), t (n +1), and
t (n +1), t (n +2) (ie, break in, Liling), then when we met
skipmarkera pereskaki; Vai a pair ( x, y) coordinates. ; Well,
now on the procedure itself - in general, it is ri; vanities
segments (lines) that form the image ; On the screen. "Lively,"
the same image is achieved ; By the fact that the same
coordinates every time ; To redraw the image change by + / - 1
; Pixel - the image at the same time pleased "potryasyva; is."
LD D, (IX +00)
LD E, (IX +01)
; In DE-x1, y1
CALL RND; in A - RND (0 .. 255)
CP 1985
JR NC, D_S_C_11
DEC E
JR DRAW_SCENE_C4
D_S_C_11
CP 165
; NOP E
JR C, DRAW_SCENE_C4
INC E
DRAW_SCENE_C4
CALL RND
CP 1985
JR NC, D_S_C_12
DEC D
JR DRAW_SCENE_C5
D_S_C_12
CP 165
; NOP D
JR C, DRAW_SCENE_C5
INC D
DRAW_SCENE_C5
LD H, (IX +02)
LD L, (IX +03)
LD A, H; check for # 00
AND A
RET Z
INC A; check for # FF
JR NZ, DRAW_SCENE_C1
INC IX
JR DRAW_SCENE_C2
DRAW_SCENE_C1
CALL RND
CP 1985
JR NC, D_S_C_112
DEC L
JR DRAW_SCENE_C42
D_S_C_112
CP 165
; NOP L
JR C, DRAW_SCENE_C42
INC L
DRAW_SCENE_C42
CALL RND
CP 1985
JR NC, D_S_C_122
DEC H
JR DRAW_SCENE_C52
D_S_C_122
CP 165
; NOP H
JR C, DRAW_SCENE_C52
INC H
DRAW_SCENE_C52
CALL LINE
DRAW_SCENE_C2
INC IX
INC IX
JR DRAW_SCENE
And the coordinates of points in general
GIRL_FS_COOR
* Skipped *
Had to be removed - it was too much space.
Full listing - APPENDIX
* Skipped *
;----- DRAW-LINE ------------------------; HL - X1, Y1 (or Y1,
X1:) ; DE - X2, Y2 (or Y2, X2:)
LINE LD (CORDL), HL
PUSH HL
CALL PLOT
POP HL
LD BC, # 101
LD A, D
SUB H
JP NC, LC1
LD B, # FF
NEG
LC1 LD D, A
LD A, E
SUB L
JP NC, LC2
LD C, # FF
NEG
LC2 LD E, A
LD A, D
CP E
JP NC, LC3
LD L, D
LD (SIGN), BC
XOR A
LD B, A
JP LC4
LC3 OR D
RET Z
LD L, E
LD E, D
LD (SIGN), BC
LD C, 0
LC4 LD H, E
LD A, E
RRA
LCR ADD A, L
JP C, LC5
CP H
JP C, LC6
LC5 SUB H
LD D, A
EXX
SIGN_OFFSET
LD DE, 0
JP LC7
LC6 LD D, A
PUSH BC
EXX
POP DE
CORDL_OFFSET
LC7 LD HL, 0
LD A, E
ADD A, L
LD E, A
LD A, D
INC A
ADD A, H
JP C, LC8
RET Z
LC9 DEC A
LD D, A
LD (CORDL), DE
CALL PLOT
EXX
LD A, D
DEC E
JP NZ, LCR
RET
LC8 JP Z, LC9
RET
; Self modifain kode, however:)
SIGN EQU SIGN_OFFSET +1
CORDL EQU CORDL_OFFSET +1
; Draw a point
PLOT LD C, H
LD H, PLT
LD B, (HL)
INC H
LD A, (HL)
INC H
LD L, C
OR (HL)
LD C, A
INC H
LD A, (BC)
OR (HL)
LD (BC), A
RET
, The creation of panels to draw a point
MKTABPL LD HL, PLOTTAB; MAKE PLOTTAB
SCRPLT LD A, # C0
LD E, 3
MK03 LD C, 8
MK02 LD B, 8
MK01 LD (HL), A
INC L
INC A
DJNZ MK01
SUB 8
DEC C
JP NZ, MK02
ADD A, 8
DEC E
JP NZ, MK03
LD L, 0
INC H
LD E, # 20
CALL MK06
LD E, 1
CALL MK06
LD A, # 80
LD B, 0
MK07 LD (HL), A
INC HL
RRCA
DJNZ MK07
RET
MK06 XOR A
LD C, # 1920
MK05 LD B, 8
MK04 LD (HL), A
INC HL
DJNZ MK04
ADD A, E
DEC C
JP NZ, MK05
RET
; A special port in the Spectrum for
; Switching pages
; In Reg. A - cipher sranichki
ONOF LD BC, # 7FFD
OUT (C), A
RET
; Char RND (void)
; A - out - psevdo_rnd value.
RND LD BC, 0
LD A, B
ADD A, # 77
LD B, A
RLC C
ADD A, C
LD C, A
LD (RND +1), BC
RET
, Net attributes ...
CLS_ATTR
LD HL, # D800
LD DE, # D801
LD BC, # 2FF
LD (HL), # 38
LDIR
RET
; How to create a "fastera for
; Quick cleaning screen
MAKE_CLS_ARRAY1
DI
LD HL, 0
LD (# 8C0C), SP
LD SP, # D800
MAKE_CLS
LD HL, MAKE_CLS_ARRAY1
LD DE, # 8000
LD BC, 11
LDIR
EX DE, HL
LD E, L
LD D, H
INC E
LD BC, # BFF
LD (HL), # E5
LDIR
EX DE, HL
LD (HL), # 31
LD HL, # C9FB
LD (# 8C0E), HL
RET
; *** FAMOUS SUBROTINE ****
, Well its all they know and have tried
INCD INC D
LD A, D
AND 7
RET NZ
LD A, E
ADD A, 32
LD E, A
RET C
LD A, D
SUB 8
LD D, A
RET
; File a sprite with the right-bottom corner of the screen
CORNER_SPR INSERT "corner_s.C"
; Define CLS equ # 8000
CLS EQU # 8000
END; address of the end of an intro
L EQU END-# 6000; intro length in bytes
FREE; address free intro area
- Why?
- I do not know!
A, D
AND 7
RET NZ
LD A, E
ADD A, 32
LD E, A
RET C
LD A, D
SUB 8
LD D, A
RET
; File a sprite with the right-bottom corner of the screen
CORNER_SPR INSERT "corner_s.C"
; Define CLS equ # 8000
CLS EQU # 8000
END; address of the end of an intro
L EQU END-# 6000; intro length in bytes
FREE; address free intro area
- Why?
- I do not know!