ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
sprite_at.c
Go to the documentation of this file.
1/*****************************************************************************
2 * ugBASIC - an isomorphic BASIC language compiler for retrocomputers *
3 *****************************************************************************
4 * Copyright 2021-2026 Marco Spedaletti (asimov@mclink.it)
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *----------------------------------------------------------------------------
18 * Concesso in licenza secondo i termini della Licenza Apache, versione 2.0
19 * (la "Licenza"); è proibito usare questo file se non in conformità alla
20 * Licenza. Una copia della Licenza è disponibile all'indirizzo:
21 *
22 * http://www.apache.org/licenses/LICENSE-2.0
23 *
24 * Se non richiesto dalla legislazione vigente o concordato per iscritto,
25 * il software distribuito nei termini della Licenza è distribuito
26 * "COSÌ COM'È", SENZA GARANZIE O CONDIZIONI DI ALCUN TIPO, esplicite o
27 * implicite. Consultare la Licenza per il testo specifico che regola le
28 * autorizzazioni e le limitazioni previste dalla medesima.
29 ****************************************************************************/
30
31/****************************************************************************
32 * INCLUDE SECTION
33 ****************************************************************************/
34
35#include "../../../ugbc.h"
36
37/****************************************************************************
38 * CODE SECTION
39 ****************************************************************************/
40
41#if defined(__c64__) || defined(__c64reu__) || defined(__c128__)
42
55/* <usermanual>
56@keyword SPRITE AT (command)
57
58@english
59
60With the ''SPRITE AT'' action you can indicate the position where the sprite will
61be placed. The positioning will happen instantly, and the sprite will be drawn in
62that position as soon as the video raster line reaches that position. Note that the
63position is indicated in sprites coordinates, and not in pixels: it follows that it
64is necessary to carry out the appropriate proportions using the constants (percentiles)
65''SCREEN SPRITE RATIO X'' and ''SCREEN SPRITE RATIO Y''.
66
67Additionally, the video screen may have a border around the area actually accessible
68to the graphics chipset: as a result, a hardware sprite positioned with a coordinate
69that falls within the border may not be visible. To remedy this problem, and ensure
70that the sprite is visible, it is necessary to start from the positions induced
71by the ''SCREEN BORDER X'' and ''SCREEN BORDER Y'' coordinates.
72
73Finally, please note that the keyword to use is only ''AT'', which must therefore be
74prefixed by the ''SPRITE'' keyword and the sprite index. It is possible to
75juxtapose multiple ''AT'' instructions but, obviously, the processor speed is such
76that only the last one that counts will be the one that counts.
77
78@italian
79
80Con il comando ''SPRITE AT'' si può indicare la posizione a cui andrà posizionato
81lo sprite. Il posizionamento avverrà istantaneamente, e lo sprite sarà disegnato
82in quella posizione non appena la linea del raster video raggiungerà quella posizione.
83Da notare che la posizione è indicata in coordinate sprites, e non in pixel: ne
84consegue che è necessario svolgere le opportune proporzioni usando le costanti
85(percentili) ''SCREEN SPRITE RATIO X'' e ''SCREEN SPRITE RATIO Y''.
86
87Inoltre, lo schermo video potrebbe avere un bordo intorno alla zona effettivamente
88accessibile al chipset grafico: ne consegue che uno sprite hardware posizionato
89con una coordinata che ricada nel bordo potrebbe non essere visibile. Per rimediare
90al problema, ed essere sicuri che lo sprite sia visibile, è necessario partire
91dalle posizioni indotte dalle coordinate SCREEN BORDER X e SCREEN BORDER Y.
92
93Infine, si fa presente che la parola chiave da usare è solo ''AT'', che andrà quindi
94fatta precedere alla parola chiave ''SPRITE'' e all'indice dello sprite.
95
96E' possibile giustapporre più istruzioni ''AT'' ma, ovviamente, la velocità
97del processore è tale per cui l'unica che conta sarà l'ultima.
98
99@syntax SPRITE index AT (x1, y1) [command [command ...]]
100
101@example SPRITE #1 AT ( #100, #100 )
102
103@seeAlso SPRITE (function)
104@seeAlso SPRITE
105
106@target c64
107@target c64reu
108@target c128
109@target msx1
110@target coleco
111@target sc3000
112@target sg1000
113</usermanual> */
114void sprite_at( Environment * _environment, int _sprite, int _x, int _y ) {
115
116}
117
130void sprite_at_vars( Environment * _environment, char * _sprite, char * _x, char * _y ) {
131
132 vic2_sprite_at( _environment, _sprite, _x, _y );
133
134}
135
136#endif
void sprite_at_vars(Environment *_environment, char *_sprite, char *_x, char *_y)
Emit ASM code for SPRITE [expression] AT ([expression],[expression]).
Definition sprite_at.c:71
void sprite_at(Environment *_environment, int _sprite, int _x, int _y)
Emit ASM code for SPRITE [int] AT ([int],[int]).
Definition sprite_at.c:53
struct _Environment Environment
Structure of compilation environment.
void vic2_sprite_at(Environment *_environment, char *_sprite, char *_x, char *_y)
Definition vic2.c:1663