rubywarrior-i18n 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|