36 #ifndef NOBLEAPE_UNIVERSE_H
37 #define NOBLEAPE_UNIVERSE_H
52 #define TERRITORY_DIMENSION (MAP_DIMENSION>>6)
53 #define TERRITORY_AREA (TERRITORY_DIMENSION*TERRITORY_DIMENSION)
54 #define APESPACE_TO_TERRITORY(num) (APESPACE_TO_MAPSPACE(num)>>6)
56 #define SINGLE_BRAIN (32768)
57 #define DOUBLE_BRAIN (SINGLE_BRAIN*2)
67 static const n_byte operators[17][7] =
92 #define AGE_IN_DAYS(sim,bei) (sim->land->date - being_dob(bei))
93 #define AGE_IN_YEARS(sim,bei) (AGE_IN_DAYS(sim,bei)/TIME_YEAR_DAYS)
96 #define AGE_OF_MATURITY (30)
299 #define MIN_ANTIBODIES 16
300 #define MIN_ANTIGENS 8
301 #define IMMUNE_ANTIGENS 8
302 #define IMMUNE_POPULATION 16
303 #define PATHOGEN_TRANSMISSION_PROB 1000
304 #define PATHOGEN_ENVIRONMENT_PROB 100
305 #define PATHOGEN_MUTATION_PROB 100
306 #define ANTIBODY_DEPLETION_PROB 100
307 #define ANTIBODY_GENERATION_PROB(bei) (being_energy(bei))
309 #define RANDOM_PATHOGEN(seed,pathogen_type) (((seed%(255/PATHOGEN_TRANSMISSION_TOTAL))*PATHOGEN_TRANSMISSION_TOTAL)+pathogen_type)
310 #define PATHOGEN_SEVERITY(pathogen) (((pathogen)*(pathogen))>>11)
311 #define PATHOGEN_TRANSMISSION(pathogen) ((pathogen)&7)
390 static const n_int interval_steps[] =
392 static const n_constant_string interval_description[] = {
"mins",
"hours",
"days",
"months",
"years" };
397 #define NATURE_NURTURE(nature,nurture) (((nature) + ((nurture)>>4))>>1)
434 #define VALUABLE_OBJECT (INVENTORY_NUT & INVENTORY_SHELL)
480 #define FISHING_PROB (1<<8)
483 #define METRES_TO_APESPACE(m) (m*m*80000)
486 #define SHOUT_RANGE METRES_TO_APESPACE(50)
487 #define SHOUT_REFRACTORY 10
501 #define THRESHOLD_SEEK_MATE 100
504 #define GESTATION_SEX_DRIVE_DECREMENT 16
507 #define FATIGUE_SPEED_THRESHOLD 8
510 #define ANECDOTE_EVENT_MUTATION_RATE 5000
511 #define ANECDOTE_AFFECT_MUTATION_RATE 5000
521 #define SOCIAL_FORGET_DAYS 10
525 #define SOCIAL_RANGE METRES_TO_APESPACE(10)
528 #define SQUABBLE_RANGE METRES_TO_APESPACE(5)
531 #define MATING_RANGE METRES_TO_APESPACE(5)
534 #define SOCIAL_TOLLERANCE 0
537 #define MIN_CROWDING 1
541 #define MAX_CROWDING 3
544 #define BEING_MAX_MASS_G 7000
547 #define BEING_MAX_MASS_FAT_G (BEING_MAX_MASS_G>>2)
550 #define MIN(a,b) (((a) < (b)) ? (a) : (b))
554 #define FAT_MASS(frame,energy) (MIN( ((BEING_MAX_MASS_FAT_G*energy*frame)>>(4+12)),BEING_MAX_MASS_FAT_G))
557 #define GET_BODY_FAT(bei) (FAT_MASS(GENE_FRAME(being_genetics(bei)),being_energy(bei)))
560 #define BEING_MAX_HEIGHT_MM 2000
563 #define BEING_MAX_HEIGHT 65535
566 #define GET_BEING_HEIGHT(bei) (GET_H(bei)*BEING_MAX_HEIGHT_MM/BEING_MAX_HEIGHT)
571 #define ENERGY_TO_GROWTH(b,e) ((e>>3)*3)
574 #define BIRTH_HEIGHT 2000
575 #define BIRTH_MASS 100
578 #define SOCIAL_GRAPH_ENTRY_EMPTY(graph,index) ((graph[index].first_name[BEING_MET]==0) && (graph[index].family_name[BEING_MET]==0) && (graph[index].relationship<=RELATIONSHIP_SELF))
581 #define SOCIAL_GRAPH_ENTRY_LOCATION_EXISTS(graph,index) (graph[index].location[0] + graph[index].location[1] > 0)
584 #define IS_FAMILY_MEMBER(graph,index) ((graph[index].relationship > RELATIONSHIP_SELF) && (graph[index].relationship < OTHER_MOTHER))
586 #define EVENT_INTENTION (128)
589 #define THROW_ACCURACY (1<<15)
590 #define WHACK_ACCURACY (1<<15)
592 #define PAIR_BOND_THRESHOLD 2
596 #define MAX_FEATURESET_SIZE 16
599 #define MAX_FEATURE_FREQUENCY 2048
602 #define MAX_FEATURESET_OBSERVATIONS 2048
606 #define SOCIAL_SIZE 12
607 #define SOCIAL_SIZE_BEINGS (SOCIAL_SIZE>>1)
608 #define EPISODIC_SIZE 12
611 #define OVERRIDE_GOAL 1
614 #define GOAL_TIMEOUT (60*24)
617 #define GOAL_RADIUS 40000
628 #define DRIVES_MAX 255
640 #define MATING_PROB 12
646 #define GESTATION_DAYS 1
649 #define WEANING_DAYS 14
652 #define CARRYING_DAYS 3
655 #define CONCEPTION_INHIBITION_DAYS 5
658 #define SUCKLING_ENERGY 2
661 #define SUCKLING_MAX_SEPARATION METRES_TO_APESPACE(2)
664 #define MAX_PARASITES(bei) ((GENE_HAIR(being_genetics(bei))*255)>>4)
667 #define PARASITE_HOP_MAX_DISTANCE METRES_TO_APESPACE(2)
670 #define PARASITE_ENERGY_COST 1
673 #define PARASITE_ENVIRONMENT 5000
677 #define PARASITE_BREED 10
680 #define GROOMING_MAX_SEPARATION METRES_TO_APESPACE(2)
683 #define MAX_SPEED_WHILST_GROOMING 30
686 #define GROOMING_PROB 10000
690 #define GROOMING_PROB_HONOR 10
693 #define PARASITES_REMOVED 2
739 #define SQUABBLE_FLEE_SPEED 20
742 #define SQUABBLE_ENERGY_SHOWFORCE 200
745 #define SQUABBLE_ENERGY_ATTACK 500
748 #define SQUABBLE_ENERGY_ROCK_HURL 100
751 #define SQUABBLE_ENERGY_BRANCH_WHACK 50
754 #define SQUABBLE_DISRESPECT 20
757 #define SQUABBLE_HONOR_ADJUST 10
760 #define SQUABBLE_SHOW_FORCE_DISTANCE 10
764 #define MINIMUM_GENETIC_VARIATION 32
768 #define COMPOSITE_AFFECT(enjoyment,interest,surprise, \
769 anger,disgust,dissmell, \
770 distress,fear,shame) \
771 ((enjoyment)+(interest)-(anger)-(disgust)-(dissmell)-(distress)-(fear)-(shame))
808 #define DIPLOID(parent1,parent2) ((parent1)|((parent2)<<16))
809 #define CHROMOSOME_FROM_MOTHER(ch) (((ch)>>16)&65535)
810 #define CHROMOSOME_FROM_FATHER(ch) ((ch)&65535)
812 #define GET_NUCLEOTIDE(gene,num) ((gene[((num)>>3) & 3]>>((num&7)*2))&3)
815 #define GENE_VAL(gene, num0, num1) ((GET_NUCLEOTIDE(gene,num0) << 2) | GET_NUCLEOTIDE(gene,num1))
817 #define CHROMOSOMES 4
818 #define CHROMOSOME_Y 0
821 #define MUTATION_CROSSOVER_PROB 500
822 #define MUTATION_DELETION_PROB 200
823 #define MUTATION_TRANSPOSE_PROB 200
829 #define GENE_REGULATOR(gene,a,b) (1+GENE_VAL(gene,(15+(a)),(15+(b))))
831 #define GENE_VAL_REG(gene,a,b,c,d) GENE_VAL(gene,GENE_REGULATOR(gene,a,b),GENE_REGULATOR(gene,c,d))
840 #define GENE_HOX(gene,bodyseg) GENE_VAL_REG(gene, 2+(bodyseg), 4+(bodyseg), 18-(bodyseg), 21-(bodyseg))
844 #define GENE_FRAME(gene) GENE_VAL_REG(gene, 10, 11, 1, 6)
848 #define GENE_HAIR(gene) GENE_VAL_REG(gene, 12, 5, 12, 11)
852 #define GENE_VISION_INITIAL(gene) GENE_VAL_REG(gene, 2, 12, 3, 9)
853 #define GENE_VISION_DELTA(gene) GENE_VAL_REG(gene, 11, 7, 2, 9)
857 #define GENE_EYE_SHAPE(gene) GENE_VAL_REG(gene, 9, 12, 1, 5)
861 #define GENE_EYE_COLOR(gene) GENE_VAL_REG(gene, 9, 7, 3, 7)
865 #define GENE_EYE_SEPARATION(gene) GENE_VAL_REG(gene, 3, 2, 0, 14)
869 #define GENE_NOSE_SHAPE(gene) GENE_VAL_REG(gene, 4, 5, 6, 8)
873 #define GENE_EAR_SHAPE(gene) GENE_VAL_REG(gene, 12, 4, 14, 1)
877 #define GENE_EYEBROW_SHAPE(gene) GENE_VAL_REG(gene, 9, 10, 8, 4)
881 #define GENE_MOUTH_SHAPE(gene) GENE_VAL_REG(gene, 9, 5, 8, 15)
885 #define GENE_PIGMENTATION(gene) GENE_VAL_REG(gene, 8, 9, 8, 3)
888 #define GENE_BRAINCODE_SENSORS(gene) GENE_VAL_REG(gene, 11, 14, 4, 7)
889 #define GENE_BRAINCODE_ACTUATORS(gene) GENE_VAL_REG(gene, 15, 10, 10, 0)
890 #define GENE_BRAINCODE_CONDITIONALS(gene) GENE_VAL_REG(gene, 4, 9, 0, 2)
891 #define GENE_BRAINCODE_OPERATORS(gene) GENE_VAL_REG(gene, 12, 1, 6, 12)
892 #define GENE_BRAINCODE_DATA(gene) GENE_VAL_REG(gene, 8, 15, 7, 12)
897 #define GENE_NEGATIVE_AFFECT_FADE(gene) GENE_VAL_REG(gene, 9, 15, 13, 2)
898 #define GENE_POSITIVE_AFFECT_FADE(gene) GENE_VAL_REG(gene, 11, 4, 3, 12)
901 #define GENE_SOCIAL(gene) GENE_VAL_REG(gene, 22, 2, 13, 9)
905 #define GENE_GLUCOSE_THRESHOLD_MAX(gene) GENE_VAL_REG(gene, 6, 15, 19, 18)
909 #define GENE_GLUCOSE_THRESHOLD_MIN(gene) GENE_VAL_REG(gene, 16, 14, 10, 7)
912 #define GENE_GLUCOGEN_RATE(gene) GENE_VAL_REG(gene, 17, 11, 20, 2)
915 #define GENE_INSULIN_RATE(gene) GENE_VAL_REG(gene, 13, 7, 9, 11)
918 #define GENE_ADRENALIN_RATE(gene) GENE_VAL_REG(gene, 16, 19, 13, 3)
921 #define GENE_BLADDER_CAPACITY(gene) GENE_VAL_REG(gene, 5, 15, 2, 7)
923 #define GENE_WASTE_CAPACITY(gene) GENE_VAL_REG(gene, 12, 11, 19, 1)
926 #define GENE_SUCKLING_RATE(gene) GENE_VAL_REG(gene, 4, 14, 10, 15)
929 #define SOCIAL_THRESHOLD(bei) ((NATURE_NURTURE(GENE_SOCIAL(being_genetics(bei)),bei->learned_preference[PREFERENCE_SOCIAL]))>>1)
1018 noble_featureset classification;
1115 #define NUMBER_OF_BODIES (256)
1220 #define GET_A(bei,index) ((bei)->attention[index])
1221 #define GET_H(bei) ((bei)->height)
1222 #define GET_M(bei) ((bei)->mass)
1224 #define GET_I(bei) (being_genetics(bei)[CHROMOSOME_Y])
1226 #define FIND_SEX(array) (array&3)
1227 #define SEX_FEMALE 3
1229 #define BRAIN_OFFSET(num) (num)
1324 #ifdef CONSOLE_REQUIRED
1328 {&
io_help,
"help",
"[(command)]",
"Displays a list of all the commands"},
1329 #ifdef COMMAND_LINE_EXPLICIT
1333 {&
console_open,
"open",
"[file]",
"Load a simulation file"},
1336 {&
console_script,
"script",
"[file]",
"Load an ApeScript simulation file"},
1337 {&
console_save,
"save",
"[file]",
"Save a simulation file"},
1343 {&
console_stop,
"stop",
"",
"Stop the simulation during step or run"},
1345 {&
console_speak,
"speak",
"[file]",
"Create an AIFF file of Noble Ape speech"},
1346 {&
console_alphabet,
"alpha",
"[file]",
"Create an AIFF file of Noble Ape alphabet"},
1347 {&
console_file,
"file",
"[(component)]",
"Information on the file format"},
1348 {&
console_run,
"run",
"(time format)|forever",
"Simulate for a given number of days or forever"},
1349 {&
console_step,
"step",
"",
"Run for a single logging interval"},
1351 {&
console_epic,
"epic",
"",
"List the most talked about apes"},
1352 {&
console_interval,
"interval",
"(days)",
"Set the simulation logging interval in days"},
1353 {&
console_event,
"event",
"on|social|off",
"Episodic events (all) on, social on or all off"},
1354 {&
console_logging,
"logging",
"on|off",
"Turn logging of images and data on or off"},
1358 {&
console_watch,
"watch",
"(ape name)|all|off|*",
"Watch (specific *) for the current ape"},
1360 {&
console_idea,
"idea",
"",
"Track shared braincode between apes"},
1361 {&
console_being,
"ape",
"",
"Name of the currently watched ape"},
1367 {&
console_braincode,
"braincode",
"(ape name)",
"* Show braincode for a named ape"},
1368 {&
console_speech,
"speech",
"(ape name)",
"* Show speech for a named ape"},
1370 {&
console_episodic,
"episodic",
"(ape name)",
"* Show episodic memory for a named ape"},
1371 {&
console_probes,
"probes",
"(ape name)",
"* Show brain probes for a named ape"},
1372 {&
console_stats,
"stats",
"(ape name)",
"* Show parameters for a named ape"},
1374 {&
console_appearance,
"appearance",
"(ape name)",
"* Show appearance values for a named ape"},
1376 {&
console_genome,
"genome",
"(ape name)",
"Show genome for a named ape"},