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