diff --git a/Data/Map246.rxdata b/Data/Map246.rxdata index a5135fca1..eb1ab9ba1 100644 Binary files a/Data/Map246.rxdata and b/Data/Map246.rxdata differ diff --git a/Data/Map247.rxdata b/Data/Map247.rxdata index 6fb28096a..f8a606ebd 100644 Binary files a/Data/Map247.rxdata and b/Data/Map247.rxdata differ diff --git a/Data/Map744.rxdata b/Data/Map744.rxdata index fee930b23..22deea87b 100644 Binary files a/Data/Map744.rxdata and b/Data/Map744.rxdata differ diff --git a/Data/Scripts/049_Compatibility/Constants.rb b/Data/Scripts/049_Compatibility/Constants.rb index 69cb12bfd..bd0158140 100644 --- a/Data/Scripts/049_Compatibility/Constants.rb +++ b/Data/Scripts/049_Compatibility/Constants.rb @@ -135,6 +135,9 @@ VAR_STAT_HOTELS_SPENT=225 VAR_STAT_QUESTS_ACCEPTED=96 VAR_STAT_QUESTS_COMPLETED=98 VAR_STAT_NB_SECRETS=193 +VAR_STAT_FUSION_QUIZ_HIGHEST_SCORE=267 +VAR_STAT_FUSION_QUIZ_NB_TIMES=268 +VAR_STAT_FUSION_QUIZ_TOTAL_PTS=269 VAR_FOSSIL=271 diff --git a/Data/Scripts/050_AddOns/DisplayText.rb b/Data/Scripts/050_AddOns/DisplayText.rb index 6da81515b..f0ee9437b 100644 --- a/Data/Scripts/050_AddOns/DisplayText.rb +++ b/Data/Scripts/050_AddOns/DisplayText.rb @@ -3,8 +3,8 @@ def Kernel.pbDisplayText(message,xposition,yposition,z=nil, baseColor=nil, shado @hud = [] end # Draw the text - baseColor= baseColor != nil ? baseColor : Color.new(72,72,72) - shadowColor= shadowColor !=nil ? shadowColor : Color.new(160,160,160) + baseColor= baseColor ? baseColor : Color.new(72,72,72) + shadowColor= shadowColor ? shadowColor : Color.new(160,160,160) sprite = BitmapSprite.new(Graphics.width,Graphics.height,@viewport1) if z != nil sprite.z=z diff --git a/Data/Scripts/050_AddOns/GuessPokemonQuiz.rb b/Data/Scripts/050_AddOns/GuessPokemonQuiz.rb index fc0e79e11..fefab5762 100644 --- a/Data/Scripts/050_AddOns/GuessPokemonQuiz.rb +++ b/Data/Scripts/050_AddOns/GuessPokemonQuiz.rb @@ -8,149 +8,206 @@ class FusionQuiz # :ADVANCED -> List of all pokemon # def initialize(difficulty = :REGULAR) - @sprites = {} + @sprites = {} - @previewwindow=nil + + @previewwindow = nil @difficulty = difficulty @customs_list = getCustomSpeciesList(true, false) @selected_pokemon = nil @head_id = nil @body_id = nil @choices = [] - @abandonned=false + @abandonned = false @score = 0 + @current_streak = 0 + @streak_multiplier = 0.15 end - def start_quiz(nb_rounds=3) + + def start_quiz(nb_rounds = 3) + nb_games_played= pbGet(VAR_STAT_FUSION_QUIZ_NB_TIMES) + pbSet(VAR_STAT_FUSION_QUIZ_NB_TIMES,nb_games_played+1) + round_multiplier = 1 round_multiplier_increase = 0.1 - for i in 1..nb_rounds if i == nb_rounds pbMessage(_INTL("Get ready! Here comes the final round!")) - elsif i ==1 + elsif i == 1 pbMessage(_INTL("Get ready! Here comes the first round!")) else - pbMessage(_INTL("Get ready! Here comes round {1}!",i)) + pbMessage(_INTL("Get ready! Here comes round {1}!", i)) end start_quiz_new_round(round_multiplier) - - rounds_left = nb_rounds-i - if rounds_left >0 - pbMessage(_INTL("That's it for round {1}. You've cumulated {2} points so far.",i,@score)) - prompt_next_round = pbMessage(_INTL("Are you ready to move on to the next round?",i),["Yes","No"]) + rounds_left = nb_rounds - i + if rounds_left > 0 + pbMessage(_INTL("That's it for round {1}. You've cumulated {2} points so far.", i, @score)) + prompt_next_round = pbMessage(_INTL("Are you ready to move on to the next round?", i), ["Yes", "No"]) if prompt_next_round != 0 - prompt_quit = pbMessage(_INTL("You still have {1} rounds to go. You'll only keep your points if you finish all {2} rounds. Do you really want to quit now?",rounds_left,nb_rounds),["Yes","No"]) + prompt_quit = pbMessage(_INTL("You still have {1} rounds to go. You'll only keep your points if you finish all {2} rounds. Do you really want to quit now?", rounds_left, nb_rounds), ["Yes", "No"]) if prompt_quit - @abandonned=true + @abandonned = true return end end round_multiplier += round_multiplier_increase else - pbMessage(_INTL("That concludes our quiz! You've cumulated {1} points in total.",@score)) + pbMessage(_INTL("That concludes our quiz! You've cumulated {1} points in total.", @score)) pbMessage("Thanks for playing with us today!") end end - - + end_quiz() end - def start_quiz_new_round(round_multiplier=1) - if @difficulty == :ADVANCED - base_points_q1=500 - base_points_q1_redemption=200 - base_points_q2=600 - base_points_q2_redemption=200 - perfect_round_points=100 - else - base_points_q1=300 - base_points_q1_redemption=100 - base_points_q2=400 - base_points_q2_redemption=100 - perfect_round_points=50 - end + def end_quiz() + Kernel.pbClearText() + previous_highest = pbGet(VAR_STAT_FUSION_QUIZ_HIGHEST_SCORE) + pbSet(VAR_STAT_FUSION_QUIZ_HIGHEST_SCORE,@score) if @score > previous_highest + previous_total = pbGet(VAR_STAT_FUSION_QUIZ_TOTAL_PTS) + pbSet(VAR_STAT_FUSION_QUIZ_TOTAL_PTS,previous_total+@score) + end + + def start_quiz_new_round(round_multiplier = 1) + if @difficulty == :ADVANCED + base_points_q1 = 500 + base_points_q1_redemption = 200 + base_points_q2 = 600 + base_points_q2_redemption = 200 + perfect_round_points = 100 + else + base_points_q1 = 300 + base_points_q1_redemption = 100 + base_points_q2 = 400 + base_points_q2_redemption = 100 + perfect_round_points = 50 + end pick_random_pokemon() show_fusion_picture(true) - correct_answers=[] + correct_answers = [] #OBSCURED - correct_answers << new_question(base_points_q1*round_multiplier, "Which Pokémon is this fusion's body?",@body_id,true,true ) + correct_answers << new_question(calculate_points_awarded(base_points_q1, round_multiplier), "Which Pokémon is this fusion's body?", @body_id, true, true) pbMessage("Next question!") - correct_answers << new_question(base_points_q2*round_multiplier,"Which Pokémon is this fusion's head?", @head_id,true,true ) + correct_answers << new_question(calculate_points_awarded(base_points_q2, round_multiplier), "Which Pokémon is this fusion's head?", @head_id, true, true) #NON-OBSCURED if !correct_answers[0] || !correct_answers[1] - show_fusion_picture(false ) + show_fusion_picture(false) pbMessage("Okay, now's your chance to make up for the points you missed!") if !correct_answers[0] #1st question redemption - new_question(base_points_q1_redemption*round_multiplier, "Which Pokémon is this fusion's body?",@body_id,true,false ) + new_question(calculate_points_awarded(base_points_q1_redemption, round_multiplier), "Which Pokémon is this fusion's body?", @body_id, true, false) if !correct_answers[1] pbMessage("Next question!") end end if !correct_answers[1] #2nd question redemption - new_question(base_points_q2_redemption*round_multiplier,"Which Pokémon is this fusion's head?", @head_id,true,false ) + new_question(calculate_points_awarded(base_points_q2_redemption, round_multiplier), "Which Pokémon is this fusion's head?", @head_id, true, false) end - else - pbSEPlay("Applause",80) - pbMessage(_INTL("Wow! A perfect round! You get {1} more points!",perfect_round_points)) - show_fusion_picture(false,100 ) + else + pbSEPlay("Applause", 80) + pbMessage(_INTL("Wow! A perfect round! You get {1} more points!", perfect_round_points)) + show_fusion_picture(false, 100) pbMessage("Let's see what this Pokémon looked like!") - end + current_streak_dialog() hide_fusion_picture() end + def calculate_points_awarded(base_points, round_multiplier) + points = base_points * round_multiplier + if @current_streak > 0 + current_streak_multiplier = (@current_streak * @streak_multiplier) - @streak_multiplier + points += points * current_streak_multiplier + #p (base_points * round_multiplier) + #p (points * current_streak_multiplier) + end + return points + end - def new_question(points_value,question, answer_id, should_generate_new_choices, other_chance_later) - points_value=points_value.to_i + def new_question(points_value, question, answer_id, should_generate_new_choices, other_chance_later) + points_value = points_value.to_i answer_name = getPokemon(answer_id).real_name - answered_correctly = give_answer(question,answer_id,should_generate_new_choices) + answered_correctly = give_answer(question, answer_id, should_generate_new_choices) award_points(points_value) if answered_correctly - question_answer_followup_dialog(answered_correctly,answer_name,points_value,other_chance_later) + question_answer_followup_dialog(answered_correctly, answer_name, points_value, other_chance_later) return answered_correctly end + def increase_streak + @current_streak += 1 + refresh_streak_ui() + end + def break_streak + @current_streak = 0 + refresh_streak_ui() + end + + def refresh_streak_ui() + shadow_color = Color.new(160,160,160) + base_color_low_streak = Color.new(72,72,72) + base_color_medium_streak = Color.new(213,254,205) + base_color_high_streak = Color.new(100,232,96) + + streak_color= base_color_low_streak + streak_color = base_color_medium_streak if @current_streak >= 2 + streak_color = base_color_high_streak if @current_streak >= 4 + + message = _INTL("Streak: {1}",@current_streak) + Kernel.pbClearText() + Kernel.pbDisplayText(message,420,340,nil,streak_color) + end def award_points(nb_points) @score += nb_points end - def question_answer_followup_dialog(answered_correctly,correct_answer, points_awarded_if_win, other_chance_later=false) + def question_answer_followup_dialog(answered_correctly, correct_answer, points_awarded_if_win, other_chance_later = false) if !other_chance_later pbMessage("And the correct answer was...") pbMessage("...") - pbMessage(_INTL("{1}!",correct_answer)) + pbMessage(_INTL("{1}!", correct_answer)) end if answered_correctly - pbSEPlay("itemlevel",80) + pbSEPlay("itemlevel", 80) + increase_streak pbMessage("That's a correct answer!") - pbMessage(_INTL("You're awarded {1} points for your answer. Your current score is {2}",points_awarded_if_win,@score.to_s)) + pbMessage(_INTL("You're awarded {1} points for your answer. Your current score is {2}", points_awarded_if_win, @score.to_s)) else - pbSEPlay("buzzer",80) - pbMessage("Unfortunately, that was a wong answer.") + pbSEPlay("buzzer", 80) + break_streak + pbMessage("Unfortunately, that was a wrong answer.") pbMessage("But you'll get another chance!") if other_chance_later end end + def current_streak_dialog() + return if @current_streak ==0 + if @current_streak % 4 == 0 + if @current_streak >= 8 + pbMessage(_INTL("That's {1} correct answers in a row. You're on a roll!", @current_streak)) + else + pbMessage(_INTL("That's {1} correct answers in a row. You're doing great!", @current_streak)) + end + end + end - def show_fusion_picture(obscured = false,x=nil, y=nil) + def show_fusion_picture(obscured = false, x = nil, y = nil) hide_fusion_picture() picturePath = get_fusion_sprite_path(@head_id, @body_id) bitmap = AnimatedBitmap.new(picturePath) bitmap.scale_bitmap(Settings::FRONTSPRITE_SCALE) @previewwindow = PictureWindow.new(bitmap) @previewwindow.y = y ? y : 30 - @previewwindow.x = x ? x : (@difficulty==:ADVANCED ? 275 : 100) + @previewwindow.x = x ? x : (@difficulty == :ADVANCED ? 275 : 100) @previewwindow.z = 100000 if obscured @previewwindow.picture.pbSetColor(255, 255, 255, 200) @@ -169,30 +226,30 @@ class FusionQuiz pbSet(save_in_variable, @selected_pokemon) end - def give_answer(prompt_message,answer_id,should_generate_new_choices) - question_answered=false + def give_answer(prompt_message, answer_id, should_generate_new_choices) + question_answered = false answer_pokemon_name = getPokemon(answer_id).real_name while !question_answered if @difficulty == :ADVANCED - player_answer = prompt_pick_answer_advanced(prompt_message,answer_id) + player_answer = prompt_pick_answer_advanced(prompt_message, answer_id) else - player_answer = prompt_pick_answer_regular(prompt_message,answer_id,should_generate_new_choices) + player_answer = prompt_pick_answer_regular(prompt_message, answer_id, should_generate_new_choices) end - confirmed = pbMessage("Is this your final answer?",["Yes","No"]) - if confirmed==0 - question_answered=true + confirmed = pbMessage("Is this your final answer?", ["Yes", "No"]) + if confirmed == 0 + question_answered = true else - should_generate_new_choices=false + should_generate_new_choices = false end end return player_answer == answer_pokemon_name end - def get_random_pokemon_from_same_egg_group(pokemon,previous_choices) + def get_random_pokemon_from_same_egg_group(pokemon, previous_choices) egg_groups = getPokemonEggGroups(pokemon) while true - new_pokemon = rand(1,NB_POKEMON)+1 + new_pokemon = rand(1, NB_POKEMON) + 1 new_pokemon_egg_groups = getPokemonEggGroups(new_pokemon) if (egg_groups & new_pokemon_egg_groups).any? && !previous_choices.include?(new_pokemon) return new_pokemon @@ -200,18 +257,18 @@ class FusionQuiz end end - def prompt_pick_answer_regular(prompt_message,real_answer,should_new_choices) + def prompt_pick_answer_regular(prompt_message, real_answer, should_new_choices) commands = should_new_choices ? generate_new_choices(real_answer) : @choices.shuffle - chosen = pbMessage(prompt_message,commands) + chosen = pbMessage(prompt_message, commands) return commands[chosen] end def generate_new_choices(real_answer) choices = [] choices << real_answer - choices << get_random_pokemon_from_same_egg_group(real_answer,choices) - choices << get_random_pokemon_from_same_egg_group(real_answer,choices) - choices << get_random_pokemon_from_same_egg_group(real_answer,choices) + choices << get_random_pokemon_from_same_egg_group(real_answer, choices) + choices << get_random_pokemon_from_same_egg_group(real_answer, choices) + choices << get_random_pokemon_from_same_egg_group(real_answer, choices) commands = [] choices.each do |dex_num, i| @@ -222,18 +279,16 @@ class FusionQuiz return commands.shuffle end - - def prompt_pick_answer_advanced(prompt_message,answer) + def prompt_pick_answer_advanced(prompt_message, answer) commands = [] for dex_num in 1..NB_POKEMON species = getPokemon(dex_num) - commands.push([dex_num-1, species.real_name, species.real_name]) + commands.push([dex_num - 1, species.real_name, species.real_name]) end pbMessage(prompt_message) - return pbChooseList(commands, 0, nil, 1) + return pbChooseList(commands, 0, nil, 1) end - def get_score return @score end diff --git a/Data/System.rxdata b/Data/System.rxdata index 2c9eea9ec..80b93e6b3 100644 Binary files a/Data/System.rxdata and b/Data/System.rxdata differ