@@ -160,24 +160,26 @@ function doChance(rollValue, gameState) {
160160 case 18 :
161161 case 17 :
162162 case 16 :
163- name = pop . randomMemberName ( population ) ;
164- person = pop . memberByName ( name , gameState ) ;
165- safety = 0 ; // infinite loop protection
166- while (
167- person . hasOwnProperty ( 'strength' ) &&
168- person . strength == 'strong' &&
169- safety < Object . keys ( population ) . length
170- ) {
171- name = pop . randomMemberName ( population ) ;
172- person = pop . memberByName ( name , gameState ) ;
173- safety = safety + 1 ;
174- }
175- message += person . name + ' grows stronger.' ;
176- pop . history ( name , message , gameState ) ;
177- if ( person . strength && person . strength == 'weak' ) {
178- delete person . strength ;
163+ // Find members who are not already strong
164+ var memberNames = Object . keys ( population ) ;
165+ var nonStrongMembers = memberNames . filter ( function ( name ) {
166+ var p = population [ name ] ;
167+ return ! p . hasOwnProperty ( 'strength' ) || p . strength != 'strong' ;
168+ } ) ;
169+ if ( nonStrongMembers . length === 0 ) {
170+ message += 'Every day is leg day; the tribe is strong.' ;
179171 } else {
180- person . strength = 'strong' ;
172+ name = nonStrongMembers [
173+ Math . floor ( Math . random ( ) * nonStrongMembers . length )
174+ ] ;
175+ person = pop . memberByName ( name , gameState ) ;
176+ message += person . name + ' grows stronger.' ;
177+ pop . history ( name , message , gameState ) ;
178+ if ( person . strength && person . strength == 'weak' ) {
179+ delete person . strength ;
180+ } else {
181+ person . strength = 'strong' ;
182+ }
181183 }
182184 break ;
183185 case 15 :
0 commit comments