diff --git a/AndorsTrail/AndroidManifest.xml b/AndorsTrail/AndroidManifest.xml
index d0f4b7984..9eb76c4d7 100644
--- a/AndorsTrail/AndroidManifest.xml
+++ b/AndorsTrail/AndroidManifest.xml
@@ -47,6 +47,7 @@
+
diff --git a/AndorsTrail/gen/com/gpl/rpg/AndorsTrail/R.java b/AndorsTrail/gen/com/gpl/rpg/AndorsTrail/R.java
index 001cc3f64..90b2a18c1 100644
--- a/AndorsTrail/gen/com/gpl/rpg/AndorsTrail/R.java
+++ b/AndorsTrail/gen/com/gpl/rpg/AndorsTrail/R.java
@@ -130,15 +130,18 @@ public final class R {
public static final int ui_gradientshape=0x7f020046;
public static final int ui_gradientshape_translucent=0x7f020047;
public static final int ui_green_foreground=0x7f020048;
- public static final int ui_progress_ap=0x7f020049;
- public static final int ui_progress_exp=0x7f02004a;
- public static final int ui_progress_health=0x7f02004b;
- public static final int ui_purple_foreground=0x7f02004c;
- public static final int ui_red_foreground=0x7f02004d;
- public static final int ui_selections=0x7f02004e;
- public static final int ui_startbackground=0x7f02004f;
- public static final int ui_statustext=0x7f020050;
- public static final int ui_yellow_foreground=0x7f020051;
+ public static final int ui_icon_equipment=0x7f020049;
+ public static final int ui_icon_quest=0x7f02004a;
+ public static final int ui_icon_skill=0x7f02004b;
+ public static final int ui_progress_ap=0x7f02004c;
+ public static final int ui_progress_exp=0x7f02004d;
+ public static final int ui_progress_health=0x7f02004e;
+ public static final int ui_purple_foreground=0x7f02004f;
+ public static final int ui_red_foreground=0x7f020050;
+ public static final int ui_selections=0x7f020051;
+ public static final int ui_startbackground=0x7f020052;
+ public static final int ui_statustext=0x7f020053;
+ public static final int ui_yellow_foreground=0x7f020054;
}
public static final class id {
public static final int abilitymodifierinfo_change_maxap=0x7f090005;
@@ -182,151 +185,164 @@ public final class R {
public static final int conversation_next=0x7f090028;
public static final int conversation_statements=0x7f090027;
public static final int conversation_text=0x7f09002b;
- public static final int heroinfo_ap=0x7f09003d;
- public static final int heroinfo_currentconditions=0x7f090044;
- public static final int heroinfo_currentconditions_title=0x7f090043;
- public static final int heroinfo_currenttraits=0x7f090041;
- public static final int heroinfo_expbar=0x7f090040;
- public static final int heroinfo_healthbar=0x7f09003f;
- public static final int heroinfo_image=0x7f090039;
- public static final int heroinfo_itemeffects=0x7f090042;
- public static final int heroinfo_level=0x7f09003b;
- public static final int heroinfo_levelup=0x7f090045;
- public static final int heroinfo_movecost=0x7f09003e;
- public static final int heroinfo_quests=0x7f090046;
- public static final int heroinfo_stats_attack=0x7f090048;
- public static final int heroinfo_stats_defense=0x7f090049;
- public static final int heroinfo_stats_gold=0x7f090047;
+ public static final int heroinfo_ap=0x7f090040;
+ public static final int heroinfo_currentconditions=0x7f090047;
+ public static final int heroinfo_currentconditions_title=0x7f090046;
+ public static final int heroinfo_currenttraits=0x7f090044;
+ public static final int heroinfo_expbar=0x7f090043;
+ public static final int heroinfo_healthbar=0x7f090042;
+ public static final int heroinfo_image=0x7f09003c;
+ public static final int heroinfo_itemeffects=0x7f090045;
+ public static final int heroinfo_level=0x7f09003e;
+ public static final int heroinfo_levelup=0x7f090048;
+ public static final int heroinfo_listskills_list=0x7f09003b;
+ public static final int heroinfo_listskills_number_of_increases=0x7f09003a;
+ public static final int heroinfo_movecost=0x7f090041;
+ public static final int heroinfo_quests=0x7f090049;
+ public static final int heroinfo_stats_attack=0x7f09004b;
+ public static final int heroinfo_stats_defense=0x7f09004c;
+ public static final int heroinfo_stats_gold=0x7f09004a;
public static final int heroinfo_tab1=0x7f09002c;
public static final int heroinfo_tab2=0x7f09002d;
- public static final int heroinfo_title=0x7f09003a;
- public static final int heroinfo_totalexperience=0x7f09003c;
- public static final int heroinfo_worn_body=0x7f090030;
- public static final int heroinfo_worn_center=0x7f09002e;
- public static final int heroinfo_worn_feet=0x7f090033;
- public static final int heroinfo_worn_hand=0x7f090032;
- public static final int heroinfo_worn_head=0x7f09002f;
- public static final int heroinfo_worn_neck=0x7f090031;
- public static final int heroinfo_worn_ringleft=0x7f090035;
- public static final int heroinfo_worn_ringright=0x7f090037;
- public static final int heroinfo_worn_shield=0x7f090036;
- public static final int heroinfo_worn_weapon=0x7f090034;
- public static final int inv_assign_slot1=0x7f0900b7;
- public static final int inv_assign_slot2=0x7f0900b8;
- public static final int inv_assign_slot3=0x7f0900b9;
- public static final int inv_image=0x7f09004a;
- public static final int inv_menu_assign=0x7f0900b6;
- public static final int inv_menu_drop=0x7f0900b5;
- public static final int inv_menu_equip=0x7f0900b2;
- public static final int inv_menu_info=0x7f0900b1;
- public static final int inv_menu_unequip=0x7f0900b3;
- public static final int inv_menu_use=0x7f0900b4;
- public static final int inv_text=0x7f09004b;
- public static final int inventorylist_root=0x7f090038;
- public static final int itemeffect_onequip_abilitymodifierinfo=0x7f09004d;
- public static final int itemeffect_onequip_conditions=0x7f09004e;
- public static final int itemeffect_onequip_title=0x7f09004c;
- public static final int itemeffect_onhit=0x7f090052;
- public static final int itemeffect_onhit_title=0x7f090051;
- public static final int itemeffect_onkill=0x7f090054;
- public static final int itemeffect_onkill_title=0x7f090053;
- public static final int itemeffect_onuse=0x7f090050;
- public static final int itemeffect_onuse_conditions_source=0x7f090057;
- public static final int itemeffect_onuse_conditions_source_title=0x7f090056;
- public static final int itemeffect_onuse_conditions_target=0x7f090059;
- public static final int itemeffect_onuse_conditions_target_title=0x7f090058;
- public static final int itemeffect_onuse_list=0x7f090055;
- public static final int itemeffect_onuse_title=0x7f09004f;
- public static final int iteminfo_action=0x7f09005e;
- public static final int iteminfo_category=0x7f09005c;
- public static final int iteminfo_close=0x7f09005f;
- public static final int iteminfo_effects=0x7f09005d;
- public static final int iteminfo_image=0x7f09005a;
- public static final int iteminfo_title=0x7f09005b;
- public static final int levelup_add_attackchance=0x7f090064;
- public static final int levelup_add_attackdamage=0x7f090065;
- public static final int levelup_add_blockchance=0x7f090066;
- public static final int levelup_add_health=0x7f090063;
- public static final int levelup_description=0x7f090062;
- public static final int levelup_image=0x7f090061;
- public static final int levelup_titlelayout=0x7f090060;
- public static final int loadsave_description=0x7f09006a;
- public static final int loadsave_image=0x7f090068;
- public static final int loadsave_slot_1=0x7f09006b;
- public static final int loadsave_slot_2=0x7f09006c;
- public static final int loadsave_slot_3=0x7f09006d;
- public static final int loadsave_slot_4=0x7f09006e;
- public static final int loadsave_title=0x7f090069;
- public static final int loadsave_titlelayout=0x7f090067;
- public static final int main_combatview=0x7f090072;
- public static final int main_container=0x7f09006f;
- public static final int main_mainview=0x7f090073;
- public static final int main_quickitemview=0x7f090071;
- public static final int main_statusview=0x7f090070;
- public static final int main_virtual_dpad=0x7f090076;
- public static final int monsterencounter_attack=0x7f09007a;
- public static final int monsterencounter_cancel=0x7f09007c;
- public static final int monsterencounter_description=0x7f090079;
- public static final int monsterencounter_image=0x7f090077;
- public static final int monsterencounter_info=0x7f09007b;
- public static final int monsterencounter_title=0x7f090078;
- public static final int monsterinfo_close=0x7f090083;
- public static final int monsterinfo_currenttraits=0x7f090081;
- public static final int monsterinfo_difficulty=0x7f09007f;
- public static final int monsterinfo_healthbar=0x7f090080;
- public static final int monsterinfo_image=0x7f09007d;
- public static final int monsterinfo_onhiteffects=0x7f090082;
- public static final int monsterinfo_title=0x7f09007e;
- public static final int questlog_contents=0x7f090085;
- public static final int questlog_entrytext=0x7f090086;
- public static final int questlog_includecompleted=0x7f090084;
+ public static final int heroinfo_tab3=0x7f09002e;
+ public static final int heroinfo_title=0x7f09003d;
+ public static final int heroinfo_totalexperience=0x7f09003f;
+ public static final int heroinfo_worn_body=0x7f090031;
+ public static final int heroinfo_worn_center=0x7f09002f;
+ public static final int heroinfo_worn_feet=0x7f090034;
+ public static final int heroinfo_worn_hand=0x7f090033;
+ public static final int heroinfo_worn_head=0x7f090030;
+ public static final int heroinfo_worn_neck=0x7f090032;
+ public static final int heroinfo_worn_ringleft=0x7f090036;
+ public static final int heroinfo_worn_ringright=0x7f090038;
+ public static final int heroinfo_worn_shield=0x7f090037;
+ public static final int heroinfo_worn_weapon=0x7f090035;
+ public static final int inv_assign_slot1=0x7f0900c4;
+ public static final int inv_assign_slot2=0x7f0900c5;
+ public static final int inv_assign_slot3=0x7f0900c6;
+ public static final int inv_image=0x7f09004d;
+ public static final int inv_menu_assign=0x7f0900c3;
+ public static final int inv_menu_drop=0x7f0900c2;
+ public static final int inv_menu_equip=0x7f0900bf;
+ public static final int inv_menu_info=0x7f0900be;
+ public static final int inv_menu_unequip=0x7f0900c0;
+ public static final int inv_menu_use=0x7f0900c1;
+ public static final int inv_text=0x7f09004e;
+ public static final int inventorylist_root=0x7f090039;
+ public static final int itemeffect_onequip_abilitymodifierinfo=0x7f090050;
+ public static final int itemeffect_onequip_conditions=0x7f090051;
+ public static final int itemeffect_onequip_title=0x7f09004f;
+ public static final int itemeffect_onhit=0x7f090055;
+ public static final int itemeffect_onhit_title=0x7f090054;
+ public static final int itemeffect_onkill=0x7f090057;
+ public static final int itemeffect_onkill_title=0x7f090056;
+ public static final int itemeffect_onuse=0x7f090053;
+ public static final int itemeffect_onuse_conditions_source=0x7f09005a;
+ public static final int itemeffect_onuse_conditions_source_title=0x7f090059;
+ public static final int itemeffect_onuse_conditions_target=0x7f09005c;
+ public static final int itemeffect_onuse_conditions_target_title=0x7f09005b;
+ public static final int itemeffect_onuse_list=0x7f090058;
+ public static final int itemeffect_onuse_title=0x7f090052;
+ public static final int iteminfo_action=0x7f090061;
+ public static final int iteminfo_category=0x7f09005f;
+ public static final int iteminfo_close=0x7f090062;
+ public static final int iteminfo_effects=0x7f090060;
+ public static final int iteminfo_image=0x7f09005d;
+ public static final int iteminfo_title=0x7f09005e;
+ public static final int levelup_add_attackchance=0x7f090066;
+ public static final int levelup_add_attackdamage=0x7f090067;
+ public static final int levelup_add_blockchance=0x7f090068;
+ public static final int levelup_add_health=0x7f090065;
+ public static final int levelup_adds_new_skillpoint=0x7f090069;
+ public static final int levelup_description=0x7f090064;
+ public static final int levelup_image=0x7f090063;
+ public static final int loadsave_description=0x7f09006d;
+ public static final int loadsave_image=0x7f09006b;
+ public static final int loadsave_slot_1=0x7f09006e;
+ public static final int loadsave_slot_2=0x7f09006f;
+ public static final int loadsave_slot_3=0x7f090070;
+ public static final int loadsave_slot_4=0x7f090071;
+ public static final int loadsave_title=0x7f09006c;
+ public static final int loadsave_titlelayout=0x7f09006a;
+ public static final int main_combatview=0x7f090075;
+ public static final int main_container=0x7f090072;
+ public static final int main_mainview=0x7f090076;
+ public static final int main_quickitemview=0x7f090074;
+ public static final int main_statusview=0x7f090073;
+ public static final int main_virtual_dpad=0x7f090079;
+ public static final int monsterencounter_attack=0x7f09007d;
+ public static final int monsterencounter_cancel=0x7f09007f;
+ public static final int monsterencounter_description=0x7f09007c;
+ public static final int monsterencounter_image=0x7f09007a;
+ public static final int monsterencounter_info=0x7f09007e;
+ public static final int monsterencounter_title=0x7f09007b;
+ public static final int monsterinfo_close=0x7f090086;
+ public static final int monsterinfo_currenttraits=0x7f090084;
+ public static final int monsterinfo_difficulty=0x7f090082;
+ public static final int monsterinfo_healthbar=0x7f090083;
+ public static final int monsterinfo_image=0x7f090080;
+ public static final int monsterinfo_onhiteffects=0x7f090085;
+ public static final int monsterinfo_title=0x7f090081;
+ public static final int questlog_contents=0x7f090088;
+ public static final int questlog_entrytext=0x7f090089;
+ public static final int questlog_includecompleted=0x7f090087;
public static final int quick_menu_assign=0x7f090000;
public static final int quick_menu_assign_group=0x7f090001;
public static final int quick_menu_unassign=0x7f090002;
- public static final int quickitem_toggle=0x7f0900a0;
- public static final int quickitemview_item1=0x7f090087;
- public static final int quickitemview_item2=0x7f090088;
- public static final int quickitemview_item3=0x7f090089;
- public static final int rangebar_label=0x7f09008a;
- public static final int rangebar_progress=0x7f09008b;
- public static final int rangebar_text=0x7f09008c;
- public static final int shop_buy_gc=0x7f09008e;
- public static final int shop_buy_list=0x7f09008f;
- public static final int shop_sell_gc=0x7f090091;
- public static final int shop_sell_list=0x7f090092;
- public static final int shop_tab1=0x7f09008d;
- public static final int shop_tab2=0x7f090090;
- public static final int shopitem_image=0x7f090093;
- public static final int shopitem_infobutton=0x7f090095;
- public static final int shopitem_shopbutton=0x7f090094;
- public static final int shopitem_text=0x7f090096;
- public static final int startscreen_about=0x7f09009d;
- public static final int startscreen_continue=0x7f09009a;
- public static final int startscreen_currenthero=0x7f090097;
- public static final int startscreen_enterheroname=0x7f090098;
- public static final int startscreen_load=0x7f09009c;
- public static final int startscreen_newgame=0x7f09009b;
- public static final int startscreen_quit=0x7f09009e;
- public static final int startscreen_version=0x7f090099;
- public static final int status_image=0x7f09009f;
- public static final int statusview_activeconditions=0x7f090075;
- public static final int statusview_exp=0x7f0900a2;
- public static final int statusview_health=0x7f0900a1;
- public static final int statusview_statustext=0x7f090074;
- public static final int traitsinfo_attack_chance=0x7f0900a6;
- public static final int traitsinfo_attack_cost=0x7f0900a4;
- public static final int traitsinfo_attack_damage=0x7f0900a8;
- public static final int traitsinfo_attack_row1=0x7f0900a3;
- public static final int traitsinfo_attack_row2=0x7f0900a5;
- public static final int traitsinfo_attack_row3=0x7f0900a7;
- public static final int traitsinfo_critical_row1=0x7f0900a9;
- public static final int traitsinfo_critical_row2=0x7f0900ab;
- public static final int traitsinfo_criticalhit_chance=0x7f0900aa;
- public static final int traitsinfo_criticalhit_multiplier=0x7f0900ac;
- public static final int traitsinfo_defense_chance=0x7f0900ae;
- public static final int traitsinfo_defense_damageresist=0x7f0900b0;
- public static final int traitsinfo_defense_row1=0x7f0900ad;
- public static final int traitsinfo_defense_row2=0x7f0900af;
+ public static final int quickitem_toggle=0x7f0900ad;
+ public static final int quickitemview_item1=0x7f09008a;
+ public static final int quickitemview_item2=0x7f09008b;
+ public static final int quickitemview_item3=0x7f09008c;
+ public static final int rangebar_label=0x7f09008d;
+ public static final int rangebar_progress=0x7f09008e;
+ public static final int rangebar_text=0x7f09008f;
+ public static final int shop_buy_gc=0x7f090091;
+ public static final int shop_buy_list=0x7f090092;
+ public static final int shop_sell_gc=0x7f090094;
+ public static final int shop_sell_list=0x7f090095;
+ public static final int shop_tab1=0x7f090090;
+ public static final int shop_tab2=0x7f090093;
+ public static final int shopitem_image=0x7f090096;
+ public static final int shopitem_infobutton=0x7f090098;
+ public static final int shopitem_shopbutton=0x7f090097;
+ public static final int shopitem_text=0x7f090099;
+ public static final int skillentry_description=0x7f0900a3;
+ public static final int skillentry_icon=0x7f0900a1;
+ public static final int skillentry_title=0x7f0900a2;
+ public static final int skillinfo_currentlevel=0x7f09009c;
+ public static final int skillinfo_image=0x7f09009a;
+ public static final int skillinfo_longdescription=0x7f09009d;
+ public static final int skillinfo_prerequisites=0x7f09009e;
+ public static final int skillinfo_title=0x7f09009b;
+ public static final int skillinfoinfo_action=0x7f09009f;
+ public static final int skillinfoinfo_close=0x7f0900a0;
+ public static final int startscreen_about=0x7f0900aa;
+ public static final int startscreen_continue=0x7f0900a7;
+ public static final int startscreen_currenthero=0x7f0900a4;
+ public static final int startscreen_enterheroname=0x7f0900a5;
+ public static final int startscreen_load=0x7f0900a9;
+ public static final int startscreen_newgame=0x7f0900a8;
+ public static final int startscreen_quit=0x7f0900ab;
+ public static final int startscreen_version=0x7f0900a6;
+ public static final int status_image=0x7f0900ac;
+ public static final int statusview_activeconditions=0x7f090078;
+ public static final int statusview_exp=0x7f0900af;
+ public static final int statusview_health=0x7f0900ae;
+ public static final int statusview_statustext=0x7f090077;
+ public static final int traitsinfo_attack_chance=0x7f0900b3;
+ public static final int traitsinfo_attack_cost=0x7f0900b1;
+ public static final int traitsinfo_attack_damage=0x7f0900b5;
+ public static final int traitsinfo_attack_row1=0x7f0900b0;
+ public static final int traitsinfo_attack_row2=0x7f0900b2;
+ public static final int traitsinfo_attack_row3=0x7f0900b4;
+ public static final int traitsinfo_critical_row1=0x7f0900b6;
+ public static final int traitsinfo_critical_row2=0x7f0900b8;
+ public static final int traitsinfo_criticalhit_chance=0x7f0900b7;
+ public static final int traitsinfo_criticalhit_multiplier=0x7f0900b9;
+ public static final int traitsinfo_defense_chance=0x7f0900bb;
+ public static final int traitsinfo_defense_damageresist=0x7f0900bd;
+ public static final int traitsinfo_defense_row1=0x7f0900ba;
+ public static final int traitsinfo_defense_row2=0x7f0900bc;
}
public static final class layout {
public static final int abilitymodifierview=0x7f030000;
@@ -339,26 +355,29 @@ public final class R {
public static final int heroinfo=0x7f030007;
public static final int heroinfo_equipped=0x7f030008;
public static final int heroinfo_inventory=0x7f030009;
- public static final int heroinfo_stats=0x7f03000a;
- public static final int heroinfo_statsicons=0x7f03000b;
- public static final int inventoryitemview=0x7f03000c;
- public static final int itemeffectview=0x7f03000d;
- public static final int itemeffectview_onuse=0x7f03000e;
- public static final int iteminfo=0x7f03000f;
- public static final int levelup=0x7f030010;
- public static final int loadsave=0x7f030011;
- public static final int main=0x7f030012;
- public static final int monsterencounter=0x7f030013;
- public static final int monsterinfo=0x7f030014;
- public static final int questlog=0x7f030015;
- public static final int questlogentry=0x7f030016;
- public static final int quickitemview=0x7f030017;
- public static final int rangebar=0x7f030018;
- public static final int shop=0x7f030019;
- public static final int shopitemview=0x7f03001a;
- public static final int startscreen=0x7f03001b;
- public static final int statusview=0x7f03001c;
- public static final int traitsinfoview=0x7f03001d;
+ public static final int heroinfo_skill_list=0x7f03000a;
+ public static final int heroinfo_stats=0x7f03000b;
+ public static final int heroinfo_statsicons=0x7f03000c;
+ public static final int inventoryitemview=0x7f03000d;
+ public static final int itemeffectview=0x7f03000e;
+ public static final int itemeffectview_onuse=0x7f03000f;
+ public static final int iteminfo=0x7f030010;
+ public static final int levelup=0x7f030011;
+ public static final int loadsave=0x7f030012;
+ public static final int main=0x7f030013;
+ public static final int monsterencounter=0x7f030014;
+ public static final int monsterinfo=0x7f030015;
+ public static final int questlog=0x7f030016;
+ public static final int questlogentry=0x7f030017;
+ public static final int quickitemview=0x7f030018;
+ public static final int rangebar=0x7f030019;
+ public static final int shop=0x7f03001a;
+ public static final int shopitemview=0x7f03001b;
+ public static final int skill_info_view=0x7f03001c;
+ public static final int skill_listentry_view=0x7f03001d;
+ public static final int startscreen=0x7f03001e;
+ public static final int statusview=0x7f03001f;
+ public static final int traitsinfoview=0x7f030020;
}
public static final class menu {
public static final int inventoryitem=0x7f0b0000;
@@ -457,7 +476,7 @@ public final class R {
public static final int conversation_rewardgold=0x7f0500ee;
public static final int conversation_rewarditem=0x7f0500f0;
public static final int conversation_rewarditems=0x7f0500f1;
- public static final int conversation_title=0x7f050149;
+ public static final int conversation_title=0x7f050184;
public static final int conversationlist_alynndir=0x7f050026;
public static final int conversationlist_ambelie=0x7f05002a;
public static final int conversationlist_blackwater_harlenn=0x7f05003d;
@@ -643,7 +662,7 @@ public final class R {
public static final int itemlist_v069_2=0x7f050059;
public static final int itemlist_v069_questitems=0x7f05005a;
public static final int itemlist_weapons=0x7f05004e;
- public static final int key_required=0x7f050148;
+ public static final int key_required=0x7f050183;
public static final int levelup_add_attackchance=0x7f050101;
public static final int levelup_add_attackchance_description=0x7f050102;
public static final int levelup_add_attackdamage=0x7f050103;
@@ -652,6 +671,7 @@ public final class R {
public static final int levelup_add_blockchance_description=0x7f050106;
public static final int levelup_add_health=0x7f0500ff;
public static final int levelup_add_health_description=0x7f050100;
+ public static final int levelup_adds_new_skillpoint=0x7f050182;
public static final int levelup_buttontext=0x7f0500fe;
public static final int levelup_description=0x7f0500fd;
public static final int levelup_title=0x7f0500fc;
@@ -725,6 +745,64 @@ public final class R {
public static final int shop_sell=0x7f0500f5;
public static final int shop_sellitem=0x7f0500f8;
public static final int shop_yourgold=0x7f0500f9;
+ public static final int skill_current_level=0x7f05017c;
+ public static final int skill_current_level_with_maximum=0x7f05017d;
+ public static final int skill_longdescription_barkskin=0x7f05016e;
+ public static final int skill_longdescription_barter=0x7f05016c;
+ public static final int skill_longdescription_better_criticals=0x7f050170;
+ public static final int skill_longdescription_cleave=0x7f050174;
+ public static final int skill_longdescription_coinfinder=0x7f050172;
+ public static final int skill_longdescription_dodge=0x7f05016d;
+ public static final int skill_longdescription_eater=0x7f050175;
+ public static final int skill_longdescription_evasion=0x7f050177;
+ public static final int skill_longdescription_fortitude=0x7f050176;
+ public static final int skill_longdescription_lower_exploss=0x7f050179;
+ public static final int skill_longdescription_magicfinder=0x7f05017a;
+ public static final int skill_longdescription_more_criticals=0x7f05016f;
+ public static final int skill_longdescription_more_exp=0x7f050173;
+ public static final int skill_longdescription_regeneration=0x7f050178;
+ public static final int skill_longdescription_speed=0x7f050171;
+ public static final int skill_longdescription_weapon_chance=0x7f05016a;
+ public static final int skill_longdescription_weapon_dmg=0x7f05016b;
+ public static final int skill_number_of_increases_one=0x7f050180;
+ public static final int skill_number_of_increases_several=0x7f050181;
+ public static final int skill_prerequisite_other_skill=0x7f05017e;
+ public static final int skill_prerequisite_stat=0x7f05017f;
+ public static final int skill_shortdescription_barkskin=0x7f05015d;
+ public static final int skill_shortdescription_barter=0x7f05015b;
+ public static final int skill_shortdescription_better_criticals=0x7f05015f;
+ public static final int skill_shortdescription_cleave=0x7f050163;
+ public static final int skill_shortdescription_coinfinder=0x7f050161;
+ public static final int skill_shortdescription_dodge=0x7f05015c;
+ public static final int skill_shortdescription_eater=0x7f050164;
+ public static final int skill_shortdescription_evasion=0x7f050166;
+ public static final int skill_shortdescription_fortitude=0x7f050165;
+ public static final int skill_shortdescription_lower_exploss=0x7f050168;
+ public static final int skill_shortdescription_magicfinder=0x7f050169;
+ public static final int skill_shortdescription_more_criticals=0x7f05015e;
+ public static final int skill_shortdescription_more_exp=0x7f050162;
+ public static final int skill_shortdescription_regeneration=0x7f050167;
+ public static final int skill_shortdescription_speed=0x7f050160;
+ public static final int skill_shortdescription_weapon_chance=0x7f050159;
+ public static final int skill_shortdescription_weapon_dmg=0x7f05015a;
+ public static final int skill_title_barkskin=0x7f05014c;
+ public static final int skill_title_barter=0x7f05014a;
+ public static final int skill_title_better_criticals=0x7f05014e;
+ public static final int skill_title_cleave=0x7f050152;
+ public static final int skill_title_coinfinder=0x7f050150;
+ public static final int skill_title_dodge=0x7f05014b;
+ public static final int skill_title_eater=0x7f050153;
+ public static final int skill_title_evasion=0x7f050155;
+ public static final int skill_title_fortitude=0x7f050154;
+ public static final int skill_title_lower_exploss=0x7f050157;
+ public static final int skill_title_magicfinder=0x7f050158;
+ public static final int skill_title_more_criticals=0x7f05014d;
+ public static final int skill_title_more_exp=0x7f050151;
+ public static final int skill_title_regeneration=0x7f050156;
+ public static final int skill_title_speed=0x7f05014f;
+ public static final int skill_title_weapon_chance=0x7f050148;
+ public static final int skill_title_weapon_dmg=0x7f050149;
+ public static final int skillinfo_action_levelup=0x7f05017b;
public static final int startscreen_about=0x7f0500ea;
public static final int startscreen_continue=0x7f0500e7;
public static final int startscreen_enterheroname=0x7f0500eb;
diff --git a/AndorsTrail/res/drawable/map_tiles_2_7.png b/AndorsTrail/res/drawable/map_tiles_2_7.png
index 5aa7f66ea..17523ba25 100644
Binary files a/AndorsTrail/res/drawable/map_tiles_2_7.png and b/AndorsTrail/res/drawable/map_tiles_2_7.png differ
diff --git a/AndorsTrail/res/drawable/ui_icon_equipment.png b/AndorsTrail/res/drawable/ui_icon_equipment.png
new file mode 100644
index 000000000..80b0cef33
Binary files /dev/null and b/AndorsTrail/res/drawable/ui_icon_equipment.png differ
diff --git a/AndorsTrail/res/drawable/ui_icon_quest.png b/AndorsTrail/res/drawable/ui_icon_quest.png
new file mode 100644
index 000000000..c9fe08e65
Binary files /dev/null and b/AndorsTrail/res/drawable/ui_icon_quest.png differ
diff --git a/AndorsTrail/res/drawable/ui_icon_skill.png b/AndorsTrail/res/drawable/ui_icon_skill.png
new file mode 100644
index 000000000..432285276
Binary files /dev/null and b/AndorsTrail/res/drawable/ui_icon_skill.png differ
diff --git a/AndorsTrail/res/layout/heroinfo.xml b/AndorsTrail/res/layout/heroinfo.xml
index dcfe5f1a1..c152cb4e7 100644
--- a/AndorsTrail/res/layout/heroinfo.xml
+++ b/AndorsTrail/res/layout/heroinfo.xml
@@ -29,9 +29,16 @@
+
+
+
+
diff --git a/AndorsTrail/res/layout/heroinfo_skill_list.xml b/AndorsTrail/res/layout/heroinfo_skill_list.xml
new file mode 100644
index 000000000..d3af267fd
--- /dev/null
+++ b/AndorsTrail/res/layout/heroinfo_skill_list.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/AndorsTrail/res/layout/levelup.xml b/AndorsTrail/res/layout/levelup.xml
index 107126774..cb9e126b4 100644
--- a/AndorsTrail/res/layout/levelup.xml
+++ b/AndorsTrail/res/layout/levelup.xml
@@ -1,81 +1,94 @@
-
-
+
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AndorsTrail/res/layout/skill_info_view.xml b/AndorsTrail/res/layout/skill_info_view.xml
new file mode 100644
index 000000000..dba25689c
--- /dev/null
+++ b/AndorsTrail/res/layout/skill_info_view.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AndorsTrail/res/layout/skill_listentry_view.xml b/AndorsTrail/res/layout/skill_listentry_view.xml
new file mode 100644
index 000000000..0f1d82ab2
--- /dev/null
+++ b/AndorsTrail/res/layout/skill_listentry_view.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/AndorsTrail/res/values/strings.xml b/AndorsTrail/res/values/strings.xml
index 41a50d1e8..6d9b85ce4 100644
--- a/AndorsTrail/res/values/strings.xml
+++ b/AndorsTrail/res/values/strings.xml
@@ -372,4 +372,67 @@
Total cost: %1$d goldTotal cost: %1$d gold
+ Weapon Accuracy
+ Hard Hit
+ Merchant
+ Dodge
+ Bark Skin
+ More Criticals
+ Better Criticals
+ Combat Speed
+ Gold Digger
+ Quick Learner
+ Cleave
+ Corpse Eater
+ Increased Fortitude
+ Evasion
+ Regeneration
+ Failure Mastery
+ Magic Finder
+
+ Increased attack chance
+ Increased attack damage
+ Better shop prices
+ Increased block chance
+ Damage resistance
+ Increased critical chance
+ Increased critical damage
+ Increased maximum action points
+ Higher chance of finding gold
+ More experience from monster kills
+ Recover action points on every kill
+ Recover health points on every kill
+ Gain health on each level up
+ Increased chance of fleeing
+ Gain health every round
+ Decrease amount of lost experience when dying
+ Increased chance of finding magic items
+
+ Increases attack chance by %1$d for each skill level.
+ Increases min and max damage by %1$d for each skill level.
+ For every skill level, decreases the buying and selling gold penalty by %1$d percentage points.
+ Increases block chance by %1$d for each skill level.
+ Increases damage resistance by %1$d for each skill level.
+ Increases any existing critical chance given by equipment by %1$d %% for each skill level (percentage of existing critical chance value, not percentage points).
+ Increases any existing critical multiplier given by equipment by %1$d %% for each skill level.
+ Increases maximum action points (AP) by %1$d for each skill level.
+ Increases chance of finding gold in monster drops by %1$d %%, and increases amount of gold in drops by %2$d %% for each skill level (up to the maximum amount that the monster drops).
+ Increases amount of exp given by defeating monsters by %1$d %% for each skill level
+ Gives +%1$d action points (AP) on every kill per skill level.
+ Gives +%1$d health points (HP) on every kill per skill level.
+ On every subsequent level-up, maximum health points (HP) will be raised by %1$d per skill level. This is not applied retroactively, only subsequent level-ups will be affected.
+ For every skill level, reduces both the chance of failed flee attempts by %1$d %% and the chance that a adjacent monster will attack by %2$d %%.
+ Gain +%1$d health points (HP) on every round per skill level.
+ For every skill level, reduces the amount of lost experience caused by death by %1$d %% (percentage of existing exp loss value, not percentage points). %2$d levels will remove all experience loss caused by death.
+ Increases the chance of finding non-ordinary items by %1$d %% for every skill level.
+
+ Level up
+ Current level: %1$d
+ Current level: %1$d / %2$d
+ Requires at least level %1$d of the %1$s skill to select.
+ Requires at least %1$d %1$s to select
+ You may select one skill to increase
+ You may select %1$d skills to increase
+ This level also gives you a new skill point to spend!
+
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java
index edf1c062e..047d65be7 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java
@@ -19,7 +19,7 @@ public final class AndorsTrailApplication extends Application {
public static final boolean DEVELOPMENT_DEBUGBUTTONS = true;
public static final boolean DEVELOPMENT_VALIDATEDATA = true;
public static final boolean DEVELOPMENT_DEBUGMESSAGES = true;
- public static final int CURRENT_VERSION = 21;
+ public static final int CURRENT_VERSION = 22;
public static final String CURRENT_VERSION_DISPLAY = "0.6.10dev";
public final WorldContext world = new WorldContext();
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Dialogs.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Dialogs.java
index 7fba615d0..47b108152 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Dialogs.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Dialogs.java
@@ -33,6 +33,7 @@ import com.gpl.rpg.AndorsTrail.activity.MonsterInfoActivity;
import com.gpl.rpg.AndorsTrail.activity.Preferences;
import com.gpl.rpg.AndorsTrail.activity.QuestLogActivity;
import com.gpl.rpg.AndorsTrail.activity.ShopActivity;
+import com.gpl.rpg.AndorsTrail.activity.SkillInfoActivity;
import com.gpl.rpg.AndorsTrail.activity.StartScreenActivity;
import com.gpl.rpg.AndorsTrail.context.ViewContext;
import com.gpl.rpg.AndorsTrail.controller.Controller;
@@ -276,15 +277,15 @@ public final class Dialogs {
}
public static void showBulkBuyingInterface(ShopActivity currentActivity, int itemTypeID, int totalAvailableAmount) {
- showBulkSelectionInterface(currentActivity, itemTypeID, totalAvailableAmount, BulkSelectionInterface.BULK_INTERFACE_BUY, ShopActivity.INTENTREQUEST_BULKSELECT_BUY);
+ showBulkSelectionInterface(currentActivity, itemTypeID, totalAvailableAmount, BulkSelectionInterface.BULK_INTERFACE_BUY, MainActivity.INTENTREQUEST_BULKSELECT_BUY);
}
public static void showBulkSellingInterface(ShopActivity currentActivity, int itemTypeID, int totalAvailableAmount) {
- showBulkSelectionInterface(currentActivity, itemTypeID, totalAvailableAmount, BulkSelectionInterface.BULK_INTERFACE_SELL, ShopActivity.INTENTREQUEST_BULKSELECT_SELL);
+ showBulkSelectionInterface(currentActivity, itemTypeID, totalAvailableAmount, BulkSelectionInterface.BULK_INTERFACE_SELL, MainActivity.INTENTREQUEST_BULKSELECT_SELL);
}
public static void showBulkDroppingInterface(HeroinfoActivity currentActivity, int itemTypeID, int totalAvailableAmount) {
- showBulkSelectionInterface(currentActivity, itemTypeID, totalAvailableAmount, BulkSelectionInterface.BULK_INTERFACE_DROP, HeroinfoActivity.INTENTREQUEST_BULKSELECT_DROP);
+ showBulkSelectionInterface(currentActivity, itemTypeID, totalAvailableAmount, BulkSelectionInterface.BULK_INTERFACE_DROP, MainActivity.INTENTREQUEST_BULKSELECT_DROP);
}
public static void showBulkSelectionInterface(Activity currentActivity, int itemTypeID, int totalAvailableAmount, int interfaceType, int requestCode) {
@@ -295,4 +296,10 @@ public final class Dialogs {
intent.setData(Uri.parse("content://com.gpl.rpg.AndorsTrail/bulkselection/" + itemTypeID));
currentActivity.startActivityForResult(intent, requestCode);
}
+ public static void showSkillInfo(HeroinfoActivity currentActivity, int skillID) {
+ Intent intent = new Intent(currentActivity, SkillInfoActivity.class);
+ intent.putExtra("skillID", skillID);
+ intent.setData(Uri.parse("content://com.gpl.rpg.AndorsTrail/showskillinfo/" + skillID));
+ currentActivity.startActivityForResult(intent, MainActivity.INTENTREQUEST_SKILLINFO);
+ }
}
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Savegames.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Savegames.java
index 096db3c6d..872170d04 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Savegames.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Savegames.java
@@ -14,6 +14,7 @@ import android.content.Context;
import android.os.Environment;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
+import com.gpl.rpg.AndorsTrail.controller.ActorStatsController;
import com.gpl.rpg.AndorsTrail.controller.Constants;
import com.gpl.rpg.AndorsTrail.controller.MovementController;
import com.gpl.rpg.AndorsTrail.model.ModelContainer;
@@ -99,7 +100,8 @@ public final class Savegames {
world.model = new ModelContainer(src, world, header.fileversion);
src.close();
- MovementController.moveBlockedActors(world);
+ ActorStatsController.recalculatePlayerCombatTraits(world.model.player);
+ MovementController.moveBlockedActors(world);
return LOAD_RESULT_SUCCESS;
}
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity.java
index 5db176ee9..6b0ea8b17 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity.java
@@ -18,9 +18,9 @@ import com.gpl.rpg.AndorsTrail.view.ActorConditionEffectList;
import com.gpl.rpg.AndorsTrail.view.ItemContainerAdapter;
import com.gpl.rpg.AndorsTrail.view.ItemEffectsView;
import com.gpl.rpg.AndorsTrail.view.RangeBar;
+import com.gpl.rpg.AndorsTrail.view.SkillListAdapater;
import com.gpl.rpg.AndorsTrail.view.TraitsInfoView;
-import android.app.Activity;
import android.app.TabActivity;
import android.content.Context;
import android.content.Intent;
@@ -43,8 +43,6 @@ import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
public final class HeroinfoActivity extends TabActivity {
- public static final int INTENTREQUEST_BULKSELECT_DROP = BulkSelectionInterface.BULK_INTERFACE_DROP;
-
private WorldContext world;
private ViewContext view;
@@ -72,6 +70,8 @@ public final class HeroinfoActivity extends TabActivity {
private final ImageView[] wornItemImage = new ImageView[Inventory.NUM_WORN_SLOTS];
private final int[] defaultWornItemImageResourceIDs = new int[Inventory.NUM_WORN_SLOTS];
+
+ private SkillListAdapater skillListAdapter;
/** Called when the activity is first created. */
@Override
@@ -90,11 +90,14 @@ public final class HeroinfoActivity extends TabActivity {
Resources res = getResources();
TabHost h = getTabHost();
h.addTab(h.newTabSpec("char")
- .setIndicator(res.getString(R.string.heroinfo_char), res.getDrawable(R.drawable.char_hero)) //TODO: Should change icon
+ .setIndicator(res.getString(R.string.heroinfo_char), res.getDrawable(R.drawable.char_hero))
.setContent(R.id.heroinfo_tab1));
- h.addTab(h.newTabSpec("inv")
- .setIndicator(res.getString(R.string.heroinfo_inv), res.getDrawable(R.drawable.char_hero)) //TODO: Should change icon
+ h.addTab(h.newTabSpec("skills")
+ .setIndicator(res.getString(R.string.heroinfo_skill), res.getDrawable(R.drawable.ui_icon_skill))
.setContent(R.id.heroinfo_tab2));
+ h.addTab(h.newTabSpec("inv")
+ .setIndicator(res.getString(R.string.heroinfo_inv), res.getDrawable(R.drawable.ui_icon_equipment))
+ .setContent(R.id.heroinfo_tab3));
String t = world.model.uiSelections.selectedTabHeroInfo;
if (t != null && t.length() > 0) {
h.setCurrentTabByTag(t);
@@ -164,6 +167,16 @@ public final class HeroinfoActivity extends TabActivity {
inventoryList.setAdapter(new ItemContainerAdapter(this, world.tileStore, container));
+ skillListAdapter = new SkillListAdapater(this, world.skills.getAllSkills(), player);
+ ListView skillList = (ListView) findViewById(R.id.heroinfo_listskills_list);
+ skillList.setAdapter(skillListAdapter);
+ skillList.setOnItemClickListener(new OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ Dialogs.showSkillInfo(HeroinfoActivity.this, (int) id);
+ }
+ });
+
update();
}
@@ -207,13 +220,19 @@ public final class HeroinfoActivity extends TabActivity {
break;
case MainActivity.INTENTREQUEST_LEVELUP:
break;
- case INTENTREQUEST_BULKSELECT_DROP:
- if (resultCode == Activity.RESULT_OK) {
- int quantity = data.getExtras().getInt("selectedAmount");
- int itemTypeID = data.getExtras().getInt("itemTypeID");
- itemType = world.itemTypes.getItemType(itemTypeID);
- view.itemController.dropItem(itemType, quantity);
- }
+ case MainActivity.INTENTREQUEST_BULKSELECT_DROP:
+ if (resultCode != RESULT_OK) break;
+
+ int quantity = data.getExtras().getInt("selectedAmount");
+ int itemTypeID = data.getExtras().getInt("itemTypeID");
+ itemType = world.itemTypes.getItemType(itemTypeID);
+ view.itemController.dropItem(itemType, quantity);
+ break;
+ case MainActivity.INTENTREQUEST_SKILLINFO:
+ if (resultCode != RESULT_OK) break;
+
+ int skillID = data.getExtras().getInt("skillID");
+ player.addSkillLevel(skillID);
break;
}
update();
@@ -225,6 +244,24 @@ public final class HeroinfoActivity extends TabActivity {
updateWorn();
updateLevelup();
updateConditions();
+ updateSkillList();
+ }
+
+ private void updateSkillList() {
+ TextView listskills_number_of_increases = (TextView) findViewById(R.id.heroinfo_listskills_number_of_increases);
+
+ int numberOfSkillIncreases = player.availableSkillIncreases;
+ if (numberOfSkillIncreases > 0) {
+ if (numberOfSkillIncreases == 1) {
+ listskills_number_of_increases.setText(R.string.skill_number_of_increases_one);
+ } else {
+ listskills_number_of_increases.setText(getResources().getString(R.string.skill_number_of_increases_several, numberOfSkillIncreases));
+ }
+ listskills_number_of_increases.setVisibility(View.VISIBLE);
+ } else {
+ listskills_number_of_increases.setVisibility(View.GONE);
+ }
+ skillListAdapter.notifyDataSetInvalidated();
}
private void updateLevelup() {
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/LevelUpActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/LevelUpActivity.java
index dd7ccf227..2b66db653 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/LevelUpActivity.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/LevelUpActivity.java
@@ -15,8 +15,8 @@ import com.gpl.rpg.AndorsTrail.R;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
import com.gpl.rpg.AndorsTrail.controller.ActorStatsController;
import com.gpl.rpg.AndorsTrail.controller.Constants;
+import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection;
import com.gpl.rpg.AndorsTrail.model.actor.Player;
-import com.gpl.rpg.AndorsTrail.model.actor.Skills;
public final class LevelUpActivity extends Activity {
private WorldContext world;
@@ -77,6 +77,13 @@ public final class LevelUpActivity extends Activity {
}
});
b.setText(getString(R.string.levelup_add_blockchance, Constants.LEVELUP_EFFECT_DEF_CH));
+
+ View v = findViewById(R.id.levelup_adds_new_skillpoint);
+ if (player.nextLevelAddsNewSkillpoint()) {
+ v.setVisibility(View.VISIBLE);
+ } else {
+ v.setVisibility(View.GONE);
+ }
}
private static final int SELECT_HEALTH = 0;
@@ -85,6 +92,8 @@ public final class LevelUpActivity extends Activity {
private static final int SELECT_DEF_CH = 3;
public void levelup(int selectionID) {
+ if (LevelUpActivity.this.isFinishing()) return;
+
addLevelupEffect(player, selectionID);
LevelUpActivity.this.finish();
}
@@ -106,9 +115,12 @@ public final class LevelUpActivity extends Activity {
player.traits.baseCombatTraits.blockChance += Constants.LEVELUP_EFFECT_DEF_CH;
break;
}
+ if (player.nextLevelAddsNewSkillpoint()) {
+ player.availableSkillIncreases++;
+ }
player.level++;
- hpIncrease += player.getSkillLevel(Skills.SKILL_FORTITUDE) * Skills.PER_SKILLPOINT_INCREASE_FORTITUDE_HEALTH;
+ hpIncrease += player.getSkillLevel(SkillCollection.SKILL_FORTITUDE) * SkillCollection.PER_SKILLPOINT_INCREASE_FORTITUDE_HEALTH;
player.health.max += hpIncrease;
player.traits.maxHP += hpIncrease;
player.health.current += hpIncrease;
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java
index 6d6a7ed8a..e1736049d 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java
@@ -49,6 +49,10 @@ public final class MainActivity extends Activity {
public static final int INTENTREQUEST_LEVELUP = 6;
public static final int INTENTREQUEST_PREFERENCES = 7;
public static final int INTENTREQUEST_SAVEGAME = 8;
+ public static final int INTENTREQUEST_BULKSELECT_BUY = 9;
+ public static final int INTENTREQUEST_BULKSELECT_SELL = 10;
+ public static final int INTENTREQUEST_BULKSELECT_DROP = 11;
+ public static final int INTENTREQUEST_SKILLINFO = 12;
private ViewContext view;
private WorldContext world;
@@ -208,6 +212,14 @@ public final class MainActivity extends Activity {
view.movementController.placePlayerAt(MapObject.MAPEVENT_NEWMAP, "blackwater_mountain32", "north", 0, 0);
}
})*/
+ ,new DebugButton("exp+=10000", new OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+ world.model.player.addExperience(10000);
+ updateStatus();
+ Toast.makeText(MainActivity.this, "DEBUG: given 10000 exp", Toast.LENGTH_SHORT).show();
+ }
+ })
,new DebugButton("hp=max", new OnClickListener() {
@Override
public void onClick(View arg0) {
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ShopActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ShopActivity.java
index 0549ede69..5e078ec3f 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ShopActivity.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ShopActivity.java
@@ -25,10 +25,6 @@ import com.gpl.rpg.AndorsTrail.view.ShopItemContainerAdapter;
import com.gpl.rpg.AndorsTrail.view.ShopItemContainerAdapter.OnContainerItemClickedListener;
public final class ShopActivity extends TabActivity implements OnContainerItemClickedListener {
-
- public static final int INTENTREQUEST_BULKSELECT_BUY = BulkSelectionInterface.BULK_INTERFACE_BUY;
- public static final int INTENTREQUEST_BULKSELECT_SELL = BulkSelectionInterface.BULK_INTERFACE_SELL;
-
private WorldContext world;
private Player player;
@@ -139,14 +135,14 @@ public final class ShopActivity extends TabActivity implements OnContainerItemCl
showSellingInterface(itemType);
}
break;
- case INTENTREQUEST_BULKSELECT_BUY:
+ case MainActivity.INTENTREQUEST_BULKSELECT_BUY:
if (resultCode == Activity.RESULT_OK) {
int quantity = data.getExtras().getInt("selectedAmount");
int itemTypeID = data.getExtras().getInt("itemTypeID");
buy(itemTypeID, quantity);
}
break;
- case INTENTREQUEST_BULKSELECT_SELL:
+ case MainActivity.INTENTREQUEST_BULKSELECT_SELL:
if (resultCode == Activity.RESULT_OK) {
int quantity = data.getExtras().getInt("selectedAmount");
int itemTypeID = data.getExtras().getInt("itemTypeID");
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/SkillInfoActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/SkillInfoActivity.java
new file mode 100644
index 000000000..8d2ec1329
--- /dev/null
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/SkillInfoActivity.java
@@ -0,0 +1,94 @@
+package com.gpl.rpg.AndorsTrail.activity;
+
+import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
+import com.gpl.rpg.AndorsTrail.R;
+import com.gpl.rpg.AndorsTrail.context.WorldContext;
+import com.gpl.rpg.AndorsTrail.controller.SkillController;
+import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection;
+import com.gpl.rpg.AndorsTrail.model.ability.SkillInfo;
+import com.gpl.rpg.AndorsTrail.model.actor.Player;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+public final class SkillInfoActivity extends Activity {
+ private WorldContext world;
+ private Player player;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivity(this);
+ this.world = app.world;
+ this.player = world.model.player;
+
+ AndorsTrailApplication.setWindowParameters(this, app.preferences);
+
+ setContentView(R.layout.skill_info_view);
+
+ final Resources res = getResources();
+ final Intent intent = getIntent();
+ final int skillID = intent.getExtras().getInt("skillID");
+ SkillInfo skill = world.skills.getSkill(skillID);
+
+ ImageView skillinfo_image = (ImageView) findViewById(R.id.skillinfo_image);
+ SkillController.setSkillIcon(skillinfo_image, skillID, res);
+
+ TextView skillinfo_title = (TextView) findViewById(R.id.skillinfo_title);
+ skillinfo_title.setText(SkillCollection.getSkillTitle(skillID, res));
+
+ TextView skillinfo_longdescription = (TextView) findViewById(R.id.skillinfo_longdescription);
+ skillinfo_longdescription.setText(SkillCollection.getSkillLongDescription(skillID, res));
+
+ TextView skillinfo_currentlevel = (TextView) findViewById(R.id.skillinfo_currentlevel);
+ if (player.hasSkill(skillID)) {
+ int playerSkillLevel = player.getSkillLevel(skillID);
+ if (skill.hasMaxLevel()) {
+ skillinfo_currentlevel.setText(res.getString(R.string.skill_current_level_with_maximum, playerSkillLevel, skill.maxLevel));
+ } else {
+ skillinfo_currentlevel.setText(res.getString(R.string.skill_current_level, playerSkillLevel));
+ }
+ } else {
+ skillinfo_currentlevel.setVisibility(View.GONE);
+ }
+
+
+ TextView skillinfo_prerequisites = (TextView) findViewById(R.id.skillinfo_prerequisites);
+ LinearLayout parent = (LinearLayout) skillinfo_prerequisites.getParent();
+ if (skill.hasLevelupRequirements()) {
+ //skillinfo_prerequisites.setText(SkillInfo.getLongDescription(skillID, res));
+ } else {
+ parent.removeView(skillinfo_prerequisites);
+ }
+
+ Button b = (Button) findViewById(R.id.skillinfoinfo_close);
+ b.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+ setResult(RESULT_CANCELED);
+ SkillInfoActivity.this.finish();
+ }
+ });
+
+ b = (Button) findViewById(R.id.skillinfoinfo_action);
+ b.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+ Intent result = new Intent();
+ result.putExtras(intent);
+ setResult(RESULT_OK, result);
+ SkillInfoActivity.this.finish();
+ }
+ });
+ b.setEnabled(SkillController.canLevelupSkill(player, skill));
+ }
+
+}
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/context/WorldContext.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/context/WorldContext.java
index 13b875454..67a5697f1 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/context/WorldContext.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/context/WorldContext.java
@@ -5,6 +5,7 @@ import com.gpl.rpg.AndorsTrail.VisualEffectCollection;
import com.gpl.rpg.AndorsTrail.conversation.ConversationCollection;
import com.gpl.rpg.AndorsTrail.model.ModelContainer;
import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionTypeCollection;
+import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection;
import com.gpl.rpg.AndorsTrail.model.actor.MonsterTypeCollection;
import com.gpl.rpg.AndorsTrail.model.item.DropListCollection;
import com.gpl.rpg.AndorsTrail.model.item.ItemTypeCollection;
@@ -21,6 +22,7 @@ public class WorldContext {
public final DropListCollection dropLists;
public final QuestCollection quests;
public final ActorConditionTypeCollection actorConditionsTypes;
+ public final SkillCollection skills;
//Objectcollections
public final TileStore tileStore;
@@ -39,6 +41,7 @@ public class WorldContext {
this.maps = new MapCollection();
this.quests = new QuestCollection();
this.actorConditionsTypes = new ActorConditionTypeCollection();
+ this.skills = new SkillCollection();
}
public WorldContext(WorldContext copy) {
this.conversations = copy.conversations;
@@ -51,6 +54,7 @@ public class WorldContext {
this.quests = copy.quests;
this.model = copy.model;
this.actorConditionsTypes = copy.actorConditionsTypes;
+ this.skills = copy.skills;
}
public void reset() {
maps.reset();
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java
index c0196efbe..d6503fd40 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java
@@ -15,12 +15,12 @@ import com.gpl.rpg.AndorsTrail.context.ViewContext;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
import com.gpl.rpg.AndorsTrail.model.AttackResult;
import com.gpl.rpg.AndorsTrail.model.ModelContainer;
+import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection;
import com.gpl.rpg.AndorsTrail.model.actor.Actor;
import com.gpl.rpg.AndorsTrail.model.actor.ActorTraits;
import com.gpl.rpg.AndorsTrail.model.actor.Monster;
import com.gpl.rpg.AndorsTrail.model.actor.MonsterType;
import com.gpl.rpg.AndorsTrail.model.actor.Player;
-import com.gpl.rpg.AndorsTrail.model.actor.Skills;
import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse;
import com.gpl.rpg.AndorsTrail.model.item.Loot;
import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap;
@@ -215,8 +215,8 @@ public final class CombatController {
model.currentMap.remove(killedMonster);
context.mainActivity.redrawAll(MainView.REDRAW_ALL_MONSTER_KILLED);
- if (player.getSkillLevel(Skills.SKILL_CLEAVE) > 0) player.ap.setMax();
- player.health.add(player.getSkillLevel(Skills.SKILL_EATER) * Skills.PER_SKILLPOINT_INCREASE_EATER_HEALTH, false);
+ player.ap.add(player.getSkillLevel(SkillCollection.SKILL_CLEAVE) * SkillCollection.PER_SKILLPOINT_INCREASE_CLEAVE_AP, false);
+ player.health.add(player.getSkillLevel(SkillCollection.SKILL_EATER) * SkillCollection.PER_SKILLPOINT_INCREASE_EATER_HEALTH, false);
model.statistics.addMonsterKill(killedMonster.monsterType);
model.player.addExperience(loot.exp);
@@ -247,7 +247,7 @@ public final class CombatController {
if (dest == null) return;
if (!useAPs(model.player.traits.moveCost)) return;
- int fleeChanceBias = model.player.getSkillLevel(Skills.SKILL_EVASION) * Skills.PER_SKILLPOINT_INCREASE_EVASION_FLEE_CHANCE_PERCENTAGE;
+ int fleeChanceBias = model.player.getSkillLevel(SkillCollection.SKILL_EVASION) * SkillCollection.PER_SKILLPOINT_INCREASE_EVASION_FLEE_CHANCE_PERCENTAGE;
if (Constants.roll100(Constants.FLEE_FAIL_CHANCE_PERCENT - fleeChanceBias)) {
fleeingFailed();
return;
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Constants.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Constants.java
index 19f25d716..875eb587d 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Constants.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Constants.java
@@ -11,6 +11,8 @@ public final class Constants {
public static final int LEVELUP_EFFECT_ATK_CH = 5;
public static final int LEVELUP_EFFECT_ATK_DMG = 1;
public static final int LEVELUP_EFFECT_DEF_CH = 3;
+ public static final int FIRST_SKILL_POINT_IS_GIVEN_AT_LEVEL = 3;
+ public static final int NEW_SKILL_POINT_EVERY_N_LEVELS = 4;
public static final int MARKET_PRICEFACTOR_PERCENT = 15;
public static final int MONSTER_AGGRESSION_CHANCE_PERCENT = 15;
public static final int EXP_FACTOR_DAMAGERESISTANCE = 9;
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Controller.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Controller.java
index f03b713d0..2f04be6f7 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Controller.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Controller.java
@@ -8,9 +8,9 @@ import com.gpl.rpg.AndorsTrail.activity.MainActivity;
import com.gpl.rpg.AndorsTrail.context.ViewContext;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
import com.gpl.rpg.AndorsTrail.model.ModelContainer;
+import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection;
import com.gpl.rpg.AndorsTrail.model.actor.Monster;
import com.gpl.rpg.AndorsTrail.model.actor.Player;
-import com.gpl.rpg.AndorsTrail.model.actor.Skills;
import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap;
import com.gpl.rpg.AndorsTrail.model.map.MapObject;
import com.gpl.rpg.AndorsTrail.util.Coord;
@@ -64,7 +64,7 @@ public final class Controller {
view.effectController.waitForCurrentEffect();
final Player player = model.player;
int lostExp = player.levelExperience.current * Constants.PERCENT_EXP_LOST_WHEN_DIED / 100;
- lostExp -= lostExp * player.getSkillLevel(Skills.SKILL_LOWER_EXPLOSS) * Skills.PER_SKILLPOINT_INCREASE_EXPLOSS_PERCENT / 100;
+ lostExp -= lostExp * player.getSkillLevel(SkillCollection.SKILL_LOWER_EXPLOSS) * SkillCollection.PER_SKILLPOINT_INCREASE_EXPLOSS_PERCENT / 100;
if (lostExp < 0) lostExp = 0;
player.addExperience(-lostExp);
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/GameRoundController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/GameRoundController.java
index 34e51ecde..1b4053981 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/GameRoundController.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/GameRoundController.java
@@ -3,7 +3,7 @@ package com.gpl.rpg.AndorsTrail.controller;
import com.gpl.rpg.AndorsTrail.context.ViewContext;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
import com.gpl.rpg.AndorsTrail.model.ModelContainer;
-import com.gpl.rpg.AndorsTrail.model.actor.Skills;
+import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection;
import com.gpl.rpg.AndorsTrail.util.TimedMessageTask;
public final class GameRoundController implements TimedMessageTask.Callback {
@@ -67,7 +67,7 @@ public final class GameRoundController implements TimedMessageTask.Callback {
view.actorStatsController.applyConditionsToMonsters(model.currentMap, false);
view.actorStatsController.applyConditionsToPlayer(model.player, false);
- model.player.health.add(model.player.getSkillLevel(Skills.SKILL_REGENERATION) * Skills.PER_SKILLPOINT_INCREASE_REGENERATION, false);
+ model.player.health.add(model.player.getSkillLevel(SkillCollection.SKILL_REGENERATION) * SkillCollection.PER_SKILLPOINT_INCREASE_REGENERATION, false);
}
private void onNewTick() {
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java
index fc0c64740..b0d8ac0d9 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java
@@ -9,8 +9,8 @@ import com.gpl.rpg.AndorsTrail.context.ViewContext;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
import com.gpl.rpg.AndorsTrail.model.CombatTraits;
import com.gpl.rpg.AndorsTrail.model.ModelContainer;
+import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection;
import com.gpl.rpg.AndorsTrail.model.actor.Player;
-import com.gpl.rpg.AndorsTrail.model.actor.Skills;
import com.gpl.rpg.AndorsTrail.model.item.Inventory;
import com.gpl.rpg.AndorsTrail.model.item.ItemContainer;
import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse;
@@ -193,7 +193,7 @@ public final class ItemController {
private static int getMarketPriceFactor(Player player) {
return Constants.MARKET_PRICEFACTOR_PERCENT
- - player.getSkillLevel(Skills.SKILL_BARTER) * Skills.PER_SKILLPOINT_INCREASE_BARTER_PRICEFACTOR_PERCENTAGE;
+ - player.getSkillLevel(SkillCollection.SKILL_BARTER) * SkillCollection.PER_SKILLPOINT_INCREASE_BARTER_PRICEFACTOR_PERCENTAGE;
}
public static int getBuyingPrice(Player player, ItemType itemType) {
return itemType.baseMarketCost + itemType.baseMarketCost * getMarketPriceFactor(player) / 100;
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MonsterMovementController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MonsterMovementController.java
index 7ed77f392..d4346db4c 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MonsterMovementController.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MonsterMovementController.java
@@ -3,8 +3,8 @@ package com.gpl.rpg.AndorsTrail.controller;
import com.gpl.rpg.AndorsTrail.context.ViewContext;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
import com.gpl.rpg.AndorsTrail.model.ModelContainer;
+import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection;
import com.gpl.rpg.AndorsTrail.model.actor.Monster;
-import com.gpl.rpg.AndorsTrail.model.actor.Skills;
import com.gpl.rpg.AndorsTrail.model.map.MonsterSpawnArea;
import com.gpl.rpg.AndorsTrail.util.Coord;
@@ -40,7 +40,7 @@ public final class MonsterMovementController {
if (!m.isAgressive()) continue;
if (!m.rectPosition.isAdjacentTo(model.player.position)) continue;
- int aggressionChanceBias = model.player.getSkillLevel(Skills.SKILL_EVASION) * Skills.PER_SKILLPOINT_INCREASE_EVASION_MONSTER_ATTACK_CHANCE_PERCENTAGE;
+ int aggressionChanceBias = model.player.getSkillLevel(SkillCollection.SKILL_EVASION) * SkillCollection.PER_SKILLPOINT_INCREASE_EVASION_MONSTER_ATTACK_CHANCE_PERCENTAGE;
if (Constants.roll100(Constants.MONSTER_AGGRESSION_CHANCE_PERCENT - aggressionChanceBias)) {
view.combatController.monsterSteppedOnPlayer(m);
return;
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/SkillController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/SkillController.java
index c0c166343..66656b500 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/SkillController.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/SkillController.java
@@ -1,24 +1,29 @@
package com.gpl.rpg.AndorsTrail.controller;
+import android.content.res.Resources;
+import android.widget.ImageView;
+
+import com.gpl.rpg.AndorsTrail.R;
+import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection;
+import com.gpl.rpg.AndorsTrail.model.ability.SkillInfo;
import com.gpl.rpg.AndorsTrail.model.actor.Player;
-import com.gpl.rpg.AndorsTrail.model.actor.Skills;
import com.gpl.rpg.AndorsTrail.model.item.ItemTypeCollection;
import com.gpl.rpg.AndorsTrail.model.item.DropList.DropItem;
public final class SkillController {
public static void applySkillEffects(Player player) {
- player.traits.attackChance += Skills.PER_SKILLPOINT_INCREASE_WEAPON_CHANCE * player.getSkillLevel(Skills.SKILL_WEAPON_CHANCE);
- player.traits.damagePotential.addToMax(Skills.PER_SKILLPOINT_INCREASE_WEAPON_DAMAGE_MAX * player.getSkillLevel(Skills.SKILL_WEAPON_DMG));
- player.traits.damagePotential.add(Skills.PER_SKILLPOINT_INCREASE_WEAPON_DAMAGE_MIN * player.getSkillLevel(Skills.SKILL_WEAPON_DMG), false);
- player.traits.blockChance += Skills.PER_SKILLPOINT_INCREASE_DODGE * player.getSkillLevel(Skills.SKILL_DODGE);
- player.traits.damageResistance += Skills.PER_SKILLPOINT_INCREASE_BARKSKIN * player.getSkillLevel(Skills.SKILL_BARKSKIN);
+ player.traits.attackChance += SkillCollection.PER_SKILLPOINT_INCREASE_WEAPON_CHANCE * player.getSkillLevel(SkillCollection.SKILL_WEAPON_CHANCE);
+ player.traits.damagePotential.addToMax(SkillCollection.PER_SKILLPOINT_INCREASE_WEAPON_DAMAGE_MAX * player.getSkillLevel(SkillCollection.SKILL_WEAPON_DMG));
+ player.traits.damagePotential.add(SkillCollection.PER_SKILLPOINT_INCREASE_WEAPON_DAMAGE_MIN * player.getSkillLevel(SkillCollection.SKILL_WEAPON_DMG), false);
+ player.traits.blockChance += SkillCollection.PER_SKILLPOINT_INCREASE_DODGE * player.getSkillLevel(SkillCollection.SKILL_DODGE);
+ player.traits.damageResistance += SkillCollection.PER_SKILLPOINT_INCREASE_BARKSKIN * player.getSkillLevel(SkillCollection.SKILL_BARKSKIN);
if (player.traits.hasCriticalChanceEffect()) {
- player.traits.criticalChance += player.traits.criticalChance * Skills.PER_SKILLPOINT_INCREASE_MORE_CRITICALS_PERCENT * player.getSkillLevel(Skills.SKILL_MORE_CRITICALS) / 100;
+ player.traits.criticalChance += player.traits.criticalChance * SkillCollection.PER_SKILLPOINT_INCREASE_MORE_CRITICALS_PERCENT * player.getSkillLevel(SkillCollection.SKILL_MORE_CRITICALS) / 100;
}
if (player.traits.hasCriticalMultiplierEffect()) {
- player.traits.criticalMultiplier += player.traits.criticalMultiplier * Skills.PER_SKILLPOINT_INCREASE_BETTER_CRITICALS_PERCENT * player.getSkillLevel(Skills.SKILL_BETTER_CRITICALS) / 100;
+ player.traits.criticalMultiplier += player.traits.criticalMultiplier * SkillCollection.PER_SKILLPOINT_INCREASE_BETTER_CRITICALS_PERCENT * player.getSkillLevel(SkillCollection.SKILL_BETTER_CRITICALS) / 100;
}
- player.ap.addToMax(Skills.PER_SKILLPOINT_INCREASE_SPEED * player.getSkillLevel(Skills.SKILL_SPEED));
+ player.ap.addToMax(SkillCollection.PER_SKILLPOINT_INCREASE_SPEED * player.getSkillLevel(SkillCollection.SKILL_SPEED));
/*final int berserkLevel = player.getSkillLevel(Skills.SKILL_BERSERKER);
if (berserkLevel > 0) {
final int berserkHealth = player.health.max * Skills.BERSERKER_STARTS_AT_HEALTH_PERCENT / 100;
@@ -31,23 +36,23 @@ public final class SkillController {
}*/
}
- public static int getChanceRollBias(DropItem item, Player player) {
+ public static int getDropChanceRollBias(DropItem item, Player player) {
if (player == null) return 0;
if (item.itemType.id == ItemTypeCollection.ITEMTYPE_GOLD) {
- return getRollBias(item, player, Skills.SKILL_COINFINDER, Skills.PER_SKILLPOINT_INCREASE_COINFINDER_CHANCE_PERCENT);
+ return getRollBias(item, player, SkillCollection.SKILL_COINFINDER, SkillCollection.PER_SKILLPOINT_INCREASE_COINFINDER_CHANCE_PERCENT);
} else if (!item.itemType.isOrdinaryItem()) {
- return getRollBias(item, player, Skills.SKILL_MAGICFINDER, Skills.PER_SKILLPOINT_INCREASE_MAGICFINDER_CHANCE_PERCENT);
+ return getRollBias(item, player, SkillCollection.SKILL_MAGICFINDER, SkillCollection.PER_SKILLPOINT_INCREASE_MAGICFINDER_CHANCE_PERCENT);
} else {
return 0;
}
}
- public static int getQuantityRollBias(DropItem item, Player player) {
+ public static int getDropQuantityRollBias(DropItem item, Player player) {
if (player == null) return 0;
if (item.itemType.id != ItemTypeCollection.ITEMTYPE_GOLD) return 0;
- return getRollBias(item, player, Skills.SKILL_COINFINDER, Skills.PER_SKILLPOINT_INCREASE_COINFINDER_QUANTITY_PERCENT);
+ return getRollBias(item, player, SkillCollection.SKILL_COINFINDER, SkillCollection.PER_SKILLPOINT_INCREASE_COINFINDER_QUANTITY_PERCENT);
}
private static int getRollBias(DropItem item, Player player, int skill, int perSkillpointIncrease) {
@@ -55,4 +60,21 @@ public final class SkillController {
if (skillLevel <= 0) return 0;
return item.chance.current * skillLevel * perSkillpointIncrease / 100;
}
+
+
+ public static boolean canLevelupSkill(Player player, SkillInfo skill) {
+ if (player.availableSkillIncreases <= 0) return false;
+ if (skill.isQuestSkill) return false;
+ if (skill.hasMaxLevel()) {
+ int playerSkillLevel = player.getSkillLevel(skill.id);
+ if (playerSkillLevel >= skill.maxLevel) return false;
+ }
+ //if (skill.id == SkillCollection.SKILL_COINFINDER) return false;
+ //if (skill.id == SkillCollection.SKILL_DODGE) return false;
+ return true;
+ }
+
+ public static void setSkillIcon(ImageView iconImageView, int skillID, Resources res) {
+ iconImageView.setImageResource(R.drawable.ui_icon_skill);
+ }
}
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/SkillCollection.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/SkillCollection.java
new file mode 100644
index 000000000..0e1469006
--- /dev/null
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/SkillCollection.java
@@ -0,0 +1,172 @@
+package com.gpl.rpg.AndorsTrail.model.ability;
+
+import java.util.Collection;
+import java.util.HashMap;
+
+import android.content.res.Resources;
+
+import com.gpl.rpg.AndorsTrail.R;
+import com.gpl.rpg.AndorsTrail.controller.Constants;
+
+public final class SkillCollection {
+ public static final int SKILL_WEAPON_CHANCE = 0;
+ public static final int SKILL_WEAPON_DMG = 1;
+ public static final int SKILL_BARTER = 2;
+ public static final int SKILL_DODGE = 3; // + BC
+ public static final int SKILL_BARKSKIN = 4; // Dmg resist
+ public static final int SKILL_MORE_CRITICALS = 5;
+ public static final int SKILL_BETTER_CRITICALS = 6;
+ public static final int SKILL_SPEED = 7; // Raises max ap
+ public static final int SKILL_COINFINDER = 8;
+ public static final int SKILL_MORE_EXP = 9;
+ public static final int SKILL_CLEAVE = 10; // +10ap on kill
+ public static final int SKILL_EATER = 11; // +1hp per kill
+ public static final int SKILL_FORTITUDE = 12; // +N hp per levelup
+ public static final int SKILL_EVASION = 13; // increase successful flee chance & reduce chance of monster attack
+ public static final int SKILL_REGENERATION = 14; // +N hp per round
+ public static final int SKILL_LOWER_EXPLOSS = 15;
+ public static final int SKILL_MAGICFINDER = 16;
+ //public static final int SKILL_BERSERKER = 17; // <=20%hp increases AC and DMG
+
+ public static final int NUM_SKILLS = SKILL_MAGICFINDER+1;
+
+ //public static final int BERSERKER_STARTS_AT_HEALTH_PERCENT = 20;
+
+ public static final int PER_SKILLPOINT_INCREASE_WEAPON_CHANCE = 12;
+ public static final int PER_SKILLPOINT_INCREASE_WEAPON_DAMAGE_MAX = 1;
+ public static final int PER_SKILLPOINT_INCREASE_WEAPON_DAMAGE_MIN = 1;
+ public static final int PER_SKILLPOINT_INCREASE_DODGE = 9;
+ public static final int PER_SKILLPOINT_INCREASE_BARKSKIN = 1;
+ public static final int PER_SKILLPOINT_INCREASE_MORE_CRITICALS_PERCENT = 20;
+ public static final int PER_SKILLPOINT_INCREASE_BETTER_CRITICALS_PERCENT = 50;
+ public static final int PER_SKILLPOINT_INCREASE_SPEED = 1;
+ public static final int PER_SKILLPOINT_INCREASE_BARTER_PRICEFACTOR_PERCENTAGE = 5;
+ public static final int PER_SKILLPOINT_INCREASE_COINFINDER_CHANCE_PERCENT = 30;
+ public static final int PER_SKILLPOINT_INCREASE_MAGICFINDER_CHANCE_PERCENT = 100;
+ public static final int PER_SKILLPOINT_INCREASE_COINFINDER_QUANTITY_PERCENT = 50;
+ public static final int PER_SKILLPOINT_INCREASE_MORE_EXP_PERCENT = 10;
+ public static final int PER_SKILLPOINT_INCREASE_CLEAVE_AP = 10;
+ public static final int PER_SKILLPOINT_INCREASE_EATER_HEALTH = 1;
+ public static final int PER_SKILLPOINT_INCREASE_FORTITUDE_HEALTH = 2;
+ public static final int PER_SKILLPOINT_INCREASE_EVASION_FLEE_CHANCE_PERCENTAGE = 5;
+ public static final int PER_SKILLPOINT_INCREASE_EVASION_MONSTER_ATTACK_CHANCE_PERCENTAGE = 5;
+ public static final int PER_SKILLPOINT_INCREASE_REGENERATION = 1;
+ public static final int PER_SKILLPOINT_INCREASE_EXPLOSS_PERCENT = 20;
+ /*public static final int PER_SKILLPOINT_INCREASE_BERSERKER_WEAPON_CHANCE = 15;
+ public static final int PER_SKILLPOINT_INCREASE_BERSERKER_WEAPON_DAMAGE_MAX = 1;
+ public static final int PER_SKILLPOINT_INCREASE_BERSERKER_WEAPON_DAMAGE_MIN = 1;
+ public static final int PER_SKILLPOINT_INCREASE_BERSERKER_DODGE = 9;*/
+
+
+ private final HashMap skills = new HashMap();
+ private void initializeSkill(SkillInfo skill) {
+ skills.put(skill.id, skill);
+ }
+ public void initialize() {
+ initializeSkill(new SkillInfo(SKILL_WEAPON_CHANCE, SkillInfo.MAXLEVEL_NONE, false));
+ initializeSkill(new SkillInfo(SKILL_WEAPON_DMG, SkillInfo.MAXLEVEL_NONE, false));
+ initializeSkill(new SkillInfo(SKILL_BARTER, Constants.MARKET_PRICEFACTOR_PERCENT / PER_SKILLPOINT_INCREASE_BARTER_PRICEFACTOR_PERCENTAGE, false));
+ initializeSkill(new SkillInfo(SKILL_DODGE, SkillInfo.MAXLEVEL_NONE, false));
+ initializeSkill(new SkillInfo(SKILL_BARKSKIN, SkillInfo.MAXLEVEL_NONE, false));
+ initializeSkill(new SkillInfo(SKILL_MORE_CRITICALS, SkillInfo.MAXLEVEL_NONE, false));
+ initializeSkill(new SkillInfo(SKILL_BETTER_CRITICALS, SkillInfo.MAXLEVEL_NONE, false));
+ initializeSkill(new SkillInfo(SKILL_SPEED, SkillInfo.MAXLEVEL_NONE, false));
+ initializeSkill(new SkillInfo(SKILL_COINFINDER, SkillInfo.MAXLEVEL_NONE, false));
+ initializeSkill(new SkillInfo(SKILL_MORE_EXP, SkillInfo.MAXLEVEL_NONE, false));
+ initializeSkill(new SkillInfo(SKILL_CLEAVE, SkillInfo.MAXLEVEL_NONE, false));
+ initializeSkill(new SkillInfo(SKILL_EATER, SkillInfo.MAXLEVEL_NONE, false));
+ initializeSkill(new SkillInfo(SKILL_FORTITUDE, SkillInfo.MAXLEVEL_NONE, false));
+ initializeSkill(new SkillInfo(SKILL_EVASION, Constants.FLEE_FAIL_CHANCE_PERCENT / PER_SKILLPOINT_INCREASE_EVASION_FLEE_CHANCE_PERCENTAGE, false));
+ initializeSkill(new SkillInfo(SKILL_REGENERATION, SkillInfo.MAXLEVEL_NONE, false));
+ initializeSkill(new SkillInfo(SKILL_LOWER_EXPLOSS, 100 / PER_SKILLPOINT_INCREASE_EXPLOSS_PERCENT, false));
+ initializeSkill(new SkillInfo(SKILL_MAGICFINDER, SkillInfo.MAXLEVEL_NONE, false));
+ //initializeSkill(new SkillInfo(SKILL_BERSERKER, SkillInfo.MAXLEVEL_NONE);
+ }
+ public SkillInfo getSkill(int skillID) {
+ return skills.get(skillID);
+ }
+
+ public Collection getAllSkills() {
+ return skills.values();
+ }
+
+ public static String getSkillTitle(final int skill, final Resources res) {
+ return res.getString(getSkillTitleResourceID(skill));
+ }
+
+ private static int getSkillTitleResourceID(int skill) {
+ switch (skill) {
+ case SkillCollection.SKILL_WEAPON_CHANCE: return R.string.skill_title_weapon_chance;
+ case SkillCollection.SKILL_WEAPON_DMG: return R.string.skill_title_weapon_dmg;
+ case SkillCollection.SKILL_BARTER: return R.string.skill_title_barter;
+ case SkillCollection.SKILL_DODGE: return R.string.skill_title_dodge;
+ case SkillCollection.SKILL_BARKSKIN: return R.string.skill_title_barkskin;
+ case SkillCollection.SKILL_MORE_CRITICALS: return R.string.skill_title_more_criticals;
+ case SkillCollection.SKILL_BETTER_CRITICALS: return R.string.skill_title_better_criticals;
+ case SkillCollection.SKILL_SPEED: return R.string.skill_title_speed;
+ case SkillCollection.SKILL_COINFINDER: return R.string.skill_title_coinfinder;
+ case SkillCollection.SKILL_MORE_EXP: return R.string.skill_title_more_exp;
+ case SkillCollection.SKILL_CLEAVE: return R.string.skill_title_cleave;
+ case SkillCollection.SKILL_EATER: return R.string.skill_title_eater;
+ case SkillCollection.SKILL_FORTITUDE: return R.string.skill_title_fortitude;
+ case SkillCollection.SKILL_EVASION: return R.string.skill_title_evasion;
+ case SkillCollection.SKILL_REGENERATION: return R.string.skill_title_regeneration;
+ case SkillCollection.SKILL_LOWER_EXPLOSS: return R.string.skill_title_lower_exploss;
+ case SkillCollection.SKILL_MAGICFINDER: return R.string.skill_title_magicfinder;
+ default:
+ return -1;
+ }
+ }
+
+ public static String getSkillShortDescription(final int skill, final Resources res) {
+ return res.getString(getSkillShortDescriptionResourceID(skill));
+ }
+
+ private static int getSkillShortDescriptionResourceID(int skill) {
+ switch (skill) {
+ case SkillCollection.SKILL_WEAPON_CHANCE: return R.string.skill_shortdescription_weapon_chance;
+ case SkillCollection.SKILL_WEAPON_DMG: return R.string.skill_shortdescription_weapon_dmg;
+ case SkillCollection.SKILL_BARTER: return R.string.skill_shortdescription_barter;
+ case SkillCollection.SKILL_DODGE: return R.string.skill_shortdescription_dodge;
+ case SkillCollection.SKILL_BARKSKIN: return R.string.skill_shortdescription_barkskin;
+ case SkillCollection.SKILL_MORE_CRITICALS: return R.string.skill_shortdescription_more_criticals;
+ case SkillCollection.SKILL_BETTER_CRITICALS: return R.string.skill_shortdescription_better_criticals;
+ case SkillCollection.SKILL_SPEED: return R.string.skill_shortdescription_speed;
+ case SkillCollection.SKILL_COINFINDER: return R.string.skill_shortdescription_coinfinder;
+ case SkillCollection.SKILL_MORE_EXP: return R.string.skill_shortdescription_more_exp;
+ case SkillCollection.SKILL_CLEAVE: return R.string.skill_shortdescription_cleave;
+ case SkillCollection.SKILL_EATER: return R.string.skill_shortdescription_eater;
+ case SkillCollection.SKILL_FORTITUDE: return R.string.skill_shortdescription_fortitude;
+ case SkillCollection.SKILL_EVASION: return R.string.skill_shortdescription_evasion;
+ case SkillCollection.SKILL_REGENERATION: return R.string.skill_shortdescription_regeneration;
+ case SkillCollection.SKILL_LOWER_EXPLOSS: return R.string.skill_shortdescription_lower_exploss;
+ case SkillCollection.SKILL_MAGICFINDER: return R.string.skill_shortdescription_magicfinder;
+ default:
+ return -1;
+ }
+ }
+
+ public static String getSkillLongDescription(final int skill, final Resources res) {
+ switch (skill) {
+ case SkillCollection.SKILL_WEAPON_CHANCE: return res.getString(R.string.skill_longdescription_weapon_chance, SkillCollection.PER_SKILLPOINT_INCREASE_WEAPON_CHANCE);
+ case SkillCollection.SKILL_WEAPON_DMG: return res.getString(R.string.skill_longdescription_weapon_dmg, SkillCollection.PER_SKILLPOINT_INCREASE_WEAPON_DAMAGE_MIN);
+ case SkillCollection.SKILL_BARTER: return res.getString(R.string.skill_longdescription_barter, SkillCollection.PER_SKILLPOINT_INCREASE_BARTER_PRICEFACTOR_PERCENTAGE);
+ case SkillCollection.SKILL_DODGE: return res.getString(R.string.skill_longdescription_dodge, SkillCollection.PER_SKILLPOINT_INCREASE_DODGE);
+ case SkillCollection.SKILL_BARKSKIN: return res.getString(R.string.skill_longdescription_barkskin, SkillCollection.PER_SKILLPOINT_INCREASE_BARKSKIN);
+ case SkillCollection.SKILL_MORE_CRITICALS: return res.getString(R.string.skill_longdescription_more_criticals, SkillCollection.PER_SKILLPOINT_INCREASE_MORE_CRITICALS_PERCENT);
+ case SkillCollection.SKILL_BETTER_CRITICALS: return res.getString(R.string.skill_longdescription_better_criticals, SkillCollection.PER_SKILLPOINT_INCREASE_BETTER_CRITICALS_PERCENT);
+ case SkillCollection.SKILL_SPEED: return res.getString(R.string.skill_longdescription_speed, SkillCollection.PER_SKILLPOINT_INCREASE_SPEED);
+ case SkillCollection.SKILL_COINFINDER: return res.getString(R.string.skill_longdescription_coinfinder, SkillCollection.PER_SKILLPOINT_INCREASE_COINFINDER_CHANCE_PERCENT, SkillCollection.PER_SKILLPOINT_INCREASE_COINFINDER_QUANTITY_PERCENT);
+ case SkillCollection.SKILL_MORE_EXP: return res.getString(R.string.skill_longdescription_more_exp, SkillCollection.PER_SKILLPOINT_INCREASE_MORE_EXP_PERCENT);
+ case SkillCollection.SKILL_CLEAVE: return res.getString(R.string.skill_longdescription_cleave, SkillCollection.PER_SKILLPOINT_INCREASE_CLEAVE_AP);
+ case SkillCollection.SKILL_EATER: return res.getString(R.string.skill_longdescription_eater, SkillCollection.PER_SKILLPOINT_INCREASE_EATER_HEALTH);
+ case SkillCollection.SKILL_FORTITUDE: return res.getString(R.string.skill_longdescription_fortitude, SkillCollection.PER_SKILLPOINT_INCREASE_FORTITUDE_HEALTH);
+ case SkillCollection.SKILL_EVASION: return res.getString(R.string.skill_longdescription_evasion, SkillCollection.PER_SKILLPOINT_INCREASE_EVASION_FLEE_CHANCE_PERCENTAGE, SkillCollection.PER_SKILLPOINT_INCREASE_EVASION_MONSTER_ATTACK_CHANCE_PERCENTAGE);
+ case SkillCollection.SKILL_REGENERATION: return res.getString(R.string.skill_longdescription_regeneration, SkillCollection.PER_SKILLPOINT_INCREASE_REGENERATION);
+ case SkillCollection.SKILL_LOWER_EXPLOSS: return res.getString(R.string.skill_longdescription_lower_exploss, SkillCollection.PER_SKILLPOINT_INCREASE_EXPLOSS_PERCENT);
+ case SkillCollection.SKILL_MAGICFINDER: return res.getString(R.string.skill_longdescription_magicfinder, SkillCollection.PER_SKILLPOINT_INCREASE_MAGICFINDER_CHANCE_PERCENT);
+ default:
+ return "";
+ }
+ }
+}
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/SkillInfo.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/SkillInfo.java
new file mode 100644
index 000000000..87e25bc48
--- /dev/null
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/SkillInfo.java
@@ -0,0 +1,35 @@
+package com.gpl.rpg.AndorsTrail.model.ability;
+
+public class SkillInfo {
+ public static final int MAXLEVEL_NONE = -1;
+ public final int id;
+ public final int maxLevel;
+ public final boolean isQuestSkill;
+ public SkillInfo(int id, int maxLevel, boolean isQuestSkill) {
+ this.id = id;
+ this.maxLevel = maxLevel;
+ this.isQuestSkill = isQuestSkill;
+ }
+
+ public boolean hasMaxLevel() {
+ if (maxLevel == MAXLEVEL_NONE) return false;
+ else return true;
+ }
+
+ public boolean hasLevelupRequirements() {
+ return false;
+ }
+
+ /*private static final class SkillLevelRequirement {
+ public static final int REQUIREMENT_TYPE_SKILL_LEVEL = 0;
+ public static final int REQUIREMENT_TYPE_EXPERIENCE_LEVEL = 1;
+ public static final int REQUIREMENT_TYPE_COMBAT_STAT = 2;
+ public final int requirementType;
+ //public final int ;
+ public final int value;
+ }
+
+ public static final class Stats {
+ public static final int STAT_MAX_HP = 0;
+ }*/
+}
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java
index 8099bf35a..90b31dc9e 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java
@@ -6,6 +6,7 @@ import java.io.IOException;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
import com.gpl.rpg.AndorsTrail.controller.Constants;
+import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection;
import com.gpl.rpg.AndorsTrail.model.item.Loot;
import com.gpl.rpg.AndorsTrail.util.Coord;
import com.gpl.rpg.AndorsTrail.util.CoordRect;
@@ -29,7 +30,7 @@ public final class Monster extends Actor {
public void createLoot(Loot container, Player player) {
int exp = monsterType.exp;
- exp += exp * player.getSkillLevel(Skills.SKILL_MORE_EXP) * Skills.PER_SKILLPOINT_INCREASE_MORE_EXP_PERCENT / 100;
+ exp += exp * player.getSkillLevel(SkillCollection.SKILL_MORE_EXP) * SkillCollection.PER_SKILLPOINT_INCREASE_MORE_EXP_PERCENT / 100;
container.exp += exp;
if (monsterType.dropList == null) return;
monsterType.dropList.createRandomLoot(container, player);
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java
index caec5ac68..f7566bc38 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java
@@ -10,6 +10,7 @@ import java.util.Map.Entry;
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
import com.gpl.rpg.AndorsTrail.context.WorldContext;
import com.gpl.rpg.AndorsTrail.controller.ActorStatsController;
+import com.gpl.rpg.AndorsTrail.controller.Constants;
import com.gpl.rpg.AndorsTrail.model.CombatTraits;
import com.gpl.rpg.AndorsTrail.model.item.DropListCollection;
import com.gpl.rpg.AndorsTrail.model.item.Inventory;
@@ -32,9 +33,10 @@ public final class Player extends Actor {
private final HashMap > questProgress = new HashMap >();
public int useItemCost;
public int reequipCost;
- private final int[] skillLevels = new int[Skills.NUM_SKILLS];
+ private final HashMap skillLevels = new HashMap();
public String spawnMap;
public String spawnPlace;
+ public int availableSkillIncreases = 0;
public Player() {
super(new ActorTraits(TileStore.CHAR_HERO, new Size(1, 1), new CombatTraits(), DEFAULT_PLAYER_MOVECOST, null), true);
@@ -66,6 +68,8 @@ public final class Player extends Actor {
level = 1;
totalExperience = 1;
+ availableSkillIncreases = 0;
+ skillLevels.clear();
recalculateLevelExperience();
Loot startItems = new Loot();
@@ -107,8 +111,6 @@ public final class Player extends Actor {
levelExperience.add(v, true);
}
-
-
private static int getRequiredExperience(int currentLevel) {
int v = 0;
for(int i = 1; i < currentLevel; ++i) {
@@ -127,14 +129,33 @@ public final class Player extends Actor {
return levelExperience.isMax();
}
- public int getSkillLevel(int skill) {
- return skillLevels[skill];
+ public int getSkillLevel(int skillID) {
+ if (!skillLevels.containsKey(skillID)) return 0;
+ else return skillLevels.get(skillID);
}
- public boolean hasSkill(int skill) {
- return skillLevels[skill] > 0;
+ public boolean hasSkill(int skillID) {
+ return getSkillLevel(skillID) > 0;
}
- public void addSkillLevel(int skill) {
- skillLevels[skill] += 1;
+ public void addSkillLevel(int skillID) {
+ if (!hasAvailableSkillpoints()) return;
+ if (!skillLevels.containsKey(skillID)) skillLevels.put(skillID, 1);
+ else skillLevels.put(skillID, skillLevels.get(skillID) + 1);
+ --availableSkillIncreases;
+ ActorStatsController.recalculatePlayerCombatTraits(this);
+ }
+ public boolean nextLevelAddsNewSkillpoint() {
+ return thisLevelAddsNewSkillpoint(level + 1);
+ }
+ public static boolean thisLevelAddsNewSkillpoint(int level) {
+ return ((level - Constants.FIRST_SKILL_POINT_IS_GIVEN_AT_LEVEL) % Constants.NEW_SKILL_POINT_EVERY_N_LEVELS == 0);
+ }
+ public static int getExpectedNumberOfSkillpointsForLevel(int level) {
+ level -= Constants.FIRST_SKILL_POINT_IS_GIVEN_AT_LEVEL;
+ if (level < 0) return 0;
+ return 1 + (int) Math.floor((float) level / Constants.NEW_SKILL_POINT_EVERY_N_LEVELS);
+ }
+ public boolean hasAvailableSkillpoints() {
+ return availableSkillIncreases > 0;
}
@@ -199,7 +220,12 @@ public final class Player extends Actor {
this.reequipCost = src.readInt();
final int size2 = src.readInt();
for(int i = 0; i < size2; ++i) {
- this.skillLevels[i] = src.readInt();
+ if (fileversion <= 21) {
+ this.skillLevels.put(i, src.readInt());
+ } else {
+ final int skillID = src.readInt();
+ this.skillLevels.put(skillID, src.readInt());
+ }
}
this.spawnMap = src.readUTF();
this.spawnPlace = src.readUTF();
@@ -224,7 +250,11 @@ public final class Player extends Actor {
}
}
- ActorStatsController.recalculatePlayerCombatTraits(this);
+ if (fileversion <= 21) {
+ this.availableSkillIncreases = getExpectedNumberOfSkillpointsForLevel(this.level);
+ } else {
+ this.availableSkillIncreases = src.readInt();
+ }
}
public void writeToParcel(DataOutputStream dest, int flags) throws IOException {
@@ -236,9 +266,10 @@ public final class Player extends Actor {
inventory.writeToParcel(dest, flags);
dest.writeInt(useItemCost);
dest.writeInt(reequipCost);
- dest.writeInt(Skills.NUM_SKILLS);
- for(int i = 0; i < Skills.NUM_SKILLS; ++i) {
- dest.writeInt(this.skillLevels[i]);
+ dest.writeInt(skillLevels.size());
+ for (Entry skillLevel: skillLevels.entrySet()) {
+ dest.writeInt(skillLevel.getKey());
+ dest.writeInt(skillLevel.getValue());
}
dest.writeUTF(spawnMap);
dest.writeUTF(spawnPlace);
@@ -250,6 +281,7 @@ public final class Player extends Actor {
dest.writeInt(progress);
}
}
+ dest.writeInt(availableSkillIncreases);
}
}
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Skills.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Skills.java
deleted file mode 100644
index 3287acdfb..000000000
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Skills.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.gpl.rpg.AndorsTrail.model.actor;
-
-public final class Skills {
- public static final int SKILL_WEAPON_CHANCE = 0;
- public static final int SKILL_WEAPON_DMG = 1;
- public static final int SKILL_BARTER = 2;
- public static final int SKILL_DODGE = 3; // + BC
- public static final int SKILL_BARKSKIN = 4; // Dmg resist
- public static final int SKILL_MORE_CRITICALS = 5;
- public static final int SKILL_BETTER_CRITICALS = 6;
- public static final int SKILL_SPEED = 7; // Raises max ap
- public static final int SKILL_COINFINDER = 8;
- public static final int SKILL_MORE_EXP = 9;
- public static final int SKILL_CLEAVE = 10; // +10ap on kill
- public static final int SKILL_EATER = 11; // +1hp per kill
- //public static final int SKILL_BERSERKER = 12; // <=20%hp increases AC and DMG
- public static final int SKILL_FORTITUDE = 13; // +N hp per levelup
- public static final int SKILL_EVASION = 14; // increase successful flee chance & reduce chance of monster attack
- public static final int SKILL_REGENERATION = 15; // +N hp per round
- public static final int SKILL_LOWER_EXPLOSS = 16;
- public static final int SKILL_MAGICFINDER = 17;
-
- public static final int NUM_SKILLS = SKILL_MAGICFINDER+1;
-
- //public static final int BERSERKER_STARTS_AT_HEALTH_PERCENT = 20;
-
- public static final int PER_SKILLPOINT_INCREASE_WEAPON_CHANCE = 15;
- public static final int PER_SKILLPOINT_INCREASE_WEAPON_DAMAGE_MAX = 1;
- public static final int PER_SKILLPOINT_INCREASE_WEAPON_DAMAGE_MIN = 1;
- public static final int PER_SKILLPOINT_INCREASE_DODGE = 9;
- public static final int PER_SKILLPOINT_INCREASE_BARKSKIN = 1;
- public static final int PER_SKILLPOINT_INCREASE_MORE_CRITICALS_PERCENT = 20;
- public static final int PER_SKILLPOINT_INCREASE_BETTER_CRITICALS_PERCENT = 50;
- public static final int PER_SKILLPOINT_INCREASE_SPEED = 1;
- /*public static final int PER_SKILLPOINT_INCREASE_BERSERKER_WEAPON_CHANCE = 15;
- public static final int PER_SKILLPOINT_INCREASE_BERSERKER_WEAPON_DAMAGE_MAX = 1;
- public static final int PER_SKILLPOINT_INCREASE_BERSERKER_WEAPON_DAMAGE_MIN = 1;
- public static final int PER_SKILLPOINT_INCREASE_BERSERKER_DODGE = 9;*/
- public static final int PER_SKILLPOINT_INCREASE_BARTER_PRICEFACTOR_PERCENTAGE = 5;
- public static final int PER_SKILLPOINT_INCREASE_COINFINDER_CHANCE_PERCENT = 50;
- public static final int PER_SKILLPOINT_INCREASE_MAGICFINDER_CHANCE_PERCENT = 100;
- public static final int PER_SKILLPOINT_INCREASE_COINFINDER_QUANTITY_PERCENT = 100;
- public static final int PER_SKILLPOINT_INCREASE_MORE_EXP_PERCENT = 10;
- public static final int PER_SKILLPOINT_INCREASE_EATER_HEALTH = 1;
- public static final int PER_SKILLPOINT_INCREASE_FORTITUDE_HEALTH = 2;
- public static final int PER_SKILLPOINT_INCREASE_EVASION_FLEE_CHANCE_PERCENTAGE = 5;
- public static final int PER_SKILLPOINT_INCREASE_EVASION_MONSTER_ATTACK_CHANCE_PERCENTAGE = 5;
- public static final int PER_SKILLPOINT_INCREASE_REGENERATION = 1;
- public static final int PER_SKILLPOINT_INCREASE_EXPLOSS_PERCENT = 30;
-}
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/StatusEffect.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/StatusEffect.java
deleted file mode 100644
index b53a1e321..000000000
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/StatusEffect.java
+++ /dev/null
@@ -1,2 +0,0 @@
-package com.gpl.rpg.AndorsTrail.model.actor;
-
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/DropList.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/DropList.java
index 06f4214fc..fa32185f1 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/DropList.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/DropList.java
@@ -22,10 +22,10 @@ public final class DropList {
public void createRandomLoot(Loot loot, Player player) {
for (DropItem item : items) {
- final int chanceRollBias = SkillController.getChanceRollBias(item, player);
+ final int chanceRollBias = SkillController.getDropChanceRollBias(item, player);
if (Constants.rollResult(item.chance, chanceRollBias)) {
- final int quantityRollBias = SkillController.getQuantityRollBias(item, player);
+ final int quantityRollBias = SkillController.getDropQuantityRollBias(item, player);
int quantity = Constants.rollValue(item.quantity, quantityRollBias);
if (quantity != 0) {
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java
index 780f4aef2..a06c0dde2 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java
@@ -33,7 +33,7 @@ public final class ResourceLoader {
/*tiles.iconID_CHAR_HERO = */loader.prepareTileID(R.drawable.char_hero, 0);
/*tiles.iconID_selection_red = */loader.prepareTileID(R.drawable.ui_selections, 0);
/*tiles.iconID_selection_yellow = */loader.prepareTileID(R.drawable.ui_selections, 1);
- /*tiles.iconID_groundbag = */loader.prepareTileID(R.drawable.map_tiles_2_7, 13+16*0);
+ /*tiles.iconID_groundbag = */loader.prepareTileID(R.drawable.ui_icon_equipment, 0);
/*tiles.iconID_boxopened = */loader.prepareTileID(R.drawable.items_tiles, 8+14*29);
/*tiles.iconID_boxclosed = */loader.prepareTileID(R.drawable.items_tiles, 7+14*29);
/*tiles.iconID_selection_blue = */loader.prepareTileID(R.drawable.ui_selections, 2);
@@ -42,6 +42,11 @@ public final class ResourceLoader {
// ========================================================================
+ // Load skills
+ world.skills.initialize();
+
+
+ // ========================================================================
// Load condition types
final TypedArray conditionsToLoad = r.obtainTypedArray(actorConditionsResourceId);
for (int i = 0; i < conditionsToLoad.length(); ++i) {
@@ -146,6 +151,7 @@ public final class ResourceLoader {
loader.prepareTileset(R.drawable.char_hero, "char_hero", src_sz1x1, defaultTileSize);
loader.prepareTileset(R.drawable.ui_selections, "ui_selections", new Size(5, 1), defaultTileSize);
+ loader.prepareTileset(R.drawable.ui_icon_equipment, "ui_icon_equipment", src_sz1x1, defaultTileSize);
loader.prepareTileset(R.drawable.items_tiles, "items_tiles", new Size(14, 30), defaultTileSize);
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/SkillListAdapater.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/SkillListAdapater.java
new file mode 100644
index 000000000..6add38c22
--- /dev/null
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/SkillListAdapater.java
@@ -0,0 +1,80 @@
+package com.gpl.rpg.AndorsTrail.view;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import com.gpl.rpg.AndorsTrail.R;
+import com.gpl.rpg.AndorsTrail.controller.SkillController;
+import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection;
+import com.gpl.rpg.AndorsTrail.model.ability.SkillInfo;
+import com.gpl.rpg.AndorsTrail.model.actor.Player;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+public final class SkillListAdapater extends ArrayAdapter {
+ private final Resources r;
+ private final Player player;
+
+ public SkillListAdapater(Context context, Collection skills, Player player) {
+ super(context, 0, filterNondisplayedSkills(skills, player));
+ this.r = context.getResources();
+ this.player = player;
+ }
+
+ private static List filterNondisplayedSkills(Collection skills, Player player) {
+ final ArrayList result = new ArrayList();
+ for (SkillInfo skill : skills) {
+ if (shouldDisplaySkill(skill, player)) result.add(skill);
+ }
+ return result;
+ }
+
+ private static boolean shouldDisplaySkill(SkillInfo skill, Player player) {
+ if (player.hasSkill(skill.id)) return true;
+ if (skill.isQuestSkill) return false;
+ return true;
+ }
+
+ @Override
+ public View getView(final int position, View convertView, ViewGroup parent) {
+ final SkillInfo skill = getItem(position);
+ final int skillID = skill.id;
+
+ View result = convertView;
+ if (result == null) {
+ result = View.inflate(getContext(), R.layout.skill_listentry_view, null);
+ }
+
+ final ImageView icon = (ImageView) result.findViewById(R.id.skillentry_icon);
+ final TextView title = (TextView) result.findViewById(R.id.skillentry_title);
+ final TextView description = (TextView) result.findViewById(R.id.skillentry_description);
+
+ SkillController.setSkillIcon(icon, skillID, r);
+ String skillTitle = SkillCollection.getSkillTitle(skillID, r);
+ final int skillLevel = player.getSkillLevel(skillID);
+ if (skillLevel > 0) {
+ skillTitle += " (" + skillLevel + ")";
+ }
+ title.setText(skillTitle);
+ description.setText(SkillCollection.getSkillShortDescription(skillID, r));
+
+ boolean enabled = true;
+ if (player.hasAvailableSkillpoints()) {
+ enabled = SkillController.canLevelupSkill(player, skill);
+ } else {
+ enabled = player.hasSkill(skillID);
+ }
+ icon.setEnabled(enabled);
+ title.setEnabled(enabled);
+ description.setEnabled(enabled);
+
+ return result;
+ }
+}