1 #include <stdio.h>
2 
3 #include "portab.h"
4 #include "system.h"
5 #include "cg.h"
6 #include "ags.h"
7 #include "surface.h"
8 #include "ngraph.h"
9 #include "night.h"
10 #include "sprite.h"
11 #include "nt_scenario.h"
12 #include "sactcg.h"
13 
14 // �ɻ楹�ץ饤��ɽ������
15 #define WALL_LOC_X 0
16 #define WALL_LOC_Y 0
17 // ���ʥ��ץ饤��ɽ������
18 #define SCENERY_LOC_X 0
19 #define SCENERY_LOC_Y 64
20 // �饹�ץ饤��ɽ������
21 #define FACE_LOC_X 6
22 #define FACE_LOC_Y 272
23 // Ω���������ץ饤��ɽ������
24 #define TACHI_L_LOC_X 0
25 #define TACHI_L_LOC_Y 0
26 // Ω����������ץ饤�Ȱ���
27 #define TACHI_M_LOC_X 160
28 #define TACHI_M_LOC_Y 0
29 // Ω���������ץ饤�Ȱ���
30 #define TACHI_R_LOC_X 360
31 #define TACHI_R_LOC_Y 0
32 
33 static int effecttime;
34 
nt_gr_init()35 void nt_gr_init() {
36 }
37 
nt_gr_set_wallpaper(int no)38 void nt_gr_set_wallpaper(int no) {
39 	sprite_t *sp = night.sp[SPNO_WALL];
40 
41 	if (sp) {
42 		sp_remove_updatelist(sp);
43 		sp_free(sp);
44 	}
45 
46 	if (no == 1013 && nt_sco_is_natsu()) {
47 		no = 1011;
48 	}
49 
50 	if (no == 1014 && nt_sco_is_natsu()) {
51 		no = 1012;
52 	}
53 
54 	sp = sp_new(SPNO_WALL, no, 0, 0, SPRITE_WP);
55 	sp_add_updatelist(sp);
56 	if (no == 0) {
57 		sp->cursize.width  = sf0->width;
58 		sp->cursize.height = sf0->height;
59 		sp->update = sp_draw_wall;
60 	}
61 
62 	night.sp[SPNO_WALL] = sp;
63 }
64 
nt_gr_set_scenery(int no)65 void nt_gr_set_scenery(int no) {
66 	sprite_t *sp = night.sp[SPNO_SCENERY];
67 
68 	if (sp) {
69 		sp_remove_updatelist(sp);
70 		sp_free(sp);
71 		sp = NULL;
72 	}
73 
74 	if (no) {
75 		sp = sp_new(SPNO_SCENERY, no, 0, 0, SPRITE_NORMAL);
76 		sp_add_updatelist(sp);
77 		sp_set_loc(sp, SCENERY_LOC_X, SCENERY_LOC_Y);
78 	}
79 
80 	night.sp[SPNO_SCENERY] = sp;
81 }
82 
nt_gr_set_face(int no)83 void nt_gr_set_face(int no) {
84 	sprite_t *sp = night.sp[SPNO_FACE];
85 
86 	if (sp) {
87 		sp_remove_updatelist(sp);
88 		sp_free(sp);
89 		sp = NULL;
90 	}
91 	if (no) {
92 		sp = sp_new(SPNO_FACE, no, 0, 0, SPRITE_NORMAL);
93 		sp_add_updatelist(sp);
94 		sp_set_loc(sp, FACE_LOC_X, FACE_LOC_Y);
95 		night.msgplace = 2;
96 	} else {
97 		night.msgplace = 0;
98 	}
99 	night.sp[SPNO_FACE] = sp;
100 }
101 
nt_gr_set_spL(int no)102 void nt_gr_set_spL(int no) {
103 	sprite_t *sp = night.sp[SPNO_TACHI_L];
104 
105 	if (sp) {
106 		sp_remove_updatelist(sp);
107 		sp_free(sp);
108 		sp = NULL;
109 	}
110 	if (no) {
111 		sp = sp_new(SPNO_TACHI_L, no, 0, 0, SPRITE_NORMAL);
112 		sp_add_updatelist(sp);
113 		sp_set_loc(sp, TACHI_L_LOC_X, TACHI_L_LOC_Y);
114 	}
115 	night.sp[SPNO_TACHI_L] = sp;
116 }
117 
nt_gr_set_spM(int no)118 void nt_gr_set_spM(int no) {
119 	sprite_t *sp = night.sp[SPNO_TACHI_M];
120 
121 	if (sp) {
122 		sp_remove_updatelist(sp);
123 		sp_free(sp);
124 		sp = NULL;
125 	}
126 	if (no) {
127 		sp = sp_new(SPNO_TACHI_M, no, 0, 0, SPRITE_NORMAL);
128 		sp_add_updatelist(sp);
129 		sp_set_loc(sp, TACHI_M_LOC_X, TACHI_M_LOC_Y);
130 	}
131 	night.sp[SPNO_TACHI_M] = sp;
132 }
133 
nt_gr_set_spR(int no)134 void nt_gr_set_spR(int no) {
135 	sprite_t *sp = night.sp[SPNO_TACHI_R];
136 
137 	if (sp) {
138 		sp_remove_updatelist(sp);
139 		sp_free(sp);
140 		sp = NULL;
141 	}
142 	if (no) {
143 		sp = sp_new(SPNO_TACHI_R, no, 0, 0, SPRITE_NORMAL);
144 		sp_add_updatelist(sp);
145 		sp_set_loc(sp, TACHI_R_LOC_X, TACHI_R_LOC_Y);
146 	}
147 	night.sp[SPNO_TACHI_R] = sp;
148 }
149 
nt_gr_set_spsL(int no)150 void nt_gr_set_spsL(int no) {
151 	if (no) {
152 		if (nt_sco_is_natsu()) no++;
153 	}
154 	nt_gr_set_spL(no);
155 }
156 
nt_gr_set_spsM(int no)157 void nt_gr_set_spsM(int no) {
158 	if (no) {
159 		if (nt_sco_is_natsu()) no++;
160 	}
161 	nt_gr_set_spM(no);
162 }
163 
nt_gr_set_spsR(int no)164 void nt_gr_set_spsR(int no) {
165 	if (no) {
166 		if (nt_sco_is_natsu()) no++;
167 	}
168 	nt_gr_set_spR(no);
169 }
170 
nt_gr_set_drawtime(int msec)171 void nt_gr_set_drawtime(int msec) {
172 	effecttime = msec;
173 }
174 
nt_gr_draw(int effectno)175 void nt_gr_draw(int effectno) {
176 	switch(effectno) {
177 	case 0:
178 		// ���ä�
179 		break;
180 	case 1:
181 		sp_update_all(TRUE);
182 		break;
183 	default:
184 		if (night.waitskiplv > 1) {
185 			sp_update_all(TRUE);
186 			break;
187 		}
188 		//sp_eupdate(effectno, effecttime, TRUE);
189 		sp_eupdate(effectno, 1000, TRUE);
190 	}
191 }
192 
nt_gr_screencg(int no,int x,int y)193 void nt_gr_screencg(int no, int x, int y) {
194 	surface_t *sf;
195 
196 	ags_sync();
197 
198 	sf = sf_loadcg_no(no -1);
199 
200 	gre_BlendScreen(sf0, x, y, sf0, x, y, sf, 0, 0, sf->width, sf->height);
201 
202 	ags_updateArea(x, y, sf->width, sf->height);
203 
204 	sf_free(sf);
205 }
206 
207 
208