as released 2014-12-12
This commit is contained in:
commit
37d7e0fd43
216 changed files with 20529 additions and 0 deletions
BIN
DATA/AMAZON.LBM
Normal file
BIN
DATA/AMAZON.LBM
Normal file
Binary file not shown.
BIN
DATA/BACKDROP.LBM
Normal file
BIN
DATA/BACKDROP.LBM
Normal file
Binary file not shown.
2
DATA/BACKDROP.SCR
Normal file
2
DATA/BACKDROP.SCR
Normal file
|
@ -0,0 +1,2 @@
|
|||
backdrop.dat lpic 0 0 320 99
|
||||
back2.dat lpic 0 100 320 199
|
BIN
DATA/BEAST.LBM
Normal file
BIN
DATA/BEAST.LBM
Normal file
Binary file not shown.
5
DATA/BEAST.SCR
Normal file
5
DATA/BEAST.SCR
Normal file
|
@ -0,0 +1,5 @@
|
|||
beast_1.dat DSPRITE 16 16 56 64
|
||||
beast_2.dat DSPRITE 80 16 56 64
|
||||
beast_3.dat DSPRITE 144 16 56 64
|
||||
beast_4.dat DSPRITE 208 16 56 64
|
||||
|
BIN
DATA/BLANKMAP.LBM
Normal file
BIN
DATA/BLANKMAP.LBM
Normal file
Binary file not shown.
BIN
DATA/CHACMOO2.LBM
Normal file
BIN
DATA/CHACMOO2.LBM
Normal file
Binary file not shown.
BIN
DATA/CHACMOOL.LBM
Normal file
BIN
DATA/CHACMOOL.LBM
Normal file
Binary file not shown.
BIN
DATA/DOORS1.LBM
Normal file
BIN
DATA/DOORS1.LBM
Normal file
Binary file not shown.
2
DATA/DOORS1.SCR
Normal file
2
DATA/DOORS1.SCR
Normal file
|
@ -0,0 +1,2 @@
|
|||
door1.dat WALL 2 2 8
|
||||
door2.dat WALL 11 2 8
|
BIN
DATA/DP_BPAL.$$$
Normal file
BIN
DATA/DP_BPAL.$$$
Normal file
Binary file not shown.
BIN
DATA/DP_CPAL.$$$
Normal file
BIN
DATA/DP_CPAL.$$$
Normal file
Binary file not shown.
BIN
DATA/DP_OPAL.$$$
Normal file
BIN
DATA/DP_OPAL.$$$
Normal file
Binary file not shown.
BIN
DATA/DP_PREFS
Normal file
BIN
DATA/DP_PREFS
Normal file
Binary file not shown.
BIN
DATA/DP_SPAL.$$$
Normal file
BIN
DATA/DP_SPAL.$$$
Normal file
Binary file not shown.
BIN
DATA/FIRE.LBM
Normal file
BIN
DATA/FIRE.LBM
Normal file
Binary file not shown.
BIN
DATA/FLATS1.LBM
Normal file
BIN
DATA/FLATS1.LBM
Normal file
Binary file not shown.
8
DATA/FLATS1.SCR
Normal file
8
DATA/FLATS1.SCR
Normal file
|
@ -0,0 +1,8 @@
|
|||
f1_1.dat flat 2 2
|
||||
f1_2.dat flat 11 2
|
||||
f1_3.dat flat 20 2
|
||||
f1_4.dat flat 29 2
|
||||
f1_5.dat flat 2 11
|
||||
f1_6.dat flat 11 11
|
||||
f1_7.dat flat 20 11
|
||||
f1_8.dat flat 29 11
|
BIN
DATA/FLATS2.LBM
Normal file
BIN
DATA/FLATS2.LBM
Normal file
Binary file not shown.
4
DATA/FLATS2.SCR
Normal file
4
DATA/FLATS2.SCR
Normal file
|
@ -0,0 +1,4 @@
|
|||
f2_1.dat flat 2 2
|
||||
f2_2.dat flat 11 2
|
||||
f2_3.dat flat 2 11
|
||||
f2_4.dat flat 11 11
|
BIN
DATA/FONT1.LBM
Normal file
BIN
DATA/FONT1.LBM
Normal file
Binary file not shown.
2
DATA/FONT1.SCR
Normal file
2
DATA/FONT1.SCR
Normal file
|
@ -0,0 +1,2 @@
|
|||
font1.dat font 32 126
|
||||
|
4
DATA/GETMAP.BAT
Normal file
4
DATA/GETMAP.BAT
Normal file
|
@ -0,0 +1,4 @@
|
|||
..\sgrab\sgrab map
|
||||
..\idlink\idlink -b
|
||||
copy todd3d.tod ..\source
|
||||
cd ..\source
|
20
DATA/GRABALL.BAT
Normal file
20
DATA/GRABALL.BAT
Normal file
|
@ -0,0 +1,20 @@
|
|||
..\sgrab\sgrab doors1
|
||||
..\sgrab\sgrab walls1
|
||||
..\sgrab\sgrab walls2
|
||||
..\sgrab\sgrab walls3
|
||||
..\sgrab\sgrab walls4
|
||||
..\sgrab\sgrab walls5
|
||||
..\sgrab\sgrab walls6
|
||||
..\sgrab\sgrab sprite1
|
||||
..\sgrab\sgrab sprite2
|
||||
..\sgrab\sgrab sprite3
|
||||
..\sgrab\sgrab sprite4
|
||||
..\sgrab\sgrab sprite5
|
||||
..\sgrab\sgrab flats1
|
||||
..\sgrab\sgrab flats2
|
||||
..\sgrab\sgrab playscr
|
||||
..\sgrab\sgrab weapons
|
||||
..\sgrab\sgrab font1
|
||||
..\sgrab\sgrab map
|
||||
..\lights\lights playscr.lbm 59
|
||||
..\idlink\idlink -b
|
149
DATA/LINKFILE.ILN
Normal file
149
DATA/LINKFILE.ILN
Normal file
|
@ -0,0 +1,149 @@
|
|||
todd3d.tod
|
||||
|
||||
palette.dat palette
|
||||
lights.dat lights
|
||||
|
||||
$OPENCOMP map
|
||||
map1.dat map
|
||||
map2.dat
|
||||
map3.dat
|
||||
map4.dat
|
||||
map5.dat
|
||||
map6.dat
|
||||
map7.dat
|
||||
map8.dat
|
||||
map9.dat
|
||||
map10.dat
|
||||
|
||||
$OPENCOMP playscr
|
||||
playscr.dat playscreen
|
||||
|
||||
$OPENCOMP font1
|
||||
font1.dat font
|
||||
|
||||
;===============
|
||||
; rendering data
|
||||
;===============
|
||||
|
||||
; sprites
|
||||
LABEL startsprites
|
||||
|
||||
$OPENCOMP sprite1
|
||||
sp1_1.dat brazier
|
||||
sp1_2.dat
|
||||
sp1_3.dat
|
||||
sp1_4.dat
|
||||
|
||||
$OPENCOMP sprite2
|
||||
sp2_1.dat chacmool
|
||||
|
||||
$OPENCOMP sprite3
|
||||
sp3_1.dat snake
|
||||
|
||||
$OPENCOMP sprite4
|
||||
sp4_1.dat urn1
|
||||
sp4_2.dat urn2
|
||||
sp4_3.dat bowl
|
||||
sp4_4.dat cup
|
||||
sp4_5.dat jade1
|
||||
sp4_6.dat ankh
|
||||
|
||||
$OPENCOMP sprite5
|
||||
sp5_1.dat atk1
|
||||
sp5_2.dat
|
||||
sp5_3.dat
|
||||
sp5_4.dat atk1_mx
|
||||
sp5_5.dat exp1
|
||||
sp5_6.dat
|
||||
sp5_7.dat exp1_mx
|
||||
|
||||
LABEL endsprites
|
||||
|
||||
$OPENCOMP weapons
|
||||
weapons.dat weapons
|
||||
|
||||
|
||||
|
||||
; flat floors / ceilings
|
||||
LABEL startflats
|
||||
$OPENCOMP flats1
|
||||
f1_1.dat ; Stone ceiling
|
||||
f1_2.dat ; wood floor
|
||||
f1_3.dat
|
||||
f1_4.dat
|
||||
f1_5.dat
|
||||
f1_6.dat
|
||||
f1_7.dat
|
||||
f1_8.dat
|
||||
$OPENCOMP flats2
|
||||
f2_1.dat
|
||||
f2_2.dat
|
||||
f2_3.dat
|
||||
f2_4.dat
|
||||
LABEL endflats
|
||||
|
||||
|
||||
; walls
|
||||
LABEL startwalls
|
||||
$OPENCOMP walls1
|
||||
w1_1.dat
|
||||
w1_2.dat
|
||||
w1_3.dat
|
||||
w1_4.dat
|
||||
w1_5.dat
|
||||
w1_6.dat
|
||||
w1_7.dat
|
||||
w1_8.dat
|
||||
$OPENCOMP walls2
|
||||
w1_9.dat
|
||||
w1_10.dat
|
||||
w1_11.dat
|
||||
w1_12.dat
|
||||
w1_13.dat
|
||||
w1_14.dat
|
||||
w1_15.dat
|
||||
w1_16.dat
|
||||
$OPENCOMP walls3
|
||||
w1_17.dat
|
||||
w1_18.dat
|
||||
w1_19.dat
|
||||
w1_20.dat
|
||||
w1_21.dat
|
||||
w1_22.dat
|
||||
w1_23.dat
|
||||
w1_24.dat
|
||||
$OPENCOMP walls4
|
||||
w1_25.dat
|
||||
w1_26.dat
|
||||
w1_27.dat
|
||||
w1_28.dat
|
||||
w1_29.dat
|
||||
w1_30.dat
|
||||
w1_31.dat
|
||||
w1_32.dat
|
||||
$OPENCOMP walls5
|
||||
w1_33.dat
|
||||
w1_34.dat
|
||||
w1_35.dat
|
||||
w1_36.dat
|
||||
w1_37.dat
|
||||
w1_38.dat
|
||||
w1_39.dat
|
||||
w1_40.dat
|
||||
$OPENCOMP walls6
|
||||
w1_41.dat
|
||||
w1_42.dat
|
||||
w1_43.dat
|
||||
w1_44.dat
|
||||
w1_45.dat
|
||||
w1_46.dat
|
||||
w1_47.dat
|
||||
w1_48.dat
|
||||
|
||||
|
||||
; doors (doors are the same data as walls)
|
||||
$OPENCOMP doors1
|
||||
door1.dat wolfdoor
|
||||
door2.dat wooddoor
|
||||
|
||||
LABEL endwalls
|
BIN
DATA/MAP.LBM
Normal file
BIN
DATA/MAP.LBM
Normal file
Binary file not shown.
10
DATA/MAP.SCR
Normal file
10
DATA/MAP.SCR
Normal file
|
@ -0,0 +1,10 @@
|
|||
map1.dat raw 0 0 64 64
|
||||
map2.dat raw 64 0 64 64
|
||||
map3.dat raw 128 0 64 64
|
||||
map4.dat raw 192 0 64 64
|
||||
map5.dat raw 256 0 64 64
|
||||
map6.dat raw 0 64 64 64
|
||||
map7.dat raw 64 64 64 64
|
||||
map8.dat raw 128 64 64 64
|
||||
map9.dat raw 192 64 64 64
|
||||
map10.dat raw 0 64 64 64
|
BIN
DATA/MAP2.LBM
Normal file
BIN
DATA/MAP2.LBM
Normal file
Binary file not shown.
BIN
DATA/MENU.LBM
Normal file
BIN
DATA/MENU.LBM
Normal file
Binary file not shown.
2
DATA/MENU.SCR
Normal file
2
DATA/MENU.SCR
Normal file
|
@ -0,0 +1,2 @@
|
|||
menu.dat lpic 16 16 184 104
|
||||
binky.dat lpic 208 16 24 24
|
BIN
DATA/NAZI.LBM
Normal file
BIN
DATA/NAZI.LBM
Normal file
Binary file not shown.
9
DATA/NAZI.SCR
Normal file
9
DATA/NAZI.SCR
Normal file
|
@ -0,0 +1,9 @@
|
|||
nazi_1.dat DSPRITE 37 32 22 48
|
||||
nazi_2.dat DSPRITE 113 32 17 48
|
||||
nazi_3.dat DSPRITE 187 32 14 48
|
||||
nazi_4.dat DSPRITE 255 32 15 48
|
||||
nazi_5.dat DSPRITE 38 104 21 48
|
||||
nazi_6.dat DSPRITE 113 104 16 48
|
||||
nazi_7.dat DSPRITE 183 104 14 48
|
||||
nazi_8.dat DSPRITE 255 104 17 48
|
||||
|
BIN
DATA/PALETTE.PCX
Normal file
BIN
DATA/PALETTE.PCX
Normal file
Binary file not shown.
BIN
DATA/PLAYSCR.LBM
Normal file
BIN
DATA/PLAYSCR.LBM
Normal file
Binary file not shown.
1
DATA/PLAYSCR.SCR
Normal file
1
DATA/PLAYSCR.SCR
Normal file
|
@ -0,0 +1 @@
|
|||
playscr.dat lpic 0 0 320 200
|
BIN
DATA/RGRID8.LBM
Normal file
BIN
DATA/RGRID8.LBM
Normal file
Binary file not shown.
1
DATA/SHARK.SCR
Normal file
1
DATA/SHARK.SCR
Normal file
|
@ -0,0 +1 @@
|
|||
ogre_1.dat DSPRITE 16 16 37 55
|
BIN
DATA/SOFT3D.ICN
Normal file
BIN
DATA/SOFT3D.ICN
Normal file
Binary file not shown.
BIN
DATA/SPRITE1.LBM
Normal file
BIN
DATA/SPRITE1.LBM
Normal file
Binary file not shown.
5
DATA/SPRITE1.SCR
Normal file
5
DATA/SPRITE1.SCR
Normal file
|
@ -0,0 +1,5 @@
|
|||
sp1_1.dat DSPRITE 24 19 48 61
|
||||
sp1_2.dat DSPRITE 96 19 48 61
|
||||
sp1_3.dat DSPRITE 168 19 48 61
|
||||
sp1_4.dat DSPRITE 240 19 48 61
|
||||
|
BIN
DATA/SPRITE2.LBM
Normal file
BIN
DATA/SPRITE2.LBM
Normal file
Binary file not shown.
2
DATA/SPRITE2.SCR
Normal file
2
DATA/SPRITE2.SCR
Normal file
|
@ -0,0 +1,2 @@
|
|||
sp2_1.dat DSPRITE 19 16 58 64
|
||||
|
BIN
DATA/SPRITE3.LBM
Normal file
BIN
DATA/SPRITE3.LBM
Normal file
Binary file not shown.
2
DATA/SPRITE3.SCR
Normal file
2
DATA/SPRITE3.SCR
Normal file
|
@ -0,0 +1,2 @@
|
|||
sp3_1.dat DSPRITE 16 16 64 64
|
||||
|
BIN
DATA/SPRITE4.LBM
Normal file
BIN
DATA/SPRITE4.LBM
Normal file
Binary file not shown.
7
DATA/SPRITE4.SCR
Normal file
7
DATA/SPRITE4.SCR
Normal file
|
@ -0,0 +1,7 @@
|
|||
sp4_1.dat DSPRITE 29 36 34 44
|
||||
sp4_2.dat DSPRITE 105 36 34 44
|
||||
sp4_3.dat DSPRITE 175 56 37 18
|
||||
sp4_4.dat DSPRITE 254 53 17 19
|
||||
sp4_5.dat DSPRITE 25 108 47 44
|
||||
sp4_6.dat DSPRITE 111 101 23 49
|
||||
|
BIN
DATA/SPRITE5.LBM
Normal file
BIN
DATA/SPRITE5.LBM
Normal file
Binary file not shown.
8
DATA/SPRITE5.SCR
Normal file
8
DATA/SPRITE5.SCR
Normal file
|
@ -0,0 +1,8 @@
|
|||
sp5_1.dat DSPRITE 16 16 28 28
|
||||
sp5_2.dat DSPRITE 52 16 28 28
|
||||
sp5_3.dat DSPRITE 16 52 28 28
|
||||
sp5_4.dat DSPRITE 52 52 28 28
|
||||
sp5_5.dat DSPRITE 88 16 36 36
|
||||
sp5_6.dat DSPRITE 160 16 48 48
|
||||
sp5_7.dat DSPRITE 232 16 48 48
|
||||
|
200
DATA/TEMP
Normal file
200
DATA/TEMP
Normal file
|
@ -0,0 +1,200 @@
|
|||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
||||
atemp 00000000 btemp 0 ctemp 00000000 dtemp 0
|
62
DATA/TODD.ILN
Normal file
62
DATA/TODD.ILN
Normal file
|
@ -0,0 +1,62 @@
|
|||
|
||||
soft3d.dat
|
||||
|
||||
palette.dat palette
|
||||
lights.dat lights
|
||||
|
||||
$OPENCOMP map
|
||||
map1.dat map
|
||||
map2.dat
|
||||
map3.dat
|
||||
map4.dat
|
||||
map5.dat
|
||||
map6.dat
|
||||
map7.dat
|
||||
map8.dat
|
||||
map9.dat
|
||||
|
||||
$OPENCOMP playscr
|
||||
toddscr.dat playscreen
|
||||
|
||||
$OPENCOMP font1
|
||||
font1.dat font
|
||||
|
||||
;===============
|
||||
; rendering data
|
||||
;===============
|
||||
|
||||
; sprites
|
||||
LABEL startsprites
|
||||
|
||||
$OPENCOMP nazi
|
||||
nazi_1.dat nazi
|
||||
nazi_2.dat
|
||||
nazi_3.dat
|
||||
nazi_4.dat
|
||||
nazi_5.dat
|
||||
nazi_6.dat
|
||||
nazi_7.dat
|
||||
nazi_8.dat
|
||||
|
||||
LABEL endsprites
|
||||
|
||||
|
||||
; flat floors / ceilings
|
||||
LABEL startflats
|
||||
$OPENCOMP flats1
|
||||
f1_1.dat ; Stone ceiling
|
||||
f1_2.dat ; wood floor
|
||||
LABEL endflats
|
||||
|
||||
|
||||
; walls
|
||||
LABEL startwalls
|
||||
$OPENCOMP walls1
|
||||
w1_1.dat ; green brick
|
||||
w1_2.dat ; wood slats
|
||||
|
||||
; doors (doors are the same data as walls)
|
||||
$OPENCOMP doors1
|
||||
door1.dat wolfdoor
|
||||
|
||||
LABEL endwalls
|
BIN
DATA/TODD3D.ICN
Normal file
BIN
DATA/TODD3D.ICN
Normal file
Binary file not shown.
2
DATA/TORCHES
Normal file
2
DATA/TORCHES
Normal file
|
@ -0,0 +1,2 @@
|
|||
torch_1.dat DSPRITE 16 17 19 47
|
||||
torch_2.dat DSPRITE 48 17 19 47
|
BIN
DATA/TROLL.LBM
Normal file
BIN
DATA/TROLL.LBM
Normal file
Binary file not shown.
6
DATA/TROLL.SCR
Normal file
6
DATA/TROLL.SCR
Normal file
|
@ -0,0 +1,6 @@
|
|||
troll_1.dat DSPRITE 26 16 24 64
|
||||
troll_2.dat DSPRITE 74 16 24 64
|
||||
troll_3.dat DSPRITE 122 16 24 64
|
||||
troll_4.dat DSPRITE 170 16 24 64
|
||||
troll_5.dat DSPRITE 208 16 48 64
|
||||
|
BIN
DATA/TROLL2.LBM
Normal file
BIN
DATA/TROLL2.LBM
Normal file
Binary file not shown.
4
DATA/TROLL2.SCR
Normal file
4
DATA/TROLL2.SCR
Normal file
|
@ -0,0 +1,4 @@
|
|||
troll_6.dat DSPRITE 16 16 56 64
|
||||
troll_7.dat DSPRITE 80 16 56 64
|
||||
troll_8.dat DSPRITE 144 16 56 64
|
||||
|
BIN
DATA/WALLS1.LBM
Normal file
BIN
DATA/WALLS1.LBM
Normal file
Binary file not shown.
8
DATA/WALLS1.SCR
Normal file
8
DATA/WALLS1.SCR
Normal file
|
@ -0,0 +1,8 @@
|
|||
w1_1.dat wall 2 2 8
|
||||
w1_2.dat wall 10 2 8
|
||||
w1_3.dat wall 18 2 8
|
||||
w1_4.dat wall 26 2 8
|
||||
w1_5.dat wall 2 10 8
|
||||
w1_6.dat wall 10 10 8
|
||||
w1_7.dat wall 18 10 8
|
||||
w1_8.dat wall 26 10 8
|
BIN
DATA/WALLS2.LBM
Normal file
BIN
DATA/WALLS2.LBM
Normal file
Binary file not shown.
8
DATA/WALLS2.SCR
Normal file
8
DATA/WALLS2.SCR
Normal file
|
@ -0,0 +1,8 @@
|
|||
w1_9.dat wall 2 2 8
|
||||
w1_10.dat wall 10 2 8
|
||||
w1_11.dat wall 18 2 8
|
||||
w1_12.dat wall 26 2 8
|
||||
w1_13.dat wall 2 10 8
|
||||
w1_14.dat wall 10 10 8
|
||||
w1_15.dat wall 18 10 8
|
||||
w1_16.dat wall 26 10 8
|
BIN
DATA/WALLS3.LBM
Normal file
BIN
DATA/WALLS3.LBM
Normal file
Binary file not shown.
8
DATA/WALLS3.SCR
Normal file
8
DATA/WALLS3.SCR
Normal file
|
@ -0,0 +1,8 @@
|
|||
w1_17.dat wall 2 2 8
|
||||
w1_18.dat wall 11 2 8
|
||||
w1_19.dat wall 20 2 8
|
||||
w1_20.dat wall 29 2 8
|
||||
w1_21.dat wall 2 11 8
|
||||
w1_22.dat wall 11 11 8
|
||||
w1_23.dat wall 20 11 8
|
||||
w1_24.dat wall 29 11 8
|
BIN
DATA/WALLS4.LBM
Normal file
BIN
DATA/WALLS4.LBM
Normal file
Binary file not shown.
8
DATA/WALLS4.SCR
Normal file
8
DATA/WALLS4.SCR
Normal file
|
@ -0,0 +1,8 @@
|
|||
w1_25.dat wall 2 2 8
|
||||
w1_26.dat wall 11 2 8
|
||||
w1_27.dat wall 20 2 8
|
||||
w1_28.dat wall 29 2 8
|
||||
w1_29.dat wall 2 11 8
|
||||
w1_30.dat wall 11 11 8
|
||||
w1_31.dat wall 20 11 8
|
||||
w1_32.dat wall 29 11 8
|
BIN
DATA/WALLS5.LBM
Normal file
BIN
DATA/WALLS5.LBM
Normal file
Binary file not shown.
8
DATA/WALLS5.SCR
Normal file
8
DATA/WALLS5.SCR
Normal file
|
@ -0,0 +1,8 @@
|
|||
w1_33.dat wall 2 2 8
|
||||
w1_34.dat wall 11 2 8
|
||||
w1_35.dat wall 20 2 8
|
||||
w1_36.dat wall 29 2 8
|
||||
w1_37.dat wall 2 11 8
|
||||
w1_38.dat wall 11 11 8
|
||||
w1_39.dat wall 20 11 8
|
||||
w1_40.dat wall 29 11 8
|
BIN
DATA/WALLS6.LBM
Normal file
BIN
DATA/WALLS6.LBM
Normal file
Binary file not shown.
8
DATA/WALLS6.SCR
Normal file
8
DATA/WALLS6.SCR
Normal file
|
@ -0,0 +1,8 @@
|
|||
w1_41.dat wall 2 2 8
|
||||
w1_42.dat wall 11 2 8
|
||||
w1_43.dat wall 20 2 8
|
||||
w1_44.dat wall 29 2 8
|
||||
w1_45.dat wall 2 11 8
|
||||
w1_46.dat wall 11 11 8
|
||||
w1_47.dat wall 20 11 8
|
||||
w1_48.dat wall 29 11 8
|
BIN
DATA/WEAPON2.LBM
Normal file
BIN
DATA/WEAPON2.LBM
Normal file
Binary file not shown.
BIN
DATA/WEAPONS.LBM
Normal file
BIN
DATA/WEAPONS.LBM
Normal file
Binary file not shown.
1
DATA/WEAPONS.SCR
Normal file
1
DATA/WEAPONS.SCR
Normal file
|
@ -0,0 +1 @@
|
|||
weapons.dat lpic 103 159 128 32
|
BIN
DATA/_BACKUP_.LBM
Normal file
BIN
DATA/_BACKUP_.LBM
Normal file
Binary file not shown.
BIN
DP_PREFS
Normal file
BIN
DP_PREFS
Normal file
Binary file not shown.
5
IDLINK/BACKUP.BAT
Normal file
5
IDLINK/BACKUP.BAT
Normal file
|
@ -0,0 +1,5 @@
|
|||
copy *.c %1
|
||||
copy *.asm %1
|
||||
copy *.h %1
|
||||
copy *.equ %1
|
||||
copy *.inc %1
|
1
IDLINK/D.BAT
Normal file
1
IDLINK/D.BAT
Normal file
|
@ -0,0 +1 @@
|
|||
td386 idlink
|
928
IDLINK/IDLINK.C
Normal file
928
IDLINK/IDLINK.C
Normal file
|
@ -0,0 +1,928 @@
|
|||
#define VERSION "0.4"
|
||||
|
||||
/*
|
||||
=============================================================================
|
||||
|
||||
IDLINK
|
||||
|
||||
by John Carmack
|
||||
|
||||
To do
|
||||
-----
|
||||
Allow .. in filenames
|
||||
lump compression
|
||||
allow block alignment for dynamic paging
|
||||
|
||||
=============================================================================
|
||||
*/
|
||||
|
||||
#include <dir.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <io.h>
|
||||
#include <dos.h>
|
||||
#include <ctype.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
#include <bios.h>
|
||||
#include <alloc.h>
|
||||
|
||||
#include "\miscsrc\types.h"
|
||||
#include "\miscsrc\minmisc.h"
|
||||
#include "\miscsrc\script.h"
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char id[4];
|
||||
int numlumps;
|
||||
long headeroffset;
|
||||
int headerlength;
|
||||
} compprologue_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char name[14];
|
||||
int lumptype; // the command number used to produce the lump
|
||||
long dataoffset;
|
||||
long datalength;
|
||||
} compheader_t;
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
co_uncompressed,
|
||||
co_rle,
|
||||
co_rlew,
|
||||
co_huffman,
|
||||
co_carmacized
|
||||
} compress_t;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
long filepos; // debug: make these three byte values?
|
||||
long size;
|
||||
unsigned nameofs;
|
||||
compress_t compress;
|
||||
} lumpinfo_t;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int numlumps;
|
||||
long infotableofs;
|
||||
long infotablesize;
|
||||
} fileinfo_t;
|
||||
|
||||
|
||||
fileinfo_t fileinfo,oldfileinfo;
|
||||
lumpinfo_t *lumpinfo,*oldlumpinfo;
|
||||
int *contentbuffer,*oldcontent;
|
||||
char *content_p;
|
||||
|
||||
boolean incompfile;
|
||||
int comphandle;
|
||||
compprologue_t compprologue;
|
||||
compheader_t *compheader,*compheader_p;
|
||||
|
||||
char filename[MAXPATH];
|
||||
char filepath[MAXPATH];
|
||||
char sourcepath[MAXPATH];
|
||||
char destpath[MAXPATH];
|
||||
char scriptfilename[MAXPATH];
|
||||
char datafilename[MAXPATH];
|
||||
char contentfilename[MAXPATH];
|
||||
char compfilepath[MAXPATH];
|
||||
byte *lumpalloc; // for lumpinfo and the names
|
||||
char *name_p;
|
||||
|
||||
int datahandle;
|
||||
int filescopied;
|
||||
|
||||
boolean fullbuild;
|
||||
|
||||
unsigned long oldtime; // time stamp of old file (bit fields)
|
||||
unsigned long newtime;
|
||||
|
||||
|
||||
/*
|
||||
|
||||
|
||||
output filename
|
||||
|
||||
; any line starting with a non alphanumeric char is a comment
|
||||
filename [-compression] [lumpname]
|
||||
LABEL [lumpname]
|
||||
|
||||
|
||||
idlink [-b][-path FILENAME] scriptfile
|
||||
|
||||
put in a SPARSE command
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*
|
||||
=============================================================================
|
||||
|
||||
GENERIC FUNCTIONS
|
||||
|
||||
=============================================================================
|
||||
*/
|
||||
|
||||
int SafeOpenWrite (char *filename)
|
||||
{
|
||||
int handle;
|
||||
|
||||
handle = open(filename,O_RDWR | O_BINARY | O_CREAT | O_TRUNC
|
||||
, S_IREAD | S_IWRITE);
|
||||
|
||||
if (handle == -1)
|
||||
MS_Quit ("Error opening %s: %s\n",filename,strerror(errno));
|
||||
|
||||
return handle;
|
||||
}
|
||||
|
||||
int SafeOpenRead (char *filename)
|
||||
{
|
||||
int handle;
|
||||
|
||||
handle = open(filename,O_RDONLY | O_BINARY);
|
||||
|
||||
if (handle == -1)
|
||||
MS_Quit ("Error opening %s: %s\n",filename,strerror(errno));
|
||||
|
||||
return handle;
|
||||
}
|
||||
|
||||
|
||||
void SafeRead (int handle, void far *buffer, unsigned count)
|
||||
{
|
||||
unsigned iocount;
|
||||
|
||||
_dos_read (handle,buffer,count,&iocount);
|
||||
if (iocount != count)
|
||||
MS_Quit ("File read failure\n");
|
||||
}
|
||||
|
||||
|
||||
void SafeWrite (int handle, void far *buffer, unsigned count)
|
||||
{
|
||||
unsigned iocount;
|
||||
|
||||
_dos_write (handle,buffer,count,&iocount);
|
||||
if (iocount != count)
|
||||
MS_Quit ("File write failure\n");
|
||||
}
|
||||
|
||||
|
||||
void far *SafeMalloc (long size)
|
||||
{
|
||||
void far *ptr;
|
||||
|
||||
ptr = farmalloc (size);
|
||||
|
||||
if (!ptr)
|
||||
MS_Quit ("Malloc failure for %l bytes\n",size);
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
=============================================================================
|
||||
|
||||
COPOSITE FILE STUFF
|
||||
|
||||
=============================================================================
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
=================
|
||||
=
|
||||
= OpenComposite
|
||||
=
|
||||
=================
|
||||
*/
|
||||
|
||||
void OpenComposite (void)
|
||||
{
|
||||
char *str;
|
||||
|
||||
if (incompfile)
|
||||
{
|
||||
close (comphandle);
|
||||
free (compheader);
|
||||
}
|
||||
|
||||
//
|
||||
// get and qualify composite data file name
|
||||
//
|
||||
GetToken (false);
|
||||
|
||||
for (str = token ; *str ; str++)
|
||||
if (*str == '.')
|
||||
break;
|
||||
|
||||
if (!*str)
|
||||
strcat (str,".DAT");
|
||||
|
||||
if (token[0] == '\\')
|
||||
strcpy (compfilepath,token);
|
||||
else
|
||||
{
|
||||
strcpy (compfilepath,sourcepath);
|
||||
strcat (compfilepath,token);
|
||||
}
|
||||
|
||||
//
|
||||
// open it and read in header
|
||||
//
|
||||
comphandle = SafeOpenRead (compfilepath);
|
||||
SafeRead (comphandle,&compprologue,sizeof(compprologue));
|
||||
|
||||
if (strncmp(compprologue.id,"SGRB",4))
|
||||
MS_Quit ("Composite file %s doesn't have SGRB id\n",compfilepath);
|
||||
|
||||
compheader = SafeMalloc (compprologue.headerlength);
|
||||
|
||||
lseek (comphandle,compprologue.headeroffset,SEEK_SET);
|
||||
|
||||
SafeRead (comphandle,compheader,compprologue.headerlength);
|
||||
|
||||
getftime(comphandle,(struct ftime *)&newtime);
|
||||
|
||||
incompfile = true;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
=================
|
||||
=
|
||||
= CloseComposite
|
||||
=
|
||||
=================
|
||||
*/
|
||||
|
||||
void CloseComposite (void)
|
||||
{
|
||||
if (!incompfile)
|
||||
MS_Quit ("$CLOSECOMP issued without an open composite file\n");
|
||||
|
||||
close (comphandle);
|
||||
free (compheader);
|
||||
incompfile = false;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
=============================================================================
|
||||
|
||||
IDLINK FUNCTIONS
|
||||
|
||||
=============================================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
===================
|
||||
=
|
||||
= QualifyFilename
|
||||
=
|
||||
===================
|
||||
*/
|
||||
|
||||
void QualifyFilename (void)
|
||||
{
|
||||
if (incompfile)
|
||||
{
|
||||
if (filename[0] == '\\' || strlen(filename)>13)
|
||||
MS_Quit ("Illegal comp file member name: %s\n",filename);
|
||||
|
||||
strcpy (filepath,compfilepath);
|
||||
strcat (filepath,":");
|
||||
strcat (filepath,filename);
|
||||
return;
|
||||
}
|
||||
|
||||
if (filename[0] == '\\')
|
||||
strcpy (filepath,filename);
|
||||
else
|
||||
{
|
||||
strcpy (filepath,sourcepath);
|
||||
strcat (filepath,filename);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
=================
|
||||
=
|
||||
= ReadOldFile
|
||||
=
|
||||
= Tries to read in info from old file.
|
||||
= If there is a problem, a full rebuild will be specified
|
||||
=
|
||||
=================
|
||||
*/
|
||||
|
||||
void ReadOldFile (void)
|
||||
{
|
||||
int iocount,size;
|
||||
int handle;
|
||||
|
||||
//
|
||||
// open and read data file
|
||||
//
|
||||
datahandle = open(datafilename,O_RDWR | O_BINARY);
|
||||
if (datahandle == -1)
|
||||
{
|
||||
printf ("No current file to do a partial build from. Rebuilding.\n");
|
||||
fullbuild = true;
|
||||
return;
|
||||
}
|
||||
|
||||
iocount = read (datahandle,&oldfileinfo,sizeof(oldfileinfo));
|
||||
if (iocount != sizeof(oldfileinfo))
|
||||
{
|
||||
printf ("Couldn't read old fileinfo. Rebuilding.\n");
|
||||
close (datahandle);
|
||||
fullbuild = true;
|
||||
return;
|
||||
}
|
||||
|
||||
size = oldfileinfo.infotablesize;
|
||||
|
||||
oldlumpinfo = malloc (size);
|
||||
if (!oldlumpinfo)
|
||||
{
|
||||
printf ("Couldn't allocate %u bytes for oldinfotable. Rebuilding.\n"
|
||||
,size);
|
||||
close (datahandle);
|
||||
fullbuild = true;
|
||||
return;
|
||||
}
|
||||
|
||||
lseek (datahandle,oldfileinfo.infotableofs,SEEK_SET);
|
||||
iocount = read (datahandle , oldlumpinfo, size);
|
||||
if (iocount != size)
|
||||
{
|
||||
printf ("Couldn't read old fileinfo. Rebuilding.\n");
|
||||
close (datahandle);
|
||||
fullbuild = true;
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// get timestamp
|
||||
//
|
||||
getftime(datahandle,(struct ftime *)&oldtime);
|
||||
|
||||
//
|
||||
// load in the content file
|
||||
//
|
||||
handle = open(contentfilename,O_RDWR | O_BINARY);
|
||||
if (handle == -1)
|
||||
{
|
||||
printf ("No content file. Rebuilding.\n");
|
||||
close (datahandle);
|
||||
fullbuild = true;
|
||||
return;
|
||||
}
|
||||
|
||||
size = filelength (handle);
|
||||
oldcontent = malloc (size);
|
||||
if (!oldcontent)
|
||||
{
|
||||
printf ("Couldn't allocate %u bytes for oldcontent. Rebuilding.\n"
|
||||
,size);
|
||||
close (handle);
|
||||
close (datahandle);
|
||||
fullbuild = true;
|
||||
return;
|
||||
}
|
||||
|
||||
iocount = read (handle,oldcontent,size);
|
||||
if (iocount != size)
|
||||
{
|
||||
printf ("Couldn't read old content file. Rebuilding.\n");
|
||||
close (handle);
|
||||
close (datahandle);
|
||||
fullbuild = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
===================
|
||||
=
|
||||
= ParseScript
|
||||
=
|
||||
===================
|
||||
*/
|
||||
|
||||
void ParseScript (void)
|
||||
{
|
||||
char *fname_p;
|
||||
|
||||
//
|
||||
// load the script file into memory
|
||||
//
|
||||
LoadScriptFile (scriptfilename);
|
||||
incompfile = false;
|
||||
|
||||
//
|
||||
// get the output filename
|
||||
//
|
||||
GetToken (true);
|
||||
strcpy (datafilename,destpath);
|
||||
strcat (datafilename,token);
|
||||
|
||||
//
|
||||
// the content file holds a list of the pathnames used to build the
|
||||
// data file. Used for future makes
|
||||
//
|
||||
strcpy (contentfilename,datafilename);
|
||||
fname_p = contentfilename+strlen(contentfilename);
|
||||
while ( *fname_p != '.' )
|
||||
if (--fname_p == datafilename)
|
||||
{ // filename didn't have an extension
|
||||
fname_p = contentfilename+strlen(contentfilename);
|
||||
break;
|
||||
}
|
||||
strcpy (fname_p,".ICN");
|
||||
|
||||
|
||||
printf ("Data file : %s\n",datafilename);
|
||||
printf ("Content file : %s\n",contentfilename);
|
||||
|
||||
if (!fullbuild)
|
||||
ReadOldFile ();
|
||||
|
||||
if (fullbuild)
|
||||
{
|
||||
unlink (datafilename);
|
||||
datahandle = open(datafilename,O_RDWR | O_BINARY | O_CREAT, S_IREAD | S_IWRITE);
|
||||
if (datahandle == -1)
|
||||
MS_Quit ("Error opening data file: %s\n",strerror(errno));
|
||||
}
|
||||
|
||||
//
|
||||
// count the lumps in the script
|
||||
//
|
||||
fileinfo.numlumps = 0;
|
||||
|
||||
do
|
||||
{
|
||||
while (TokenAvailable ()) // skip to the end of line
|
||||
GetToken (false);
|
||||
|
||||
GetToken (true); // get the next token
|
||||
if (!endofscript && token[0] != '$') // don't count commands
|
||||
fileinfo.numlumps++;
|
||||
|
||||
} while (!endofscript);
|
||||
|
||||
printf ("%i lumps in output file\n",fileinfo.numlumps);
|
||||
|
||||
//
|
||||
// allocate space for the lump directory and names
|
||||
//
|
||||
lumpalloc = malloc (0xfff0);
|
||||
if (!lumpalloc)
|
||||
MS_Quit ("Couldn't allocate lump directory!\n");
|
||||
|
||||
lumpinfo = (lumpinfo_t *) (lumpalloc + 16-FP_OFF(lumpalloc));
|
||||
name_p = (char *)(lumpinfo + fileinfo.numlumps);
|
||||
|
||||
//
|
||||
// allocate space for the content file
|
||||
//
|
||||
contentbuffer = malloc (0xfff0);
|
||||
if (!contentbuffer)
|
||||
MS_Quit ("Couldn't allocate lump directory!\n");
|
||||
content_p = (char *)(contentbuffer + fileinfo.numlumps);
|
||||
*content_p++ = 0; // in case the first lump is a label
|
||||
|
||||
//
|
||||
// position the file pointer to begin writing data
|
||||
//
|
||||
if (fullbuild)
|
||||
// leave space in the data file for the header
|
||||
lseek (datahandle,sizeof(fileinfo),SEEK_SET);
|
||||
else
|
||||
// go to the end of the file
|
||||
lseek (datahandle,filelength (datahandle),SEEK_SET);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
===================
|
||||
=
|
||||
= CopyFiles
|
||||
=
|
||||
===================
|
||||
*/
|
||||
|
||||
#define BUFFERSIZE 0xfff0
|
||||
|
||||
void CopyFiles (void)
|
||||
{
|
||||
int i;
|
||||
int lump,oldlump;
|
||||
int inputhandle;
|
||||
long size;
|
||||
char *buffer,*oldname_p;
|
||||
|
||||
filescopied = 0;
|
||||
|
||||
script_p = scriptbuffer;
|
||||
GetToken (true); // skip output name
|
||||
|
||||
buffer = malloc (BUFFERSIZE);
|
||||
|
||||
for (lump=0 ; lump<fileinfo.numlumps ; lump++)
|
||||
{
|
||||
memset (&lumpinfo[lump],0,sizeof(lumpinfo[0]));
|
||||
//
|
||||
// check for abort out
|
||||
//
|
||||
if ( (bioskey(1)&0xff) == 27)
|
||||
{
|
||||
bioskey (0);
|
||||
fprintf (stderr,"\nAborted.");
|
||||
exit (1);
|
||||
}
|
||||
//
|
||||
// get file to copy or label
|
||||
//
|
||||
GetToken (true);
|
||||
|
||||
if (token[0] == '$')
|
||||
{
|
||||
//
|
||||
// link commands
|
||||
//
|
||||
lump--; // this line isn't a lump
|
||||
|
||||
if (!strcmpi(token,"$OPENCOMP") )
|
||||
{
|
||||
OpenComposite ();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!strcmpi(token,"$CLOSECOMP") )
|
||||
{
|
||||
CloseComposite ();
|
||||
continue;
|
||||
}
|
||||
|
||||
MS_Quit ("Unrocognized command %s\n",token);
|
||||
}
|
||||
|
||||
strcpy (filename,token);
|
||||
|
||||
//
|
||||
// check for a lump name
|
||||
//
|
||||
if (TokenAvailable ())
|
||||
{
|
||||
GetToken (false);
|
||||
|
||||
lumpinfo[lump].nameofs = name_p-(char *)lumpinfo;
|
||||
strcpy (name_p,token);
|
||||
name_p += strlen(token)+1;
|
||||
}
|
||||
else
|
||||
lumpinfo[lump].nameofs = 0;
|
||||
|
||||
|
||||
//
|
||||
// deal with labels
|
||||
//
|
||||
if (strcmpi(filename,"LABEL") == 0)
|
||||
{
|
||||
// point the content listing at the previous 0
|
||||
contentbuffer[lump] = content_p-1 - (char *)contentbuffer;
|
||||
|
||||
if (lumpinfo[lump].nameofs)
|
||||
printf ("%4i is LABEL: %s\n",lump,token);
|
||||
else
|
||||
printf ("%4i is a LABEL\n",lump);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// qualify the filename and add it to the content list
|
||||
//
|
||||
QualifyFilename ();
|
||||
contentbuffer[lump] = content_p - (char *)contentbuffer;
|
||||
strcpy (content_p,filepath);
|
||||
content_p += strlen(filepath)+1;
|
||||
|
||||
|
||||
//
|
||||
// open the source file
|
||||
//
|
||||
if (incompfile)
|
||||
{
|
||||
//
|
||||
// look for the filename in the comp file header
|
||||
//
|
||||
for (i=0;i<compprologue.numlumps;i++)
|
||||
if (!strcmp (filename,compheader[i].name) )
|
||||
break;
|
||||
|
||||
if (i == compprologue.numlumps)
|
||||
MS_Quit ("lump %s is not in comp file %s\n"
|
||||
,filename,compfilepath);
|
||||
|
||||
compheader_p = compheader+i;
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
// open the file on disk
|
||||
//
|
||||
inputhandle = open(filepath,O_RDONLY | O_BINARY);
|
||||
|
||||
if (inputhandle == -1)
|
||||
MS_Quit ("Error opening data file %s: %s\n"
|
||||
,filepath,strerror(errno));
|
||||
}
|
||||
|
||||
//
|
||||
// if partial build, see if the file is present in
|
||||
// old file and check time
|
||||
//
|
||||
if (!fullbuild)
|
||||
{
|
||||
for (oldlump=0 ; oldlump<oldfileinfo.numlumps ; oldlump++)
|
||||
{
|
||||
oldname_p = (char *)oldcontent + oldcontent[oldlump];
|
||||
if (strcmp(filepath , oldname_p) == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
if (oldlump != oldfileinfo.numlumps)
|
||||
{
|
||||
if (!incompfile)
|
||||
getftime(inputhandle,(struct ftime *)&newtime);
|
||||
|
||||
if ( newtime <= oldtime)
|
||||
{
|
||||
//
|
||||
// use the old information
|
||||
//
|
||||
lumpinfo[lump].filepos = oldlumpinfo[oldlump].filepos;
|
||||
lumpinfo[lump].size = oldlumpinfo[oldlump].size;
|
||||
lumpinfo[lump].compress = oldlumpinfo[oldlump].compress;
|
||||
|
||||
if (!incompfile)
|
||||
close (inputhandle);
|
||||
continue; // done with lump
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// copy the file
|
||||
//
|
||||
filescopied++;
|
||||
|
||||
if (incompfile)
|
||||
{
|
||||
lseek (comphandle,compheader_p->dataoffset,SEEK_SET);
|
||||
size = compheader_p->datalength;
|
||||
}
|
||||
else
|
||||
size = filelength (inputhandle);
|
||||
|
||||
printf ("%4i = %s (%lu bytes)\n"
|
||||
,lump,filepath,size);
|
||||
|
||||
lumpinfo[lump].filepos = tell(datahandle);
|
||||
lumpinfo[lump].size = size;
|
||||
lumpinfo[lump].compress = co_uncompressed;
|
||||
|
||||
do
|
||||
{
|
||||
read (inputhandle,buffer,BUFFERSIZE);
|
||||
if (size < BUFFERSIZE)
|
||||
write (datahandle,buffer,size);
|
||||
else
|
||||
write (datahandle,buffer,BUFFERSIZE);
|
||||
|
||||
size -= BUFFERSIZE;
|
||||
|
||||
} while (size > 0);
|
||||
|
||||
if (!incompfile)
|
||||
close (inputhandle);
|
||||
}
|
||||
|
||||
free (buffer);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
===================
|
||||
=
|
||||
= WriteDirectory
|
||||
=
|
||||
===================
|
||||
*/
|
||||
|
||||
void WriteDirectory (void)
|
||||
{
|
||||
//
|
||||
// write lumpinfo
|
||||
//
|
||||
fileinfo.infotableofs = tell(datahandle);
|
||||
fileinfo.infotablesize = name_p - (char *)lumpinfo;
|
||||
write (datahandle,lumpinfo,fileinfo.infotablesize);
|
||||
|
||||
//
|
||||
// write fileinfo
|
||||
//
|
||||
lseek (datahandle,0,SEEK_SET);
|
||||
write (datahandle,&fileinfo,sizeof(fileinfo));
|
||||
|
||||
close (datahandle);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
===================
|
||||
=
|
||||
= WriteContentFile
|
||||
=
|
||||
===================
|
||||
*/
|
||||
|
||||
void WriteContentFile (void)
|
||||
{
|
||||
int handle,size,iocount;
|
||||
|
||||
unlink (contentfilename);
|
||||
handle = open(contentfilename,O_RDWR | O_BINARY | O_CREAT, S_IREAD | S_IWRITE);
|
||||
if (handle == -1)
|
||||
MS_Quit ("Error opening content file: %s\n",strerror(errno));
|
||||
|
||||
size = content_p - (char *)contentbuffer;
|
||||
iocount = write (handle,contentbuffer,size);
|
||||
if (iocount != size)
|
||||
MS_Quit ("Write error on content file\n");
|
||||
|
||||
close (handle);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
===================
|
||||
=
|
||||
= main
|
||||
=
|
||||
===================
|
||||
*/
|
||||
|
||||
int main (void)
|
||||
{
|
||||
int parmnum,parmsleft;
|
||||
|
||||
printf ("\nIDLINK "VERSION" by John Carmack, copyright (c) 1992 Id Software\n");
|
||||
|
||||
parmsleft = _argc;
|
||||
|
||||
//
|
||||
// check for help
|
||||
//
|
||||
if (MS_CheckParm ("?"))
|
||||
{
|
||||
printf (
|
||||
"Usage: idlink [-b] [-source path] [-dest path] [-script scriptfile]\n\n"
|
||||
|
||||
"-b Force a full rebuild of the file, rather than a file\n"
|
||||
" bulking partial update\n"
|
||||
"\n"
|
||||
"-source path To place the source for the files in another directory\n"
|
||||
"\n"
|
||||
"-dest path To place the linked file in another directory\n"
|
||||
"\n"
|
||||
"-script file The script name defaults to LINKFILE.ILN if not specified\n"
|
||||
);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// check for full or partial build
|
||||
//
|
||||
if (MS_CheckParm ("b"))
|
||||
{
|
||||
printf ("Full rebuild\n");
|
||||
fullbuild = true;
|
||||
parmsleft--;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf ("Partial make (file size may increase, use -b to rebuild)\n");
|
||||
fullbuild = false;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// get source directory for data files
|
||||
//
|
||||
parmnum = MS_CheckParm ("source");
|
||||
|
||||
if (parmnum)
|
||||
{
|
||||
strcpy (sourcepath,_argv[parmnum+1]);
|
||||
parmsleft -= 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(sourcepath, "X:\\");
|
||||
sourcepath[0] = 'A' + getdisk();
|
||||
getcurdir(0, sourcepath+3);
|
||||
}
|
||||
if (sourcepath[strlen(sourcepath)-1] != '\\')
|
||||
strcat (sourcepath,"\\");
|
||||
|
||||
printf ("Source directory : %s\n",sourcepath);
|
||||
|
||||
//
|
||||
// get destination directory for link file
|
||||
//
|
||||
parmnum = MS_CheckParm ("dest");
|
||||
|
||||
if (parmnum)
|
||||
{
|
||||
strcpy (destpath,_argv[parmnum+1]);
|
||||
parmsleft -= 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(destpath, "X:\\");
|
||||
destpath[0] = 'A' + getdisk();
|
||||
getcurdir(0, destpath+3);
|
||||
}
|
||||
if (destpath[strlen(destpath)-1] != '\\')
|
||||
strcat (destpath,"\\");
|
||||
|
||||
printf ("Destination directory : %s\n",destpath);
|
||||
|
||||
//
|
||||
// get script file
|
||||
//
|
||||
parmnum = MS_CheckParm ("script");
|
||||
|
||||
if (parmnum)
|
||||
{
|
||||
strcpy (scriptfilename,_argv[parmnum+1]);
|
||||
parmsleft -= 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(scriptfilename, "X:\\");
|
||||
scriptfilename[0] = 'A' + getdisk();
|
||||
getcurdir(0, scriptfilename+3);
|
||||
strcat (scriptfilename,"\\LINKFILE.ILN");
|
||||
}
|
||||
|
||||
printf ("Script file : %s\n",scriptfilename);
|
||||
|
||||
if (parmsleft != 1)
|
||||
MS_Quit ("Improper parameters. IDLINK -? for help.\n");
|
||||
|
||||
//
|
||||
// start doing stuff
|
||||
//
|
||||
ParseScript ();
|
||||
CopyFiles ();
|
||||
|
||||
if (filescopied)
|
||||
{
|
||||
WriteDirectory ();
|
||||
WriteContentFile ();
|
||||
}
|
||||
else
|
||||
{
|
||||
close (datahandle);
|
||||
}
|
||||
|
||||
printf ("\n%u files copied.\n",filescopied);
|
||||
return 0;
|
||||
}
|
BIN
IDLINK/IDLINK.DSK
Normal file
BIN
IDLINK/IDLINK.DSK
Normal file
Binary file not shown.
BIN
IDLINK/IDLINK.EXE
Normal file
BIN
IDLINK/IDLINK.EXE
Normal file
Binary file not shown.
BIN
IDLINK/IDLINK.PRJ
Normal file
BIN
IDLINK/IDLINK.PRJ
Normal file
Binary file not shown.
41
IDLINK/IDLINK.TXT
Normal file
41
IDLINK/IDLINK.TXT
Normal file
|
@ -0,0 +1,41 @@
|
|||
|
||||
IDLINK DOCUMENTATION
|
||||
--------------------
|
||||
|
||||
idlink [-b] [-source path] [-dest path] [-script scriptfile]
|
||||
|
||||
-b Force a full rebuild of the file, rather than a file
|
||||
bulking partial update
|
||||
|
||||
-source path To place the source for the files in another directory
|
||||
|
||||
-dest path To place the linked file in another directory
|
||||
|
||||
-script file The script name defaults to LINKFILE.ILN if not specified
|
||||
|
||||
|
||||
|
||||
Script file format:
|
||||
|
||||
; Comments can be uses at the beginning of a line, or after a command's parms
|
||||
; whitespace can be introduced anywhere, but a command cannot cross lines
|
||||
outputfilename ; must be the first token of the file
|
||||
|
||||
filename [labelname] ; adds filename to the data file, possibly with label
|
||||
$OPENCOMP filename ; opens a composite data file. Filenames after this
|
||||
; are assumed to be in the composit file
|
||||
$CLOSECOMP ; Closes the open composite file. Files after this
|
||||
; are assumed to be seperate files. You can issue
|
||||
; multiple $OPENCOMPs without $CLOSECOMP
|
||||
LABEL labelname ; inserts a label on an empty lump
|
||||
|
||||
|
||||
Idlink generates the output linked file, and a file with the same base and
|
||||
a content file with a .ICN (Id CoNtent file) extension. This file holds the
|
||||
pathnames and composite files for each of the lumps. This allows the partial
|
||||
linking to find the correct data even if you rearrange the link script. You
|
||||
can delete this file whenever you want, it will just force a full rebuild.
|
||||
|
||||
During a partial link, if a lump has grown it will be added on to the end of
|
||||
the file, leaving wasted space behind. You should periodically use the -B
|
||||
option to force a rebuild from scratch.
|
6
IDLINK/WALLS1.SCR
Normal file
6
IDLINK/WALLS1.SCR
Normal file
|
@ -0,0 +1,6 @@
|
|||
COMPOSITE
|
||||
|
||||
w1_1.dat wall 2 2 10
|
||||
w1_2.dat wall 11 2 6
|
||||
w1_3.dat wall 20 2 8
|
||||
w1_4.dat wall 29 2 12
|
164
LIGHTS/LIGHTS.C
Normal file
164
LIGHTS/LIGHTS.C
Normal file
|
@ -0,0 +1,164 @@
|
|||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <dir.h>
|
||||
#include <dos.h>
|
||||
#include <mem.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys\stat.h>
|
||||
#include <io.h>
|
||||
|
||||
typedef unsigned char byte;
|
||||
unsigned NUMLIGHTS;
|
||||
|
||||
byte palette[768];
|
||||
byte far lightpalette[254][256];
|
||||
|
||||
|
||||
/*
|
||||
=====================
|
||||
=
|
||||
= RF_BuildLights
|
||||
=
|
||||
= 0 is full palette
|
||||
= NUMLIGHTS and NUMLIGHTS+1 are all black
|
||||
=
|
||||
=====================
|
||||
*/
|
||||
|
||||
void RF_BuildLights (void)
|
||||
{
|
||||
int i,l,c,test,table;
|
||||
int red,green,blue;
|
||||
int dist,bestdist,rdist,gdist,bdist,bestcolor;
|
||||
byte *palptr, *palsrc;
|
||||
byte far *screen;
|
||||
|
||||
screen = MK_FP(0xa000,0);
|
||||
|
||||
for (l=0;l<NUMLIGHTS;l++)
|
||||
{
|
||||
//printf ("%i.",NUMLIGHTS-l);
|
||||
palsrc = palette;
|
||||
for (c=0;c<256;c++)
|
||||
{
|
||||
red = *palsrc++;
|
||||
green = *palsrc++;
|
||||
blue = *palsrc++;
|
||||
|
||||
red = (red*(NUMLIGHTS-l)+NUMLIGHTS/2)/NUMLIGHTS;
|
||||
green = (green*(NUMLIGHTS-l)+NUMLIGHTS/2)/NUMLIGHTS;
|
||||
blue = (blue*(NUMLIGHTS-l)+NUMLIGHTS/2)/NUMLIGHTS;
|
||||
|
||||
// find the closest color
|
||||
|
||||
// TML -> added 11-12-94
|
||||
// Allows last 16 palette entries to be unafected
|
||||
// by shading and thus available for lighted tiles
|
||||
// such as flames, lamps, etc.
|
||||
|
||||
if (c < 248)
|
||||
{
|
||||
palptr = palette;
|
||||
bestdist = 32000;
|
||||
for (test=0;test<256;test++)
|
||||
{
|
||||
rdist = (int)*palptr++ - red;
|
||||
gdist = (int)*palptr++ - green;
|
||||
bdist = (int)*palptr++ - blue;
|
||||
dist = rdist*rdist + gdist*gdist + bdist*bdist;
|
||||
if (dist<bestdist)
|
||||
{
|
||||
bestdist=dist;
|
||||
bestcolor = test;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
bestcolor = c;
|
||||
|
||||
|
||||
lightpalette[l][c] = bestcolor;
|
||||
}
|
||||
_fmemcpy (screen,lightpalette[l],256);
|
||||
screen+=320;
|
||||
_fmemcpy (screen,lightpalette[l],256);
|
||||
screen+=320;
|
||||
_fmemcpy (screen,lightpalette[l],256);
|
||||
screen+=320;
|
||||
}
|
||||
printf ("\n");
|
||||
}
|
||||
|
||||
|
||||
|
||||
void extern LoadLBM(char *filename,int scrwidth,int graphflag);
|
||||
|
||||
/*
|
||||
====================
|
||||
=
|
||||
= main
|
||||
=
|
||||
====================
|
||||
*/
|
||||
|
||||
int main(int argc,char **argv)
|
||||
{
|
||||
int i,j,loop,handle;
|
||||
unsigned writen;
|
||||
|
||||
if (argc != 3)
|
||||
{
|
||||
printf ("lights picture.lbm lighttables\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
LoadLBM(argv[1],1,1);
|
||||
|
||||
_ES = FP_SEG(palette);
|
||||
_DX = FP_OFF(palette);
|
||||
_BX = 0;
|
||||
_CX = 0x100;
|
||||
_AX = 0x1017;
|
||||
geninterrupt(0x10); // get default palette
|
||||
|
||||
//
|
||||
// write palette
|
||||
//
|
||||
if ( (handle = open("palette.dat", O_BINARY | O_WRONLY | O_CREAT |
|
||||
O_TRUNC,S_IREAD | S_IWRITE) ) == -1)
|
||||
{
|
||||
perror ("Error opening output palette.dat");
|
||||
return 1;
|
||||
}
|
||||
|
||||
write (handle,palette,sizeof(palette));
|
||||
close(handle);
|
||||
|
||||
//
|
||||
// write light sources
|
||||
//
|
||||
|
||||
// printf ("Calculating diminished palettes...\n");
|
||||
|
||||
NUMLIGHTS = atoi (argv[2]);
|
||||
RF_BuildLights ();
|
||||
|
||||
|
||||
if ( (handle = open("lights.dat", O_BINARY | O_WRONLY | O_CREAT |
|
||||
O_TRUNC,S_IREAD | S_IWRITE) ) == -1)
|
||||
{
|
||||
perror ("Error opening output lights.dat");
|
||||
return 1;
|
||||
}
|
||||
|
||||
_dos_write (handle,&lightpalette[0][0],NUMLIGHTS*256,&writen);
|
||||
close(handle);
|
||||
|
||||
bioskey (0);
|
||||
_AX = 3;
|
||||
geninterrupt(0x10);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
BIN
LIGHTS/LIGHTS.DSK
Normal file
BIN
LIGHTS/LIGHTS.DSK
Normal file
Binary file not shown.
BIN
LIGHTS/LIGHTS.EXE
Normal file
BIN
LIGHTS/LIGHTS.EXE
Normal file
Binary file not shown.
BIN
LIGHTS/LIGHTS.OBJ
Normal file
BIN
LIGHTS/LIGHTS.OBJ
Normal file
Binary file not shown.
BIN
LIGHTS/LIGHTS.PRJ
Normal file
BIN
LIGHTS/LIGHTS.PRJ
Normal file
Binary file not shown.
590
LIGHTS/LOADLBM.C
Normal file
590
LIGHTS/LOADLBM.C
Normal file
|
@ -0,0 +1,590 @@
|
|||
/*
|
||||
** ILBM file loader by John Romero (C) 1990 PCRcade
|
||||
**
|
||||
** Loads and decompresses an ILBM-format file to the
|
||||
** screen in either CGA, EGA or MCGA -- compressed or
|
||||
** or unpacked!
|
||||
**
|
||||
** Merely pass the filename of the image to LoadLBM
|
||||
** and sit back! The proper graphics mode is initialized
|
||||
** and the screen (or brush) is loaded and displayed!
|
||||
**
|
||||
*/
|
||||
|
||||
struct LBMinfo { int width,height,planes; } CurrentLBM;
|
||||
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <dos.h>
|
||||
#include <bios.h>
|
||||
#include <mem.h>
|
||||
#include <alloc.h>
|
||||
|
||||
#define SC_index 0x3c4
|
||||
#define SC_mapmask 2
|
||||
|
||||
/*
|
||||
** FUNCTION PROTOTYPES
|
||||
*/
|
||||
|
||||
void GetChunkID(char huge *buffer,char *tempstr);
|
||||
int NextChunkID(char huge *buffer);
|
||||
void huge *Decompress(char huge *buffer,char *unpacked,int bpwidth,char planes);
|
||||
void huge *SetupLBM(char *filename);
|
||||
void Do_CGA_Screen(char huge *buffer,char compress,char planes,int width,int height);
|
||||
void Do_EGA_Screen(char huge *buffer,char compress,char planes,int width,int height,int scrwidth);
|
||||
void Do_MCGA_Screen(char huge *buffer,char compress,int width,int height);
|
||||
void EGA_MoveBitplane(char huge *from,char far *to,int bpwidth);
|
||||
|
||||
char typestr[5],huge *startbuff;
|
||||
|
||||
// EGA loader NOTE: the "scrwidth" var should be 0=320 mode,1=640 mode
|
||||
|
||||
void LoadLBM(char *filename,int scrwidth,int graphflag)
|
||||
{
|
||||
|
||||
char huge *buffer,huge *cmap;
|
||||
char planes,
|
||||
tempstr[5],
|
||||
compress;
|
||||
int handle,
|
||||
width,
|
||||
height;
|
||||
|
||||
if((buffer = SetupLBM(filename))==NULL) exit(1);
|
||||
|
||||
/*
|
||||
** Need to get BMHD info, like:
|
||||
** - screen width, height
|
||||
** - # of bitplanes
|
||||
** - compression flag (YES/NO)
|
||||
*/
|
||||
|
||||
CurrentLBM.width=width = (*(buffer+9)&0xFF)+(*(buffer+8)*256);
|
||||
CurrentLBM.height=height = (*(buffer+11)&0xFF)+(*(buffer+10)*256);
|
||||
CurrentLBM.planes=planes = *(buffer+16);
|
||||
compress = *(buffer+18);
|
||||
|
||||
/*
|
||||
if ((strcmp(typestr,"PBM ")!=0)&&(planes==8))
|
||||
{
|
||||
printf("This VGA screen is not in PBM format, but ILBM, which I\ncannot decode at this time.\n");
|
||||
exit(1);
|
||||
}*/
|
||||
|
||||
/*
|
||||
** Find the CMAP chunk so I can remap the registers...
|
||||
*/
|
||||
|
||||
movedata(FP_SEG(buffer),FP_OFF(buffer),_DS,(unsigned)tempstr,4);
|
||||
tempstr[4]=0;
|
||||
while (strcmp(tempstr,"CMAP")!=0)
|
||||
{
|
||||
buffer += NextChunkID(buffer);
|
||||
movedata(FP_SEG(buffer),FP_OFF(buffer),_DS,(unsigned)tempstr,4);
|
||||
}
|
||||
|
||||
cmap = buffer+8;
|
||||
|
||||
/*
|
||||
** Now, find the BODY chunk...
|
||||
*/
|
||||
|
||||
movedata(FP_SEG(buffer),FP_OFF(buffer),_DS,(unsigned)tempstr,4);
|
||||
while (strcmp(tempstr,"BODY")!=0)
|
||||
{
|
||||
buffer += NextChunkID(buffer);
|
||||
movedata(FP_SEG(buffer),FP_OFF(buffer),_DS,(unsigned)tempstr,4);
|
||||
}
|
||||
|
||||
/*
|
||||
** Found the BODY chunk! Here we go!
|
||||
*/
|
||||
|
||||
buffer += 8; /* point to actual data */
|
||||
|
||||
/* Turn graphics mode on, if desired */
|
||||
|
||||
if (graphflag==1)
|
||||
{
|
||||
switch (planes)
|
||||
{
|
||||
case 2: { _AX=4; geninterrupt(0x10); break; }
|
||||
case 4: {
|
||||
_AX=0x0d;
|
||||
geninterrupt(0x10);
|
||||
scrwidth=0;
|
||||
break;
|
||||
}
|
||||
case 8: { _AX=0x13; geninterrupt(0x10); break; }
|
||||
}
|
||||
}
|
||||
|
||||
switch (planes)
|
||||
{
|
||||
case 2: Do_CGA_Screen(buffer,compress,planes,width,height);
|
||||
break;
|
||||
case 4: Do_EGA_Screen(buffer,compress,planes,width,height,scrwidth);
|
||||
break;
|
||||
case 8: {
|
||||
unsigned int i;
|
||||
|
||||
for (i=0;i<0x300;i++) (unsigned char)*cmap++ >>= 2;
|
||||
|
||||
cmap -= 0x300; // reset to beginning again
|
||||
|
||||
_BX = 0;
|
||||
_CX = 0x100;
|
||||
_ES = FP_SEG(cmap);
|
||||
_DX = FP_OFF(cmap);
|
||||
_AX = 0x1012;
|
||||
geninterrupt(0x10);
|
||||
|
||||
Do_MCGA_Screen(buffer,compress,width,height);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
printf("This screen has %d bitplanes. I don't understand that sort of stuff.\n",planes);
|
||||
exit();
|
||||
}
|
||||
}
|
||||
farfree((void far *)startbuff);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//==============================================
|
||||
//=
|
||||
//= Load a *LARGE* file into a FAR buffer!
|
||||
//= by John Romero (C) 1990 PCRcade
|
||||
//=
|
||||
//==============================================
|
||||
|
||||
unsigned long LoadFile(char *filename,char huge *buffer)
|
||||
{
|
||||
unsigned int handle,flength1,flength2,buf1,buf2,foff1,foff2;
|
||||
|
||||
buf1=FP_OFF(buffer);
|
||||
buf2=FP_SEG(buffer);
|
||||
|
||||
asm mov WORD PTR foff1,0 // file offset = 0 (start)
|
||||
asm mov WORD PTR foff2,0
|
||||
|
||||
asm mov dx,filename
|
||||
asm mov ax,3d00h // OPEN w/handle (read only)
|
||||
asm int 21h
|
||||
asm jc out
|
||||
|
||||
asm mov handle,ax
|
||||
asm mov bx,ax
|
||||
asm xor cx,cx
|
||||
asm xor dx,dx
|
||||
asm mov ax,4202h
|
||||
asm int 21h // SEEK (find file length)
|
||||
asm jc out
|
||||
|
||||
asm mov flength1,ax
|
||||
asm mov flength2,dx
|
||||
|
||||
asm mov cx,flength2
|
||||
asm inc cx // <- at least once!
|
||||
|
||||
L_1:
|
||||
|
||||
asm push cx
|
||||
|
||||
asm mov cx,foff2
|
||||
asm mov dx,foff1
|
||||
asm mov ax,4200h
|
||||
asm int 21h // SEEK from start
|
||||
|
||||
asm push ds
|
||||
asm mov bx,handle
|
||||
asm mov cx,-1
|
||||
asm mov dx,buf1
|
||||
asm mov ax,buf2
|
||||
asm mov ds,ax
|
||||
asm mov ah,3fh // READ w/handle
|
||||
asm int 21h
|
||||
asm pop ds
|
||||
|
||||
asm pop cx
|
||||
asm jc out
|
||||
asm cmp ax,-1
|
||||
asm jne out
|
||||
|
||||
asm push cx // need to read the last byte
|
||||
asm push ds // into the segment! IMPORTANT!
|
||||
asm mov bx,handle
|
||||
asm mov cx,1
|
||||
asm mov dx,buf1
|
||||
asm add dx,-1
|
||||
asm mov ax,buf2
|
||||
asm mov ds,ax
|
||||
asm mov ah,3fh
|
||||
asm int 21h
|
||||
asm pop ds
|
||||
asm pop cx
|
||||
|
||||
asm add buf2,1000h
|
||||
asm inc WORD PTR foff2
|
||||
asm loop L_1
|
||||
|
||||
out:
|
||||
|
||||
asm mov bx,handle // CLOSE w/handle
|
||||
asm mov ah,3eh
|
||||
asm int 21h
|
||||
|
||||
return (flength2*0x10000+flength1);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void huge *SetupLBM(char *filename)
|
||||
{
|
||||
int handle;
|
||||
char huge *buffer;
|
||||
char tempstr[64];
|
||||
|
||||
|
||||
buffer = startbuff = (char huge *)farmalloc(0xf000);
|
||||
if (buffer==NULL) return(NULL);
|
||||
|
||||
strupr(filename);
|
||||
if (strstr(filename,".")==NULL)
|
||||
strcat(filename,".LBM");
|
||||
|
||||
|
||||
LoadFile(filename,buffer);
|
||||
|
||||
GetChunkID(buffer,tempstr);
|
||||
if (strcmp(tempstr,"FORM")!=0)
|
||||
{
|
||||
printf("This isn't in ILBM FORM format file!\n");
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
** point past the FORM chunk
|
||||
** and see if this really IS
|
||||
** and ILBM file
|
||||
*/
|
||||
|
||||
buffer += 8;
|
||||
GetChunkID(buffer,tempstr);
|
||||
strcpy(typestr,tempstr); // save file type
|
||||
if ((strcmp(tempstr,"ILBM")!=0) && (strcmp(tempstr,"PBM ")!=0) )
|
||||
{
|
||||
printf("This isn't an ILBM format file!\n");
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
** point to BMHD chunk, the first NORMAL chunk!
|
||||
*/
|
||||
|
||||
buffer += 4;
|
||||
GetChunkID(buffer,tempstr);
|
||||
if (strcmp(tempstr,"BMHD")!=0)
|
||||
{
|
||||
printf("What kind of ILBM is this? There's no BMHD chunk!\n");
|
||||
return(NULL);
|
||||
}
|
||||
return(buffer);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void GetChunkID(char huge *buffer,char *tempstr)
|
||||
{
|
||||
movedata(FP_SEG(buffer),FP_OFF(buffer),_DS,(unsigned)tempstr,4);
|
||||
tempstr[4]=0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int NextChunkID(char huge *buffer)
|
||||
{
|
||||
unsigned int newoffset;
|
||||
|
||||
newoffset = (*(buffer+7)&0xFF) + (*(buffer+6)*256);
|
||||
if ((newoffset & 1)==1) newoffset += 1;
|
||||
return(newoffset+8); /* +8 because chunk + offset = 8 bytes! */
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
** CGA loader
|
||||
*/
|
||||
|
||||
void Do_CGA_Screen(char huge *buffer,char compress,char planes,int width,int height)
|
||||
{
|
||||
unsigned int bpwidth,
|
||||
loopY,
|
||||
loopX,
|
||||
loopB,
|
||||
offset,
|
||||
data;
|
||||
char far *screen,
|
||||
b1,
|
||||
b2,
|
||||
unpacked[80];
|
||||
|
||||
|
||||
bpwidth = width/8;
|
||||
|
||||
for (loopY=0;loopY<height;loopY++)
|
||||
{
|
||||
if (compress==1)
|
||||
buffer=Decompress(buffer,unpacked,bpwidth,planes);
|
||||
|
||||
offset=0;
|
||||
screen = MK_FP(0xb800,(0x2000*(loopY&1))+(80*(loopY/2)));
|
||||
for (loopX=0;loopX<bpwidth;loopX++)
|
||||
{
|
||||
if (compress==1)
|
||||
{
|
||||
b1 = *(unpacked+offset);
|
||||
b2 = *(unpacked+bpwidth+offset);
|
||||
}
|
||||
else
|
||||
{
|
||||
b1 = *(buffer+offset);
|
||||
b2 = *(buffer+bpwidth+offset);
|
||||
}
|
||||
offset++;
|
||||
|
||||
// This loop should be in INLINE(!) assembler!
|
||||
|
||||
asm mov cx,8
|
||||
asm mov bh,b1
|
||||
asm mov bl,b2
|
||||
asm xor dx,dx
|
||||
LoopTop:
|
||||
asm test bh,1
|
||||
asm jz NoOR
|
||||
asm or dx,4000h
|
||||
NoOR:
|
||||
asm test bl,1
|
||||
asm jz NoOR1
|
||||
asm or dx,8000h
|
||||
NoOR1:
|
||||
asm cmp cx,1
|
||||
asm je NoShift
|
||||
asm shr dx,1
|
||||
asm shr dx,1
|
||||
NoShift:
|
||||
asm shr bh,1
|
||||
asm shr bl,1
|
||||
asm loop LoopTop
|
||||
|
||||
asm mov data,dx
|
||||
|
||||
/* first draft of above loop:
|
||||
|
||||
for (loopB=0;loopB<8;loopB++)
|
||||
{
|
||||
if (b1 & 1==1) data |= 0x4000;
|
||||
if (b2 & 1==1) data |= 0x8000;
|
||||
if (loopB<7) data >>= 2;
|
||||
b1 >>= 1;
|
||||
b2 >>= 1;
|
||||
}
|
||||
*/
|
||||
|
||||
*screen = data >> 8;
|
||||
*(screen+1) = data;
|
||||
screen += 2;
|
||||
}
|
||||
|
||||
if (compress==0)
|
||||
buffer += bpwidth*planes;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
** EGA loader (NOTE: the "scrwidth" var should be 0=320 mode,1=640 mode
|
||||
*/
|
||||
|
||||
void Do_EGA_Screen(char huge *buffer,char compress,char planes,int width,int height,int scrwidth)
|
||||
{
|
||||
unsigned int bpwidth,
|
||||
loopY,
|
||||
loopX,
|
||||
loopB,
|
||||
offset,
|
||||
data;
|
||||
char far *screen = (char far *)0xa0000000,
|
||||
b1,
|
||||
b2,
|
||||
unpacked[160];
|
||||
|
||||
|
||||
bpwidth = width/8;
|
||||
|
||||
for (loopY=0;loopY<height;loopY++)
|
||||
{
|
||||
if (compress==1)
|
||||
{
|
||||
buffer=Decompress(buffer,unpacked,bpwidth,planes);
|
||||
EGA_MoveBitplane(unpacked,screen,bpwidth);
|
||||
}
|
||||
else
|
||||
{
|
||||
EGA_MoveBitplane(buffer,screen,bpwidth);
|
||||
buffer += bpwidth*planes;
|
||||
}
|
||||
screen = MK_FP(0xa000,FP_OFF(screen)+40*(scrwidth+1));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
** MCGA loader
|
||||
*/
|
||||
|
||||
void Do_MCGA_Screen(char huge *buffer,char compress,int width,int height)
|
||||
{
|
||||
unsigned int bpwidth,
|
||||
loopY,
|
||||
loopX,
|
||||
loopB,
|
||||
offset,
|
||||
data;
|
||||
char far *screen = (char far *)0xa0000000,
|
||||
b1,
|
||||
b2,
|
||||
unpacked1[320],
|
||||
unpacked[320];
|
||||
|
||||
|
||||
for (loopY=0;loopY<height;loopY++)
|
||||
{
|
||||
if (compress==1)
|
||||
{
|
||||
buffer=Decompress(buffer,unpacked,width,1);
|
||||
if (strcmp(typestr,"ILBM")==0)
|
||||
{
|
||||
int tloop;
|
||||
|
||||
memset(unpacked1,0,320);
|
||||
for (tloop=0;tloop<40;tloop++)
|
||||
{
|
||||
int tloop1,tloop2;
|
||||
unsigned char mask[8] = { 0x80,0x40,0x20,0x10,8,4,2,1 };
|
||||
|
||||
for (tloop1=0;tloop1<8;tloop1++)
|
||||
for (tloop2=0;tloop2<8;tloop2++)
|
||||
unpacked1[tloop*8+tloop1]|=((( (unsigned)unpacked[tloop+(7-tloop2)*40]
|
||||
&mask[tloop1])
|
||||
<<tloop1)
|
||||
>>tloop2);
|
||||
}
|
||||
movedata(_DS,(unsigned)unpacked1,FP_SEG(screen),FP_OFF(screen),width);
|
||||
}
|
||||
else movedata(_DS,(unsigned)unpacked,FP_SEG(screen),FP_OFF(screen),width);
|
||||
}
|
||||
else
|
||||
{
|
||||
movedata(FP_SEG(buffer),FP_OFF(buffer),FP_SEG(screen),FP_OFF(screen),width);
|
||||
buffer += width;
|
||||
}
|
||||
screen = MK_FP(0xa000,FP_OFF(screen)+320);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
** ILBM's RLE decompressor. Merely pass the address of the compressed
|
||||
** ILBM bitplane data, where to unpack it, the # of bytes each bitplane
|
||||
** takes up, and the # of bit planes to unpack.
|
||||
*/
|
||||
|
||||
void huge *Decompress(char huge *buffer,char *unpacked,int bpwidth,char planes)
|
||||
{
|
||||
int count,
|
||||
offset,
|
||||
loopP;
|
||||
unsigned char byte,
|
||||
rept;
|
||||
|
||||
for (loopP=0;loopP<planes;loopP++)
|
||||
{
|
||||
count = 0;
|
||||
|
||||
do {
|
||||
rept = *(buffer);
|
||||
if (rept > 0x80)
|
||||
{
|
||||
rept = (rept^0xff)+2;
|
||||
byte = *(buffer+1);
|
||||
buffer+=2;
|
||||
|
||||
memset(unpacked,byte,rept);
|
||||
}
|
||||
else if (rept < 0x80)
|
||||
{
|
||||
rept++;
|
||||
movedata(FP_SEG(buffer),FP_OFF(buffer)+1,_DS,(unsigned) unpacked,rept);
|
||||
buffer += rept+1;
|
||||
}
|
||||
count += rept;
|
||||
unpacked += rept;
|
||||
|
||||
} while (count<bpwidth);
|
||||
}
|
||||
return(buffer);
|
||||
}
|
||||
|
||||
void EGA_MoveBitplane(char huge *from,char far *to,int bpwidth)
|
||||
{
|
||||
unsigned width;
|
||||
|
||||
asm push ds
|
||||
asm push di
|
||||
asm push si
|
||||
|
||||
asm lds si,from //;DS:SI = from buffer
|
||||
asm les di,to //;ES:DI = screen
|
||||
asm mov bx,bpwidth
|
||||
asm mov width,bx
|
||||
|
||||
asm mov dx,SC_index //;start writing to SC_mapmask register
|
||||
asm mov al,SC_mapmask
|
||||
asm out dx,al
|
||||
asm inc dx
|
||||
|
||||
asm mov bh,4 //;4 bitplanes!
|
||||
asm mov ah,1 //;start at bitplane 0
|
||||
|
||||
EGA1:
|
||||
|
||||
asm mov al,ah //;select bitplane
|
||||
asm out dx,al
|
||||
|
||||
asm xor ch,ch
|
||||
asm mov cl,bl //;cx = bitplane width
|
||||
asm rep movsb
|
||||
asm sub di,width //;start at beginning of line again...
|
||||
asm shl ah,1
|
||||
asm dec bh
|
||||
asm jnz EGA1
|
||||
|
||||
asm mov al,15
|
||||
asm out dx,al //;write to ALL bitplanes again
|
||||
|
||||
asm pop si
|
||||
asm pop di
|
||||
asm pop ds
|
||||
}
|
BIN
LIGHTS/LOADLBM.OBJ
Normal file
BIN
LIGHTS/LOADLBM.OBJ
Normal file
Binary file not shown.
BIN
MYMAP/ACTORS1.LBM
Normal file
BIN
MYMAP/ACTORS1.LBM
Normal file
Binary file not shown.
BIN
MYMAP/ACTORS2.LBM
Normal file
BIN
MYMAP/ACTORS2.LBM
Normal file
Binary file not shown.
1
MYMAP/B.BAT
Normal file
1
MYMAP/B.BAT
Normal file
|
@ -0,0 +1 @@
|
|||
bc mazer.prj
|
BIN
MYMAP/CRISP6X9.FNT
Normal file
BIN
MYMAP/CRISP6X9.FNT
Normal file
Binary file not shown.
BIN
MYMAP/DOORS1.LBM
Normal file
BIN
MYMAP/DOORS1.LBM
Normal file
Binary file not shown.
BIN
MYMAP/DP_BPAL.$$$
Normal file
BIN
MYMAP/DP_BPAL.$$$
Normal file
Binary file not shown.
BIN
MYMAP/DP_CPAL.$$$
Normal file
BIN
MYMAP/DP_CPAL.$$$
Normal file
Binary file not shown.
BIN
MYMAP/DP_OPAL.$$$
Normal file
BIN
MYMAP/DP_OPAL.$$$
Normal file
Binary file not shown.
BIN
MYMAP/DP_PREFS
Normal file
BIN
MYMAP/DP_PREFS
Normal file
Binary file not shown.
BIN
MYMAP/DP_SPAL.$$$
Normal file
BIN
MYMAP/DP_SPAL.$$$
Normal file
Binary file not shown.
BIN
MYMAP/FIXED6X8.FNT
Normal file
BIN
MYMAP/FIXED6X8.FNT
Normal file
Binary file not shown.
BIN
MYMAP/FLATS1.LBM
Normal file
BIN
MYMAP/FLATS1.LBM
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue