I fully support try to make 3D games for MSX. I'm aware we cannot expect nice graphics as we are used but fortunately a game is not only graphics. IMHO a game with poor graphic quality + good music could be infinitely better than the opposite. Adding a good color pallet, as the example that Maggoo showed, FX and a good gameplay would be "enough". . Something different in the MSX scene as Wolfestein done for ZX.
anyone willing to help in thinking to a sprite scaler ?
About the MSX-Fan game; if you'd like to take an easy look at the listing:
If you want to actually have the listing, look for MSX Fan 09. Filename is "THREE-D.FD6".
Please don't ask me to save with "",A in DirAsDisk and open with notepad and such, as I nearly threw my laptop from the balcony after more than a half hour of trying as it is. :)
there is lot of asm in it
I was wondering, can you save it with "",A as it would take a long time to type with just pictures.
John: what went wrong then? This should work fine...
What I did:
1) start openMSX and the Boosted MSX2 EN config (which has 2 drives)
2) put the MSX fan disk image in drive A
3) create a dir somewhere and put it in drive B
4) in the MSX: LOAD"three-d.fd9"
5) in the MSX: SAVE"B:listing.asc",A
6) quit openMSX.
7) copy paste the contents of listing.asc here:
10 CLEAR200,&HC000:MAXFILES=2:OPEN"GRP:"AS#1 20 DEFINTA-Z:DIMD(2100),J(19),T(11),C$(11) 30 DEFFNA(B)=ASC(MID$(A$,B,1))-64:DEFFNB(A)=(VAL(MID$(C$(CS),A,1))*I+VAL(MID$(C$(CS),A+3,1))*J)\7 40 A=&HC400:DEFUSR=A:DEFUSR1=A+3:DEFUSR2=A+6:DEFUSR3=A+9:DEFUSR4=A+12 50 FORI=0TO7:READA$:FORJ=1TOLEN(A$)STEP2:POKEA,VAL("&H"+MID$(A$,J,2)):A=A+1:NEXTJ,I 60 ONERRORGOTO580:OPEN"\3DD\TIME.DAT"FORINPUTAS#2:ONERRORGOTO0:FORI=0TO11:INPUT#2,T(I):NEXT:CLOSE#2 70 '----------------------------------------- 80 A=&HC000:POKEA+6,35:POKEA+11,2:POKEA+12,32:POKEA+14,6 90 E=A+128:FORI=0TO255:POKEE+I,(COS(I*.024544)*127+256)MOD256:NEXT 100 E=A+512:FORI=0TO60:POKEE+I,400/(I+2):NEXT 110 POKEA+768,&H99:E=A+769:FORI=0TO40:J=I+I:K=INT(I/2.3):POKEE+J,34+K\2+(KMOD2)+(K\2)*16:K=INT(I/4+5):POKEE+J+1,34+K\2+(KMOD2)+(K\2)*16:NEXT 120 FORI=0TO8:READC$(I):NEXT 130 '================================ 140 SCREEN8,0:COLOR,0,0:SETPAGE1,1:SCREEN,0:CLS 150 FORJ=0TO8:READA$:LINE(XX+18,YY)-STEP(4,7),255,BF:FORI=1TOLEN(A$)-3STEP4 160 F=FNA(I)+64:IFF=49THENI=I+1 170 X=FNA(I):Y=FNA(I+1):Z=FNA(I+2)+128:W=FNA(I+3):Z=Z+(WAND32)*2:IFF=49THEN190 180 W!=(WAND31)/3:U=XX-W!/2:V=YY-W!/2:R!=SQR((X-X0)^2+(Y-Y0)^2)+.1:FORL!=0TO1STEP1/R!:K!=1-L!:LINE(X0*K!+X*L!+U,Y0*K!+Y*L!+V)-STEP(W!,W!),(Z0*K!+Z*L!),BF:NEXT 190 X0=X:Y0=Y:Z0=Z 200 NEXT:LINE(XX,YY)-STEP(63,63),255,B:XX=(XX+64)MOD256:YY=YY-(XX=0)*64:NEXT 210 '================================ 220 SCREEN8,0:COLOR242 230 COPY((CSMOD4)*64,(CS\4)*64)-STEP(63,63),1TO(96,50),0:LINE(0,120)-(255,211),0,BF:DRAW"BM100,140":PRINT#1,"º-½";CS+1:DRAW"BM100,160":PRINT#1,"›’š“—û˜";T(CS):COPY(80,140)-(201,170),0TO(79,140),0,TPSET 240 S=STICK(0)+STICK(1)+STICK(2):IFS=1ANDT(CS)<4999THENST=3:GOTO270 250 IFS>1THENCS=(CS+SGN(5-S)+9)MOD9:GOTO230 260 FORST=0TO2:IFSTRIG(ST)=0THENNEXT:GOTO240 270 COPY(96,50)-STEP(63,63),0TOD 280 '================================ 290 SCREEN1,0,0:WIDTH32:KEYOFF:VDP(0)=VDP(0)OR2:VDP(4)=3:VDP(3)=255:VDP(11)=0 300 U=USR4(0):FORI=&H3400TO&H3407:VPOKEI,170:VPOKEI+8,0:NEXT:SPRITE$(0)=CHR$(255) 310 FORI=0TO7:J=7-I:COLOR=(I+2,FNB(1),FNB(2),FNB(3)):NEXT:COLOR=(10,7,0,0):FORI=0TO3:COLOR=(15-I,I+4,I+4,I+4):NEXT 320 LOCATE2,18,0:PRINT"SPEED":LOCATE4,20:PRINT"LAP TIME":LOCATE12,22:PRINT"TIME 330 POKE&HFAFC,PEEK(&HFAFC)OR8:IFST=3THENBLOAD"\3DD\"+CHR$(CS+65)+".BIN",S 340 '================================ 350 T=0:BT=0:L=0:VA=16384 360 RESTORE780:FORI=0TO19:READJ(I):NEXT:J(2)=(PEEK(VARPTR(D(2))+275)AND127)*256+2500 370 U=USR1(VARPTR(D(2)))\USR3(VARPTR(J(0)))+USR(0)+USR2(0) 380 IFST<3ANDSTRIG(ST)=0THEN380 390 IFINKEY$<>""THEN390 400 SOUND9,15:SOUND10,15 410 '================================== 420 IFTIME<7THEN420ELSETIME=0 430 IFST<3THENJ(14)=STICK(ST)-STRIG(ST)*16:VPOKEVA,J(14)ELSEJ(14)=VPEEK(VA) 440 X=J(0):U=USR1(VARPTR(D(2)))-USR3(VARPTR(J(0)))+USR(0)+USR2(0) 450 IFL=3THEN500 460 T=T+1:LOCATE16,22:PRINTT:VA=VA+1:IFT>9999THEN550 470 IFJ(1)>2000THEN500 480 IFX=<5000ANDJ(0)>5000THENLOCATEL*5+14,20:PRINTT-BT:BT=T:L=L+1:IFL=3THENBEEP 490 IFX>5000ANDJ(0)<=5000THENJ(0)=X:J(4)=0 500 V=J(4)\16:O=2400-V:SOUND2,OMOD256:SOUND3,O\256+5:O=2300-V:SOUND4,OMOD256:SOUND5,O\256+5 510 LOCATE2,17:O=V\75:PRINTSTRING$(O,128);STRING$(28-O,129) 520 PUTSPRITE0,(0,128-J(2)\256),10,0 530 IFINKEY$<>CHR$(27)ANDSTRIG(3)+STRIG(4)=0THEN420 540 '================================ 550 BEEP:IFT
clever way to store asm into data lines
This is the asm core of the game
C400: jp #c419 C403: jp #c40f C406: jp #c513 C409: jp #c5cc C40C: jp #c570 C40F: inc hl C410: inc hl C411: ld e,(hl) C412: inc hl C413: ld d,(hl) C414: ld (#c020),de C418: ret C419: ld a,(#c00c) C41C: ld b,a C41D: ld de,#c800 C420: ld (#c009),de C424: push bc C425: ld a,(#c005) C428: call #c51f C42B: ld (#c018),bc C42F: sub #40 C431: call #c51f C434: ld (#c01a),bc C438: ld hl,(#c000) C43B: ld (#c00f),hl C43E: ld hl,(#c002) C441: ld (#c011),hl C444: xor a C445: ld (#c013),a C448: ld hl,#0080 C44B: ld (#c01c),hl C44E: ld a,(#c001) C451: ld d,a C452: ld a,(#c003) C455: ld e,a C456: call #c52e C459: ld (#c017),a C45C: ld hl,(#c00f) C45F: ld bc,(#c018) C463: add hl,bc C464: ld d,h C465: ld (#c00f),hl C468: ld hl,(#c011) C46B: ld bc,(#c01a) C46F: add hl,bc C470: ld e,h C471: ld (#c011),hl C474: call #c52e C477: ld hl,(#c017) C47A: ld (#c017),a C47D: ld c,a C47E: sub l C47F: jr nc,#c483 C481: neg C483: ld de,#c301 C486: ld hl,#c00e C489: cp (hl) C48A: jr c,#c48d C48C: inc de C48D: ld a,(#c013) C490: add a,a C491: ld h,#00 C493: ld l,a C494: add hl,de C495: ld a,(hl) C496: ex af,af' C497: ld a,(#c004) C49A: sub c C49B: ld hl,(#c013) C49E: ld h,#00 C4A0: ld bc,#c200 C4A3: add hl,bc C4A4: ld b,(hl) C4A5: bit 7,a C4A7: jr nz,#c4ad C4A9: mulub a,b C4AB: jr #c4b8 C4AD: neg C4AF: mulub a,b C4B1: ex de,hl C4B2: ld hl,#0000 C4B5: or a C4B6: sbc hl,de C4B8: ld a,l C4B9: sra h C4BB: rra C4BC: sra h C4BE: rra C4BF: sra h C4C1: rra C4C2: sra h C4C4: rra C4C5: ld l,a C4C6: ld bc,(#c007) C4CA: add hl,bc C4CB: bit 7,h C4CD: jr nz,#c4fa C4CF: ld a,l C4D0: ld bc,(#c01c) C4D4: or a C4D5: sbc hl,bc C4D7: bit 7,h C4D9: jr z,#c4e6 C4DB: ld b,a C4DC: exx C4DD: ld b,a C4DE: call #c544 C4E1: exx C4E2: ld a,b C4E3: ld (#c01c),a C4E6: ld a,(#c013) C4E9: inc a C4EA: ld (#c013),a C4ED: ld hl,#c006 C4F0: cp (hl) C4F1: jp nz,#c45c C4F4: ld b,#00 C4F6: ld a,(#c300) C4F9: ex af,af' C4FA: call #c544 C4FD: ld a,(#c009) C500: add a,#08 C502: ld (#c009),a C505: ld hl,#c005 C508: ld a,(#c00b) C50B: add a,(hl) C50C: ld (hl),a C50D: pop bc C50E: dec b C50F: jp nz,#c424 C512: ret C513: ld de,#2000 C516: ld hl,#c800 C519: ld bc,#1000 C51C: jp #005c C51F: ld l,a C520: ld h,#00 C522: ld de,#c080 C525: add hl,de C526: ld c,(hl) C527: ld b,#00 C529: bit 7,c C52B: ret z C52C: dec b C52D: ret C52E: ld h,#00 C530: ld l,e C531: add hl,hl C532: add hl,hl C533: add hl,hl C534: add hl,hl C535: add hl,hl C536: add hl,hl C537: ld e,d C538: ld d,#00 C53A: add hl,de C53B: ld de,(#c020) C53F: add hl,de C540: ld a,(hl) C541: and #7f C543: ret C544: ld hl,(#c009) C547: ld a,(#c01c) C54A: sub b C54B: ret z C54C: ld e,b C54D: ld c,a C54E: ld a,e C54F: srl a C551: srl a C553: srl a C555: add a,h C556: ld h,a C557: ld a,e C558: and #07 C55A: ld d,a C55B: add a,l C55C: ld l,a C55D: ld a,#08 C55F: sub d C560: ld b,a C561: ex af,af' C562: ld de,#00f8 C565: ld (hl),a C566: inc hl C567: dec c C568: ret z C569: djnz #c565 C56B: add hl,de C56C: ld b,#08 C56E: jr #c565 C570: ld hl,#0000 C573: ld de,#c800 C576: ld bc,#0800 C579: call #0059 C57C: ld hl,#1000 C57F: call #0053 C582: ld a,(#0007) C585: ld c,a C586: ld h,#c8 C588: ld a,(hl) C589: ld b,a C58A: srl a C58C: or b C58D: out (c),a C58F: inc hl C590: bit 3,h C592: jr nz,#c588 C594: ld hl,#0000 C597: call #0053 C59A: ld a,#55 C59C: ld de,#0fff C59F: out (c),a C5A1: rlca C5A2: dec de C5A3: bit 7,d C5A5: jr z,#c59f C5A7: ld hl,#1800 C5AA: call #0053 C5AD: ld b,#02 C5AF: out (c),l C5B1: inc l C5B2: jr nz,#c5af C5B4: djnz #c5af C5B6: ld hl,#3000 C5B9: call #0053 C5BC: ld b,#08 C5BE: ld a,l C5BF: and #06 C5C1: rrca C5C2: add a,#0c C5C4: out (c),a C5C6: inc l C5C7: jr nz,#c5be C5C9: djnz #c5be C5CB: ret C5CC: inc hl C5CD: inc hl C5CE: ld e,(hl) C5CF: inc hl C5D0: ld d,(hl) C5D1: ex de,hl C5D2: push hl C5D3: ld de,#c761 C5D6: ld bc,#002a C5D9: ldir C5DB: ld hl,(#c769) C5DE: push hl C5DF: ld bc,(#c779) C5E3: call #c736 C5E6: ex de,hl C5E7: pop hl C5E8: or a C5E9: sbc hl,de C5EB: ld de,(#c775) C5EF: or a C5F0: sbc hl,de C5F2: bit 7,h C5F4: jr z,#c5f9 C5F6: ld hl,#0000 C5F9: ld a,(#c77d) C5FC: and #f0 C5FE: ld de,#0000 C601: or a C602: jr z,#c608 C604: ld de,(#c771) C608: add hl,de C609: bit 7,h C60B: jr z,#c60f C60D: ld h,#7f C60F: push hl C610: ld hl,(#c76d) C613: ld bc,(#c787) C617: call #c736 C61A: pop bc C61B: add hl,bc C61C: bit 7,h C61E: jr z,#c622 C620: ld h,b C621: ld l,c C622: ld (#c769),hl C625: ld a,(#c77d) C628: and #0f C62A: ld de,#0000 C62D: cp #03 C62F: jr nz,#c635 C631: ld de,(#c777) C635: cp #07 C637: jr nz,#c640 C639: ld de,(#c777) C63D: call #c72c C640: ld hl,(#c76f) C643: add hl,de C644: ld de,#0000 C647: ld a,h C648: or l C649: jr z,#c656 C64B: ld de,(#c777) C64F: bit 7,h C651: jr nz,#c656 C653: call #c72c C656: sra d C658: rr e C65A: add hl,de C65B: ld (#c76f),hl C65E: ld de,(#c767) C662: add hl,de C663: ld (#c767),hl C666: ld a,h C667: call #c51f C66A: sub #20 C66C: ld (#c005),a C66F: ld hl,(#c76a) C672: ld h,#00 C674: call #c736 C677: add hl,hl C678: add hl,hl C679: ld de,(#c761) C67D: push de C67E: add hl,de C67F: ld (#c761),hl C682: ld a,(#c768) C685: sub #40 C687: call #c51f C68A: ld hl,(#c76a) C68D: ld h,#00 C68F: call #c736 C692: add hl,hl C693: add hl,hl C694: ld de,(#c763) C698: push de C699: add hl,de C69A: ld (#c763),hl C69D: ld a,(#c762) C6A0: ld d,a C6A1: ld e,h C6A2: call #c52e C6A5: ld hl,#c77b C6A8: add a,(hl) C6A9: ld hl,#c766 C6AC: cp (hl) C6AD: pop hl C6AE: pop de C6AF: jr c,#c6be C6B1: ld (#c761),de C6B5: ld (#c763),hl C6B8: ld hl,#0000 C6BB: ld (#c769),hl C6BE: ld hl,(#c761) C6C1: ld d,h C6C2: ld (#c000),hl C6C5: ld hl,(#c763) C6C8: ld e,h C6C9: ld (#c002),hl C6CC: call #c52e C6CF: push af C6D0: ld b,a C6D1: ld a,(#c766) C6D4: sub b C6D5: ld h,#00 C6D7: ld l,a C6D8: ld de,(#c77f) C6DC: call #31e6 C6DF: ld de,(#c781) C6E3: or a C6E4: sbc hl,de C6E6: push hl C6E7: ld hl,(#c76d) C6EA: ld bc,(#c783) C6EE: call #c736 C6F1: ex de,hl C6F2: pop hl C6F3: or a C6F4: sbc hl,de C6F6: ld de,(#c76d) C6FA: add hl,de C6FB: ld (#c76d),hl C6FE: ld de,(#c765) C702: add hl,de C703: pop af C704: add a,#02 C706: cp h C707: jr c,#c70a C709: ld h,a C70A: ld (#c765),hl C70D: ld a,h C70E: ld (#c004),a C711: ld hl,(#c785) C714: ld bc,(#c76d) C718: call #c736 C71B: ld de,#0040 C71E: add hl,de C71F: ld (#c007),hl C722: pop de C723: ld hl,#c761 C726: ld bc,#002a C729: ldir C72B: ret C72C: push hl C72D: ld hl,#0000 C730: or a C731: sbc hl,de C733: ex de,hl C734: pop hl C735: ret C736: xor a C737: bit 7,h C739: jr z,#c745 C73B: push bc C73C: ex de,hl C73D: ld hl,#0000 C740: or a C741: sbc hl,de C743: inc a C744: pop bc C745: bit 7,b C747: jr z,#c754 C749: push hl C74A: ld hl,#0000 C74D: or a C74E: sbc hl,bc C750: ld b,h C751: ld c,l C752: pop hl C753: inc a C754: muluw hl,bc C756: ld l,h C757: ld h,e C758: rra C759: ret nc C75A: ex de,hl C75B: ld hl,#0001 C75E: sbc hl,de C760: ret
Emm does Mrc2K11 have a code snipet option??? you paste code's and listings in a special box so that it does not take up all the topic space wich make's it a bit unpleasant to read
coders want 3d, gamers want games.
In terms of visual quality and gameplay, the best 3d ever on MSX (whatever that may be) can't even stand in the shadow of games like Usas, SD-Snatcher, Dragonslayer 6, Space Manbow, Psycho World, Fray etc. I suggest that coders who really want to prove their 3d skills.. make a demo, rather than wasting time on a game no one's going to play. And once they're done with it, they ought to hop back to regular (read: 2d/retro/MSX) game development.. games people *are* going to play! Heck, the G9k is a great videocard for multilayer platformers, with the ease of character printing like on MSX1. Why is there no such game while coders still keep trying to make games that are too heavy for MSX and thus have poor gameplay? Wasn't the G9k released in '94 or something?
well the hard part is.... a msx machine simply can not handle the huge amount of data that is needed for a 3d 9K game.... a better option would be the trick sega used in afterburner 1&2 and outrun 1,2&3 or by example Galaxy force II. www.youtube.com/watch?v=3lHbHT6kWrc maybe spite scaling would work :D:D:D:D
Okay its not realy 3D but hey i would not mind if some one brings out a 9k game that uses the same GF2 technique to mimic 3D maybe a 9K and a TR could achieve this if not maybe a 1 chip msx ;) Reminds me @ Feedback ;)