Bienvenue visiteur !
|
Statistiques
Liste des membres
Contact
Mentions légales
301 connectés actuellement
30729173 visiteurs depuis l'ouverture
2790 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
❤ 0 Auteur : Zeus81 & NanakyTim (edits à partir de 1.5)
Logiciel : RPG Maker XP
Nombre de scripts : 3
Ce script améliore considérablement tout ce qui touche aux déplacements.
C'est un script très complet et j'espère qu'il sera utilisé dans tous les jeux, car juste le fait de mettre ce script dans un jeu en améliore nettement la qualité.
Fonctionnalités
- Il permet de ne plus se déplacer carreau par carreau.
- On entend les bruits des pas et on laisse des traces de pas derrière nous.
- On peut configurer 7 types de terrains par map. J'ai créé un utilitaire de configuration pour cela.
- On peut donner de la profondeur aux maps. J'ai aussi créé un utilitaire pour configurer ça.
- Enfin j'ai créé dans ce script un système permettant de donner du relief aux maps. Et bien sûr un utilitaire pour configurer tout cela.
Le script
Je ne vais pas rentrer dans les détails parce que ça serait trop long, et puis vous verrez bien en l'essayant. J'ai mis des exemples partout et pour tout donc il ne devrait pas y avoir de problèmes.
Version 1.6 (Version recommandée) : https://www.rpg-maker.fr/divers/scripts/script133_zeus81_nanakytim_ams_ultimate_1.6.zip
- Correction de bugs
- Correction d'une erreur de passabilité
Archives des anciennes versions :
- Version 1.5
- Version 1.4.1 (Standard)
- Version 1.3 (Archive)
Historique
Spoiler (cliquez pour afficher) Ajouts version 1.6 (NanakyTim) :
- Correction de bugs mineurs
- Correction d'une erreur de passabilité
Ajouts version 1.5 (NanakyTim) :
- Possibilité d'activer/désactiver le sprint et le saut comme bon vous semble (avant c'était soit activé, soit désactivé pour tout le jeu).
- Correction des noms de dossiers/fichiers contenant des espaces ou caractères spéciaux.
Ajouts version 1.4.1 (Zeus81) :
- Non répertorié
Ajouts version 1.3 (Zeus81) :
- Ajout de l'accesseur de move_speed pour être compatible avec les scripts de la version anglaise.
Ajouts version 1.2 (Zeus81) :
- Changement de la formule de vitesse pour les déplacements en profondeur.
- Correction d'un bug de priorité de superposition des évènements ayants l'apparence d'un chipset.
- Correction crash de l'éditeur après F12.
- Correction de l'animation d'arrêt des alliés qui ne s'affichait pas.
- Déplacement du dossier "Data System" contenant les infos des maps dans "Data".
Ajouts version 1.1 (Zeus81) :
- Optimisation des performances conséquente.
- Simplification de l'installation (1 seul script à copier).
- Changement de la formule de vitesse pour les déplacements en profondeur.
Mis à jour le 7/2/2021.
|
NeCReeD (visiteur non enregistré) -
posté le 04/08/2008 à 23:08:38
| Oui, tu as été un dieu pour ce système Zeus... il me sert énormément, surtout pour les bruits de pas, quelle génie ! ( héhé... )
Mais je vais faire mon chieur... tu pourrais améliorer ton système de hauteur ? xD
Non non, il est parfait et vraiment très simple a prendre en main (encore félicitations ^^), mais en fait, je parle en fonction du type de mur (le sens du mur plutôt).
C'est plus parlant en image (si t'a pas que ça a faire, pas grave, au moins j'aurai essayé, je n'oserai pas touché au code de ce magnifique script... lèche-bottes ? et alors ^^) :
|
Higinia-Maker -
posté le 11/08/2008 à 04:48:27 (8 messages postés)
| | Salut salut ! impressionant le script.
Je me leche les babines
Non serieusement.
Je voulais savoir si c'etait possible d'adapter le script pour qu'il marche sur VX ?
Ou alors si tu ne ve pas le faire.
Puis-je le poster sur un forum VX stp ?
Je mettrai bien sur " c'est un scipt creer entierement par zeus81 "
veuillez a mettre son nom dans vos credit si vous l'utiliser.
|
Romain68 (visiteur non enregistré) -
posté le 13/08/2008 à 19:08:01
| Merci 1000x mon Dieu des Scripts!! Je te remercie de l'invention de ce script mais sans vouloir te fair chier j'aimerais juste que tu puisse me dire comment modifier l'animation Héro_down le script qui se déclenche quand on tombe de haut. J'aimerais que tu me dise comment faire pour qu'il se déclenche chaque fois qu'on réatéri sur le sol. Merci.
|
Romain68 -
posté le 21/08/2008 à 18:21:53 (2697 messages postés)
| | J'ai un problème de charset...
Il a 8 animations en 8 directions et le probleme c'est que j'ai pas l'impression que t'avais prévu ça dans ton script.
Mettre (_mvt) après le nom d'un charset ne s'aplique qu'aux charset à 4 directions!
|
http://lumensection.com |
look -
posté le 04/06/2009 à 19:48:36 (2 messages postés)
| | Bonjour !! Tout d'abord je coudrais te félicité pour ce script magnifique mais j'ai tout de même un petit problème dut à l'incompatibilité du déplacement et de mon système de combat (tactique) j'aimerais savoir ce qu'il faut supprimer ou modifier pour retrouver un déplacement case par case tout en gardant les bruitages et le système de hauteur ainsi que les déplacement en diagonale si possible =)
|
Zeus81 -
posté le 08/06/2009 à 18:34:06 (11071 messages postés)
| | Dans le script "Game_Character 3" t'as qu'à remplacer les :
1
| (turn_enabled = true, speed = @real_move_speed) |
par :
1
| (turn_enabled = true, speed = 7) |
T'as qu'à remplacer avec Ctrl+H comme ça c'est vite fait.
|
zouglou -
posté le 07/10/2009 à 21:11:34 (2197 messages postés)
| | juste une question
est-il possible de rendre égale une variable au nombre de case d'où le héros chute.
Ex : le héros fait une chute de dix cases.
dans un event en processus para :
>condition si variable " chute" = 10
> modifier les PV : -50
Merci d'avance
|
Zeus81 -
posté le 13/10/2009 à 21:02:53 (11071 messages postés)
| | Dans le script Game_Character 2 t'as qu'à rajouter à la ligne 77 :
1
| $game_variables[123] = @fall_count if @id == 0 |
Faut l'utiliser de cette manière :
condition si variable 123 = 60
- modifier les PV : -50
- variable 123 = 0
fin condition
J'ai mis la variable 123 mais tu peux mettre celle que tu veux.
Par contre la valeur (ici 60) n'est pas le nombre de carreaux, donc t'as qu'à faire des tests pour trouver la bonne valeur.
|
Elysio -
posté le 21/11/2009 à 17:25:24 (84 messages postés)
| | Excuse moi de te demander de l'aide encore une fois Zeus81 mais...
en utilisant les characters inclus dans un projet basique, un print apparait (grâce au script de Krosk) :
Y'a-t-il un moyen que seul le "vrai" héros (j'entends par là, celui qu'on
conduit...) peut avoir ce genre de nom : ex : Reï_dir[8]_down.
Merci de me répondre
Cordialement
|
Zeus81 -
posté le 27/11/2009 à 00:20:39 (11071 messages postés)
| | Enlève le script de Krosk et ça ira.
|
Maxime1986 -
posté le 15/12/2009 à 21:02:56 (9 messages postés)
| | Salut Zeus, je me demandais si tu pouvais répondre à une petite question.
Quand j'utilise ton script ($scene = Scene_Map_Config.new) pour changer les hauteurs de certains objects, je me retrouve avec ce message:
?????'Window_list'?40???No MethodError ????????
Undefined Method `name' for nil:Nilclass
Tu crois pouvoir centrer le problème? Sinon, très beau script, .
|
Zeus81 -
posté le 17/05/2010 à 18:56:13 (11071 messages postés)
| | Est ce que t'as la dernière version du script ?
|
liopite -
posté le 21/05/2010 à 18:14:31 (3 messages postés)
| | Bonjour j'ai un petit probleme avec ce script le perso est en 2 fois sur l'ecran (il y a deux personnage au lieu d'un dans le jeu) j'aimerais savoir comment le régler merci
EDIT C'est bon j'ai trouvé c'est "dir[8]" qu'il manquai dans le nom
mais maintenant que ça marche les chara pour "jump,fall,dash,etc...) ne marche plus
|
Kay0077 -
posté le 26/05/2010 à 01:25:37 (11 messages postés)
| | Ah trop cool les script c'est se qu'il me falais tu est un dieu du script Zeus par contre j'aimerais remplacer le Dash sur Entrer par CTRL s'il te plait merci encore une foie génial tout sa.
|
liopite -
posté le 26/05/2010 à 15:49:48 (3 messages postés)
| | lance ton jeu et appuis sur F1 va voir dans le 3eme onglet tu trouveras des touche assigné a des lettres et dans le premier des 3 scripts tu va à la ligne 35 Dash_Input = Input::C tu remplace "C" par la lettre de la touche que tu veux
Sinon quelqu'un pourrait m'aider pour mon problème mes chara dash jump et tous les autre ne marche pas qui saurait le corriger ?
|
Kay0077 -
posté le 26/05/2010 à 18:12:59 (11 messages postés)
| | Merci sa marche par contre moi sa marche pas les charas 4*8 et quelqun pourait m'aider encore j'ai asayer de fair un event commun pour que quand j'appuye sur la touchecourir ya un effet derier mais j'arive pas a l'areter quand je n'appuye plus sur le boutton donc sil quelqun pour m'aider s'il vous plait.
|
liopite -
posté le 28/05/2010 à 16:51:59 (3 messages postés)
| | Pour les charas 4*8 regarde si tu as bien mit _[dir8] derrière le nom de tes charas par contre pour ton deuxième problème je ne sais pas
|
Musa -
posté le 30/06/2010 à 02:38:59 (20 messages postés)
| | Bonjour et bravo à toi pour ce magnifique script !
Je souhaiterai déplacer les personnages qui suivent mon héros pour une scène, je voudrais donc utiliser les numéros d'event 1001 et 1002, mais ça semble impossible dans les options par défaut de RPG Maker !
Je voudrais donc connaître le script permettant de les déplacer !
Merci !
|
Zeus81 -
posté le 27/07/2010 à 17:47:26 (11071 messages postés)
| | Oui y'a une façon simple de faire ça, juste avant la commande Déplacer évènement tu insères un script avec :
1
| @list[@index+1].parameters[0] = 1001 |
Comme ça ce sera l'allié n°1 qui se déplacera.
|
Musa -
posté le 28/07/2010 à 05:27:33 (20 messages postés)
| | Super ça, en effet ça marche merci beaucoup !
Ah et sinon, serait-il possible de faire en sorte que les personnages ne suivent plus le héros ?
En effet, dans ma scène, les personnages se déplacent bien mais sans "attendre", il rejoignent immédiatement le héros à la fin de leur déplacement. J'aurais donc un problème si je ne veux pas mettre de attendre dans une scène.
Une idée ?
|
Zeus81 -
posté le 28/07/2010 à 18:45:17 (11071 messages postés)
| | Dans la commande Déplacer Evenement tu fais Insérer un script avec : @move_type = 0
Quand t'as fini ton truc et que tu veux qu'ils re-suivent le héros tu mets @move_type = 2
|
Musa -
posté le 28/07/2010 à 21:38:42 (20 messages postés)
| | Parfait !
Merci beaucoup !
|
TheDarKsidE -
posté le 05/08/2010 à 08:20:36 (3 messages postés)
| | bonjour , je touche un peu a rpg maker depuis quelques semaines, je ne m'y connais pas trop en script et tout ça , mais ce script est vraiment ce que je voulais (l'éloignement des persos sur une map surtout)
j'avais néanmoin une question:
j'utilise un autre script pour avoir des combats en mode tactic (déplacement case par case) quand je met ( [T] ) a la fin du nom de la carte. J' ai essayer de copier coller les 3 parties de ton scripts sur le script du projet ou y'avais deja le script tactic et inversement ( je sent que je suis pas clair... mais je continue) ce qui me donne des érreurs.
Donc je voulais juste savoir si : par exemple des scripts n'étais pas compatible entre eux pour raison X ou Y, ou si il etais possible graçe a une option ( par exemple en modifiant la fin du nom de la map) pour avoir sois une map en tactic ([T]) ou une map en 8 directions avec la profondeur.
Voila, je m'excuse de mon GROS manque de conaissances sur le sujet ( et au passage de mon orthographe
et merci pour ton script que j'utilise meme pas a 10 % de ce qu'il peut me permettre faire ^^.
|
Musa -
posté le 06/08/2010 à 07:32:29 (20 messages postés)
| | Oui, je confirme, certains scripts ne sont pas compatibles entre eux.
Après, tu peux toujours faire des tests dans différentes situations, en espérant que ça marche quand même.
Sinon, encore une question :
Comment pourrais-je récupérer dans deux variables la position (x, y) d'un personnage qui suit le héros ? J'en ai besoin pour faire déplacer un personnage qui suit le héros vers une case bien précise, et ce peu importe la position de celui-ci. J'ai déjà réalisé un petit évènement de pathfinding qui fonctionne avec un évènement normal. Cependant impossible de récupérer la position d'un personnage qui me suit.
J'ai tout de même essayé de faire :
1
2
| Script : @list[@index+1].parameters[0] = 1001
Variable(s) [0001: position x] : rendre égale(s) à Héros --> --> Coordonnée X |
Mais ça n'a rien donné, X et Y valent 0, peu importe la position du personnage qui suit.
|
TheDarKsidE -
posté le 07/08/2010 à 04:41:25 (3 messages postés)
| | arf c'est vraiment domage mais merci d'avoir répondu. Une derniere question, est t'il possible par exemple de faire en sorte que un certain script sois actif sur une map mais pas une autre? ou c'est forcément (d'apres ce que j'ai cru comprendre) pour un projet entier?
par exemple sur mes map tactics je me dispence du script de zeus81 mais des que je retourne sur des map "d'exploration" je retrouve son script...
rhalala, c'est cass pied les noobs du making, sa pose plein de questions
Bonne vac'
|
Zeus81 -
posté le 08/08/2010 à 02:12:38 (11071 messages postés)
| | Musa > dans le script mets : @list[@index+1].parameters[4] = 1001
TheDarKsidE > J'ai uploadé une nouvelle version, essaie là, elle a peut être une meilleure compatibilité.
|
Musa -
posté le 08/08/2010 à 04:04:43 (20 messages postés)
| | Merci bien, ça marche nickel !
|
TheDarKsidE -
posté le 08/08/2010 à 19:14:15 (3 messages postés)
| | RHaaaaa géniaaaaal , ça marche !!!!! c'est vraiment cool.
Merci Zeus pour ce super script. tin jsuis trop content... jvais pouvoir faire les choses exactement comme je l'imaginais.
Trop un bo'goss Zeus, jte jure.
Je ne sais pas faire grand chose encore avec rpgXP mais si tu as besoin d'aide ou quoi ,pour un truc, hésite pas.
Merci mille fois.
|
sANJI -
posté le 28/08/2010 à 12:11:54 (32 messages postés)
| | c quoi ce script de malade IL EST TROP BIEN
tu depasse de loin tout les makers t trop fort
|
Bouh les rtp vx ! |
| | Adélagolololette
Manque plus qu'à intégrer le mode 7 avancée dans la prochaine version. 'si tu le veux bien,bien sûr) et on pourra creer des jeux 3D 2.5D
Je l'ai déjà testé,il est compatible mais il y a quelques prob de rotation
|
linkv -
posté le 06/10/2010 à 13:13:32 (5 messages postés)
| | GENIAL mais quand je lance la démo, la fenêtre s'ouvre et puis elle se referme d'un coup -_-' je ne comprends vraiment pas !
(J'ai téléchargé les deux liens que tu as mis Zeus81 ... c'est vraiment ce qu'il me faudrait pour améliorer la qualité de mon jeu, tu pourrais me dire pourquoi ta démo ne marche t-elle pas ?(j'ai windows XP)
Merci d'avance !
|
Zeus81 -
posté le 07/10/2010 à 21:38:48 (11071 messages postés)
| | Et t'as pas essayé de lancer le Game.rxproj ?
|
linkv -
posté le 10/10/2010 à 12:14:09 (5 messages postés)
| | oulahh t'a répondu rapidement dis donc, je ne m'y attendais pas !
Par contre, je ne sais pas ce que c'est le game.rxproj, je pense que tu veux parler de l'éditeur qui permet de changer ce qu'il y a dans la demo mais il n'y a ni l'aperçu du jeu qui marche ni F12 quand je mets l'éditer(ou tester le projet, c'est pareil).
Je ne sais pas à quoi c'est dû, soit le scripts(mais vu que ça marche chez les autres ça doit pas être ça), soit c'est mon pc qui a un problème !
J'ai besoin d'aide donc si tu veux bien m'aider à répondre à ma question parce que je ne comprends pas !
(la prochaine fois que tu me répondras, j'essayerais d'aller plus vite à répondre ^^)
|
Zeus81 -
posté le 10/10/2010 à 22:14:23 (11071 messages postés)
| | J'ai un peu la flemme d'expliquer pourquoi alors, je l'ai modifié, t'as qu'à retélécharger ça sera plus simple.
http://www.mediafire.com/?sharekey=c681185220fd8c36ab1eab3e9fa335ca05b41546d2a54c5d
|
linkv -
posté le 11/10/2010 à 20:32:27 (5 messages postés)
| | Génial, ça marche ^^
Merci Zeus81, je te suis vraiment reconnaissant !!! ^^
Mais quelques petites quesitons!
-La seconde partie de ton script : AMS Ultimate Divers, si je n'ai qu'un character avec 4 directions, il n'est vraiment pas nécessaire de le mettre ?
-Dans ta première partie, à quoi sert la "gravité" que l'on peut changer ?
|
Zeus81 -
posté le 11/10/2010 à 21:28:13 (11071 messages postés)
| | - Bah t'as qu'à l'enlever et si t'as un problème d'affichage dans les menu c'est qu'il faut le remettre.
- Tu crois pas que de faire un test c'est plus rapide que de me demander ?
La gravité c'est juste en rapport avec les sauts.
|
linkv -
posté le 12/10/2010 à 21:30:22 (5 messages postés)
| | D'accord, j'avais pas compris la gravité car j'avais changé le rapport mais je n'avais pas testé le saut ^^
Je te remercie d'avoir fait part de ce script très complet et facile d'utilisation ! Et je te remercie aussi d'avoir répondu à mes questions !
|
| You shall cut a tree with .... A herring ! | Zeus, tu mérite vraiment ton nom.
Tu es un dieu !
|
NI ! |
rafsardu -
posté le 23/10/2010 à 11:23:01 (1 messages postés)
| | Salut Zeus !
Je tiens d'abord à te dire merci pour ton super script !!
Mais j'ai un problème, quand je veux démarrer mon jeu, un message d'erreur apparait :
"Le fichier No such file or directory - Graphics/Pictures/Data System/Shadow n'a pas été trouvé."
|
| | Retélécharge le,ou crée le toi même ,t'as juste à faire un ombre
un point noir quoi
Zeus,
J'ai plusieurs questions à te poser,Comment faire pour associer le saut et la course à une variable.
ex:
Faire que quand je saute la variable 10 associé au saut s'enclenche jusqu'à la fin du saut
Sinon tu crois que c'est possible de faire une plateforme flottante et bougeante dans le vide à la mario ??
facile à faire en event mais le héro n'arrête pas de tomber et surtout faire que la plateforme bouge en même temps que le héro qui pose prob
|
Zeus81 -
posté le 24/11/2010 à 22:00:01 (11071 messages postés)
| | rafsardu :
Citation: Pour copier ce système dans votre jeu, ouvrez l'éditeur de
script et copiez tous les scripts "AMS Ultimate" dans les
scripts de votre jeu, juste au dessus du Main.
Ensuite vous devez copier les dossiers "Data System".
Il y en a un dans le dossier "Audio/SE" et un autre
dans le dossier "Graphics/Pictures". |
C'est dit dans la démo bordel !
charles :
Pour voir si le héros saute tu fais une condition avec si script : $game_player.new_jumping?
C'est dit dans la démo bordel !
Et pour voir si il court c'est pareil mais avec : $game_player.dash
Pour les plateformes mouvantes ce script les gère pas.
|
Linkeur -
posté le 30/12/2010 à 16:04:11 (10 messages postés)
| | Bonjour,
Tout d'abord merci pour ce super script ^^ c'est vraiment super impressionnant.
J'ai conscience de venir un peu après la guerre mais j'aurai deux questions.
Je me suis lancé dans un A-rpg, et au moment de programmer les projectiles j'ai un petit problème.
Le projectile part en fonction des carreaux et je ne peux pas le faire partir du héros, si ce dernier se trouve au milieu d'un carreau par exemple.
En gros ma question revient à dire : serait il possible de récupérer les coordonnées réel du héros et de déplacer un évènement à ces coordonnées ? ( Pas les coordonnées X et Y que l'on peut récupérer par RMXP )
Ma deuxième question se pose, si il n'y a pas de réponse à la première.
Est il possible de désactiver le mouvement par pixel sans pour autant désactiver les déplacements en diagonal et les animations des Charsets (+ de 4 animations).
Merci pour vos futures réponses =)
EDIT pour en dessous : pourquoi dis-tu ça ? je l'ai testé et intégré a mon projet ^^
Maintenant si tu dis ça parce que la réponse à mes questions est évidente ^^ il est possible que je sois passé à coté de quelque chose.
Je te serais reconnaissant de me faire partager ton savoir =)
|
Heavy Rain -
posté le 30/12/2010 à 18:15:57 (1053 messages postés)
| | Tu l'as pas testé, toi
|
Ranger Maker -
posté le 18/01/2011 à 17:29:38 (17 messages postés)
| en train de maker | je resors peut-être un vieux dossier mais je repose la question de Romain 68 Citation: J'ai un problème de charset...
Il a 8 animations en 8 directions et le probleme c'est que j'ai pas l'impression que t'avais prévu ça dans ton script.
Mettre (_mvt) après le nom d'un charset ne s'aplique qu'aux charset à 4 directions! |
Serait-il possible de faire un charset 8 directions 8 mouvements ?
|
Bordel pourquoi tout le monde a photoshop alors que ce sont des RPG AMATEURS ! |
Lighteric -
posté le 20/05/2011 à 18:35:22 (14 messages postés)
| | Je sais que je ressort un vieux poste mais quand je démarre le .rxproj sur rpg maker xp ça m'affiche "Le projet ne peut être lue en raison d'une incompatibilités des logiciels"
Que dois-je faire?
|
Zeus[ ] -
posté le 20/05/2011 à 21:50:03 (11071 messages postés)
| | Arf merde, t'as qu'à remplacer le "Game.rxproj" par celui d'un de tes projets.
|
Lighteric -
posté le 20/05/2011 à 22:03:21 (14 messages postés)
| | j'ai trouvé une petite astuce entre mais merci quand même pour cette réponse =)
|
| | Spoiler (cliquez pour afficher) Bonjour bonsoir, je suis nouveau dans le making, et j'essaye de toucher un petit peu aux scripts depuis peu et même si je ne comprends pas tout j'arrive parfois à comprendre certaines lignes. Enfin bref, je te remercie déjà, Zeus, pour ce magnifique script.
Et je me demandais si il y avait un moyen de le rendre compatible avec le script ABS 4.5 de Mr.Mo qui permet de jouer en A-RPG.
Apparement, lorsque j'utilise les 2, bien que le jeu se lance et que j'ai accés au menu dans le jeu, il semble que je ne puisse plus déplacer le héros avec les touches directionnelles et je n'arrive pas à savoir pourquoi.
Merci d'avance si vous avez une solution.
Voici le script :
# * Mr.Mo's ABS
#============================================================================
# Mr.Mo "Muhammet Sivri"
# Version 4.5
# 01/04/06
# Thanks to Near Fantastica's methods;
# - In Range?, Get Range, In Direction?, enemy_dead?, treasure
# - Class Game_Range(highly modified for convinience)
# - Scene_Skill(main, update_shk)
# Most were modified by me to my style and to increase performance and
# cleaner code.
#
# Give Credit to Near Fantastica as well, those methods saved me time and helped.
#
#============================================================================
# Intoduction
#============================================================================
# I wasnt happy with the current version of Near's ABS, and he wasn't going to
# update it anymore. So instead I made an ABS.
# Detailed Tutorial on the ABS and HUD modification tutorials added.
#============================================================================
# Explanation
#============================================================================
#--Skill Casting :
# If the skill is not ranged and its suppose to attack one enemy, it will attack
# the closest enemy.
# If the skill scope is more then 1 enemy, it can be ranged. It will just attack
# the enemies in that range.
# The skill animations can be assigned in the Constants section
# The default skill animation suffix is _cast. If you want a skill to have the
# default animation(_casT) just don't do anything for it
#--Enemy AI :
# 0 = Dummy - Will not attack but can be attacked
# 1 = See Range - Will attack only if it can see an enemy
# 2 = Hear Range - WIll attack only if it can hear an enemy
# 3 = Hear or See Range - Will attack if it can see or hear enemy
# 4 = Ally Under Attack - Will attack if its ally is under attack and if it can
# see or hear the enemy
#
#--Enemy Explanation :
# Hate Points - The enemy will randomly give out hate points to all of it's enemies.
# Later, it's enemies will be ordered from most to least hate points.
#
# Hate Groups - The enemy will attack hate groups, meaning other enemies.
# The hate group enemies aren't considered allies.
# The player's hate id is 0.
# Do not use the event ID, use the Monster ID, you can find it
# in the Database, Enemies Tab.
#
# Closest Enemy - The enemy will attack the closest enemy, if met the right AI
# conditions. Hate points are no longer needed, if this BOOLEAN
# is true.
#
#
#--Comment List :
# To add a comment, click on the event command list, in the first tab, you should
# see the [ Comment... ] button. It should look similar to this.
#
# V = value
#
# Comment: ABS - Required for recognizing enemies.
# Comment: ID V - Enemy ID from the database.
# Comment: Behavior V - Refer to Enemy AI.
# Comment: Sight V - See range the enemy can hear.
# Comment: Sound V - Sound range the enemy can hear.
# Comment: ClosestEnemy V - Refer to Enemy explantion
# Comment: HateGroup [V] - Refer to Enemy explantion
# Comment: Aggressiveness V - How fast will the enemy attack.
# Comment: Speed V - How fast will the enemy move when in battle
# Comment: Frequency V - What rate will the enemy move when in battle
# Comment: Trigger V - Refer to Triggers.
# Comment: Respawn V - Respawn Time. If 0, then don't respawn
#
# Example:
#
# Comment: ABS
# Comment: ID 1
# Comment: Behavior 1
# Comment: Sight 5
# Comment: Sound 5
# Comment: ClosestEnemy true
# Comment: HateGroup [0]
# Comment: Aggressiveness 1
# Comment: Speed 4
# Comment: Frequency 4
# Comment: Trigger 0
# Comment: Respawn 0
#
#--Triggers :
# Trigger 0 - Will erase the event.
# Trigger 1 2 - Will turn on a switch with the ID of 2.
# Trigger 2 5 9 - Will change the Varaible's value with the ID of 5 to 9. If 9 is
# set to 0, the the Variable 5 will be added 1.
# Trigger 3 1 - Will change the local switch of the enemy to 1("A").
# 1 = A
# 2 = B
# 3 = C
# 4 = D
#
#--Startegy Usage :
# The ABS can be used to setup wars and make fights between NPCs. Imagination is
# the limit.
# The events do not need to attack the player. Just remove the 0 from the hate
# group list.
#
# You can make an event a dummy, it can still be attacked, but it won't retaliate.
# This is usefull for practices, or teacing the player how to fight. It can also
# be used for NPC's.
#
# Make allias for the player. Remove the 0 from the hate group list and add all
# the monsters(their enemy IDs, database) on the map. The allias won't follow the player or anything
# but they would attack other monsters giving the effect of allince.
#
# Monster Pit Fights can also be made.
#
#--Default Animations
# charactername_melee - melee attacks
# charactername_cast - skills
#============================================================================
#--------------------------------------------------------------------------
# * SDK Log Script
#--------------------------------------------------------------------------
SDK.log("Mr.Mo's ABS", "Mr.Mo", 4.5, "01/04/06")
#--------------------------------------------------------------------------
# * Begin SDK Enable Test
#--------------------------------------------------------------------------
if SDK.state("Mr.Mo's ABS") == true
#--------------------------------------------------------------------------
# * Constants - MAKE YOUR EDITS HERE
#--------------------------------------------------------------------------
CAN_DASH = true #Can the player Dash?
CAN_SNEAK = true #Can the player sneak?
#--------------------------------------------------------------------------
ATTACK_KEY = Input::Letters["S"]
#--------------------------------------------------------------------------
# Do not change the '=> 0', part.
# To Add more just make a new line; there are 10 examples :P
# Besides Numberkeys, you can use;
# Input::Letters["LETTER"] Make sure the letter is in CAPS.
# Input::Numberpad[number]
# Input:keys[number]
# For more keys look in to the Input Script
SKILL_KEYS = {Input::Numberkeys[0] => 0,
Input::Numberkeys[1] => 0,
Input::Numberkeys[2] => 0,
Input::Numberkeys[3] => 0,
Input::Numberkeys[4] => 0,
Input::Numberkeys[5] => 0,
Input::Numberkeys[6] => 0,
Input::Numberkeys[7] => 0,
Input::Numberkeys[8] => 0,
Input::Numberkeys[9] => 0,
Input::Letters["A"] => 0,
}
# You can use a skill key for item key as well, but I used some other keys here
# as well.
ITEM_KEYS = {Input::Numberkeys[0] => 0,
Input::Numberkeys[1] => 0,
Input::Letters["B"] => 0,
}
# NOTE: IF you don't plan to use item or skill hot keys just deleted inside { }.
#--------------------------------------------------------------------------
SNEAK_KEY = Input::Letters["Z"]
DASH_KEY = Input::Letters["X"]
#--------------------------------------------------------------------------
# Add Dash and Sneak animation_suffix here.
DASH_ANIMATION = "_dash"
SNEAK_ANIMATION = "_sneak"
# Change characterset when dash or sneak?
DASH_SHO_AN = false
SNEAK_SHO_AN = false
#--------------------------------------------------------------------------
# You do not need to add the animation suffixes if you don't want the player
# to animate when attacking.
#--------------------------------------------------------------------------
#Ranged Weapons
RANGE_WEAPONS = {}
# RANGE_WEAPONS[Weapon_ID] =
#[Character Set Name, Move Speed, Animation, Ammo, Range, Mash Time(in seconds), Kick Back(in tiles),Animation Suffix]
# Leave kickback 0 if you don't want kick back effect.
RANGE_WEAPONS[17] = ["Arrow", 5, 4, 35, 10, 3, 1, "_bow"]
RANGE_WEAPONS[18] = ["Arrow", 5, 4, 35, 10, 4, 0]
RANGE_WEAPONS[33] = ["Ammo", 6, 4, 34, 10, 4, 0]
RANGE_WEAPONS[22] = ["Ammo", 15, 4, 0, 12, 0, 1]
#--------------------------------------------------------------------------
#Ranged Skills
RANGE_SKILLS = {}
# RANGE_SKILLS[Skill_ID] = [Range, Move Speed, Character Set Name, Mash Time(in seconds), Kick Back(in tiles)]
RANGE_SKILLS[7] = [10, 5, "Magic Balls", 3, 1]
RANGE_SKILLS[35] = [10, 5, "Magic Balls", 3, 0]
#--------------------------------------------------------------------------
#Ranged Explosives
RANGE_EXPLODE = {}
# RANGE_EXPLODE[Skill_ID] = [Range, Move Speed, Character Set Name, Explosive Range, Mash Time(in seconds), Kick Back(in tiles)]
RANGE_EXPLODE[8] = [10, 6, "183-Rock02", 5, 3, 2]
#--------------------------------------------------------------------------
# Since Melee weapons aren't listed I made this for customazation of melee weapons.
MELEE_CUSTOM = {}
# if left blank the default mash time will be MASH_TIME(below)
# No need to use the animation suffix if you don't plan to animate the player's character set.
# MELEE_CUSTOM[Weapon_ID] = [Mash Time(in seconds), Kick Back(in tiles), animation suffix]
MELEE_CUSTOM[1] = [3, 0, "_melee"]
MELEE_CUSTOM[2] = [10, 1]
MELEE_CUSTOM[49] = [5, 1]
#--------------------------------------------------------------------------
# Since some skills won't be listed(i.e non-ranged) I made this for customazation of melee weapons.
SKILL_CUSTOM = {}
# if left blank the default mash time will be MASH_TIME(below)
# No need to use the animation suffix if you don't plan to animate the player's character set.
# SKILL_CUSTOM[Skill_ID] = [Mash Time(in seconds), Kick Back(in tiles), animation suffix]
SKILL_CUSTOM[1] = [3, 0]
SKILL_CUSTOM[7] = [3, 0]
SKILL_CUSTOM[8] = [3, 0, "_cast"]
#--------------------------------------------------------------------------
# Game over once the player is dead?
GAME_OVER_DEAD = true
# When the leader dies and there are alive members, change party leader?
NEXT_LEADER = true
#--------------------------------------------------------------------------
#Mash Time
#Determines the cool down period between attacks of the player, in seconds.
MASH_TIME = 3
#--------------------------------------------------------------------------
#Should it display damage?
DISPLAY_DAMAGE = true
#--------------------------------------------------------------------------
#Hotkey should say
HOTKEY_SAY = "Assigner à la touche"
#--------------------------------------------------------------------------
#Terrain Tag
PASS_TAG = 1
#--------------------------------------------------------------------------
ANIMATE_PLAYER = true
ANIMATE_ENEMY = false
#--------------------------------------------------------------------------
DASH_SPEED = 5
SNEAK_SPEED = 3
#--------------------------------------------------------------------------
#Max frames the player can run or sneak
DASH_MAX = 100
SNEAK_MAX = 100
#--------------------------------------------------------------------------
#Should the states be gone after a while?
STATES_UPDATE = true
#If true
STATES = {}
#STATES[STATE_ID] = [DURATION in FRAMES, 0]
#if Duration is 0 the state will stay there until healed(item, skill).
#10 frames = 1 sec
STATES[1] = 0 #Until Healed
STATES[2] = 200 #20 seconds
STATES[3] = 200 #20 seconds
STATES[4] = 200 #20 seconds
STATES[5] = 200 #20 seconds
STATES[6] = 200 #20 seconds
STATES[7] = 200 #20 seconds
STATES[8] = 200 #20 seconds
STATES[9] = 200 #20 seconds
STATES[10] = 200 #20 seconds
STATES[17] = 200 #20 seconds
STATES[18] = 200 #20 seconds
STATES[19] = 200 #20 seconds
#--------------------------------------------------------------------------
# Allow state effects?
STATE_EFFECTS = true
# Assign the ID of states to each variable. Each effect is described. You can
# add more then one id to each to get the effect you want.
STUN_EFFECT = [2] # No movement/atk/skill, and can't use items.
DAZZLE_EFFECT = [4] # Makes the screen bright.
MUTE_EFFECT = [5] # Can't use skill.
CONFUSE_EFFECT = [6] # Controls randomly don't work.
SLEEP_EFFECT = [7] # Can't move until you get hit.
PARALAYZE_EFFECT = [8] # Move slowly, cant attack or use skills.
CLUMSY_EFFECT = [9,10] # Can't run or sneak.
DELAY_EFFECT = [11] # Walk slow, can't run.
BLIND_EFFECT = [17] # Make screen darker.
SPEED_UP = [18] # Can run without depleting the bar.
LIGHT_FEET =[19] # Can sneak without depleting the bar.
#--------------------------------------------------------------------------
#Display Level UP?
DISPLAY_LEVELUP = true
#Level Up Music, leave "" if no music
LEVELUP_MUSIC = "004-Victory04"
#--------------------------------------------------------------------------
#Fade dead?
FADE_DEAD = true
#--------------------------------------------------------------------------
#Can Hurt Allies
CAN_HURT_ALLY = true
#--------------------------------------------------------------------------
ANIMATION_DIVIDE = 2
#--------------------------------------------------------------------------
DAMAGE_FONT_NAME = "Arial Black"
#--------------------------------------------------------------------------
DAMAGE_FONT_SIZE = 22
#--------------------------------------------------------------------------
# To change the color you need to adjust the numbers below.
# The numbers reperesnt 3 colors, red, greend and blue. All you have to do is
# just change the numbers.
# Color.new(RED,GREEN,BLUE)
DAMAGE_FONT_COLOR = Color.new(0,0,255)
#--------------------------------------------------------------------------
# If the party has a revive item, than the player will revive after death.
REVIVE = true
# Death(Knockout) state Id
DEATH_STATE_ID = 1
#--------------------------------------------------------------------------
# * Class Mo ABS - DO NOT EDIT BELOW, if you don't know what you are doing
#--------------------------------------------------------------------------
class MrMo_ABS
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :enemies #Enemy List
attr_accessor :can_dash #Player Dash Boolean
attr_accessor :can_sneak #Player Sneak Boolean
attr_accessor :can_update_states # Update States
attr_accessor :attack_key #Attack Key
attr_accessor kill_keys #Skill Keys
attr_accessor :item_keys #Item Keys
attr_accessor :range
attr_accessor :damage_display
attr_accessor :dash_max
attr_accessor :dash_min
attr_accessor neak_max
attr_accessor neak_min
attr_accessor :active
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
#ABS Enemy Variables
@enemies = {}
#Dash
@can_dash = CAN_DASH
#Sneak
@can_sneak = CAN_SNEAK
#States
@can_update_states = STATES_UPDATE
#Attack Key
@attack_key = ATTACK_KEY
#Skill Keys
@skill_keys = SKILL_KEYS
#Item Keys
@item_keys = ITEM_KEYS
#Button Mash
@button_mash = 0
#Ranged Skills and Weapons
@range = []
#Display Demage true:false
@damage_display = DISPLAY_DAMAGE
#Game Over?
@game_over = GAME_OVER_DEAD
#Player Animated?
@player_ani = ANIMATE_PLAYER
#Enemy Animated?
@enemy_ani = ANIMATE_ENEMY
#Get Hate
@get_hate = true
# Dashing
@dashing = false
@dash_max = DASH_MAX
@dash_min = @dash_max
@dash_speed = DASH_SPEED
# Sneaking
@sneaking = false
@sneak_max = SNEAK_MAX
@sneak_min = @sneak_max
@sneak_speed = SNEAK_SPEED
# Old Speed
@old_speed = 4
# PvP - N+ Only
@pvp_active = true
# ABS Active
@active = true
end
#--------------------------------------------------------------------------
# * Range Weapons
#--------------------------------------------------------------------------
def RANGE_WEAPONS
return RANGE_WEAPONS
end
#--------------------------------------------------------------------------
# * Damage Font Size
#--------------------------------------------------------------------------
def DAMAGE_FONT_SIZE
return DAMAGE_FONT_SIZE
end
#--------------------------------------------------------------------------
# * Damage Font Name
#--------------------------------------------------------------------------
def DAMAGE_FONT_NAME
return DAMAGE_FONT_NAME
end
#--------------------------------------------------------------------------
# * Damage Font Color
#--------------------------------------------------------------------------
def DAMAGE_FONT_COLOR
return DAMAGE_FONT_COLOR
end
#--------------------------------------------------------------------------
# * Range Skills
#--------------------------------------------------------------------------
def RANGE_SKILLS
return RANGE_SKILLS
end
#--------------------------------------------------------------------------
# * Range Explode
#--------------------------------------------------------------------------
def RANGE_EXPLODE
return RANGE_EXPLODE
end
#--------------------------------------------------------------------------
# * Hotkey
#--------------------------------------------------------------------------
def HOTKEY_SAY
return HOTKEY_SAY
end
#--------------------------------------------------------------------------
# * Pass Tag
#--------------------------------------------------------------------------
def PASS_TAG
return PASS_TAG
end
#--------------------------------------------------------------------------
# * Animation Divide
#--------------------------------------------------------------------------
def ANIMATION_DIVIDE
return ANIMATION_DIVIDE
end
#--------------------------------------------------------------------------
# * ABS Refresh(Event, List, Characterset Name
#--------------------------------------------------------------------------
def refresh(event, list, character_name)
@get_hate = true
#Delete the event from the list
@enemies.delete(event.id)
#Skip the event if its invisible or doesn't contain a list
return if character_name == "" or list == nil
#Get the parameters
parameters = SDK.event_comment_input(event, 11, "ABS")
#Skip if the paramete is NIL
return if parameters.nil?
#Get Enemy ID
id = parameters[0].split
#Get Enemy
enemy = $data_enemies[id[1].to_i]
#Skip If Enemy is NIL
return if enemy == nil
@enemies[event.id] = ABS_Enemy.new(enemy.id)
#Set Event ID
@enemies[event.id].event_id = event.id
#Get Event
@enemies[event.id].event = event
#Set Behavior
behavior = parameters[1].split
@enemies[event.id].behavior = behavior[1].to_i
#Set See Range
see_range = parameters[2].split
@enemies[event.id].see_range = see_range[1].to_i
#Set Hear Range
hear_range = parameters[3].split
@enemies[event.id].hear_range = hear_range[1].to_i
#Set Closest Enemy Boolean
closest_enemy = parameters[4].split
@enemies[event.id].closest_enemy = eval(closest_enemy[1])
#Set Hate Group
hate_group = parameters[5].split
@enemies[event.id].hate_group = eval(hate_group[1])
#Set Aggresiveness
aggressiveness = parameters[6].split
@enemies[event.id].aggressiveness = aggressiveness[1].to_i
#Set Speed
speed = parameters[7].split
@enemies[event.id].temp_speed = speed[1].to_i
#Set Frequency
freq = parameters[8].split
@enemies[event.id].temp_frequency = freq[1].to_i
#Set Trigger
trigger = parameters[9].split
@enemies[event.id].trigger= [trigger[1].to_i, trigger[2].to_i, trigger[3].to_i]
#Respawn
if parameters[10] != nil
respawn = parameters[10].split
@enemies[event.id].respawn = respawn[1].to_i * 10
end
end
#--------------------------------------------------------------------------
# * Make Hate Points(Enemy)
#--------------------------------------------------------------------------
def make_hate_points(e)
#Get all the enemies of the enemy
e.hate_points[$game_player.event_id] = rand(999)
for id in e.hate_group
#See if the ID in the Hate group is in the enemy ID
for enemy in @enemies.values
#Skip NIL values
next if enemy == nil
if enemy.enemy_id == id
#Insert in to the list if the enemy is in hate group
e.hate_points[enemy.event_id] = rand(999)
end
end
end
end
#--------------------------------------------------------------------------
# * Update(Frame)
#--------------------------------------------------------------------------
def update
#Update Player
update_player if @active
#Update Enemy AI
update_enemy if @enemies != {} and @active
#Update Dash
update_dash if @can_dash
#Update Sneak
update_sneak if @can_sneak
#Update States
update_states if @can_update_states
#Update Ranged
for range in @range
next if range == nil
range.update
end
end
#--------------------------------------------------------------------------
# * Revive Actor
#--------------------------------------------------------------------------
def revive_actor
items = []
# Get the item that revives
for i in $game_party.items.keys
next if $game_party.items == 0 or $game_party.items == nil
item = $data_items
next if !item.minus_state_set.include?(DEATH_STATE_ID) or item.scope < 3
items.push(i)
end
# If list is empty
if items == [] or items == nil or !REVIVE
$game_temp.gameover = @game_over
else
i = rand(items.size)
item = $data_items[items]
# If effect scope is an ally
if item.scope >= 3
# Apply item use effects to target actor
target = @actor
used = target.item_effect(item)
# If an item was used
if used
#Show animation on player
$game_player.animation_id = item.animation1_id
# Play item use SE
$game_system.se_play(item.menu_se)
# If consumable; Decrease used items by 1
$game_party.lose_item(item.id, 1) if item.consumable
# If all party members are dead; Switch to game over screen
return $scene = Scene_Gameover.new if $game_party.all_dead?
# If common event ID is valid; Common event call reservation
return $game_temp.common_event_id = item.common_event_id if item.common_event_id > 0
# If effect scope is other than an ally
end
else
# If command event ID is valid
if item.common_event_id > 0
# Command event call reservation
$game_temp.common_event_id = item.common_event_id
# Play item use SE
$game_system.se_play(item.menu_se)
# If consumable; Decrease used items by 1
$game_party.lose_item(item.id, 1) if item.consumable
end
end
end
end
#--------------------------------------------------------------------------
# * Update States(Frame)
#--------------------------------------------------------------------------
def update_states
# For Player
actor = $game_party.actors[0]
for id in $game_party.actors[0].states
next if !STATES.has_key?(id)
state = STATES[id]
next if state == 0
add_state_effect(state,id) if actor.state_time == 0
actor.state_time += 1
if actor.state_time >= state
$game_party.actors[0].remove_state(id)
actor.state_time = 0
remove_state_effects(id)
return
end
update_states_effects(id)
end
if actor.hp > 0 and actor.slip_damage? and Graphics.frame_count % (40) == 0 and !$game_player.moving?
actor.hp -= [actor.maxhp / 100, 1].max
if actor.hp == 0
$game_system.se_play($data_system.actor_collapse_se)
if NEXT_LEADER and !$game_party.all_dead?
move_forward
else
revive_actor
end
end
$game_screen.start_flash(Color.new(255,0,0,128), 4)
end
end
#--------------------------------------------------------------------------
# * Add State Effect(State, ID)
#--------------------------------------------------------------------------
def add_state_effect(state,id)
if STATE_EFFECTS
if DAZZLE_EFFECT.include?(id)
$game_screen.start_tone_change(Tone.new(200, 200, 130, 0), 20)
elsif BLIND_EFFECT.include?(id)
$game_screen.start_tone_change(Tone.new(-200,-200,-200, 0), 50)
elsif STUN_EFFECT.include?(id)
$game_player.movable = false
elsif SLEEP_EFFECT.include?(id)
$game_player.movable = false
elsif PARALAYZE_EFFECT.include?(id)
if @sneaking or @dashing
$game_player.move_speed = @old_speed
@sneaking = false
@dashing = false
end
@old_speed = $game_player.move_speed
elsif DELAY_EFFECT.include?(id)
if @sneaking or @dashing
$game_player.move_speed = @old_speed
@sneaking = false
@dashing = false
end
@old_speed = $game_player.move_speed
end
end
end
#--------------------------------------------------------------------------
# * Update State Effect(State, ID)
#--------------------------------------------------------------------------
def update_states_effects(id)
return if !STATE_EFFECTS
if PARALAYZE_EFFECT.include?(id)
$game_player.move_speed = 1
elsif DELAY_EFFECT.include?(id)
$game_player.move_speed = 2
elsif SPEED_UP.include?(id)
@dash_min = @dash_max
elsif LIGHT_FEET.include?(id)
@sneak_min = @sneak_max
end
end
#--------------------------------------------------------------------------
# * Removve State Effect(State, ID)
#--------------------------------------------------------------------------
def remove_state_effects(id)
return if !STATE_EFFECTS
if STUN_EFFECT.include?(id)
$game_player.movable = true
elsif DAZZLE_EFFECT.include?(id)
$game_screen.start_tone_change(Tone.new(0, 0, 0, 0), 50)
elsif BLIND_EFFECT.include?(id)
$game_screen.start_tone_change(Tone.new(0, 0, 0, 0), 50)
elsif SLEEP_EFFECT.include?(id)
$game_player.movable = true
elsif PARALAYZE_EFFECT.include?(id)
$game_player.move_speed = @old_speed
elsif DELAY_EFFECT.include?(id)
$game_player.move_speed = @old_speed
end
end
#--------------------------------------------------------------------------
# * Update Respawn(enemy)
#--------------------------------------------------------------------------
def update_respawn(enemy)
event = enemy.event
return if enemy.respawn == 0 or event.erased == false
enemy.respawn -= 1
if enemy.respawn == 0
event.moveto(event.event.x,event.event.y)
event.erased = false
event.refresh
end
end
#--------------------------------------------------------------------------
# * Update Enemy AI(Frame)
#--------------------------------------------------------------------------
def update_enemy
#Get all the enemies on the list
for enemy in @enemies.values
#Skip NIL values
next if enemy == nil
if enemy.dead?
update_respawn(enemy)
next
end
#Update Enemy State
update_enemy_state(enemy)
#Skip if not on screen
next if !in_screen?(enemy.event)
#Make Hate Points
make_hate_points(enemy) if @get_hate
next if !enemy.in_battle and !update_enemy_ai(enemy)
update_enemy_battle(enemy) if enemy.in_battle and enemy.behavior != 0
end
@get_hate = false
end
#--------------------------------------------------------------------------
# * Update Enemy State(Enemy)
#--------------------------------------------------------------------------
def update_enemy_state(enemy)
for id in enemy.states
next if !STATES.has_key?(id)
state = STATES[id]
next if state == 0
enemy.state_time += 1
if enemy.state_time >= state
enemy.remove_state(id)
enemy.state_time = 0
return
end
end
if enemy.hp > 0 and enemy.slip_damage? and Graphics.frame_count % (40) == 0
enemy.hp -= [enemy.maxhp / 100, 1].max
if enemy.hp <= 0
enemy_dead?(enemy,nil)
end
end
end
#--------------------------------------------------------------------------
# * Update Enemy Battle(Enemy)
#--------------------------------------------------------------------------
def update_enemy_battle(enemy)
# If the enemy can't see it's enemy, skip the enemy
if (!in_range?(enemy.event, enemy.attacking.event, enemy.see_range) and
!in_range?(enemy.event, enemy.attacking.event, enemy.hear_range)) or
(enemy.attacking == nil or enemy.attacking.actor.dead? or !enemy.hate_group.include?(enemy.attacking.enemy_id))
# Restore movement
restore_movement(enemy)
# Take it out off battle
enemy.in_battle = false
enemy.attacking = nil
return
end
# Update the enemy attack or follow
update_enemy_attack(enemy,enemy.attacking) if Graphics.frame_count % (enemy.aggressiveness * 30) == 0
# Skip this if the attack killed the enemy
return if enemy == nil or enemy.attacking == nil or enemy.event.moving?
enemy.event.move_to(enemy.attacking.event) if !in_range?(enemy.event, enemy.attacking.event, 1)
enemy.event.turn_to(enemy.attacking.event) if !in_direction?(enemy.event, enemy.attacking.event) and in_range?(enemy.event, enemy.attacking.event, 1)
end
#--------------------------------------------------------------------------
# * Update Enemy AI(Enemy)
#--------------------------------------------------------------------------
def update_enemy_ai(enemy)
#Get the enemy behavior
b = enemy.behavior
return true if b == 0 # Dummy
#Next enemy if this enemy can't see the player
return true if b == 1 and !can_enemy_see(enemy)
#Next enemy if this enemy can't hear the player
return true if b == 2 and !can_enemy_hear(enemy)
#Next enemy if this enemy can't see or hear the player
return true if b == 3 and !can_enemy_see(enemy) and !can_enemy_hear(enemy)
#Next if its not
return true if b == 4 and !enemy_ally_in_battle?(enemy)
#Next enemy if this enemy can't see or hear the player
return true if b == 5 and !can_enemy_see(enemy) and !can_enemy_hear(enemy) and !enemy_ally_in_battle?(enemy)
#Return false
return false
end
#--------------------------------------------------------------------------
# * Update Enemy Attack(Enemy)
#--------------------------------------------------------------------------
def update_enemy_attack(e,actor)
#Return if the enemy can't attack
return if e.actions == nil or e.actions == [] or e == nil
#Get all actions
for action in e.actions
#Next if enemy can't attack
next if enemy_pre_attack(e, action)
#Get the current action kind
case action.kind
when 0 # Basic
#Get the action
case action.basic
when 0 #Attack
next if !in_range?(e.event, actor.event, 1) or !in_direction?(e.event, actor.event)
#Attack it's enemy
a = actor if actor.is_a?(ABS_Enemy)
a = $game_party.actors[0] if !actor.is_a?(ABS_Enemy)
a.attack_effect(e)
#Animate the enemy
e.event.animation_id = e.animation1_id
animate(e.event, e.event.character_name+"_melee") if @enemy_ani
#Show Animation
hit_enemy(actor,e) if a.damage != "Miss" and a.damage != 0
#Check if enemy's enemy is dead
return if enemy_dead?(a,e)
#Make enemy
return if !a.is_a?(ABS_Enemy)
return if a.attacking == e and a.in_battle
#Set the new target for the enemy
a.attacking = e
#The enemy is now in battle
a.in_battle = true
#Setup movement
setup_movement(e)
return
when 1..3 #Nothing
return
end
when 1..2 #Skill
#Get the skill
skill = $data_skills[action.skill_id]
#Return if the skill is NIL
return if skill == nil
#Get the skill scope
case skill.scope
when 1 # One Enemy
return if Graphics.frame_count % (e.aggressiveness * 30) != 0
next if !in_direction?(e.event, actor.event)
next if !e.can_use_skill?(skill)
#Animate the enemy
e.event.animation_id = skill.animation1_id
animate(e.event, e.event.character_name+"_cast") if @enemy_ani
if RANGE_SKILLS.has_key?(skill.id)
@range.push(Game_Ranged_Skill.new(e.event, e, skill))
e.sp -= skill.sp_cost
return
end
#If the skill is not ranged
enemies = []
#Get all enemies
for enemy in @enemies.values
next if enemy == nil or enemy == e
next if !e.hate_group.include?(enemy.enemy_id)
enemies.push(enemy)
end
enemies.push($game_player) if e.hate_group.include?(0)
#Order them from closest to the farthest
enemies.sort! {|a,b|
get_range(e.event,a.event) - get_range(e.event,b.event)}
#Attack the closest one
enemies[0].actor.effect_skill(e, skill)
#Take off SP
e.sp -= skill.sp_cost
#Show Animetion on enemy
hit_enemy(enemies[0], e, skill.animation2_id) if enemies[0].actor.damage != "Miss" and enemies[0].actor.damage != 0
#Return if enemy is dead
return if enemy_dead?(enemies[0].actor,e)
return if enemies[0].is_a?(Game_Player)
return if enemies[0].attacking == e and enemies[0].in_battle
#If its alive, put it in battle
enemies[0].in_battle = true
#Make it attack the player
enemies[0].attacking = e
#Setup movement
setup_movement(e)
return
when 3..4, 7 # User
return if Graphics.frame_count % (e.aggressiveness * 100) != 0
next if e.hp > skill.power.abs
#Animate the enemy
e.event.animation_id = skill.animation1_id
animate(e.event, e.event.character_name+"_cast") if @enemy_ani
e.effect_skill(e, skill)
e.sp -= skill.sp_cost
e.event.animation_id = skill.animation2_id
return
end
return
end
end
end
#--------------------------------------------------------------------------
# * Update Player
#--------------------------------------------------------------------------
def update_player
#Keep the current party leader updated
@actor = $game_party.actors[0]
#Update click time
@button_mash -= 1 if @button_mash > 0
return if @button_mash > 0
#Check Ranged attack
if Input.trigger?(@attack_key)
#Check State Effect
if STATE_EFFECTS
for id in $game_party.actors[0].states
return if STUN_EFFECT.include?(id) or PARALAYZE_EFFECT.include?(id)
end
end
return player_range if RANGE_WEAPONS.has_key?(@actor.weapon_id)
return player_melee
end
return if @enemies == {}
#Check for Skill attacks
for key in @skill_keys.keys
next if @skill_keys[key] == nil or @skill_keys[key] == 0
next if !Input.trigger?(key)
if STATE_EFFECTS
for i in $game_party.actors[0].states
return if STUN_EFFECT.include?(i) or PARALAYZE_EFFECT.include?(i) or MUTE_EFFECT.include?(i)
end
end
id = @skill_keys[key]
if RANGE_EXPLODE.has_key?(id)
return player_explode(id)
else
return player_skill(id)
end
end
#Check Item
check_item
end
#--------------------------------------------------------------------------
# * Check Item
#--------------------------------------------------------------------------
def check_item
#Check for item usage
for key in @item_keys.keys
next if @item_keys[key] == nil or @item_keys[key] == 0
next if !Input.trigger?(key)
if STATE_EFFECTS
for i in $game_party.actors[0].states
return if STUN_EFFECT.include?(i)
end
end
item = $data_items[@item_keys[key]]
return $game_system.se_play($data_system.buzzer_se) if !$game_party.item_can_use?(item.id)
# If items are used up; Play buzzer SE
return $game_system.se_play($data_system.buzzer_se) if $game_party.item_number(item.id) == 0
# If effect scope is an ally
if item.scope >= 3
# Apply item use effects to target actor
target = $game_party.actors[0]
used = target.item_effect(item)
# If an item was used
if used
#Show animation on player
$game_player.animation_id = item.animation1_id
# Play item use SE
$game_system.se_play(item.menu_se)
# If consumable; Decrease used items by 1
$game_party.lose_item(item.id, 1) if item.consumable
# If all party members are dead; Switch to game over screen
return $scene = Scene_Gameover.new if $game_party.all_dead?
# If common event ID is valid; Common event call reservation
return $game_temp.common_event_id = item.common_event_id if item.common_event_id > 0
# If effect scope is other than an ally
end
else
# If command event ID is valid
if item.common_event_id > 0
# Command event call reservation
$game_temp.common_event_id = item.common_event_id
# Play item use SE
$game_system.se_play(item.menu_se)
# If consumable; Decrease used items by 1
$game_party.lose_item(item.id, 1) if item.consumable
end
end
end
end
#--------------------------------------------------------------------------
# * Player Ranged Attack
#--------------------------------------------------------------------------
def player_range
#Get the weapon
w = RANGE_WEAPONS[@actor.weapon_id]
#Return if the ammo isn't there
return if w[3] != 0 and $game_party.item_number(w[3]) == 0
$game_player.animation_id = $data_weapons[@actor.weapon_id].animation1_id
#Add mash time
@button_mash = (w[5] == nil ? MASH_TIME*10 : w[5]*10)
#Delete an ammo
$game_party.lose_item(w[3], 1) if w[3] != 0
#Make the attack
@range.push(Game_Ranged_Weapon.new($game_player, @actor, @actor.weapon_id))
#Animate
return if w[7] == nil
animate($game_player, $game_player.character_name+w[7].to_s) if @player_ani
return
end
#--------------------------------------------------------------------------
# * Player Melee Attack
#--------------------------------------------------------------------------
def player_melee
return if $data_weapons[@actor.weapon_id] == nil
#Get all enemies
for e in @enemies.values
#Skip NIL values or dead enemies
next if e == nil or e.dead?
#Skip the enemy if its not close by or not facing
next if !in_direction?($game_player, e.event) or !in_range?($game_player, e.event, 1)
# Skip if the enemy is an ally and can't hurt allies.
next if !CAN_HURT_ALLY and e.hate_group.include?(0)
# Show Weapon Aniamtion
$game_player.animation_id = $data_weapons[@actor.weapon_id].animation1_id
#Add mash time
m = MELEE_CUSTOM[@actor.weapon_id]
if m != nil and m[0] != nil
@button_mash = m[0]*10
else
@button_mash = MASH_TIME*10
end
#Attack the enemy
e.attack_effect(@actor)
#Get Animation
a = $data_weapons[@actor.weapon_id].animation2_id
#Hit enemy if the attack succeeds
hit_enemy(e, @actor, a) if e.damage != "Miss" and e.damage != 0
#Jump
jump(e.event, $game_player, MELEE_CUSTOM[@actor.weapon_id][1]) if MELEE_CUSTOM[@actor.weapon_id] != nil and e.damage != "Miss" and e.damage != 0
#Animate the player
if MELEE_CUSTOM[@actor.weapon_id] != nil and MELEE_CUSTOM[@actor.weapon_id][2] == nil
animate($game_player, $game_player.character_name+"_melee") if @player_ani
elsif MELEE_CUSTOM[@actor.weapon_id] != nil
m = MELEE_CUSTOM[@actor.weapon_id][2]
animate($game_player, $game_player.character_name+m.to_s) if @player_ani
end
#Return if the enemy is dead
return if enemy_dead?(e,@actor)
return if !e.hate_group.include?(0)
#Set the new target for the enemy
e.attacking = $game_player
#The enemy is now in battle
e.in_battle = true
#Setup movement
setup_movement(e)
end
end
#--------------------------------------------------------------------------
# * Player Skill Attack
#--------------------------------------------------------------------------
def player_skill(id)
@actor = $game_party.actors[0]
#Get Skill
skill = $data_skills[id]
#Return if the skill doesn't exist
return if skill == nil
#Return if the actor doesn't have the skill
return if !@actor.skills.include?(skill.id)
#Return if the actor can't use the skill
return if !@actor.can_use_skill?(skill)
# Show Animation
$game_player.animation_id = skill.animation1_id
#Animate
if SKILL_CUSTOM.has_key?(id)
l = SKILL_CUSTOM[id]
animate($game_player, $game_player.character_name+l[2].to_s) if @player_ani
else
animate($game_player, $game_player.character_name+"_cast") if @player_ani
end
id = skill.id
#Activate Common Event
if skill.common_event_id > 0
# Common event call reservation
$game_temp.common_event_id = skill.common_event_id
end
#Get the skill scope
case skill.scope
when 1 #Enemy
#If the skill is ranged
if RANGE_SKILLS.has_key?(skill.id)
#Add to range
@range.push(Game_Ranged_Skill.new($game_player, @actor, skill))
#Take off SP
@actor.sp -= skill.sp_cost
w = RANGE_SKILLS[id]
#Add mash time
@button_mash = (w[3] == nil ? MASH_TIME*10 : w[3]*10)
return
end
if SKILL_CUSTOM[id] != nil
@button_mash = (SKILL_CUSTOM[id] == nil ? MASH_TIME*10 : SKILL_CUSTOM[id] != nil and SKILL_CUSTOM[id][0] != nil ? SKILL_CUSTOM[id][0]*10 : MASH_TIME*10)
else
@button_mash = MASH_TIME*10
end
#If the skill is not ranged
enemies = []
#Get all enemies
for enemy in @enemies.values
next if enemy == nil
next if !enemy.hate_group.include?(0) and !CAN_HURT_ALLY
enemies.push(enemy)
end
e = $game_player
#Order them from closest to the farthest
enemies.sort! {|a,b|
get_range(e.event,a.event) - get_range(e.event,b.event) }
# Return if enemies = nil
return if enemies[0] == nil
# Attack the closest one
enemies[0].effect_skill(@actor, skill)
#Take off SP
@actor.sp -= skill.sp_cost
#Show Animetion on enemy
hit_enemy(enemies[0], @actor, skill.animation2_id) if enemies[0].damage != "Miss" and enemies[0].damage != 0
e = enemies[0]
jump(e.event, $game_player, SKILL_CUSTOM[id][1]) if SKILL_CUSTOM[id] != nil and e.damage != "Miss" and e.damage != 0
#Return if enemy is dead
return if enemy_dead?(enemies[0],@actor)
return if !enemy.hate_group.include?(0)
#If its alive, put it in battle
enemies[0].in_battle = true
#Make it attack the player
enemies[0].attacking = $game_player
#Setup movement
setup_movement(enemies[0])
return
when 2 #All Emenies
#Play the animation on player
$game_player.animation_id = skill.animation2_id
#Take off SP
@actor.sp -= skill.sp_cost
id = skill.id
#If the skill is ranged
if RANGE_SKILLS.has_key?(skill.id)
enemies = get_all_range($game_player, RANGE_SKILLS[skill.id][0])
w = RANGE_SKILLS[id]
#Add mash time
@button_mash = (w[3] == nil ? MASH_TIME*10 : w[3]*10)
else
if SKILL_CUSTOM[id] != nil
@button_mash = (SKILL_CUSTOM[id] == nil ? MASH_TIME*10 : SKILL_CUSTOM[id] != nil and SKILL_CUSTOM[id][0] != nil ? SKILL_CUSTOM[id][0]*10 : MASH_TIME*10)
else
@button_mash = MASH_TIME*10
end
enemies = @enemies
end
#Get all enemies
for e in enemies.values
#Skip NIL values
next if e== nil
# Skip if the enemy is an ally and can't hurt allies.
next if !CAN_HURT_ALLY and e.hate_group.include?(0)
#Attack enemy
e.effect_skill(@actor, skill)
#Show Animetion on enemy
hit_enemy(e, @actor, 0) if e.damage != "Miss" and e.damage != 0
jump(e.event, $game_player, SKILL_CUSTOM[id][1]) if SKILL_CUSTOM[id] != nil and e.damage != "Miss" and e.damage != 0
#Skip this enemy if its dead
next if enemy_dead?(e,@actor)
next if !e.hate_group.include?(0)
#If its alive, put it in battle
e.in_battle = true
#Make it attack the player
e.attacking = $game_player
#Setup movement
setup_movement(e)
end
return
when 3..4, 7 #User
if SKILL_CUSTOM[id] != nil
@button_mash = (SKILL_CUSTOM[id] == nil ? MASH_TIME*10 : SKILL_CUSTOM[id] != nil and SKILL_CUSTOM[id][0] != nil ? SKILL_CUSTOM[id][0]*10 : MASH_TIME*10)
else
@button_mash = MASH_TIME*10
end
#Use the skill on the player
@actor.effect_skill(@actor, skill)
#Take off SP
@actor.sp -= skill.sp_cost
#Play animation
$game_player.animation_id = skill.animation2_id
return
end
end
#--------------------------------------------------------------------------
# * Player Explode Attack
#--------------------------------------------------------------------------
def player_explode(id)
#Get Skill
skill = $data_skills[id]
#Return if the skill doesn't exist
return if skill == nil
#Return if the actor doesn't have the skill
return if !@actor.skills.include?(skill.id)
#Return if the actor can't use the skill
return if !@actor.can_use_skill?(skill)
w = RANGE_EXPLODE[skill.id]
# Show Animation
$game_player.animation_id = skill.animation1_id
#Add mash time
@button_mash = (w[4] == nil ? MASH_TIME*10 : w[4]*10)
#Animate
if SKILL_CUSTOM.has_key?(id)
l = SKILL_CUSTOM[id]
animate($game_player, $game_player.character_name+l[2].to_s) if @player_ani
else
animate($game_player, $game_player.character_name+"_cast") if @player_ani
end
#Add to range
@range.push(Game_Ranged_Explode.new($game_player, @actor, skill))
#Take off SP
@actor.sp -= skill.sp_cost
return
end
#--------------------------------------------------------------------------
# * Enemy Dead?(Enemy) or (Player)
#--------------------------------------------------------------------------
def enemy_dead?(e,a)
#Return a new method if e is an actor
return player_dead?(e,a) if e.is_a?(Game_Actor)
#Return false if enemy dead
return false if !e.dead?
enemy = e
treasure(enemy) if a != nil and a.is_a?(Game_Actor)
a.attacking = nil if a != nil and !a.is_a?(Game_Actor)
a.in_battle = false if a != nil and !a.is_a?(Game_Actor)
id = enemy.event_id
#Remove from list
@enemies.delete(id) if @enemies[id].respawn == 0
event = enemy.event
case enemy.trigger[0]
when 0
event.fade = true if FADE_DEAD
if !FADE_DEAD
event.character_name = ""
event.erase
end
when 1
event.fade = true if FADE_DEAD
print "EVENT " + event.id.to_s + "Trigger Not Set Right ~!" if enemy.trigger[1] == 0
$game_switches[enemy.trigger[1]] = true
$game_map.need_refresh = true
when 2
event.fade = true if FADE_DEAD
print "EVENT " + event.id.to_s + "Trigger Not Set Right ~!" if enemy.trigger[1] == 0
if enemy.trigger[2] == 0
$game_variables[enemy.trigger[1]] += 1
$game_map.need_refresh = true
else
$game_variables[enemy.trigger[1]] = enemy.trigger[2]
$game_map.need_refresh = true
end
when 3
event.fade = true if FADE_DEAD
value = "A" if enemy.trigger[1] == 1
value = "B" if enemy.trigger[1] == 2
value = "C" if enemy.trigger[1] == 3
value = "D" if enemy.trigger[1] == 4
print "EVENT " + event.id.to_s + "Trigger Not Set Right ~!" if value == 0
key = [$game_map.map_id, event.id, value]
$game_self_switches[key] = true
$game_map.need_refresh = true
end
#Return true if the e is dead
return true
end
#--------------------------------------------------------------------------
# * Player Dead(Player,Enemy)
#--------------------------------------------------------------------------
def player_dead?(a,e)
#Check State Effect
if STATE_EFFECTS
for id in $game_party.actors[0].states
$game_player.movable = true if SLEEP_EFFECT.include?(id)
$game_party.actors[0].states.delete(id) if SLEEP_EFFECT.include?(id)
end
end
#return if the player is not dead
return false if !a.dead?
# If the player is dead;
e.in_battle = false if e != nil and !e.is_a?(Game_Actor)
e.attacking = nil if e != nil and !e.is_a?(Game_Actor)
# Game Over?
if NEXT_LEADER and !$game_party.all_dead?
move_forward
else
revive_actor
end
return true
end
#--------------------------------------------------------------------------
# * Move Forward
#--------------------------------------------------------------------------
def move_forward
# Return if party size is 1
return if $game_party.actors.size == 1
# Record current actor.
actor = $game_party.actors[0]
# Remove actor
$game_party.actors.delete(actor)
$game_party.actors.compact
# Check if everyone except leader is dead
if $game_party.all_dead?
$game_party.actors.insert(0,actor)
return
end
$game_player.end_animate
# Insert leader to last place
$game_party.actors.push(actor)
# Loop members until alive
for a in $game_party.actors
next if a == nil
if a.dead?
$game_party.actors.delete(a)
$game_party.actors.push(a)
else
break
end
end
# Refreshe game player
$game_player.refresh
end
#--------------------------------------------------------------------------
# * Treasure(Enemy)
#--------------------------------------------------------------------------
def treasure(enemy)
exp = 0
gold = 0
treasures = []
unless enemy.hidden
exp += enemy.exp
gold += enemy.gold
if rand(100) < enemy.treasure_prob
if enemy.item_id > 0
treasures.push($data_items[enemy.item_id])
end
if enemy.weapon_id > 0
treasures.push($data_weapons[enemy.weapon_id])
end
if enemy.armor_id > 0
treasures.push($data_armors[enemy.armor_id])
end
end
end
treasures = treasures[0..5]
for i in 0...$game_party.actors.size
actor = $game_party.actors
if actor.cant_get_exp? == false
last_level = actor.level
actor.exp += exp
if actor.level > last_level
actor.hp = actor.maxhp
actor.sp = actor.maxsp
#Show LEvel Up if need to
actor.damage = "~Level Up~" if DISPLAY_LEVELUP
Audio.me_play("Audio/ME/" + LEVELUP_MUSIC.to_s, 100, 100) if LEVELUP_MUSIC != ""
end
end
end
$game_party.gain_gold(gold)
for item in treasures
case item
when RPG::Item
$game_party.gain_item(item.id, 1)
when RPG::Weapon
$game_party.gain_weapon(item.id, 1)
when RPG::Armor
$game_party.gain_armor(item.id, 1)
end
end
end
#--------------------------------------------------------------------------
# * Hit Enemy(Enemy) or (Player)
#--------------------------------------------------------------------------
def hit_enemy(e,a,animation=nil)
return if animation == 0
# Animate player
animate(e,e.character_name+"_hit") if e.is_a?(Game_Player) and @player_ani
# Animate Enemy
animate(e.event, e.event.character_name+"_hit") if e.is_a?(ABS_Enemy) and @enemy_ani
if animation == nil
e.event.animation_id = a.animation2_id
else
e.event.animation_id = animation
end
end
#--------------------------------------------------------------------------
# * Jump
#--------------------------------------------------------------------------
def jump(object,attacker,plus)
return if plus == nil
n_plus = plus-(plus*2)
d = attacker.direction
# Calculate new pos
new_x = (d == 6 ? plus : d == 4 ? n_plus : 0)
new_y = (d == 2 ? plus : d == 8 ? n_plus : 0)
# Jump
object.jump_nt(new_x,new_y)
end
#--------------------------------------------------------------------------
# * Enemy Pre-Attack(Enemy,Actions) - Checks action conditions to see if the
# enemy can attack.
#--------------------------------------------------------------------------
def enemy_pre_attack(enemy, actions)
return true if enemy.hp * 100.0 / enemy.maxhp > actions.condition_hp
return true if $game_party.max_level < actions.condition_level
switch_id = actions.condition_switch_id
return true if actions.condition_switch_id > 0 and $game_switches[switch_id] == false
n = rand(11)
return true if actions.rating < n
return false
end
#--------------------------------------------------------------------------
# * Can Enemy See(Enemy)
#--------------------------------------------------------------------------
def can_enemy_see(e)
#Get all enemies of the enemy
enemies = []
enemies.push($game_player) if e.hate_group.include?(0) and in_range?(e.event, $game_player, e.see_range) or in_direction?(e.event, $game_player)
if e.hate_group.size > 1 or (e.hate_group.size == 1 and !e.hate_group.include?(0))
#Get the hate enemies
for enemy in @enemies.values
next if enemy == nil or enemy == e or !e.hate_group.include?(enemy.enemy_id) or
!in_range?(e.event, enemy.event, e.see_range) or !in_direction?(e.event, enemy.event)
#Insert in to the list if the enemy is in hate group
enemies.push(enemy)
end
end
#Return false if the list is nil or empty
return false if enemies == nil or enemies == []
#Order the enemies
if !e.closest_enemy
#Order from hate points
enemies.sort! {|a,b|
e.hate_points[b.event_id] - e.hate_points[a.event_id] }
else
enemies.sort! {|a,b|
get_range(e.event,a.event) - get_range(e.event,b.event) }
end
#Add to enemy attack list
e.attacking = enemies[0]
#Enemy is now in battle
e.in_battle = true
#Setup the movement
setup_movement(e)
#Return true
return true
end
#--------------------------------------------------------------------------
# * Setup the Movement Type to 0(Enemy)
#--------------------------------------------------------------------------
def setup_movement(e)
#Set Speed
e.event.move_speed = e.temp_speed
#Set Frequency
e.event.move_frequency = e.temp_frequency
#Set Move Type
e.temp_move_type = e.event.move_type
e.event.move_type = 0
end
#--------------------------------------------------------------------------
# * Restore the Movement Type(Enemy)
#--------------------------------------------------------------------------
def restore_movement(e)
#Restore Speed
e.temp_speed = e.event.move_speed
#Restore Frequency
e.temp_frequency = e.event.move_frequency
#Restore Move Type
e.event.move_type = e.temp_move_type
e.temp_move_type = 0
end
#--------------------------------------------------------------------------
# * Can Enemy Hear(Enemy)
#--------------------------------------------------------------------------
def can_enemy_hear(e)
enemies = []
#Get player
d = 0
d = DASH_SPEED if @dashing
enemies.push($game_player) if e.hate_group.include?(0) and !@sneaking and
in_range?(e.event, $game_player, e.hear_range+d)
if e.hate_group.size > 1 or (e.hate_group.size == 1 and !e.hate_group.include?(0))
#Get the hate enemies
for enemy in @enemies.values
next if enemy == nil or enemy == e or !e.hate_group.include?(enemy.enemy_id) or
!in_range?(e.event, enemy.event, e.hear_range+d)
#Insert in to the list if the enemy is in hate group
enemies.push(enemy)
end
end
#Return False
return false if enemies == nil or enemies == []
#Order the enemies
if !e.closest_enemy
#Order from hate points
enemies.sort! {|a,b|
e.hate_points[b.event_id] - e.hate_points[a.event_id] }
else
enemies.sort! {|a,b|
get_range(e.event,a.event) - get_range(e.event,b.event) }
end
#Add to enemy attack list
e.attacking = enemies[0]
#Enemy is now in battle
e.in_battle = true
#Setup the movement
setup_movement(e)
#Return true
return true
end
#--------------------------------------------------------------------------
# * Enemy Ally in_battle?(Enemy)
#--------------------------------------------------------------------------
def enemy_ally_in_battle?(enemy)
#Start list
allies = []
#Get all allies
for ally in @enemies.values
#Skip NIL Value or value is in hate group
next if ally == nil or enemy.hate_group.include?(ally.enemy_id)
#Skip if the ally is not in_battle or the enemy can't see ally
next if !ally.in_battle or !in_range?(enemy.event, ally.event, enemy.see_range)
#Skip if the enemy can't hear ally
next if !in_range?(enemy.event, ally.event, enemy.hear_range)
#Skip if is player and can't be player
next if ally.attacking == $game_player and !enemy.hate_group.include?(0)
#Add to enemy attack list
enemy.attacking = ally.attacking
#Enemy is now in battle
enemy.in_battle = true
#Setup the movement
setup_movement(enemy)
#Return True
return true
end
#Return False
return false
end
#--------------------------------------------------------------------------
# * Update Dash
#--------------------------------------------------------------------------
def update_dash
return if @sneaking
if Input.pressed?(DASH_KEY)
#Check State Effect
if STATE_EFFECTS
for id in $game_party.actors[0].states
return if CLUMSY_EFFECT.include?(id) or PARALAYZE_EFFECT.include?(id) or DELAY_EFFECT.include?(id)
end
end
if $game_player.moving?
@old_speed = $game_player.move_speed if !@dashing
$game_player.character_name = "#{$game_player.character_name}#{DASH_ANIMATION}" if !@dashing and DASH_SHO_AN
@dashing = true
$game_player.move_speed = DASH_SPEED
@dash_min -= 1
if @dash_min <= 0
@dashing = false
$game_player.move_speed = 4
end
end
elsif @dashing
@dashing = false
$game_player.move_speed = @old_speed if !@sneaking
$game_player.character_name = $game_player.character_name.sub(/#{DASH_ANIMATION}/){} if DASH_SHO_AN
else
@dash_min += 1 if @dash_min < @dash_max
end
end
#--------------------------------------------------------------------------
# * Update Sneak
#--------------------------------------------------------------------------
def update_sneak
return if @dashing
if Input.pressed?(SNEAK_KEY)
#Check State Effect
if STATE_EFFECTS
for id in $game_party.actors[0].states
return if CLUMSY_EFFECT.include?(id) or PARALAYZE_EFFECT.include?(id) or DELAY_EFFECT.include?(id)
end
end
if $game_player.moving?
@old_speed = $game_player.move_speed if !@sneaking
$game_player.character_name = "#{$game_player.character_name}#{SNEAK_ANIMATION}" if !@sneaking and SNEAK_SHO_AN
@sneaking = true
$game_player.move_speed = SNEAK_SPEED
@sneak_min -= 1
if @sneak_min <= 0
@sneaking = false
$game_player.move_speed = 4
end
end
elsif @sneaking
@sneaking = false
$game_player.move_speed = @old_speed if !@dashing
$game_player.character_name = $game_player.character_name.sub(/#{SNEAK_ANIMATION}/){} if SNEAK_SHO_AN
else
@sneak_min += 1 if @sneak_min < @sneak_max
end
end
#--------------------------------------------------------------------------
# * Get Range(Element, Object) - Near Fantastica
#--------------------------------------------------------------------------
def get_range(element, object)
x = (element.x - object.x) * (element.x - object.x)
y = (element.y - object.y) * (element.y - object.y)
r = x + y
#r = Math.sqrt(r)
return r.to_i
end
#--------------------------------------------------------------------------
# * Checks the object range
#--------------------------------------------------------------------------
def in_screen?(object)
screne_x = $game_ma
|
KeenX -
posté le 25/08/2012 à 17:02:18 (6 messages postés)
| | Superbe script Zeus, il rend le jeu beaucoup plus vivant et souple en terme d'expérience !
Pour les personnes qui l'utilise si jamais quelqu'un rencontre le même problème que moi, pour que les Events qui vous suivent puisse s'activer à votre contact sans que vous bougiez, Zeus m'a dit qu'il faut :
à ligne 1138, juste en dessous de : amsu_game_event_initialize(map_id, event)
Rajouter : @follow_distance = 0
(Et je précise au cas où que ça fonctionne ^^ Et je ne sais pas si le problème sera d'actualité si vous le prenez plus tard.)
|
gay164 -
posté le 31/08/2013 à 12:38:46 (23 messages postés)
| | Ce script est vraiment génial.
Par contre, comment se fait-il qu'on ne puisse pas courir en diagonale ? Et j'ai aussi remarqué qu'on se déplace plus vie en diagonale que tout droit.
|
Laamenace -
posté le 25/09/2013 à 05:48:05 (1 messages postés)
| | Salut zeus, depuis quelques temps je tente de finaliser mon jeu XP
en introduisant ton script AMS Ultimate mais sans succès due a mon autre script ( RE Shooting System) Je te serais énormément reconnaissant si tu pouvais m'aider.
J'ai le même problème que certain.
-Si je court en diagonal, il m'affiche une erreur
-si je tire en appuyant sur SHIFT+ENTER il m'affiche une erreur...
Fait moi signe je t'enverrai le jeu si tu est interressé je t'avais déja mis dans le générique du debut et de la fin du jeu -__-
Il est dément tu verra!
|
The Machine Creating Biohazard: Special Ops |
jibtou -
posté le 27/09/2013 à 19:08:37 (2 messages postés)
| | Salut Zeus
J'adore ton script et je l'utilise pour mon projet. J'ai même apporté quelques retouches pour l'adapter aux besoins de mon projet.
Mais il y a quelque chose que je n'arrive définitivement pas à faire:
Je cherche un moyen pour qu'un event aille se positionner aux coordonnées exacte du héros (celle définies par ton script) au pixel près et, si possible, de faire en sorte qu'un event "suive ces coordonnés". Qu'il reste à la même position que le héros quand celui-ci se déplace.
J'ai essayer de modifier la fonction move_toward_event mais sans succès.
Pourrait tu m'indiquer comment je dois m'y prendre ?
Si tu décide de m'aider je t'en remercie d'avance. Sinon bonne continuation à toi
|
zeus81 -
posté le 14/07/2014 à 16:33:33 (11071 messages postés)
| | La dernière version en date 1.4.1 dont le lien était mort : https://www.dropbox.com/s/n3il2oz9xfh5kvu/AMSU%201.4.1.zip
Je sais plus trop ce que j'avais modifié...
|
NanakyTim -
posté le 03/07/2020 à 23:56:30 (23817 messages postés)
| | Pas vraiment ma place vu que j'en suis pas l'auteur, mais j'ai tout de même amélioré l'AMSU donc je conseille vivement d'utiliser cette dernière version :
https://www.mediafire.com/file/6v6k3f6tcv3sx7c/AMS_Ultimate_1.5.zip
Les ajouts :
- Possibilité d'activer/désactiver le sprint et le saut comme bon vous semble (avant c'était soit activé, soit désactivé pour tout le jeu).
- Correction des noms de dossiers/fichiers contenant des espaces ou caractères spéciaux.
|
Héros ou Fléau ? Devenez le Roi de Quineroy ! ~ Plongez dans l'univers sombre du Darkans ! ~ Dimens Reis... Allez y faire un tour. ~ Rangez votre chambre ! ~ Avez-vous peur du noir ? ~ Sauvez le futur, en allant dans le passé: BOCALATOR... |
Silken -
posté le 30/10/2020 à 00:45:00 (7 messages postés)
| | Bonsoir,
Je n'ai pas trouvé l'information sur the thread ou sur les question concernant le SBS tanketai. Je ne code pas du tout et je me demandais si en l'état actuel des deux scripts sous RMXP l'utilisation de ces deux scripts sont compatibles ? Le SBS gérant une partie des charsets et de leur animation en combat alors le script de Zeus modifie ces charsets et leur animation, est-il possible de faire cohabiter les deux sans toucher au code actuel ?
Merci de votre réponse !
A bientôt
|
Gari -
posté le 30/10/2020 à 09:09:11 (5901 messages postés)
- | | Bonjour,
Est-ce que tu pourrais essayer les deux scripts et faire le test ? Ce sera plus facile de t'aider ainsi.
AMS Ultimate modifiant les animations sur map et le SBS les animations en combat, il n'y a pas forcément de clash dans les méthodes réécrites à ce niveau, mais il peut y en avoir ailleurs. Si tu rencontres des problèmes, pourras-tu les mentionner ici s'il te plaît ?
|
Silken -
posté le 30/10/2020 à 18:14:20 (7 messages postés)
| | Hello,
Avec la version AMS 1.4.1 et le SBS Tanketai adapté pour RMXP ça à l'air de fonctionner. Je n'ai pas fait de test approfondi, juste démarré mon jeu et lancé un combat. Le déplacement en diagonale est ok (je n'ai pas testé le saut mais j'imagine que ca ira) et le combat en sideview fonctionne également.
Du coup je me suis inquiété pour rien. Maintenant il faut que j'épluche le forum pour paramétrer correctement le SBS car je ne trouve pas toutes les infos dans les différentes config malgré que tout soit bien expliqué.
Merci d'avoir répondu ! Si jamais j'ai un problème qui peut être lié à l'utilisation de ces deux scripts en simultané je vous le dirai.
Bonne soirée !
|
Gari -
posté le 30/10/2020 à 20:13:17 (5901 messages postés)
- | | D'accord ! Si tu veux, il y a la version 1.5 corrigée par Nanaky au-dessus :
- Possibilité d'activer/désactiver le sprint et le saut comme bon vous semble (avant c'était soit activé, soit désactivé pour tout le jeu).
- Correction des noms de dossiers/fichiers contenant des espaces ou caractères spéciaux.
Ca devrait t'éviter des problèmes ^^
|
Gougouts -
posté le 01/11/2020 à 12:35:59 (5 messages postés)
| | Bonjour,
Depuis l'installation de ce script les PNJ peuvent traverser les event.
Y'a t-il un moyen de faire en sorte qu'ils arrêtent de se déplacer quand ils entrent en contact avec un event ?
Merci ^^
|
Gari -
posté le 01/11/2020 à 13:34:36 (5901 messages postés)
- | | Bonjour,
Est-ce que tu utilises d'autres scripts ?
Pense aussi à vérifier que tes héros/events ne soient pas en mode "Traverse Tout" (ça arrive plus vite qu'on ne pense avec "Déplacer événement").
|
Gougouts -
posté le 01/11/2020 à 13:54:30 (5 messages postés)
| | Non, c'est bien AMS Ultimate qui cause ce soucis. Je n'ai que ce script.
J'imagine que l'auteur a du modifié quelque chose pour que les alliés qui nous suis puissent eux aussi traverser les event.
Mais ce qui est embêtant c'est que les autres event peuvent aussi traverser les event maintenant =/
|
Gari -
posté le 01/11/2020 à 15:37:35 (5901 messages postés)
- | | Je viens de tester la démo 1.5 en rajoutant deux event qui entrent en collision, mais ils ne se traversent pas. J'ai aussi testé avec l'option d'activation du suivi, et le partenaire prend bien en compte la passabilité des event.
J'ai aussi essayé sur projet vierge avec la version steam de RM XP, et rien à signaler côté passabilités.
Est-ce que tu peux envoyer des screenshot de ton jeu (avec les event sur l'éditeur), et peut-être un gif pour la traversée s'il te plaît ? Ca nous aidera peut-être à voir ce qui ne va pas, mais à mon avis ça n'a rien à voir avec AMS.
|
Gougouts -
posté le 01/11/2020 à 16:11:55 (5 messages postés)
| | Le PNJ en bas à droite se déplace aléatoirement.
Il n'est pas censé pouvoir traverser les event juste à côté de lui (encadré en bleu).
Ce sont des event vides que j'ai mis pour restreindre les déplacements de ce PNJ.
Sans AMS Ultimate ça fonctionne, mais avec il les traverse =/
|
Gari -
posté le 01/11/2020 à 16:47:18 (5901 messages postés)
- | | J'ai une solution pour ça.
Si tu as remarqué, dans la version sans AMS, seuls les événements ne peuvent pas traverser, le héros le peut. C'est donc plutôt une erreur de RM à la base, vu que par défaut, un événement sans ressource sélectionnée est normalement considéré comme vide (passable).
Pour faire en sorte d'avoir une zone impassable pour les deux (event et héros), il faut que tu configures un tile transparent inutile comme impassable dans le gestionnaire de tilesets (il y en a quelques uns dans les ressources de base, mais si ce n'est pas le cas, tu peux toujours rajouter 32 pixels aux tilesets avec un logiciel graphique).
Une fois fait, tu sélectionnes ledit tile dans ton event, et c'est bon.
|
Gougouts -
posté le 01/11/2020 à 17:37:14 (5 messages postés)
| | Merci pour tes réponses.
Mais comment faire pour que seul mon héros puisse traverser ces événements ?
Je ne souhaite pas que les autres événements puissent les traverser (sauf les alliés qui suivent notre héros).
Il doit y avoir quelque chose à modifier dans le script, mais je ne sais pas quoi, j'ai déjà tout essayé...
|
NanakyTim -
posté le 01/11/2020 à 17:52:55 (23817 messages postés)
| | Pas besoin de configurer un tile transparent, il suffit de donner à ton event l'apparence d'un carreau de ton tileset qui ne soit pas passable et de préciser "opacité : 0".
De ce fait tu auras exactement le même rendu : un event invisible qui bloque la passabilité au héros comme aux autres événements.
Citation: Mais comment faire pour que seul mon héros puisse traverser ces événements ? |
Bonne question. Je vais essayer d'analyser le script et je reviens vers toi.
|
Héros ou Fléau ? Devenez le Roi de Quineroy ! ~ Plongez dans l'univers sombre du Darkans ! ~ Dimens Reis... Allez y faire un tour. ~ Rangez votre chambre ! ~ Avez-vous peur du noir ? ~ Sauvez le futur, en allant dans le passé: BOCALATOR... |
NanakyTim -
posté le 01/11/2020 à 18:19:20 (23817 messages postés)
| | Tu peux ajouter ces lignes que Zeus avait écrasées du script Game_Character, à la ligne 350 de l'AMSU :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| for event in $game_map.events.values
# If event coordinates are consistent with move destination
if event.x == new_x and event.y == new_y
# If through is OFF
unless event.through
# If self is event
if self != $game_player
# impassable
return false
end
# With self as the player and partner graphic as character
if event.character_name != ""
# impassable
return false
end
end
end
end |
Juste après :
1
2
3
4
5
6
7
8
9
10
11
12
13
| def passable?(x, y, d)
new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
return false unless $game_map.valid?(new_x, new_y)
return true if @through
y_plus = change_floor(@x, @y, new_x, new_y, @real_z/128.0, d)
if y_plus == 0
return false unless $game_map.passable?(x, y, d, self)
return false unless $game_map.passable?(new_x, new_y, 10 - d)
else
new_y += y_plus
return false unless $game_map.passable?(new_x, new_y, 0)
end |
Par contre ça rend les events d'alliés non passables (une des nouveautés de l'AMSU). Ils peuvent se retrouver assez gênants. Mais si tu n'utilises pas cette fonctionnalité, ça devrait suffire.
|
Héros ou Fléau ? Devenez le Roi de Quineroy ! ~ Plongez dans l'univers sombre du Darkans ! ~ Dimens Reis... Allez y faire un tour. ~ Rangez votre chambre ! ~ Avez-vous peur du noir ? ~ Sauvez le futur, en allant dans le passé: BOCALATOR... |
Gougouts -
posté le 01/11/2020 à 22:43:32 (5 messages postés)
| | Merci, ça fonctionne ! Merci beaucoup !
Et j'ai réussi à modifier un petit peu le script pour que les alliés puissent eux aussi traverser les évènements ^^
|
NikkiDevil -
posté le 03/02/2021 à 21:42:56 (5 messages postés)
| | Bonjour, j'ai un problème avec la version démo 1.5... quand je parle au PNJ (voir image) Cela me met une erreur... Après vérification, c'est la même chose pour le PNJ qui nous invite à tester la profondeur de map ainsi que celui avec la hauteur des maps. Le problème intervient donc avec l'utilitaire du script. Et tout ça avec le même message d'erreur. (" Script 'AMS Ultimate Configuration' line 1384: NoMethodError occurred. undefined method 'decision_se' for nil:NilClass ")
Comment je pourrais régler ce problème ?
(Si une update de la démo est mise en place, je précise qu'il manque le fichier 'Graphics/Characters/Reï_dir[8]' lorsque l'on parle à ce PNJ (voir image))
(De plus, le terrain dans tutorial hauteur a un petit défaut (voir image) où la tête du Héro n'est plus visible et est caché par le terrain)
En tout cas ce script est incroyable et va beaucoup me servir, merci beaucoup !
|
Gari -
posté le 07/02/2021 à 11:49:08 (5901 messages postés)
- | | Bonjour NikkiDevil !
Merci pour ton post avec retours détaillés, les bugs ont été corrigés, tout devrait être bon maintenant !
Le lien a été modifié sur la page du script (version recommandée).
Merci à Nanaky pour les corrections !
|
NikkiDevil -
posté le 07/02/2021 à 14:49:00 (5 messages postés)
| | Merci beaucoup, je viens de refaire un test et tout semble bien fonctionner !
|
VRP024 -
posté le 22/02/2021 à 05:40:03 (24 messages postés)
| | Beaucoup de choses qui ne sont pas prises en compte, tout est plus ou moins utile mais il y a encore pas mal de bugs et d’incompatibilités. Par contre le script de Krosk est prioritaire.
| |
|
|