rubywarrior-i18n 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +38 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +44 -0
- data/LICENSE +20 -0
- data/README.md +199 -0
- data/Rakefile +17 -0
- data/bin/rubywarrior +5 -0
- data/features/command_options.feature +46 -0
- data/features/levels.feature +71 -0
- data/features/profiles.feature +56 -0
- data/features/step_definitions/common_steps.rb +19 -0
- data/features/step_definitions/interaction_steps.rb +65 -0
- data/features/support/env.rb +12 -0
- data/features/support/mockio.rb +57 -0
- data/features/towers.feature +14 -0
- data/i18n/en.yml +232 -0
- data/i18n/es.yml +233 -0
- data/lib/ruby_warrior.rb +53 -0
- data/lib/ruby_warrior/abilities/attack.rb +25 -0
- data/lib/ruby_warrior/abilities/base.rb +44 -0
- data/lib/ruby_warrior/abilities/bind.rb +20 -0
- data/lib/ruby_warrior/abilities/detonate.rb +34 -0
- data/lib/ruby_warrior/abilities/direction_of.rb +13 -0
- data/lib/ruby_warrior/abilities/direction_of_stairs.rb +13 -0
- data/lib/ruby_warrior/abilities/distance_of.rb +13 -0
- data/lib/ruby_warrior/abilities/explode.rb +28 -0
- data/lib/ruby_warrior/abilities/feel.rb +14 -0
- data/lib/ruby_warrior/abilities/form.rb +25 -0
- data/lib/ruby_warrior/abilities/health.rb +13 -0
- data/lib/ruby_warrior/abilities/listen.rb +15 -0
- data/lib/ruby_warrior/abilities/look.rb +16 -0
- data/lib/ruby_warrior/abilities/pivot.rb +17 -0
- data/lib/ruby_warrior/abilities/rescue.rb +24 -0
- data/lib/ruby_warrior/abilities/rest.rb +20 -0
- data/lib/ruby_warrior/abilities/shoot.rb +24 -0
- data/lib/ruby_warrior/abilities/walk.rb +21 -0
- data/lib/ruby_warrior/config.rb +22 -0
- data/lib/ruby_warrior/core_additions.rb +29 -0
- data/lib/ruby_warrior/floor.rb +71 -0
- data/lib/ruby_warrior/game.rb +209 -0
- data/lib/ruby_warrior/level.rb +123 -0
- data/lib/ruby_warrior/level_loader.rb +56 -0
- data/lib/ruby_warrior/player_generator.rb +41 -0
- data/lib/ruby_warrior/position.rb +82 -0
- data/lib/ruby_warrior/profile.rb +120 -0
- data/lib/ruby_warrior/runner.rb +34 -0
- data/lib/ruby_warrior/space.rb +71 -0
- data/lib/ruby_warrior/tower.rb +14 -0
- data/lib/ruby_warrior/turn.rb +38 -0
- data/lib/ruby_warrior/ui.rb +54 -0
- data/lib/ruby_warrior/units/archer.rb +34 -0
- data/lib/ruby_warrior/units/base.rb +100 -0
- data/lib/ruby_warrior/units/captive.rb +17 -0
- data/lib/ruby_warrior/units/golem.rb +20 -0
- data/lib/ruby_warrior/units/sludge.rb +30 -0
- data/lib/ruby_warrior/units/thick_sludge.rb +13 -0
- data/lib/ruby_warrior/units/warrior.rb +73 -0
- data/lib/ruby_warrior/units/wizard.rb +34 -0
- data/lib/ruby_warrior/version.rb +3 -0
- data/spec/fixtures/short-tower/level_001.rb +15 -0
- data/spec/fixtures/short-tower/level_002.rb +15 -0
- data/spec/fixtures/walking_player.rb +5 -0
- data/spec/ruby_warrior/abilities/attack_spec.rb +51 -0
- data/spec/ruby_warrior/abilities/base_spec.rb +38 -0
- data/spec/ruby_warrior/abilities/bind_spec.rb +19 -0
- data/spec/ruby_warrior/abilities/direction_of_spec.rb +13 -0
- data/spec/ruby_warrior/abilities/direction_of_stairs_spec.rb +13 -0
- data/spec/ruby_warrior/abilities/distance_of_spec.rb +13 -0
- data/spec/ruby_warrior/abilities/explode_spec.rb +32 -0
- data/spec/ruby_warrior/abilities/feel_spec.rb +13 -0
- data/spec/ruby_warrior/abilities/form_spec.rb +48 -0
- data/spec/ruby_warrior/abilities/health_spec.rb +13 -0
- data/spec/ruby_warrior/abilities/listen_spec.rb +17 -0
- data/spec/ruby_warrior/abilities/look_spec.rb +15 -0
- data/spec/ruby_warrior/abilities/pivot_spec.rb +18 -0
- data/spec/ruby_warrior/abilities/rescue_spec.rb +40 -0
- data/spec/ruby_warrior/abilities/rest_spec.rb +29 -0
- data/spec/ruby_warrior/abilities/shoot_spec.rb +22 -0
- data/spec/ruby_warrior/abilities/throw_spec.rb +46 -0
- data/spec/ruby_warrior/abilities/walk_spec.rb +25 -0
- data/spec/ruby_warrior/core_additions_spec.rb +7 -0
- data/spec/ruby_warrior/floor_spec.rb +81 -0
- data/spec/ruby_warrior/game_spec.rb +119 -0
- data/spec/ruby_warrior/level_loader_spec.rb +54 -0
- data/spec/ruby_warrior/level_spec.rb +203 -0
- data/spec/ruby_warrior/player_generator_spec.rb +12 -0
- data/spec/ruby_warrior/position_spec.rb +108 -0
- data/spec/ruby_warrior/profile_spec.rb +171 -0
- data/spec/ruby_warrior/space_spec.rb +190 -0
- data/spec/ruby_warrior/tower_spec.rb +15 -0
- data/spec/ruby_warrior/turn_spec.rb +42 -0
- data/spec/ruby_warrior/ui_spec.rb +93 -0
- data/spec/ruby_warrior/units/archer_spec.rb +23 -0
- data/spec/ruby_warrior/units/base_spec.rb +133 -0
- data/spec/ruby_warrior/units/captive_spec.rb +23 -0
- data/spec/ruby_warrior/units/golem_spec.rb +28 -0
- data/spec/ruby_warrior/units/sludge_spec.rb +27 -0
- data/spec/ruby_warrior/units/thick_sludge_spec.rb +19 -0
- data/spec/ruby_warrior/units/warrior_spec.rb +65 -0
- data/spec/ruby_warrior/units/wizard_spec.rb +23 -0
- data/spec/spec_helper.rb +10 -0
- data/templates/README.erb +33 -0
- data/templates/player.rb +5 -0
- data/towers/beginner/level_001.rb +18 -0
- data/towers/beginner/level_002.rb +19 -0
- data/towers/beginner/level_003.rb +23 -0
- data/towers/beginner/level_004.rb +20 -0
- data/towers/beginner/level_005.rb +24 -0
- data/towers/beginner/level_006.rb +21 -0
- data/towers/beginner/level_007.rb +20 -0
- data/towers/beginner/level_008.rb +23 -0
- data/towers/beginner/level_009.rb +22 -0
- data/towers/intermediate/level_001.rb +20 -0
- data/towers/intermediate/level_002.rb +22 -0
- data/towers/intermediate/level_003.rb +25 -0
- data/towers/intermediate/level_004.rb +26 -0
- data/towers/intermediate/level_005.rb +21 -0
- data/towers/intermediate/level_006.rb +25 -0
- data/towers/intermediate/level_007.rb +27 -0
- data/towers/intermediate/level_008.rb +25 -0
- data/towers/intermediate/level_009.rb +33 -0
- metadata +226 -0
data/i18n/es.yml
ADDED
@@ -0,0 +1,233 @@
|
|
1
|
+
runner:
|
2
|
+
options:
|
3
|
+
banner: "Uso: rubywarrior [opciones]"
|
4
|
+
directory: Ejecutar bajo el directorio especificado
|
5
|
+
level: Practicar nivel en Modo Épico
|
6
|
+
skip: Ignorar datos ingresados por el usuario
|
7
|
+
time: Retardo en segundos de cada turno
|
8
|
+
help: Muestra este mensaje
|
9
|
+
welcome: Bienvenido a Guerrero Ruby
|
10
|
+
directory:
|
11
|
+
not_found: No se encontró el directorio rubywarrior, quieres crearlo?
|
12
|
+
cannot_continue: No se puede continuar sin el directorio.
|
13
|
+
practice_level:
|
14
|
+
unable_not_in_epic_mode: No se puede practicar nivel si no se está en Modo Épico, no uses la opción -l.
|
15
|
+
first_level_generated: El primer nivel ha sido generado. Consulta las instrucciones en el archivo rubywarrior/%1/README.
|
16
|
+
mode:
|
17
|
+
back_to_normal: Se ha añadido otro nivel desde que empezaste en Modo Épico, regresando al modo normal.
|
18
|
+
level:
|
19
|
+
level: nivel
|
20
|
+
number: "Nivel %1:"
|
21
|
+
starting: Empezando el Nivel %1
|
22
|
+
failed: Lo siento, no has logrado pasar el nivel %1. Edita player.rb e intenta de nuevo.
|
23
|
+
clues: Te gustaría leer más pistas para pasar este nivel?
|
24
|
+
continue_next: Quieres avanzar al siguiente nivel?
|
25
|
+
continue_epic_mode: Quieres avanzar al Modo Épico?
|
26
|
+
staying_on_current: Nos quedaremos en el nivel actual. Intenta ganar más puntos la siguiente vez
|
27
|
+
to_practice: "Para practicar un nivel usa la opción -l: por ejemplo: $ rubywarrior -l 3"
|
28
|
+
score: Marcador del nivel
|
29
|
+
grade: Grado del nivel
|
30
|
+
beginner: principiante
|
31
|
+
intermediate: intermedio
|
32
|
+
short: corto
|
33
|
+
tower: torre
|
34
|
+
profile:
|
35
|
+
profile: perfil
|
36
|
+
new: Nuevo perfil
|
37
|
+
replace_existing_for_tower: Estás seguro de querer reemplazar tu perfil existente para esta torre?
|
38
|
+
replace_existing: Reemplazando perfil existente.
|
39
|
+
not_replacing: Omitiendo reemplazo del perfil.
|
40
|
+
stairs:
|
41
|
+
stairs: escaleras
|
42
|
+
found: Excelente! Has encontrado las escaleras.
|
43
|
+
end_of_game: FELICIDADES! Has escalado a la cima de la torre y rescatado a la hermosa Ruby.
|
44
|
+
readme:
|
45
|
+
see_updated: Se ha actualizado el archivo README en el directorio rubywarrior/%1. Consulta las nuevas instrucciones.
|
46
|
+
to_play_epic_mode: Ejecuta rubywarrior de nuevo para jugar en Modo Épico.
|
47
|
+
game:
|
48
|
+
tower: torre
|
49
|
+
average_grade_for_tower: "Tu grado promedio para esta torre es: %1 "
|
50
|
+
warrior:
|
51
|
+
warrior: guerrero
|
52
|
+
enter_name: "Escribe el nombre de tu guerrero: "
|
53
|
+
earns_points: gana %1 puntos
|
54
|
+
does_nothing: no hace nada
|
55
|
+
abilities: Habilidades del guerrero
|
56
|
+
score:
|
57
|
+
score: marcador
|
58
|
+
epic: marcador Modo Épico
|
59
|
+
first: primer marcador
|
60
|
+
total: Marcador total
|
61
|
+
answer:
|
62
|
+
yes_no: sn
|
63
|
+
yes_initial: s
|
64
|
+
no_initial: n
|
65
|
+
item:
|
66
|
+
choose_typing_number: "Escoge %1 escribiendo un número: "
|
67
|
+
turn: turno
|
68
|
+
only_one_turn: Sólo se puede realizar una acción por turno.
|
69
|
+
bonus:
|
70
|
+
time: Bono de tiempo
|
71
|
+
clear: Bono por despejar el área
|
72
|
+
wall: la pared
|
73
|
+
nothing: nada
|
74
|
+
sludge:
|
75
|
+
name: monstruo
|
76
|
+
first_letter: s
|
77
|
+
archer:
|
78
|
+
name: arquero
|
79
|
+
first_letter: a
|
80
|
+
thicksludge:
|
81
|
+
name: monstruo gigante
|
82
|
+
first_letter: S
|
83
|
+
captive:
|
84
|
+
name: rehen
|
85
|
+
first_letter: R
|
86
|
+
wizard:
|
87
|
+
name: mago
|
88
|
+
first_letter: M
|
89
|
+
golem:
|
90
|
+
name: golem
|
91
|
+
first_letter: G
|
92
|
+
abilities: Habilidades del Golem
|
93
|
+
take_damage_health_left: recibe %1 de daño, le restan %2 puntos de salud
|
94
|
+
player:
|
95
|
+
dies: ha muerto!
|
96
|
+
released_from_bonds: desatado
|
97
|
+
direction:
|
98
|
+
unknown: "Dirección desconocida: %1. Debería ser :forward, :backward, :left o :right."
|
99
|
+
move_forward_default: Camina hacia la dirección especificada (adelante, por defecto).
|
100
|
+
bumps_into: choca con
|
101
|
+
forward: adelante
|
102
|
+
backward: atrás
|
103
|
+
left: la izquierda
|
104
|
+
right: la derecha
|
105
|
+
walk:
|
106
|
+
walk: caminar
|
107
|
+
s: camina hacia
|
108
|
+
attack:
|
109
|
+
in_given_direction: Ataca a un enemigo que está en la dirección especificada (adelante, por defecto).
|
110
|
+
and_hits: ataca hacia %1 y golpea a %2
|
111
|
+
and_hits_nothing: ataca hacia %1 y no golpea a nadie
|
112
|
+
feel:
|
113
|
+
description: Devuelve el nombre de la unidad (si existe alguna) que esté en la dirección especificada (adelante, por defecto).
|
114
|
+
rest:
|
115
|
+
description: Recupera 10% de salud, pero no hace nada más.
|
116
|
+
receives_health: recibe %1 de salud por descansar, ahora tiene %2 de salud
|
117
|
+
fit_fiddle: está en buen estado físico
|
118
|
+
health:
|
119
|
+
description: Regresa un número entero representando tu salud.
|
120
|
+
look:
|
121
|
+
description: Regresa una matriz de hasta tres Espacios en la dirección especificada (adelante, por defecto).
|
122
|
+
shoot:
|
123
|
+
description: Dispara arco y flecha en la dirección especificada (adelante, por defecto).
|
124
|
+
and_hits: dispara hacia %1 y golpea a %2
|
125
|
+
and_hits_nothing: dispara y no golpea a nadie
|
126
|
+
rescue:
|
127
|
+
description: Rescata a rehen de su prisión (ganando 20 puntos) en la dirección especificada (adelante, por defecto).
|
128
|
+
unbinds_and_rescues: desata a %1 y rescata a %2
|
129
|
+
unbinds_and_rescues_nothing: desata a %1 pero no restaca a nadie
|
130
|
+
rotate:
|
131
|
+
description: Gira hacia :left, :right or :backward (adelante, por defecto)
|
132
|
+
pivots: gira hacia
|
133
|
+
distance_of:
|
134
|
+
description: Pasa un espacio (Space) como argumento y regresará un número entero representando la distancia hacie ese espacio.
|
135
|
+
bind:
|
136
|
+
description: Paraliza a una unidad en la dirección dada para evitar que se mueva (adelante, por defecto).
|
137
|
+
and_restricts: ata a %1 y restringe restricts %2
|
138
|
+
and_restricts_nothing: ata a %1 y no restringe nada
|
139
|
+
listen:
|
140
|
+
description: Regresa una matriz con todos los espacios los cuales tengan unidades (enemigos, rehenes, etc).
|
141
|
+
direction_of_stairs:
|
142
|
+
description: Regresa la dirección (:left, :right, :forward, :backward) en la que están las escaleras desde tu ubicación.
|
143
|
+
direction_of:
|
144
|
+
description: Pasa un espacio como argumento y la dirección (:left, :right, :forward, :backward) hacia ese espacio será regresada.
|
145
|
+
explode:
|
146
|
+
description: Te mata a ti y a todas las unidades alrededor. Probablemente no quieras hacer esto intencionalmente.
|
147
|
+
collapsing_the_ceiling: explota, colapsando el techo e hiriendo a todas las unidades.
|
148
|
+
is_ticking: está haciendo tic tac
|
149
|
+
detonate:
|
150
|
+
description: Detona una bomba en la dirección especificada (adelante, por defecto) que daña a ese espacio y los 4 espacios al rededor (incluido tú).
|
151
|
+
bomb_deadly_explosion: detona una bomba %1 creando una explosión mortal.
|
152
|
+
ticking_explosive: es alcanzado por las llamas lo cual detona el explosivo que trae consigo
|
153
|
+
form:
|
154
|
+
description: Forma un golem en la dirección dada tomando la mitad de la salud del que lo invocó. El bloque pasado es ejecutado en cada turno del golem.
|
155
|
+
golem_gives_health: forma un golem %1 y da la mitad de su salud (%2)
|
156
|
+
fails: falla al formar el golem porque algo está bloqueando el camino.
|
157
|
+
tip: tip
|
158
|
+
hp: de salud
|
159
|
+
when_you_are_done_run_rubywarrior: Cuando hayas terminado de editar player.rb ejecuta rubywarrior de nuevo.
|
160
|
+
add_your_code_here: añade tu código aquí
|
161
|
+
towers:
|
162
|
+
beginner:
|
163
|
+
level_001:
|
164
|
+
description: Ves delante de ti un largo pasillo con escaleras al final. No hay nada en el camino.
|
165
|
+
tip: Usa warrior.walk! (dentro del método 'play_turn' de la clase Player) para caminar hacia adelante.
|
166
|
+
level_002:
|
167
|
+
description: Está muy oscuro y no se puede ver nada, pero sientes que un monstruo anda cerca.
|
168
|
+
tip: Usa warrior.feel.empty? para saber si hay alguien frente a ti y warrior.attack! para pelar. Recuerda, sólo puedes realizar una acción por turno (terminan en !).
|
169
|
+
clue: Añade una condición if/else usando warrior.feel.empty? para decidir cuándo atacar (warrior.attack!) o caminar (warrior.walk!).
|
170
|
+
level_003:
|
171
|
+
description: El aire se siente más pesado que antes. Debe haber una horda de monstruos.
|
172
|
+
tip: Cuídate mucho para no morir! Usa warrior.health para ver el nivel de tu salud y descansa usando warrior.rest! para recuperar 10% de tu salud.
|
173
|
+
clue: Cuando no hay enemigos frente a ti descansa usando warrior.rest! hasta que tu salud se haya recuperado antes de seguir avanzando.
|
174
|
+
level_004:
|
175
|
+
description: Puedes escuchar las cuerdas de los arcos tensándose.
|
176
|
+
tip: No tienes nuevas habilidades esta vez, pero debes tener cuidado de no descansar cuando estés siendo atacado. Usa una variable de instancia @health y compárala en cada turno para ver si alguien te está atacando.
|
177
|
+
clue: Guarda tu nivel actual de salud en @health al final de cada turno. Si ésta es mayor que tu nivel de salud en el siguiente turno sabrás que estás siendo atacado y no deberías descansar en dado caso.
|
178
|
+
level_005:
|
179
|
+
description: Escuchas sollozos y gritos de ayuda. Los rehenes necesitan ser rescatados.
|
180
|
+
tip: Usa warrior.feel.captive? para saber si hay un rehen y warrior.rescue! para rescatarlo. No ataques a los rehenes.
|
181
|
+
clue: No olvides revisar constantemente si estás siendo atacado, si no, descansa hasta que tu salud se recupere.
|
182
|
+
level_006:
|
183
|
+
description: La pared que está detrás de ti se siente un poco más lejana en este cuarto y escuchas más sollozos y gritos de ayuda.
|
184
|
+
tip: Puedes caminar hacia atrás pasando ':backward' como argumento al método walk!. Lo mismo para feel, rescue! y attack!. Los arqueros tiene una distancia de ataque limitada.
|
185
|
+
clue: Camina hacia atrás si estás siendo atacado desde lejos y no tienes suficiente salud para atacar. También puedes considerar caminar hacia atrás hasta que ya no puedas hacerlo más, usa warrior.feel(:backward).wall?.
|
186
|
+
level_007:
|
187
|
+
description: Ves una pared justo delante de ti y una puerta detrás.
|
188
|
+
tip: No eres tan efectivo atacando hacia atrás. Usa warrior.feel.wall? y warrior.pivot! para darte la vuelta.
|
189
|
+
level_008:
|
190
|
+
description: Escuchas el murmullo de los magos. Ten cuidado de sus mortales varitas mágicas! Lo bueno es que has encontrado un arco.
|
191
|
+
tip: Usa warrior.look para saber qué tienes a tu alrededor y warrior.shoot! para disparar una flecha.
|
192
|
+
clue: Los Magos son mortales pero tiene poca salud. Mátalos antes de que tengan tiempo de atacar.
|
193
|
+
level_009:
|
194
|
+
description: Es tiempo de afinar tus habilidades y aplicar todo lo que has aprendido.
|
195
|
+
tip: Mira detrás de ti.
|
196
|
+
clue: No te mantengas disparando el arco mientras te están atacandopor detrás.
|
197
|
+
intermediate:
|
198
|
+
level_001:
|
199
|
+
description: Silencio. El cuarto parece grande, pero vacío. Afortunadamente tienes un mapa de esta torre para poder encontrar las escaleras.
|
200
|
+
tip: Usa warrior.direction_of_stairs para determinar en qué dirección están ubicadas las escaleras. Pasa el resultado a warrior.walk! para caminar en esa dirección.
|
201
|
+
level_002:
|
202
|
+
description: Otro cuarto grande, pero con varios enemigos bloqueando el camino hacia las escaleras.
|
203
|
+
tip: "Justo como caminar, puedes atacar y percibir en múltiples direcciones: adelante, izquierda, derecha, atrás (:forward, :left, :right, :backward)."
|
204
|
+
clue: Llama warrior.feel(direction).enemy? en cada dirección para estar seguro de que no hay enemigos cerca (ataca si los hay). Usa warrior.rest! para descansar para recuperar salud cuando no haya enemigos alrededor.
|
205
|
+
level_003:
|
206
|
+
description: Sientes cosas viscosas por todos lados, estás rodeado!
|
207
|
+
tip: Llama warrior.bind!(dirección) para paralizar a un enemigo y así evitar que te ataque. Los enemigos paralizados se ven justo como rehenes.
|
208
|
+
clue: Cuenta el número de enemigos alrededor tuyo. Paraliza a un enemigo si hay dos o más.
|
209
|
+
level_004:
|
210
|
+
description: Tus oidos se hacen más sensibles, escucha para encontrar enemigos y rehenes!
|
211
|
+
tip: Usa warrior.listen para encontrar los espacios donde hay alguien y warrior.direction_of para determinar en qué dirección están.
|
212
|
+
clue: Camina hacia el enemigo o rehen con warrior.walk!(warrior.direction_of(warrior.listen.first)) hasta que no haya nadie y después dirígete a las escaleras.
|
213
|
+
level_005:
|
214
|
+
description: Puedes sentir las escaleras justo a un lado tuyo, pero estás seguro de querer subirlas inmediatamente?
|
215
|
+
tip: Conseguirás más puntos por despejar el nivel primero. Usa warrior.feel.stairs? y warrior.feel.empty? para determinar a dónde ir.
|
216
|
+
clue: Si la dirección hacia donde está una unidad es la misma que la de las escaleras, intenta moverte hacia un espacio vacío hasta que puedas moverte con seguridad hacia los enemigos.
|
217
|
+
level_006:
|
218
|
+
description: Qué es ese tic tac? Algunos rehenes tienen una bomba de tiempo en sus pies!
|
219
|
+
tip: Apresúrate y rescata primero a los rehenes que tienen su bomba a punto de explotar, para saberlo usa space.ticking?, se irán rápido!
|
220
|
+
clue: Evita pelear con tus enemigos al principio. Usa warrior.listen y space.ticking? y rápidamente rescata a ese rehenes.
|
221
|
+
level_007:
|
222
|
+
description: Otro sonido de tic tac, pero un monstruo está bloqueando el camino.
|
223
|
+
tip: Rápidamente mata al monstruo y rescata al rehen antes de que la bomba explote. No puedes simplemente esquivarlos yéndote por una lado de ellos.
|
224
|
+
clue: Determina la dirección del rehen con la bomba a punto de explotar y mata a los enemigos que estén bloqueando tu camino. Probablemente necesites paralizar enemigos que estén alrededor.
|
225
|
+
level_008:
|
226
|
+
description: Descubres una bolsa con bombas que te ayudarán cuando te enfrentes a un multitud de enemigos.
|
227
|
+
tip: Detona una bomba cuando veas a un par de enemigos delante de ti (warrior.look). También revisa tu salud.
|
228
|
+
clue: Llamando warrior.look regresará una lista de espacios (Spaces). Si los primeros dos tienen enemigos, detona una bomba con warrior.detonate!.
|
229
|
+
level_009:
|
230
|
+
description: Nunca antes habías visto un cuarto con tantos monstruos. Que empiecen los fuegos artificiales!
|
231
|
+
tip: Ten cuidado de no dejar que un rehen con una bomba quede atrapado entre las llamas. Usa warrior.distance_of para evitar a los rehenes.
|
232
|
+
clue: Asegúrate de paralizar a los enemigos que haya alrededor antes de pelear. Revisa tu salud antes de detonar explosivos.
|
233
|
+
|
data/lib/ruby_warrior.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
$: << File.dirname(__FILE__)
|
2
|
+
|
3
|
+
require 'r18n-desktop'
|
4
|
+
|
5
|
+
R18n.from_env(File.expand_path("#{File.dirname(__FILE__)}/../i18n/"), ENV['LANG'])
|
6
|
+
|
7
|
+
require 'set'
|
8
|
+
|
9
|
+
require 'ruby_warrior/version'
|
10
|
+
|
11
|
+
require 'ruby_warrior/core_additions'
|
12
|
+
|
13
|
+
require 'ruby_warrior/runner'
|
14
|
+
require 'ruby_warrior/game'
|
15
|
+
require 'ruby_warrior/profile'
|
16
|
+
require 'ruby_warrior/ui'
|
17
|
+
require 'ruby_warrior/config'
|
18
|
+
require 'ruby_warrior/player_generator'
|
19
|
+
require 'ruby_warrior/level_loader'
|
20
|
+
require 'ruby_warrior/tower'
|
21
|
+
require 'ruby_warrior/level'
|
22
|
+
require 'ruby_warrior/turn'
|
23
|
+
require 'ruby_warrior/floor'
|
24
|
+
require 'ruby_warrior/space'
|
25
|
+
require 'ruby_warrior/position'
|
26
|
+
|
27
|
+
require 'ruby_warrior/units/base'
|
28
|
+
require 'ruby_warrior/units/warrior'
|
29
|
+
require 'ruby_warrior/units/sludge'
|
30
|
+
require 'ruby_warrior/units/archer'
|
31
|
+
require 'ruby_warrior/units/thick_sludge'
|
32
|
+
require 'ruby_warrior/units/captive'
|
33
|
+
require 'ruby_warrior/units/wizard'
|
34
|
+
require 'ruby_warrior/units/golem'
|
35
|
+
|
36
|
+
require 'ruby_warrior/abilities/base'
|
37
|
+
require 'ruby_warrior/abilities/walk'
|
38
|
+
require 'ruby_warrior/abilities/attack'
|
39
|
+
require 'ruby_warrior/abilities/feel'
|
40
|
+
require 'ruby_warrior/abilities/rest'
|
41
|
+
require 'ruby_warrior/abilities/health'
|
42
|
+
require 'ruby_warrior/abilities/look'
|
43
|
+
require 'ruby_warrior/abilities/shoot'
|
44
|
+
require 'ruby_warrior/abilities/rescue'
|
45
|
+
require 'ruby_warrior/abilities/pivot'
|
46
|
+
require 'ruby_warrior/abilities/distance_of'
|
47
|
+
require 'ruby_warrior/abilities/bind'
|
48
|
+
require 'ruby_warrior/abilities/listen'
|
49
|
+
require 'ruby_warrior/abilities/direction_of_stairs'
|
50
|
+
require 'ruby_warrior/abilities/direction_of'
|
51
|
+
require 'ruby_warrior/abilities/explode'
|
52
|
+
require 'ruby_warrior/abilities/detonate'
|
53
|
+
require 'ruby_warrior/abilities/form'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module RubyWarrior
|
2
|
+
module Abilities
|
3
|
+
class Attack < Base
|
4
|
+
def description
|
5
|
+
"#{R18n.t.attack.in_given_direction}"
|
6
|
+
end
|
7
|
+
|
8
|
+
def perform(direction = :forward)
|
9
|
+
verify_direction(direction)
|
10
|
+
receiver = unit(direction)
|
11
|
+
if receiver
|
12
|
+
@unit.say R18n.t.attack.and_hits(R18n.t.direction[direction], "#{receiver}")
|
13
|
+
if direction == :backward
|
14
|
+
power = (@unit.attack_power/2.0).ceil
|
15
|
+
else
|
16
|
+
power = @unit.attack_power
|
17
|
+
end
|
18
|
+
damage(receiver, power)
|
19
|
+
else
|
20
|
+
@unit.say "#{R18n.t.attack.and_hits_nothing(R18n.t.direction[direction])}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module RubyWarrior
|
2
|
+
module Abilities
|
3
|
+
class Base
|
4
|
+
def initialize(unit)
|
5
|
+
@unit = unit
|
6
|
+
end
|
7
|
+
|
8
|
+
def offset(direction, forward = 1, right = 0)
|
9
|
+
case direction
|
10
|
+
when :forward then [forward, -right]
|
11
|
+
when :backward then [-forward, right]
|
12
|
+
when :right then [right, forward]
|
13
|
+
when :left then [-right, -forward]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def space(direction, forward = 1, right = 0)
|
18
|
+
@unit.position.relative_space(*offset(direction, forward, right))
|
19
|
+
end
|
20
|
+
|
21
|
+
def unit(direction, forward = 1, right = 0)
|
22
|
+
space(direction, forward, right).unit
|
23
|
+
end
|
24
|
+
|
25
|
+
def damage(receiver, amount)
|
26
|
+
receiver.take_damage(amount)
|
27
|
+
@unit.earn_points(receiver.max_health) unless receiver.alive?
|
28
|
+
end
|
29
|
+
|
30
|
+
def description
|
31
|
+
end
|
32
|
+
|
33
|
+
def pass_turn
|
34
|
+
# callback which is triggered every turn
|
35
|
+
end
|
36
|
+
|
37
|
+
def verify_direction(direction)
|
38
|
+
unless Position::RELATIVE_DIRECTIONS.include? direction
|
39
|
+
raise R18n.t.direction.unknown(direction.inspect)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module RubyWarrior
|
2
|
+
module Abilities
|
3
|
+
class Bind < Base
|
4
|
+
def description
|
5
|
+
"#{R18n.t.bind.description}"
|
6
|
+
end
|
7
|
+
|
8
|
+
def perform(direction = :forward)
|
9
|
+
verify_direction(direction)
|
10
|
+
receiver = unit(direction)
|
11
|
+
if receiver
|
12
|
+
@unit.say R18n.t.bind.and_restricts(R18n.t.direction[direction], "#{receiver}")
|
13
|
+
receiver.bind
|
14
|
+
else
|
15
|
+
@unit.say "#{R18n.t.bind.and_restricts_nothing(R18n.t.direction[direction])}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module RubyWarrior
|
2
|
+
module Abilities
|
3
|
+
class Detonate < Base
|
4
|
+
def description
|
5
|
+
"#{R18n.t.detonate.description}"
|
6
|
+
end
|
7
|
+
|
8
|
+
def perform(direction = :forward)
|
9
|
+
verify_direction(direction)
|
10
|
+
if @unit.position
|
11
|
+
@unit.say "#{R18n.t.detonate.bomb_deadly_explosion(R18n.t.direction[direction])}"
|
12
|
+
bomb(direction, 1, 0, 8)
|
13
|
+
[[1, 1], [1, -1], [2, 0], [0, 0]].each do |x, y|
|
14
|
+
bomb(direction, x, y, 4)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def bomb(direction, x, y, damage_amount)
|
20
|
+
if @unit.position
|
21
|
+
receiver = space(direction, x, y).unit
|
22
|
+
if receiver
|
23
|
+
if receiver.abilities[:explode!]
|
24
|
+
receiver.say "#{R18n.t.detonate.ticking_explosive}"
|
25
|
+
receiver.abilities[:explode!].perform
|
26
|
+
else
|
27
|
+
damage(receiver, damage_amount)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|