mirror of
https://github.com/ondra-novak/gates_of_skeldal.git
synced 2025-07-15 10:46:44 -04:00
fix manabatery, fix timer clock skew, check queue when mouse move, wasd control
This commit is contained in:
parent
05a2803b2b
commit
56cac26206
17 changed files with 102 additions and 60 deletions
|
@ -653,12 +653,18 @@ void map_keyboard(EVENT_MSG *msg,void **usr)
|
|||
c=d>>8;
|
||||
switch (c)
|
||||
{
|
||||
case 'H':yr++;break;
|
||||
case 'P':yr--;break;
|
||||
case 'M':xr--;break;
|
||||
case 'K':xr++;break;
|
||||
case 17:
|
||||
case 'H':yr--;break;
|
||||
case 31:
|
||||
case 'P':yr++;break;
|
||||
case 32:
|
||||
case 'M':xr++;break;
|
||||
case 30:
|
||||
case 'K':xr--;break;
|
||||
case 16:
|
||||
case 'Q':
|
||||
case 's':if (check_for_layer(cur_depth-1)) cur_depth--;break;
|
||||
case 18:
|
||||
case 'I':
|
||||
case 't':if (check_for_layer(cur_depth+1)) cur_depth++;break;
|
||||
case 15:
|
||||
|
|
|
@ -1261,8 +1261,6 @@ void render_scene(int sector, int smer)
|
|||
draw_spectxtrs(s,-j,i);
|
||||
}
|
||||
}
|
||||
do_events();
|
||||
if (cancel_render) return;
|
||||
}
|
||||
calc_spectxtrs();
|
||||
if (lodka) {
|
||||
|
|
|
@ -2185,10 +2185,10 @@ static void knock_mob_back(TMOB *mm,int dir)
|
|||
if (itnum == 0) return;
|
||||
const TITEM *it = glob_items + itnum-1;
|
||||
if (it->druh != TYP_UTOC) return;
|
||||
int vls[] = {VLS_MGSIL_H,VLS_MGSIL_L,VLS_UTOK_H,VLS_UTOK_L,VLS_DAMAGE};
|
||||
int vls[] = {VLS_UTOK_H,VLS_UTOK_L,VLS_DAMAGE};
|
||||
for (size_t i = 0; i < countof(vls); ++i) {
|
||||
vlastnosti[vls[i]] -= it->zmeny[vls[i]];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -473,7 +473,6 @@ static void zooming_forward_backward(const word *background,char back)
|
|||
//phase=(float)sin(3.14159265*0.5f*phase);
|
||||
if (back) phase=-phase;
|
||||
DxZoomWalk(buffer, SCREEN_OFFLINE, tpoints,phase, NULL);
|
||||
do_events();
|
||||
}
|
||||
while (curtime<maxtime);
|
||||
DxDoneWalk(buffer);
|
||||
|
@ -536,8 +535,7 @@ static void turn_left_right(char right)
|
|||
curtime=get_timer_value()-tmp;
|
||||
phase=(curtime)*(1.0f/(float)maxtime);
|
||||
//phase=(float)sin(3.14159265*0.5f*phase);
|
||||
DxTurn(buffer,SCREEN_OFFLINE,90,right?-phase:phase,NULL);
|
||||
do_events();
|
||||
DxTurn(buffer,SCREEN_OFFLINE,90,right?-phase:phase,NULL);
|
||||
}
|
||||
while (curtime<maxtime);
|
||||
DxDoneTurn(buffer);
|
||||
|
|
|
@ -207,16 +207,30 @@ void restore_items(TMPFILE_RD *f)
|
|||
{
|
||||
int32_t i,j;
|
||||
|
||||
for(i=0;i<mapsize*4;i++) if (map_items[i]!=NULL) free(map_items[i]);
|
||||
memset(map_items,0,mapsize*4*sizeof(*map_items));
|
||||
while(temp_storage_read(&i,sizeof(i),f) && i!=-1)
|
||||
{
|
||||
short **new_item_map = getmem(mapsize*4*sizeof(*map_items));
|
||||
memset(new_item_map,0,mapsize*4*sizeof(*map_items));
|
||||
while(temp_storage_read(&i,sizeof(i),f) && i!=-1) {
|
||||
temp_storage_read(&j,sizeof(j),f);
|
||||
map_items[i]=(short *)getmem(j*2);
|
||||
temp_storage_read(map_items[i],2*j,f);
|
||||
new_item_map[i]=(short *)getmem(j*2);
|
||||
temp_storage_read(new_item_map[i],2*j,f);
|
||||
short *v = new_item_map[i];
|
||||
while (*v) { //sanitize map items
|
||||
if (*v < 1 || *v >= item_count) {
|
||||
free(new_item_map[i]);
|
||||
new_item_map[i] = map_items[i];
|
||||
map_items[i] = NULL;
|
||||
break;
|
||||
}
|
||||
++v;
|
||||
}
|
||||
}
|
||||
|
||||
for(i=0;i<mapsize*4;i++) if (map_items[i]!=NULL) free(map_items[i]);
|
||||
memset(map_items,0,mapsize*4*sizeof(*map_items));
|
||||
map_items = new_item_map;
|
||||
|
||||
}
|
||||
|
||||
extern TSTR_LIST texty_v_mape;
|
||||
|
||||
void save_map_description(TMPFILE_WR *f)
|
||||
|
|
|
@ -1911,12 +1911,10 @@ void cast(int num,THUMAN *p,int owner, char backfire)
|
|||
if (!backfire) p->mana-=k->mge;
|
||||
p->exp+=k->mge;
|
||||
check_player_new_level(p);
|
||||
if (p->mana>p->mana_battery)
|
||||
{
|
||||
if (p->mana_battery>=0)p->mana=p->mana_battery;
|
||||
else
|
||||
p->mana_battery=32767;
|
||||
}
|
||||
if (p->mana>p->mana_battery) {
|
||||
p->mana=p->mana_battery;
|
||||
}
|
||||
p->mana_battery=32767;
|
||||
end:
|
||||
GlobEvent(MAGLOB_AFTERMAGIC,p->sektor,p->direction);
|
||||
}
|
||||
|
|
|
@ -1920,8 +1920,14 @@ void game_keyboard(EVENT_MSG *msg,void **usr)
|
|||
while (_bios_keybrd(_KEYBRD_READY) ) _bios_keybrd(_KEYBRD_READ);
|
||||
switch (c >> 8)
|
||||
{
|
||||
case 17:
|
||||
case 'H':step_zoom(0);break;
|
||||
case 31:
|
||||
case 'P':step_zoom(2);break;
|
||||
case 30: step_zoom(3);break;
|
||||
case 32: step_zoom(1);break;
|
||||
case 16: turn_zoom(-1);break;
|
||||
case 18: turn_zoom(1);break;
|
||||
case 'M':if (get_control_key_state() & 0x80)
|
||||
step_zoom(1);
|
||||
else
|
||||
|
@ -1950,6 +1956,7 @@ void game_keyboard(EVENT_MSG *msg,void **usr)
|
|||
case 1:konec(0,0,0,0,0);break;
|
||||
// case 25:GamePause();break;
|
||||
case 28:enforce_start_battle();break;
|
||||
case 45:
|
||||
case 82:group_all();break;
|
||||
case '<':if (!battle && GlobEvent(MAGLOB_CLICKSAVE,viewsector,viewdir))
|
||||
{unwire_proc();cancel_render=1;do_save_dialog();wire_proc();}break;
|
||||
|
|
|
@ -440,9 +440,8 @@ void mouse_set_cursor(int cursor)
|
|||
{
|
||||
alock(cursor);
|
||||
schovej_mysku();
|
||||
register_ms_cursor(ablock(cursor));
|
||||
nastav_mysku_kurzor(ablock(cursor),0,0);
|
||||
last_ms_cursor=cursor;
|
||||
set_ms_finger(0,0);
|
||||
ukaz_mysku();
|
||||
}
|
||||
else
|
||||
|
@ -454,8 +453,8 @@ void mouse_set_cursor(int cursor)
|
|||
p=(char *)ablock(cursor/18+ikon_libs);
|
||||
memcpy(ms_item,&p[(cursor%18)*IT_ICONE_SIZE],IT_ICONE_SIZE);
|
||||
schovej_mysku();
|
||||
register_ms_cursor(ms_item);
|
||||
set_ms_finger(45/2,55/2);
|
||||
nastav_mysku_kurzor(ms_item,45/2,55/2);
|
||||
|
||||
last_ms_cursor=-cursor;
|
||||
ukaz_mysku();
|
||||
}
|
||||
|
@ -692,6 +691,7 @@ void user_timer(EVENT_MSG *msg,void **usr)
|
|||
x=get_timer_value();
|
||||
x-=lastvalue;
|
||||
lastvalue+=x;
|
||||
x = MIN(TIMERSPEED, x); //prevent clock skew
|
||||
if (x) send_message(E_TIMER,x);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1183,10 +1183,11 @@ void pouzij_zbran(THUMAN *p,int ruka)
|
|||
}
|
||||
vybrana_zbran=itm;
|
||||
bonus=vypocti_bonus(p,itm);
|
||||
if (itm>0)
|
||||
if (itm>0) {
|
||||
memcpy(&p->vlastnosti[VLS_MGSIL_L],&glob_items[itm-1].zmeny[VLS_MGSIL_L],3*sizeof(short));
|
||||
else
|
||||
} else {
|
||||
memset(&p->vlastnosti[VLS_MGSIL_L],0,3*sizeof(short));
|
||||
}
|
||||
if (!itm || (it=&glob_items[itm-1])->druh==TYP_UTOC)
|
||||
{
|
||||
TMOB *m;int mm,chaos;
|
||||
|
@ -1304,7 +1305,7 @@ void jadro_souboje(EVENT_MSG *msg,void **unused) //!!!! Jadro souboje
|
|||
if(nxt==-255)
|
||||
{
|
||||
int i;
|
||||
SEND_LOG("(BATTLE) Ending round...(nxt=%d,mob=%s)",nxt,mobs[nxt].name);
|
||||
// SEND_LOG("(BATTLE) Ending round...(nxt=%d,mob=%s)",nxt,mobs[nxt].name);
|
||||
delete_from_timer(TM_SCENE);
|
||||
add_to_timer(TM_SCENE,gamespeed,-1,refresh_scene);
|
||||
for(i=0;i<MAX_MOBS;i++)
|
||||
|
@ -2133,12 +2134,17 @@ void programming_keyboard(EVENT_MSG *msg,void **unused)
|
|||
switch (c)
|
||||
{
|
||||
case 1:konec(0,0,0,0,0);break;
|
||||
case 18:
|
||||
case 'M':souboje_turn(1);break;
|
||||
case 16:
|
||||
case 'K':souboje_turn(-1);break;
|
||||
case '=':unwire_proc();cancel_render=1;wire_save_load(0);break;
|
||||
case '>':game_setup(0,0,0,0,0);break;
|
||||
case 57:souboje_dalsi();bott_draw(1);break;
|
||||
case 15:
|
||||
case 28:zahajit_kolo(0);
|
||||
souboje_stisknout(AC_START);
|
||||
break;
|
||||
case 50:
|
||||
if (GlobEvent(MAGLOB_BEFOREMAPOPEN,viewsector,viewdir))
|
||||
show_automap(1);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue