Changeset 124 for abuse/trunk/src/chars.cpp
- Timestamp:
- Mar 18, 2008, 9:36:56 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
abuse/trunk/src/chars.cpp
r123 r124 42 42 }; 43 43 44 /* 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 44 /* "start_still_jump","still_jump","still_jump_fall","end_still_jump", 45 46 "morph_pose", 47 48 "walking", 49 50 51 "weapon_draw", 52 "weapon_put_away", 53 "weapon_fire", 54 "weapon_end_fire", 55 "weapon_fire_up", 56 "weapon_end_fire_up", 57 58 "blocking", 59 "block_recoil", 60 61 "turn_around", 62 "flinch_up","flinch_down","flinch_back", 63 "flinch_air","flinch_ground","flinch_getup","woze", 64 "stance" 65 } ; */ 66 66 67 67 … … 104 104 } 105 105 num=lnumber_value(val); 106 } else 106 } else 107 107 { 108 108 num=ts; … … 118 118 lprint(symbol); 119 119 lbreak("symbol has been assigned value %d, but value already in use by state %s\n" 120 121 120 "use a different symbol for this state\n", 121 lstring_value(symbol_name(seq_syms[num]))); 122 122 exit(0); 123 123 } else if (num>=ts) 124 124 { 125 seq=(sequence **)jrealloc(seq,sizeof(sequence *)*(num+1),"state list"); 126 seq_syms=(void **)jrealloc(seq_syms,sizeof(void *)*(num+1),"state sym list"); 125 seq=(sequence **)jrealloc(seq,sizeof(sequence *)*(num+1),"state list"); 126 seq_syms=(void **)jrealloc(seq_syms,sizeof(void *)*(num+1),"state sym list"); 127 127 128 128 memset(&seq[ts],0,sizeof(sequence *)*((num+1)-ts)); … … 162 162 if (seq[which]) 163 163 delete seq[which]; 164 seq[which]=new_seq; 165 } 164 seq[which]=new_seq; 165 } 166 166 167 167 void *l_obj_get(long number) // exten lisp function switches on number … … 173 173 return 0; 174 174 } 175 return new_lisp_number(current_object->lvars[t->var_index[number]]); 175 return new_lisp_number(current_object->lvars[t->var_index[number]]); 176 176 } 177 177 … … 195 195 return; 196 196 } 197 dprintf("%d",current_object->lvars[t->var_index[number]]); 197 dprintf("%d",current_object->lvars[t->var_index[number]]); 198 198 } 199 199 … … 214 214 { 215 215 if (vars[index]) 216 { 217 218 219 220 221 222 223 224 225 226 227 228 229 } else 230 { 231 232 233 216 { 217 lbreak("While defining object %s :\n" 218 " var '%s' was previously defined by another\n" 219 " with index %d, but %s has a var listed '%s' with same index\n" 220 " try moving definition of %s before previously declared object", 221 lstring_value(symbol_name(name)), 222 lstring_value(symbol_name(symbol)), 223 index, 224 lstring_value(symbol_name(name)), 225 lstring_value(symbol_name(vars[index])), 226 lstring_value(symbol_name(name)) 227 ); 228 exit(0); 229 } else 230 { 231 var_index[index]=tv; 232 vars[index]=symbol; 233 tv++; 234 234 } 235 235 } else … … 245 245 vars[index]=symbol; 246 246 tv++; 247 } 247 } 248 248 } else /** Nope, looks like we have to add the variable ourself and define the assesor funs */ 249 249 { … … 267 267 268 268 add_c_object(symbol,free_index); 269 269 270 270 vars[free_index]=symbol; 271 271 var_index[free_index]=tv; … … 285 285 } 286 286 for (i=0;i<tiv;i++) 287 if (!strcmp(lstring_value(symbol_name(vars[i])),name)) 287 if (!strcmp(lstring_value(symbol_name(vars[i])),name)) 288 288 return 1; 289 289 return 0; 290 290 } 291 291 292 character_type::character_type(void *args, void *name) 292 character_type::character_type(void *args, void *name) 293 293 { 294 294 p_ref r2(args); … … 322 322 323 323 for (i=0;i<TOTAL_ABILITIES;i++) 324 abil[i]=get_ability_default((ability)i); 324 abil[i]=get_ability_default((ability)i); 325 325 void *field=args; 326 326 p_ref r7(field); … … 329 329 void *f=CAR(CAR(field)); 330 330 p_ref r1(f); 331 331 332 332 if (f==l_abil) 333 333 { … … 336 336 for (i=0;i<TOTAL_ABILITIES;i++) 337 337 { 338 339 340 341 338 Cell *ab=assoc(make_find_symbol(ability_names[i]),l); 339 p_ref r5(ab); 340 if (!NILP(ab)) 341 abil[i]=lnumber_value(eval(lcar(lcdr(ab)))); 342 342 } 343 343 } else if (f==l_funs) … … 347 347 for (i=0;i<TOTAL_OFUNS;i++) 348 348 { 349 350 351 352 349 Cell *ab=assoc(make_find_symbol(ofun_names[i]),l); 350 p_ref r5(ab); 351 if (!NILP(ab) && lcar(lcdr(ab))) 352 fun_table[i]=lcar(lcdr(ab)); 353 353 } 354 354 } else if (f==l_flags) … … 358 358 for (i=0;i<TOTAL_CFLAGS;i++) 359 359 { 360 361 362 363 364 } 365 360 Cell *ab=assoc(make_find_symbol(cflag_names[i]),l); 361 p_ref r5(ab); 362 if (!NILP(ab) && eval(lcar(lcdr(ab)))) 363 cflags|=(1<<i); 364 } 365 366 366 if (get_cflag(CFLAG_IS_WEAPON)) // if this is a weapon add to weapon array 367 367 { 368 369 370 368 total_weapons++; 369 weapon_types=(int *)jrealloc(weapon_types,sizeof(int)*total_weapons,"weapon map"); 370 weapon_types[total_weapons-1]=total_objects; 371 371 } 372 372 } else if (f==l_range) … … 386 386 while (l) 387 387 { 388 389 390 391 392 393 394 395 396 } 388 int index; 389 void *e; 390 sequence *mem; 391 index = add_state(CAR((CAR(l)))); 392 e = eval(CAR(CDR(CAR(l)))); 393 mem = new sequence(fn,e,NULL); 394 seq[index]=mem; 395 l=CDR(l); 396 } 397 397 } else if (f==l_fields) 398 398 { … … 401 401 while (!NILP(mf)) 402 402 { 403 404 char *fake=lstring_value(eval(lcar(lcdr(lcar(mf))))); 405 406 407 408 409 410 } 411 412 413 414 415 403 char *real=lstring_value(eval(lcar(lcar(mf)))); 404 char *fake=lstring_value(eval(lcar(lcdr(lcar(mf))))); 405 if (!isa_var_name(real)) 406 { 407 lprint(field); 408 lbreak("fields : no such var name \"%s\"\n",name); 409 exit(0); 410 } 411 total_fields++; 412 413 fields=(named_field **)jrealloc(fields,sizeof(named_field *)*total_fields,"named_fields"); 414 fields[total_fields-1]=new named_field(real,fake); 415 mf=lcdr(mf); 416 416 } 417 417 } else if (f==l_logo) … … 426 426 while (l) 427 427 { 428 429 430 } 428 add_var(CAR(l),name); 429 l=CDR(l); 430 } 431 431 } 432 432 else … … 435 435 lbreak("Unknown field for character definition"); 436 436 exit(0); 437 } 437 } 438 438 } 439 439 440 440 if (!seq[stopped]) 441 441 lbreak("object (%s) has no stopped state, please define one!\n", 442 442 lstring_value(symbol_name(name))); 443 443 444 444 /* char *fn=lstring_value(lcar(desc)); … … 465 465 printf("missing state state art in def-character (%s)\n",name); 466 466 exit(0); 467 } 468 467 } 468 469 469 sa=lcdr(sa); // list of state sequences 470 470 while (!NILP(sa)) 471 471 { 472 472 int num=lnumber_value(lcar(lcar(sa))); 473 if (seq[num]) 473 if (seq[num]) 474 474 printf("Warning : state '%s' defined multiply for object %s\n" 475 476 else 475 " using first definition\n",state_names[num],name); 476 else 477 477 seq[lnumber_value(lcar(lcar(sa)))]=new sequence(fn,lcar(lcdr(lcar(sa))),lcar(lcdr(lcdr(lcar(sa))))); 478 sa=lcdr(sa); 478 sa=lcdr(sa); 479 479 } 480 480 … … 483 483 { 484 484 rangex=lnumber_value(lcar(lcdr(range))); 485 rangey=lnumber_value(lcar(lcdr(lcdr(range)))); 486 } else 485 rangey=lnumber_value(lcar(lcdr(lcdr(range)))); 486 } else 487 487 { 488 488 rangex=100; … … 504 504 for (int i=0;find<0 && i<t;i++) 505 505 if (!strcmp(default_simple.var_name(i),name)) 506 506 find=i; 507 507 if (find<0) 508 508 { 509 510 511 512 513 514 515 } 509 lprint(assoc(l_fields,desc)); 510 printf("fields : no such var name \"%s\"\n",name); 511 printf("current possiblities are : \n"); 512 for (int i=0;i<t;i++) printf("\"%s\" ",default_simple.var_name(i)); 513 printf("\n"); 514 exit(0); 515 } 516 516 char *new_name=lstring_value(lcar(lcdr(lcar(mf)))); 517 517 total_fields++; … … 525 525 526 526 Cell *lg=assoc(l_logo,desc); 527 if (NILP(lg)) 527 if (NILP(lg)) 528 528 { 529 529 if (get_cflag(CFLAG_IS_WEAPON)) … … 531 531 lprint(desc); 532 532 lbreak("object must have a logo defined if it is a weapon\n" 533 533 "example '(logo . (""art/misc.spe"" . ""big waepon""))\n"); 534 534 } 535 535 logo=-1; 536 536 } 537 else 538 logo=cache.reg_object(fn,lcdr(lg),SPEC_IMAGE,1); 537 else 538 logo=cache.reg_object(fn,lcdr(lg),SPEC_IMAGE,1); 539 539 */ 540 540 } … … 551 551 character_type::~character_type() 552 552 { 553 for (int i=0;i<ts;i++) 554 if (seq[i]) 553 for (int i=0;i<ts;i++) 554 if (seq[i]) 555 555 delete seq[i]; 556 556 if (ts) jfree(seq); … … 565 565 if (ts) 566 566 jfree(seq_syms); 567 567 568 568 if (tiv) 569 569 {
Note: See TracChangeset
for help on using the changeset viewer.