Very Nice, good work :-)
Very Nice, good work :-)
Le mode 7 est toujours aussi sympa. On peut zoomer (se rapprocher de la carte) en mode 7 ?
L'effet de l'éclair est un peu aléatoire ? Sinon, il claque bien
Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi
Ma page sur DVP
Mon Portfolio
Qui connaît l'erreur, connaît la solution.
Je trouve ça toujours aussi sympa aussi d'un coté ça simule assez bien une texture 3D.
Pour le Mode 7 oui on peut mais la c'est un peu l'exploit technique pour moi , en faite le processeur de la SNES est un peu long (et pas fait pour faire des calculs mathématiques) du coup pour le moment je precalcul les valeurs en C.
Mais si j'arrive a le faire sur la SNES je pourrais zoomer et changer l'angle de la caméra et donc on aura encore une plus impression de 3D
Pour cela que le jeu Super Mario Kart posséder une puce , un DSP qui était fait pour les nombre a virgule et le calcul trigonométrique bref ce que j'ai besoin moi pour faciliter le calcul xD
Je pense faire une virgule fixe mais sur 4 octets (2 octet pour les entiers , 2 pour les virgules) mais je suis sur un processeurs 16 bits , donc t'imagine la galère ^^
Il y a un registre hard pour les multiplications mais il est pas gratuit en terme de cycle (mais toujours plus rapide que si je faisais la multiplication moi même).
Et ces calculs que je devrait faire , je devrais le faire pour le moment 128 fois (et oui j'ai 128 ligne) :/
Pour le moment le seul calcul que je fais c'est celui de la rotation (qui manipule la matrice 2D de la SNES).
Et ça me bouffe tout les calcul du VBlank , Pourquoi pendant le VBlank ? ben la matrice 2D du Mode 7 ne se manipule que pendant cette partie , quel idée chez nintendo de faire cela x)
Bien sur j'utilise quasiment la totalité du VBlank , je dis cela parce que les 128 lignes je ne les mets pas a jours a chaque frame , comme je l'ai dit je peux le faire que sur le VBlank donc en faite j'arrive a modifier la matrice que sur 64 lignes a la fois , donc sur 2 frames je modifies toutes les lignes.
A voir si sur +128 lignes donc sur 3-4 frames cela ne se verra pas...
Bref donc tu vois j'espere que u vois mieux toute la galère du mode 7 et de sa perspective
Pour mario kart j'ose espérer que cette puce et surtout faire pour gérer les calcul sur plusieurs écran (deja que un c'est chaud de night xD).
D'ailleurs pour le ciel j'avais aucune idée de comment faire , le Mode7 ne prend que un BG.
Enfaîte l'astuce c'est de faire le Mode 1 au début et ensuite a la ligne (chez moi 96) , je commence le mode 7 x)
L’éclair je croyais moi aussi que c’était du aléatoire mais enfaîte pas du tout c'est juste son mouvement qui n'est pas linéaire qui donne cet impression.
Sinon, on peut stocker plus de table de valeurs pré-calculées, pour avoir plusieurs niveaux, puis interpoler en entier pour avoir les valeurs manquantes (pour les transitions). Mais la mémoire est peut être très courte du coup.
Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi
Ma page sur DVP
Mon Portfolio
Qui connaît l'erreur, connaît la solution.
C'est sûrement ce que font beaucoup de jeu , vu que leur zoom étant je trouve assez limité , donc oui si je peux faire cela avec juste quelque table precalculé.
Mais franchement ça serait beau a voir si on peut le calculer en temps réel ^^
Probablement le Projet le plus long que j'ai mené (et le plus complexe u_u ).
Enfaîte je commence a avoir un vrai Moteur/lib pour la Super Nintendo , donc tout mes prochains jeu dessus sera beaucoup plus facile a faire du coup
J'ai commencé la programmation du Driver Sonore le fameux SPC700 ^^ (je dirais a 35% de fait).
Niveau jeu , y'a pas de grosse nouveauté niveau visuelle (et risque pas trop d'en avoir du coup) , vu que le principal a était fait.
En vrac , j'ai recodé l'affichage de la Fenetre/Text (pour l'optimiser).
J'ai coder plusieurs fonction permettant d'utiliser les transfert DMA de manière plus ou moins générique
Je gère des grande map (actuelle le max étant de 2048x2048 pixel) , théoriquement je peux faire du 16384x256 pixel a tester (vous imaginez un peu la taille du machin sur SNES ).
J'ai recodé une partie du menu (pour le rendre moins bordélique et plus facile pour moi a utiliser , faudra néanmoins faire un tri sur les item).
On peut avoir jusqu’à 64 ennemi dans la map par info c'est pas aussi simple que ça d rajouter des ennemis , en langage plus évolué on ferai un truc dans le genre :
Que Nenni , si je faisais ça , je mettrais le pauvre 65816 a genou ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 for(int i = 0; i < 64;i++) { ennemi[i].draw(); }
Non non il faut faire plus complexe genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401 .MACRO Ennemi_Test_SC_P1 ldx #$40*\1 stx MEM_TEMPFUNC cpx s_ennemi+_enP1 beq + cpx s_ennemi+_enP2 beq + cpx s_ennemi+_enP3 beq + lda s_perso + _x,x cmp #0 bne ++ lda s_perso + _y,x cmp #0 beq + ++: jsl Ennemi_Test_SC lda MEM_TEMPFUNC+4 cmp #0 beq + ldx #$40*\1 stx s_ennemi+_enP1 jsl Ennemi_Test_SCE_P1 rtl +: .ENDM .MACRO Ennemi_Test_SC_P2 ldx #$40*\1 stx MEM_TEMPFUNC cpx s_ennemi+_enP1 beq + cpx s_ennemi+_enP2 beq + cpx s_ennemi+_enP3 beq + lda s_perso + _x,x cmp #0 bne ++ lda s_perso + _y,x cmp #0 beq + ++: jsl Ennemi_Test_SC lda MEM_TEMPFUNC+4 cmp #0 beq + ldx #$40*\1 stx s_ennemi+_enP2 jsl Ennemi_Test_SCE_P2 rtl +: .ENDM .MACRO Ennemi_Test_SC_P3 ldx #$40*\1 stx MEM_TEMPFUNC cpx s_ennemi+_enP1 beq + cpx s_ennemi+_enP2 beq + cpx s_ennemi+_enP3 beq + lda s_perso + _x,x cmp #0 bne ++ lda s_perso + _y,x cmp #0 beq + ++: jsl Ennemi_Test_SC lda MEM_TEMPFUNC+4 cmp #0 beq + ldx #$40*\1 stx s_ennemi+_enP3 jsl Ennemi_Test_SCE_P3 rtl +: .ENDM Ennemi_Tri: lda MEM_OAM+_nperso2 cmp #3 bne + rtl +: jsl Ennemi_TriP1 jsl Ennemi_TriP2 jsl Ennemi_TriP3 inc s_ennemi+_enFrame lda s_ennemi+_enFrame cmp #7 bne + stz s_ennemi+_enFrame +: rtl ;------------------------------------------ Ennemi_TriP1: ldx s_ennemi+_enP1 rep #$20 lda s_perso+_oam,x cmp #$1E0 bne + bra ++ +: sep #$20 rtl ++: sep #$20 jsl Ennemi_TriP1_F rtl Ennemi_TriP2: ldx s_ennemi+_enP2 rep #$20 lda s_perso+_oam,x cmp #$1E0 bne + bra ++ +: sep #$20 rtl ++: sep #$20 jsl Ennemi_TriP2_F rtl Ennemi_TriP3: ldx s_ennemi+_enP3 rep #$20 lda s_perso+_oam,x cmp #$1E0 bne + bra ++ +: sep #$20 rtl ++: sep #$20 jsl Ennemi_TriP3_F rtl ;------------------------------------------ Ennemi_Test_SCE_P1: lda s_perso + _tbankadd,x sta s_palette+$10+(3*11)+2 sta DMA_BANK rep #$20 lda #$2660 sta s_perso + _tile,x lda s_perso + _tadd,x sta s_palette+$10+(3*11) sta DMA_ADDL sep #$20 SNES_WMADD LKS_BUF_PAL&$FFFF+$160,0 ldy #$20 sty DMA_SIZEL SNES_MDMAEN $01 lda #2 sta s_palette+_pltype rtl Ennemi_Test_SCE_P2: lda s_perso + _tbankadd,x sta s_palette+$10+(3*12)+2 sta DMA_BANK rep #$20 lda #$2888 sta s_perso + _tile,x lda s_perso + _tadd,x sta s_palette+$10+(3*12) sta DMA_ADDL sep #$20 SNES_WMADD LKS_BUF_PAL&$FFFF+$180,0 ldy #$20 sty DMA_SIZEL SNES_MDMAEN $01 lda #2 sta s_palette+_pltype rtl Ennemi_Test_SCE_P3: lda s_perso + _tbankadd,x sta s_palette+$10+(3*13)+2 sta DMA_BANK rep #$20 lda #$2AC0 sta s_perso + _tile,x lda s_perso + _tadd,x sta s_palette+$10+(3*13) sta DMA_ADDL sep #$20 SNES_WMADD LKS_BUF_PAL&$FFFF+$1A0,0 ldy #$20 sty DMA_SIZEL SNES_MDMAEN $01 lda #2 sta s_palette+_pltype rtl ;------------------------------------------ Ennemi_Test_SC: ldx MEM_TEMPFUNC rep #$20 stz MEM_TEMPFUNC+4 lda s_perso+_x,x sec sbc LKS_BG+_bg1x sta MEM_TEMPFUNC+$C cmp #-56 bpl + bra ++ +: cmp #256+56 bmi + bra ++ +: lda s_perso+_y,x sec sbc LKS_BG+_bg1y sta MEM_TEMPFUNC+$E cmp #-56 bpl + bra ++ +: cmp #224+56 bmi + bra ++ +: sep #$20 jsl Personnage_limite_ecranSC rtl ++: sep #$20 rtl Personnage_limite_ecranSC: stz MEM_TEMPFUNC+4 ;Y rep #$20 lda MEM_TEMPFUNC+$E clc adc #$10 sta MEM_TEMP sep #$20 lda MEM_TEMP+1 cmp #$01 bmi + bra +++ +: rep #$20 lda MEM_TEMPFUNC+$E sec sbc #$10 sta MEM_TEMPFUNC+$E sta MEM_OAM+_spry clc adc #$30 sta MEM_TEMP sep #$20 lda MEM_TEMP+1 cmp #$00 bpl + bra +++ +: ;X droite lda MEM_TEMPFUNC+$C+1 cmp #$01 bmi + bra +++ +: ;X gauche rep #$20 lda MEM_TEMPFUNC+$C clc adc #$30 sta MEM_TEMP sep #$20 lda MEM_TEMP+1 cmp #$0 bpl + bra +++ +: rtl +++: inc MEM_TEMPFUNC+4 rtlça rajoute 10ko de code ouch
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397 Ennemi_TriP1_F: lda s_ennemi+_enFrame cmp #0 bne + jsl Ennemi_TriP1_F1 rtl +: cmp #1 bne + jsl Ennemi_TriP1_F2 rtl +: cmp #2 bne + jsl Ennemi_TriP1_F3 rtl +: cmp #3 bne + jsl Ennemi_TriP1_F4 rtl +: cmp #4 bne + jsl Ennemi_TriP1_F5 rtl +: cmp #5 bne + jsl Ennemi_TriP1_F6 rtl +: cmp #6 bne + jsl Ennemi_TriP1_F7 rtl +: rtl Ennemi_TriP2_F: lda s_ennemi+_enFrame cmp #0 bne + jsl Ennemi_TriP2_F1 rtl +: cmp #1 bne + jsl Ennemi_TriP2_F2 rtl +: cmp #2 bne + jsl Ennemi_TriP2_F3 rtl +: cmp #3 bne + jsl Ennemi_TriP2_F4 rtl +: cmp #4 bne + jsl Ennemi_TriP2_F5 rtl +: cmp #5 bne + jsl Ennemi_TriP2_F6 rtl +: cmp #6 bne + jsl Ennemi_TriP2_F7 rtl +: rtl Ennemi_TriP3_F: lda s_ennemi+_enFrame cmp #0 bne + jsl Ennemi_TriP3_F1 rtl +: cmp #1 bne + jsl Ennemi_TriP3_F2 rtl +: cmp #2 bne + jsl Ennemi_TriP3_F3 rtl +: cmp #3 bne + jsl Ennemi_TriP3_F4 rtl +: cmp #4 bne + jsl Ennemi_TriP3_F5 rtl +: cmp #5 bne + jsl Ennemi_TriP3_F6 rtl +: cmp #6 bne + jsl Ennemi_TriP3_F7 rtl +: rtl ;------------------------------------------ Ennemi_TriP1_F1: Ennemi_Test_SC_P1 3 Ennemi_Test_SC_P1 4 Ennemi_Test_SC_P1 5 Ennemi_Test_SC_P1 6 Ennemi_Test_SC_P1 7 Ennemi_Test_SC_P1 8 Ennemi_Test_SC_P1 9 Ennemi_Test_SC_P1 10 rtl Ennemi_TriP1_F2: Ennemi_Test_SC_P1 11 Ennemi_Test_SC_P1 12 Ennemi_Test_SC_P1 13 Ennemi_Test_SC_P1 14 Ennemi_Test_SC_P1 15 Ennemi_Test_SC_P1 16 Ennemi_Test_SC_P1 17 Ennemi_Test_SC_P1 18 Ennemi_Test_SC_P1 19 Ennemi_Test_SC_P1 20 rtl Ennemi_TriP1_F3: Ennemi_Test_SC_P1 21 Ennemi_Test_SC_P1 22 Ennemi_Test_SC_P1 23 Ennemi_Test_SC_P1 24 Ennemi_Test_SC_P1 25 Ennemi_Test_SC_P1 26 Ennemi_Test_SC_P1 27 Ennemi_Test_SC_P1 28 Ennemi_Test_SC_P1 29 Ennemi_Test_SC_P1 30 rtl Ennemi_TriP1_F4: Ennemi_Test_SC_P1 31 Ennemi_Test_SC_P1 32 Ennemi_Test_SC_P1 33 Ennemi_Test_SC_P1 34 Ennemi_Test_SC_P1 35 Ennemi_Test_SC_P1 36 Ennemi_Test_SC_P1 37 Ennemi_Test_SC_P1 38 Ennemi_Test_SC_P1 39 Ennemi_Test_SC_P1 40 rtl Ennemi_TriP1_F5: Ennemi_Test_SC_P1 41 Ennemi_Test_SC_P1 42 Ennemi_Test_SC_P1 43 Ennemi_Test_SC_P1 44 Ennemi_Test_SC_P1 45 Ennemi_Test_SC_P1 46 Ennemi_Test_SC_P1 47 Ennemi_Test_SC_P1 48 Ennemi_Test_SC_P1 49 Ennemi_Test_SC_P1 50 rtl Ennemi_TriP1_F6: Ennemi_Test_SC_P1 51 Ennemi_Test_SC_P1 52 Ennemi_Test_SC_P1 53 Ennemi_Test_SC_P1 54 Ennemi_Test_SC_P1 55 Ennemi_Test_SC_P1 56 Ennemi_Test_SC_P1 57 Ennemi_Test_SC_P1 58 Ennemi_Test_SC_P1 59 Ennemi_Test_SC_P1 60 rtl Ennemi_TriP1_F7: Ennemi_Test_SC_P1 61 Ennemi_Test_SC_P1 62 Ennemi_Test_SC_P1 63 rtl ;------------------------------------------ Ennemi_TriP2_F1: Ennemi_Test_SC_P2 3 Ennemi_Test_SC_P2 4 Ennemi_Test_SC_P2 5 Ennemi_Test_SC_P2 6 Ennemi_Test_SC_P2 7 Ennemi_Test_SC_P2 8 Ennemi_Test_SC_P2 9 Ennemi_Test_SC_P2 10 rtl Ennemi_TriP2_F2: Ennemi_Test_SC_P2 11 Ennemi_Test_SC_P2 12 Ennemi_Test_SC_P2 13 Ennemi_Test_SC_P2 14 Ennemi_Test_SC_P2 15 Ennemi_Test_SC_P2 16 Ennemi_Test_SC_P2 17 Ennemi_Test_SC_P2 18 Ennemi_Test_SC_P2 19 Ennemi_Test_SC_P2 20 rtl Ennemi_TriP2_F3: Ennemi_Test_SC_P2 21 Ennemi_Test_SC_P2 22 Ennemi_Test_SC_P2 23 Ennemi_Test_SC_P2 24 Ennemi_Test_SC_P2 25 Ennemi_Test_SC_P2 26 Ennemi_Test_SC_P2 27 Ennemi_Test_SC_P2 28 Ennemi_Test_SC_P2 29 Ennemi_Test_SC_P2 30 rtl Ennemi_TriP2_F4: Ennemi_Test_SC_P2 31 Ennemi_Test_SC_P2 32 Ennemi_Test_SC_P2 33 Ennemi_Test_SC_P2 34 Ennemi_Test_SC_P2 35 Ennemi_Test_SC_P2 36 Ennemi_Test_SC_P2 37 Ennemi_Test_SC_P2 38 Ennemi_Test_SC_P2 39 Ennemi_Test_SC_P2 40 rtl Ennemi_TriP2_F5: Ennemi_Test_SC_P2 41 Ennemi_Test_SC_P2 42 Ennemi_Test_SC_P2 43 Ennemi_Test_SC_P2 44 Ennemi_Test_SC_P2 45 Ennemi_Test_SC_P2 46 Ennemi_Test_SC_P2 47 Ennemi_Test_SC_P2 48 Ennemi_Test_SC_P2 49 Ennemi_Test_SC_P2 50 rtl Ennemi_TriP2_F6: Ennemi_Test_SC_P2 51 Ennemi_Test_SC_P2 52 Ennemi_Test_SC_P2 53 Ennemi_Test_SC_P2 54 Ennemi_Test_SC_P2 55 Ennemi_Test_SC_P2 56 Ennemi_Test_SC_P2 57 Ennemi_Test_SC_P2 58 Ennemi_Test_SC_P2 59 Ennemi_Test_SC_P2 60 rtl Ennemi_TriP2_F7: Ennemi_Test_SC_P2 61 Ennemi_Test_SC_P2 62 Ennemi_Test_SC_P2 63 rtl ;------------------------------------------ Ennemi_TriP3_F1: Ennemi_Test_SC_P3 3 Ennemi_Test_SC_P3 4 Ennemi_Test_SC_P3 5 Ennemi_Test_SC_P3 6 Ennemi_Test_SC_P3 7 Ennemi_Test_SC_P3 8 Ennemi_Test_SC_P3 9 Ennemi_Test_SC_P3 10 rtl Ennemi_TriP3_F2: Ennemi_Test_SC_P3 11 Ennemi_Test_SC_P3 12 Ennemi_Test_SC_P3 13 Ennemi_Test_SC_P3 14 Ennemi_Test_SC_P3 15 Ennemi_Test_SC_P3 16 Ennemi_Test_SC_P3 17 Ennemi_Test_SC_P3 18 Ennemi_Test_SC_P3 19 Ennemi_Test_SC_P3 20 rtl Ennemi_TriP3_F3: Ennemi_Test_SC_P3 21 Ennemi_Test_SC_P3 22 Ennemi_Test_SC_P3 23 Ennemi_Test_SC_P3 24 Ennemi_Test_SC_P3 25 Ennemi_Test_SC_P3 26 Ennemi_Test_SC_P3 27 Ennemi_Test_SC_P3 28 Ennemi_Test_SC_P3 29 Ennemi_Test_SC_P3 30 rtl Ennemi_TriP3_F4: Ennemi_Test_SC_P3 31 Ennemi_Test_SC_P3 32 Ennemi_Test_SC_P3 33 Ennemi_Test_SC_P3 34 Ennemi_Test_SC_P3 35 Ennemi_Test_SC_P3 36 Ennemi_Test_SC_P3 37 Ennemi_Test_SC_P3 38 Ennemi_Test_SC_P3 39 Ennemi_Test_SC_P3 40 rtl Ennemi_TriP3_F5: Ennemi_Test_SC_P3 41 Ennemi_Test_SC_P3 42 Ennemi_Test_SC_P3 43 Ennemi_Test_SC_P3 44 Ennemi_Test_SC_P3 45 Ennemi_Test_SC_P3 46 Ennemi_Test_SC_P3 47 Ennemi_Test_SC_P3 48 Ennemi_Test_SC_P3 49 Ennemi_Test_SC_P3 50 rtl Ennemi_TriP3_F6: Ennemi_Test_SC_P3 51 Ennemi_Test_SC_P3 52 Ennemi_Test_SC_P3 53 Ennemi_Test_SC_P3 54 Ennemi_Test_SC_P3 55 Ennemi_Test_SC_P3 56 Ennemi_Test_SC_P3 57 Ennemi_Test_SC_P3 58 Ennemi_Test_SC_P3 59 Ennemi_Test_SC_P3 60 rtl Ennemi_TriP3_F7: Ennemi_Test_SC_P3 61 Ennemi_Test_SC_P3 62 Ennemi_Test_SC_P3 63 rtl
Grosso modo ce bordel , quand l'ennemi est hors de l'écran je regarde si y'a un autre ennemi disponible (qui sois hors de l'écran mais proche) , mais pas a l'intérieur de l'écran (il doit pas apparaitre en plein milieux xD).
Tout ça divisé en 8 frame (pour des soucis de performance) avec 3 ennemi on est a 50% quand même , et ça monte vite si on ne fait pas gaffe.
(Sinon oui la 'limite' étant de 3 ennemis affichable a l'écran).
Et bien sur le rajout d'un nouvel ennemi (un 48x48) , c'est vachement gros pour la SNES (surtout quand tu on a 3) je voulais optimiser leur affichage , mais apres j'ai laissé tombé et j'ai utilisé ma jolie fonction généraliste (mais qui boiuffe un peu en CPU) du coup un 48x48 me faut 6 sprite pour l'afficher : 1 de 32x32 et 5 de 16x16.
Et voici une Vidéo :
Jouable en ligne ici : http://pixelretro.hebergratuit.net/NesBox/snes.html
Que me reste t'il ?
Le plus gros :
-le son/music a finir
-La compression/decompression des Maps.
Apres reste plein de petit détailt mais je ne pense pas qu'il me posseront probleme maintenant
Pour info j'utilise quasiment la totalité de la ram (128 ko) , sachant que je compte utiliser la RAM comme buffer pour les map , donc on a 96ko pour 2BG + collision , 8ko pour divers buffers.
8ko pour la jeu ( 4 ko utilisé pour les ennemis sachant que un ennemi me prend 64 octets et j'en ai 64 donc 64x64 = 4096 octets).
Dépêche toi de terminer pour nous sortir un seiken densetsu 4!
PXL le retro-gaming facile: Essayez-le
Yildiz-Engine an open-source modular game engine: Website
Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page
Pourquoi faire ça sur une super nintendo , c une erreur énorme , pourquoi pas faire ça dans un navigateur internet .
ça sera beaucoup plus jolie et surtout plus facile pour suivre l'avancement du jeux... et même plus facile car les frameworks js pour faire des jeux dans ce style sont nombreux....
C'est marrant comme c'est complètement hors de propos...
Si vous ne trouvez plus rien, cherchez autre chose...
Vous trouverez ici des tutoriels OpenGL moderne.
Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).
C'est intentionnel de garder le CPU en dessous de 50 % ? Genre, pour garder de la marge pour le son ?
À la place de faire la boucle de 64 éléments, que faites vous ? (j'ai du mal à lire l'assembleur ).
Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi
Ma page sur DVP
Mon Portfolio
Qui connaît l'erreur, connaît la solution.
Ben parce que j'aime bien la Super Nintendo , y'a pas d'autre raison que celle la
La facilité n'a jamais était chez moi un argument pour choisir tel ou tel lib/frameworks/moteur.
Secondo je suis pas prog en JS , mais si je programme sur PC je choisi en général le C ou C++ et effectivement on peut sortir des contraintes techniques de la SNES
Sinon le jeu existe deja sous navigateur ici : http://pixelretro.hebergratuit.net/NesBox/snes.html
Oui et non , la marge sera pour l'IA et le reste.C'est intentionnel de garder le CPU en dessous de 50 % ? Genre, pour garder de la marge pour le son ?
À la place de faire la boucle de 64 éléments, que faites vous ? (j'ai du mal à lire l'assembleur ).
Le son ne consomme rien en CPU , parce que c'est le SPC700 qui s'en occupe (il se programme comme un 6502 mais avec une syntaxe proche du x86 c'est zarb mais bon...).
En faite j'affiche tjs 3 ennemis (que j'ai pas posté le code source) ça donne ça :
Enfin sauf s'ils sont hors de l'écran il y'a un return dans la fonction Personnage , le code bordel que j'ai posté en gros cherche une adresse valide (dans le sens un ennemi disponible).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 Mode_battle: lda s_map+_mode cmp #1 beq + rts +: stz MEM_OAM+_nperso2 ldx #0 stx s_ia ldx #$20*3 stx MEM_TEMPFUNC+2 ldx s_ennemi+_enP1 ;n'id perso jsr IA_Ennemy jsr Collision_perso phx ldx #$600 ;port DMA dst stx MEM_TEMPFUNC+6 plx jsr Personnage jsr Degat_test ldx #$20*4 stx MEM_TEMPFUNC+2 ldx s_ennemi+_enP2 ;n'id perso jsr IA_Ennemy jsr Collision_perso phx ldx #$880 ;port DMA dst stx MEM_TEMPFUNC+6 plx jsr Personnage jsr Degat_test ldx #$20*5 stx MEM_TEMPFUNC+2 ldx s_ennemi+_enP3 ;n'id perso jsr IA_Ennemy jsr Collision_perso phx ldx #$C00 ;port DMA dst stx MEM_TEMPFUNC+6 plx jsr Personnage jsr Degat_test jsl Ennemi_Tri rts
donc en gros je cherche une valeur pour mes variables : s_ennemi+_enP1,s_ennemi+_enP2,s_ennemi+_enP3 , qui indique la bonne adresse du perso.
Mais quand on change de perso je dois aussi uploader la nouvelle palette.
Bref le but était tout simplement de dire que pour faire apparaître plein de personnage c'est loin d’être trivial.
ça sera dur de faire mieux que les précédents mais je promet que le jeu sera assez original
Dépêche toi de terminer pour nous sortir un seiken densetsu 4!
Il y a pas de framework, pour transformer en JS le code supernintendo ???
Le p'tit plaisir de Kannagi c'est les vieilles machines et les pousser dans leur dernier retranchement.
C'est plus un défi technique que d'apporter du nouveau dans le monde du jeu amateur et il le fait plutôt bien.
Peut être que quelqu'un me dira le contraire mais mixer du son dans un navigateur est impossible. C'est ce qui m'a fait oublier la programmation JS pour mes p'tit jeux... sans son pour le moment
Si vous ne trouvez plus rien, cherchez autre chose...
Vous trouverez ici des tutoriels OpenGL moderne.
Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).
@jwar0
Pour JS il me semble qu'on peut faire jouer du midi ? (après je n'en sais rien mais je crois que c'est ce qu'on m'a dit).
Sinon merci pour vos réponses pour le JS/code super nintendo , je sais pas quoi répondre , c'est limite un troll (mais sans débat ).
"le code super nintendo" n'existe pas , c'est de l'assembleur (ici le 65816) qui existe sur super nintendo mais aussi sur Apple II , il fait partie de la famille des 6502 et la ça tape plus loin Nes , PC Engine , Atari 2600 , Commodore 64 ect
C'est pas le processeur le plus fiable de son époque mais il avait l'avantage d’être très bon marché comparé a ces concurrents.
Et ensuite il n'y a deja pas une bijection entre asm et le C alors t'imagine bien en JS
Enfin celui qui arriverait a cet exploit cela voudrait dire que avec les binaires windows il pourrait avoir le code JS , je serais curieux de voir ça
Fin de la parenthèse.
Bon j'ai quelque news :
NesBox : http://pixelretro.hebergratuit.net/NesBox/snes.html
rom : http://www.mediafire.com/file/9ton5dtzs562fb6/main.smc
Je ne garantie pas que sur NesBox que le son soit bien restitué
Le bouton start pour jouer une musique.
Le bouton select pour la pause.
Le bouton Y pour remettre a zéro la musique (un loop quoi).
Pour cela j'ai du créer un convertisseur MIDI/SNES , et ensuite j'ai coder le SPC700 pour qu'il lit une partition + les entrer/sortie , bref un driver sonore quoi
Normalement si on utilise les 8 canaux + les bon sample + les bonnes modulations , on peut espérer jouer de bonne musique , mais comme vous pouvez l'imaginer le midi ne m'offre que les partitions , les samples + la modulations du son , c'est moi qui devrait le faire (ou trouver un bon compositeur/musicien qui s'en occupe).
D'un point de vue prog je gère tout cela la modulation du son , les transferts des samples/partition sur le SPC700 et quelque autre petit effets.
La version de mon Driver est à sa version 0.7 (0.8 quand jouer un son sera complètement terminé) , 0.9 quand on pourrait 'additionner' différent modulation ,la version 1.0 je sais pas quand mon driver aura était testé et approuvé
Le SPC700 est limité a 64ko voici comment je l'ai répartie:
PRG : 0x0200 -0x16FF
SampleDIR : 0x1700 - 0x1AFF
track : 0x1B00 - 0x3FFF
Sample : 0x4000 - 0xFDFF
RAM : 0xFE00 - 0xFFBF
Donc mon driver fait donc 5ko , le reste faudra faire des transfert ROM/SPC700 (qu'on doit soi même coder).
En terme de transfert , 2 octet me prend 1% CPU donc c'est pas le truc quand s'amuse a envoyer en temps réel
Bravo!
Et moi qui me plains de l'implémentation d'OpenSLES sur beaucoup d'appareils Android ... Au moins j'ai pas à l'implémenter moi-même :p
Et j'avais jamais testé jusque là, et je suis bluffé par l'effet de transparence derrière la cascade
Merci
C'est sur que de nos jours si y'a un truc qui a bien disparu c'est bien la programmation sonore
Une API en C avec la puissance des CPU et la taille de la RAM , ce n'est pas comparable avec mes 64ko et le processeur sonore cadencé a 2mhz
Je l'ai pas dit mais les 64 ko du SPC700 sont départagé en PRG/DATA/RAM/ I/O la joie
La transparence ça donne un jolie effet j'avoue mais c'est super contraignant a utiliser, du coup il est clair que pour un jeu en entier je ne l'utiliserai pas systématiquement.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager